# 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 указано явно.