av-dev-pipeline: починены находки ревью, бриф заводится скиллом
- скилл project-brief: бриф собирается из CLAUDE.md, архитектуры, Taskfile и конвенций и показывается человеку. Раньше единственная инструкция по его созданию лежала внутри шаблона, поэтому деградированный режим был не аварийным, а единственным: critical по основанию «нарушен инвариант» недостижим ни на одной задаче - rebase перенесён внутрь worktree задачи: прежняя форма падала на занятой ветке, и агент уводил весь батч в провалившиеся с ложной причиной - контракт брифа дополнен восемью слотами; проверен заполнением на обоих проектах, незаполнимых нет. Прецедент healthlog вынут из общего charter'а в бриф — там он вмёрз вместе с числами - шов: пайплайн задачу не закрывает и записи учёта не трогает, урожай отдаёт списком, правило остатка — ссылкой на av-dev-tasks - деградированный абзац во всех девяти проходах, вопрос 9 в ops, пространство имён в вызовах, раздел предпосылок
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: review-ops
|
||||
description: "Эксплуатационный проход ревью — пишет постмортем «это упало через неделю на проде» от симптома у владельца сервиса к строке кода. Обязательные вопросы: рост объёма, деградация окружения и внешних зависимостей, повторная и одновременная операция, частичный откат при двух версиях, миграция под живым потоком, отмена контекста на середине, наблюдаемость и тишина, поведение библиотеки и драйвера в вырожденном случае. Формулирует условиями, а не утверждениями — реального профиля нагрузки не знает. Только чтение."
|
||||
description: "Эксплуатационный проход ревью — пишет постмортем «это упало через неделю на проде» от симптома у владельца сервиса к строке кода. Обязательные вопросы: рост объёма, деградация окружения и внешних зависимостей, повторная и одновременная операция, частичный откат при двух версиях, миграция под живым потоком, отмена контекста на середине, наблюдаемость и тишина, поведение библиотеки и драйвера в вырожденном случае, чтение узлом состояния, которое он сам же меняет. Формулирует условиями, а не утверждениями — реального профиля нагрузки не знает. Только чтение."
|
||||
tools: Read, Grep, Glob, Bash
|
||||
model: sonnet
|
||||
color: yellow
|
||||
@@ -30,8 +30,16 @@ color: yellow
|
||||
нет. Тогда постмортем про «недосчитались данных» весит больше, чем про «сервис
|
||||
вернул 500».
|
||||
|
||||
Брифа нет — задавай те же вопросы, но **все** ответы формулируй условиями и
|
||||
скажи в границах покрытия, что профиль эксплуатации неизвестен.
|
||||
Ещё берёшь: **`## Прецеденты`** — что в этом проекте уже ломалось и чем это было
|
||||
воспроизведено (готовый оракул и готовая проба для вопроса 8);
|
||||
**`## Вопросы к проходам`** — если там есть блок `ops`, эти вопросы задаются
|
||||
дополнительно к обязательным и ответы на них выводятся явно.
|
||||
|
||||
**Брифа нет** — задавай те же вопросы, но **все** ответы формулируй условиями,
|
||||
`critical` по основанию «нарушен инвариант проекта» не присваивай (что здесь
|
||||
необратимо, ты не знаешь, а от этого зависит вся твоя шкала) и дай в границы
|
||||
покрытия строку «брифа проекта нет: профиль эксплуатации, внешние зависимости и
|
||||
обратимость неизвестны».
|
||||
|
||||
## Метод: постмортем от симптома
|
||||
|
||||
@@ -81,11 +89,22 @@ color: yellow
|
||||
8. **Поведение библиотеки, драйвера и настроек — измеряется, а не вычитывается
|
||||
из документации.** Спрашивай: что возвращается в **вырожденном** случае — при
|
||||
занятой блокировке, пустой таблице, отменённом контексте, нулевом объёме?
|
||||
Отличим ли этот ответ от штатного? Прецедент, ради которого пункт существует:
|
||||
контрольная точка журнала под занятой блокировкой возвращала `-1` вместо пары
|
||||
чисел, и сравнение `-1 >= -1` читалось как «журнал разобран целиком» — 1492
|
||||
тика из 5502, найдено экспериментом на стенде, из документации не следовало.
|
||||
Отличим ли этот ответ от штатного? Класс, ради которого пункт существует:
|
||||
библиотека возвращает в вырожденном случае значение, которое код сравнивает
|
||||
тем же оператором, что и штатное, — и отказ читается как успех. Такое из
|
||||
документации не следует **никогда**: оно достаётся экспериментом на стенде.
|
||||
Проверяй на копии или во временном каталоге, рабочие данные не трогай.
|
||||
Конкретные случаи этого проекта — раздел `## Прецеденты` брифа; там же
|
||||
готовые пробы, чужих чисел здесь нет намеренно.
|
||||
9. **Читает ли узел состояние, которое сам же меняет.** Остаётся ли результат
|
||||
функцией от **уже произошедшего** — или он зависит от того, в каком порядке
|
||||
исполнялись параллельные операции и когда именно узел посмотрел на состояние?
|
||||
Ищи: решение принимается по прочитанному значению, которое к моменту записи
|
||||
уже другое; счётчик или курсор, который узел одновременно читает и двигает;
|
||||
ветка, выбираемая по «сколько сейчас лежит в таблице»; повторный прогон,
|
||||
дающий другой результат на тех же входных событиях. Это тот же вопрос, что
|
||||
рубрика задаёт дизайну до кода, — но задать его **на коде** больше некому:
|
||||
рубрика на код не смотрит.
|
||||
|
||||
## Правило формулировки
|
||||
|
||||
|
||||
Reference in New Issue
Block a user