- каждая запись каталога задач получила тип вместо тега kind: и префикса заголовка; секция роадмапа «Разработка» стала «Сопровождением», порядок секций канонический - поправлены протухшие факты: нереализованные маршруты Read API, MCP и `healthlog import`, словарь слоёв в инварианте, семантика гейта по покрытию диффа, периметр перестал дублировать security.md - замер слияния переведён с находки 49 на находку 54, заполнены Purpose спек storage и parsing
3.4 KiB
🐞 Не отбирать строки в data-миграциях по обрезаемым спискам
- Тип: fix
- Категория: Ядро
- Зачем: Миграция 00007 отбирает по uncovered_sections, который обрезается на 32 — следующая покрытая секция унаследует слепую зону
- Теги: goal:journal-and-rebuild
Остаток задачи «Дозакрыть находки ревью по слиянию сущностей» (архивный change
dozakryt-nahodki-sushchnostej).
Двигает строку «Завершения» цели: «Data-миграции не наследуют слепые зоны обрезаемых списков».
Оракул: механизм доказан, дефект пока пустой
Миграция 00007 переводит в pending доставки, у которых имя ставшей покрытой
секции стоит в uncovered_sections:
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(раздел про миграции), если форма отбора окажется общей.
Связано
- Проверка секций, которых поток ещё не приносил — именно она следующей сделает секцию покрытой и напишет такую миграцию.