правило обращения к соседнему плагину получило дом
Стояло в пяти местах в пяти редакциях: два разных довода, ни в одном месте оба, и три места из пяти молчали о том, что делать при неразрешившемся вызове. Плюс невысказанный инвариант: $CLAUDE_PLUGIN_ROOT ведёт только в свой плагин. Дом — shared/plugin-boundary.md, блок «граница-плагинов», семь помеченных копий. В дом вошло правило, последствия остались на местах вызова: «нет плагина задач — учёт остаётся владельцу» знает только конвейер. Оглавление адресов в CLAUDE.md проекта отклонено — второй дом раскладки, и протухший адрес в нём выходит правдоподобной строкой честной деградации. Сверка адресов уходит машине, записана в TODO разделом 5.
This commit is contained in:
@@ -3299,3 +3299,72 @@ JJJ): у профиля обязан быть один правильный от
|
||||
наоборот — один предмет, разрезанный так, что оба куска нужны одновременно,
|
||||
разрезан неверно.
|
||||
|
||||
|
||||
## 54. Стык плагинов: правило получило дом, адреса остались у владельцев (2026-08-09)
|
||||
|
||||
**АЕАКМ. Вопрос пришёл с другой стороны: ревью опирается на документы проекта,
|
||||
но не должно жёстко предполагать, где файл лежит; напрашивалось оглавление
|
||||
адресов и сводка возможностей скиллов в `CLAUDE.md` проекта.** Отклонено и то и
|
||||
другое, но не потому, что проблемы нет.
|
||||
|
||||
**Оглавление адресов — второй дом раскладки.** Канон жёсток намеренно: пути
|
||||
фиксированы, проект подгоняется под них, и цена этого записана в самом каноне.
|
||||
Указатель в `CLAUDE.md` отменяет ровно эту цену — раскладка получает второе
|
||||
описание, и разойдутся они молча. Здесь молчание особенно дорогое: прогон ревью
|
||||
умеет **честно деградировать**, и протухший адрес попадает прямо в эту машинерию —
|
||||
файл не открылся, в границах покрытия появляется строка «документа в проекте
|
||||
нет», и отчёт выглядит добросовестным. Прямой путь в той же ситуации ломается
|
||||
громче.
|
||||
|
||||
**Сводка возможностей — второй дом описаний.** `description` во фронтматтере это
|
||||
триггер, по нему скилл и выбирается; переписанная руками сводка тех же описаний
|
||||
не сверяется ничем.
|
||||
|
||||
**Настоящий пробел был в другом, и он измерен.** Правило обращения к соседнему
|
||||
плагину стояло в пяти местах в пяти редакциях:
|
||||
|
||||
| Где стояло | Довод | Ветка «не разрешился» |
|
||||
| --- | --- | --- |
|
||||
| `task-pipeline` | устаревшая проектная копия | нет |
|
||||
| `task-batch` | то же | нет |
|
||||
| `review-pipeline` | вшито в пункт про удаление проектных копий | нет |
|
||||
| `openspec` | путём в чужое дерево — никогда | есть |
|
||||
| `canon` | — | есть |
|
||||
|
||||
Два разных довода, и ни в одном месте не было обоих; три места из пяти молчали о
|
||||
том, что делать при неразрешившемся вызове, — то есть о единственном, ради чего
|
||||
правило написано. Плюс невысказанный инвариант: `$CLAUDE_PLUGIN_ROOT` ведёт
|
||||
только в свой плагин, употреблён двадцать раз и нигде не оговорён — а именно он
|
||||
соблазняет дописать `/../av-dev-docs/`.
|
||||
|
||||
**Сделано:** дом `shared/plugin-boundary.md`, блок `граница-плагинов`, семь
|
||||
помеченных копий — четыре скилла конвейера и три скилла канона. В дом вошли
|
||||
полное имя, запрет пути в чужое дерево, ветка «не разрешился» с обязанностью
|
||||
доклада и признак присутствия по заведённому соседом файлу.
|
||||
|
||||
**Разрез, по которому дом наполнялся: правило общее, последствие местное.** «Нет
|
||||
`av-dev-tasks` — учёт остаётся владельцу» знает только конвейер; «нет конвейера —
|
||||
`docs.py` о каталоге `openspec/` молчит» знает только канон. Держи дом
|
||||
последствия — он знал бы наперечёт всех своих потребителей и стал бы вторым
|
||||
каноном.
|
||||
|
||||
**Адреса при этом наружу не поехали.** У них владелец есть: раскладку `docs/`
|
||||
держит канон, каталог задач — плагин задач. `shared/` заводится **только для
|
||||
фактов без владельца**; чужое с владельцем остаётся дома, а сходимость
|
||||
упоминаний в чужих деревьях проверяется машиной — это следующая работа, записана
|
||||
в TODO.
|
||||
|
||||
### Что из этого следует
|
||||
|
||||
179. **Механизм честной деградации превращает протухший адрес в правдоподобный
|
||||
доклад.** Там, где отсутствие источника — законный исход с названной ценой,
|
||||
ошибка адреса неотличима от этого исхода. Значит адрес в таком месте обязан
|
||||
сверяться машиной, а не аккуратностью: единственная альтернатива —
|
||||
ломаться громко, а именно её деградация и убирает.
|
||||
180. **`shared/` — для фактов без владельца, и только.** У адресов владелец есть,
|
||||
и вынести их наружу значило бы отобрать у него его же предмет. Признак
|
||||
верного дома не «нужно нескольким», а «никому из них не принадлежит».
|
||||
181. **Общее правило и его последствия живут порознь.** Правило можно вынести в
|
||||
дом, последствие — нет: оно знает про место, а место про правило знать не
|
||||
обязано. Дом, вобравший последствия, становится реестром потребителей и
|
||||
устаревает быстрее их всех.
|
||||
|
||||
Reference in New Issue
Block a user