docs: документация переведена на канон av-dev-pm 3
- роадмап отвечает «что умеет и чего не умеет»: PLAN.md → ROADMAP.md, четыре канонические секции, достигнутые звенья строками в «Готово», цели переформулированы возможностями приложения - задачи: род работы и «Затрагивает» набору спринта, 34 заголовка в форму действия, «Завершение» целей перечнями со ссылкой из каждой задачи - вычитка проходами task-form и doc-wording, починены протухшие факты в README, паспорте и review.md
This commit is contained in:
+17
-13
@@ -1,8 +1,8 @@
|
||||
# Паспорт проекта
|
||||
|
||||
Куда мы идём, как выглядит работа проекта в жизни и у кого подсматривать,
|
||||
когда упёрлись. Самый верхний документ: [tasks/PLAN.md](tasks/PLAN.md) отвечает «в каком
|
||||
порядке», [architecture.md](architecture.md) — «как устроено», паспорт —
|
||||
когда упёрлись. Самый верхний документ: [tasks/ROADMAP.md](tasks/ROADMAP.md) отвечает «что
|
||||
приложение умеет», [architecture.md](architecture.md) — «как устроено», паспорт —
|
||||
**«зачем и для кого»**.
|
||||
|
||||
## Цель
|
||||
@@ -51,23 +51,25 @@
|
||||
|
||||
## Типовые сценарии
|
||||
|
||||
Ситуации, ради которых всё написано. В скобках — шаги [tasks/PLAN.md](tasks/PLAN.md),
|
||||
которыми сценарий закрывается; названы, а не пронумерованы, потому что план
|
||||
живой и нумерация в нём поедет.
|
||||
Ситуации, ради которых всё написано. В скобках — цели [tasks/ROADMAP.md](tasks/ROADMAP.md),
|
||||
которыми сценарий закрывается: достигнутые названы слагом из «Готово», открытые —
|
||||
заголовком цели. Названы, а не пронумерованы, потому что роадмап живой и
|
||||
нумерация в нём сдвинется на первой же вставке.
|
||||
|
||||
**1. Молчаливый приём** (приём, разбор и хранилище). Телефон каждые 5 минут шлёт доставку;
|
||||
**1. Молчаливый приём** (`ingest`, `parsing-and-storage` — сделаны). Телефон каждые 5 минут шлёт доставку;
|
||||
сервис кладёт тело в архив, отвечает `200`, разбирает метрики в часовые
|
||||
объекты. Никто ничего не спрашивает и не смотрит.
|
||||
*Успех:* сутки работы не порождают ни одной строки лога уровня `WARN` и ни
|
||||
одного действия человека.
|
||||
|
||||
**2. Дыра закрывается сама** (разбор и хранилище). Телефон был заблокирован ночью,
|
||||
**2. Дыра закрывается сама** (`parsing-and-storage` — сделано). Телефон был заблокирован ночью,
|
||||
автоматизация не отработала, часть дня отсутствует. Средний проход (сутки) и
|
||||
глубокий (неделя) переприсылают окно целиком, точки доезжают.
|
||||
*Успех:* дыра моложе недели закрывается без вмешательства; никто о ней даже не
|
||||
узнаёт.
|
||||
|
||||
**3. Квартальный экспорт** (`healthlog import`, устаревание нижнего слоя).
|
||||
**3. Квартальный экспорт** (История из родного экспорта Apple лежит в
|
||||
хранилище; Нижний слой чистится после проверенного экспорта).
|
||||
Изредка владелец выгружает
|
||||
родной экспорт Apple Health и скармливает его `healthlog import`. Нижний слой
|
||||
за прошлое становится честным (настоящие сэмплы вместо посекундной развёртки
|
||||
@@ -75,32 +77,34 @@ HAE), а сырой архив получает право быть подчищ
|
||||
*Успех:* экспорт разобран, покрытие периода проверено, объём архива вернулся к
|
||||
норме, ничего не потеряно.
|
||||
|
||||
**4. Агент спрашивает про здоровье** (каталог и род агрегации, Read API, MCP). Агент-медик по MCP
|
||||
**4. Агент спрашивает про здоровье** (`catalog` — сделан; Клиенты читают данные
|
||||
через HTTP и MCP). Агент-медик по MCP
|
||||
спрашивает каталог («что у тебя вообще есть»), затем «шаги по дням за месяц»
|
||||
или «пульс за вчера». Получает свёрнутый ряд с честным указанием слоя, сетки и
|
||||
рода агрегации.
|
||||
*Успех:* ответ влезает в контекст агента, число не завышено вдвое, и агенту не
|
||||
пришлось знать про слои, чтобы спросить правильно.
|
||||
|
||||
**5. Приложение берёт тренировки** (Read API). Разборщик тренировок запрашивает
|
||||
**5. Приложение берёт тренировки** (Клиенты читают данные через HTTP и MCP). Разборщик тренировок запрашивает
|
||||
заголовки за период, потом одну тренировку целиком — с маршрутом и рядом
|
||||
пульса.
|
||||
*Успех:* тренировка отдана одним пакетом в том виде, в каком её прислал Apple,
|
||||
без нашей интерпретации того, что в ней главное.
|
||||
|
||||
**6. Разбор поменялся** (`healthlog reindex`). Мы начали разбирать секцию, которую
|
||||
**6. Разбор поменялся** (`reindex` — сделан). Мы начали разбирать секцию, которую
|
||||
раньше пропускали, или нашли ошибку в старом разборе. Запускается пересборка
|
||||
по сырому архиву: `import(экспорт) + replay(доставки по received_at)`.
|
||||
*Успех:* состояние пересобрано детерминированно, повтор даёт то же самое,
|
||||
доставки со снятым статусом `partial` подобраны.
|
||||
|
||||
**7. Владелец проверяет, жив ли поток** (наблюдаемость). Раз в сколько-то дней —
|
||||
**7. Владелец проверяет, жив ли поток** (Приложение сообщает о своём состоянии). Раз в сколько-то дней —
|
||||
взгляд в `/stats`: когда была последняя доставка, сколько точек, есть ли
|
||||
тишина, какие строки не легли в словарь кодов.
|
||||
*Успех:* один экран отвечает «всё идёт» или «встало тогда-то», без залезания
|
||||
в SQLite.
|
||||
|
||||
**8. Приехало незнакомое** (разбор и хранилище). HAE обновился и прислал новую метрику,
|
||||
**8. Приехало незнакомое** (`parsing-and-storage` — сделано; Новая форма от
|
||||
источника не теряется молча). HAE обновился и прислал новую метрику,
|
||||
новую форму точки или новую секцию. Тело сохраняется, ответ — `200`, разбор
|
||||
честно помечает доставку `partial` и перечисляет непокрытое.
|
||||
*Успех:* данные в архиве и восстановимы, факт виден в логе и `/stats`, а
|
||||
|
||||
Reference in New Issue
Block a user