- скилл project-brief: бриф собирается из CLAUDE.md, архитектуры, Taskfile и конвенций и показывается человеку. Раньше единственная инструкция по его созданию лежала внутри шаблона, поэтому деградированный режим был не аварийным, а единственным: critical по основанию «нарушен инвариант» недостижим ни на одной задаче - rebase перенесён внутрь worktree задачи: прежняя форма падала на занятой ветке, и агент уводил весь батч в провалившиеся с ложной причиной - контракт брифа дополнен восемью слотами; проверен заполнением на обоих проектах, незаполнимых нет. Прецедент healthlog вынут из общего charter'а в бриф — там он вмёрз вместе с числами - шов: пайплайн задачу не закрывает и записи учёта не трогает, урожай отдаёт списком, правило остатка — ссылкой на av-dev-tasks - деградированный абзац во всех девяти проходах, вопрос 9 в ops, пространство имён в вызовах, раздел предпосылок
5.8 KiB
Журнал проскочивших дефектов
Артефакт проекта, а не плагина: файл живёт в репозитории (путь — в разделе
## Карта брифа, по умолчанию docs/review-journal.md). Здесь описано, зачем он
и какой формы, потому что без него конвейер не учится: находки закрываются,
причины непоймания теряются, и один и тот же класс проскакивает второй раз.
Что туда попадает
Дефект, который прошёл ревью и всплыл позже. Записывается сразу, а не ретроспективно: со временем теряется не сам факт, а причина непоймания — единственное, ради чего журнал существует.
Реализованные задачи, находки ревью и принятые решения сюда не пишутся: у них есть коммит, спека и задача. Здесь только промахи конвейера.
Отдельно сюда попадают решения о составе прогонов: перестали звать проход, понизили профиль правилом, сузили класс проверяемого. Не потому, что это промах, а потому, что здесь лежит цена: если что-то теперь проскочит, первый вопрос — «не тот ли это класс, который мы перестали проверять».
Каждое такое решение обязано получить строку в брифе — в подразделе
### Перестали проверять сознательно раздела ## Недоступно проверке. Журнал
хранит «почему тогда так решили», бриф — то, во что смотрит каждый прогон.
Решение, оставшееся только в журнале, в границы покрытия не доедет.
Форма записи
## ГГГГ-ММ-ДД — <краткое последствие>
- **Где:** путь:строка либо «конвейер, а не код»
- **Симптом:** как обнаружилось, кем и когда
- **Причина:** что на самом деле было не так
- **Почему не поймали:** какой проход обязан был найти и что ему помешало
- **Что меняем:** правило прохода, шаг гейта, конвенция, пункт брифа — либо
«ничего, цена поимки выше цены дефекта»
Последний пункт важнее остальных. Вывод «ничего не меняем» — законный исход: не всякий дефект стоит того, чтобы усложнять ради него ревью каждой задачи.
Куда ведёт запись
Три адреса, и выбор между ними — половина ценности журнала:
- в бриф проекта — если проход не мог знать факта: объём, характер потока,
что здесь необратимо, какой шаг гейта красит безусловно. Самый частый адрес и
самый дешёвый. Сюда же — воспроизведённый случай (раздел
## Прецеденты: класс, симптом, чем воспроизведён, чем закончилось) и вопрос конкретному проходу, если промах лечится не фактом, а заданным вопросом (раздел## Вопросы к проходам). Прежде чем править charter, проверь, не хватит ли этих двух разделов: charter общий для всех проектов, бриф — про этот. - в конвенции или в правило линтера — если свойство выражается детерминированно (процедура — promote.md).
- в charter прохода — если сломан метод, а не знание. Правка charter'а меняет поведение во всех проектах, поэтому она требует калибровки (calibration.md) и обоснования, почему это не лечится брифом.
Что журнал даёт конвейеру
- пробы для калибровки — реальный проскочивший дефект сильнее синтетического: синтетические смещены в сторону тех, которые уже умеешь придумывать;
- основание для правил конвейера — требование называть запущенные проходы поимённо, отказ от чисел, производных от размера корпуса, и правило последовательного прогона выведены из конкретных записей, а не из общих соображений;
- счётчик обратимости решений — сузили состав проходов и через месяц поймали дефект ровно того класса, который перестали проверять: решение пересматривается фактом, а не спором.