d4581a096f
Новый чистый модуль footnote-normalize-merge.ts (normalizeAndMergeFootnotes): нормализует текст определений сносок (типографские кавычки->ASCII, тире->'-', NBSP/спецпробелы->пробел, схлопывание пробелов, trim) и сливает определения с совпавшим нормализованным текстом, перевешивая ссылки на канонический id; дубли-сироты добивает canonicalizeFootnotes. Ключ слияния attrs-aware (footnoteMergeKey/stableAttrs) — сноски с одинаковым текстом, но разными attrs марок (напр. link.href) НЕ сливаются (защита от потери target). Пасс вызывается строго ПЕРЕД canonicalizeFootnotes на 5 write-путях MCP (markdown-импорт, updatePageJson, copyPageContent, docmost_transform, insertInlineFootnote). Глиф-карты продублированы из comment-anchor.ts (там private+завязаны на golden). Идемпотентен, чистый (deep-clone), scope строго внутри footnoteDefinition. closes #419 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>