DSH: OpenSpec — проектные скиллы, --openspec, проверка (#42) #60

Merged
aep merged 10 commits from feat/42-dsh-openspec into main 2026-10-24 18:59:58 +03:00
Owner

Issue: #42 (роадмап порта — #48). Change: openspec/changes/dsh-openspec/.

Что делает

OpenSpec в DSH идёт теми же воркфлоу, что в Claude Code, но без Claude Code:

  • Скиллы в проекте. openspec init --tools agents пишет шесть
    openspec-* в .agents/skills/ — нативный проектный корень скиллов DSH
    (проверено сабагентом с cwd в проекте). Глобальной копии в ~/.dsh/skills
    нет: генератор обновляется вместе с CLI проекта, копия старела бы молча.
  • dsh/install.sh --check сообщает версию CLI и наличие agents-скиллов;
    отсутствие CLI — WARN, код возврата не меняется.
  • dsh/install.sh --openspec добавляет agents-адаптер в текущий проект
    ($PWD), только если openspec/ уже есть: иначе отказ с готовой командой.
    Идемпотентно, .claude/ не трогает.
  • Слэш-команд нет. Вход — model-invocable скиллы; /role остаётся
    единственной командой бандла.
  • Документация — dsh/PORT.md (§1, §2, §5, §6, §8) и dsh/README.md.

Claude Code не затронут: roles/, hooks/, global/, корневой install.sh,
agents/, .claude/*, dsh/bundle/ — без изменений.

Приёмка

  • openspec validate dsh-openspec --strict — valid.
  • bash dsh/tests/run.sh — 43/43; bash tests/run.sh — 630/630.
  • Живой прогон в /tmp/dsh-openspec-accept: new change probe →
    status → instructions proposal → validate probe --strict
    (Change 'probe' is valid) → archive probe -y (спека создана); повторный
    openspec init идемпотентен.
  • Видимость: сабагент с cwd в этом проекте увидел все шесть openspec-*.
  • /role, bootstrap и sdd — тесты зелёные.

Rulings I made

  • R-1 (design §2): скиллы только в проекте. Цена — новый проект подключается
    один раз.
  • R-2 (design §2): слэш-команды нет; вход — скиллы по description.
  • R-3 (design §2): --openspec не создаёт OpenSpec-корень.
  • R-4 (design §4): --check смотрит $ROOT/.agents/skills, а не cwd.
  • R-5 (design §4): видимость скиллов проверяется живой сессией, не юнитом.
  • R-2 (ledger): core.symlinks=false в этом клоне не трогаем; симлинк
    dsh/bundle/hooks восстановлен в worktree, в коммит не идёт (наблюдение O-1).
  • R-3 (ledger): ручные прогоны install.sh — только с HOME и DSH_HOME
    во временном каталоге (в окружении экспортирован реальный DSH_HOME, O-2).

Находки ревью

Маркер Что Статус
T1.* нет —
T2.1 негативный тест --check без openspec опирается на раскладку системных катал��гов; на Linux с npm -g в /usr может ложно найти CLI deferred
T3.1 в usage() описание --openspec смещено на 2 пробела fixed 56bbfba
T3.4 TDD-порядок нарушен (код раньше тестов) deferred
T4.1 README Layout ставил .agents/skills внутрь дерева dsh/ fixed 4ecb9b1

Что осталось человеку

  • Прочитать и смержить PR (merge — только по команде).
  • После merge: openspec archive dsh-openspec отдельным PR, закрыть #42,
    удалить ветку.
Issue: #42 (роадмап порта — #48). Change: `openspec/changes/dsh-openspec/`. ## Что делает OpenSpec в DSH идёт теми же воркфлоу, что в Claude Code, но без Claude Code: - **Скиллы в проекте.** `openspec init --tools agents` пишет шесть `openspec-*` в `.agents/skills/` — нативный проектный корень скиллов DSH (проверено сабагентом с cwd в проекте). Глобальной копии в `~/.dsh/skills` нет: генератор обновляется вместе с CLI проекта, копия старела бы молча. - **`dsh/install.sh --check`** сообщает версию CLI и наличие agents-скиллов; отсутствие CLI — `WARN`, код возврата не меняется. - **`dsh/install.sh --openspec`** добавляет agents-адаптер в текущий проект (`$PWD`), только если `openspec/` уже есть: иначе отказ с готовой командой. Идемпотентно, `.claude/` не трогает. - **Слэш-команд нет.** Вход — model-invocable скиллы; `/role` остаётся единственной командой бандла. - **Документация** — `dsh/PORT.md` (§1, §2, §5, §6, §8) и `dsh/README.md`. Claude Code не затронут: `roles/`, `hooks/`, `global/`, корневой `install.sh`, `agents/`, `.claude/*`, `dsh/bundle/` — без изменений. ## Приёмка - `openspec validate dsh-openspec --strict` — valid. - `bash dsh/tests/run.sh` — 43/43; `bash tests/run.sh` — 630/630. - Живой прогон в `/tmp/dsh-openspec-accept`: `new change probe` → `status` → `instructions proposal` → `validate probe --strict` (`Change 'probe' is valid`) → `archive probe -y` (спека создана); повторный `openspec init` идемпотентен. - Видимость: сабагент с cwd в этом проекте увидел все шесть `openspec-*`. - `/role`, bootstrap и `sdd` — тесты зелёные. ## Rulings I made - **R-1** (design §2): скиллы только в проекте. Цена — новый проект подключается один раз. - **R-2** (design §2): слэш-команды нет; вход — скиллы по `description`. - **R-3** (design §2): `--openspec` не создаёт OpenSpec-корень. - **R-4** (design §4): `--check` смотрит `$ROOT/.agents/skills`, а не cwd. - **R-5** (design §4): видимость скиллов проверяется живой сессией, не юнитом. - **R-2 (ledger)**: `core.symlinks=false` в этом клоне не трогаем; симлинк `dsh/bundle/hooks` восстановлен в worktree, в коммит не идёт (наблюдение O-1). - **R-3 (ledger)**: ручные прогоны `install.sh` — только с `HOME` и `DSH_HOME` во временном каталоге (в окружении экспортирован реальный `DSH_HOME`, O-2). ## Находки ревью | Маркер | Что | Статус | |---|---|---| | T1.* | нет | — | | T2.1 | негативный тест `--check` без openspec опирается на раскладку системных катал��гов; на Linux с `npm -g` в `/usr` может ложно найти CLI | deferred | | T3.1 | в `usage()` описание `--openspec` смещено на 2 пробела | fixed 56bbfba | | T3.4 | TDD-порядок нарушен (код раньше тестов) | deferred | | T4.1 | README Layout ставил `.agents/skills` внутрь дерева `dsh/` | fixed 4ecb9b1 | ## Что осталось человеку - Прочитать и смержить PR (merge — только по команде). - После merge: `openspec archive dsh-openspec` отдельным PR, закрыть #42, удалить ветку.
aep added 10 commits 2026-10-24 18:55:56 +03:00
Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
aep merged commit 46e4c3d7ca into main 2026-10-24 18:59:58 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: aep/claude-harness#60
No description provided.