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

1.7 KiB
Raw Blame History

Review: Task 2 (median)

Ревьюер проверял поведение по SPEC.md независимо, не полагаясь на concerns implementer'а.

Проверенные требования SPEC.md

Требование Результат
Нечётная длина — средний элемент OK: median([3,1,2]) == 2.0
Чётная длина — среднее двух средних НАРУШЕНО
Пустой список — ValueError("empty") OK: тип и сообщение совпадают
Не мутирует values OK: sorted() копирует, вход не меняется
Возвращает float OK

Тесты

python3 -m unittest discover -s tests → Ran 4 tests ... OK (exit 0). 4 теста проходят, но чётная длина не покрыта, поэтому нарушение спеки не ловится.

Findings

  • T2.1 — src/stats.py:15 — при чётной длине median возвращает верхний средний элемент float(xs[n // 2]), а SPEC.md:15 требует среднее двух средних: median([1,2]) → 2.0 вместо 1.5, median([1,2,3,4]) → 3.0 вместо 2.5. Исправить: для чётного n вернуть float(xs[n//2 - 1] + xs[n//2]) / 2.
  • T2.2 — tests/test_stats.py — нет теста на чётную длину, поэтому нарушение T2.1 не ловится. Добавить тест median([1,2]) == 1.5 (и median([1,2,3,4]) == 2.5) по требованию SPEC.md:15.

VERDICT: CHANGES_REQUESTED

Находки: T2.1, T2.2.