правило обращения к соседнему плагину получило дом
Стояло в пяти местах в пяти редакциях: два разных довода, ни в одном месте оба, и три места из пяти молчали о том, что делать при неразрешившемся вызове. Плюс невысказанный инвариант: $CLAUDE_PLUGIN_ROOT ведёт только в свой плагин. Дом — shared/plugin-boundary.md, блок «граница-плагинов», семь помеченных копий. В дом вошло правило, последствия остались на местах вызова: «нет плагина задач — учёт остаётся владельцу» знает только конвейер. Оглавление адресов в CLAUDE.md проекта отклонено — второй дом раскладки, и протухший адрес в нём выходит правдоподобной строкой честной деградации. Сверка адресов уходит машине, записана в TODO разделом 5.
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
# Граница между плагинами
|
||||
|
||||
**Это дом.** Правило обращения к соседнему плагину нужно всем, кто зовёт чужой
|
||||
скилл, — а таких скиллов семь в трёх плагинах, и ни один из трёх правилом не
|
||||
владеет. Поэтому дом стоит снаружи, а плагины везут **копии**, помеченные
|
||||
разметкой `copies.py`.
|
||||
|
||||
Правится **здесь**. Копия, поправленная у себя, — расхождение, а не правка.
|
||||
|
||||
Дом заведён по замеру, а не на всякий случай. К моменту раскола правило стояло в
|
||||
пяти местах в пяти редакциях:
|
||||
|
||||
| Где стояло | Довод | Ветка «не разрешился» |
|
||||
| --- | --- | --- |
|
||||
| `task-pipeline` | устаревшая проектная копия | нет |
|
||||
| `task-batch` | то же | нет |
|
||||
| `review-pipeline` | вшито в пункт про удаление проектных копий | нет |
|
||||
| `openspec` | путём в чужое дерево — никогда | есть |
|
||||
| `canon` | — | есть |
|
||||
|
||||
Два разных довода, и ни в одном месте не было обоих. Три места из пяти молчали о
|
||||
том, что делать, когда вызов не разрешился, — то есть о единственном, ради чего
|
||||
правило и написано.
|
||||
|
||||
**Что в дом не идёт: чем оборачивается отсутствие конкретного соседа.** «Нет
|
||||
`av-dev-tasks` — учёт остаётся владельцу» знает только конвейер; «нет конвейера —
|
||||
`docs.py` о каталоге `openspec/` молчит» знает только канон. Правило общее,
|
||||
последствие местное, и держать последствия здесь значило бы завести дом, который
|
||||
знает про всех своих потребителей.
|
||||
|
||||
<!-- дом: граница-плагинов -->
|
||||
|
||||
Плагины `av-dev` ставятся порознь, и ни один не вправе считать, что сосед на
|
||||
месте.
|
||||
|
||||
**Чужой скилл зовётся полным именем** — `av-dev-docs:canon`,
|
||||
`av-dev-tasks:tasks`, `av-dev-pipeline:review-pipeline`. Короткое имя может
|
||||
разрешиться в устаревшую проектную копию из `.claude/skills/`, и подмены не будет
|
||||
видно ни в докладе, ни в поведении.
|
||||
|
||||
**Путь в дерево чужого плагина не пишется никогда.** `$CLAUDE_PLUGIN_ROOT` ведёт
|
||||
только в свой плагин; вычисленный от него путь к соседу либо не откроется, либо
|
||||
откроет чужую установку. Нужен чужой справочник — зови владеющий им скилл, он
|
||||
прочитает его сам.
|
||||
|
||||
**Вызов не разрешился — плагина в проекте нет.** Это исход, а не поломка: назови
|
||||
строкой доклада, чего теперь не делает никто, и продолжай работу. Молчать нельзя,
|
||||
пропуск неотличим от сделанного; выдумывать обходной путь нельзя тоже.
|
||||
|
||||
**Присутствие узнаётся вызовом или следом в проекте, но не объявлением.** Перечня
|
||||
установленных плагинов проект не ведёт — он разошёлся бы с действительностью
|
||||
молча. Что сосед здесь работал, видно по заведённому им файлу: `docs/.pm.json` —
|
||||
канон, `<каталог задач>/.tasks.json` — задачи, `openspec/config.yaml` — конвейер.
|
||||
|
||||
<!-- /дом: граница-плагинов -->
|
||||
Reference in New Issue
Block a user