Files
healthlog/docs/tasks/items/integrity-before-swap.md
av 3d24248075 docs: документация приведена к канону av-dev-pm 4
- каждая запись каталога задач получила тип вместо тега kind: и префикса
  заголовка; секция роадмапа «Разработка» стала «Сопровождением», порядок
  секций канонический
- поправлены протухшие факты: нереализованные маршруты Read API, MCP и
  `healthlog import`, словарь слоёв в инварианте, семантика гейта по покрытию
  диффа, периметр перестал дублировать security.md
- замер слияния переведён с находки 49 на находку 54, заполнены Purpose спек
  storage и parsing
2026-08-05 19:09:35 +03:00

2.6 KiB

Проверять целостность собранной витрины до подмены

  • Тип: feature
  • Категория: Ядро
  • Зачем: Подмена файла необратима, а годность выхода подтверждена отпечатком на ещё открытом дескрипторе
  • Теги: goal:journal-and-rebuild

healthlog reindex собирает витрину в отдельный файл и снимает с него отпечаток, а подмену делает человек: остановить сервис, переименовать файл, поднять обратно. Это единственный необратимый шаг всей операции — и единственный, перед которым мы ничего не проверяем.

Отпечаток сегодня снимается на ещё открытом дескрипторе: он говорит, что свёртка сошлась, но не говорит, что файл на диске корректен как база SQLite. Между «свёртка сошлась» и «файл цел» помещается всё, о чём предупреждает How To Corrupt An SQLite Database: оборванный fsync, полный диск, ФС, соврала о записи. Человек в этот момент уже удалил рабочую витрину.

Что делать: после закрытия файла и до того, как команда объявит результат годным к подмене, открыть его заново и прогнать PRAGMA integrity_check. Не прошёл — команда завершается отказом и прямо говорит, что подменять нечем.

Дёшево: одна страница кода, один прогон по готовому файлу. Ценно ровно в тот момент, когда всё остальное уже пошло не так.

Готово, когда reindex на заведомо испорченном выходном файле отказывается называть результат годным, а на здоровом — не замедляется заметно.

Связано: cmd/healthlog/reindex.go, docs/architecture.md → «Пересборка».

Двигает строку «Завершения» цели: «Годность собранной витрины подтверждена до подмены файла».