Andrey Epifancev c8b92fae01 docs(dsh): пробный прогон SDD — режимы, дефект и fix-loop (#41)
Три задачи в temp-репозитории: implementer'ы deepseek-flash, все ревью
deepseek-v4-pro. Ревьюер Task 2 независимо нашёл T2.1 (медиана чётной длины
противоречит спеке) и T2.2 (нет теста), fix-раунд 1 → 186575c, скоуп-ре-ревью
APPROVED, финальное ревью ветки APPROVED. Режим 2 (фоновый контроллер, глубина
2) проверен отдельной пробой: вызов subagent из контроллера прошёл.

Артефакты прогона — openspec/changes/dsh-sdd/trial/ (план, спека, брифы,
отчёты, ledger), результаты — design.md. По урокам прогона skill sdd уточнён:
DONE_WITH_CONCERNS при замеченном расхождении, число тестов в плане — ориентир,
повтор при ошибке валидации provider/model.

Co-Authored-By: DeepSeek Harness <noreply@deepseek.com>
2026-10-24 17:49:38 +04:00

30 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

DONE
## Коммит
- `836a730` — `feat: add median`
- Ветка: `feat/trial`, родитель: `dc1670f` (`feat: add mean`)
- Файлы: `src/stats.py` (дописан `median`), `tests/test_stats.py` (импорт `median`, класс `MedianTest`) — код дословно из плана Task 2
- `git status` чистый; в коммит не попали `reports/` (в `.gitignore`) и `__pycache__`
## Тесты
`python3 -m unittest discover -s tests` → `Ran 4 tests ... OK` (exit 0): `MeanTest.test_mean`, `MeanTest.test_mean_empty`, `MedianTest.test_median_odd`, `MedianTest.test_median_empty`.
## Concerns
1. **Расхождение плана со SPEC (важное, не исправлял — по брифу план дословен).**
Реализация из плана возвращает `float(xs[n // 2])` и для чётной длины берёт
верхний средний элемент, а SPEC требует среднее двух средних:
- `median([1, 2])` → `2.0`, по SPEC `1.5`;
- `median([1, 2, 3, 4])` → `3.0`, по SPEC `2.5`.
Тесты плана чётную длину не проверяют, поэтому 4 теста проходят и нарушение
спеки не ловится. Решение — за контроллером: чинить план/код и добавлять
тест на чётную длину отдельной задачей.
2. `median` не мутирует вход: `sorted()` возвращает копию — требование SPEC
«does not mutate values» выполнено.
3. В разделе «Interfaces» плана заявлены аннотации `list[float] -> float`, в
«Exact code» их нет (как и в Task 1); внёс дословно, без аннотаций.
4. `ValueError("empty")` на пустом списке — есть, сообщение совпадает со SPEC;
тест проверяет только тип исключения (по плану).