- удалены скилл project-brief и контракт брифа; вместо них references/ project-facts.md — карта «что нужно проходу → где лежит» и таблица поразрядной деградации по документам - девять charter'ов, review-pipeline, task-pipeline и task-batch переписаны на пути канона; OpenSpec стал объявленной предпосылкой без ветки деградации - шаг синка документации переписан в построчный доклад, закрытие задачи — вызовом скилла av-dev-pm:tasks вместо строки-слота из CLAUDE.md - по находкам ревью: docs.py звал tasks.py из чужого каталога и выдавал его отказ окружения за дрейф; сверка миграций не видела рабочее дерево; плейсхолдер краснел вместо замечания; сверка capability проходила по совпадению с именем пакета; tasks.py не читал docs/.pm.json; скилл docs пересказывал канон в пяти местах
8.0 KiB
Журнал дефектов
Артефакт проекта, а не плагина: файл живёт в репозитории — docs/review.md,
слот канона av-dev-pm. Здесь описано, зачем он и какой формы, потому что без
него конвейер не учится: находки закрываются, причины непоймания теряются, и один
и тот же класс проскакивает второй раз.
Тот же файл держит настройку конвейера под проект — типовые узлы, типовые ложноположительные, вопросы к проходам, недоступно проверке. Это не соседство по случаю: все четыре раздела — производные калибровки, а журнал им источник.
Что туда попадает
Воспроизведённый дефект — с пометкой проскочил или пойман ревью.
Записывается сразу, а не ретроспективно: со временем теряется не сам факт, а
причина непоймания — единственное, ради чего журнал существует.
Пометка делит журнал на две выборки с разным назначением:
- проскочил — эвал-сет для калибровки конвейера. Реальный промах сильнее синтетической пробы: синтетические смещены в сторону тех, которые уже умеешь придумывать;
- пойман ревью — прецеденты с оракулом. Самая сильная опора, какая у прохода бывает: проектная, воспроизводимая и однажды уже оказавшаяся правдой. Без журнала они остаются только в отчётах триажа в архиве change, где их никто не ищет.
Реализованные задачи и принятые решения сюда не пишутся: у них есть коммит, спека
и docs/adr/.
Отдельно сюда попадают решения о составе прогонов: перестали звать проход, понизили профиль правилом, сузили класс проверяемого. Не потому, что это промах, а потому, что здесь лежит цена: если что-то теперь проскочит, первый вопрос — «не тот ли это класс, который мы перестали проверять».
Каждое такое решение обязано получить строку в подразделе «Перестали проверять сознательно» раздела «Недоступно проверке» того же файла. Журнал хранит «почему тогда так решили», раздел настройки — то, во что смотрит каждый прогон. Решение, оставшееся только в журнале, в границы покрытия не доедет.
Форма записи
## ГГГГ-ММ-ДД — <краткое последствие> [проскочил|пойман]
- **Где:** путь:строка либо «конвейер, а не код»
- **Симптом:** как обнаружилось, кем и когда
- **Причина:** что на самом деле было не так
- **Чем воспроизведён:** тест, команда, замер — с числами
- **Почему не поймали:** только для проскочивших — какой проход обязан был найти
и что ему помешало
- **Что меняем:** правило прохода, шаг гейта, конвенция, факт в документе
проекта — либо «ничего, цена поимки выше цены дефекта»
Пункт «чем воспроизведён» отличает запись от байки: без него на неё нельзя сослаться как на оракул. Регрессионный тест, написанный вместе с починкой, годится наравне с независимым экспериментом — он исполняемый и падает на старом коде. Слабее он ровно в одном: сформулирован уже зная ответ, и это отмечается словом.
Последний пункт важнее остальных. Вывод «ничего не меняем» — законный исход: не всякий дефект стоит того, чтобы усложнять ради него ревью каждой задачи.
Куда ведёт запись
Три адреса, и выбор между ними — половина ценности журнала:
- в документ проекта — если проход не мог знать факта. Адрес зависит от рода
факта, и карта их всех — project-facts.md: объём и
измеренное число →
docs/research/; настройка хранилища →docs/database.md; что необратимо и какой шаг гейта красит безусловно →CLAUDE.md; периметр и недоверенный вход →docs/security.md. Вопрос конкретному проходу, если промах лечится не фактом, а заданным вопросом, → раздел «Вопросы к проходам» того жеdocs/review.md. Самый частый адрес и самый дешёвый. Прежде чем править charter, проверь, не хватит ли факта или вопроса: charter общий для всех проектов, документ — про этот. - в конвенции или в правило линтера — если свойство выражается детерминированно (процедура — promote.md).
- в charter прохода — если сломан метод, а не знание. Правка charter'а меняет поведение во всех проектах, поэтому она требует калибровки (calibration.md) и обоснования, почему это не лечится фактом в документе проекта.
Что журнал даёт конвейеру
- пробы для калибровки — выборка по пометке
проскочил; - готовые оракулы — выборка по пометке
пойман ревью: находка того же класса подтверждается ссылкой на запись, а не рассуждением; - основание для правил конвейера — требование называть запущенные проходы поимённо, отказ от чисел, производных от размера корпуса, и правило последовательного прогона выведены из конкретных записей, а не из общих соображений;
- счётчик обратимости решений — сузили состав проходов и через месяц поймали дефект ровно того класса, который перестали проверять: решение пересматривается фактом, а не спором.