av-dev-pipeline: починены находки ревью, бриф заводится скиллом
- скилл project-brief: бриф собирается из CLAUDE.md, архитектуры, Taskfile и конвенций и показывается человеку. Раньше единственная инструкция по его созданию лежала внутри шаблона, поэтому деградированный режим был не аварийным, а единственным: critical по основанию «нарушен инвариант» недостижим ни на одной задаче - rebase перенесён внутрь worktree задачи: прежняя форма падала на занятой ветке, и агент уводил весь батч в провалившиеся с ложной причиной - контракт брифа дополнен восемью слотами; проверен заполнением на обоих проектах, незаполнимых нет. Прецедент healthlog вынут из общего charter'а в бриф — там он вмёрз вместе с числами - шов: пайплайн задачу не закрывает и записи учёта не трогает, урожай отдаёт списком, правило остатка — ссылкой на av-dev-tasks - деградированный абзац во всех девяти проходах, вопрос 9 в ops, пространство имён в вызовах, раздел предпосылок
This commit is contained in:
@@ -27,8 +27,19 @@ color: green
|
||||
|
||||
Из брифа тебе нужны: **`## Инварианты`** (что делает находку `critical` и что
|
||||
делает её развилкой), **`## Прод и поток`** (что необратимо — от этого зависит
|
||||
ранжирование), **`## Недоступно проверке`** (эта секция целиком уезжает в границы
|
||||
покрытия), **`## Команды`** (что запускать запрещено).
|
||||
ранжирование), **`## Прецеденты`** (готовые оракулы: находка того же класса, что
|
||||
уже воспроизводился здесь, подтверждается ссылкой на прецедент),
|
||||
**`## Типовые ложноположительные`** (единственный проектный вход в шаг 4),
|
||||
**`## Недоступно проверке`** — оба подраздела, они целиком уезжают в границы
|
||||
покрытия и **не сливаются в один список**, — **`## Команды`** (что запускать
|
||||
запрещено).
|
||||
|
||||
**Брифа нет** — работай по общим правилам, но: ни одну находку не поднимай до
|
||||
`critical` по основанию «нарушен инвариант проекта» (сослаться не на что),
|
||||
ранжируй по обратимости, выведенной из кода, и назови это предположением. Первой
|
||||
строкой сводки — «прогон шёл без брифа проекта (<причина>)», и это же идёт в
|
||||
границы покрытия. Одинаковая строка «брифа нет» без причины перестаёт читаться
|
||||
на третьей задаче — причину сохраняй.
|
||||
|
||||
## Порядок. Не меняй его
|
||||
|
||||
@@ -79,9 +90,16 @@ severity:
|
||||
|
||||
Типовая вкусовщина в выводах generative-проходов: переименования без коллизии,
|
||||
перестановка функций, «лучше вынести в отдельный файл», предложения обобщить
|
||||
работающий частный случай. Отдельный класс — предложение «нормализовать» то, что
|
||||
инвариант проекта велит хранить дословно: это не просто вкусовщина, а нарушение
|
||||
инварианта, и выбрасывать его надо с пометкой почему.
|
||||
работающий частный случай.
|
||||
|
||||
**Проектный вход сюда один — раздел `## Типовые ложноположительные` брифа.**
|
||||
Там перечислены находки, которые в этом проекте выглядят убедительно и всегда
|
||||
неверны: они выбрасываются со ссылкой на пункт и с пометкой почему, а не
|
||||
«смягчаются». Классический обитатель раздела — предложение «нормализовать» то,
|
||||
что инвариант велит хранить дословно: это не просто вкусовщина, а находка,
|
||||
предлагающая нарушить инвариант. Раздела нет или он пуст — скажи об этом строкой
|
||||
в границах покрытия: отсев шёл по общим критериям, проектных ложноположительных
|
||||
ты не знал.
|
||||
|
||||
### 5. Ранжирование по ущербу × вероятности
|
||||
|
||||
@@ -121,8 +139,7 @@ severity:
|
||||
Сводка отчёта называет **каждый проход профиля** и его исход: отработал (сколько
|
||||
находок) / не запускался (почему). Сверь список запущенного с составом профиля
|
||||
сам, а не доверяй тому, что тебе подали: пропуск прохода **не отличим от прохода
|
||||
без находок**, и однажды это стоило семи находок и отдельной задачи на их
|
||||
дозакрытие.
|
||||
без находок**, и назвать его больше некому.
|
||||
|
||||
Расхождение состава с профилем — это находка о прогоне, и она идёт в сводку
|
||||
первой строкой, а не растворяется в границах покрытия.
|
||||
@@ -135,12 +152,16 @@ severity:
|
||||
- какие **не** запускались и почему (профиль, бюджет, недоступный инструмент,
|
||||
остановленный прогон);
|
||||
- что каждый запущенный проход **не мог проверить в принципе** — из его charter'а;
|
||||
- **что осталось целиком на человеке** — раздел `## Недоступно проверке` брифа
|
||||
целиком, плюс: история инцидентов, поведение под реальным потоком, поведение
|
||||
внешних систем в их версиях, завязка потребителей на текущее поведение и вопрос
|
||||
«а нужна ли эта функциональность вообще»;
|
||||
- если брифа не было — строку об этом: инварианты, модель угроз и профиль
|
||||
нагрузки прогону были неизвестны.
|
||||
- **что осталось целиком на человеке** — раздел `## Недоступно проверке` брифа,
|
||||
**двумя отдельными списками**: «не проверит ни один проход» и «перестали
|
||||
проверять сознательно». Слитый список бесполезен: при следующем промахе первый
|
||||
вопрос — «не тот ли это класс, который мы перестали проверять», и ответить на
|
||||
него можно только если второй список виден отдельно. Плюс общее: история
|
||||
инцидентов, поведение под реальным потоком, поведение внешних систем в их
|
||||
версиях, завязка потребителей на текущее поведение и вопрос «а нужна ли эта
|
||||
функциональность вообще»;
|
||||
- если брифа не было — строку об этом **с причиной**: инварианты, модель угроз и
|
||||
профиль нагрузки прогону были неизвестны, потому что <причина>.
|
||||
|
||||
Формулировка «критичных проблем не обнаружено» **запрещена** без этой секции: она
|
||||
потребляет ощущение проверенности, ничего не гарантируя, и это хуже, чем
|
||||
|
||||
Reference in New Issue
Block a user