healthlog уже переехал на канон 3, а переименование секции я внёс правкой записи версии 3 задним числом — то есть переписал текст, по которому он ехал. Посылка «ни один проект на каноне 3 не стоит» была ложной, решение ШШШ отменено. Запись версии — черновик ровно до первого переехавшего проекта. После этого она история, и любое изменение канона заводит новую версию, даже если меняется одно слово. Проверять дёшево: grep '"canon"' по живым проектам. Дорого обратное — проект, повышенный по тексту, которого больше не существует, невоспроизводим. Запись версии 3 восстановлена дословно (Разработка | Tooling), переименование уехало в версию 4. jellybit, стоящий на каноне 2, прочтёт обе записи подряд и заведёт Разработка, чтобы через шаг переименовать; в шаг версии 3 добавлена оговорка «едешь сразу на 4 — заводи Готово последней и не переставляй дважды». «Готово» переехало вниз, и порядок секций стал каноническим. Достигнутое копится: через год этой секции больше, чем всех остальных вместе, и стоя первой она отодвигает за экран то, ради чего роадмап открывают чаще всего. Порядок проверяет roadmap_lint, переставляет check --fix — вместе с содержимым секций, потому что двигать десяток строк руками это работа, на которой ошибаются. Чужую секцию перестановка не трогает вовсе: её место в порядке неизвестно. Индексы позиций считаются из самого кортежа: ACHIEVED был 0 и стал 3, хардкод пережил бы перестановку молча и сломал бы close. Обкатка нашла два дефекта оформления, оба порождённые самой перестановкой. Отбивка нужна и перед заголовком — сдвиг блоков ставит два заголовка вплотную. Удаление строки индекса оставляет две пустые подряд, и пустоты копятся. Проверка оформления теперь сверяется с самим нормализатором, а не своим набором условий: два описания одного правила разъедутся, и check начнёт молчать о том, что --fix правит. CANON_VERSION = 4 в docs.py, примеры .pm.json в canon.md и skeletons.md. DECISIONS тема 26 (ЭЭЭ, ЮЮЮ, ЯЯЯ, следствия 98–100). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
14 KiB
14 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 → задачи[idea], logical-title-model → ADR (H)docs/backlog/→docs/tasks/- удалить проектные копии скиллов и агентов (4 из REMAINING)
av-dev-backlogудалить из маркетплейса
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:
Готовозаводить последней, секцию сопровождения — сразу с новым именем, переставлять дважды не нужно