- девять экспортов, версии 11→13→14; ни один тип записи не исчез, только
добавлялись — разбор можно писать аддитивно
- Correlation (давление) появился только в 2026 и ломает парсер по одним Record;
имя файла локализовано, DTD расходится с данными
- коды HealthKit переименовываются: те же записи сна приезжают как Asleep из
экспорта 2021 и как AsleepUnspecified из свежего
- пути указывают на ./data, добавлено предупреждение про умолчания в коде
- заведена задача на подтягивание умолчаний: запуск без конфига сейчас молча
создаёт пустую базу рядом с настоящей
- 20 задач: 8 высоких, 9 средних, 3 низких; две заведены идеями — сутки при
смене часового пояса и пересекающиеся источники одной метрики
- план сведён к порядку и его обоснованию, единицы работы переехали в беклог
- одиннадцать проходов ревью перенесены из jellybit и переписаны под домен:
приём пакетов, слои, координатная идентичность, чувствительность данных
- скиллы task-pipeline и review-pipeline, контракт находок, журнал промахов
- сервис поднимается через `task up`/`task restart`, данные вынесены в ./data
и переживают пересборку — поток с телефона не прерывается
- `task gate` гоняет build/vet/lint/test/race/покрытие диффа/миграции, плюс два
шага под healthlog: данные о здоровье в индексе и синхронность образцов конфига
- `task review:context` собирает вход для архитектурного прохода ревью
- агрегация появилась в ответе на запрос: род метрики измеряется сверкой
слоёв, нижний слой HAE не суммируется никогда
- переведённые строки хранятся дословно с приписанным кодом HealthKit;
снято правило «настройки данных у всех проходов одинаковы» — слой в ключе
- добавлены устаревание нижнего слоя по проверенному экспорту и MCP поверх
read API; план вырос до 11 шагов
- категориальные значения приходят переведёнными на язык телефона, а родной
экспорт Apple говорит кодами HealthKit — источники несопоставимы без словаря
- sleep_analysis шлёт две несовместимые схемы под одним именем, HRV несёт
внутри точки серию ударов на 93% своего объёма и третий формат времени
- род агрегации из формы точки не выводится, но выводится сверкой слоёв
- POST /api/v1/ingest: токен, лимит тела, gzip, durable-запись тела в сырой
архив, учёт доставки в SQLite
- код ответа отражает доставку, а не разбор: битый JSON — 400, непонятое
содержимое — 200, данные уже сохранены и доразберутся позже
- сохраняется полный набор заголовков запроса с вычисткой секретов по имени
и по совпадению значения с токеном
- README, CLAUDE.md, docs: назначение и границы, архитектура, конвенции, план
- docs/local-research.md — 36 находок по формату Health Auto Export, снятых на
живых данных; документация приложения местами расходится с тем, что оно шлёт
- Taskfile, .golangci.yml, самодокументируемый config.example.toml