непокрытые секции доставки видны в статусе разбора

- половина потока (50 доставок из 104) не несёт metrics вовсе и до сих пор
  числилась parsed: ретеншен, поверив статусу, срезал бы тела stateOfMind,
  которых в экспорте Apple нет
- разбор перечисляет верхнеуровневые ключи data, непокрытые проглатываются
  декодированием: тело 40 МиБ из непокрытой секции удерживает 0 МиБ
- статус partial и колонка delivery.uncovered_sections; миграция переводит
  прежние parsed в pending — им верить нельзя
- витрина не изменилась: отпечаток совпал с прогоном до изменения
This commit is contained in:
av
2026-08-01 21:25:59 +03:00
parent 7a7594e3e7
commit 34e5109b6d
26 changed files with 1808 additions and 89 deletions
+27
View File
@@ -1631,6 +1631,33 @@ apple_stand_time 14
названа вслух и ограничена столкновением, где одно из двух содержимых на одних
координатах заведомо неверно.
## 50. Половина потока — не `metrics`, и секции не смешиваются
Замер по всем 99 доставкам архива: набор верхнеуровневых ключей `data`.
| набор ключей `data` | доставок |
|---|---|
| `metrics` | 51 |
| `workouts` | 24 |
| `stateOfMind` | 24 |
Три наблюдения, каждое из которых влияло на решение:
1. **48 доставок из 99 сейчас числятся разобранными, не будучи разобранными.**
Разбор читает только `metrics`; доставка из одних тренировок получала
`parse_status=parsed` с нулём точек — неотличимо от доставки с пустой
секцией метрик. Ретеншен, ориентируясь на статус, срезал бы тела, а для
`stateOfMind` это необратимо (находка 46).
2. **Ни одна доставка не несла двух секций сразу.** Автоматизация HAE шлёт одну
секцию за раз. Полагаться на это в правилах удаления данных, впрочем,
нельзя: наблюдение собрано за двое суток потока.
3. **Пустых секций не бывает** — все 99 значений непусты. Это снимает соблазн
«пустую секцию не считать непокрытой»: он бы снял шум, если бы HAE слал
`"workouts": []` в каждой доставке, а он не слал ни разу.
Отсюда статус `partial` и колонка `delivery.uncovered_sections`: статус
отвечает на вопрос «разобрано ли всё», список — «что именно осталось».
## Инструмент
Разбор ведётся скриптом `tmp/research/hl.py` (Python 3, только стандартная