# Работы по итогам разбора Порядок и обоснование — [DECISIONS.md](DECISIONS.md), тема 8. Номера в скобках — следствия оттуда. Замер (шаг 3) — **единственный шаг, который нельзя переставить**: он блокирует переезд jellybit. Всё остальное можно тасовать. ## 0. Предусловие - [x] `git push` — `092d07c..88c5d97`, 17 коммитов ушли на origin (37) - [x] `claude plugin marketplace update av-dev-skills` — клон встал на `88c5d97` и видит `av-dev-pm` и `av-dev-pipeline` ## 1. Репозиторий плагинов ### 1.1 Переименование - [x] `av-dev-tasks` → `av-dev-pm`: каталог, `plugin.json`, `marketplace.json` (18) - [x] пространство имён во всех текстах: `av-dev-tasks:session` → `av-dev-pm:session`, включая ссылку из `task-pipeline` (18) ### 1.2 Канон — единственный дом определения - [x] `av-dev-pm/skills/canon/references/canon.md` — раскладка, роли документов, правило единственного дома. Читают `init`, `canon`, `docs` (AA) - [x] `av-dev-pm/skills/canon/references/changelog.md` — журнал версий канона, версия 1 (26) ### 1.3 Правки существующих скиллов - [x] `tasks`: убрать слот 6 «Команда учёта задач» (33) - [x] `tasks`: путь каталога жёсткий `docs/tasks`, убрать цепочку разрешения (F) - [x] `tasks`: `.tasks.json` → `docs/.pm.json`, там же версия канона и путь миграций (23, 30) - [x] `tasks`: убрать слоты 3 «куда переезжает суть» и 5 «оракулы» — отвечает канон и семантика гейта (тема 4) - [x] `session`: убрать слот 7 и слот 4 «где живёт разбор процесса» (33, K) - [x] `session`: переписать «Стимулы, которые процесс создаёт» — снятая граница выбила опору у трёх защит (19) ### 1.4 Новые скиллы - [x] `init` — интервью по брифу → канон нового проекта (R) - [x] `canon` — `check` / `adopt` / `upgrade`; поглощает скилл `adopt` (R, 21, 24) - [x] `docs` — содержимое канона: ADR из архивного `design.md`, промоут конвенций, запись в `research/` и `review.md`, чистка `architecture.md` (X) - [x] `docs.py` — раскладка, лишние файлы, битые ссылки, версия, плейсхолдеры, маркеры долга; сверки миграции ↔ `database.md` и capability ↔ `architecture.md` (T, 31) ### 1.5 av-dev-pipeline - [x] удалить скилл `project-brief` и `references/{project-brief,brief-template}.md` (13) - [x] снять ветки деградации OpenSpec в трёх местах: `task-pipeline`, `review-pipeline`, `task-batch` (1) - [x] девять charter'ов: разделы брифа → пути канона; `ops`/`adversary`/`reimpl` обязаны сшивать `research/` и `database.md` (14, 15) - [x] `review-pipeline`: убрать бриф, поразрядная деградация по документам (16) - [x] `task-pipeline` шаг 9 → построчный доклад по документам канона (28) - [x] `task-pipeline`/`task-batch`: закрытие задачи вызовом скилла `av-dev-pm:tasks`, слот убрать (32, 33) - [x] `promote.md` шаг 3: перечень механизированного → `conventions/README.md` (29) - [x] описание плагина: «требует OpenSpec» (2) ### 1.6 Прочее - [x] `av-dev-backlog` — пометить устаревшим, переписать описание, чтобы не ловило триггер (Q) - [x] `README.md` маркетплейса — три плагина, канон, установка - [x] `HISTORY.md` — сжать `AGENTIC-TASKS.md` до истории решений (CC) - [x] `REMAINING.md` пересобрать: пункт 2 отменён, четыре вопроса закрыты, калибровка стала обязательной (38) ### 1.7 Линтеры скриптов (тема 9) - [x] `pyproject.toml`: ruff + pyrefly через `uv`, версии прибиты (DD, FF) - [x] запрет внешних зависимостей двумя способами: `banned-api` + пустое окружение pyrefly (EE) - [x] `RUF001`–`RUF003` выключены, `av-dev-backlog` исключён (GG, HH) - [x] починены 27 находок ruff и 14 pyrefly; `os` из `tasks.py` ушёл (40, 41) - [x] раздел «Проверка скриптов» в `README.md` ### 1.8 Ревью двумя проходами (тема 10) - [x] `reopen` берёт текст из `HEAD`, когда коммита удаления ещё нет (JJ) - [x] шаг 11 коммитит учёт вторым коммитом; батч проверяет чистоту дерева (JJ) - [x] фиктивный ключ `tasks.sections` убран из четырёх документов (KK) - [x] `init` пишет конфиг в `docs/.pm.json`; `looks_like_tasks` его читает - [x] урожай спринта заводится до `sprint close`, слаг — из его отчёта - [x] ответ на вопрос опустошает раздел «Вопросы» — во всех трёх местах - [x] путь отчёта триажа переживает архивацию (5 мест) - [x] `review-specs` получил режим 3 — стык после слияния - [x] остальные 12 находок: `sprint.md`, «9а», перечень проектных копий, параллельность в батче, триаж в финальной сверке, триггеры профиля, 8–12 ### 1.9 Ревью зависимостей между плагинами (тема 11) - [x] опоры приёмки названы абстрактно, деградация без конвейера объявлена (MM) - [x] ветка деградации шага 9 ходит в свой `project-facts.md` (NN) - [x] `docs` даёт ветку «конвейера нет» для журнала и промоута - [x] форма журнала дефектов сведена к дому, копия помечена в `changelog.md` - [x] `specs` вернулся в читатели `docs/research/`; дом списка назначен - [x] пайплайн не называет `items/` и `SPRINT.md` — их знает `av-dev-pm` - [x] манифесты объявили `av-dev-pm` опциональным для конвейера (49) ### 1.10 Механическая проверка копий (тема 12) - [x] `scripts/copies.py`: маркеры дома и копии, побайтовая сверка (OO) - [x] строгий id, повторяемый в закрывающем маркере (PP) - [x] помечены два контракта; «когда заводить ADR» сведён к дословному (50) - [x] раздел «Проверка копий правил» в `README.md`, правило — в обоих домах ## 2. healthlog — первая боевая проверка - [ ] `canon adopt`; `docs/backlog/` → `docs/tasks/` - [ ] `architecture.md` 1662 строки → обзор, остаток маркерами (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.md` - [ ] `drafts/` растворить: roadmap → `ROADMAP.md`, conventions-backlog → записи `research` (сырьё: тип есть, «Вопрос» пуст), logical-title-model → ADR (H) - [ ] `docs/backlog/` → `docs/tasks/` - [ ] удалить проектные копии скиллов и агентов (4 из REMAINING) - [x] `av-dev-backlog` удалить из маркетплейса и снять с проекта (тема 30) ## 6. Канон версии 3 — повысить живые проекты (тема 17) Оба проекта стоят на каноне 2 и держат `docs/tasks/PLAN.md`: healthlog 55 задач, jellybit 43. Шаги повышения — [changelog.md](av-dev-pm/skills/canon/references/changelog.md), запись «Версия 3»; делаются скиллом `av-dev-pm:canon` в режиме `upgrade`. - [x] 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`