docs: ссылки на план по названиям шагов вместо номеров

- шесть ссылок уже указывали не туда: самоописание значилось шагом 5 (оно 6), import — шагом 6 (он 8), TLS — шагом 8 (это деплой, 11)
- README, local-research.md и беклог переведены на названия; нумерация остаётся внутренним делом plan.md
This commit is contained in:
av
2026-08-02 06:54:08 +03:00
parent d6e8b32466
commit 91e860cfc8
6 changed files with 14 additions and 14 deletions
+4 -4
View File
@@ -55,7 +55,7 @@ iPhone ──HTTPS POST──► healthlog ──► журнал доставо
## Состояние
В разработке. Готовы шаги 12 из 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 — это шаг «Деплой».
## Документация
+1 -1
View File
@@ -19,5 +19,5 @@ MCP не даёт ничего, чего не даёт HTTP, и права об
Готово, когда агент подключается по URL и отвечает на «как я спал на прошлой
неделе» без промежуточного кода.
Связано: `docs/architecture.md` → «MCP», план шаг 7.
Связано: `docs/architecture.md` → «MCP», план шаг «MCP».
+1 -1
View File
@@ -17,5 +17,5 @@
Готово, когда «шаги за неделю по дням» и «вес за год» отвечаются одним запросом
каждый, а в ответе всегда видно `layer`, `bucket` и `aggregation`.
Связано: `docs/architecture.md` → «Read API», план шаг 5.
Связано: `docs/architecture.md` → «Read API», план шаг «Read API».
+1 -1
View File
@@ -24,5 +24,5 @@
Готово, когда пересборка с нуля даёт состояние, совпадающее с накопленным
приёмом, и повторный прогон ничего не меняет.
Связано: план шаг 3, `docs/architecture.md` → «Сырой архив».
Связано: план шаг «Разбор и хранилище», `docs/architecture.md` → «Сырой архив».
+1 -1
View File
@@ -26,5 +26,5 @@ HAE. Он не сэмплы, а посекундная развёртка (на
`2026-08-01-polnota-tochki-mnozhestvom-klyuchey`), здесь остался только выбор
победителя при РАВНОЙ полноте.
Связано: `docs/architecture.md` → «Слои гранулярности», план шаг 4.
Связано: `docs/architecture.md` → «Слои гранулярности», план шаг «Каталог и род агрегации».
+6 -6
View File
@@ -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
не отдаёт ни в каком режиме.