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

- экспорт 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
+11 -11
View File
@@ -34,22 +34,22 @@ healthlog делает это один раз. Телефон шлёт данн
## Как устроено
```
iPhone ──HTTPS POST──► healthlog ──► сырой архив (.json.gz, 14 дней)
экспорт Apple ────────┐ снапшот всей истории, раз в 2–3 месяца
iPhone ──HTTPS POST──► healthlog ──► журнал доставок (.json.gz)
│ │
│ └── страховка разбора, не склад
│ └── события поверх снапшота
SQLite ──┬──► HTTP read API ──► мои приложения
(точки по
слоям) └──► MCP ───────────► агенты
экспорт Apple ──────────────┘ нижний слой, раз в 2–3 месяца
(свёртка по │
журналу) └──► MCP ───────────► агенты
```
Приём сначала кладёт тело запроса на диск как есть и только потом разбирает.
Значит, ошибка в нашем разборе не может привести к потере данных: хранилище
пересобирается из архива командой `healthlog reindex`. Архив при этом
недолговечен — дальше истина в самих точках, и потому точки хранятся
дословно.
Значит, ошибка в разборе не теряет данные: состояние всегда пересобирается
свёрткой `import(экспорт) + replay(доставки)`. Отсюда и главный инвариант —
точки хранятся дословно: журнал, из которого что-то выброшено, перестаёт быть
журналом.
Подробности — [docs/architecture.md](docs/architecture.md).
@@ -59,7 +59,7 @@ iPhone ──HTTPS POST──► healthlog ──► сырой архив (.jso
сырой архив. Разбора, хранилища и read API ещё нет — план в
[docs/plan.md](docs/plan.md).
Разведка формата закончена: 41 находка на живом потоке, половина расходится с
Разведка формата закончена: 46 находок на живом потоке, половина расходится с
документацией Health Auto Export — [docs/local-research.md](docs/local-research.md).
## Команды