From 3ad378c1dc5576ee56360bb72d7d019941e7eaf3 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Sat, 24 Oct 2026 17:57:35 +0400 Subject: [PATCH] chore(openspec): archive dsh-sdd (#41) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .../2026-10-24-dsh-sdd}/.openspec.yaml | 0 .../2026-10-24-dsh-sdd}/design.md | 0 .../2026-10-24-dsh-sdd}/proposal.md | 0 .../2026-10-24-dsh-sdd}/specs/dsh-sdd/spec.md | 0 .../2026-10-24-dsh-sdd}/trial/README.md | 0 .../2026-10-24-dsh-sdd}/trial/SPEC.md | 0 .../trial/briefs/review-1.md | 0 .../trial/briefs/review-2.md | 0 .../trial/briefs/review-3.md | 0 .../trial/briefs/task-1.md | 0 .../trial/briefs/task-2.md | 0 .../trial/briefs/task-3.md | 0 .../2026-10-24-dsh-sdd}/trial/ledger.md | 0 .../2026-10-24-dsh-sdd}/trial/plan.md | 0 .../trial/reports/fix-2-round-1.md | 0 .../trial/reports/re-review-2.md | 0 .../trial/reports/review-1.md | 0 .../trial/reports/review-2.md | 0 .../trial/reports/review-3.md | 0 .../trial/reports/review-final.md | 0 .../trial/reports/task-1.md | 0 .../trial/reports/task-2.md | 0 .../trial/reports/task-3.md | 0 openspec/specs/dsh-sdd/spec.md | 104 ++++++++++++++++++ 24 files changed, 104 insertions(+) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/.openspec.yaml (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/design.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/proposal.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/specs/dsh-sdd/spec.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/README.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/SPEC.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/briefs/review-1.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/briefs/review-2.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/briefs/review-3.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/briefs/task-1.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/briefs/task-2.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/briefs/task-3.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/ledger.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/plan.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/reports/fix-2-round-1.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/reports/re-review-2.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/reports/review-1.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/reports/review-2.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/reports/review-3.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/reports/review-final.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/reports/task-1.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/reports/task-2.md (100%) rename openspec/changes/{dsh-sdd => archive/2026-10-24-dsh-sdd}/trial/reports/task-3.md (100%) create mode 100644 openspec/specs/dsh-sdd/spec.md diff --git a/openspec/changes/dsh-sdd/.openspec.yaml b/openspec/changes/archive/2026-10-24-dsh-sdd/.openspec.yaml similarity index 100% rename from openspec/changes/dsh-sdd/.openspec.yaml rename to openspec/changes/archive/2026-10-24-dsh-sdd/.openspec.yaml diff --git a/openspec/changes/dsh-sdd/design.md b/openspec/changes/archive/2026-10-24-dsh-sdd/design.md similarity index 100% rename from openspec/changes/dsh-sdd/design.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/design.md diff --git a/openspec/changes/dsh-sdd/proposal.md b/openspec/changes/archive/2026-10-24-dsh-sdd/proposal.md similarity index 100% rename from openspec/changes/dsh-sdd/proposal.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/proposal.md diff --git a/openspec/changes/dsh-sdd/specs/dsh-sdd/spec.md b/openspec/changes/archive/2026-10-24-dsh-sdd/specs/dsh-sdd/spec.md similarity index 100% rename from openspec/changes/dsh-sdd/specs/dsh-sdd/spec.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/specs/dsh-sdd/spec.md diff --git a/openspec/changes/dsh-sdd/trial/README.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/README.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/README.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/README.md diff --git a/openspec/changes/dsh-sdd/trial/SPEC.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/SPEC.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/SPEC.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/SPEC.md diff --git a/openspec/changes/dsh-sdd/trial/briefs/review-1.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/briefs/review-1.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/briefs/review-1.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/briefs/review-1.md diff --git a/openspec/changes/dsh-sdd/trial/briefs/review-2.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/briefs/review-2.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/briefs/review-2.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/briefs/review-2.md diff --git a/openspec/changes/dsh-sdd/trial/briefs/review-3.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/briefs/review-3.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/briefs/review-3.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/briefs/review-3.md diff --git a/openspec/changes/dsh-sdd/trial/briefs/task-1.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/briefs/task-1.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/briefs/task-1.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/briefs/task-1.md diff --git a/openspec/changes/dsh-sdd/trial/briefs/task-2.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/briefs/task-2.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/briefs/task-2.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/briefs/task-2.md diff --git a/openspec/changes/dsh-sdd/trial/briefs/task-3.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/briefs/task-3.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/briefs/task-3.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/briefs/task-3.md diff --git a/openspec/changes/dsh-sdd/trial/ledger.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/ledger.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/ledger.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/ledger.md diff --git a/openspec/changes/dsh-sdd/trial/plan.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/plan.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/plan.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/plan.md diff --git a/openspec/changes/dsh-sdd/trial/reports/fix-2-round-1.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/fix-2-round-1.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/reports/fix-2-round-1.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/fix-2-round-1.md diff --git a/openspec/changes/dsh-sdd/trial/reports/re-review-2.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/re-review-2.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/reports/re-review-2.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/re-review-2.md diff --git a/openspec/changes/dsh-sdd/trial/reports/review-1.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/review-1.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/reports/review-1.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/review-1.md diff --git a/openspec/changes/dsh-sdd/trial/reports/review-2.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/review-2.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/reports/review-2.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/review-2.md diff --git a/openspec/changes/dsh-sdd/trial/reports/review-3.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/review-3.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/reports/review-3.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/review-3.md diff --git a/openspec/changes/dsh-sdd/trial/reports/review-final.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/review-final.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/reports/review-final.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/review-final.md diff --git a/openspec/changes/dsh-sdd/trial/reports/task-1.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/task-1.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/reports/task-1.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/task-1.md diff --git a/openspec/changes/dsh-sdd/trial/reports/task-2.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/task-2.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/reports/task-2.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/task-2.md diff --git a/openspec/changes/dsh-sdd/trial/reports/task-3.md b/openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/task-3.md similarity index 100% rename from openspec/changes/dsh-sdd/trial/reports/task-3.md rename to openspec/changes/archive/2026-10-24-dsh-sdd/trial/reports/task-3.md diff --git a/openspec/specs/dsh-sdd/spec.md b/openspec/specs/dsh-sdd/spec.md new file mode 100644 index 0000000..bd64ac1 --- /dev/null +++ b/openspec/specs/dsh-sdd/spec.md @@ -0,0 +1,104 @@ +# dsh-sdd Specification + +## Purpose +Исполнение плана субагентами в DeepSeek Harness (SDD). Контроллер диспатчит +implementer'а на задачу плана, получает отчёт, отправляет задачу на ревью +и ведёт fix-loop до чистоты, затем заказывает финальное ревью ветки. DSH не +имеет синхронного `Task`, поэтому протокол строится на асинхронном `subagent` +(идентификатор, уведомление, `send_message`) и на ledger как единственной +памяти между ходами. + +## Requirements + +### Requirement: Режим контроллера выбирается по контексту +Skill SHALL предлагать два режима и MUST выбирать между ними по числу +параллельных планов, а не по умолчанию. + +- Один план в сессии — контроллер главная сессия; implementer'ы и ревьюеры + диспатчатся на глубину 1, что укладывается в `subagent.maxDepth` по + умолчанию. +- Несколько задач, каждая по SDD, — контроллер фоновый сабагент на план, + глубина 2. + +Skill MUST проверить доступную глубину до первого диспатча и MUST записать +рулинг с откатом в режим главной сессии, если глубина меньше нужной. + +#### Scenario: Одна сложная задача +- **WHEN** в сессии один план и он архитектурный +- **THEN** контроллером остаётся главная сессия, а субагенты вызываются с + глубины 1 + +#### Scenario: Глубина не поднята +- **WHEN** выбрано несколько параллельных планов, а `subagent.maxDepth` равен 1 +- **THEN** skill не диспатчит контроллера, фиксирует рулинг об откате в режим + главной сессии и продолжает исполнение в нём + +### Requirement: Асинхронный протокол диспатча и отчёта +Диспатч implementer'а SHALL передавать требования файлом брифа, а результат +MUST возвращаться файлом отчёта; в контекст контроллера возвращается только +статус, коммиты, одна строка сводки тестов и concerns. Контракт статусов: +`DONE`, `DONE_WITH_CONCERNS`, `NEEDS_CONTEXT`, `BLOCKED`. + +#### Scenario: Отчёт файлом +- **WHEN** implementer завершил задачу +- **THEN** полный отчёт лежит в файле отчёта, а в ledger и контекст попали + только статус, коммиты и строка тестов + +### Requirement: Ожидание без блокировки +Skill MUST NOT ждать ребёнка синхронно: в DSH такого средства нет. Пока +у контроллера есть локальная работа, он MUST продолжать её; когда работы нет, +он MUST закончить ход и продолжить по уведомлению о завершении. Перед каждым +следующим диспатчем контроллер MUST сверить живых детей через `list_agents`, +чтобы поймать завершившегося без отчёта. + +#### Scenario: Ребёнок завершился без отчёта +- **WHEN** уведомление о завершении не пришло, а `list_agents` показывает + неактивного ребёнка +- **THEN** контроллер считает задачу завершённой по git-состоянию и ledger, + а не перезапускает её + +### Requirement: Ревью задачи и fix-loop +Каждая задача MUST проходить ревью по спеке и по качеству; implementer self-review +его не заменяет. Fix-loop MUST длиться не более 5 раундов: раунды 1–3 — тот же +implementer через `send_message`, раунды 4–5 — свежий implementer на тир выше. +После пятого раунда контроллер MUST адъюдицировать каждую открытую находку. + +#### Scenario: Дефект найден и закрыт +- **WHEN** ревьюер задачи вернул находку по существу +- **THEN** раунд фикса уходит тому же implementer'у, ре-ревью ограничено + исправлением, находка получает статус `fixed ` + +### Requirement: Ledger и маркировка находок +Своя рабочая директория плана SHALL содержать `progress.md` с первой строкой — +путём плана. Ledger MUST содержать таблицу сканирования плана, рулинги +`R-n (design #n)` и раздел `## Findings`, где у каждой находки есть маркер +источника (`T.`, `C-n`/`I-n`/`M-n`) и статус `fixed `, +`deferred` или `rejected <причина>`. + +#### Scenario: Находка без статуса +- **WHEN** финальное ревью ветки вернуло находку, а исполнение остановлено +- **THEN** отчёт контроллера обязан показать её со статусом; находка без + статуса считается ошибкой контроллера + +### Requirement: Тира моделей и деградация +Skill MUST называть маршруты моделей явно при каждом диспатче, если выбор +модели доступен, и MUST NOT выдавать это за гарантию: у `subagent` параметры +`provider`/`model` появляются только после включения выбора модели в профиле. +Без включённого выбора модели skill MUST исполнять всё на модели сессии и +указывать это в отчёте. + +#### Scenario: Выбор модели выключен +- **WHEN** профиль не включает выбор модели для `subagent` +- **THEN** все implementer'ы и ревьюеры идут на модели сессии, а отчёт + фиксирует отсутствие тиров как наблюдение, а не как выполненное требование + +### Requirement: Отличие от Claude-SDD зафиксировано +Skill SHALL содержать таблицу отличий от `subagent-driven-development` Claude +Code: синхронный `Task` против асинхронного `subagent`, наличие `send_message`, +глубина по умолчанию, выбор модели, отсутствие уведомления как штатного +ожидания. Skill MUST NOT утверждать паритет с Claude-SDD. + +#### Scenario: Чтение skill перед первым диспатчем +- **WHEN** модель загрузила skill и читает таблицу отличий +- **THEN** из неё видно, что ожидание строится на завершении хода и + уведомлении, а не на возврате значения инструмента