ключ точки — интервал одной формы, класс «эпизодных метрик» убран

Перепись по 22 метрикам с интервалами опровергла признак из первой редакции:
start всегда равен date, интервалы несёт не только сон, обе формы точки не
смешиваются внутри метрики одной доставки, а разные интервалы под одной меткой
всегда несут разное содержимое. Значит ключ единый — метрика + слой + начало +
конец, у измерения вырожденный, без ветвления по классу.
This commit is contained in:
av
2026-08-01 17:15:49 +03:00
parent 3c9d226a34
commit 3e93dd95b4
7 changed files with 119 additions and 73 deletions
+15 -14
View File
@@ -24,8 +24,8 @@ healthlog принимает выгрузки Apple Health из приложен
- **Сохранили — значит приняли.** Код ответа отражает доставку, а не разбор
(см. «Приём»).
- **Ничего не теряем молча.** Идентичность — устойчивые координаты
(`метрика + слой + метка времени`), а у точки-интервала — `метрика + слой +
начало + конец`; `source` в ключ не входит, он
(`метрика + слой + начало + конец`; у точки-измерения конец равен началу);
`source` в ключ не входит, он
нестабилен. Хеш канонизированного содержимого остаётся детектором изменений,
чтобы не писать зря. При столкновении выигрывает более полная точка, а не
последняя пришедшая: бедная доставка не должна стирать поля у богатой.
@@ -461,22 +461,23 @@ hour метки выровнены на час heart_rate 00:00:00
**Идентичность точки — координаты, а не содержимое.**
```
ключ: метрика + слой + метка времени
ключ: метрика + слой + начало + конец конец = начало, если end нет
значения: qty / Min / Avg / Max / source / … ← перезаписываются
```
**У точки-интервала ключ — интервал.** Метка на эпизоде не уникальна: под одним
`date` лежит до трёх записей сна, и это не дефект, а способ Apple выразить
вложенность «в кровати» и фазы внутри неё. Ключ
`метрика + слой + начало + конец` измерен на всём корпусе (находка 47): 174
координаты против 170 по метке, ноль столкновений против 33 **внутри одной
доставки**, где тай-брейк по времени приёма неприменим в принципе. `value` в
ключе ничего не добавляет.
**Ключ — интервал, а не метка.** Метка на записи сна не уникальна: под одним
`date` лежит до трёх записей, и это не дефект, а способ Apple выразить
вложенность «в кровати» и фазы внутри неё. Измерено на всём корпусе (находка
47): 174 координаты против 170 по метке, ноль столкновений против 33 **внутри
одной доставки**, где тай-брейк по времени приёма неприменим в принципе.
`value` в ключе ничего не добавляет.
Эпизодность выводится из формы точки — есть `start` и `end`, отличные от `date`,
— а не из списка имён метрик: список был бы вторым способом описывать то, что
уже сказано данными. Час объекта берётся по началу эпизода, иначе
принадлежность объекту зависела бы от длительности.
Форма ключа **одна для всех точек**. Интервалы несут 22 метрики, а не только
сон; `start`, когда он есть, всегда равен `date`; обе формы точки не
смешиваются внутри метрики одной доставки. Поэтому отдельного класса «эпизодных
метрик» нет — нечего выводить и нечего поддерживать в каталоге и Read API. Час
объекта берётся по началу, иначе принадлежность объекту зависела бы от
длительности.
`HKObject.uuid` дал бы идентичность даром, но в выгрузку Apple он не попадает —
там у записи только `type`, `sourceName`, `sourceVersion`, `creationDate`,