-- +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;