Design note и spec delta для фазы #41: два режима контроллера (главная сессия / фоновый сабагент), асинхронный протокол диспатча и отчётов, fix-loop, ledger с ## Findings, карта из двух маршрутов моделей. Основание — измеренные ограничения DSH 0.2.1-rc.3: subagent.maxDepth по умолчанию 1, у subagent нет provider/model без modelSelectionSettings, выбор модели работает сразу только в workflow.agent(). Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
5.2 KiB
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. Фоновый контроллер-сабагент не
может позвать implementer'а, пока
subagent.maxDepthне поднят до 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
указано явно.