Ключ [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.
59 lines
5.2 KiB
Markdown
59 lines
5.2 KiB
Markdown
# 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. Гейт репозитория такого класса дефектов не ловит и ловить не может.** Он
|
||
судит форму: фронтматтеры, дословность копий, адреса, номера журнала, рендер
|
||
диаграмм. Согласованность прозы с поведением скрипта — суждение, и добыло его
|
||
ревью, а не хук. Это довод в пользу того, чтобы прогон ревью по трансформации
|
||
шёл не «если останется время», а следом за ней.
|