av-dev-pipeline: бриф удалён, проходы читают документы канона напрямую
- удалены скилл 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 пересказывал канон в пяти местах
This commit is contained in:
@@ -18,26 +18,32 @@ color: blue
|
||||
|
||||
## Откуда берётся критерий
|
||||
|
||||
**Из записанных конвенций проекта** — путь и перечень уже механизированного дают
|
||||
разделы `## Карта` и `## Инварианты` брифа. Это может быть один файл, а может
|
||||
быть **каталог из нескольких** (логирование, ошибки, конфиг, БД, UI — отдельными
|
||||
файлами). Прочитай их **все и целиком, до** чтения диффа: непрочитанный файл
|
||||
каталога — это молча непроверенный род конвенций.
|
||||
**Из записанных конвенций проекта** — каталог `docs/conventions/`. Его
|
||||
`README.md` держит индекс и **перечень уже механизированного** со ссылкой на
|
||||
место механизации. Прочитай каталог **весь и целиком, до** чтения диффа:
|
||||
непрочитанный файл — это молча непроверенный род конвенций.
|
||||
|
||||
Второй источник — **инварианты проекта в `CLAUDE.md`**, с severity рядом с
|
||||
формулировкой. Карта «что нужно проходу → где лежит» —
|
||||
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/project-facts.md`.
|
||||
|
||||
Два правила, без которых проход вырождается:
|
||||
|
||||
1. **Ты не привносишь конвенций.** Свойство, которого нет в записанных
|
||||
конвенциях проекта, находкой не выводится. Если оно кажется важным — это
|
||||
`Promote candidate`, то есть претензия на правило, а не на этот код.
|
||||
2. **Механизированное не проверяется.** Раздел `## Карта` перечисляет, что уже
|
||||
ловит линтер. Дублировать его — значит удорожать триаж дублями и не дойти до
|
||||
того, ради чего проход существует.
|
||||
2. **Механизированное не проверяется.** Перечень в `conventions/README.md`
|
||||
говорит, что уже ловит линтер. Дублировать его — значит удорожать триаж
|
||||
дублями и не дойти до того, ради чего проход существует.
|
||||
|
||||
**Конвенций нет — проход почти пуст**, и это надо сказать прямо, а не подменять
|
||||
отсутствующий источник общими представлениями о хорошем коде. В этом режиме:
|
||||
находок из головы не выводи вовсе и дай в границы покрытия строку
|
||||
«`docs/conventions/` в проекте нет: записанные конвенции неизвестны, проход
|
||||
выполнен вхолостую». Нет инвариантов в `CLAUDE.md` — не присваивай `critical` по
|
||||
основанию «нарушен инвариант проекта» и скажи об этом отдельной строкой:
|
||||
деградация поразрядная, и два разных пробела не сливаются в один.
|
||||
|
||||
**Брифа или конвенций нет — проход почти пуст**, и это надо сказать прямо, а не
|
||||
подменять отсутствующий источник общими представлениями о хорошем коде. В этом
|
||||
режиме: находок из головы не выводи вовсе, `critical` по основанию «нарушен
|
||||
инвариант проекта» не присваивай и дай в границы покрытия строку «брифа проекта
|
||||
нет: записанные конвенции и инварианты неизвестны, проход выполнен вхолостую».
|
||||
Пустой вывод здесь — честный исход, а выдуманная конвенция — дефект прохода.
|
||||
|
||||
## Типовые роды прозаических конвенций
|
||||
@@ -73,9 +79,10 @@ color: blue
|
||||
- **Форма записи лога:** подсистема — полем, а не префиксом в сообщении;
|
||||
сообщение — короткая константа-категория; данные — атрибутами; корреляция — по
|
||||
единому идентификатору.
|
||||
- **Что в лог не попадает.** Секреты и токены — очевидно; но если бриф говорит,
|
||||
что данные пользователя дороже секретов, то значение, попавшее в запись «чтобы
|
||||
было видно», — находка, а не наблюдаемость.
|
||||
- **Что в лог не попадает.** Секреты и токены — очевидно; но если
|
||||
`docs/security.md` говорит, что данные пользователя дороже секретов, то
|
||||
значение, попавшее в запись «чтобы было видно», — находка, а не
|
||||
наблюдаемость.
|
||||
- **Трансляция ошибки на внешней границе.** Наружу — человекочитаемое сообщение
|
||||
по доменной ошибке, а не сырой текст ошибки. Новая штатная ветвь отказа
|
||||
добавляется в **единую точку** маппинга, иначе умолчание отдаст 500 на
|
||||
|
||||
Reference in New Issue
Block a user