Тема 33 сняла самую большую разовую статью расхода, но не тронула главную — частоту. Меряющая пара стояла в standard, то есть на большинстве задач, и именно она делала прогон долгим: два прохода держат машину, идут цепочкой и доказывают находки запуском. Цель разбора названа прямо: лучше поправить в следующей задаче, чем держать одну два часа. adversary и ops переехали в wide. Стадия осталась самой урожайной за всю историю замеров — пять из семи выживших находок дозапуска и единственная находка про молчаливый старт отката, — но её ценность оплачивается на каждой задаче, а получается на немногих. Решение по цене, не по ценности. Заведён review-basics: мелкая осадка двух тяжёлых проходов, без единого запуска. Стоит только в standard. Восемь вопросов, на которые отвечают чтением: таймаут и отказ соседа, идемпотентность и одновременная запись, остановка на середине, частичный откат при двух версиях, наблюдаемость и тишина, очевидный рост объёма, второй способ мимо единой точки (грепом, не картой), что отсюда удалить. Потолок 4 находки, машину не держит, ничего не меряет. Вопрос про частичный откат — не для полноты списка. Без него правило «миграция схемы не поднимает ступень» рассыпалось бы: раньше миграцию разбирал ops, а он теперь наверху. Проход заведён затем, чтобы у standard остался хоть один взгляд на ось времени. Модель у него верхняя, opus, и это не спорит со словом «средний»: усилие режется входом и потолком, а не моделью. Дешёвая модель на опиниативном проходе платит триажем — это записанный замер, отменять его без нового замера нечем. Лестница вышла 4/5/7. Главный выигрыш не в числе проходов, а в том, что из standard ушла цепочка: теперь там гейт, три прохода одним сообщением и триаж — граф плоский, ждать некому. Правило выбора ступени переписано на два вопроса, и объём изменения вошёл в него впервые. Крупное или незнакомое — трогает несколько узлов, переносит ответственность, форму решения нащупывают по ходу — это wide, и он рассчитан на 5-10% задач. Мелкое — один узел, форма очевидна заранее, откат сводится к обратной правке — quick. Всё остальное standard, рабочее умолчание. Раньше ступень выбиралась только по классу изменения и на размер смотреть запрещала; теперь признаков два: класс отвечает за обратимость, объём — за цену разбирательства. Отрицательный тест сохранил прежнюю мудрость в новой рамке: что после мерджа не откатывается обратной правкой — не quick, каким бы маленьким ни был дифф. Три строки миграции идут в standard. Спорный случай решается вниз, и асимметрия объяснена ценой: ошибка в сторону standard стоит находки на следующей задаче, ошибка в обратную — трёх тяжёлых проходов на каждой задаче, выбранной неверно. Сделка записана вместе с обратной связью, иначе это тихая потеря качества. На quick и standard не проверяется ничего, что требует запуска: построенный путь, эксперимент против драйвера, любое число. Это самая крупная граница покрытия конвейера, и она идёт строкой в каждом таком прогоне поимённо. Сигналов о том, что ступень занижена, два: журнал дефектов в docs/review.md и сам basics — он единственный, кто смотрит на дифф целиком на нижних ступенях, и обязан сказать строкой, если задача выглядит крупнее профиля. Побочно: условие профиля design то же самое, так что rubric и architecture на предложении тоже упали до 5-10% задач. Тема 34 в DECISIONS.md, следствия 130-133. Версия канона не поднята; инструкция проекту дописана в пункт 8 записи «Версия 4». Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
16 KiB
16 KiB
Работы по итогам разбора
Порядок и обоснование — DECISIONS.md, тема 8. Номера в скобках — следствия оттуда.
Замер (шаг 3) — единственный шаг, который нельзя переставить: он блокирует переезд jellybit. Всё остальное можно тасовать.
0. Предусловие
git push—092d07c..88c5d97, 17 коммитов ушли на origin (37)claude plugin marketplace update av-dev-skills— клон встал на88c5d97и видитav-dev-pmиav-dev-pipeline
1. Репозиторий плагинов
1.1 Переименование
av-dev-tasks→av-dev-pm: каталог,plugin.json,marketplace.json(18)- пространство имён во всех текстах:
av-dev-tasks:session→av-dev-pm:session, включая ссылку изtask-pipeline(18)
1.2 Канон — единственный дом определения
av-dev-pm/skills/canon/references/canon.md— раскладка, роли документов, правило единственного дома. Читаютinit,canon,docs(AA)av-dev-pm/skills/canon/references/changelog.md— журнал версий канона, версия 1 (26)
1.3 Правки существующих скиллов
tasks: убрать слот 6 «Команда учёта задач» (33)tasks: путь каталога жёсткийdocs/tasks, убрать цепочку разрешения (F)tasks:.tasks.json→docs/.pm.json, там же версия канона и путь миграций (23, 30)tasks: убрать слоты 3 «куда переезжает суть» и 5 «оракулы» — отвечает канон и семантика гейта (тема 4)session: убрать слот 7 и слот 4 «где живёт разбор процесса» (33, K)session: переписать «Стимулы, которые процесс создаёт» — снятая граница выбила опору у трёх защит (19)
1.4 Новые скиллы
init— интервью по брифу → канон нового проекта (R)canon—check/adopt/upgrade; поглощает скиллadopt(R, 21, 24)docs— содержимое канона: ADR из архивногоdesign.md, промоут конвенций, запись вresearch/иreview.md, чисткаarchitecture.md(X)docs.py— раскладка, лишние файлы, битые ссылки, версия, плейсхолдеры, маркеры долга; сверки миграции ↔database.mdи capability ↔architecture.md(T, 31)
1.5 av-dev-pipeline
- удалить скилл
project-briefиreferences/{project-brief,brief-template}.md(13) - снять ветки деградации OpenSpec в трёх местах:
task-pipeline,review-pipeline,task-batch(1) - девять charter'ов: разделы брифа → пути канона;
ops/adversary/reimplобязаны сшиватьresearch/иdatabase.md(14, 15) review-pipeline: убрать бриф, поразрядная деградация по документам (16)task-pipelineшаг 9 → построчный доклад по документам канона (28)task-pipeline/task-batch: закрытие задачи вызовом скиллаav-dev-pm:tasks, слот убрать (32, 33)promote.mdшаг 3: перечень механизированного →conventions/README.md(29)- описание плагина: «требует OpenSpec» (2)
1.6 Прочее
av-dev-backlog— пометить устаревшим, переписать описание, чтобы не ловило триггер (Q)README.mdмаркетплейса — три плагина, канон, установкаHISTORY.md— сжатьAGENTIC-TASKS.mdдо истории решений (CC)REMAINING.mdпересобрать: пункт 2 отменён, четыре вопроса закрыты, калибровка стала обязательной (38)
1.7 Линтеры скриптов (тема 9)
pyproject.toml: ruff + pyrefly черезuv, версии прибиты (DD, FF)- запрет внешних зависимостей двумя способами:
banned-api+ пустое окружение pyrefly (EE) RUF001–RUF003выключены,av-dev-backlogисключён (GG, HH)- починены 27 находок ruff и 14 pyrefly;
osизtasks.pyушёл (40, 41) - раздел «Проверка скриптов» в
README.md
1.8 Ревью двумя проходами (тема 10)
reopenберёт текст изHEAD, когда коммита удаления ещё нет (JJ)- шаг 11 коммитит учёт вторым коммитом; батч проверяет чистоту дерева (JJ)
- фиктивный ключ
tasks.sectionsубран из четырёх документов (KK) initпишет конфиг вdocs/.pm.json;looks_like_tasksего читает- урожай спринта заводится до
sprint close, слаг — из его отчёта - ответ на вопрос опустошает раздел «Вопросы» — во всех трёх местах
- путь отчёта триажа переживает архивацию (5 мест)
review-specsполучил режим 3 — стык после слияния- остальные 12 находок:
sprint.md, «9а», перечень проектных копий, параллельность в батче, триаж в финальной сверке, триггеры профиля, 8–12
1.9 Ревью зависимостей между плагинами (тема 11)
- опоры приёмки названы абстрактно, деградация без конвейера объявлена (MM)
- ветка деградации шага 9 ходит в свой
project-facts.md(NN) docsдаёт ветку «конвейера нет» для журнала и промоута- форма журнала дефектов сведена к дому, копия помечена в
changelog.md specsвернулся в читателиdocs/research/; дом списка назначен- пайплайн не называет
items/иSPRINT.md— их знаетav-dev-pm - манифесты объявили
av-dev-pmопциональным для конвейера (49)
1.10 Механическая проверка копий (тема 12)
scripts/copies.py: маркеры дома и копии, побайтовая сверка (OO)- строгий id, повторяемый в закрывающем маркере (PP)
- помечены два контракта; «когда заводить ADR» сведён к дословному (50)
- раздел «Проверка копий правил» в
README.md, правило — в обоих домах
2. healthlog — первая боевая проверка
canon adopt;docs/backlog/→docs/tasks/architecture.md1662 строки → обзор, остаток маркерами (W)- после выноса поведения — замерить остаток
architecture.mdи решить по каталожной форме: жмёт → следующая версия канона дляarchitecture.mdиreview.md, точка входаREADME.md(тема 16, GGG, 65; версию 3 занял роадмап с родом работы, тема 17, 68; версию 4 — секцияСопровождениеи порядок секций, тема 26) - завести
security.mdс периметром первой строкой (J) review-journal.md→review.md+ настройка конвейера (K, L)conventions.md→conventions/,local-research.md→research/(G)plan.md→docs/tasks/ROADMAP.md(E)- завести
docs/adr/ CLAUDE.md: severity инвариантов, семантика гейта, убрать раздел «Процесс» (M, N)docs.py checkвtask gate(V)- почистить
openspec/config.yaml(C) - удалить проектные копии:
.claude/skills/healthlog-{task,review}-pipelineи девять.claude/agents/healthlog-review-*.md— они прошлого поколения и после переезда указывают наdocs/conventions.md,docs/local-research.md,docs/review-journal.md, которых уже не будет
3. Калибровка — блокирует шаг 5
- замер на четырёх находках healthlog: скелет из
null, откат бинаря, канонизация в транзакции,-1 >= -1(1 из REMAINING, 14)
4. Обкатка
- один-два спринта healthlog на новом процессе
5. jellybit
BRIEF.md→docs/passport.md, обновитьdocs/specs/{recognition,review-ux,workflow}.md— сверить с capability и удалить как дубли (10)docs/specs/architecture.md→docs/architecture.md,database.md→docs/database.md,jellyfin-layout.md→docs/research/docs/review/journal.md→docs/review.mddrafts/растворить: roadmap →ROADMAP.md, conventions-backlog → записиresearch(сырьё: тип есть, «Вопрос» пуст), logical-title-model → ADR (H)docs/backlog/→docs/tasks/- удалить проектные копии скиллов и агентов (4 из REMAINING)
av-dev-backlogудалить из маркетплейса и снять с проекта (тема 30)
6. Канон версии 3 — повысить живые проекты (тема 17)
Оба проекта стоят на каноне 2 и держат docs/tasks/PLAN.md: healthlog 55 задач,
jellybit 43. Шаги повышения — changelog.md,
запись «Версия 3»; делаются скиллом av-dev-pm:canon в режиме upgrade.
- healthlog:
PLAN.md→ROADMAP.md, ссылки,"canon": 3— сделано, лежит в рабочем дереве проекта некоммитнутым - jellybit: то же
- род работы и раздел «Затрагивает» — не задним числом: сперва то, что
идёт в ближайший набор (
sprint takeбез них откажет), остальное по ходу переоценки (PPP) - секции роадмапа:
порядок→Запланировано,темы→Направления, завестиГотовоиСопровождение; прозаические разделы healthlog («Что уже пройдено», «Почему в таком порядке») разложить — звенья строками вГотово, обоснование очереди прозой внутриЗапланировано(тема 19, 80).checkтеперь называет чужую секцию ошибкой, так что шаг обязателен - переформулировать цели ответом на «что приложение будет уметь»; цели не
про приложение («Процесс и качество разработки» в jellybit) — в
Сопровождение check --fixна обоих: поднимет написание канонических секций, поставит отбивку после заголовков и сведёт секцию в мете файлов с заголовками. Секции беклога переименовать руками — имена выбирал проект (тема 20, ККК)- заголовки задач в форму действия — не задним числом: по мере попадания
задачи в работу.
checkпечатает их число,task-formпредложит формулировки пачкой (тема 20, ЕЕЕ)
Канон 4 — сверх того (changelog, запись «Версия 4»):
- healthlog:
## Разработка→## Сопровождение, поле «Секция» в целях этой секции,check --fix(переставитГотововниз и поправит отбивку),"canon": 4 - jellybit едет сразу на 4:
Готовозаводить последней, секцию сопровождения — сразу с новым именем, переставлять дважды не нужно - типы:
check --fixпереведётkind:/[goal]/[idea]в поле «Тип», снимет тег, поставит эмодзи, переименует «Секция» → «Категория» у задач и снесёт сырьё в конец категорий — за один проход, вместе с порядком секций - разобрать
НЕОДНОЗНАЧНОпосле--fix: записи без типа (заведены до появления рода работы) машина не угадывает —edit <слаг> --type … - имена файлов:
docs.py checkназовёт кириллицу, не-kebab-case и форму имени ADR. Переименование ADR — перенос ссылок одним проходом: слаг стоит вadr/README.md, вarchitecture.mdи в чужих документах - первый прогон
doc-consistencyна живом проекте — правило единственного дома до сих пор не проверял никто, урожай ожидается крупный; разбирать порциями doc-code-drift— на ближайшей сессии между спринтами, с разделом запретовCLAUDE.mdна входе- новые обязательные разделы — не задним числом:
Воспроизведениеу каждогоfixиВопрос+Куда ляжет ответу каждогоresearchпишутся по мере того, как задача идёт в набор (sprint takeбез них откажет). Сколько записей готово к взятию, печатает блок здоровьяcheck docs/review.md, «Триггеры профиля» — переписать целиком: снести перечень мест дляdeep(профиль упразднён), а оставшийся перевести на новое правило —wideэто крупное или незнакомое изменение, 5–10% задач, плюс отдельный список мелкого дляquick. Там же две честные строки в «перестали проверять сознательно»: форма решения (снят проход независимой реализации) и всё, что требует запуска (меряющие проходы только вwide)