diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 9079d3a..745ff1d 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -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 опциональны — первый даёт документы канона для проходов ревью, второй учёт задач, без них прогон деградирует поразрядно и говорит об этом." }, { diff --git a/DECISIONS.md b/DECISIONS.md index be15298..c520e18 100644 --- a/DECISIONS.md +++ b/DECISIONS.md @@ -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. **Журнал не переписывается в наблюдениях и обязан оставаться исполнимым в + предписаниях.** Правило «не задним числом» защищает от подделки фактов, а не + от починки инструкций: инструкция, ссылающаяся на несуществующее, — не + свидетельство эпохи, а поломка с отложенным сроком. diff --git a/README.md b/README.md index 03989e9..86a83d6 100644 --- a/README.md +++ b/README.md @@ -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
2 чекпоинта человеку"] --> rp["review-pipeline
10 агентов-проходов"] + tp["resolve
2 чекпоинта человеку"] --> rp["review
10 агентов-проходов"] osp["openspec
заводит и проверяет 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'а, а модель потом меняется калибровкой. diff --git a/TODO.md b/TODO.md index a57a15c..a2551a4 100644 --- a/TODO.md +++ b/TODO.md @@ -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`, а diff --git a/av-dev-pipeline/.claude-plugin/plugin.json b/av-dev-code/.claude-plugin/plugin.json similarity index 98% rename from av-dev-pipeline/.claude-plugin/plugin.json rename to av-dev-code/.claude-plugin/plugin.json index a6f2e41..6d83d3c 100644 --- a/av-dev-pipeline/.claude-plugin/plugin.json +++ b/av-dev-code/.claude-plugin/plugin.json @@ -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", diff --git a/av-dev-pipeline/agents/review-adversary.md b/av-dev-code/agents/review-adversary.md similarity index 99% rename from av-dev-pipeline/agents/review-adversary.md rename to av-dev-code/agents/review-adversary.md index d497bf9..b14b881 100644 --- a/av-dev-pipeline/agents/review-adversary.md +++ b/av-dev-code/agents/review-adversary.md @@ -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` не присваивай и diff --git a/av-dev-pipeline/agents/review-architecture.md b/av-dev-code/agents/review-architecture.md similarity index 99% rename from av-dev-pipeline/agents/review-architecture.md rename to av-dev-code/agents/review-architecture.md index 31c5973..c28cd8f 100644 --- a/av-dev-pipeline/agents/review-architecture.md +++ b/av-dev-code/agents/review-architecture.md @@ -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`. Дифф — **последним, не первым**: он должен ложиться на карту, а не задавать её. diff --git a/av-dev-pipeline/agents/review-autotests.md b/av-dev-code/agents/review-autotests.md similarity index 98% rename from av-dev-pipeline/agents/review-autotests.md rename to av-dev-code/agents/review-autotests.md index fd77d4a..7e1377c 100644 --- a/av-dev-pipeline/agents/review-autotests.md +++ b/av-dev-code/agents/review-autotests.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` по основанию diff --git a/av-dev-pipeline/agents/review-basics.md b/av-dev-code/agents/review-basics.md similarity index 99% rename from av-dev-pipeline/agents/review-basics.md rename to av-dev-code/agents/review-basics.md index 6e21570..7b69084 100644 --- a/av-dev-pipeline/agents/review-basics.md +++ b/av-dev-code/agents/review-basics.md @@ -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` (точный путь конвейер передаёт в задании). ## Что тебе даёт план прогона diff --git a/av-dev-pipeline/agents/review-code.md b/av-dev-code/agents/review-code.md similarity index 99% rename from av-dev-pipeline/agents/review-code.md rename to av-dev-code/agents/review-code.md index 1ae8ad9..f039fc5 100644 --- a/av-dev-pipeline/agents/review-code.md +++ b/av-dev-code/agents/review-code.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` (точный путь конвейер передаёт в задании). Русская проза, идентификаторы и пути — в оригинале. Читай реальный код, ничего не выдумывай. diff --git a/av-dev-pipeline/agents/review-ops.md b/av-dev-code/agents/review-ops.md similarity index 99% rename from av-dev-pipeline/agents/review-ops.md rename to av-dev-code/agents/review-ops.md index df3c642..db040a2 100644 --- a/av-dev-pipeline/agents/review-ops.md +++ b/av-dev-code/agents/review-ops.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`, раздел «Сшивать обязаны проходы». Там же карта «что нужно проходу → где лежит». Два обстоятельства почти всегда меняют цену отказов, и если документы их diff --git a/av-dev-pipeline/agents/review-rubric.md b/av-dev-code/agents/review-rubric.md similarity index 98% rename from av-dev-pipeline/agents/review-rubric.md rename to av-dev-code/agents/review-rubric.md index ef59a51..2c41a07 100644 --- a/av-dev-pipeline/agents/review-rubric.md +++ b/av-dev-code/agents/review-rubric.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`: «рода узлов и прецеденты неизвестны; требование „минимум три пункта специфичны для diff --git a/av-dev-pipeline/agents/review-scope.md b/av-dev-code/agents/review-scope.md similarity index 99% rename from av-dev-pipeline/agents/review-scope.md rename to av-dev-code/agents/review-scope.md index 76b1a26..7080cab 100644 --- a/av-dev-pipeline/agents/review-scope.md +++ b/av-dev-code/agents/review-scope.md @@ -186,7 +186,7 @@ color: green **Ты меряешь изменение по двум независимым осям и называешь обе.** Метка — не ответ на один вопрос, а максимум по двум измерениям. -Ниже рабочая выжимка. Дом правила — скилл `av-dev-pipeline:review-pipeline`, +Ниже рабочая выжимка. Дом правила — скилл `av-dev-code:review`, `references/review-levels.md`: там разобрано, почему оси именно эти, чем `small` дешевле `medium` и какие доли служат проверкой правила. Открывай его, когда метка **спорная или оспорена**; на обычной задаче хватает того, что здесь. diff --git a/av-dev-pipeline/agents/review-specs.md b/av-dev-code/agents/review-specs.md similarity index 98% rename from av-dev-pipeline/agents/review-specs.md rename to av-dev-code/agents/review-specs.md index a62fb01..80eb64d 100644 --- a/av-dev-pipeline/agents/review-specs.md +++ b/av-dev-code/agents/review-specs.md @@ -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//spec.md`, дельты — `openspec/changes//specs/`. Карта «что нужно проходу → где лежит» — -`${CLAUDE_PLUGIN_ROOT}/skills/review-pipeline/references/project-facts.md`. +`${CLAUDE_PLUGIN_ROOT}/skills/review/references/project-facts.md`. **Нет инвариантов в `CLAUDE.md`** — сверяй только спеку с кодом, `critical` по основанию «нарушен инвариант проекта» не присваивай и дай строку: «инвариантов в diff --git a/av-dev-pipeline/agents/review-triage.md b/av-dev-code/agents/review-triage.md similarity index 99% rename from av-dev-pipeline/agents/review-triage.md rename to av-dev-code/agents/review-triage.md index 5753c2f..b59fbc3 100644 --- a/av-dev-pipeline/agents/review-triage.md +++ b/av-dev-code/agents/review-triage.md @@ -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`. **Деградация поразрядная, и ты — тот, кто собирает её строки в один список, сохраняя каждую.** Свою часть diff --git a/av-dev-pipeline/skills/openspec/SKILL.md b/av-dev-code/skills/openspec/SKILL.md similarity index 96% rename from av-dev-pipeline/skills/openspec/SKILL.md rename to av-dev-code/skills/openspec/SKILL.md index 052295b..01ca4af 100644 --- a/av-dev-pipeline/skills/openspec/SKILL.md +++ b/av-dev-code/skills/openspec/SKILL.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` ведёт только в свой плагин; вычисленный от него путь к соседу либо не откроется, либо diff --git a/av-dev-pipeline/skills/openspec/references/config-skeleton.md b/av-dev-code/skills/openspec/references/config-skeleton.md similarity index 97% rename from av-dev-pipeline/skills/openspec/references/config-skeleton.md rename to av-dev-code/skills/openspec/references/config-skeleton.md index 65ac7e7..1ffb9e4 100644 --- a/av-dev-pipeline/skills/openspec/references/config-skeleton.md +++ b/av-dev-code/skills/openspec/references/config-skeleton.md @@ -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`.** Там работа останавливается и человеку объясняют, в чём проблема и как её решают, — а объяснение **собирается из этих двух артефактов**, а не сочиняется заново: третий пересказ одного и того же разошёлся бы с обоими. Требование поэтому стоит здесь, в момент порождения артефакта, а не diff --git a/av-dev-pipeline/skills/openspec/scripts/openspec.py b/av-dev-code/skills/openspec/scripts/openspec.py similarity index 99% rename from av-dev-pipeline/skills/openspec/scripts/openspec.py rename to av-dev-code/skills/openspec/scripts/openspec.py index 861cade..737af41 100644 --- a/av-dev-pipeline/skills/openspec/scripts/openspec.py +++ b/av-dev-code/skills/openspec/scripts/openspec.py @@ -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» выглядят ключами и дали бы находку на ровном месте. Проверено на живом конфиге, который так и падал. """ diff --git a/av-dev-pipeline/skills/resolve/SKILL.md b/av-dev-code/skills/resolve/SKILL.md similarity index 98% rename from av-dev-pipeline/skills/resolve/SKILL.md rename to av-dev-code/skills/resolve/SKILL.md index 126b3e4..450bee5 100644 --- a/av-dev-pipeline/skills/resolve/SKILL.md +++ b/av-dev-code/skills/resolve/SKILL.md @@ -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 ``, +Вызови Skill **`av-dev-code:review`**, дав ссылку на change ``, **план разметки с шага 3** и указание, что это ревью дизайна. Состав приходит планом, а не решается здесь: @@ -458,7 +457,7 @@ flowchart TD ### 7. Ревью кода — та же метка -Вызови Skill **`av-dev-pipeline:review-pipeline`**, дав ссылку на change ``, +Вызови Skill **`av-dev-code:review`**, дав ссылку на change ``, базу диффа, **план разметки с шага 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) конвейера ревью перечисляет все документы канона с их предметом. Пройди по этому перечню — каждый документ получает строку, отрицание остаётся обязательным. Триггеры при этом ты знаешь хуже, и это называется в докладе строкой: «синк diff --git a/av-dev-pipeline/skills/review-pipeline/SKILL.md b/av-dev-code/skills/review/SKILL.md similarity index 99% rename from av-dev-pipeline/skills/review-pipeline/SKILL.md rename to av-dev-code/skills/review/SKILL.md index 1b8a571..81e4d6e 100644 --- a/av-dev-pipeline/skills/review-pipeline/SKILL.md +++ b/av-dev-code/skills/review/SKILL.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` и дельта-спеки, но кода ещё нет. Разметка задачи к этому моменту уже прошла — она шагом раньше, и метка известна. diff --git a/av-dev-pipeline/skills/review-pipeline/references/calibration.md b/av-dev-code/skills/review/references/calibration.md similarity index 100% rename from av-dev-pipeline/skills/review-pipeline/references/calibration.md rename to av-dev-code/skills/review/references/calibration.md diff --git a/av-dev-pipeline/skills/review-pipeline/references/finding-contract.md b/av-dev-code/skills/review/references/finding-contract.md similarity index 100% rename from av-dev-pipeline/skills/review-pipeline/references/finding-contract.md rename to av-dev-code/skills/review/references/finding-contract.md diff --git a/av-dev-pipeline/skills/review-pipeline/references/project-facts.md b/av-dev-code/skills/review/references/project-facts.md similarity index 100% rename from av-dev-pipeline/skills/review-pipeline/references/project-facts.md rename to av-dev-code/skills/review/references/project-facts.md diff --git a/av-dev-pipeline/skills/review-pipeline/references/promote.md b/av-dev-code/skills/review/references/promote.md similarity index 100% rename from av-dev-pipeline/skills/review-pipeline/references/promote.md rename to av-dev-code/skills/review/references/promote.md diff --git a/av-dev-pipeline/skills/review-pipeline/references/review-journal.md b/av-dev-code/skills/review/references/review-journal.md similarity index 100% rename from av-dev-pipeline/skills/review-pipeline/references/review-journal.md rename to av-dev-code/skills/review/references/review-journal.md diff --git a/av-dev-pipeline/skills/review-pipeline/references/review-levels.md b/av-dev-code/skills/review/references/review-levels.md similarity index 100% rename from av-dev-pipeline/skills/review-pipeline/references/review-levels.md rename to av-dev-code/skills/review/references/review-levels.md diff --git a/av-dev-docs/skills/canon/SKILL.md b/av-dev-docs/skills/canon/SKILL.md index a5540b5..9bf33fc 100644 --- a/av-dev-docs/skills/canon/SKILL.md +++ b/av-dev-docs/skills/canon/SKILL.md @@ -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` о каталоге тогда тоже diff --git a/av-dev-docs/skills/canon/references/canon.md b/av-dev-docs/skills/canon/references/canon.md index 3e124ed..bb706c1 100644 --- a/av-dev-docs/skills/canon/references/canon.md +++ b/av-dev-docs/skills/canon/references/canon.md @@ -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/` — **дом темы diff --git a/av-dev-docs/skills/canon/references/changelog.md b/av-dev-docs/skills/canon/references/changelog.md index ac7c8d9..e38dc68 100644 --- a/av-dev-docs/skills/canon/references/changelog.md +++ b/av-dev-docs/skills/canon/references/changelog.md @@ -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/` | diff --git a/av-dev-docs/skills/canon/references/skeletons.md b/av-dev-docs/skills/canon/references/skeletons.md index 0d613a7..ef49ce6 100644 --- a/av-dev-docs/skills/canon/references/skeletons.md +++ b/av-dev-docs/skills/canon/references/skeletons.md @@ -340,7 +340,7 @@ Форма: - + ## ГГГГ-ММ-ДД — <краткое последствие> [проскочил|пойман] - **Где:** путь:строка либо «конвейер, а не код» @@ -420,7 +420,7 @@ severity стоит здесь, а не выводится каждым прох ## `openspec/config.yaml` **Образец переехал.** Файл заводит и заполняет плагин конвейера — скилл -`av-dev-pipeline:openspec`, — потому что по OpenSpec работает он, а не канон +`av-dev-code:openspec`, — потому что по OpenSpec работает он, а не канон документов. Проект без конвейера каталога `openspec/` не имеет вовсе, и образец файла, которого у него нет, в скелетах канона лежал бы мёртвым грузом. diff --git a/av-dev-docs/skills/canon/scripts/docs.py b/av-dev-docs/skills/canon/scripts/docs.py index 9c24d6f..a202ee2 100644 --- a/av-dev-docs/skills/canon/scripts/docs.py +++ b/av-dev-docs/skills/canon/scripts/docs.py @@ -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" "(документ ↔ код)." diff --git a/av-dev-docs/skills/docs/SKILL.md b/av-dev-docs/skills/docs/SKILL.md index bb3db16..7384cbe 100644 --- a/av-dev-docs/skills/docs/SKILL.md +++ b/av-dev-docs/skills/docs/SKILL.md @@ -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). **Конвейера нет** — три шага всё равно твои, просто без его процедуры: сформулируй правило, поищи, чем оно механизируется, и вычеркни прозу, если механизировалось. diff --git a/av-dev-docs/skills/init/SKILL.md b/av-dev-docs/skills/init/SKILL.md index c68a7c2..eaa0561 100644 --- a/av-dev-docs/skills/init/SKILL.md +++ b/av-dev-docs/skills/init/SKILL.md @@ -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`, ни ревью дизайна, ни сверка требований. Каталог принадлежит конвейеру, а не канону, поэтому diff --git a/av-dev-tasks/skills/session/SKILL.md b/av-dev-tasks/skills/session/SKILL.md index 052db0d..93a685f 100644 --- a/av-dev-tasks/skills/session/SKILL.md +++ b/av-dev-tasks/skills/session/SKILL.md @@ -228,7 +228,7 @@ python3 $tk reopen <слаг> --dir D --reason … # приёмка не со - **независимый отчёт ревью** — артефакт, написанный не исполнителем; по нему сверяют состав прогона и урожай. Где он лежит, знает пайплайн проекта; при - конвейере `av-dev-pipeline` это отчёт триажа в + конвейере `av-dev-code` это отчёт триажа в `openspec/changes/archive//review/` (до архивации — `changes//review/`); - **`SPRINT.md` под git** — `git log -p` показывает, что и когда было закрыто. Работает, только если закрытие **закоммичено**: удаление файла задачи и правка diff --git a/av-dev-tasks/skills/session/references/sprint.md b/av-dev-tasks/skills/session/references/sprint.md index e607515..2bb53a2 100644 --- a/av-dev-tasks/skills/session/references/sprint.md +++ b/av-dev-tasks/skills/session/references/sprint.md @@ -157,7 +157,7 @@ flowchart TD 2. **Принимает человек на сессии, а не отдельный агент.** Исполнитель и приёмщик в момент закрытия **не разведены** (решение о снятии и его цена — в `SKILL.md`, «Стимулы»). Опоры остались три: **сохранённый независимый - отчёт ревью** (при конвейере `av-dev-pipeline` — отчёт триажа в + отчёт ревью** (при конвейере `av-dev-code` — отчёт триажа в `openspec/changes/archive//review/`, до архивации — `changes//review/`), `SPRINT.md` под git и `reopen`. Переоценка на сессии и есть момент, когда критерии видит не исполнитель. **Конвейера ревью в проекте нет — первой опоры diff --git a/pyproject.toml b/pyproject.toml index a4d3781..a3f7232 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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", diff --git a/scripts/addresses.py b/scripts/addresses.py index fceba91..cf26294 100644 --- a/scripts/addresses.py +++ b/scripts/addresses.py @@ -10,7 +10,7 @@ куда большей вероятностью, чем новая тема. Адрес документа принадлежит одному плагину, а называют его все: `docs/*` стоит -примерно в сорока местах `av-dev-pipeline`, `tasks/ROADMAP.md` — в четырёх местах +примерно в сорока местах `av-dev-code`, `tasks/ROADMAP.md` — в четырёх местах `av-dev-docs`. Переименование в каноне до этих мест не доходит. **Почему тут нужна машина, а не аккуратность.** Прогон ревью умеет честно diff --git a/scripts/frontmatter.py b/scripts/frontmatter.py index 7771043..6d5b567 100644 --- a/scripts/frontmatter.py +++ b/scripts/frontmatter.py @@ -21,7 +21,7 @@ **Цвет, не отвечающий модели.** Цвет charter'а кодирует **модель**, на которой идёт проход, а не его роль: раскладка — в -`av-dev-pipeline/skills/review-pipeline/SKILL.md`, раздел «Модель по проходу». +`av-dev-code/skills/review/SKILL.md`, раздел «Модель по проходу». Правило существует ровно затем, чтобы стоимость прогона читалась взглядом по списку агентов, и держаться вниманием оно не может: цвет ставится один раз при заведении charter'а, а модель потом меняется калибровкой. diff --git a/shared/operations.md b/shared/operations.md index 557b343..fc52054 100644 --- a/shared/operations.md +++ b/shared/operations.md @@ -3,7 +3,7 @@ **Это дом.** Словарь «чем держат проект» назван в трёх местах трёх разных плагинов: секция `Сопровождение` в роадмапе (`av-dev-tasks`), раздел «Эксплуатация» в `architecture.md` (`av-dev-docs`) и тема ревью `operations` -(`av-dev-pipeline`). Ни один из трёх им не владеет, поэтому дом стоит снаружи, а +(`av-dev-code`). Ни один из трёх им не владеет, поэтому дом стоит снаружи, а плагины везут копии. Три перечня «чем держат проект» уже разъезжались — на «метриках и логах» против diff --git a/shared/plugin-boundary.md b/shared/plugin-boundary.md index 5f4fd30..19fbf00 100644 --- a/shared/plugin-boundary.md +++ b/shared/plugin-boundary.md @@ -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` ведёт только в свой плагин; вычисленный от него путь к соседу либо не откроется, либо