Доказательная очистка тестов 1.11
Дата: 2026-10-02. Транш ограничен тремя meta/doc семействами; security, hooks, lifecycle, verify-cache и migration тесты не затрагивались.
Почему не удалено 10% всей ленты
Исходная AST-инвентаризация содержит 8395 test-функций: 53 кандидата на проверку документа, 21 кандидат generated-freshness и 8321 функции, которым нужна поведенческая классификация. Даже все 74 эвристических кандидата — меньше 0,9% инвентаря. Удаление около 840 функций ради порога потребовало бы считать непроверенные тесты бесполезными по форме. Это запрещённая и небезопасная граница; выбран первый вручную проверенный транш.
Что объединено
| Семейство | До → после | Сохранённая гарантия |
|---|---|---|
test_release_notes_1_9.py | отдельные premise/count/scope assertions → один тест на каждую языковую или page-границу | breaking entries достигают notes; раздел не раздут; цифры и вывод replay остаются scoped; schema figure соответствует опубликованной версии |
test_publication_lines.py | независимые обходы дерева → один обход и объединённые boundary assertions | reader действительно читает tracked tree; очищенные классы остаются нулевыми; объявленные остатки не растут; проверка остаётся offline |
test_known_limitations.py | отдельные pointer и no-copy nodes → один node на entry point | CLAUDE/AGENTS указывают на каноническую страницу и не копируют её markers |
Суммарно выбранные файлы: 56 → 35 nodes, минус 21 (37,5% внутри транша; около 0,16% полной default ленты). Новых тестов на счётчики, саму очистку или существование файлов не добавлено.
Стоимость и falsification evidence
До объединения публикационные проверки выполняли отдельные обходы tracked tree; сумма видимых call durations была около 3,48 с. После один объединённый scan занял 1,33 с, а отдельная проверка формулировки — 0,17 с. Общий изолированный wall-time почти не изменился (4,45 → 4,25 с), потому что на таком малом наборе доминирует запуск xdist; токеновая экономия из этого замера не заявляется.
Сохранённые assertions основаны на прежних дефектах, указанных в самих семействах: breaking change 1.8 не достиг release notes; публичное дерево содержало локальные пути и имена других клиентов; скопированные ограничения расходились между onboarding-файлами. Объединение оставляет проверяемыми те же отрицательные условия и их сообщения, меняя только число pytest nodes и повторных обходов.
Release-проверка
- Task-scoped verify #3352: 380 passed, 12 skipped, 7 из 656 test-файлов.
- Default lane: 12 791 passed, 34 skipped, 143 deselected, 112,91 с.
- Slow lane: 143 passed, 12 826 deselected, 120,90 с.
Первый default-прогон честно обнаружил устаревшую запись scripts/gate_command_runner.py в formatting ratchet; после удаления запись перестала маскировать уже достигнутое форматирование. Первый slow-прогон выявил регрессию affected-test selector: явно переданный корневой test_calc.py считался отсутствующей полосой, если в consumer-проекте нет каталога tests/. Теперь существующий явно изменённый test_*.py образует доказанную affected полосу; неизвестная конфигурация и source-only проект по-прежнему не сужаются.