diff --git a/README.md b/README.md index fdfe71b..bf858e9 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ iPhone ──HTTPS POST──► healthlog ──► журнал доставо ## Состояние -В разработке. Готовы шаги 1–2 из 11 и большая часть шага 3: сервис принимает +В разработке. Готовы каркас и приём, большая часть разбора: сервис принимает пакеты, складывает их в сырой архив и **разбирает метрики в часовые объекты** — с выводом слоя из данных, канонизацией содержимого и слиянием точек по полноте. Секции, которых разбор пока не покрывает (`workouts`, `stateOfMind` — @@ -72,8 +72,8 @@ iPhone ──HTTPS POST──► healthlog ──► журнал доставо ``` healthlog serve приём + read API + MCP -healthlog import родной экспорт Apple Health (шаг 8) -healthlog reindex пересборка хранилища из архива (шаг 3) +healthlog import родной экспорт Apple Health (в планах) +healthlog reindex пересборка хранилища из архива (в планах) healthlog healthcheck проверка живости для docker HEALTHCHECK ``` @@ -102,7 +102,7 @@ curl -X POST localhost:8080/api/v1/ingest -d '{"data":{"metrics":[]}}' Если `auth.write_tokens` пуст, проверка токена выключена — для доверенной локальной сети этого достаточно, сервис пишет об этом `write auth disabled` -на старте. Для доступа снаружи понадобится и токен, и TLS (шаг 8). +на старте. Для доступа снаружи понадобится и токен, и TLS — это шаг «Деплой». ## Документация diff --git a/docs/backlog/mcp-server.md b/docs/backlog/mcp-server.md index 4bd9355..f955c5f 100644 --- a/docs/backlog/mcp-server.md +++ b/docs/backlog/mcp-server.md @@ -19,5 +19,5 @@ MCP не даёт ничего, чего не даёт HTTP, и права об Готово, когда агент подключается по URL и отвечает на «как я спал на прошлой неделе» без промежуточного кода. -Связано: `docs/architecture.md` → «MCP», план шаг 7. +Связано: `docs/architecture.md` → «MCP», план → шаг «MCP». diff --git a/docs/backlog/read-api-tochki.md b/docs/backlog/read-api-tochki.md index 77ed9af..093e194 100644 --- a/docs/backlog/read-api-tochki.md +++ b/docs/backlog/read-api-tochki.md @@ -17,5 +17,5 @@ Готово, когда «шаги за неделю по дням» и «вес за год» отвечаются одним запросом каждый, а в ответе всегда видно `layer`, `bucket` и `aggregation`. -Связано: `docs/architecture.md` → «Read API», план шаг 5. +Связано: `docs/architecture.md` → «Read API», план → шаг «Read API». diff --git a/docs/backlog/reindex-iz-arhiva.md b/docs/backlog/reindex-iz-arhiva.md index 4c124a2..dc631af 100644 --- a/docs/backlog/reindex-iz-arhiva.md +++ b/docs/backlog/reindex-iz-arhiva.md @@ -24,5 +24,5 @@ Готово, когда пересборка с нуля даёт состояние, совпадающее с накопленным приёмом, и повторный прогон ничего не меняет. -Связано: план шаг 3, `docs/architecture.md` → «Сырой архив». +Связано: план → шаг «Разбор и хранилище», `docs/architecture.md` → «Сырой архив». diff --git a/docs/backlog/rod-agregacii-i-katalog.md b/docs/backlog/rod-agregacii-i-katalog.md index 4fbf5c2..a26546b 100644 --- a/docs/backlog/rod-agregacii-i-katalog.md +++ b/docs/backlog/rod-agregacii-i-katalog.md @@ -26,5 +26,5 @@ HAE. Он не сэмплы, а посекундная развёртка (на `2026-08-01-polnota-tochki-mnozhestvom-klyuchey`), здесь остался только выбор победителя при РАВНОЙ полноте. -Связано: `docs/architecture.md` → «Слои гранулярности», план шаг 4. +Связано: `docs/architecture.md` → «Слои гранулярности», план → шаг «Каталог и род агрегации». diff --git a/docs/local-research.md b/docs/local-research.md index d1d77af..54ddafa 100644 --- a/docs/local-research.md +++ b/docs/local-research.md @@ -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 не отдаёт ни в каком режиме.