2026-10-24 19:44:38 +04:00

65 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 она
начинает работать, потому что скиллы появились в проекте.