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

69 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 60. Служебный файл зовётся по плагину-владельцу; у задач появилась своя версия формата (2026-08-11)
Файл версии канона звался `docs/.pm.json` — по плагину `av-dev-pm`, который
распался на четыре ещё в [теме 56](56-plugin-and-skill-renames.md) и которого
больше нет. Имя пережило владельца на два месяца и указывало в пустоту: читающий
его искал плагин, о котором в репозитории не осталось ни строки. Переименован в
`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](59-four-subagent-audit.md). Формат
задач при этом менялся — записями 8, 11 и 12 чужого журнала.
**Р210. Число именно своё, а не копия канонического.** Плагин ставится в
одиночку: проект, взявший учёт работ без канона документов, каталога `docs/` не
имеет вовсе, а значит не имеет и версии канона — сверять было бы не с чем. Копия
чужого числа в `tasks.py` была бы вторым домом одной версии и разъехалась бы при
первом же обновлении одного плагина без другого.
**Р211. Переезды, случившиеся до появления числа, задним числом в новый журнал
не переписаны.** Версия 1 — это формат на день её появления; что проекту нужно
было пройти до неё, названо шагом «догнать формат по журналу канона» с
поимёнными признаками отставания (каталог в `docs/tasks/`, живой `SPRINT.md`).
Второй перечень тех же шагов разошёлся бы с первым — это ровно та ошибка, из-за
которой план однажды повторял записи версий 3, 4 и 5 построчно.
**Р212. Конфиг задач стал обязательным.** Раньше он заводился только ради имён,
отличных от умолчания, и проект с умолчаниями жил без файла вовсе. Версия — не
настройка, от которой можно отказаться, поэтому `init` и `adopt apply` пишут его
всегда, а `check` требует числа.
Отдельно стоит сказать, чтобы не спутали при чтении журнала: `.docs.json`
однажды уже был отвергнут — решением [Р6](02-project-doc-canon.md), но **как
указатель путей**. Отвергнут был указатель, а не имя; сегодняшний файл путями
проекта не распоряжается, он объявляет версию и называет то немногое, чего из
раскладки не вывести.
## Что из этого следует
**С200. Имя служебного файла — часть границы плагинов, а не деталь.** Оно
называет владельца, и по нему же владельца узнают. Пережившее владельца имя врёт
дважды: указывает на несуществующее и прячет того, кто файл ведёт на самом деле.
**С201. Версия нужна каждому формату, который живёт в чужом репозитории.** Без
числа «приведён ли проект» не имеет определённого ответа, и отставший каталог
выглядит здоровым до первой команды, которая об него споткнётся.
**С202. Своя версия — у своего плагина, всегда.** Общее число на два плагина
переживает ровно до первого проекта, где поставлен один из них.
**С203. Версию двигают руками, и это не слабость проверки.** Число отвечает на
вопрос «по какой записи повышать», а не «сделаны ли шаги по существу». Машина,
приписывающая недостающее число сама, объявляет проект приведённым к формату,
которого никто не проходил.