docs: ссылки на план по названиям шагов вместо номеров
- шесть ссылок уже указывали не туда: самоописание значилось шагом 5 (оно 6), import — шагом 6 (он 8), TLS — шагом 8 (это деплой, 11) - README, local-research.md и беклог переведены на названия; нумерация остаётся внутренним делом plan.md
This commit is contained in:
@@ -55,7 +55,7 @@ iPhone ──HTTPS POST──► healthlog ──► журнал доставо
|
|||||||
|
|
||||||
## Состояние
|
## Состояние
|
||||||
|
|
||||||
В разработке. Готовы шаги 1–2 из 11 и большая часть шага 3: сервис принимает
|
В разработке. Готовы каркас и приём, большая часть разбора: сервис принимает
|
||||||
пакеты, складывает их в сырой архив и **разбирает метрики в часовые объекты**
|
пакеты, складывает их в сырой архив и **разбирает метрики в часовые объекты**
|
||||||
— с выводом слоя из данных, канонизацией содержимого и слиянием точек по
|
— с выводом слоя из данных, канонизацией содержимого и слиянием точек по
|
||||||
полноте. Секции, которых разбор пока не покрывает (`workouts`, `stateOfMind` —
|
полноте. Секции, которых разбор пока не покрывает (`workouts`, `stateOfMind` —
|
||||||
@@ -72,8 +72,8 @@ iPhone ──HTTPS POST──► healthlog ──► журнал доставо
|
|||||||
|
|
||||||
```
|
```
|
||||||
healthlog serve приём + read API + MCP
|
healthlog serve приём + read API + MCP
|
||||||
healthlog import родной экспорт Apple Health (шаг 8)
|
healthlog import родной экспорт Apple Health (в планах)
|
||||||
healthlog reindex пересборка хранилища из архива (шаг 3)
|
healthlog reindex пересборка хранилища из архива (в планах)
|
||||||
healthlog healthcheck проверка живости для docker HEALTHCHECK
|
healthlog healthcheck проверка живости для docker HEALTHCHECK
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -102,7 +102,7 @@ curl -X POST localhost:8080/api/v1/ingest -d '{"data":{"metrics":[]}}'
|
|||||||
|
|
||||||
Если `auth.write_tokens` пуст, проверка токена выключена — для доверенной
|
Если `auth.write_tokens` пуст, проверка токена выключена — для доверенной
|
||||||
локальной сети этого достаточно, сервис пишет об этом `write auth disabled`
|
локальной сети этого достаточно, сервис пишет об этом `write auth disabled`
|
||||||
на старте. Для доступа снаружи понадобится и токен, и TLS (шаг 8).
|
на старте. Для доступа снаружи понадобится и токен, и TLS — это шаг «Деплой».
|
||||||
|
|
||||||
|
|
||||||
## Документация
|
## Документация
|
||||||
|
|||||||
@@ -19,5 +19,5 @@ MCP не даёт ничего, чего не даёт HTTP, и права об
|
|||||||
Готово, когда агент подключается по URL и отвечает на «как я спал на прошлой
|
Готово, когда агент подключается по URL и отвечает на «как я спал на прошлой
|
||||||
неделе» без промежуточного кода.
|
неделе» без промежуточного кода.
|
||||||
|
|
||||||
Связано: `docs/architecture.md` → «MCP», план шаг 7.
|
Связано: `docs/architecture.md` → «MCP», план → шаг «MCP».
|
||||||
|
|
||||||
|
|||||||
@@ -17,5 +17,5 @@
|
|||||||
Готово, когда «шаги за неделю по дням» и «вес за год» отвечаются одним запросом
|
Готово, когда «шаги за неделю по дням» и «вес за год» отвечаются одним запросом
|
||||||
каждый, а в ответе всегда видно `layer`, `bucket` и `aggregation`.
|
каждый, а в ответе всегда видно `layer`, `bucket` и `aggregation`.
|
||||||
|
|
||||||
Связано: `docs/architecture.md` → «Read API», план шаг 5.
|
Связано: `docs/architecture.md` → «Read API», план → шаг «Read API».
|
||||||
|
|
||||||
|
|||||||
@@ -24,5 +24,5 @@
|
|||||||
Готово, когда пересборка с нуля даёт состояние, совпадающее с накопленным
|
Готово, когда пересборка с нуля даёт состояние, совпадающее с накопленным
|
||||||
приёмом, и повторный прогон ничего не меняет.
|
приёмом, и повторный прогон ничего не меняет.
|
||||||
|
|
||||||
Связано: план шаг 3, `docs/architecture.md` → «Сырой архив».
|
Связано: план → шаг «Разбор и хранилище», `docs/architecture.md` → «Сырой архив».
|
||||||
|
|
||||||
|
|||||||
@@ -26,5 +26,5 @@ HAE. Он не сэмплы, а посекундная развёртка (на
|
|||||||
`2026-08-01-polnota-tochki-mnozhestvom-klyuchey`), здесь остался только выбор
|
`2026-08-01-polnota-tochki-mnozhestvom-klyuchey`), здесь остался только выбор
|
||||||
победителя при РАВНОЙ полноте.
|
победителя при РАВНОЙ полноте.
|
||||||
|
|
||||||
Связано: `docs/architecture.md` → «Слои гранулярности», план шаг 4.
|
Связано: `docs/architecture.md` → «Слои гранулярности», план → шаг «Каталог и род агрегации».
|
||||||
|
|
||||||
|
|||||||
@@ -310,7 +310,7 @@ session-id уникален на каждую доставку
|
|||||||
|
|
||||||
**Следствие:** заголовок годится как метаданные доставки, но **не как
|
**Следствие:** заголовок годится как метаданные доставки, но **не как
|
||||||
описание данных**. Гранулярность определяется по самим меткам времени, а не по
|
описание данных**. Гранулярность определяется по самим меткам времени, а не по
|
||||||
`aggregation`. Для самоописания (шаг 5) шаг метрики нужно выводить из данных —
|
`aggregation`. Для самоописания шаг метрики нужно выводить из данных —
|
||||||
как и всё остальное.
|
как и всё остальное.
|
||||||
|
|
||||||
## 14. Две автоматизации с одним набором метрик дают дубликат
|
## 14. Две автоматизации с одним набором метрик дают дубликат
|
||||||
@@ -406,7 +406,7 @@ heartRateRecovery массив 13 точек [date, Min, Avg, Max, u
|
|||||||
появились данные, добавились `mindful_minutes` и `walking_heart_rate_average`.
|
появились данные, добавились `mindful_minutes` и `walking_heart_rate_average`.
|
||||||
|
|
||||||
Каталог метрик растёт по факту поступления данных. Это подтверждает выбор
|
Каталог метрик растёт по факту поступления данных. Это подтверждает выбор
|
||||||
обобщённой модели хранения и выводимых схем (шаг 5): фиксированный список
|
обобщённой модели хранения и выводимых схем: фиксированный список
|
||||||
метрик в коде устарел бы в тот же день.
|
метрик в коде устарел бы в тот же день.
|
||||||
|
|
||||||
## 18. Пустой пакет не отправляется
|
## 18. Пустой пакет не отправляется
|
||||||
@@ -567,7 +567,7 @@ basal_energy_burned 3600 точек в час = 86 400 в сутки
|
|||||||
напишет обычный пробел и получит пустой ответ без всякой ошибки. То же
|
напишет обычный пробел и получит пустой ответ без всякой ошибки. То же
|
||||||
касается составных значений: `"Apple Watch Ultra 3|iPhone (Anton)"`.
|
касается составных значений: `"Apple Watch Ultra 3|iPhone (Anton)"`.
|
||||||
|
|
||||||
**Следствие:** в самоописании (шаг 5) значения-примеры нужно отдавать так,
|
**Следствие:** в самоописании значения-примеры нужно отдавать так,
|
||||||
чтобы невидимые символы были заметны, а в read API фильтр по источнику — либо
|
чтобы невидимые символы были заметны, а в read API фильтр по источнику — либо
|
||||||
не делать, либо нормализовать пробелы на входе и хранить оба варианта.
|
не делать, либо нормализовать пробелы на входе и хранить оба варианта.
|
||||||
Значение при этом храним дословно, как и всё остальное.
|
Значение при этом храним дословно, как и всё остальное.
|
||||||
@@ -815,7 +815,7 @@ active_energy 22:06:32 0.0074754192155406605 против 0.007475419215
|
|||||||
дубликатов при идентичности по содержимому. Ключ по координатам
|
дубликатов при идентичности по содержимому. Ключ по координатам
|
||||||
(`метрика + date + source`) с перезаписью значений эту проблему снимает и
|
(`метрика + date + source`) с перезаписью значений эту проблему снимает и
|
||||||
заодно сохраняет эпизоды сна (они различаются `start`/`end`) — стоит
|
заодно сохраняет эпизоды сна (они различаются `start`/`end`) — стоит
|
||||||
вернуться к развилке находки 11 при реализации шага 3.
|
вернуться к развилке находки 11 при реализации разбора.
|
||||||
|
|
||||||
## 31. Вся мета-информация о выгрузке — в заголовках, и она полуправдива
|
## 31. Вся мета-информация о выгрузке — в заголовках, и она полуправдива
|
||||||
|
|
||||||
@@ -891,7 +891,7 @@ User-Agent Auto%20Export/20260729.1 CFNetwork/3860.700.1 Darw
|
|||||||
`Auto%20Export/20260729.1` — датированный номер сборки, плюс версия системы
|
`Auto%20Export/20260729.1` — датированный номер сборки, плюс версия системы
|
||||||
(`Darwin/25.6.0`). Это закрывает вопрос, который висел с самого начала: формат
|
(`Darwin/25.6.0`). Это закрывает вопрос, который висел с самого начала: формат
|
||||||
данных может измениться только с обновлением Health Auto Export, и теперь
|
данных может измениться только с обновлением Health Auto Export, и теперь
|
||||||
**обновление видно в каждой доставке**. Значит выведенные схемы (шаг 5) можно
|
**обновление видно в каждой доставке**. Значит выведенные схемы можно
|
||||||
сверять по версии: изменилась версия — стоит перепроверить формы точек.
|
сверять по версии: изменилась версия — стоит перепроверить формы точек.
|
||||||
|
|
||||||
Версию стоит сохранять отдельной колонкой рядом с доставкой, а не только внутри
|
Версию стоит сохранять отдельной колонкой рядом с доставкой, а не только внутри
|
||||||
@@ -1049,7 +1049,7 @@ BasalEnergyBurned: 564 записи, интервал: медиана 10с, м
|
|||||||
`export_cda.xml` на 1,1 ГБ), архив целиком 104 МБ. Имя файла **локализовано** —
|
`export_cda.xml` на 1,1 ГБ), архив целиком 104 МБ. Имя файла **локализовано** —
|
||||||
`экспорт.xml`, а не `export.xml`: захардкодить нельзя.
|
`экспорт.xml`, а не `export.xml`: захардкодить нельзя.
|
||||||
|
|
||||||
Значит `healthlog import` из шага 6 — это не «те же JSON, только из файла», а
|
Значит `healthlog import` — это не «те же JSON, только из файла», а
|
||||||
отдельный парсер XML со своей моделью записи. Зато он даёт слой, которого HAE
|
отдельный парсер XML со своей моделью записи. Зато он даёт слой, которого HAE
|
||||||
не отдаёт ни в каком режиме.
|
не отдаёт ни в каком режиме.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user