49 файлов, миграция сделана командой tasks.py check --fix — той самой, ради которой в скрипте оставлена читаемость старой формы. Побочно тот же прогон проставил тег decomposed целям, у которых есть задачи: это его штатная работа. check после миграции зелёный, индексы согласованы. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2.7 KiB
Сверка живой витрины с пересборкой
- Секция: ядро
- Зачем: reindex печатает оба отпечатка, но сравнивать их некому — расхождение с журналом молчит
- Теги: goal:journal-and-rebuild
healthlog reindex печатает отпечаток собранной витрины и отпечаток рабочей —
то есть данные для сверки уже есть, и сравнивать их некому. Расхождение
живого состояния с тем, что даёт проигрывание журнала, сегодня обнаруживается
только тем, что кто-то вручную запустил пересборку и посмотрел на два числа.
Между тем расхождение — не гипотеза. Известный путь к нему записан блокером
«Порядок журнала при конкурентных приёмах»:
доставка, свёрнутая раньше своей предшественницы, уходит в failed навсегда, и
живая витрина расходится с пересборкой молча. Пока тот предел не закрыт, сверка
— единственный способ узнать, что он сработал.
Инвариант «состояние есть свёртка журнала» проверяем ровно этим: пересобрать в отдельный файл (рабочая база не трогается — это уже так и устроено), сверить отпечатки, расхождение — событие, которое видно. Прогон не бесплатный (на квартальном журнале десятки минут), поэтому это регламент, а не фоновая задача сервиса.
Развилка при взятии: кто запускает — cron на хосте рядом с деплоем или сам
сервис по расписанию. Первое честнее (пересборка уже сейчас команда, а не
режим сервиса), но требует места под второй файл базы.
Готово, когда расхождение витрины с пересборкой перестаёт зависеть от того, догадался ли человек посмотреть.
Связано: cmd/healthlog/reindex.go, наблюдаемость,
деплой.