@@ -310,7 +310,7 @@ session-id уникален на каждую доставку
**Следствие: ** заголовок годится как метаданные доставки, но **не как
описание данных**. Гранулярность определяется по самим меткам времени, а не по
`aggregation` . Для самоописания (шаг 5) шаг метрики нужно выводить из данных —
`aggregation` . Для самоописания шаг метрики нужно выводить из данных —
как и всё остальное.
## 14. Две автоматизации с одним набором метрик дают дубликат
@@ -406,7 +406,7 @@ heartRateRecovery массив 13 точек [date, Min, Avg, Max, u
появились данные, добавились `mindful_minutes` и `walking_heart_rate_average` .
Каталог метрик растёт по факту поступления данных. Это подтверждает выбор
обобщённой модели хранения и выводимых схем (шаг 5) : фиксированный список
обобщённой модели хранения и выводимых схем: фиксированный список
метрик в коде устарел бы в тот же день.
## 18. Пустой пакет не отправляется
@@ -567,7 +567,7 @@ basal_energy_burned 3600 точек в час = 86 400 в сутки
напишет обычный пробел и получит пустой ответ без всякой ошибки. То же
касается составных значений: `"Apple Watch Ultra 3|iPhone (Anton)"` .
**Следствие: ** в самоописании (шаг 5) значения-примеры нужно отдавать так,
**Следствие: ** в самоописании значения-примеры нужно отдавать так,
чтобы невидимые символы были заметны, а в read API фильтр по источнику — либо
не делать, либо нормализовать пробелы на входе и хранить оба варианта.
Значение при этом храним дословно, как и всё остальное.
@@ -815,7 +815,7 @@ active_energy 22:06:32 0.0074754192155406605 против 0.007475419215
дубликатов при идентичности по содержимому. Ключ по координатам
(`метрика + date + source` ) с перезаписью значений эту проблему снимает и
заодно сохраняет эпизоды сна (они различаются `start` /`end` ) — стоит
вернуться к развилке находки 11 при реализации шага 3 .
вернуться к развилке находки 11 при реализации разбора .
## 31. Вся мета-информация о выгрузке — в заголовках, и она полуправдива
@@ -891,7 +891,7 @@ User-Agent Auto%20Export/20260729.1 CFNetwork/3860.700.1 Darw
`Auto%20Export/20260729.1` — датированный номер сборки, плюс версия системы
(`Darwin/25.6.0` ). Это закрывает вопрос, который висел с самого начала: формат
данных может измениться только с обновлением Health Auto Export, и теперь
**обновление видно в каждой доставке ** . Значит выведенные схемы (шаг 5) можно
**обновление видно в каждой доставке ** . Значит выведенные схемы можно
сверять по версии: изменилась версия — стоит перепроверить формы точек.
Версию стоит сохранять отдельной колонкой рядом с доставкой, а не только внутри
@@ -1049,7 +1049,7 @@ BasalEnergyBurned: 564 записи, интервал: медиана 10с, м
`export_cda.xml` на 1,1 ГБ), архив целиком 104 МБ. Имя файла **локализовано ** —
`экспорт.xml` , а не `export.xml` : захардкодить нельзя.
Значит `healthlog import` из шага 6 — это не «те же JSON, только из файла», а
Значит `healthlog import` — это не «те же JSON, только из файла», а
отдельный парсер XML со своей моделью записи. Зато он даёт слой, которого HAE
не отдаёт ни в каком режиме.