av-dev-pipeline стал av-dev-code, review-pipeline — review

Имя описывало устройство, а не предмет: «пайплайн» говорит, что внутри
конвейер, — а плагин занят кодом по задачам, и с появлением чекпоинтов
он уже не конвейер в чистом виде. Набор имён стал параллельным:
docs / tasks / code / git, каждое называет материал.

Заодно review-pipeline стал review — слово ушло из плагина целиком, а
не наполовину; скиллы выровнялись: resolve / review / openspec.

Журнал версий канона переписан вместе со всеми, DECISIONS.md — нет.
Разрез по типу высказывания, а не файла: наблюдение и причина
неприкосновенны, предписание и адрес обязаны оставаться исполнимыми.
Запись версии 10 велит «проверить, что плагин av-dev-pipeline
установлен» — проект, дошедший до неё, выполнил бы невыполнимое.
This commit is contained in:
av
2026-08-09 15:43:03 +03:00
parent c5e6883461
commit 53cf6baedf
40 changed files with 145 additions and 109 deletions
+2 -2
View File
@@ -16,8 +16,8 @@
"description": "Задачи и цели каталогом markdown-файлов, у каждой записи тип, и тип задаёт её схему. Спринт под одну цель, ритуал между спринтами, проверка согласованности скриптом tasks.py. Задача выполняется чем угодно: пайплайна плагин не требует и сам его не зовёт."
},
{
"name": "av-dev-pipeline",
"source": "./av-dev-pipeline",
"name": "av-dev-code",
"source": "./av-dev-code",
"description": "Решение одной задачи от постановки до закрытия: цикл SDD с чекпоинтом объяснения после ревью дизайна, у исследовательской задачи — ещё и чекпоинт вариантов до первого требования. Конвейер ревью с обязательным триажем. Требует OpenSpec. Задача принимается и обычным текстом; плагины av-dev-docs и av-dev-tasks опциональны — первый даёт документы канона для проходов ревью, второй учёт задач, без них прогон деградирует поразрядно и говорит об этом."
},
{
+36
View File
@@ -3460,3 +3460,39 @@ change нет — берём источником актуальные спек
187. **Послабление, введённое ради одного потребителя, уходит вместе с ним.**
Исключение переживает своего заказчика и выглядит общим правилом; удаляя
потребителя, ищи его исключения — они и есть настоящий хвост.
## 56. `av-dev-pipeline``av-dev-code`, `review-pipeline``review` (2026-08-09)
**АЕАКО. Имя описывало устройство, а не предмет.** «Пайплайн» говорит, что внутри
конвейер, — а плагин занят кодом по задачам, и после появления чекпоинтов он уже
не конвейер в чистом виде: между остановками автоматика, на остановках разговор.
**Набор имён стал параллельным, и это довод сам по себе:** `docs` / `tasks` /
`code` / `git` — каждое называет **материал**, которым плагин занят. Прежнее имя
выбивалось: три существительных и одна метафора устройства. По той же причине
отвергнут `av-dev-solve` — глагол в ряду существительных, плюс заикание в главном
вызове (`solve:resolve`), — и `av-dev-work`: «работы» в этом репозитории уже
значат конкретное (цели и задачи роадмапа, секция «Сопровождение»), и имя начало
бы спорить со словарём.
Заодно `review-pipeline` стал `review`: слово «пайплайн» ушло из плагина целиком,
а не наполовину, и скиллы выровнялись — `resolve` / `review` / `openspec`.
**Журнал версий канона переписан вместе со всеми, и это не нарушение правила «не
переписываем задним числом».** Разрез проходит не по типу файла, а по типу
высказывания. Наблюдение и причина — неприкосновенны: их правка есть
фальсификация. **Предписание и адрес обязаны оставаться исполнимыми**: запись
версии 10 велит «проверить, что плагин `av-dev-pipeline` установлен», и проект,
дошедший до неё, выполнит невыполнимое. `DECISIONS.md` при этом не тронут — в нём
нет предписаний проекту, только записи о принятых решениях; там прежнее имя
верно, потому что описывает состояние на дату записи.
### Что из этого следует
188. **Имя плагина называет материал, а не устройство.** Устройство меняется —
конвейер обзавёлся остановками, — а материал остаётся. Имя по устройству
протухает первым и при этом выглядит осмысленным.
189. **Журнал не переписывается в наблюдениях и обязан оставаться исполнимым в
предписаниях.** Правило «не задним числом» защищает от подделки фактов, а не
от починки инструкций: инструкция, ссылающаяся на несуществующее, — не
свидетельство эпохи, а поломка с отложенным сроком.
+12 -11
View File
@@ -27,7 +27,8 @@
вычитывают их два отдельных прохода: `task-form` (форма записи) и
`task-wording` (язык записей);
- `session` — ритуал между спринтами и ведение спринта.
- **av-dev-pipeline** — исполнение. **Требует OpenSpec и сам его заводит.**
- **av-dev-code** — код по задачам: решение одной задачи и его проверка.
Владеет `openspec/`. **Требует OpenSpec и сам его заводит.**
- `openspec` — завести, настроить и **проверить** `openspec/` в проекте:
`openspec init`, замена примера в `config.yaml` настройкой канонической
формы, скрипт `openspec.py` (форма файла + сверка слепка с живой версией
@@ -39,7 +40,7 @@
**чекпоинта вариантов** — способы решить, цена каждого, рекомендация; выбор
оседает по адресу, который назвала сама задача. Между чекпоинтами — без
согласований;
- `review-pipeline` — конвейер ревью **по темам**: документ проекта либо
- `review` — конвейер ревью **по темам**: документ проекта либо
заводит тему проверки, либо питает чужую тему источником, либо процессный и в
ревью не читается вовсе. Разметка идёт **один раз на задачу**, сразу после
`propose`: агент `review-scope` меряет изменение по двум осям — размер и
@@ -57,9 +58,9 @@
```mermaid
flowchart TB
subgraph pipe["av-dev-pipeline — исполнение, требует OpenSpec"]
subgraph pipe["av-dev-code — исполнение, требует OpenSpec"]
direction LR
tp["resolve<br/>2 чекпоинта человеку"] --> rp["review-pipeline<br/>10 агентов-проходов"]
tp["resolve<br/>2 чекпоинта человеку"] --> rp["review<br/>10 агентов-проходов"]
osp["openspec<br/>заводит и проверяет openspec/"]
end
subgraph docsp["av-dev-docs — документация, владеет docs/"]
@@ -85,10 +86,10 @@ flowchart TB
tp --> tasks
```
Зависимости **односторонние: `av-dev-pipeline` знает про `av-dev-docs` и
Зависимости **односторонние: `av-dev-code` знает про `av-dev-docs` и
`av-dev-tasks`, обратно — нет.** Между собой эти двое тоже не связаны жёстко:
каждый работает без другого. Как именно зовут соседа и что делают, когда вызов не
разрешился, — `shared/plugin-boundary.md`: правило нужно семи скиллам в трёх
разрешился, — `shared/plugin-boundary.md`: правило нужно шести скиллам в двух
плагинах, и ни один им не владеет. То, что нужно нескольким дословно — граница
плагинов, язык проектных текстов, словарь сопровождения, — живёт домом в
`shared/` и уезжает в каждый плагин помеченной копией.
@@ -116,7 +117,7 @@ flowchart TB
Отдельного файла-брифа при этом нет — проходы читают документы напрямую; карта
«тема → её дом → что оттуда берётся» —
[project-facts.md](av-dev-pipeline/skills/review-pipeline/references/project-facts.md).
[project-facts.md](av-dev-code/skills/review/references/project-facts.md).
Прийти в старый проект и перевести его на канон — `/av-dev-docs:canon`. Канон
версионируется, и проекты повышаются по [журналу
@@ -137,7 +138,7 @@ claude plugin marketplace add https://git.vakhrushev.me/av/dev-skills.git --scop
# плагины: scope обязателен, умолчание у команды — user, а нам нужен project
claude plugin install av-dev-docs@av-dev-skills --scope project
claude plugin install av-dev-tasks@av-dev-skills --scope project
claude plugin install av-dev-pipeline@av-dev-skills --scope project
claude plugin install av-dev-code@av-dev-skills --scope project
claude plugin install av-dev-git@av-dev-skills --scope project
```
@@ -155,7 +156,7 @@ claude plugin install av-dev-git@av-dev-skills --scope project
"enabledPlugins": {
"av-dev-docs@av-dev-skills": true,
"av-dev-tasks@av-dev-skills": true,
"av-dev-pipeline@av-dev-skills": true,
"av-dev-code@av-dev-skills": true,
"av-dev-git@av-dev-skills": true
}
}
@@ -186,7 +187,7 @@ claude plugin marketplace update av-dev-skills
cd /path/to/project
claude plugin update av-dev-docs@av-dev-skills --scope project
claude plugin update av-dev-tasks@av-dev-skills --scope project
claude plugin update av-dev-pipeline@av-dev-skills --scope project
claude plugin update av-dev-code@av-dev-skills --scope project
claude plugin update av-dev-git@av-dev-skills --scope project
```
@@ -306,7 +307,7 @@ uv run python scripts/frontmatter.py # 0 в порядке, 1 расхожд
а не «имя не то»;
- **цвет charter'а, не отвечающий его модели.** Цвет кодирует модель, а не роль
прохода — раскладка живёт в
[review-pipeline/SKILL.md](av-dev-pipeline/skills/review-pipeline/SKILL.md),
[review/SKILL.md](av-dev-code/skills/review/SKILL.md),
разделе «Модель по проходу», здесь только её механизация. Держаться вниманием
правило не может: цвет ставится один раз при заведении charter'а, а модель
потом меняется калибровкой.
+9 -7
View File
@@ -16,8 +16,8 @@
## Где мы сейчас
Плагинов четыре, и каждый ставится отдельно: `av-dev-docs` (канон документов и
их содержимое), `av-dev-tasks` (задачи и цели), `av-dev-pipeline` (SDD и конвейер
ревью, он же заводит OpenSpec), `av-dev-git`. Общее, что нужно нескольким
их содержимое), `av-dev-tasks` (задачи и цели), `av-dev-code` (код по задачам:
цикл SDD, конвейер ревью, OpenSpec), `av-dev-git`. Общее, что нужно нескольким
дословно, живёт домом в `shared/` и уезжает копиями.
Канон документов — **версия 11**. Живые проекты стоят на 2–3 и на плагине
@@ -31,9 +31,11 @@
### healthlog — первым
- [ ] переустановить плагины: снять `av-dev-pm`, поставить `av-dev-docs` и
`av-dev-tasks`. `marketplace update`, затем `plugin update` — одного шага
мало (README, «Обновление»)
- [ ] переустановить плагины: снять `av-dev-pm` и `av-dev-pipeline`, поставить
`av-dev-docs`, `av-dev-tasks`, `av-dev-code`, `av-dev-git`. Оба прежних
имени мертвы, и `plugin update` их не переименует — только снять и
поставить. `marketplace update`, затем `plugin update` — одного шага мало
(README, «Обновление»)
- [ ] удалить проектные копии: `.claude/skills/healthlog-{task,review}-pipeline`
и девять `.claude/agents/healthlog-review-*.md`. Они прошлого поколения и
после переезда указывают на документы, которых уже не будет
@@ -95,10 +97,10 @@
## 4. Пайплайн: что осталось после `resolve`
Сам скилл написан (`av-dev-pipeline:resolve`, два чекпоинта, ветка разведки),
Сам скилл написан (`av-dev-code:resolve`, два чекпоинта, ветка разведки),
`task-batch` удалён. Осталось то, что на бумаге не проверяется:
- [ ] перемерить `review-pipeline` тем же вопросом, что и проект целиком:
- [ ] перемерить скилл `review` тем же вопросом, что и проект целиком:
сколько из его стадий реально смотрятся глазами. Тысяча строк, и весь
автоматический участок между чекпоинтами держится на них
- [ ] чекпоинт «объяснение» собирается из `proposal.md` и `design.md`, а
@@ -1,5 +1,5 @@
{
"name": "av-dev-pipeline",
"name": "av-dev-code",
"description": "Решение одной задачи от постановки до закрытия скиллом resolve — полный цикл Spec Driven Development с двумя плановыми остановками: чекпоинт вариантов у исследовательской задачи и чекпоинт с объяснением человеческим языком после ревью дизайна у всякой. Между ними работа идёт без согласований. Плюс конвейер ревью с детерминированным гейтом, сверкой со спеками, враждебными постановками, эксплуатационным постмортемом, независимой реализацией и обязательным триажем. Требует OpenSpec и сам его заводит скиллом openspec. Задача принимается и обычным текстом. Плагины av-dev-docs и av-dev-tasks опциональны: первый даёт документы канона, из которых проходы читают проектную конкретику, второй — учёт задач; без них прогон деградирует поразрядно и называет это строкой.",
"author": {
"name": "Anton Vakhrushev",
@@ -13,7 +13,7 @@ color: yellow
равно опасен.
Находки — по контракту
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/finding-contract.md`
`${CLAUDE_PLUGIN_ROOT}/skills/review/references/finding-contract.md`
(точный путь конвейер передаёт в задании).
**Ты помечен «держит машину»** — за тем, чтобы построенный путь можно было
@@ -73,7 +73,7 @@ color: yellow
находкой.
Карта «что нужно проходу → где лежит» —
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/project-facts.md`.
`${CLAUDE_PLUGIN_ROOT}/skills/review/references/project-facts.md`.
**Деградация поразрядная, и каждый пробел называется своей строкой.**
`docs/security.md` нет — работай по общей рамке ниже, `critical` не присваивай и
@@ -25,7 +25,7 @@ color: yellow
и граф зависимостей есть только у тебя.
Находки — по контракту
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/finding-contract.md`
`${CLAUDE_PLUGIN_ROOT}/skills/review/references/finding-contract.md`
(точный путь конвейер передаёт в задании).
## Вход (собери до чтения диффа)
@@ -52,7 +52,7 @@ grep по именам концепций) и скажи об этом в гра
- дельта-спеки change.
Карта «что нужно проходу → где лежит» —
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/project-facts.md`.
`${CLAUDE_PLUGIN_ROOT}/skills/review/references/project-facts.md`.
Дифф — **последним, не первым**: он должен ложиться на карту, а не задавать её.
@@ -19,7 +19,7 @@ color: green
намеренно нет, из темы не выпадает — она уходит в границы покрытия.
Находки — по контракту
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/finding-contract.md`
`${CLAUDE_PLUGIN_ROOT}/skills/review/references/finding-contract.md`
(точный путь конвейер передаёт в задании). Русская проза, идентификаторы и
команды — в оригинале.
@@ -31,7 +31,7 @@ color: green
запускать запрещено, с путями.
Карта «что нужно проходу → где лежит» —
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/project-facts.md`.
`${CLAUDE_PLUGIN_ROOT}/skills/review/references/project-facts.md`.
**Семантики гейта в `CLAUDE.md` нет** — найди команду сама (`Taskfile.yml`,
`Makefile`, `justfile`, `scripts/`) и выполни её, но: `critical` по основанию
@@ -36,7 +36,7 @@ color: yellow
самый дорогой проход, вместо которого его позвали.
Находки — по контракту
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/finding-contract.md`
`${CLAUDE_PLUGIN_ROOT}/skills/review/references/finding-contract.md`
(точный путь конвейер передаёт в задании).
## Что тебе даёт план прогона
@@ -52,7 +52,7 @@ color: yellow
его неизбежным.
Находки — по контракту
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/finding-contract.md`
`${CLAUDE_PLUGIN_ROOT}/skills/review/references/finding-contract.md`
(точный путь конвейер передаёт в задании). Русская проза, идентификаторы и пути —
в оригинале. Читай реальный код, ничего не выдумывай.
@@ -11,7 +11,7 @@ color: green
увидит владелец сервиса, и дойди до строки кода.
Находки — по контракту
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/finding-contract.md`
`${CLAUDE_PLUGIN_ROOT}/skills/review/references/finding-contract.md`
(точный путь конвейер передаёт в задании).
**Ты помечен «держит машину».** Конвейер за это ставит тебя в цепочку с другими
@@ -46,7 +46,7 @@ color: green
`docs/research/` процессный документ, и прогон его не открывает; чужое число
неизвестной свежести делало находку похожей на доказанную, ничего не доказывая.
Почему именно так и какие ещё есть стыки —
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/project-facts.md`, раздел
`${CLAUDE_PLUGIN_ROOT}/skills/review/references/project-facts.md`, раздел
«Сшивать обязаны проходы». Там же карта «что нужно проходу → где лежит».
Два обстоятельства почти всегда меняют цену отказов, и если документы их
@@ -11,7 +11,7 @@ color: yellow
**порождаешь сам** — и делаешь это до того, как увидишь код.
Находки — по контракту
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/finding-contract.md`
`${CLAUDE_PLUGIN_ROOT}/skills/review/references/finding-contract.md`
(точный путь конвейер передаёт в задании). Русская проза, идентификаторы — в
оригинале.
@@ -26,7 +26,7 @@ color: yellow
сформулированное по прецеденту, сильнее любого общего.
Карта «что нужно проходу → где лежит» —
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/project-facts.md`.
`${CLAUDE_PLUGIN_ROOT}/skills/review/references/project-facts.md`.
**Документа нет — строка на каждый, отдельно.** Нет `docs/review.md`: «рода
узлов и прецеденты неизвестны; требование „минимум три пункта специфичны для
@@ -186,7 +186,7 @@ color: green
**Ты меряешь изменение по двум независимым осям и называешь обе.** Метка — не
ответ на один вопрос, а максимум по двум измерениям.
Ниже рабочая выжимка. Дом правила — скилл `av-dev-pipeline:review-pipeline`,
Ниже рабочая выжимка. Дом правила — скилл `av-dev-code:review`,
`references/review-levels.md`: там разобрано, почему оси именно эти, чем `small`
дешевле `medium` и какие доли служат проверкой правила. Открывай его, когда
метка **спорная или оспорена**; на обычной задаче хватает того, что здесь.
@@ -10,7 +10,7 @@ color: yellow
Development на OpenSpec). Оптика — требования, а не стиль кода.
Находки — по контракту
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/finding-contract.md`
`${CLAUDE_PLUGIN_ROOT}/skills/review/references/finding-contract.md`
(точный путь конвейер передаёт в задании). Русская проза; идентификаторы, пути и
ключевые слова спек (`SHALL`, `GIVEN/WHEN/THEN`) — в оригинале. Читай реальные
файлы перед выводом, ничего не выдумывай.
@@ -49,7 +49,7 @@ Development на OpenSpec). Оптика — требования, а не ст
Пути спек жёсткие: актуальные — `openspec/specs/<capability>/spec.md`, дельты —
`openspec/changes/<id>/specs/`. Карта «что нужно проходу → где лежит» —
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/project-facts.md`.
`${CLAUDE_PLUGIN_ROOT}/skills/review/references/project-facts.md`.
**Нет инвариантов в `CLAUDE.md`** — сверяй только спеку с кодом, `critical` по
основанию «нарушен инвариант проекта» не присваивай и дай строку: «инвариантов в
@@ -16,7 +16,7 @@ color: yellow
Потолок в 7 пунктов защищает код, а не читателя.
Контракт находок и формат финального отчёта —
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/finding-contract.md`
`${CLAUDE_PLUGIN_ROOT}/skills/review/references/finding-contract.md`
(точный путь конвейер передаёт в задании).
## Вход
@@ -47,7 +47,7 @@ color: yellow
целиком уезжают в границы покрытия и **не сливаются в один список**.
Карта «что нужно проходу → где лежит» —
`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/project-facts.md`.
`${CLAUDE_PLUGIN_ROOT}/skills/review/references/project-facts.md`.
**Деградация поразрядная, и ты — тот, кто собирает её строки в один список,
сохраняя каждую.** Свою часть
@@ -44,7 +44,7 @@ openspec init --tools claude
проекта.
Сюда же — **требования к форме `proposal` и `design`**, на которых стоит чекпоинт
скилла `av-dev-pipeline:resolve`: объяснение человеку собирается из этих двух
скилла `av-dev-code:resolve`: объяснение человеку собирается из этих двух
артефактов, и требование к ним обязано применяться в момент, когда их пишут, а не
вспоминаться шагом позже. Образец их содержит.
@@ -126,10 +126,9 @@ python3 $os form # слепок формы против жив
Плагины `av-dev` ставятся порознь, и ни один не вправе считать, что сосед на
месте.
**Чужой скилл зовётся полным именем** — `av-dev-docs:canon`,
`av-dev-tasks:tasks`, `av-dev-pipeline:review-pipeline`. Короткое имя может
разрешиться в устаревшую проектную копию из `.claude/skills/`, и подмены не будет
видно ни в докладе, ни в поведении.
**Чужой скилл зовётся полным именем** — `av-dev-docs:canon`, `av-dev-tasks:tasks`,
`av-dev-code:review`. Короткое имя может разрешиться в устаревшую проектную копию
из `.claude/skills/`, и подмены не будет видно ни в докладе, ни в поведении.
**Путь в дерево чужого плагина не пишется никогда.** `$CLAUDE_PLUGIN_ROOT` ведёт
только в свой плагин; вычисленный от него путь к соседу либо не откроется, либо
@@ -44,7 +44,7 @@ context: |
первым молча, и заметно это становится в предложении, которое уже написано.
Ревью: правило выбора метки и состав проходов здесь не пересказываем — их дом
скилл av-dev-pipeline:review-pipeline, проектная настройка — docs/review.md.
скилл av-dev-code:review, проектная настройка — docs/review.md.
Конвенции кода: механизированное проверяет гейт, прозой остаётся
docs/conventions/. Ни состав шагов гейта, ни перечень конвенций здесь не
@@ -74,7 +74,7 @@ rules:
узнаёт их падением `openspec validate --strict`.
**Правила для `proposal` и `design` держат чекпоинт скилла
`av-dev-pipeline:resolve`.** Там работа останавливается и человеку объясняют, в
`av-dev-code:resolve`.** Там работа останавливается и человеку объясняют, в
чём проблема и как её решают, — а объяснение **собирается из этих двух
артефактов**, а не сочиняется заново: третий пересказ одного и того же разошёлся
бы с обоими. Требование поэтому стоит здесь, в момент порождения артефакта, а не
@@ -114,7 +114,7 @@ def rules_keys(live: str) -> list[str]:
Идём от строки `rules:` до следующего ключа нулевой колонки, а не ищем
отступ по всему файлу: блок `context: |` литеральный скаляр, внутри него
строки вида «Language: Russian» и «av-dev-pipeline:review-pipeline» выглядят
строки вида «Language: Russian» и «av-dev-code:review» выглядят
ключами и дали бы находку на ровном месте. Проверено на живом конфиге,
который так и падал.
"""
@@ -10,7 +10,7 @@ description: "Решить одну задачу от постановки до
Тонкая обёртка над каноническими скиллами `opsx:explore` / `opsx:propose` /
`opsx:apply` / `opsx:archive` — зови их через Skill, не переизобретай их шаги.
Ревью — скилл `av-dev-pipeline:review-pipeline`; он же держит правило выбора
Ревью — скилл `av-dev-code:review`; он же держит правило выбора
метки, а называет её агент `review-scope` — один раз на задачу, для обеих стадий
ревью.
@@ -39,10 +39,9 @@ description: "Решить одну задачу от постановки до
Плагины `av-dev` ставятся порознь, и ни один не вправе считать, что сосед на
месте.
**Чужой скилл зовётся полным именем** — `av-dev-docs:canon`,
`av-dev-tasks:tasks`, `av-dev-pipeline:review-pipeline`. Короткое имя может
разрешиться в устаревшую проектную копию из `.claude/skills/`, и подмены не будет
видно ни в докладе, ни в поведении.
**Чужой скилл зовётся полным именем** — `av-dev-docs:canon`, `av-dev-tasks:tasks`,
`av-dev-code:review`. Короткое имя может разрешиться в устаревшую проектную копию
из `.claude/skills/`, и подмены не будет видно ни в докладе, ни в поведении.
**Путь в дерево чужого плагина не пишется никогда.** `$CLAUDE_PLUGIN_ROOT` ведёт
только в свой плагин; вычисленный от него путь к соседу либо не откроется, либо
@@ -60,7 +59,7 @@ description: "Решить одну задачу от постановки до
<!-- /копия: граница-плагинов -->
Скилл зовёт `av-dev-pipeline:review-pipeline`, `av-dev-docs:docs` и
Скилл зовёт `av-dev-code:review`, `av-dev-docs:docs` и
`av-dev-tasks:tasks`. Чем оборачивается отсутствие каждого — на самих шагах и в
разделе «Границы».
@@ -371,7 +370,7 @@ flowchart TD
### 4. Ревью дизайна — ДО кода, состав по метке
Вызови Skill **`av-dev-pipeline:review-pipeline`**, дав ссылку на change `<id>`,
Вызови Skill **`av-dev-code:review`**, дав ссылку на change `<id>`,
**план разметки с шага 3** и указание, что это ревью дизайна.
Состав приходит планом, а не решается здесь:
@@ -458,7 +457,7 @@ flowchart TD
### 7. Ревью кода — та же метка
Вызови Skill **`av-dev-pipeline:review-pipeline`**, дав ссылку на change `<id>`,
Вызови Skill **`av-dev-code:review`**, дав ссылку на change `<id>`,
базу диффа, **план разметки с шага 3** и режим запуска.
**Метку ты не выбираешь, и это правило, а не упрощение.** Её назвал
@@ -466,7 +465,7 @@ flowchart TD
оси. Причина в разведённости: ты только что написал этот код, и решать, насколько
глубоко его проверять, тебе нельзя — под давлением «я почти закончил» решение
известно заранее. Правило выбора живёт в скилле конвейера —
`av-dev-pipeline:review-pipeline`, `references/review-levels.md`; проектные
`av-dev-code:review`, `references/review-levels.md`; проектные
триггеры — в `docs/review.*`, подраздел «Триггеры метки».
**Метка не пересматривается по факту диффа.** Дифф может выйти крупнее, чем
@@ -555,7 +554,7 @@ flowchart TD
**Плагина `av-dev-docs` в проекте нет** — путь в его дерево не разрешится ниоткуда,
поэтому за списком иди в **свой** reference:
[references/project-facts.md](../review-pipeline/references/project-facts.md)
[references/project-facts.md](../review/references/project-facts.md)
конвейера ревью перечисляет все документы канона с их предметом. Пройди по этому
перечню — каждый документ получает строку, отрицание остаётся обязательным.
Триггеры при этом ты знаешь хуже, и это называется в докладе строкой: «синк
@@ -1,5 +1,5 @@
---
name: review-pipeline
name: review
description: "Конвейер ревью изменения, устроенный по темам: документ проекта либо заводит тему ревью, либо питает чужую тему источником, либо процессный и в ревью не читается вовсе. Ядро тем — requirements, autotests, conventions, architecture, security, operations; список тем открытый, свои темы проект заводит документом. Разметка задачи идёт один раз, после propose: агент review-scope выводит размер и сложность, из их максимума — метка, и раздаёт темы проходам обеих стадий. Метка правит и ревью дизайна (small — только specs; medium — плюс rubric; large — плюс architecture), и ревью кода (small — гейт, спеки, код, триаж; medium — плюс приёмник тем; large — плюс доказательство: враждебные постановки, эксплуатационный постмортем, архитектурный проход на широком входе). Триаж обязателен всегда. Порядок прогона — граф зависимостей: гейт открывает опиниативные проходы, проходы с пометкой «держит машину» идут цепочкой, триаж — единственный сток. Проектная специфика приходит из документов канона av-dev-docs. Вызывается из скилла resolve — двумя чекпоинтами: ревью дизайна до кода и ревью кода после apply."
---
@@ -52,13 +52,14 @@ description: "Конвейер ревью изменения, устроенны
требований. **Проект без OpenSpec этим конвейером не проверяется** — подключай
OpenSpec, а не понижай прогон: ветка деградации здесь не пишется, потому что
непроверенная ветка деградации хуже честного отказа. Заводить руками не надо:
этим владеет скилл `av-dev-pipeline:openspec` — он заводит каталог и заменяет
этим владеет скилл `av-dev-code:openspec` — он заводит каталог и заменяет
пример в `config.yaml` настройкой. Его же зовут `av-dev-docs:init` на новом
проекте и `canon adopt` на переводимом.
- **Документы канона** — см. следующий раздел.
- **Проектные копии этих скиллов и агентов удаляются при установке.** Если в
проекте уже лежат свои `.claude/skills/review-pipeline`,
`.claude/skills/task-pipeline`, `.claude/skills/resolve` или
проекте уже лежат свои `.claude/skills/review`,
`.claude/skills/review-pipeline`, `.claude/skills/task-pipeline`,
`.claude/skills/resolve` или
`.claude/agents/<проект>-review-*.md` — снеси их. Иначе короткое имя разрешится
в устаревшую проектную копию, молча и без признаков подмены.
@@ -72,10 +73,9 @@ description: "Конвейер ревью изменения, устроенны
Плагины `av-dev` ставятся порознь, и ни один не вправе считать, что сосед на
месте.
**Чужой скилл зовётся полным именем** — `av-dev-docs:canon`,
`av-dev-tasks:tasks`, `av-dev-pipeline:review-pipeline`. Короткое имя может
разрешиться в устаревшую проектную копию из `.claude/skills/`, и подмены не будет
видно ни в докладе, ни в поведении.
**Чужой скилл зовётся полным именем** — `av-dev-docs:canon`, `av-dev-tasks:tasks`,
`av-dev-code:review`. Короткое имя может разрешиться в устаревшую проектную копию
из `.claude/skills/`, и подмены не будет видно ни в докладе, ни в поведении.
**Путь в дерево чужого плагина не пишется никогда.** `$CLAUDE_PLUGIN_ROOT` ведёт
только в свой плагин; вычисленный от него путь к соседу либо не откроется, либо
@@ -93,8 +93,8 @@ description: "Конвейер ревью изменения, устроенны
<!-- /копия: граница-плагинов -->
Своих скиллов это касается ровно так же: `av-dev-pipeline:review-pipeline`,
`av-dev-pipeline:resolve`, `av-dev-pipeline:openspec` — подменяется короткое имя,
Своих скиллов это касается ровно так же: `av-dev-code:review`,
`av-dev-code:resolve`, `av-dev-code:openspec` — подменяется короткое имя,
а не чужое.
## Темы, источники и процессные документы
@@ -196,7 +196,7 @@ description: "Конвейер ревью изменения, устроенны
прохода между метками;
- **контракт находок** — путь к
[references/finding-contract.md](references/finding-contract.md) (в
установленном плагине — `${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/`);
установленном плагине — `${CLAUDE_PLUGIN_ROOT}/skills/review/references/`);
- **изменение** — идентификатор change и путь к его дельта-спекам;
- **база диффа**;
- **метка, его глубина и режим** прогона — чтобы проход знал, что писать в
@@ -849,7 +849,7 @@ Recall темы `conventions` равен длине конвенций прое
## Ревью дизайна — до кода
Запускается на первом чекпоинте ревью (шаг 4 скилла
`av-dev-pipeline:resolve`), когда change уже имеет `proposal.md` и
`av-dev-code:resolve`), когда change уже имеет `proposal.md` и
дельта-спеки, но кода ещё нет. Разметка задачи к этому моменту уже прошла — она
шагом раньше, и метка известна.
+6 -7
View File
@@ -52,7 +52,7 @@ python3 $ds version --dir <корень> # версия кано
```
**Формы `openspec/config.yaml` здесь больше нет.** Каталог принадлежит конвейеру,
и форму смотрит его скрипт — `av-dev-pipeline`, скилл `openspec`, команда
и форму смотрит его скрипт — `av-dev-code`, скилл `openspec`, команда
`openspec.py check`. Проект работает по OpenSpec, а плагина конвейера нет — форму
не проверяет никто, и это надо сказать строкой доклада, а не считать, что она
верна.
@@ -89,7 +89,7 @@ capability: незаполненный канон это переходное с
## Обращение к соседним плагинам
`adopt` зовёт двоих: `av-dev-pipeline:openspec` (шаг 4, пункт 3) и
`adopt` зовёт двоих: `av-dev-code:openspec` (шаг 4, пункт 3) и
`av-dev-tasks:tasks` (шаг 4, пункт 5). Каталоги `openspec/` и `tasks/` каноном не
ведутся, и трогать их этому скиллу нечем, кроме вызова.
@@ -101,10 +101,9 @@ capability: незаполненный канон это переходное с
Плагины `av-dev` ставятся порознь, и ни один не вправе считать, что сосед на
месте.
**Чужой скилл зовётся полным именем**`av-dev-docs:canon`,
`av-dev-tasks:tasks`, `av-dev-pipeline:review-pipeline`. Короткое имя может
разрешиться в устаревшую проектную копию из `.claude/skills/`, и подмены не будет
видно ни в докладе, ни в поведении.
**Чужой скилл зовётся полным именем**`av-dev-docs:canon`, `av-dev-tasks:tasks`,
`av-dev-code:review`. Короткое имя может разрешиться в устаревшую проектную копию
из `.claude/skills/`, и подмены не будет видно ни в докладе, ни в поведении.
**Путь в дерево чужого плагина не пишется никогда.** `$CLAUDE_PLUGIN_ROOT` ведёт
только в свой плагин; вычисленный от него путь к соседу либо не откроется, либо
@@ -183,7 +182,7 @@ capability), `openspec/config.yaml`.
2. каталоги канона и скелет **по [references/skeletons.md](references/skeletons.md)**:
незаполненное — одной честной информативной строкой, а не «TBD»;
3. **OpenSpec, если его нет или `config.yaml` остался примером** — **вызови
Skill `av-dev-pipeline:openspec`**. Каталог принадлежит конвейеру, и команда
Skill `av-dev-code:openspec`**. Каталог принадлежит конвейеру, и команда
заведения с формой файла живут там. Пересказ инвариантов, конвенций и правил
ревью из `context` вычисти ссылкой на дом — на переводимом проекте он там
почти наверняка есть. Вызов не разрешился — `docs.py` о каталоге тогда тоже
+2 -2
View File
@@ -184,7 +184,7 @@ kebab-case.** Причина не эстетическая: имя файла с
какую тему питает. **Кто именно закрывает тему, здесь не указано намеренно**: это
зависит от метки прогона и меняется вместе с конвейером, а документ живёт
дольше. Раскладку «тема → проход → глубина» держит скилл
`av-dev-pipeline:review-pipeline`.
`av-dev-code:review`.
**Общего словаря у канона с конвейером ровно три вида имён: имена категорий,
имена тем и имена меток.** Категорий три — `тема`, `источник`, `процессный`;
@@ -430,7 +430,7 @@ kebab-case.** Причина не эстетическая: имя файла с
**Файл канону не принадлежит, и проверяет его тоже не канон.** Каталог
`openspec/` — предпосылка конвейера: без него не работают ни `opsx:propose`, ни
ревью дизайна, ни сверка требований. Заводит его, настраивает и **проверяет
форму** плагин `av-dev-pipeline`, скилл `openspec`: там образец файла, там же
форму** плагин `av-dev-code`, скилл `openspec`: там образец файла, там же
скрипт `openspec.py check`. `docs.py` о файле не говорит ничего.
Канон называет его здесь по одной причине: `openspec/specs/` — **дом темы
@@ -51,7 +51,7 @@ upgrade` идёт по записям снизу вверх от версии п
остались в `docs.py`, то есть у файла было два плагина — один заводит, другой
проверяет. Остаток закрыт.
**Что появилось.** Скрипт `openspec.py` в скилле `av-dev-pipeline:openspec`, две
**Что появилось.** Скрипт `openspec.py` в скилле `av-dev-code:openspec`, две
команды: `check --dir <корень>` — форма в проекте, `form` — сверка слепка с живым
OpenSpec. Коды выхода те же, что у `docs.py` и `tasks.py`.
@@ -80,7 +80,7 @@ OpenSpec. Коды выхода те же, что у `docs.py` и `tasks.py`.
Форму раньше проверял `docs.py check` заодно; теперь он о ней молчит, и без
отдельного шага незаменённый пример в `config.yaml` перестанет ловиться. Это
главная потеря этого повышения, и она тихая.
3. Проект по OpenSpec без установленного `av-dev-pipeline` — форму не проверяет
3. Проект по OpenSpec без установленного `av-dev-code` — форму не проверяет
никто. Либо поставить плагин, либо назвать это принятым риском вслух.
4. `docs/.pm.json`: `"canon": 10`.
@@ -94,7 +94,7 @@ OpenSpec работает конвейер — без каталога не за
высказывался. Проект, которому конвейер не нужен, получал отказ за отсутствие
того, чем не пользуется.
**Что появилось.** Скилл `av-dev-pipeline:openspec`: заводит каталог, заменяет
**Что появилось.** Скилл `av-dev-code:openspec`: заводит каталог, заменяет
закомментированный пример в `config.yaml` настройкой, объясняет разрез между
ссылкой и пересказом. Образец файла переехал туда же — в
`references/config-skeleton.md` того скилла.
@@ -115,7 +115,7 @@ OpenSpec работает конвейер — без каталога не за
1. Ничего не переносить: файлы проекта эта версия не двигает. Меняется только то,
кто их заводит.
2. Проверить, что плагин `av-dev-pipeline` установлен, если проект работает по
2. Проверить, что плагин `av-dev-code` установлен, если проект работает по
OpenSpec. Без него `docs.py check` про каталог промолчит — и молчание это
законное, так что отсутствие настройки перестанет ловиться само.
3. Проект **не** работает по OpenSpec: убедиться, что `openspec/` нет, и
@@ -653,5 +653,5 @@ ADR объясняет прошлое решение, а не предъявля
| Что копируется | Дом определения |
| --- | --- |
| форма записи журнала дефектов в `docs/review.md` | `av-dev-pipeline/skills/review-pipeline/references/review-journal.md` |
| форма записи журнала дефектов в `docs/review.md` | `av-dev-code/skills/review/references/review-journal.md` |
| правило заведения ADR в `docs/adr/README.md` | [canon.md](canon.md), раздел `adr/` |
@@ -340,7 +340,7 @@
Форма:
<!-- копия: журнал-дефектов-форма из av-dev-pipeline/skills/review-pipeline/references/review-journal.md -->
<!-- копия: журнал-дефектов-форма из av-dev-code/skills/review/references/review-journal.md -->
## ГГГГ-ММ-ДД — <краткое последствие> [проскочил|пойман]
- **Где:** путь:строка либо «конвейер, а не код»
@@ -420,7 +420,7 @@ severity стоит здесь, а не выводится каждым прох
## `openspec/config.yaml`
**Образец переехал.** Файл заводит и заполняет плагин конвейера — скилл
`av-dev-pipeline:openspec`, — потому что по OpenSpec работает он, а не канон
`av-dev-code:openspec`, — потому что по OpenSpec работает он, а не канон
документов. Проект без конвейера каталога `openspec/` не имеет вовсе, и образец
файла, которого у него нет, в скелетах канона лежал бы мёртвым грузом.
+1 -1
View File
@@ -569,7 +569,7 @@ def report(rep: Report) -> int:
"\nМашина проверила раскладку, имена файлов, ссылки, версию и две\n"
"сверки с кодом. Форму openspec/config.yaml она не проверяет: каталог\n"
"принадлежит конвейеру, и форму смотрит его скрипт\n"
"(`av-dev-pipeline:openspec`, команда `openspec.py check`). Согласованность\n"
"(`av-dev-code:openspec`, команда `openspec.py check`). Согласованность\n"
"документов между собой и с кодом — тоже не её: это суждение агентов\n"
"`doc-consistency` (документ ↔ документ ↔ openspec) и `doc-code-drift`\n"
"(документ ↔ код)."
+6 -7
View File
@@ -130,10 +130,9 @@ description: Вести содержимое документов канона
Плагины `av-dev` ставятся порознь, и ни один не вправе считать, что сосед на
месте.
**Чужой скилл зовётся полным именем**`av-dev-docs:canon`,
`av-dev-tasks:tasks`, `av-dev-pipeline:review-pipeline`. Короткое имя может
разрешиться в устаревшую проектную копию из `.claude/skills/`, и подмены не будет
видно ни в докладе, ни в поведении.
**Чужой скилл зовётся полным именем**`av-dev-docs:canon`, `av-dev-tasks:tasks`,
`av-dev-code:review`. Короткое имя может разрешиться в устаревшую проектную копию
из `.claude/skills/`, и подмены не будет видно ни в докладе, ни в поведении.
**Путь в дерево чужого плагина не пишется никогда.** `$CLAUDE_PLUGIN_ROOT` ведёт
только в свой плагин; вычисленный от него путь к соседу либо не откроется, либо
@@ -160,7 +159,7 @@ description: Вести содержимое документов канона
конвейера. **Что в каком и в какой форме — в
[каноне](../canon/references/canon.md), раздел `review.md`**; подробности формы
записи и выбор адреса, куда она ведёт, — у конвейера ревью проекта (при
`av-dev-pipeline``Skill av-dev-pipeline:review-pipeline`, его
`av-dev-code``Skill av-dev-code:review`, его
`references/review-journal.md`). **Конвейера в проекте нет** — пиши по форме из
скелета `review.md`, которую положил канон, и скажи в докладе, что подробностей
формы взять негде.
@@ -173,8 +172,8 @@ description: Вести содержимое документов канона
## Промоут в конвенции
Находка → конвенция → правило линтера → **удаление из прозы**. Процедура целиком
принадлежит конвейеру ревью проекта (при `av-dev-pipeline` — его
`references/promote.md`, читается через `Skill av-dev-pipeline:review-pipeline`);
принадлежит конвейеру ревью проекта (при `av-dev-code` — его
`references/promote.md`, читается через `Skill av-dev-code:review`);
роль каталога конвенций — в [каноне](../canon/references/canon.md). **Конвейера
нет** — три шага всё равно твои, просто без его процедуры: сформулируй правило,
поищи, чем оно механизируется, и вычеркни прозу, если механизировалось.
+5 -6
View File
@@ -1,6 +1,6 @@
---
name: init
description: "Завести новый проект — сессия вопросов и ответов по свободному описанию замысла, из которой рождается первичная документация по канону av-dev: паспорт, CLAUDE.md с инвариантами и командами, модель угроз с периметром, первые цели в роадмапе и скелет остальных документов. OpenSpec заводит не сам, а вызовом скилла av-dev-pipeline:openspec — каталог принадлежит конвейеру; плагина конвейера нет — шаг пропускается строкой доклада. Использовать, когда начинают новый проект с нуля, когда есть только текст «что мне нужно и почему» и надо превратить его в рабочую документацию, когда просят провести стартовое интервью по брифу. Проект, где документация уже как-то ведётся, переводит скилл canon."
description: "Завести новый проект — сессия вопросов и ответов по свободному описанию замысла, из которой рождается первичная документация по канону av-dev: паспорт, CLAUDE.md с инвариантами и командами, модель угроз с периметром, первые цели в роадмапе и скелет остальных документов. OpenSpec заводит не сам, а вызовом скилла av-dev-code:openspec — каталог принадлежит конвейеру; плагина конвейера нет — шаг пропускается строкой доклада. Использовать, когда начинают новый проект с нуля, когда есть только текст «что мне нужно и почему» и надо превратить его в рабочую документацию, когда просят провести стартовое интервью по брифу. Проект, где документация уже как-то ведётся, переводит скилл canon."
---
# Заведение нового проекта
@@ -77,10 +77,9 @@ description: "Завести новый проект — сессия вопро
Плагины `av-dev` ставятся порознь, и ни один не вправе считать, что сосед на
месте.
**Чужой скилл зовётся полным именем**`av-dev-docs:canon`,
`av-dev-tasks:tasks`, `av-dev-pipeline:review-pipeline`. Короткое имя может
разрешиться в устаревшую проектную копию из `.claude/skills/`, и подмены не будет
видно ни в докладе, ни в поведении.
**Чужой скилл зовётся полным именем**`av-dev-docs:canon`, `av-dev-tasks:tasks`,
`av-dev-code:review`. Короткое имя может разрешиться в устаревшую проектную копию
из `.claude/skills/`, и подмены не будет видно ни в докладе, ни в поведении.
**Путь в дерево чужого плагина не пишется никогда.** `$CLAUDE_PLUGIN_ROOT` ведёт
только в свой плагин; вычисленный от него путь к соседу либо не откроется, либо
@@ -105,7 +104,7 @@ description: "Завести новый проект — сессия вопро
1. Прочитай бриф целиком. Выпиши, на какие блоки интервью ответ уже есть.
2. Проведи интервью итерациями по ≤3 вопроса.
3. **OpenSpec — вызови Skill `av-dev-pipeline:openspec`.** Он заводит каталог и
3. **OpenSpec — вызови Skill `av-dev-code:openspec`.** Он заводит каталог и
заменяет пример в `config.yaml` настройкой. Делается это **до первого
документа**: без `openspec/` не работают ни `opsx:propose`, ни ревью дизайна,
ни сверка требований. Каталог принадлежит конвейеру, а не канону, поэтому
+1 -1
View File
@@ -228,7 +228,7 @@ python3 $tk reopen <слаг> --dir D --reason … # приёмка не со
- **независимый отчёт ревью** — артефакт, написанный не исполнителем; по нему
сверяют состав прогона и урожай. Где он лежит, знает пайплайн проекта; при
конвейере `av-dev-pipeline` это отчёт триажа в
конвейере `av-dev-code` это отчёт триажа в
`openspec/changes/archive/<id>/review/` (до архивации — `changes/<id>/review/`);
- **`SPRINT.md` под git** — `git log -p` показывает, что и когда было закрыто.
Работает, только если закрытие **закоммичено**: удаление файла задачи и правка
@@ -157,7 +157,7 @@ flowchart TD
2. **Принимает человек на сессии, а не отдельный агент.** Исполнитель и приёмщик
в момент закрытия **не разведены** (решение о снятии и его
цена — в `SKILL.md`, «Стимулы»). Опоры остались три: **сохранённый независимый
отчёт ревью** (при конвейере `av-dev-pipeline` — отчёт триажа в
отчёт ревью** (при конвейере `av-dev-code` — отчёт триажа в
`openspec/changes/archive/<id>/review/`, до архивации — `changes/<id>/review/`),
`SPRINT.md` под git и `reopen`. Переоценка на сессии и есть момент, когда
критерии видит не исполнитель. **Конвейера ревью в проекте нет — первой опоры
+1 -1
View File
@@ -58,7 +58,7 @@ quote-style = "double"
project-includes = [
"av-dev-tasks/skills/tasks/scripts/tasks.py",
"av-dev-docs/skills/canon/scripts/docs.py",
"av-dev-pipeline/skills/openspec/scripts/openspec.py",
"av-dev-code/skills/openspec/scripts/openspec.py",
"scripts/addresses.py",
"scripts/copies.py",
"scripts/diagrams.py",
+1 -1
View File
@@ -10,7 +10,7 @@
куда большей вероятностью, чем новая тема.
Адрес документа принадлежит одному плагину, а называют его все: `docs/*` стоит
примерно в сорока местах `av-dev-pipeline`, `tasks/ROADMAP.md` в четырёх местах
примерно в сорока местах `av-dev-code`, `tasks/ROADMAP.md` в четырёх местах
`av-dev-docs`. Переименование в каноне до этих мест не доходит.
**Почему тут нужна машина, а не аккуратность.** Прогон ревью умеет честно
+1 -1
View File
@@ -21,7 +21,7 @@
**Цвет, не отвечающий модели.** Цвет charter'а кодирует **модель**, на которой
идёт проход, а не его роль: раскладка в
`av-dev-pipeline/skills/review-pipeline/SKILL.md`, раздел «Модель по проходу».
`av-dev-code/skills/review/SKILL.md`, раздел «Модель по проходу».
Правило существует ровно затем, чтобы стоимость прогона читалась взглядом по
списку агентов, и держаться вниманием оно не может: цвет ставится один раз при
заведении charter'а, а модель потом меняется калибровкой.
+1 -1
View File
@@ -3,7 +3,7 @@
**Это дом.** Словарь «чем держат проект» назван в трёх местах трёх разных
плагинов: секция `Сопровождение` в роадмапе (`av-dev-tasks`), раздел
«Эксплуатация» в `architecture.md` (`av-dev-docs`) и тема ревью `operations`
(`av-dev-pipeline`). Ни один из трёх им не владеет, поэтому дом стоит снаружи, а
(`av-dev-code`). Ни один из трёх им не владеет, поэтому дом стоит снаружи, а
плагины везут копии.
Три перечня «чем держат проект» уже разъезжались — на «метриках и логах» против
+7 -5
View File
@@ -1,7 +1,7 @@
# Граница между плагинами
**Это дом.** Правило обращения к соседнему плагину нужно всем, кто зовёт чужой
скилл, — а таких скиллов семь в трёх плагинах, и ни один из трёх правилом не
скилл, — а таких скиллов шесть в двух плагинах, и ни один из двух правилом не
владеет. Поэтому дом стоит снаружи, а плагины везут **копии**, помеченные
разметкой `copies.py`.
@@ -18,6 +18,9 @@
| `openspec` | путём в чужое дерево — никогда | есть |
| `canon` | — | есть |
Имена с тех пор изменились — `task-pipeline` стал `resolve`, `review-pipeline`
`review`, `task-batch` удалён, — но замер относится к местам, а не к названиям.
Два разных довода, и ни в одном месте не было обоих. Три места из пяти молчали о
том, что делать, когда вызов не разрешился, — то есть о единственном, ради чего
правило и написано.
@@ -33,10 +36,9 @@
Плагины `av-dev` ставятся порознь, и ни один не вправе считать, что сосед на
месте.
**Чужой скилл зовётся полным именем** — `av-dev-docs:canon`,
`av-dev-tasks:tasks`, `av-dev-pipeline:review-pipeline`. Короткое имя может
разрешиться в устаревшую проектную копию из `.claude/skills/`, и подмены не будет
видно ни в докладе, ни в поведении.
**Чужой скилл зовётся полным именем** — `av-dev-docs:canon`, `av-dev-tasks:tasks`,
`av-dev-code:review`. Короткое имя может разрешиться в устаревшую проектную копию
из `.claude/skills/`, и подмены не будет видно ни в докладе, ни в поведении.
**Путь в дерево чужого плагина не пишется никогда.** `$CLAUDE_PLUGIN_ROOT` ведёт
только в свой плагин; вычисленный от него путь к соседу либо не откроется, либо