docs: документация переведена на канон av-dev-pm
- беклог и план переехали в docs/tasks (38 задач, 11 целей), слаги переименованы с транслита на английские, 85 ссылок поправлены - conventions.md разобран в docs/conventions/, local-research.md — в docs/research/, review-journal.md — в docs/review.md с разделом настройки конвейера; заведены security.md, adr/ и .pm.json - шаг docs.py check добавлен в task gate; поведение в architecture.md помечено девятью маркерами долга, database.md получил настройки с числовым значением
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
# Проверка целостности собранной витрины перед подменой
|
||||
|
||||
**Секция:** ядро · **Хук:** Подмена файла необратима, а годность выхода подтверждена отпечатком на ещё открытом дескрипторе · **Теги:** 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` → «Пересборка».
|
||||
Reference in New Issue
Block a user