Andrey Epifancev 3ad378c1dc chore(openspec): archive dsh-sdd (#41)
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>
2026-10-24 17:57:35 +04:00

5.2 KiB
Raw Blame History

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