Проверял ЗАПУСКОМ. Все замеры — mode=ro, git только на чтение (git show/git diff).
test_taxonomy_single.pyдо моих правок: 70/0 — совпадает с заявкой.- После моих двух добавленных блоков: 76/0.
test_savdel_taxonomy.py31/0 (его уточнение к брифу «31, а не 29» верно),test_distill_pipeline.py145/0,test_wiki_pagination.py40/0,test_rag_quality.py53/0,test_dead_tools.py60/0,test_import_safety.py420/0.
Из 70 проверок текст исходника разбирают 4 (3 ast-проверки «нет своей карты кодов» +
1 ast «на уровне модуля нет вызовов»). Остальные смотрят на поведение: возврат функций,
настоящий SQL по стенду и по боевой вике, наблюдение за реальным aiosqlite.connect,
вывод checker.inspect(), отдельный процесс для импорта под cp1251.
Совпало ВСЁ: дерево HEAD==taxonomy побайтно True; CAT_MAP 55 идентичен EXPORT_SLUGS (все 55 имён файлов — prompter.py не увидит переименований); checker 53, пересечение 52, только в savdel 8.1.1/9.1.1/10.1.1, только в checker 10.1; LEGAL_CODES 65 и LEAF_CODES 55 как множества равны выведенным старым regex; LEAF_CHILDREN равны; вика 12784 факта, 6711 значений, 12667 с запятой (99.1 %), 110 токенов (23 L2 + 87 L3), 42317 пометок, 61 с именем / 49 без (42015 / 302 = 0.71 %), 137 пар подстрок, 1.1 -> 1118 против 5428, 51 недостижимый факт, 58 кодов вне карты (393 пометки), 6.1.2 = 82; reclass.py 62 кода без 8/9/10; assistant WIKI_TREE 53 кода.
- 4310 чужих фактов — не сегодняшний вред навигации. WIKI_TREE: 53 кода, ВСЕ L3,
ни одного L2. Подстрочный отбор по всем 53 кодам кнопок на живой вике даёт 0
чужих фактов; по всем 55 рубрикам выгрузки тоже 0. 4310 — это код
1.1, которым не отбирает ни один потребитель. Он про дремоту сказал, но причину назвал не ту. - «51 факт по 14 чужим файлам» (снимок backup_wiki_18_0140.db): 51 — это ПАРЫ (факт, файл) при том, что подкод считается чужим; разных фактов 42. По правилу, которое код реально применяет (подкод свой), выходит 42 факта в 13 файлах.
| id | что сломано | упало до правки теста | после |
|---|---|---|---|
| M1 | CODE_RE без якоря $ (инъекция и % проходят) |
1 | 2 |
| M2 | matches_token без границы точки | 1 | 1 |
| M3 | token_sql без REPLACE(пробелы) | 4 | 5 |
| M4 | NON_EXPORTABLE_LEAVES снова руками (frozenset()) |
0 НЕ ЗАМЕЧЕНА | 1 |
| M5 | checker печатает display_name вместо describe | 1 | 1 |
| M6 | savdel.category_patterns снова подстрокой | 0 НЕ ЗАМЕЧЕНА (test_savdel_taxonomy: 6) | 3 |
| M7 | _LEAF_RE теряет последний лист группы | 6 | 7 |
Добавил в тест ланы 6 проверок: делегирование шаблонов выгрузки (поведением, по стенду)
и вычисляемость NON_EXPORTABLE_LEAVES (exec копии источника с вырезанной рубрикой,
с защитой _probe_n == 1 от «зелени по построению»).
Каждая диверсия откатывалась в finally и сверялась побайтно — «восстановлено побайтно:
True» девять раз (7 + 7 во втором прогоне). Контрольный прогон после восстановления:
76/0, 31/0, 145/0. Повторный независимый замер: дерево побайтно == HEAD, CAT_MAP
идентичен, LEGAL/LEAF/LEAF_CHILDREN как были. Своих .bak не создавал (оригинал в памяти
процесса). Чужой assistant_state.json.bak от 27.07 не трогал.