- Правило покрытия получило второй разряд (условный, как у точек), запрет вырождения формы и счёт содержательных элементов ряда: скелет из скаляров и ряд из null больше не затирают маршрут. Победитель внутри доставки стал функцией множества версий — общим помощником с точками, — а провенанс поднимается и при совпавшем хеше, иначе отложенная доставка возвращала витрину к прежнему содержимому. - Одно поле не того типа больше не уносит сущность, а пропуски видны в учётной записи доставки (миграция 00008, NULL = «не измерялось»); каноническая форма считается один раз и вне транзакции; откат бинаря поверх новой схемы отказывает на старте; текст ошибки разбора не несёт значений из тела. - Ревью кода профилем deep (девять проходов) нашло две регрессии и обе закрыты: безусловный второй разряд запирал законный досчёт навсегда, а выбор победителя был квадратичен по числу присланных версий одного ключа.
31 lines
2.7 KiB
SQL
31 lines
2.7 KiB
SQL
-- +goose Up
|
|
-- Сколько сущностей с собственным `id` разбор этой доставки пропустил: без
|
|
-- `id`, с непомерно длинным `id`, с неразбираемой меткой времени или не
|
|
-- разобравшихся как объект.
|
|
--
|
|
-- Заводится не ради отчётности. Ретеншен сырого архива решает «что потеряется,
|
|
-- если тело удалить», ПО БАЗЕ, и до этой колонки получал ответ «терять нечего»
|
|
-- ровно там, где потеряна тренировка с маршрутом: сущность в витрину не попала,
|
|
-- список непокрытых секций пуст, статус `parsed`. Лог здесь не годится — он
|
|
-- ротируется, а решение об удалении тела необратимо.
|
|
--
|
|
-- БЕЗ DEFAULT намеренно: NULL означает «этот разбор пропусков не считал», и это
|
|
-- НЕ то же, что ноль. Подстановка нуля объявила бы весь исторический журнал
|
|
-- проверенным — то самое ложное «терять нечего», ради которого колонка и
|
|
-- заводится, только теперь с видом измерения. Читатель, принимающий по
|
|
-- счётчику необратимое решение, обязан трактовать NULL как «не удалять».
|
|
--
|
|
-- Data-миграции при этом нет, и это сказано числом: прогон всех 118 тел живого
|
|
-- архива через разбор даёт `noID=0 noTime=0 malformed=0`, то есть корпус
|
|
-- пропусков не производил и пересворачивать нечего. «Ничего не потерял по
|
|
-- замеру» и «проверено этим разбором» — разные утверждения, поэтому колонка
|
|
-- всё равно остаётся NULL до первой пересвёртки.
|
|
--
|
|
-- Статус разбора от пропуска сущности не зависит: `partial` определён списком
|
|
-- непокрытых секций, и второй источник истины для него завёл бы расхождение
|
|
-- читателей, которое учёт частичного разбора запрещает явно.
|
|
ALTER TABLE delivery ADD COLUMN skipped_entities INTEGER;
|
|
|
|
-- +goose Down
|
|
ALTER TABLE delivery DROP COLUMN skipped_entities;
|