# Data-миграции не отбирают строки по обрезаемым спискам - **Секция:** ядро - **Зачем:** Миграция 00007 отбирает по uncovered_sections, который обрезается на 32 — следующая покрытая секция унаследует слепую зону - **Теги:** goal:journal-and-rebuild Остаток задачи «Дозакрыть находки ревью по слиянию сущностей» (архивный change `dozakryt-nahodki-sushchnostej`). ## Оракул: механизм доказан, дефект пока пустой Миграция `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) — именно она следующей сделает секцию покрытой и напишет такую миграцию.