план и README синхронизированы с состоянием

- шаг 3 отмечен как почти готовый: частичный разбор закрыт, остались
  тренировки, reindex и словарь категориальных значений
- ближайшая цель — reindex: после миграции доставки числятся pending, а
  подобрать их некому
- находок в разведке 50, не 46
This commit is contained in:
av
2026-08-01 21:30:59 +03:00
parent 34e5109b6d
commit 2fa8287c8b
2 changed files with 30 additions and 9 deletions
+10 -4
View File
@@ -55,11 +55,17 @@ iPhone ──HTTPS POST──► healthlog ──► журнал доставо
## Состояние
В разработке. Готовы шаги 1–2 из 11: сервис принимает пакеты и складывает их в
сырой архив. Разбора, хранилища и read API ещё нет — план в
[docs/plan.md](docs/plan.md).
В разработке. Готовы шаги 1–2 из 11 и большая часть шага 3: сервис принимает
пакеты, складывает их в сырой архив и **разбирает метрики в часовые объекты**
— с выводом слоя из данных, канонизацией содержимого и слиянием точек по
полноте. Секции, которых разбор пока не покрывает (`workouts`, `stateOfMind`
половина потока), принимаются, хранятся и честно помечаются как неразобранные.
Разведка формата закончена: 46 находок на живом потоке, половина расходится с
Чего ещё нет: пересборки хранилища из архива (`reindex`), каталога метрик с
измеренным родом агрегации и **read API** — данные наружу пока не отдаются
никак. План в [docs/plan.md](docs/plan.md).
Разведка формата закончена: 50 находок на живом потоке, половина расходится с
документацией Health Auto Export — [docs/local-research.md](docs/local-research.md).
## Команды
+20 -5
View File
@@ -9,13 +9,22 @@
## Ближайшая цель
Метрики разбираются и ложатся в часовые объекты: тела перестали быть
недифференцированной кучей. Дальше — доразобрать остаток шага 3
(тренировки и записи со своими `id`, `reindex`, словарь категориальных
значений) и разобрать блокеры, накопившиеся из ревью.
недифференцированной кучей. Блокеры, накопившиеся из ревью, разобраны — их в
беклоге ноль.
Дальше — **`reindex`**, и он сейчас срочнее остального остатка шага 3. После
миграции 00005 доставки числятся `pending`, а подобрать их некому: код
пересборки не написан. Данные целы (тела в архиве, объекты в витрине), но
учёт честно говорит «этим разбором не смотрели», и так будет, пока пересборки
нет. Тем же кодом закрывается половина задачи «разнести ответ и свёртку».
Потом — остаток шага 3: тренировки и записи со своими `id` (это половина
потока: `workouts` и `stateOfMind` принимаются и хранятся, но не разбираются),
словарь категориальных значений.
Разведка закончена: правило вывода слоя, модель идентичности и формы точки
проверены на живом потоке, выводы — в
[local-research.md](local-research.md), 47 находок.
[local-research.md](local-research.md), 50 находок.
## Шаги
@@ -25,7 +34,9 @@
запись тела в архив, строка в `delivery`. Разбора ещё нет.
**подключаем телефон по локальной сети**
- [~] **3. Разбор и хранилище.** Метрики — сделано (`bucket`, `internal/hae`,
`internal/canon`, `internal/fold`); остались тренировки и записи со
`internal/canon`, `internal/fold`), вместе с частичным разбором: секции,
которых разбор не покрывает, перечисляются, доставка получает статус
`partial` и список непокрытых ключей. Остались тренировки и записи со
своими `id`, `reindex` и словарь категориальных значений. Миграции,
часовые объекты метрик
(`bucket`, ключ `метрика + слой + час`) + `workout`/`record` по своим
@@ -80,6 +91,10 @@
- **Ретеншен сырого архива** — удаление доставок старше последнего
проверенного экспорта (не фиксированный срок: журнал не должен рваться).
Пока архив не подчищается; включить после того, как разбор устоится.
Предусловие снято: статус `partial` и список непокрытых секций готовы, и
ретеншен обязан спрашивать статус, а не считать `parsed` разрешением.
Вместе с ним действует правило — задача, которая начинает разбирать секцию,
тем же изменением переводит `partial`-строки с этим ключом в `pending`.
- **Порог `sealed`** — с какого возраста час считается запечатанным. Ставим по
факту: сначала пишем `WARN` на изменение старых объектов и смотрим, какая
глубина досчёта встречается в жизни (наблюдалось до 22 минут, находка 10).