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