3.5 KiB
Sonnet: анализ обфускации — TMP-файлы vs текущий код
Дата: 2026-07-13
Главный вывод
TMP-файлы созданы СТАРОЙ версией кода. Они не были сгенерированы текущим _next_token()-кодом. Это не баг в текущем коде — это артефакт предыдущей реализации.
Доказательства
1. Имена файлов — старый формат
Текущий obfuscator.py генерирует имена вида договор-НУБЕС001-03700.md (меняет расширение). TMP-файлы: договор-XXX001-03700_obfuscated.md — суффикс _obfuscated и XXX-маскировка в имени. Текущий код так не делает.
2. Тип text — fallback из builder.py, не из сканера
build_mapping_csv() определяет тип постфактум по паттернам. Если ни один не совпал → "text". Типа text нет в TYPE_POOLS scanner.py. Значит строки вида:
text,Исполнителем Заказчику Сторонами,Кузнецов О.В.
попали из старого кода, который не фильтровал роли (Исполнитель, Заказчик) — текущий LLM-промпт их явно исключает.
3. Одна сущность → разные замены
email,info@nubes.ru,ypiorej@company.local ← файл 1
email,info@nubes.ru,qifdckke@org.example.ru ← файл 2
Текущий TwoPassObfuscator гарантирует глобальную согласованность. Старый код обрабатывал файлы по одному — отсюда расхождения.
4. Реалистичные замены невозможны из _next_token()
TYPE_POOLS = {
"phone": (["+7_000_000"], "phone"), # → "+7_000_000_0001"
"email": (["email"], "email"), # → "email_0001"
}
+7 (495) 906-87-80 или ypiorej@company.local физически не могут выйти из этих пулов.
Ответ на главный вопрос
Кто и где генерирует замены в обход
_next_token()?
Никто в текущем коде. Это артефакты старого кода (версии до v3). Текущий _next_token() написан позже.
Что реально нужно проверить
| Вопрос | Как проверить |
|---|---|
| Работает ли текущий код? | Прогнать оригиналы через v0.0.12, посмотреть mapping.csv |
| Regex ловит все сущности? | Проверить config.py паттерны на примерах из TMP |
Адрес 115404, г. Москва... — почему не заменён? |
ENTITY_PATTERNS не содержит тип address |
ООО "НУБЕС" в тексте не заменён? |
Возможно кавычки — regex матчит «» но не "" |
Итог
Ложное противоречие — сравнивались TMP-файлы (старый код) с текущим scanner.py. Нужно прогнать текущий код на тех же документах и посмотреть результат.