Версия 7 объявила openspec/ слотом канона: init его заводил, adopt тоже, образец config.yaml лежал в скелетах, отсутствие каталога docs.py считал отказом. Разрез был проведён не там. По OpenSpec работает конвейер — без каталога не запускаются ни opsx:propose, ни ревью дизайна, ни сверка требований, — а канон документов о нём только высказывался. Проект, которому конвейер не нужен, получал отказ за отсутствие того, чем не пользуется. Появился скилл av-dev-pipeline:openspec: заводит каталог, заменяет закомментированный пример в config.yaml настройкой, объясняет разрез между ссылкой и пересказом — утверждение, опровергаемое открытием другого файла, это пересказ; строка, говорящая какой файл открыть, это ссылка. Образец переехал туда же, в references/config-skeleton.md, а в скелетах канона остался указатель. init и canon adopt OpenSpec больше не заводят, а зовут скилл конвейера через пространство имён. Вызов не разрешился — плагина конвейера нет, и это строка доклада, а не поломка: docs.py о каталоге тогда тоже молчит. Отсутствие openspec/ стало неприменимостью вместо отказа, остальные четыре проверки формы идут только при живом каталоге. На фикстуре без openspec дрейф упал с 10 пунктов до 9. Что осталось на месте и названо честно: проверка формы config.yaml и сторож версии (docs.py openspec-form) пока живут в скрипте канона. Перенести их значит завести в конвейере свой скрипт, а этого у него нет ни одного. У файла сейчас два плагина — один заводит, другой проверяет, — и это временное состояние, а не задуманное; в журнале версий оно записано так же. Канон повышен до версии 9. Запись не двигает ни одного файла проекта: меняется только то, кто их заводит. Но в ней названа потеря, которую легко не заметить — проект по OpenSpec без установленного пайплайна теперь не услышит от docs.py ничего про свою настройку, и молчание это законное. Гейт зелёный, скиллов стало десять. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
9.5 KiB
name, description
| name | description |
|---|---|
| init | Завести новый проект — сессия вопросов и ответов по свободному описанию замысла, из которой рождается первичная документация по канону av-dev: паспорт, CLAUDE.md с инвариантами и командами, модель угроз с периметром, первые цели в роадмапе и скелет остальных документов. OpenSpec заводит не сам, а вызовом скилла av-dev-pipeline:openspec — каталог принадлежит конвейеру; плагина конвейера нет — шаг пропускается строкой доклада. Использовать, когда начинают новый проект с нуля, когда есть только текст «что мне нужно и почему» и надо превратить его в рабочую документацию, когда просят провести стартовое интервью по брифу. Проект, где документация уже как-то ведётся, переводит скилл canon. |
Заведение нового проекта
Вход — свободный текст «что мне нужно и почему». Выход — канон документов, с которого дальше работают все остальные скиллы.
Определение канона — канон. Прочитай его до
первого вопроса: интервью идёт по слотам канона, а не по вкусу. Что класть в
каждый файл — скелеты; не выдумывай заглушки
своей формы, docs.py узнаёт только плейсхолдер оттуда.
Что init физически не может произвести
В новом репозитории нет кода, а architecture.md, database.md,
conventions/ и research/ выводятся из него. Сочинить их на старте — значит
проектировать вперёд реальности, и написанное протухнет раньше первой задачи.
Поэтому init заполняет то, что человек знает до первой строки кода:
| Заполняется | Остаётся скелетом с честной строкой |
|---|---|
passport.md |
architecture.md |
CLAUDE.md |
database.md |
security.md |
conventions/ |
docs/tasks/ROADMAP.md — первые цели |
research/, adr/ |
docs/.pm.json |
review.md — журнал пуст, настройка появится с первым ревью |
Честная строка информативна, а не «TBD»: «архитектуры пока нет: кода нет, заводится первой задачей». Проход читает её как факт.
Порядок интервью — зависимость, а не удобство
Каждый блок опирается на ответ предыдущего; переставлять нельзя.
- Цель и потребители. Ради чего это; кто пользуется — список закрытый, и он определяет, что считать нужным, а что интересным.
- Чем это НЕ является и мера успеха. Граница домена — критерий, по
которому потом судят в теме
architectureо переносе понятия. Мера — по чему поймём, что удалось. - Периметр и недоверенный вход. Открыт наружу или контур доверенный; что приходит извне и каким каналом; что чувствительнее чего. Контур ещё не развёрнут — назови оба периметра, целевой и сегодняшний.
- Стек, хранилище, необратимое. Чем пишем и почему; где данные; что в этом проекте нельзя откатить — деплой, выкладка наружу, перезапись данных.
- Чем краснеет гейт. Какие проверки обязательны; что красит безусловно; чего в гейте намеренно не будет и кто тогда это гоняет.
- Первые цели. Возможности приложения, а не задачи: три-пять целей в
Запланировано, каждая — ответ на «что приложение будет уметь», с обоснованием очереди прозой.
Как вести
- Не больше трёх вопросов за итерацию (
AskUserQuestion), рекомендация первым вариантом. Между итерациями применяй уже решённое. - Сперва вычитай ответы из брифа. Если ответ уже есть в тексте, вопрос не задавай — покажи своё прочтение и спроси, верно ли.
- Не выдумывай четыре вещи: периметр, что необратимо, измеренные числа и адресата дорогой проверки. Их из замысла не вывести. Не сказано — пиши «неизвестно» с пометкой, что ждёт ответа.
- Развилка замысла — человеку, механика — сама. Имена файлов, слаги, порядок строк не выноси.
Порядок работы
-
Прочитай бриф целиком. Выпиши, на какие блоки интервью ответ уже есть.
-
Проведи интервью итерациями по ≤3 вопроса.
-
OpenSpec — вызови Skill
av-dev-pipeline:openspec. Он заводит каталог и заменяет пример вconfig.yamlнастройкой. Делается это до первого документа: безopenspec/не работают ниopsx:propose, ни ревью дизайна, ни сверка требований. Каталог принадлежит конвейеру, а не канону, поэтому здесь только вызов — ни команды, ни формы файлаinitне знает.Вызов не разрешился — плагина конвейера в проекте нет. Это законный исход, а не поломка: проект без конвейера живёт без OpenSpec. Скажи это строкой в докладе и иди дальше;
docs.py checkо каталоге тоже промолчит. -
Заведи
docs/.pm.jsonс текущей версией канона. -
Напиши заполняемые документы. Бриф переезжает в
passport.mdи отдельным файлом не остаётся: два дома для одного замысла разойдутся на первом же уточнении. -
Заведи скелет остальных по скелетам — каждый с честной строкой.
-
Каталог задач и первые цели — вызови скилл
av-dev-tasks:tasks: он владеет форматом целей и задач. Не разрешился — учёт задач остаётся владельцу, и это тоже строка доклада. -
docs.py checkиз скиллаcanon— до отсутствия дрейфа. Замечания о незаполненных плейсхолдерах остаются: их закрывает неinit, а работа. -
Покажи человеку, что получилось, и отдельным списком — что выведено из брифа, что предположено, что осталось неизвестным. Правят по этим строкам.
Что дальше
- Содержимое канона по ходу разработки ведёт скилл
docs. - Раскладку проверяет
canon check. - Первую задачу берёт пайплайн проекта;
architecture.mdиconventions/наполняются его шагом синка, а не заранее.
Чего этот скилл не делает
- Не проектирует систему. Архитектура выводится из кода, а не наоборот.
- Не пишет код и не заводит сборку.
- Не переводит существующий проект — это
canon adopt. Признак: в репозитории уже есть документация или беклог в какой-то раскладке. - Не решает за человека, что важно: цель, границы и периметр — его ответы.