Files
dev-skills/av-dev/shared/plugin-boundary.md
T
av de12a4d8a3 слияние: три плагина стали одним av-dev, скиллы получили префиксы
Каталоги, агенты и общие дома переехали в av-dev/; скиллы названы по прежнему
плагину — doc-*, task-*, code-*, с двумя смысловыми именами вместо тавтологии:
doc-sync вместо docs, task-track вместо tasks. Манифесты сведены к двум
плагинам. Пространства имён вызовов и пути внутри дерева переписаны машинно;
проза, которая называет прежние плагины отдельными, идёт следующим шагом.
2026-08-13 10:10:51 +03:00

4.8 KiB
Raw Blame History

Граница между плагинами

Это дом. Правило обращения к соседнему плагину нужно всем, кто зовёт чужой скилл, — а таких скиллов больше половины всех, и ни один плагин правилом не владеет. (Числа здесь нет намеренно: оно уже дважды протухало за один день.) Поэтому дом стоит снаружи, а плагины везут копии, помеченные разметкой copies.py.

Правится здесь. Копия, поправленная у себя, — расхождение, а не правка.

Дом заведён по замеру, а не на всякий случай. К моменту раскола правило стояло в пяти местах в пяти редакциях:

Где стояло Довод Ветка «не разрешился»
task-pipeline устаревшая проектная копия нет
task-batch то же нет
review-pipeline вшито в пункт про удаление проектных копий нет
openspec путём в чужое дерево — никогда есть
canon есть

Имена с тех пор изменились — task-pipeline стал resolve, review-pipelinereview, task-batch удалён, — но замер относится к местам, а не к названиям.

Два разных довода, и ни в одном месте не было обоих. Три места из пяти молчали о том, что делать, когда вызов не разрешился, — то есть о единственном, ради чего правило и написано.

Что в дом не идёт: чем оборачивается отсутствие конкретного соседа. «Нет av-dev-tasks — учёт остаётся владельцу» знает только конвейер; «нет конвейера — docs.py о каталоге openspec/ молчит» знает только канон. Правило общее, последствие местное, и держать последствия здесь значило бы завести дом, который знает про всех своих потребителей.

Плагины av-dev ставятся порознь, и ни один не вправе считать, что сосед на месте.

Чужой скилл зовётся полным именемav-dev:doc-canon, av-dev:task-track, av-dev:code-review. Короткое имя может разрешиться в устаревшую проектную копию из .claude/skills/, и подмены не будет видно ни в докладе, ни в поведении.

Путь в дерево чужого плагина не пишется никогда. $CLAUDE_PLUGIN_ROOT ведёт только в свой плагин; вычисленный от него путь к соседу либо не откроется, либо откроет чужую установку. Нужен чужой справочник — зови владеющий им скилл, он прочитает его сам.

Вызов не разрешился — плагина в проекте нет. Это исход, а не поломка: назови строкой доклада, чего теперь не делает никто, и продолжай работу. Молчать нельзя, пропуск неотличим от сделанного; выдумывать обходной путь нельзя тоже.

Присутствие узнаётся вызовом или следом в проекте, но не объявлением. Перечня установленных плагинов проект не ведёт — он разошёлся бы с действительностью молча. Что сосед здесь работал, видно по заведённому им файлу: docs/.docs.json — канон, <каталог задач>/.tasks.json — задачи, openspec/config.yaml — конвейер. Имя файла — имя плагина, который его завёл, и держит он в том числе версию своего формата: у канона документов и у каталога задач они свои и двигаются порознь.