границы плагинов: путь в чужое дерево, безымянные стыки, звонящий у вычитки
Правило границы моё, копий восемь — и нарушал его я же. - путь в дерево чужого плагина снят из пяти мест; маркер копии, уезжающий в проект скелетом, оставлен, но сказано, что сама пара маркеров не едет - короткое имя чужого скилла в четырёх местах стало полным - стык «урожай ревью → задачи» не был назван ни с одной стороны, хотя механика написана с обеих; теперь назван, с веткой «плагина нет» - resolve звал av-dev-git:commit без строки доклада и пересказывал формат коммита, нарушая собственное «ссылайся, не пересказывай» - doc-wording обещал момент вызова, которого не исполнял никто. Правило: звонящий — тот, кто только что писал текст. Вызов появился шагом в docs, init, adopt и upgrade; healthcheck по-прежнему его не зовёт - openspec.py искал SHALL по всему файлу, а образец даёт его в context — проверка молчала ровно в том случае, ради которого написана - фаза 2 review-rubric была недостижима; проход стал судить задуманное, а не код, и это сходится с тем, что о нём говорит конвейер - rules.tasks в образце конфига, ветка «записи задачи нет» у review-scope, возвраты на чекпоинт в схеме resolve, старшинство правила дельта-спек Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: doc-wording
|
||||
description: "Вычитка языка документов проекта по информационному стилю — паспорт, архитектура, конвенции, безопасность, решения ADR, записки разведки, CLAUDE.md. Смотрит отглагольные существительные и страдательный залог, оценку без факта, стоп-слова и канцелярит, «одна мысль — одно предложение», англицизм при живом русском слове, жаргон и метафоры вместо прямого называния, термин, которого нет в документах проекта, транслит в имени файла. Отдаёт готовые формулировки на замену и ничего не правит сам. Записи каталога задач вычитывает отдельный агент task-wording, их форму — task-form. Использовать после правки документов, после adopt и после повышения версии канона. Только чтение."
|
||||
description: "Вычитка языка документов проекта по информационному стилю — паспорт, архитектура, конвенции, безопасность, решения ADR, записки разведки, CLAUDE.md. Смотрит отглагольные существительные и страдательный залог, оценку без факта, стоп-слова и канцелярит, «одна мысль — одно предложение», англицизм при живом русском слове, жаргон и метафоры вместо прямого называния, термин, которого нет в документах проекта, транслит в имени файла. Отдаёт готовые формулировки на замену и ничего не правит сам. Записи каталога задач вычитывает отдельный агент task-wording, их форму — task-form. Зовётся по названной пачке правленных документов, а не на весь канон: последним шагом синка документации (av-dev-docs:docs), шагом заведения проекта (av-dev-docs:init), шагами adopt и upgrade скилла av-dev-docs:canon. Скилл healthcheck его не зовёт — там сверка утверждений, а не языка. Только чтение."
|
||||
tools: Read, Grep, Glob
|
||||
model: sonnet
|
||||
color: green
|
||||
|
||||
@@ -52,7 +52,7 @@ python3 $ds version --dir <корень> # версия кано
|
||||
```
|
||||
|
||||
**Формы `openspec/config.yaml` здесь больше нет.** Каталог принадлежит конвейеру,
|
||||
и форму смотрит его скрипт — `av-dev-code`, скилл `openspec`, команда
|
||||
и форму смотрит его скрипт — скилл `av-dev-code:openspec`, команда
|
||||
`openspec.py check`. Проект работает по OpenSpec, а плагина конвейера нет — форму
|
||||
не проверяет никто, и это надо сказать строкой доклада, а не считать, что она
|
||||
верна.
|
||||
@@ -244,6 +244,18 @@ capability), `openspec/config.yaml`.
|
||||
**Передай им объявленное переходное состояние из шага 5** — иначе честная строка
|
||||
в незаполненном слоте вернётся находкой, а это не поломка, а объявленный долг.
|
||||
|
||||
### 7. Вычитай написанное — агент `doc-wording`
|
||||
|
||||
Судьи смотрят утверждения, а `adopt` только что **писал текст**: честные строки
|
||||
в пустые слоты, переписанные при переносе абзацы, шапки перенесённых документов.
|
||||
Язык этого текста не проверяет никто другой, а зовущий здесь по определению тот,
|
||||
кто его и написал.
|
||||
|
||||
Позови агента **по названной пачке** — документы, которые ты завёл или правил,
|
||||
плюс перенесённые целиком. Весь канон ему не нужен: он работает по списку, и
|
||||
список же служит ему словарём терминов. Находки — готовые формулировки,
|
||||
подставляешь их ты.
|
||||
|
||||
## `upgrade` — канон вырос
|
||||
|
||||
1. `docs.py version` — версия проекта и версия скрипта.
|
||||
@@ -255,6 +267,10 @@ capability), `openspec/config.yaml`.
|
||||
4. Подними `canon` в `docs/.pm.json` до текущей.
|
||||
5. `docs.py check`.
|
||||
6. **Позови судей** — Skill `av-dev-docs:healthcheck`.
|
||||
7. **Позови вычитку** — агент `doc-wording`, но **только по тем документам,
|
||||
которых записи журнала коснулись**, и только если правка была текстовой, а не
|
||||
переименованием файла. Записи журнала пишутся руками в проектной прозе, и
|
||||
дописанный по журналу раздел — такой же свежий текст, как на синке.
|
||||
|
||||
Записи журнала описывают **что сделать проекту**. Если запись этого не говорит —
|
||||
это дефект журнала, и о нём надо сказать, а не догадываться.
|
||||
|
||||
@@ -402,7 +402,8 @@ kebab-case.** Причина не эстетическая: имя файла с
|
||||
род работы, и называется оно **`research` без раздела «Вопрос»**. Такая запись в
|
||||
работу не берётся и лежит в конце своей категории.
|
||||
|
||||
Раскладку, форму записи и алгоритм работы над каждым типом держит скилл `tasks`.
|
||||
Раскладку, форму записи и алгоритм работы над каждым типом держит скилл
|
||||
`av-dev-tasks:tasks`.
|
||||
|
||||
### `CLAUDE.md`
|
||||
|
||||
@@ -432,8 +433,8 @@ kebab-case.** Причина не эстетическая: имя файла с
|
||||
**Файл канону не принадлежит, и проверяет его тоже не канон.** Каталог
|
||||
`openspec/` — предпосылка конвейера: без него не работают ни `opsx:propose`, ни
|
||||
ревью дизайна, ни сверка требований. Заводит его, настраивает и **проверяет
|
||||
форму** плагин `av-dev-code`, скилл `openspec`: там образец файла, там же
|
||||
скрипт `openspec.py check`. `docs.py` о файле не говорит ничего.
|
||||
форму** скилл `av-dev-code:openspec`: там образец файла, там же скрипт
|
||||
`openspec.py check`. `docs.py` о файле не говорит ничего.
|
||||
|
||||
Канон называет его здесь по одной причине: `openspec/specs/` — **дом темы
|
||||
`requirements`**, и без этой строки карта тем неполна. На форму самого
|
||||
|
||||
@@ -19,9 +19,12 @@
|
||||
`<!-- дом: <id> -->` … `<!-- /дом: <id> -->`, копия —
|
||||
`<!-- копия: <id> из <путь> -->` … `<!-- /копия: <id> -->`;
|
||||
`scripts/copies.py` маркетплейса требует дословного
|
||||
совпадения. Комментарии невидимы в отрендеренном markdown и уезжают в проект
|
||||
вместе со скелетом — там они говорят читателю, что у текста есть дом. Правишь
|
||||
текст внутри маркеров — правь дом, а не копию.
|
||||
совпадения. Правишь текст внутри маркеров — правь дом, а не копию.
|
||||
|
||||
**Сама пара маркеров в проект не переносится.** Это машинерия маркетплейса:
|
||||
путь в ней ведёт в дерево плагина, и в репозитории проекта он не разрешится ни
|
||||
во что. Кладя скелет, копируй содержимое между маркерами, а строки
|
||||
`<!-- копия: … -->` и `<!-- /копия: … -->` оставляй здесь.
|
||||
|
||||
## `docs/passport.md`
|
||||
|
||||
@@ -354,6 +357,9 @@
|
||||
<!-- /копия: журнал-дефектов-форма -->
|
||||
```
|
||||
|
||||
Пара маркеров `копия:` внутри — машинерия маркетплейса; в `docs/review.md`
|
||||
проекта уезжает только содержимое между ними (см. выше).
|
||||
|
||||
Новый проект: «Дефектов пока не было. Настройка конвейера появится с первым
|
||||
ревью.»
|
||||
|
||||
|
||||
@@ -75,6 +75,19 @@ description: Вести содержимое документов канона
|
||||
которых работа не касалась, — расхождение, внесённое правкой в одном месте, там
|
||||
и живёт.
|
||||
|
||||
## Вычитка — наоборот, здесь
|
||||
|
||||
**Язык правленого вычитывается на синке, и зовёшь агента `doc-wording` ты.**
|
||||
Довод обратный доводу про судей: он читает **только названную пачку**, стоит
|
||||
дёшево и ищет ровно то, что портится в момент письма, — залог, оценку без факта,
|
||||
жаргон, термин без ввода. Ждать сессии здесь нечего: через месяц никто уже не
|
||||
помнит, какую фразу имел в виду автор.
|
||||
|
||||
Позови его **последним шагом синка**, отдав список файлов, которых чек-лист
|
||||
коснулся, — и назови этот список в промпте: по нему же он судит, известен ли
|
||||
термин. Ничего не правивший синк агента не зовёт. Находки он отдаёт готовыми
|
||||
формулировками, подставляешь их ты.
|
||||
|
||||
## ADR — промоут, а не второе сочинение
|
||||
|
||||
Обоснование уже написано: `opsx:propose` кладёт `design.md` в каждый change, и
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: init
|
||||
description: "Завести новый проект — сессия вопросов и ответов по свободному описанию замысла, из которой рождается первичная документация по канону av-dev: паспорт, CLAUDE.md с инвариантами и командами, модель угроз с периметром, первые цели в роадмапе и скелет остальных документов. OpenSpec заводит не сам, а вызовом скилла av-dev-code:openspec — каталог принадлежит конвейеру; плагина конвейера нет — шаг пропускается строкой доклада. Использовать, когда начинают новый проект с нуля, когда есть только текст «что мне нужно и почему» и надо превратить его в рабочую документацию, когда просят провести стартовое интервью по брифу. Проект, где документация уже как-то ведётся, переводит скилл canon."
|
||||
description: "Завести новый проект — сессия вопросов и ответов по свободному описанию замысла, из которой рождается первичная документация по канону av-dev: паспорт, CLAUDE.md с инвариантами и командами, модель угроз с периметром и скелет остальных документов; первые цели собирает интервью, а записывает их вызовом скилла av-dev-tasks:tasks — роадмап принадлежит плагину задач. OpenSpec заводит не сам, а вызовом скилла av-dev-code:openspec — каталог принадлежит конвейеру; плагина конвейера нет — шаг пропускается строкой доклада. Использовать, когда начинают новый проект с нуля, когда есть только текст «что мне нужно и почему» и надо превратить его в рабочую документацию, когда просят провести стартовое интервью по брифу. Проект, где документация уже как-то ведётся, переводит скилл canon."
|
||||
---
|
||||
|
||||
# Заведение нового проекта
|
||||
@@ -26,12 +26,17 @@ description: "Завести новый проект — сессия вопро
|
||||
| `passport.md` | `architecture.md` |
|
||||
| `CLAUDE.md` | `database.md` |
|
||||
| `security.md` | `conventions/` |
|
||||
| `tasks/ROADMAP.md` — первые цели | `research/`, `adr/` |
|
||||
| `docs/.pm.json` | `review.md` — журнал пуст, настройка появится с первым ревью |
|
||||
| `docs/.pm.json` | `research/`, `adr/` |
|
||||
| | `review.md` — журнал пуст, настройка появится с первым ревью |
|
||||
|
||||
Честная строка информативна, а не «TBD»: «архитектуры пока нет: кода нет,
|
||||
заводится первой задачей». Проход читает её как факт.
|
||||
|
||||
**`tasks/ROADMAP.md` в таблице нет намеренно.** Первые цели `init` собирает
|
||||
интервью (блок 6), но записывает их не он: каталогом задач и формой целей владеет
|
||||
`av-dev-tasks:tasks`, и это шаг 7. Плагина нет — цели остаются списком в докладе,
|
||||
роадмапа в проекте не появляется, и это говорится строкой.
|
||||
|
||||
## Порядок интервью — зависимость, а не удобство
|
||||
|
||||
Каждый блок опирается на ответ предыдущего; переставлять нельзя.
|
||||
@@ -66,7 +71,7 @@ description: "Завести новый проект — сессия вопро
|
||||
|
||||
## Обращение к соседним плагинам
|
||||
|
||||
Два шага из девяти — вызовы чужого: OpenSpec заводит конвейер, каталог задач
|
||||
Два шага порядка работы — вызовы чужого: OpenSpec заводит конвейер, каталог задач
|
||||
ведёт плагин задач. Ни того, ни другого `init` не делает руками.
|
||||
|
||||
**Копия.** Дом правила — `shared/plugin-boundary.md` в репозитории плагинов.
|
||||
@@ -123,8 +128,14 @@ description: "Завести новый проект — сессия вопро
|
||||
тоже строка доклада.
|
||||
8. `docs.py check` из скилла `canon` — до отсутствия дрейфа. Замечания о
|
||||
незаполненных плейсхолдерах остаются: их закрывает не `init`, а работа.
|
||||
9. Покажи человеку, что получилось, и **отдельным списком** — что выведено из
|
||||
брифа, что предположено, что осталось неизвестным. Правят по этим строкам.
|
||||
9. **Вычитай написанное — агент `doc-wording`**, по пачке заполненных документов
|
||||
(`passport.md`, `CLAUDE.md`, `security.md`). Здесь он нужен сильнее, чем где
|
||||
бы то ни было: весь текст сочинён только что и по свободному брифу человека, а
|
||||
бриф — это как раз залог, оценки без факта и жаргон. Скелеты с честной строкой
|
||||
в пачку не клади, вычитывать в них нечего. Находки — готовые формулировки,
|
||||
подставляешь их ты.
|
||||
10. Покажи человеку, что получилось, и **отдельным списком** — что выведено из
|
||||
брифа, что предположено, что осталось неизвестным. Правят по этим строкам.
|
||||
|
||||
## Что дальше
|
||||
|
||||
|
||||
Reference in New Issue
Block a user