след сверки: ключ переехал в секцию docs, конфиг больше не отвергается

Ключ [healthcheck] last, заведённый вчера темой 78, роняли оба скрипта
плагина: верхний уровень .av-dev.toml стережёт TOP_KEYS в shared/config.py,
и неизвестный ключ там — отказ кодом 3. Первый же прогон сверки сделал бы
нерабочими canon check/adopt/upgrade, весь task-track и гейт проекта.

След живёт теперь ключом healthcheck_last в секции [docs] — по смыслу
(настройки проверок документов) и по цене (правка одной константы DOCS_KEYS
в docs.py, общий читатель не тронут). Воспроизведено до и после: docs.py и
tasks.py конфиг с ключом принимают.

Корень был не в описке, а в ложном обещании канона «неизвестный ключ docs.py
игнорирует» — оно старше темы 78, и на него опёрлись, не открыв скрипт.
Обещание снято, на его месте правило: новый ключ заводится правкой константы
скрипта-владельца, и только потом попадает в канон.

Журнал — тема 79.
This commit is contained in:
av
2026-08-23 19:35:17 +03:00
parent a4bc9191e7
commit 8145b378b2
6 changed files with 105 additions and 15 deletions
@@ -0,0 +1,58 @@
# 79. След сверки переехал в секцию docs; ключ верхнего уровня ронял скрипты (2026-08-23)
## Что было
Тема 78 завела след сверки документов ключом `last` в секции `[healthcheck]`
файла `.av-dev.toml`. Ревью трансформации — три прохода по скиллам и документам —
нашло, что такого ключа не переживает ни один скрипт плагина.
Проверено запуском, а не рассуждением. В проекте с `[healthcheck] last` команда
`docs.py check` печатает `ОТКАЗ: .av-dev.toml: неизвестные ключи верхнего уровня:
healthcheck` и выходит кодом 3; `tasks.py check` — то же самое. Верхний уровень
файла стережёт `shared/config.py` константой `TOP_KEYS`, и неизвестный ключ там —
**отказ**, а не пропуск. То есть первый же прогон сверки сделал бы нерабочими
`canon check/adopt/upgrade`, весь `task-track` вместе с закрытием задачи и гейт
проекта, который их зовёт.
**Корень — не описка, а ложное обещание документа.** Раздел `.av-dev.toml` в
каноне утверждал: «неизвестный ключ `docs.py` игнорирует». Утверждение было
неверным и старше темы 78; при проектировании следа опёрлись на него и скрипт не
открыли, хотя докстринг `check_keys` говорит прямо обратное: «неизвестный ключ —
отказ, а не безмолвный пропуск».
## Решено
**Р319. След живёт ключом `healthcheck_last` в секции `[docs]`.** Секция досталась
ему по смыслу: `[docs]` — настройки проверок документов, а сверка документов и
есть такая проверка. Своя секция верхнего уровня стоила бы правки общего читателя
`shared/config.py` и превратила бы файл, объявленный «версией и настройками», в
хранилище состояния.
**Р320. Новый ключ `.av-dev.toml` заводится правкой константы скрипта-владельца,
и только потом появляется в каноне.** Порядок именно такой, а не обратный:
владелец ключа — тот скрипт, чья константа его перечисляет (`TOP_KEYS` в
`shared/config.py`, `DOCS_KEYS` в `docs.py`, свой список в `tasks.py`).
**Р321. Канон приведён к скрипту, а не скрипт к канону.** Отказ кодом 3 —
поведение верное: ключ, положенный не в ту секцию, при молчаливом пропуске не
значит ничего, проверка объявляет себя неприменимой, отчёт выходит зелёным, и на
месте настройки оказывается тишина. Ложное обещание снято, на его месте — правило
Р320 и названная цена этой ошибки.
## Следствия
**С282. Версия раскладки не двигается.** Ключ необязательный и заводится сам
первым прогоном сверки; проекту делать нечего, а запись журнала версий нужна ради
пункта «что сделать проекту».
**С283. Правило «своей прозе здесь верить нельзя» распространяется и на
собственную документацию плагина.** Оно написано про возврат агента, но работает
шире: утверждение документа о поведении скрипта проверяется **запуском скрипта**,
и стоит эта проверка одной команды. Здесь её не сделали, и цена вышла в рабочую
поломку у всякого, кто позвал бы сверку.
**С284. Гейт репозитория такого класса дефектов не ловит и ловить не может.** Он
судит форму: фронтматтеры, дословность копий, адреса, номера журнала, рендер
диаграмм. Согласованность прозы с поведением скрипта — суждение, и добыло его
ревью, а не хук. Это довод в пользу того, чтобы прогон ревью по трансформации
шёл не «если останется время», а следом за ней.
+1
View File
@@ -130,3 +130,4 @@
| 76 | [Лёгкий проход в цикле, тяжёлые — в отдельном скилле](76-proof-in-cycle-deep-review-apart.md) | 2026-08-23 |
| 77 | [Цикл задачи проверяет механику; метки сняты](77-cycle-checks-mechanics-labels-dropped.md) | 2026-08-23 |
| 78 | [Хвост задачи: отражение молча, новое — по слову](78-tail-reflection-silent-new-by-word.md) | 2026-08-23 |
| 79 | [След сверки переехал в секцию docs; ключ верхнего уровня ронял скрипты](79-healthcheck-trace-moved-into-docs-section.md) | 2026-08-23 |