Дом shared/plugin-boundary.md переехал в shared/absence.md: отсутствовала всё это время не установка плагина, а часть раскладки проекта, и узнавалась она следом на диске. Перечень внешнего сократился до двух — opsx и av-dev-git. Ветки «плагина нет» переписаны на «этой части в проекте нет»; там, где ветка существовала только ради неразрешимого пути в чужое дерево, она снята вовсе. Внутриплагинные копии языка и словаря сопровождения сняты: два справочника по 213 строк и один по 34 заменены ссылкой на общий дом. Копии остались там, где текст обязан лежать внутри промпта, — в уставах вычитки. Заодно починены пути $CLAUDE_PLUGIN_ROOT и относительные ссылки, разъехавшиеся с новыми именами каталогов.
5.0 KiB
Чего может не быть
Это дом. Правило нужно почти каждому скиллу: любой приходит в проект, где
может не оказаться ни документов канона, ни каталога задач, ни openspec/, а
рядом может не стоять внешний плагин, которого он ждёт. Ни один скилл правилом
не владеет, поэтому дом стоит в shared/, а скиллы везут копии, помеченные
разметкой copies.py.
Правится здесь. Копия, поправленная у себя, — расхождение, а не правка.
До слияния правило называлось «граница плагинов» и говорило о соседе:
av-dev-docs, av-dev-tasks и av-dev-code ставились порознь, и каждый обязан
был пережить отсутствие двоих. Плагин теперь один, а правило осталось, и не по
инерции: отсутствовала всё это время не установка, а раскладка проекта, и
узнавалась она следом на диске, а не перечнем плагинов. Перечень того, чего
может не быть, стал короче на три имени — механика не изменилась вовсе.
Заведено правило по замеру: к первому расколу оно стояло в пяти местах в пяти редакциях, и три из пяти молчали о том, ради чего написано, — что делать, когда недостающее обнаружено.
Скилл не вправе считать раскладку проекта полной. Части заводятся порознь и живут порознь; каждая узнаётся своим следом:
| Чего нет | Как видно | Чего теперь не делает никто |
|---|---|---|
| раскладка av-dev | нет .av-dev.toml в корне |
проект под процесс не заводился; версии нет, настроек нет |
| документы канона | нет docs/ |
проектную конкретику брать неоткуда — темы, инварианты, прецеденты |
| учёт работ | нет каталога задач | запись остаётся владельцу: назови её текстом в докладе |
| источник требований | нет openspec/config.yaml |
цикл SDD не запускается: спеки не с чем сверять |
Свой скилл зовётся полным именем — av-dev:doc-canon, av-dev:task-track,
av-dev:code-review. Короткое имя может разрешиться в устаревшую проектную
копию из .claude/skills/, и подмены не будет видно ни в докладе, ни в
поведении.
Внешний плагин может не стоять. Их два: opsx:* — цикл SDD, и
av-dev-git:commit — сообщения коммитов. Путь в дерево чужого плагина не
пишется никогда: $CLAUDE_PLUGIN_ROOT ведёт только в своё дерево, а
вычисленный от него путь к соседу либо не откроется, либо откроет чужую
установку. Нужен чужой справочник — зови владеющий им скилл, он прочитает его
сам.
Отсутствие — исход, а не поломка. Назови строкой доклада, чего теперь не делает никто, и продолжай работу. Молчать нельзя: пропуск неотличим от сделанного. Выдумывать обходной путь нельзя тоже.
Присутствие узнаётся следом в проекте, а не объявлением. Перечня того, что здесь заведено, проект не ведёт — он разошёлся бы с действительностью молча.
Что в дом не идёт: чем именно оборачивается нехватка у тебя. «Нет каталога
задач — учёт остаётся владельцу» знает конвейер; «нет openspec/ — docs.py
о каталоге молчит» знает канон. Правило общее, последствие местное, и держать
последствия здесь значило бы завести дом, который знает про всех своих
потребителей.