Change dsh-sdd перенесён в openspec/changes/archive/2026-10-24-dsh-sdd, дельта dsh-sdd добавлена в openspec/specs/dsh-sdd/spec.md (7 требований). Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
72 lines
5.2 KiB
Markdown
72 lines
5.2 KiB
Markdown
# Proposal: DSH-native SDD
|
||
|
||
Issue: #41 (роадмап порта — #48). Источники:
|
||
- `dsh/PORT.md`, разделы 3 (deferred: SDD), 7 (риски), 8 (next phases, п. 4);
|
||
- brainstorming 24.10.2026 (ответы владельца о режимах контроллера);
|
||
- разбор исходников DSH 0.2.1-rc.3: `dsh-tool-subagent`, `dsh-tool-workflow`,
|
||
`dsh-subagent`, `dsh-workflow-ptc`.
|
||
|
||
## Why
|
||
|
||
SDD — единственное место, где DSH расходится с Claude Code не текстом, а
|
||
семантикой. В Claude Code контроллер исполняет план, вызывая `Task` и получая
|
||
результат в том же ходе; в DSH `subagent` возвращает id и завершается
|
||
уведомлением позже, а `workflow` исполняет детерминированный скрипт и ждёт
|
||
всех детей. Пока эта разница не переписана, `subagent-driven-development`
|
||
в DSH-сессии либо врёт о возможностях платформы, либо ломается на первом
|
||
ожидании.
|
||
|
||
Дополнительно разбор исходников показал две вещи, которые меняют план:
|
||
|
||
1. Глубина делегирования по умолчанию — 1. Фоновый контроллер-сабагент не
|
||
может позвать implementer'а, пока `subagent.maxDepth` не поднят до 2.
|
||
2. У инструмента `subagent` нет `provider`/`model` в схеме, пока строке
|
||
`tool-subagent` не поставлен `modelSelectionSettings: true`; ребёнок
|
||
наследует модель сессии. Выбор модели работает сразу только внутри
|
||
`workflow.agent()`. Маршрутов в этом окружении два:
|
||
`deepseek-official/deepseek-flash` и `deepseek-official/deepseek-v4-pro`.
|
||
|
||
Без этих двух фактов любая инструкция SDD «укажи модель в dispatch» невыполнима
|
||
и превращается в фикцию.
|
||
|
||
## What Changes
|
||
|
||
- **Новый DSH-skill `dsh/skills/sdd/SKILL.md`** — инструкция исполнения плана
|
||
в DSH: два режима контроллера (главная сессия и фоновый сабагент), протокол
|
||
dispatch/wait/report, ревью задачи, fix-loop, ledger `## Findings`, рулинги,
|
||
финальное ревью ветки, отличие от Claude-SDD одной таблицей.
|
||
Ставится `dsh/install.sh --skills` в `~/.dsh/skills`; Claude Code его не
|
||
получает — харнес Claude не меняется.
|
||
- **`dsh/subagent-models.yml`** — opt-in overlay профиля: `modelSelectionSettings`
|
||
для `tool-subagent` и `tool-subagent-fork` плюс `subagent.maxDepth: 2`.
|
||
В бандл не входит: строка `subagent-model-selection-settings` есть в
|
||
web/desktop-профиле и отсутствует в headless, и включённый флаг уронил бы
|
||
headless на загрузке.
|
||
- **`dsh/PORT.md`** — раздел о включении выбора модели и глубины, ссылка на
|
||
overlay, снятие пункта 4 из «Next phases» после приёмки.
|
||
- **`dsh/tests/sdd-skill.test.mjs`** — проверки, которые идут без DSH runtime:
|
||
frontmatter skill, оба режима, имена инструментов, требование маршрута
|
||
модели, отсутствие ссылок на несуществующие средства (`job_output` как
|
||
ожидание сабагента, `maxDepth` без оговорки).
|
||
- **Пробный прогон** в temp-репозитории: план из 3 задач, implementer →
|
||
reviewer → fix → финальное ревью; транскрипт и ledger — в отчёте issue.
|
||
Прогон доказывает семантику, а не заменяет тесты: без DSH runtime его не
|
||
повторить, поэтому он делается один раз и результаты фиксируются в
|
||
`design.md` и в комментарии к #41.
|
||
|
||
## Impact
|
||
|
||
- Claude-harness не меняется: `roles/`, `hooks/`, `global/`, `install.sh`,
|
||
`agents/` остаются как есть.
|
||
- Бандл не меняет состав строк профиля; новое поведение — только по явному
|
||
решению владельца через overlay.
|
||
- Роль dev после приёмки должна ссылаться на новый skill для DSH-сессий
|
||
(одна строка; правится в `~/.dsh/roles`, не в общем `roles/dev.md`).
|
||
|
||
## Acceptance
|
||
|
||
Из #41, без изменений: три задачи не теряются, отчёты собираются, ревьюер
|
||
находит и проверяет хотя бы один дефект, fix-loop завершается, ledger содержит
|
||
`## Findings` со статусами, прогон тестов зелёный, отличие от Claude-SDD
|
||
указано явно.
|