Версий было две — канон 14 в docs/.docs.json и формат задач 1 в <каталог задач>/.tasks.json, — и порознь они двигались потому, что плагины ставились порознь. Плагин один, версия одна и начинается с 1; журналы обеих прежних нумераций закрыты и лежат рядом непереписанными, действующий журнал открывается записью о слиянии с перечнем шагов проекту. Формат TOML взят ради комментариев: файл живёт в репозитории проекта, и назначение числа читают из него самого. Отсюда правило записи — скрипты правят строку, а не переписывают файл. Читатель общий, shared/config.py: два разбора одной схемы были бы двумя домами. Каталог задач перестал узнаваться служебным файлом и называется ключом [tasks] dir; узнают его по индексу. Прежние файлы не читаются — увидев их, docs.py и tasks.py называют прежнюю раскладку и зовут upgrade.
6.5 KiB
Журнал версий раскладки
Одна запись на версию. Проект знает свою версию из ключа version в
.av-dev.toml; canon upgrade идёт по записям снизу вверх от версии проекта до
текущей и делает то, что в них названо.
Правило записи: что добавилось, что переехало, что удалено, что сделать
проекту. Без последнего пункта запись бесполезна — по ней и работает
upgrade.
Версия — целое число. Обратной совместимости нет: есть «приведён» и «не приведён». Версия одна на всю раскладку — и на документы канона, и на каталог задач: ведёт их один плагин, и второе число означало бы только вопрос, по какому журналу повышать.
До слияния журналов было два, и нумерация в них своя: changelog-before-merge.md — канон документов, версии 1–14; changelog-tasks-before-merge.md — формат задач, версия 1. Оба закрыты и не переписаны: адрес, верный на день записи, там и остался. Проект, отставший от канона 14, идёт сперва по ним, а потом по этому журналу — порядок назван в записи 1.
Версия 1 — 2026-08-13
Три плагина — av-dev-docs, av-dev-tasks и av-dev-code — слились в один,
av-dev. Раскол делался под раздельную установку: проект мог взять учёт работ
без документов канона или конвейер без обоих. Практикой посылка не подтвердилась
— подмножество не понадобилось ни разу, — а платился раскол помеченными копиями
общих правил и ветками деградации на каждый вызов соседа.
Что переехало в проекте. Служебных файла было два, стал один:
| Было | Стало |
|---|---|
docs/.docs.json, ключ canon |
.av-dev.toml в корне, ключ version |
docs/.docs.json, ключ migrations |
.av-dev.toml, секция [docs] |
<каталог задач>/.tasks.json, ключ tasks |
тот же version: версия теперь одна |
<каталог задач>/.tasks.json, имена частей |
.av-dev.toml, секция [tasks] |
Корень выбран потому, что он есть у обоих: и у проекта без docs/, и у проекта
без каталога задач. Формат TOML — ради комментариев: файл лежит в репозитории
проекта, и назначение числа читают из него самого, а не из документации плагина.
Что переехало в вызовах. Имена скиллов сменили пространство имён и получили
префикс по прежнему плагину: av-dev-docs:canon → av-dev:doc-canon,
av-dev-docs:init → av-dev:doc-init, av-dev-docs:docs → av-dev:doc-sync,
av-dev-docs:healthcheck → av-dev:doc-healthcheck, av-dev-tasks:tasks →
av-dev:task-track, av-dev-tasks:groom → av-dev:task-groom,
av-dev-code:openspec → av-dev:code-openspec, av-dev-code:resolve →
av-dev:code-resolve, av-dev-code:review → av-dev:code-review.
Что сделать проекту.
- Отставшим сперва прежние журналы. Версия канона в
docs/.docs.jsonменьше 14 — пройди записи до 14 по changelog-before-merge.md, и только потом эту. Иначе повышение объявит приведённым то, чего никто не делал. - Завести
.av-dev.tomlв корне репозитория:version = 1, секция[docs]сmigrations, если ключ был, секция[tasks]сdirи теми именами частей, которые в.tasks.jsonотличались от умолчаний. Комментарии пиши свои — файл читает человек. - Удалить
docs/.docs.jsonи<каталог задач>/.tasks.json. Прежние имена не читаются: два дома для одной версии расходятся молча. Пока старые файлы на месте,docs.py checkиtasks.py checkназывают это прежней раскладкой. - Переставить плагины.
av-dev-docs,av-dev-tasksиav-dev-codeудалить,av-devпоставить — команды в README репозитория плагинов. - Поправить гейт проекта. Пути к
docs.py,tasks.pyиopenspec.pyсменились вместе с именами каталогов скиллов:skills/canon/→skills/doc-canon/,skills/tasks/→skills/task-track/,skills/openspec/→skills/code-openspec/. Шаг, который не нашёл скрипт, обязан краснеть, а не пропускаться, — проверь, что он краснеет. - Поправить свои вызовы скиллов — в
CLAUDE.md, вTaskfile, в записях задач: короткое имя разрешится в проектную копию, а прежнее полное не разрешится вовсе. docs.py checkиtasks.py check --dir <каталог задач>— до отсутствия дрейфа.
Чего делать не надо. Переписывать прошлые записи журналов под новые имена. Они описывают состояния, которые были, и адрес, верный на день записи, остаётся верным как свидетельство.