9b66c7cd71
Приёмка нашла три дыры, все в сторожах, а не в коде. Код не тронут ни одной строкой: сверено пустым git diff по всем моим файлам. Дыра 1 — срок можно было зашить в код, и никто бы не заметил. Прежний сторож проверял, что строки настроек ЗАВЕДЕНЫ, а не что их ЧИТАЮТ. Заведены два сторожа поведения: настройка, отличная от умолчания, обязана менять судьбу записи. У материалов клиента этой дыры нет — чистка там настроек не читает, а читатель настроек накрыт чужим сторожем круга З-2.3, проверено тем же ножом. Дыра 2 — повторный запуск. Два сторожа: второй заход не падает, строку не переписывает и не дописывает в журнал ПДн лишнюю запись об уже стёртом. Половина сторожа, сравнивавшая столбцы, обманывалась одной секундой — добавлен ctid, прибор «трогали ли строку вообще». Дыра 3 — объём. Мерка построена другая, чем просила приёмка, и в отчёте объяснено почему: запросы обязаны расти с числом строк, иначе придётся отказаться от правила «не стёрся файл — строку не трогаем». Ловим лишний запрос в переборе: цена строки прибита к четырём и обязана совпадать на двух объёмах. Плюс сторож на потолок за заход — его не было вовсе, а именно он защищает ночь от полумиллиона просроченных строк. Полный прогон: 4992 на входе, 4998 на выходе, красных ноль.