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