Files
drhider/History/2026-07-13-sonnet-response-obfuscation-bugs.md
T
2026-07-13 13:14:42 +04:00

1.9 KiB
Raw Blame History

Sonnet: анализ багов обфускации — fix

Дата: 2026-07-13


Баг 1: ООО "НУБЕС" не заменено

Причина: DOCX → Markdown: **ООО **"**НУБЕС**". Кавычка в отдельном run → ** разрывает строку. Replacer ищет точное совпадение ООО "НУБЕС" — не находит.

Фикс (replacer.py): добавить _md_tolerant_pattern() — паттерн, допускающий ** между частями строки. При промахе точного совпадения — фоллбэк с этим паттерном.

def _md_tolerant_pattern(original: str) -> str:
    MD = r'(?:\*{1,2})?'
    parts = re.findall(r'[А-ЯЁа-яёA-Za-z0-9]+|[^А-ЯЁа-яёA-Za-z0-9]', original)
    return MD + MD.join(re.escape(p) for p in parts) + MD

Баг 2: Новиков И.В.ФИО

Причина: В оригинале буквально ФИО — незаполненный шаблон. Не баг паттерна.

Превентивный фикс (config.py): \s+[\s\xa0]+ в PERSON_PATTERN — на случай неразрывных пробелов в DOCX.

PERSON_PATTERN = re.compile(
    r'\b[А-Я][а-я]+[\s\xa0]+[А-Я]\.[А-Я]\.'
    r'|\b[А-Я][а-я]+[\s\xa0]+[А-Я][а-я]+[\s\xa0]+[А-Я][а-я]+',
)

Моё мнение

Баг 1 — делать. Логично, минимально, решает проблему Markdown-жирности.

Баг 2 — \xa0 делать (превентивно). Сам ФИО — не баг, документ содержит незаполненный шаблон. Можно добавить ФИО в список игнорируемых (исключить из mapping), но не обязательно.