- беклог и план переехали в docs/tasks (38 задач, 11 целей), слаги переименованы с транслита на английские, 85 ссылок поправлены - conventions.md разобран в docs/conventions/, local-research.md — в docs/research/, review-journal.md — в docs/review.md с разделом настройки конвейера; заведены security.md, adr/ и .pm.json - шаг docs.py check добавлен в task gate; поведение в architecture.md помечено девятью маркерами долга, database.md получил настройки с числовым значением
3.2 KiB
Словарь категориальных значений → коды HealthKit
Секция: ядро · Хук: Фазы сна и типы тренировок приходят строками русской локали — с экспортом Apple их не сверить · Теги: goal:parsing-and-storage
HAE отдаёт перечислимые значения строками локали телефона: «БДГ», «Сидячий
образ жизни», «В помещении Ходьба». Родной экспорт Apple при этом говорит
кодами (HKCategoryValueSleepAnalysisAsleepREM) — источники несопоставимы
(находка 37).
Три следствия, и третье решающее: клиент угадывает словарь; смена языка телефона молча расколет историю; сверить покрытие экспортом нечем — а на этой сверке стоит устаревание нижнего слоя.
Решение (вариант «б»): строка хранится дословно, рядом кладётся выведенный
код. Словарь ключуется парой (локаль, строка), локаль берётся из
Accept-Language. Незнакомая строка → пустой код, а не догадка.
Словарь фаз сна уже выведен сопоставлением потока с экспортом за тот же период (находка 43) — составлять руками не нужно:
Основная → AsleepCore Бодрствование → Awake БДГ → AsleepREM
Глубокий → AsleepDeep В кровати → InBed Во сне → AsleepUnspecified
Тем же способом добираются heart_rate.context и типы тренировок.
Осложнение, всплывшее на истории экспортов: коды тоже не вечны. Одни и те
же записи сна приезжают как …Asleep в экспорте 2021 года и как
…AsleepUnspecified в экспорте 2026-го: Apple переименовала значение и
переписывает историю при выгрузке (находка 43). Значит словарь должен
переживать переименование самих кодов, иначе после обновления iOS история
расколется вторично — уже на «стабильной» стороне. Простейшее решение: хранить код как есть, а
эквивалентность старых и новых имён держать отдельной таблицей синонимов.
Готово, когда фазы сна из потока и из экспорта Apple сравниваются напрямую, а
/stats показывает строки, для которых кода ещё нет.
stateOfMind в словаре не нуждается — он и так шлёт коды HealthKit.