From c08fba2a826631983652bc572e5356c7ac182a48 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Sat, 24 Oct 2026 21:49:16 +0400 Subject: [PATCH] =?UTF-8?q?fix(dsh):=20=D0=BE=D0=B1=D1=8A=D1=8F=D1=81?= =?UTF-8?q?=D0=BD=D0=B8=D1=82=D1=8C=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D1=83?= =?UTF-8?q?=20=D0=BE=D0=B4=D0=BD=D0=BE=D1=81=D1=82=D0=BE=D1=80=D0=BE=D0=BD?= =?UTF-8?q?=D0=BD=D0=B5=D0=B3=D0=BE=20=D0=BC=D0=B0=D1=80=D1=88=D1=80=D1=83?= =?UTF-8?q?=D1=82=D0=B0=20subagent=20(#52)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dsh/PORT.md | 4 ++++ dsh/skills/sdd/SKILL.md | 9 ++++++--- dsh/tests/sdd-skill.test.mjs | 7 +++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/dsh/PORT.md b/dsh/PORT.md index 858f3b9..42126fe 100644 --- a/dsh/PORT.md +++ b/dsh/PORT.md @@ -361,6 +361,10 @@ profile was removed; the real `desktop` profile was not touched. - **Model tiers.** `sonnet`/`haiku`/`opus` are not DSH models. The port uses two live routes (`deepseek-flash`, `deepseek-v4-pro`) from the opt-in overlay in `dsh/subagent-models.yml`; without it every dispatch runs on the session model. +- **One-sided model route.** The trial's «child LLM provider and model must be + supplied together» was not a race: the logged tool call carried only `model` + (issue #52). DSH rejects a one-sided route correctly, so no upstream report is + needed; the `sdd` skill now says to retry with both fields. - **`~/.claude` dependence.** No longer needed for install, bootstrap, or roles: the install-time source is explicit, and `--skills --roles` copy real files into `~/.dsh`. The Claude Code locations remain a **legacy migration diff --git a/dsh/skills/sdd/SKILL.md b/dsh/skills/sdd/SKILL.md index 433007c..dc9d1e2 100644 --- a/dsh/skills/sdd/SKILL.md +++ b/dsh/skills/sdd/SKILL.md @@ -126,9 +126,12 @@ ledger лежит в git-ignored scratch (после `git clean -fdx` восст Маршрут указывается в каждом диспатче: `provider`, `model`, `reasoning_effort`. Параметры действуют только при включённом overlay (`dsh/subagent-models.yml`); без него всё идёт на модели сессии, и отчёт -фиксирует это наблюдением `O-n`. Если `subagent` вернул «child LLM provider -and model must be supplied together», хотя оба параметра переданы, — повтори -вызов один раз: валидация в 0.2.1-rc.3 нестабильна. +фиксирует это наблюдением `O-n`. `model` нельзя передать один, «унаследовав» +провайдера: DSH требует `provider` и `model` вместе и на односторонний +маршрут отвечает «child LLM provider and model must be supplied together». +Эта ошибка означает, что в вызове не хватает `provider` (в прогоне #41 так +случилось дважды), а не сбой валидации: проверь аргументы и повтори вызов, +передав оба поля. ## Отличие от Claude-SDD diff --git a/dsh/tests/sdd-skill.test.mjs b/dsh/tests/sdd-skill.test.mjs index 3a5c318..dbc9044 100644 --- a/dsh/tests/sdd-skill.test.mjs +++ b/dsh/tests/sdd-skill.test.mjs @@ -46,6 +46,13 @@ test('sdd skill fixes the report contract and the model routes', () => { assert.match(body, /модель сессии/) }) +test('sdd skill explains the one-sided route error instead of calling validation flaky', () => { + const body = text() + assert.match(body, /must be supplied together/) + assert.match(body, /не хватает `provider`/) + assert.doesNotMatch(body, /валидаци\S* в 0\.2\.1-rc\.3 нестабильн/i) +}) + test('sdd skill requires the ledger with findings and statuses', () => { const body = text() assert.match(body, /## Findings/)