Убрал обратный ход данных: merged-группы больше не конвертируют отрендеренный
dict обратно в мок-Message (processed_message_to_tg_message удалён, −84 строки).
Футер рендерится прямо из реального главного Message группы. main_message (dict)
по-прежнему выбирается тем же критерием-индексом → title/date/author байт-в-байт.
Реестр §3:
- §3.6 custom-emoji реакции merged-футера — отдельный span на каждую (через
реальный _reactions_views_links), а не агрегированная «❓ N»;
- §3.7 дата merged-футера из naive-local реального Message (не UTC-мок); в
UTC-голдене не видна → выделенный не-UTC тест (TZ=Europe/Moscow);
- §3.8 порядок флагов merged-поста детерминирован (first-seen через
dict.fromkeys вместо hash-ordered list(set)); временная сортировка флагов
снята из оракула (golden_replay нормализатор убран, normalize_html теперь
identity); проверено — оракул стабилен на PYTHONHASHSEED 0/1/42;
- §3.15 пустой reactions-объект больше не даёт ведущий разделитель (и одиночные).
Golden обновлён строго по §3: span +2 (§3.6 сплит custom-реакции), reorder
флагов только на merged-постах (§3.8), снят ведущий разделитель на одиночном
poll-посте (§3.15). Оракул зелёный и детерминированный (2 прогона идентичны).
Полный сюит 353 passed (+6 тестов этапа 2).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>