Files
dev-skills/decisions/60-service-file-named-by-owner.md
T
av bf6a173115 журнал решений: разложен по теме на файл, метки решений стали номерами
- DECISIONS.md (4040 строк, 65 тем) → decisions/, файл на тему плюс указатель;
- буквенные метки решений заменены сквозными Р1–Р234, следствия получили
  префикс С при прежних номерах: схема букв выродилась до пятибуквенных и
  сломалась — `АЕАКЛ` была занята и темой 53, и темой 65;
- 42 перекрёстные ссылки переписаны под новые номера и стали живыми; где номер
  означал тему, а слово стояло «решение», формулировка исправлена.
2026-08-13 12:40:56 +03:00

6.5 KiB
Raw Blame History

60. Служебный файл зовётся по плагину-владельцу; у задач появилась своя версия формата (2026-08-11)

Файл версии канона звался docs/.pm.json — по плагину av-dev-pm, который распался на четыре ещё в теме 56 и которого больше нет. Имя пережило владельца на два месяца и указывало в пустоту: читающий его искал плагин, о котором в репозитории не осталось ни строки. Переименован в docs/.docs.json записью 13 журнала канона.

Р207. Правило, которое из этого вынуто и теперь держит все три файла: имя служебного файла — имя плагина, который его завёл. .docs.json — канон, .tasks.json — задачи, openspec/config.yaml — конвейер. По этому же следу скиллы узнают, что сосед в проекте работал, и правило перестало быть просто перечнем — оно выводимо.

Р208. Прежнее имя docs.py не читает. Соблазн «прочитать оба и не мешать людям» здесь стоит дороже, чем везде: по этому числу upgrade решает, какие записи журнала применять, и два дома для него разъехались бы молча в том самом месте, где расхождение и вредно. Вместо совместимости — узнавание: check видит файл под старым именем и печатает готовую команду git mv.

Р209. У каталога задач появилась своя версия формата — ключ tasks в <каталог задач>/.tasks.json и свой журнал версий в скилле av-dev-tasks:tasks. До сих пор её не было вовсе, хотя docs.py в комментарии уверенно ссылался на «свою версию формата» соседа: описание опережало механику ровно так, как описано в следствии С195. Формат задач при этом менялся — записями 8, 11 и 12 чужого журнала.

Р210. Число именно своё, а не копия канонического. Плагин ставится в одиночку: проект, взявший учёт работ без канона документов, каталога docs/ не имеет вовсе, а значит не имеет и версии канона — сверять было бы не с чем. Копия чужого числа в tasks.py была бы вторым домом одной версии и разъехалась бы при первом же обновлении одного плагина без другого.

Р211. Переезды, случившиеся до появления числа, задним числом в новый журнал не переписаны. Версия 1 — это формат на день её появления; что проекту нужно было пройти до неё, названо шагом «догнать формат по журналу канона» с поимёнными признаками отставания (каталог в docs/tasks/, живой SPRINT.md). Второй перечень тех же шагов разошёлся бы с первым — это ровно та ошибка, из-за которой план однажды повторял записи версий 3, 4 и 5 построчно.

Р212. Конфиг задач стал обязательным. Раньше он заводился только ради имён, отличных от умолчания, и проект с умолчаниями жил без файла вовсе. Версия — не настройка, от которой можно отказаться, поэтому init и adopt apply пишут его всегда, а check требует числа.

Отдельно стоит сказать, чтобы не спутали при чтении журнала: .docs.json однажды уже был отвергнут — решением Р6, но как указатель путей. Отвергнут был указатель, а не имя; сегодняшний файл путями проекта не распоряжается, он объявляет версию и называет то немногое, чего из раскладки не вывести.

Что из этого следует

С200. Имя служебного файла — часть границы плагинов, а не деталь. Оно называет владельца, и по нему же владельца узнают. Пережившее владельца имя врёт дважды: указывает на несуществующее и прячет того, кто файл ведёт на самом деле.

С201. Версия нужна каждому формату, который живёт в чужом репозитории. Без числа «приведён ли проект» не имеет определённого ответа, и отставший каталог выглядит здоровым до первой команды, которая об него споткнётся.

С202. Своя версия — у своего плагина, всегда. Общее число на два плагина переживает ровно до первого проекта, где поставлен один из них.

С203. Версию двигают руками, и это не слабость проверки. Число отвечает на вопрос «по какой записи повышать», а не «сделаны ли шаги по существу». Машина, приписывающая недостающее число сама, объявляет проект приведённым к формату, которого никто не проходил.