Три задачи в 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>
2.9 KiB
Review Task 3: describe
Вердикт: VERDICT: APPROVED
Что проверено
- Спека (
SPEC.md):describe(values)→{"count": int, "mean": float, "median": float}. - План Task 3: дописать
describeиDescribeTest, код «дословно из плана». - Дифф
review/pkg-task-3.txtи фактические файлы наfeat/trial(коммит7cb0383).
Соответствие спеке
describeне дублирует логикуmean/median— вызывает их напрямую:{"count": len(values), "mean": mean(values), "median": median(values)}.- Ключи словаря:
count,mean,median— ровно по спеке, лишних/недостающих нет. - Типы:
count—int(результатlen);mean—float(возвратmean);median—float(возвратmedian). Сходится с{"count": int, "mean": float, "median": float}. - Пустой список:
describe([])бросаетValueError("empty")через делегирование вmean/median— поведение согласовано с модулем, спека отдельного контракта дляdescribeна[]не задаёт.
Соответствие плану
- Код
src/stats.pyиtests/test_stats.pyсовпадает с «Exact code» Task 3 дословно. - Импорт
describeдобавлен, классDescribeTest.test_describeприсутствует.
Проверка теста Task 3 (ловит поведение, а не повторяет реализацию)
Тест сравнивает describe([1, 2, 3]) с независимыми константами
{"count": 3, "mean": 2.0, "median": 2.0}, вычисленными вручную из спеки, а не
через вызовы len/mean/median внутри теста. То есть это оракул, а не тавтология:
он ловит неверные ключи (переименование/лишние/недостающие), неверный count и
неверные значения mean/median.
Наблюдение (не блокирует): вход [1, 2, 3] симметричен — mean == median == 2.0,
поэтому тест не отличил бы перестановку mean/median местами. Это слабость
теста, но она зафиксирована самим планом («Exact code»), реализация при этом
корректна и читаема (mean для mean, median для median). Как дефект не считаю.
Прогон тестов
Ran 7 tests in 0.000s ... OK
git status чистый; лишних файлов в коммите нет.
Находки
Находок нет.
VERDICT: APPROVED — Находок нет