# 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`.