SDD-V1.CLEARN.RU
Spec-Driven Development · Qwen Code + OpenSpec
Где живут спецификации
Решение для команды: микросервисы, разные репозитории, свои NuGet-библиотеки. Варианты, подводные камни и рекомендация — чтобы выбрать осознанно.
Spec-Driven Development · Qwen Code + OpenSpec
Решение для команды: микросервисы, разные репозитории, свои NuGet-библиотеки. Варианты, подводные камни и рекомендация — чтобы выбрать осознанно.
01 · Проблема
02 · Идея
03 · Инструменты
$ npm install -g @fission-ai/openspec@latest
$ cd payments-service && openspec init --tools qwen
qwen> /opsx-explore # обсудить идею (ничего не создаёт)
qwen> /opsx-propose limit-refund-window # агент пишет спеку — вы ревьюите
✓ proposal.md зачем и что меняем
✓ specs/ требования + сценарии GIVEN–WHEN–THEN
✓ design.md техническое решение
✓ tasks.md чек-лист реализации
qwen> /opsx-apply # реализация по чек-листу
qwen> /opsx-archive # дельта влилась в openspec/specs/
04 · Наш контекст
openspec init в одном репо тривиален. Но где живёт спецификация, когда репозиториев одиннадцать?
05 · Развилка №1 — код
| Монорепозиторий | Мультирепо | |
|---|---|---|
| Сквозное изменение | один PR, ревьюер видит всё | N PR, согласование руками |
| Атомарность контрактов | код и контракт меняются вместе | версии пакетов, окно рассинхрона |
| Права и владение | сложнее разграничить | граница репо = граница команды |
| CI | тяжелеет, нужна селективная сборка | простые независимые пайплайны |
| Контекст для агента | всё в одной рабочей копии | агент видит один репо |
| Переезд | дорогой разовый проект | мы уже здесь |
06 · Развилка №2 — спеки
openspec/ в каждом репозитории — спека рядом с кодом.Дальше — каждый вариант с плюсами, минусами и подводными камнями. Решение в конце.
07 · Вариант А
openspec/ в каждом репозиторииopenspec init и всё08 · Вариант Б
syn-specs (store: планирование в своём репо)
├── .openspec-store/store.yaml
└── openspec/
├── specs/ что истинно
└── changes/ что в работе
▲
┌─────────────┼─────────────┐
payments-svc orders-svc syn-libs (NuGet)
09 · Вариант В
references — read-only контекст для агента.# payments-service/openspec/config.yaml references: - syn-specs
10 · Сравнение
| А: везде своя | Б: всё в store | В: гибрид | |
|---|---|---|---|
| Локальная фича | один PR | два репо на мелочь | один PR |
| Сквозная фича | размазана | одно место | контракт в store |
| NuGet-библиотеки | требования в N репо | централизовано | спека в репо либы, контракт в store |
| Видимость системы | нет | полная | по контрактам |
| Сложность внедрения | минимальная | средняя | средняя |
| Зрелость инструмента | стабильно | beta | beta (references) |
11 · Особый случай
| Требование | Пример | Где спека |
|---|---|---|
| Публичный контракт пакета | «событие сериализуется как raw JSON без envelope» | store — его читают все потребители |
| Реализация пакета | «кеш резолвера не аллоцирует на горячем пути» | openspec/ в репозитории библиотек |
12 · Рекомендация
openspec/.references лишь автоматизирует то же самое.
13 · Подводные камни
| Ошибка | Симптом | Лечение |
|---|---|---|
| Спека после кода | «допишу перед мержем» | propose — вход в задачу, до первой строки кода |
| Спека-роман | 40 требований на изменение | одно изменение = одна связная дельта |
| Всё в store | два PR на правку текста | store — только для пересекающего границы |
| Мёртвый архив | changes/ пухнет | archive — часть закрытия задачи |
| Спека без ревью | агент написал, никто не прочёл | у спеки тот же ревьюер, что у кода |
| Карго-культ сценариев | GIVEN/WHEN/THEN пересказывают код | сценарий — поведение для потребителя |
14 · План
openspec validate --all в CI каждого репо со спеками. Конвенция ревью: сначала спека, потом код.npm i -g @fission-ai/openspec, пилотный репо, openspec init --tools qwen, первая задача через /opsx-propose.Решение за командой