e1b8ef5b8b
Строка параграфа, начинающаяся с блочного триггера (`#`/`-`/`*`/`+`/`>`, упорядоченного `N.`/`N)`, фенса ```/~~~, таблицы `|` или тематического разрыва `---`/`***`/`___`), на round-trip doc->markdown->doc молча превращалась в heading/list/quote/code block/table/horizontalRule. Худший случай — тематический разрыв: horizontalRule не несёт текста, и строка теряла его целиком. Сериализатор параграфа теперь backslash-экранирует ведущий блочный триггер (escapeLeadingBlockTrigger): экранируется только ПЕРВЫЙ значащий символ, токенизатор CommonMark декодирует `\` обратно в литерал И снимает блочную интерпретацию, так что строка round-trip'ится байт-в-байт как параграф. Emphasis `**x**`, inline-code и обычная проза триггерами не являются и не трогаются (нет мусорных backslash). Класс раньше не чинили, а ОБХОДИЛИ; обход убран у обоих потребителей: - клиентский мост (gitmost-recording.ts) больше не подставляет ZWSP-хак; - генеративный корпус (text-arbitraries.ts) снял самоцензуру — добавлен blockTriggerLeadRunArb, параграф теперь МОЖЕТ открываться триггером, и P1/P2/P3 сами доказывают закрытие класса. Пины на каждый триггер — детерминированные round-trip через реальный конвертер (gitmost-transcript-neutralization.test.ts). Обновлён документировавший старую потерю gap-тест (spec 13). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>