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