65 lines
4.7 KiB
Markdown
65 lines
4.7 KiB
Markdown
# Proposal: OpenSpec в DSH
|
||
|
||
Issue: #42 (роадмап порта — #48). Источники:
|
||
- `dsh/PORT.md`, разделы 1 (таблица слоёв: «Gitea, OpenSpec — CLI + skills, 1:1»),
|
||
3 (deferred), 8 (next phases);
|
||
- спайк 24.10.2026 в temp-проекте: `openspec init --tools agents` + полный цикл
|
||
CLI без Claude Code;
|
||
- ответы владельца 24.10.2026: скиллы — в проект, слэш-команда не нужна.
|
||
|
||
## Why
|
||
|
||
В Claude Code архитектурная задача идёт через OpenSpec: `openspec/changes/<id>/`
|
||
— proposal, дельта спеки, design, tasks; `openspec validate` и `openspec archive`
|
||
держат спеки в правде. В DSH этот слой сейчас отсутствует: CLI работает, но
|
||
скиллов нет, и агент либо правит спеку руками, либо не заводит change вовсе.
|
||
`dsh/PORT.md` при этом обещает «CLI + skills 1:1» — обещание не выполнено.
|
||
|
||
Роль dev уже требует спеки в `openspec/changes/<id>/` для архитектурных задач.
|
||
Пока скиллов нет, это требование в DSH-сессии выполняется только «на память
|
||
модели»: формат proposal/дельты и порядок команд ничем не закреплены.
|
||
|
||
## What Changes
|
||
|
||
- **Скиллы OpenSpec в проекте.** `openspec init --tools agents` создаёт
|
||
`.agents/skills/openspec-{propose,apply-change,archive-change,explore,sync-specs,update-change}/SKILL.md`
|
||
— ровно тот формат, который DSH читает как проектные скиллы. В репозиторий
|
||
обвязки эти шесть скиллов добавляются (dogfooding: обвязка сама ведёт спеки
|
||
через OpenSpec). Скиллы остаются генератором openspec: `openspec update`
|
||
обновляет их под версию CLI проекта.
|
||
- **Глобальной копии нет.** В `~/.dsh/skills` скиллы OpenSpec не ставятся: копия
|
||
стареет относительно CLI проекта, а в проектах с собственным `.agents/skills`
|
||
появляются два скилла с одним именем.
|
||
- **`dsh/install.sh`:** `--check` сообщает версию CLI `openspec` и наличие
|
||
agents-скиллов в репозитории обвязки; новая опция `--openspec` добавляет
|
||
agents-адаптер в текущий проект (`openspec init --tools agents`), только если
|
||
`openspec/` уже существует, — идемпотентно, `.claude/` не трогает.
|
||
- **`dsh/PORT.md` и `dsh/README.md`:** раздел про OpenSpec, путь `.agents/skills`,
|
||
цикл проверки, снятие пункта из «Next phases».
|
||
- **`dsh/tests/openspec.test.mjs`:** проверки без DSH runtime — наличие и
|
||
frontmatter скиллов в репозитории, поведение `--check` и `--openspec` с
|
||
подставным бинарём `openspec` в `PATH`.
|
||
- **Слэш-команд нет.** В Claude Code есть `/opsx:*`; в DSH вход — скиллы,
|
||
которые модель вызывает по фразе «openspec propose» / «openspec archive».
|
||
`/role` и bootstrap не меняются.
|
||
|
||
## Capabilities
|
||
|
||
### New Capabilities
|
||
- `dsh-openspec`: как DSH-адаптер обвязки ставит и проверяет скиллы OpenSpec,
|
||
чем отличается от Claude Code и что обязано работать без Claude Code.
|
||
|
||
### Modified Capabilities
|
||
|
||
## Impact
|
||
|
||
- Claude Code не меняется: `.claude/skills/openspec-*` и `.claude/commands/opsx/*`
|
||
остаются как есть; `roles/`, `hooks/`, `global/`, корневой `install.sh` не трогаются.
|
||
- В репозитории появляется `.agents/skills/` (6 каталогов + `.openspec-target`).
|
||
Дублирование с `.claude/skills/` — цена поддержки двух клиентов одним
|
||
генератором; расхождение версий ловится `openspec update`.
|
||
- `dsh/install.sh --openspec` получает право вызывать внешний CLI; в тестах он
|
||
подменяется, в живом прогоне требуется установленный `openspec` ≥ 1.13.
|
||
- Роль dev не меняется: строка про `openspec/changes/<id>/` уже есть; в DSH она
|
||
начинает работать, потому что скиллы появились в проекте.
|