хранилище описано как свёртка по журналу событий

- экспорт Apple это снапшот всей истории, доставки после его даты — события
  поверх; состояние пересобирается как import(экспорт) + replay(доставки)
- отсюда ретеншен архива меняется с произвольных 14 дней на «до следующего
  проверенного экспорта» (~2 ГБ за квартал, измерено), а свёртка обязана быть
  детерминированной — воспроизведение строго по received_at
- названы границы модели: stateOfMind в экспорт не попадает вовсе, а верхние
  слои за периоды с удалёнными доставками не воскресают и досчитываться не
  должны — каталог обязан говорить это честно
This commit is contained in:
av
2026-08-01 14:27:13 +03:00
parent 7ee55057e0
commit b2885c79e3
10 changed files with 162 additions and 46 deletions
+3 -2
View File
@@ -34,8 +34,9 @@ description: Конвейер ревью изменений healthlog — дет
Инварианты, нарушение которых — по умолчанию `critical` (подробно —
`CLAUDE.md`, `docs/architecture.md`):
- **Точка хранится дословно.** Всё, что теряет поле внутри точки, необратимо:
сырой архив живёт 14 дней, дальше истина — сами точки.
- **Точка хранится дословно.** Хранилище — свёртка по журналу
(`import(экспорт) + replay(доставки)`), поэтому разобранное пересобираемо, а
вот не принятое — нет: доставка мимо архива теряется навсегда.
- **Идентичность по координатам** (`метрика + слой + метка`). `source` в ключ
не входит. Неверное правило слияния портит историю молча — заметить это
можно только сверкой с родным экспортом Apple, то есть месяцами позже.