- роадмап отвечает «что умеет и чего не умеет»: PLAN.md → ROADMAP.md, четыре канонические секции, достигнутые звенья строками в «Готово», цели переформулированы возможностями приложения - задачи: род работы и «Затрагивает» набору спринта, 34 заголовка в форму действия, «Завершение» целей перечнями со ссылкой из каждой задачи - вычитка проходами task-form и doc-wording, починены протухшие факты в README, паспорте и review.md
50 lines
3.3 KiB
Markdown
50 lines
3.3 KiB
Markdown
# Не отбирать строки в data-миграциях по обрезаемым спискам
|
|
|
|
- **Секция:** Ядро
|
|
- **Зачем:** Миграция 00007 отбирает по uncovered_sections, который обрезается на 32 — следующая покрытая секция унаследует слепую зону
|
|
- **Теги:** goal:journal-and-rebuild
|
|
|
|
Остаток задачи «Дозакрыть находки ревью по слиянию сущностей» (архивный change
|
|
`dozakryt-nahodki-sushchnostej`).
|
|
|
|
Двигает строку «Завершения» цели: «Data-миграции не наследуют слепые зоны обрезаемых списков».
|
|
|
|
## Оракул: механизм доказан, дефект пока пустой
|
|
|
|
Миграция `00007` переводит в `pending` доставки, у которых имя ставшей покрытой
|
|
секции стоит в `uncovered_sections`:
|
|
|
|
```sql
|
|
WHERE EXISTS (SELECT 1 FROM json_each(delivery.uncovered_sections)
|
|
WHERE json_each.value IN ('workouts', 'stateOfMind'))
|
|
```
|
|
|
|
Список `uncovered_sections` обрезается на 32 имени **в порядке встречи**
|
|
(`hae.maxUncovered`, счётчик `UncoveredDropped`). Секция, стоящая в теле после
|
|
тридцати двух незнакомых ключей, в список не попадает — и отбор миграции её не
|
|
найдёт. Оракул жил в `tmp/adv/uncovered_test.go`: тело с 32 ключами `junk` и
|
|
секцией `ecg` за ними даёт список без `ecg`.
|
|
|
|
Для `00007` дефект **пустой**: HAE шлёт одну секцию за доставку
|
|
(`docs/research/apple-health.md`, находка 50), секций восемь, тела с 32 незнакомыми
|
|
ключами в архиве не существует. Но следующая покрытая секция унаследует ту же
|
|
слепую зону, а к тому времени причину никто не вспомнит.
|
|
|
|
## Что делать
|
|
|
|
Записать принцип и выбрать форму отбора:
|
|
|
|
- **Принцип:** data-миграция не отбирает строки по списку, который где-то
|
|
обрезается. Отбирать надо по признаку, который обрезке не подлежит, —
|
|
например «эту доставку смотрел разбор старше версии N».
|
|
- Практическое следствие для существующего кода: `UncoveredDropped > 0` обязан
|
|
означать безусловное пересворачивание — доставка, у которой список обрезан,
|
|
про своё покрытие ничего достоверного не говорит.
|
|
- Кандидат в `docs/conventions/README.md` (раздел про миграции), если форма отбора
|
|
окажется общей.
|
|
|
|
## Связано
|
|
|
|
- [Проверка секций, которых поток ещё не приносил](unseen-sections-check.md) —
|
|
именно она следующей сделает секцию покрытой и напишет такую миграцию.
|