DSH: SDD follow-ups — односторонний маршрут subagent и образец describe (#52) #68
@ -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
|
- **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
|
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.
|
`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
|
- **`~/.claude` dependence.** No longer needed for install, bootstrap, or
|
||||||
roles: the install-time source is explicit, and `--skills --roles` copy real
|
roles: the install-time source is explicit, and `--skills --roles` copy real
|
||||||
files into `~/.dsh`. The Claude Code locations remain a **legacy migration
|
files into `~/.dsh`. The Claude Code locations remain a **legacy migration
|
||||||
|
|||||||
@ -126,9 +126,12 @@ ledger лежит в git-ignored scratch (после `git clean -fdx` восст
|
|||||||
Маршрут указывается в каждом диспатче: `provider`, `model`,
|
Маршрут указывается в каждом диспатче: `provider`, `model`,
|
||||||
`reasoning_effort`. Параметры действуют только при включённом overlay
|
`reasoning_effort`. Параметры действуют только при включённом overlay
|
||||||
(`dsh/subagent-models.yml`); без него всё идёт на модели сессии, и отчёт
|
(`dsh/subagent-models.yml`); без него всё идёт на модели сессии, и отчёт
|
||||||
фиксирует это наблюдением `O-n`. Если `subagent` вернул «child LLM provider
|
фиксирует это наблюдением `O-n`. `model` нельзя передать один, «унаследовав»
|
||||||
and model must be supplied together», хотя оба параметра переданы, — повтори
|
провайдера: DSH требует `provider` и `model` вместе и на односторонний
|
||||||
вызов один раз: валидация в 0.2.1-rc.3 нестабильна.
|
маршрут отвечает «child LLM provider and model must be supplied together».
|
||||||
|
Эта ошибка означает, что в вызове не хватает `provider` (в прогоне #41 так
|
||||||
|
случилось дважды), а не сбой валидации: проверь аргументы и повтори вызов,
|
||||||
|
передав оба поля.
|
||||||
|
|
||||||
## Отличие от Claude-SDD
|
## Отличие от Claude-SDD
|
||||||
|
|
||||||
|
|||||||
@ -46,6 +46,13 @@ test('sdd skill fixes the report contract and the model routes', () => {
|
|||||||
assert.match(body, /модель сессии/)
|
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', () => {
|
test('sdd skill requires the ledger with findings and statuses', () => {
|
||||||
const body = text()
|
const body = text()
|
||||||
assert.match(body, /## Findings/)
|
assert.match(body, /## Findings/)
|
||||||
|
|||||||
@ -179,9 +179,9 @@ DoD порта требует, чтобы CC-харнес не менялся.
|
|||||||
| `T2.1` | `median` на чётной длине возвращал верхний средний элемент вместо среднего двух | `fixed 186575c` |
|
| `T2.1` | `median` на чётной длине возвращал верхний средний элемент вместо среднего двух | `fixed 186575c` |
|
||||||
| `T2.2` | не было теста на чётную длину | `fixed 186575c` |
|
| `T2.2` | не было теста на чётную длину | `fixed 186575c` |
|
||||||
| `O-1` | «Interfaces» плана обещают аннотации типов, «Exact code» их не содержит; SPEC аннотаций не требует | `rejected` (правка плана в прогоне не даёт результата) |
|
| `O-1` | «Interfaces» плана обещают аннотации типов, «Exact code» их не содержит; SPEC аннотаций не требует | `rejected` (правка плана в прогоне не даёт результата) |
|
||||||
| `O-2`, `O-3` | первый вызов `subagent` с переданными `provider`/`model` вернул «child LLM provider and model must be supplied together»; немедленный повтор тем же вызовом проходит (2 раза за прогон) | `deferred` (наблюдение о стабильности валидации DSH; повтор в skill) |
|
| `O-2`, `O-3` | вызов `subagent` с одним `model` (без `provider`) вернул «child LLM provider and model must be supplied together»; немедленный повтор с обоими полями проходит (2 раза за прогон). В #52 транскрипт подтвердил: валидация DSH корректна, поле действительно не передано | `fixed` — формулировка skill исправлена (issue #52) |
|
||||||
| `O-4` | ожидаемое число тестов в плане (`5`) устарело после fix-раунда Task 2 (фактически 7) | `fixed` — в skill добавлено правило «число тестов в плане — ориентир» |
|
| `O-4` | ожидаемое число тестов в плане (`5`) устарело после fix-раунда Task 2 (фактически 7) | `fixed` — в skill добавлено правило «число тестов в плане — ориентир» |
|
||||||
| `O-5` | тест `describe([1,2,3])` на симметричном входе не отличил бы перестановку `mean`/`median` | `deferred` (реализация верна, слабость плана) |
|
| `O-5` | тест `describe([1,2,3])` на симметричном входе не отличил бы перестановку `mean`/`median` | `fixed` — образец `plan.md` переведён на `[1,2,6]` (issue #52) |
|
||||||
|
|
||||||
Отдельно: implementer Task 2 заметил расхождение плана со спекой, но поставил
|
Отдельно: implementer Task 2 заметил расхождение плана со спекой, но поставил
|
||||||
`DONE`, а не `DONE_WITH_CONCERNS`; ревью дефект всё равно поймало, потому что
|
`DONE`, а не `DONE_WITH_CONCERNS`; ревью дефект всё равно поймало, потому что
|
||||||
@ -199,8 +199,9 @@ DoD порта требует, чтобы CC-харнес не менялся.
|
|||||||
|
|
||||||
- Число тестов в плане — ориентир: fix-раунд добавляет тесты, и расхождение
|
- Число тестов в плане — ориентир: fix-раунд добавляет тесты, и расхождение
|
||||||
вверх не дефект (O-4).
|
вверх не дефект (O-4).
|
||||||
- Ошибка валидации `provider`/`model` нестабильна; лечится повтором, а не
|
- Ошибка «provider and model must be supplied together» — не нестабильная
|
||||||
пересмотром маршрутов (O-2/O-3).
|
валидация: в вызове было только `model`; DSH требует оба поля (O-2/O-3,
|
||||||
|
диагностика #52).
|
||||||
- Ревьюер, проверяющий по спеке, а не по отчёту implementer'а, ловит дефекты,
|
- Ревьюер, проверяющий по спеке, а не по отчёту implementer'а, ловит дефекты,
|
||||||
даже если implementer промолчал бы.
|
даже если implementer промолчал бы.
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,10 @@
|
|||||||
прогона». Прогон сделан один раз: без DSH runtime его не повторить, поэтому
|
прогона». Прогон сделан один раз: без DSH runtime его не повторить, поэтому
|
||||||
артефакты лежат здесь.
|
артефакты лежат здесь.
|
||||||
|
|
||||||
|
`plan.md` — образец для повторного прогона. После прогона в нём заменён вход
|
||||||
|
теста `describe` на несимметричный `[1, 2, 6]` (O-5, issue #52); сам прогон
|
||||||
|
шёл с `[1, 2, 3]`, это зафиксировано в `reports/review-3.md`.
|
||||||
|
|
||||||
## Что прогонялось
|
## Что прогонялось
|
||||||
|
|
||||||
Отдельный git-репозиторий `/tmp/dsh-sdd-trial` (в PR не входит), ветка
|
Отдельный git-репозиторий `/tmp/dsh-sdd-trial` (в PR не входит), ветка
|
||||||
|
|||||||
@ -6,6 +6,11 @@
|
|||||||
|
|
||||||
**Ветка:** `feat/trial`.
|
**Ветка:** `feat/trial`.
|
||||||
|
|
||||||
|
> **Пост-фактум (issue #52, O-5).** Это образец, а не протокол прогона. Сам
|
||||||
|
> прогон выполнен с `describe([1, 2, 3])`, как видно в `reports/review-3.md`;
|
||||||
|
> после прогона вход теста заменён на несимметричный `[1, 2, 6]`, чтобы
|
||||||
|
> образец не тиражировал слабость: при таком входе `mean != median`.
|
||||||
|
|
||||||
## Global Constraints
|
## Global Constraints
|
||||||
|
|
||||||
- Python 3.8+ stdlib only; no dependencies.
|
- Python 3.8+ stdlib only; no dependencies.
|
||||||
@ -116,8 +121,8 @@ Test to append (class `DescribeTest`):
|
|||||||
class DescribeTest(unittest.TestCase):
|
class DescribeTest(unittest.TestCase):
|
||||||
def test_describe(self):
|
def test_describe(self):
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
describe([1, 2, 3]),
|
describe([1, 2, 6]),
|
||||||
{"count": 3, "mean": 2.0, "median": 2.0},
|
{"count": 3, "mean": 3.0, "median": 2.0},
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user