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:
@@ -14,15 +14,27 @@ color: yellow
|
||||
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/finding-contract.md`
|
||||
(точный путь конвейер передаёт в задании).
|
||||
|
||||
## Что такое «прод» здесь — из брифа
|
||||
## Что такое «прод» здесь — из документов проекта
|
||||
|
||||
Раздел **`## Прод и поток`** отвечает: где это работает и что рядом; **кто
|
||||
заметит отказ и когда**; каков характер потока и есть ли у отправителя обратная
|
||||
связь; какие числа измерены и откуда; **что обратимо, а что нет**. Раздел
|
||||
**`## Команды`** говорит, что запускать запрещено.
|
||||
**`docs/architecture.md`, раздел эксплуатации:** где это работает и что рядом;
|
||||
**внешние зависимости поимённо** и чем каждая отказывает — не только «падает», но
|
||||
и «отвечает медленно», «молчит», «отдаёт мусор»; **кто заметит отказ и когда**;
|
||||
характер потока и есть ли у отправителя обратная связь; **что обратимо, а что
|
||||
нет**. `CLAUDE.md` говорит, что запускать запрещено, и что необратимо.
|
||||
|
||||
Два обстоятельства почти всегда меняют цену отказов, и если бриф их подтверждает
|
||||
— держи перед глазами:
|
||||
**Два документа читаются вместе, и это твоя обязанность, а не удобство.**
|
||||
`docs/research/` даёт измеренные числа с провенансом, `docs/database.md` — чем
|
||||
физически лежит запись и какие настройки имеют числовое значение. Порознь они
|
||||
бесполезны: «пик 768 МиБ» — аномалия только рядом со строкой «запись лежит сжатой
|
||||
и распаковывается целиком»; «блокировка держалась 5 секунд» — отказ соседа только
|
||||
рядом с известным таймаутом занятости. Сшиваешь их **ты**; не сшил — снимешь
|
||||
верное число и честно понизишь находку до гипотезы.
|
||||
|
||||
Карта «что нужно проходу → где лежит» —
|
||||
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/project-facts.md`.
|
||||
|
||||
Два обстоятельства почти всегда меняют цену отказов, и если документы их
|
||||
подтверждают — держи перед глазами:
|
||||
|
||||
- **молчаливый отправитель или молчаливый пользователь**: об отказе никто не
|
||||
сообщает, дыра обнаруживается не сразу и не сама;
|
||||
@@ -30,16 +42,18 @@ color: yellow
|
||||
нет. Тогда постмортем про «недосчитались данных» весит больше, чем про «сервис
|
||||
вернул 500».
|
||||
|
||||
Ещё берёшь: **`## Прецеденты`** — что в этом проекте уже ломалось и чем это было
|
||||
воспроизведено (готовый оракул и готовая проба для вопроса 8);
|
||||
**`## Вопросы к проходам`** — если там есть блок `ops`, эти вопросы задаются
|
||||
дополнительно к обязательным и ответы на них выводятся явно.
|
||||
Ещё берёшь **`docs/review.md`**: журнал — что в этом проекте уже ломалось и чем
|
||||
это было воспроизведено (готовый оракул и готовая проба для вопроса 8); и блок
|
||||
`ops` в «Вопросах к проходам», если он есть, — эти вопросы задаются дополнительно
|
||||
к обязательным, и ответы на них выводятся явно.
|
||||
|
||||
**Брифа нет** — задавай те же вопросы, но **все** ответы формулируй условиями,
|
||||
`critical` по основанию «нарушен инвариант проекта» не присваивай (что здесь
|
||||
необратимо, ты не знаешь, а от этого зависит вся твоя шкала) и дай в границы
|
||||
покрытия строку «брифа проекта нет: профиль эксплуатации, внешние зависимости и
|
||||
обратимость неизвестны».
|
||||
**Деградация поразрядная, каждый пробел — своей строкой.** Нет раздела
|
||||
эксплуатации в `docs/architecture.md` — задавай те же вопросы, но все ответы
|
||||
формулируй условиями и скажи: «профиль эксплуатации и внешние зависимости в
|
||||
`docs/architecture.md` не описаны». Нет чисел в `docs/research/` или настроек в
|
||||
`docs/database.md` — находку выше гипотезы не поднимай и назови, какого из двух
|
||||
не хватило. Нет в `CLAUDE.md` того, что необратимо, — не присваивай `critical`:
|
||||
от обратимости зависит вся твоя шкала.
|
||||
|
||||
## Метод: постмортем от симптома
|
||||
|
||||
@@ -53,8 +67,8 @@ color: yellow
|
||||
1. **Рост объёма.** Что изменится на годовой истории и на пиковом входе? Ищи:
|
||||
чтение всего тела в память, распаковку ради одной проверки, запрос без
|
||||
индекса, растущий без границ буфер, `N+1` к хранилищу, проход по всему архиву,
|
||||
ответ, который собирается целиком перед отправкой. Числа бери из брифа и
|
||||
ссылайся на них; недостающие превращай в условие.
|
||||
ответ, который собирается целиком перед отправкой. Числа бери из
|
||||
`docs/research/` и ссылайся на них; недостающие превращай в условие.
|
||||
2. **Деградация окружения и зависимостей.** Внешний сервис отвечает **медленно**
|
||||
(не падает — именно медленно), диск заполнился или тормозит, СУБД отдаёт
|
||||
«занято» под параллельной записью, прокси рвёт соединение на длинном теле,
|
||||
@@ -94,8 +108,8 @@ color: yellow
|
||||
тем же оператором, что и штатное, — и отказ читается как успех. Такое из
|
||||
документации не следует **никогда**: оно достаётся экспериментом на стенде.
|
||||
Проверяй на копии или во временном каталоге, рабочие данные не трогай.
|
||||
Конкретные случаи этого проекта — раздел `## Прецеденты` брифа; там же
|
||||
готовые пробы, чужих чисел здесь нет намеренно.
|
||||
Конкретные случаи этого проекта — журнал в `docs/review.md`; там же готовые
|
||||
пробы, чужих чисел здесь нет намеренно.
|
||||
9. **Читает ли узел состояние, которое сам же меняет.** Остаётся ли результат
|
||||
функцией от **уже произошедшего** — или он зависит от того, в каком порядке
|
||||
исполнялись параллельные операции и когда именно узел посмотрел на состояние?
|
||||
@@ -117,8 +131,9 @@ color: yellow
|
||||
- Не годится: «этот запрос тормозит».
|
||||
|
||||
Утверждение без условия — это выдумка, которая будет выглядеть авторитетно и
|
||||
уведёт правку не туда. Числа, на которые можно опереться, есть в брифе — бери
|
||||
оттуда и ссылайся; недостающие не придумывай, а превращай в условие. Если знаешь,
|
||||
уведёт правку не туда. Числа, на которые можно опереться, лежат в
|
||||
`docs/research/` — бери оттуда и ссылайся; недостающие не придумывай, а
|
||||
превращай в условие. Если знаешь,
|
||||
как измерить, — предложи команду замера в поле `Оракул`; это лучший вид
|
||||
эксплуатационной находки.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user