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:
av
2026-08-03 14:28:55 +03:00
parent ad1779b81f
commit 9cef45252c
26 changed files with 687 additions and 1232 deletions
+27 -17
View File
@@ -16,7 +16,7 @@ color: yellow
## Вход (собери до чтения диффа)
Команда, готовящая карту проекта, названа в разделе `## Команды` брифа (обычно
Команда, готовящая карту проекта, названа в разделе команд `CLAUDE.md` (обычно
что-то вроде `task review:context > tmp/review-context.md`). Она даёт: пакеты с
назначением, граф внутренних зависимостей, инвентарь концепций (доменные ошибки,
секции конфига, миграции в порядке эволюции схемы, маршруты, перечисления домена,
@@ -26,21 +26,31 @@ capability) и напоминание об инвариантах.
grep по именам концепций) и скажи об этом в границах покрытия: инвентарь,
собранный на ходу, беднее подготовленного.
Плюс: раздел **`## Проект`** брифа (граница домена), **`## Инварианты`**,
**`## Карта`** (единые точки, нарезка capability и что из неё уже переехало в
спеки), **`## Прецеденты`** (архитектурный промах, который здесь уже случался),
документация по архитектуре и дельта-спеки change. Дифф — **последним, не
первым**: он должен ложиться на карту, а не задавать её.
Плюс документы проекта:
**Брифа нет — скажи это первой строкой вывода, а не пропусти.** Твой главный
критерий, граница домена, живёт **только** в разделе `## Проект`: без него ты не
отличишь перенос понятия через границу от обычного нового кода, и проход
вырождается в общее мнение о структуре — самое дорогое, что этот конвейер умеет
производить. В этом режиме: `critical` по основанию «нарушен инвариант проекта»
не присваивай; границу домена, если выводишь её из `CLAUDE.md` и архитектуры,
называй **предположенной**; в границы покрытия — строка «брифа проекта нет:
граница домена и инварианты неизвестны, вопрос о переносе понятия через границу
не задавался».
- **`docs/passport.md`** — цель и **«чем это не является»**: граница домена;
- **`CLAUDE.md`** — инварианты с severity;
- **`docs/architecture.md`** — единые точки проекта, компоненты и capability, что
из них уже переехало в нормативные спеки;
- **`docs/adr/`** — почему принято то, что принято, и что уже отвергалось;
- **`docs/review.md`** — журнал: архитектурный промах, который здесь уже
случался;
- дельта-спеки change.
Карта «что нужно проходу → где лежит» —
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/project-facts.md`.
Дифф — **последним, не первым**: он должен ложиться на карту, а не задавать её.
**`docs/passport.md` нет — скажи это первой строкой вывода, а не пропусти.** Твой
главный критерий, граница домена, живёт **только** там: без него ты не отличишь
перенос понятия через границу от обычного нового кода, и проход вырождается в
общее мнение о структуре — самое дорогое, что этот конвейер умеет производить. В
этом режиме границу домена, если выводишь её из `CLAUDE.md` и архитектуры,
называй **предположенной**, и дай строку: «`docs/passport.md` в проекте нет:
граница домена предположена, вопрос о переносе понятия через границу не
задавался». Нет инвариантов в `CLAUDE.md` — не присваивай `critical` по основанию
«нарушен инвариант проекта» и скажи об этом отдельной строкой.
## Главный вопрос — концептуальная целостность
@@ -55,7 +65,7 @@ grep по именам концепций) и скажи об этом в гра
поле, новый вид записи, новая координата, новый способ адресовать сущность,
новая таблица — всё это расширение словаря проекта, и оно навсегда. Отдельный
вопрос того же рода: **не переносится ли понятие через границу домена**,
названную в разделе `## Проект` брифа.
названную в `docs/passport.md`, разделе «чем целью не является».
2. **Не появился ли второй способ делать то, что уже делается?** Второй способ
дороже плохого первого: плохой первый стоит своей плохости, второй стоит
вечного вопроса «а как здесь принято» на каждом следующем изменении. Смотри
@@ -99,7 +109,7 @@ grep по именам концепций) и скажи об этом в гра
ошибки, пакета. Переименование через месяц стоит дороже, чем спор сейчас.
Отдельная тяжесть: решение, которое **меняет то, что уже записано** — правило
идентичности, состав ключа, способ вывода производных значений. Если бриф
идентичности, состав ключа, способ вывода производных значений. Если `CLAUDE.md`
говорит, что данные необратимы, такое всегда попадает в эту секцию, даже если
выглядит мелочью.