# Сверять живую витрину с пересборкой - **Секция:** Ядро - **Зачем:** reindex печатает оба отпечатка, но сравнивать их некому — расхождение с журналом молчит - **Теги:** goal:journal-and-rebuild `healthlog reindex` печатает отпечаток собранной витрины и отпечаток рабочей — то есть данные для сверки уже есть, и **сравнивать их некому**. Расхождение живого состояния с тем, что даёт проигрывание журнала, сегодня обнаруживается только тем, что кто-то вручную запустил пересборку и посмотрел на два числа. Между тем расхождение — не гипотеза. Известный путь к нему записан блокером [«Держать порядок журнала при конкурентных приёмах»](journal-order-on-ingest.md): доставка, свёрнутая раньше своей предшественницы, уходит в `failed` навсегда, и живая витрина расходится с пересборкой молча. Пока тот предел не закрыт, сверка — единственный способ узнать, что он сработал. Инвариант «состояние есть свёртка журнала» проверяем ровно этим: пересобрать в отдельный файл (рабочая база не трогается — это уже так и устроено), сверить отпечатки, расхождение — событие, которое видно. Прогон не бесплатный (на квартальном журнале десятки минут), поэтому это регламент, а не фоновая задача сервиса. Развилка при взятии: кто запускает — `cron` на хосте рядом с деплоем или сам сервис по расписанию. Первое честнее (пересборка уже сейчас команда, а не режим сервиса), но требует места под второй файл базы. Готово, когда расхождение витрины с пересборкой перестаёт зависеть от того, догадался ли человек посмотреть. Связано: `cmd/healthlog/reindex.go`, [наблюдаемость](stats-endpoint.md), [деплой](deploy-rivendell.md). Двигает строку «Завершения» цели: «Расхождение живой витрины с пересборкой замечает сервис, а не человек».