Files
healthlog/docs/backlog/retenshen-syrogo-arhiva.md
T
av 34e5109b6d непокрытые секции доставки видны в статусе разбора
- половина потока (50 доставок из 104) не несёт metrics вовсе и до сих пор
  числилась parsed: ретеншен, поверив статусу, срезал бы тела stateOfMind,
  которых в экспорте Apple нет
- разбор перечисляет верхнеуровневые ключи data, непокрытые проглатываются
  декодированием: тело 40 МиБ из непокрытой секции удерживает 0 МиБ
- статус partial и колонка delivery.uncovered_sections; миграция переводит
  прежние parsed в pending — им верить нельзя
- витрина не изменилась: отпечаток совпал с прогоном до изменения
2026-08-01 21:25:59 +03:00

3.1 KiB

Ретеншен сырого архива

Приоритет: низкий

Срок жизни сырого архива объявлен (14 дней, storage.raw_retention), но удаления нет: архив растёт бесконечно. Пока это 16 МБ и проблемой не является.

Само правило изменилось. Экспорт Apple — снапшот всей истории, доставки после его даты — события поверх снапшота, и состояние всегда пересобираемо свёрткой. Значит доставки должны жить до следующего проверенного экспорта, а не фиксированные две недели: иначе между концом ретеншена и датой снапшота образуется дыра в журнале, и пересобрать этот отрезок будет нечем.

Цена измерена: ~23 МБ архива в сутки, то есть ~2 ГБ за квартал между экспортами. Дёшево за возможность пересобрать что угодно.

Отдельное исключение: stateOfMind в экспорт не попадает вовсе (проверено на свежем архиве). Для него доставки — не хвост журнала, а единственный источник, и под общее правило удаления он не подпадает.

Включать после того, как разбор устоится и пересборка докажет, что хранилище действительно восстанавливается: иначе страховка исчезнет раньше, чем перестанет быть нужна.

Готово, когда удаляются только доставки старше последнего проверенного экспорта, записи stateOfMind не трогаются вовсе, а /stats показывает глубину архива и дату снапшота, до которой он подрезан.

Предусловие снято

Признак, без которого ретеншен был опасен, готов: доставка с непокрытой секцией имеет статус partial и список непокрытых ключей (change 2026-08-01-nerazobrannye-sekcii-dostavki). Ретеншен обязан спрашивать статус, а не считать parsed разрешением: тело stateOfMind восстановить неоткуда — в экспорте Apple секции нет.

Вместе с этим действует правило: задача, которая начинает разбирать секцию, тем же изменением переводит partial-строки с этим ключом в pending. Ретеншену позволено смотреть на partial только пока правило соблюдается.