docs: документация приведена к канону av-dev-pm 4
- каждая запись каталога задач получила тип вместо тега kind: и префикса заголовка; секция роадмапа «Разработка» стала «Сопровождением», порядок секций канонический - поправлены протухшие факты: нереализованные маршруты Read API, MCP и `healthlog import`, словарь слоёв в инварианте, семантика гейта по покрытию диффа, периметр перестал дублировать security.md - замер слияния переведён с находки 49 на находку 54, заполнены Purpose спек storage и parsing
This commit is contained in:
@@ -13,7 +13,7 @@
|
||||
|
||||
Коллектор данных Apple Health. Принимает выгрузки из Health Auto Export и
|
||||
родного экспорта Apple, хранит их и отдаёт другим моим проектам — через HTTP
|
||||
API и через MCP. Это **хранилище, а не аналитика**: принять, дедуплицировать,
|
||||
API и, в планах, через MCP. Это **хранилище, а не аналитика**: принять, дедуплицировать,
|
||||
сохранить, отдать. Не переименовывать поля Apple, не интерпретировать
|
||||
значения. Агрегат считается только в ответе на запрос и только там, где род
|
||||
метрики измерен.
|
||||
@@ -22,7 +22,7 @@ API и через MCP. Это **хранилище, а не аналитика**
|
||||
|
||||
Go, один статический бинарь (`CGO_ENABLED=0`). SQLite (`modernc.org/sqlite`,
|
||||
чистый Go), `chi`, `sqlx`, `goose` (миграции), `pelletier/go-toml/v2`,
|
||||
`log/slog`, ULID через `internal/ident`.
|
||||
`log/slog`, ULID (`github.com/oklog/ulid/v2`) через `internal/ident`.
|
||||
|
||||
Module path — `git.vakhrushev.me/av/healthlog`.
|
||||
|
||||
@@ -65,8 +65,10 @@ Module path — `git.vakhrushev.me/av/healthlog`.
|
||||
образ жизни» на языке телефона, а родной экспорт — коды HealthKit, и без
|
||||
словаря эти два источника не сойтись.
|
||||
- **Своей агрегации в хранении нет — есть слои.** `critical`, обратимо
|
||||
пересборкой. Метрика лежит в той подробности, в какой пришла (`sample`/`raw`/`minute`/`hour`); слой выводится
|
||||
из выравнивания меток, а не из заголовка HAE — тот врёт.
|
||||
пересборкой. Метрика лежит в той подробности, в какой пришла
|
||||
(`sample`/`raw`/`minute`/`hour`/`day`); слой выводится
|
||||
из выравнивания меток, а не из заголовка HAE — тот врёт. Перечень слоёв один и
|
||||
лежит в [docs/database.md](docs/database.md), таблица `bucket`.
|
||||
- **Агрегация в ответе — только измеренная.** `critical`, обратимо: ответ не
|
||||
хранится, но потребитель уже принял по нему решение. Род свёртки выводится
|
||||
сверкой слоёв между собой (часовое = сумма минутных → накопительная, = среднее →
|
||||
@@ -110,9 +112,12 @@ Module path — `git.vakhrushev.me/av/healthlog`.
|
||||
- **Исходы:** 0 — зелёный; ненулевой — красный, и до его починки опиниативные
|
||||
проходы ревью **не запускаются**.
|
||||
- **Что красит безусловно:** любой файл из `./data` в индексе, любой токен в
|
||||
индексе, непокрытая изменённая строка, миграция без правки `docs/database.md`.
|
||||
Причина одна на все: это ровно те отказы, которые не видны глазами и стоят
|
||||
необратимо.
|
||||
индексе, миграция без правки `docs/database.md`. Причина одна на все: это
|
||||
ровно те отказы, которые не видны глазами и стоят необратимо. Покрытие
|
||||
изменённых строк задумано тем же классом, но сегодня гейт от него **не
|
||||
краснеет**: `scripts/diff-coverage.py` всегда возвращает `0`, и шаг печатает
|
||||
`OK` при любом покрытии — разбор непокрытых строк остаётся человеку или
|
||||
проходу ревью. Запись 2026-08-04 в [docs/review.md](docs/review.md).
|
||||
- **Чего в гейте намеренно нет и кто обязан это гонять:**
|
||||
`task verify:archive` (минута прогона, данные есть только на этой машине) и
|
||||
`task verify:busy` (около 50 секунд). Гоняет их **человек или оркестратор задачи**
|
||||
|
||||
Reference in New Issue
Block a user