Commit Graph
64 Commits
Author SHA1 Message Date
av 01d0de59df разбор метрик HAE: фикстуры, канонизация, парсер
- tmp/research/fixtures.py собирает фикстуры из архива, вычищая измерения и
  сохраняя порядок ключей, форму литералов, выравнивание меток и невидимые
  символы; шесть фикстур в internal/hae/testdata
- internal/canon — общий дом канонической формы, полноты и хеша: числа читаются
  литералом через json.Number, округление до 12 значащих цифр
- internal/hae — разбор секции metrics, вывод слоя по метрике, разделение схем
  сна, координаты интервалом; recover внутри Parse, фаззинг
- миграция bucket и docs/database.md
2026-08-01 17:31:41 +03:00
av 3e93dd95b4 ключ точки — интервал одной формы, класс «эпизодных метрик» убран
Перепись по 22 метрикам с интервалами опровергла признак из первой редакции:
start всегда равен date, интервалы несёт не только сон, обе формы точки не
смешиваются внутри метрики одной доставки, а разные интервалы под одной меткой
всегда несут разное содержимое. Значит ключ единый — метрика + слой + начало +
конец, у измерения вырожденный, без ветвления по классу.
2026-08-01 17:15:49 +03:00
av 3c9d226a34 идентичность эпизода — интервал: блокер снят измерением
- находка 47: ключ (date,start,end) даёт 174 координаты сна против 170 по
  метке и ноль столкновений внутри доставки против 33; value в ключе лишний
- UUID в выгрузку Apple не попадает, другой идентичности у эпизода нет
- поэпизодный sleep_analysis вернулся в scope razbor-metrik-v-obekty
2026-08-01 17:09:45 +03:00
av 809153e03f предложение переработано по итогам ревью дизайна
- три решения опровергнуты экспериментами: повтор при SQLITE_BUSY не сходится
  без _txlock=immediate (242 из 800 против 800 из 800), разбор в map[string]any
  держит 197 МиБ против 54, канонизация без json.Number теряет литерал
- канонизации назначен дом: общий internal/canon вместо hae, иначе импорт
  экспорта Apple потребует второй реализации и хеш-детектор станет бесполезен
- вывод слоя вернул шаг наследования, WARN сравнивается только с надёжным
  заголовком; в bucket возвращены units и границы содержимого
2026-08-01 15:16:58 +03:00
av 7998c6b86e задачи ведутся автономно, вопросы выносятся блокерами
- умолчание — делать, а не спрашивать: развилка вынимается пунктом в секцию
  `блокеры` беклога, задача переформулируется на остаток и доводится до коммита
- спрашиваем только про необратимое: деплой, выкладку наружу, удаление данных
- находка ревью с пометкой «развилка» больше не останавливает работу, а
  уезжает блокером с вариантами и ценой каждого
2026-08-01 14:33:06 +03:00
av b2885c79e3 хранилище описано как свёртка по журналу событий
- экспорт Apple это снапшот всей истории, доставки после его даты — события
  поверх; состояние пересобирается как import(экспорт) + replay(доставки)
- отсюда ретеншен архива меняется с произвольных 14 дней на «до следующего
  проверенного экспорта» (~2 ГБ за квартал, измерено), а свёртка обязана быть
  детерминированной — воспроизведение строго по received_at
- названы границы модели: stateOfMind в экспорт не попадает вовсе, а верхние
  слои за периоды с удалёнными доставками не воскресают и досчитываться не
  должны — каталог обязан говорить это честно
2026-08-01 14:27:13 +03:00
av 7ee55057e0 local-research: разобран формат экспорта Apple за 5.5 лет
- девять экспортов, версии 11→13→14; ни один тип записи не исчез, только
  добавлялись — разбор можно писать аддитивно
- Correlation (давление) появился только в 2026 и ломает парсер по одним Record;
  имя файла локализовано, DTD расходится с данными
- коды HealthKit переименовываются: те же записи сна приезжают как Asleep из
  экспорта 2021 и как AsleepUnspecified из свежего
2026-08-01 14:20:54 +03:00
av 7ed82af450 backlog: снята задача о резервном копировании
- бекап обеспечивает готовый механизм на сервере пет-проектов
- требования к тому и снятию копии SQLite перенесены в задачу деплоя
2026-08-01 14:15:07 +03:00
av 5855e0f14c config.example.toml переведён на новую раскладку данных
- пути указывают на ./data, добавлено предупреждение про умолчания в коде
- заведена задача на подтягивание умолчаний: запуск без конфига сейчас молча
  создаёт пустую базу рядом с настоящей
2026-08-01 14:12:28 +03:00
av 59ec613184 заведён беклог проекта
- 20 задач: 8 высоких, 9 средних, 3 низких; две заведены идеями — сутки при
  смене часового пояса и пересекающиеся источники одной метрики
- план сведён к порядку и его обоснованию, единицы работы переехали в беклог
2026-08-01 14:11:42 +03:00
av 36908b774c добавлен конвейер ревью и пайплайн задачи
- одиннадцать проходов ревью перенесены из jellybit и переписаны под домен:
  приём пакетов, слои, координатная идентичность, чувствительность данных
- скиллы task-pipeline и review-pipeline, контракт находок, журнал промахов
2026-08-01 14:11:41 +03:00
av 9d06509446 пересмотрена архитектура под слои, свёртку в ответе и MCP
- агрегация появилась в ответе на запрос: род метрики измеряется сверкой
  слоёв, нижний слой HAE не суммируется никогда
- переведённые строки хранятся дословно с приписанным кодом HealthKit;
  снято правило «настройки данных у всех проходов одинаковы» — слой в ключе
- добавлены устаревание нижнего слоя по проверенному экспорту и MCP поверх
  read API; план вырос до 11 шагов
2026-08-01 13:48:22 +03:00
av 18d76d9610 local-research: добавлены находки 37–41 о форме данных HAE
- категориальные значения приходят переведёнными на язык телефона, а родной
  экспорт Apple говорит кодами HealthKit — источники несопоставимы без словаря
- sleep_analysis шлёт две несовместимые схемы под одним именем, HRV несёт
  внутри точки серию ударов на 93% своего объёма и третий формат времени
- род агрегации из формы точки не выводится, но выводится сверкой слоёв
2026-08-01 13:46:14 +03:00
av 5e2385ba6e добавлены документация проекта и каркас разработки
- README, CLAUDE.md, docs: назначение и границы, архитектура, конвенции, план
- docs/local-research.md — 36 находок по формату Health Auto Export, снятых на
  живых данных; документация приложения местами расходится с тем, что оно шлёт
- Taskfile, .golangci.yml, самодокументируемый config.example.toml
2026-08-01 12:37:03 +03:00