tasks: разобраны вопросы и набран спринт 2026-08-03
- открытых вопросов не осталось: три решения владельца доведены до берущегося вида, по entity-without-parsed-label принято хранить с NULL-меткой после Read API - unseen-sections-check сжата до остатка — активная проверка появления секции; разбор невиденных секций из неё вынут, вслепую он не пишется - спринт под целью parsing-and-storage: categorical-value-dictionary и unseen-sections-check, обеим написаны критерии приёмки с оракулами
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# Проверка секций, которых поток ещё не приносил
|
||||
# Активная проверка: поток принёс секцию, которой раньше не было
|
||||
|
||||
- **Секция:** ядро
|
||||
- **Зачем:** Симптомы, ЭКГ, лекарства, цикл и вес не виденны живьём — разбор писался вслепую
|
||||
- **Зачем:** Момент появления новой секции фиксируется в базе, но заметить его может только тот, кто догадается заглянуть в колонку
|
||||
- **Теги:** goal:parsing-and-storage
|
||||
|
||||
Разбор пишется по тем данным, что видел поток, а он приносил только `metrics`,
|
||||
@@ -10,11 +10,26 @@
|
||||
агенту-медику нужен наверняка.
|
||||
|
||||
Пользователь настраивает оставшиеся метрики на телефоне, так что данные
|
||||
появятся сами. Задача — не пропустить момент: убедиться, что новые секции
|
||||
разбираются, а не молча падают в `parse_status`.
|
||||
появятся сами. **Задача — не пропустить момент.** Разбор самих секций сюда не
|
||||
входит и входить не может: их формы никто не видел, и вслепую разбор
|
||||
сознательно не пишется. Каждая приехавшая секция станет отдельной задачей —
|
||||
тогда, когда её будет на чём проверить.
|
||||
|
||||
## Что уже сделано
|
||||
|
||||
Разбор перечисляет непокрытые секции и пишет их в `delivery.uncovered_sections`
|
||||
(change `2026-08-01-nerazobrannye-sekcii-dostavki`). Событие **фиксируется** —
|
||||
но ничем не наблюдается: узнать о нём можно только запросом в базу руками.
|
||||
|
||||
Модель под секции с собственным `id` заложена (change
|
||||
`2026-08-02-trenirovki-i-zapisi`): таблица `record` ключуется парой
|
||||
`род + id`, и новая секция добавляется **одной строкой** в множество покрытых
|
||||
имён разбора, а не миграцией.
|
||||
|
||||
## Что известно про сами секции
|
||||
|
||||
Часть вопроса закрыта разбором экспортов (находка 42): в Health эти данные
|
||||
**есть** и в экспорте они присутствуют — `BodyMass` (1127 записей),
|
||||
**есть** и в экспорте присутствуют — `BodyMass` (1127 записей),
|
||||
`BloodPressureSystolic`/`Diastolic` (по 18), `BodyTemperature` (11), `Headache`
|
||||
(36), `SexualActivity` (46), `Dietary*` (по 88). Значит вопрос не «есть ли
|
||||
данные», а «доедут ли они через HAE и в какой форме».
|
||||
@@ -27,21 +42,27 @@
|
||||
экспорте точно, а вот как его отдаёт HAE, неизвестно. Это первое, на что
|
||||
смотреть, когда данные появятся.
|
||||
|
||||
Готово, когда каждая новая секция либо разобрана, либо явно описана в
|
||||
`docs/research/apple-health.md` как не пришедшая, и ни одна не числится в ошибках
|
||||
разбора.
|
||||
## Критерии приёмки
|
||||
|
||||
## Что уже сделано
|
||||
- имя секции, которого разбор раньше не встречал, порождает событие уровня выше
|
||||
рутины — оракул: тест на доставке с выдуманной секцией, в логе ровно одна
|
||||
строка с этим именем
|
||||
- то же имя во второй доставке события больше не порождает — оракул: тот же
|
||||
тест на двух доставках подряд, вторая молчит
|
||||
- список всего, что поток когда-либо приносил и разбор не покрыл, достаётся
|
||||
одной командой, без ручного SQL — оракул: прогон команды на живой базе,
|
||||
вывод сходится с `SELECT DISTINCT` по `delivery.uncovered_sections`
|
||||
- перечень не виденных живьём секций в `docs/research/apple-health.md` сходится
|
||||
с множеством покрытых имён в `internal/hae` — оракул: глазами, сверка двух
|
||||
списков поимённо
|
||||
- повторный прогон живого архива даёт то же состояние — оракул:
|
||||
`task verify:archive`
|
||||
|
||||
Разбор перечисляет непокрытые секции и пишет их в `delivery.uncovered_sections`
|
||||
(change `2026-08-01-nerazobrannye-sekcii-dostavki`). Момент, когда поток принесёт
|
||||
секцию, которой раньше не было, теперь **фиксируется** — остаётся научиться
|
||||
замечать его активно: один `SELECT DISTINCT` по колонке даёт список всего, что
|
||||
поток приносил, и сравнение с известным набором закрывает задачу.
|
||||
## Рамки
|
||||
|
||||
Модель под секции с собственным `id` заложена (change
|
||||
`2026-08-02-trenirovki-i-zapisi`): таблица `record` ключуется парой
|
||||
`род + id`, и новая секция добавляется **одной строкой** в множество покрытых
|
||||
имён разбора, а не миграцией. Покрыты `workouts` и `stateOfMind`; остались
|
||||
`ecg`, `symptoms`, `cycleTracking`, `medications`, `heartRateNotifications` —
|
||||
их формы никто не видел, и разбор вслепую сознательно не писался.
|
||||
Схема не трогается: колонка `uncovered_sections` уже есть. Разбор новых секций
|
||||
не пишется. Данные только читаются; перезапуск сервиса допустим.
|
||||
|
||||
Связано: `docs/architecture.md` → «Неразобранные секции доставки», находки 42,
|
||||
44; идея [monthly-manual-sections-pass](monthly-manual-sections-pass.md) ждёт
|
||||
тех же данных.
|
||||
|
||||
Reference in New Issue
Block a user