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