Files
dev-skills/TODO.md
T
avandClaude Opus 5 228b6c7eee канон 4: тип записи стал единственной осью и задаёт схему
Осей было две — тип записи (goal/idea/task) и род работы (kind:<род>
тегом), — и ортогональность у них была фальшивой: из двенадцати клеток
произведения законны шесть. У цели род запрещён, у задачи обязателен, у
идеи пуст и на практике не ставится. Плюс «алгоритм работы над записью
такого типа» крепится не к task, а к fix и research, то есть к роду:
ось, к которой пишется алгоритм, и была настоящим типом. Схлопнуто в
одну ось из пяти значений: goal | feature | fix | chore | research.

Тип idea упразднён отдельно и по другой причине: он значил не род
работы, а незаполненность, а состояние типом быть не может — оно
меняется по мере того, как запись дописывают, а тип меняют командой.
Теперь состояние выводится из заполненности: research без раздела
«Вопрос» это сырьё. В спринт не берётся, как и прежняя идея, лежит в
конце категории, отбирается list --raw.

Дом типа — поле меты «Тип» первой строкой, эмодзи в H1 производна.
Прежнее «отдельного поля типа нет: два места для одного факта
разъезжаются» отменено собственным аргументом: он был против префикса
плюс поля, а при переносе дома место остаётся одно. Эмодзи стоит в H1,
а не в строке индекса, чтобы инвариант «заголовок в индексе дословно»
остался нетронутым.

Поле места названо по типу: «Секция» у цели (часть роадмапа, состояние
очереди), «Категория» у задачи (полка домена, куда её вернёт sprint
drop). Одинаковое переименование закрепило бы конфляцию; какое поле
обязательно, решает тип — то самое, ради чего затевалась правка.

Два новых обязательных раздела выросли из правил, которые были записаны
и которые нечем было проверить. «Не воспроизводится — это research, а не
fix» стояло в каноне: теперь есть раздел «Воспроизведение». Приёмка
разведки — «записанный ответ, а не изменённый код» — тоже стояла, но
sprint take требовал от research два-пять критериев с оракулами, и они
писались ради проверки; вместо них «Вопрос» и «Куда ляжет ответ».

Сортировка «по важности» из заметок не взята: она требует, чтобы кто-то
важность поддерживал, а это приоритет, от которого отказалось правило 4.
Взято только «сырьё в конец категории» — этот порядок выводится из типа
и заполненности, а не назначается человеком, и потому проверяется
машиной.

TYPE_SCHEMA кормит и body_template, и schema_verdict: иначе add кладёт
то, на чём sprint take потом откажет. check --fix мигрирует за один
проход — kind:/[goal]/[idea] в поле «Тип», эмодзи в заголовок, «Секция»
→ «Категория», сырьё в конец. Тип, которого неоткуда взять, не
угадывается: feature от chore машина не отличает, такие записи уходят в
НЕОДНОЗНАЧНО поимённо.

Попутно закрыт класс отказов в --fix: шагов, правящих мету, стало пять,
и второй, перечитавший файл с диска, стирал правку первого. Общий
stage() поверх отложенных правок; до этого корректность держалась на том,
что шагов было мало.

Устав на тип отдельным файлом — references/task-<тип>.md, пять штук:
схема, алгоритм, что видит машина и что человек. Агент task-form получил
правило «тип сходится с тем, что в записи написано» с проверяемыми
расхождениями.

Обкатано на демо-наборе из 13 записей: миграция за один проход, второй
прогон даёт ноль починок; fix без «Воспроизведения» и сырьё в спринт не
идут, годная feature берётся.

DECISIONS тема 27 (ААББ–ЛЛММ, следствия 101–104).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 10:00:05 +03:00

15 KiB
Raw Blame History

Работы по итогам разбора

Порядок и обоснование — DECISIONS.md, тема 8. Номера в скобках — следствия оттуда.

Замер (шаг 3) — единственный шаг, который нельзя переставить: он блокирует переезд jellybit. Всё остальное можно тасовать.

0. Предусловие

  • git push092d07c..88c5d97, 17 коммитов ушли на origin (37)
  • claude plugin marketplace update av-dev-skills — клон встал на 88c5d97 и видит av-dev-pm и av-dev-pipeline

1. Репозиторий плагинов

1.1 Переименование

  • av-dev-tasksav-dev-pm: каталог, plugin.json, marketplace.json (18)
  • пространство имён во всех текстах: av-dev-tasks:sessionav-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.jsondocs/.pm.json, там же версия канона и путь миграций (23, 30)
  • tasks: убрать слоты 3 «куда переезжает суть» и 5 «оракулы» — отвечает канон и семантика гейта (тема 4)
  • session: убрать слот 7 и слот 4 «где живёт разбор процесса» (33, K)
  • session: переписать «Стимулы, которые процесс создаёт» — снятая граница выбила опору у трёх защит (19)

1.4 Новые скиллы

  • init — интервью по брифу → канон нового проекта (R)
  • canoncheck / 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)
  • RUF001RUF003 выключены, 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.md 1662 строки → обзор, остаток маркерами (W)
  • после выноса поведения — замерить остаток architecture.md и решить по каталожной форме: жмёт → следующая версия канона для architecture.md и review.md, точка входа README.md (тема 16, GGG, 65; версию 3 занял роадмап с родом работы, тема 17, 68; версию 4 — секция Сопровождение и порядок секций, тема 26)
  • завести security.md с периметром первой строкой (J)
  • review-journal.mdreview.md + настройка конвейера (K, L)
  • conventions.mdconventions/, local-research.mdresearch/ (G)
  • plan.mddocs/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.mddocs/passport.md, обновить
  • docs/specs/{recognition,review-ux,workflow}.md — сверить с capability и удалить как дубли (10)
  • docs/specs/architecture.mddocs/architecture.md, database.mddocs/database.md, jellyfin-layout.mddocs/research/
  • docs/review/journal.mddocs/review.md
  • drafts/ растворить: 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.mdROADMAP.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 …
  • новые обязательные разделы — не задним числом: Воспроизведение у каждого fix и Вопрос + Куда ляжет ответ у каждого research пишутся по мере того, как задача идёт в набор (sprint take без них откажет). Сколько записей готово к взятию, печатает блок здоровья check