Files
dev-skills/decisions/79-healthcheck-trace-moved-into-docs-section.md
T
av 8145b378b2 след сверки: ключ переехал в секцию 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.
2026-08-23 19:35:17 +03:00

5.2 KiB
Raw Blame History

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