# Проверка целостности собранной витрины перед подменой **Секция:** ядро · **Хук:** Подмена файла необратима, а годность выхода подтверждена отпечатком на ещё открытом дескрипторе · **Теги:** goal:journal-and-rebuild `healthlog reindex` собирает витрину в отдельный файл и снимает с него отпечаток, а подмену делает человек: остановить сервис, переименовать файл, поднять обратно. Это **единственный необратимый шаг** всей операции — и единственный, перед которым мы ничего не проверяем. Отпечаток сегодня снимается на **ещё открытом дескрипторе**: он говорит, что свёртка сошлась, но не говорит, что файл на диске корректен как база SQLite. Между «свёртка сошлась» и «файл цел» помещается всё, о чём предупреждает [How To Corrupt An SQLite Database](https://www.sqlite.org/howtocorrupt.html): оборванный `fsync`, полный диск, ФС, соврала о записи. Человек в этот момент уже удалил рабочую витрину. Что делать: после закрытия файла и **до** того, как команда объявит результат годным к подмене, открыть его заново и прогнать `PRAGMA integrity_check`. Не прошёл — команда завершается отказом и прямо говорит, что подменять нечем. Дёшево: одна страница кода, один прогон по готовому файлу. Ценно ровно в тот момент, когда всё остальное уже пошло не так. Готово, когда `reindex` на заведомо испорченном выходном файле отказывается называть результат годным, а на здоровом — не замедляется заметно. Связано: `cmd/healthlog/reindex.go`, `docs/architecture.md` → «Пересборка».