← все записи

У каждой проверки своя слепая зона

29 августа 2026, 01:00

Вечер продолжил разбор экранов, и почти всё интересное случилось не в продукте, а в инструментах, которыми я его проверяю. Три случая подряд, и все три — про одно.

Проверка покраснела на правильном тексте

Меняли квоту: было пять одновременно живых сообщений и восемь публикаций за 64 минуты, стало четыре и четыре за час. Числа живут в девяти документах — спека, две схемы потоков, таблица пределов протокола, карта тестов, тексты отказов, механика двух витрин, четыре экрана. Поправил везде, запускаю проверку формулировок — красная.

Причём красная ровно на новом, верном тексте. Потому что двумя днями раньше в реестре отменённых формулировок появилось правило: «не более 4 живых» — отменено, теперь пять. Тогда это было честно: спека говорила четыре, витрины пять, свели к пяти. Сегодня решение развернули обратно — и правило, стерёгшее старую ошибку, стало стеречь новую истину.

Первая мысль была «инструмент мешает». Мысль неверная. Инструмент сделал ровно то, зачем нужен: не дал молча вернуть отменённое. Разница между «мы передумали» и «кто-то не заметил правку» видна только человеку, и человек обязан сказать это вслух — снять старое правило и завести обратное. Что я и сделал: теперь реестр стережёт «пять живых» и «8 за 64 минуты».

Мораль, которую стоит унести: проверка, стерегущая решение, живёт ровно столько, сколько живёт решение. Если её нельзя снять — она не проверка, а бетон.

Проверка, которая никогда не смотрела половину

Второй случай хуже, потому что там ничего не краснело — никогда.

Есть проверка парности документов: у каждого документа две редакции, русская и английская, и числа в них обязаны совпадать. Дата, срок, размер, версия — если они разошлись, значит перевод отстал или решение записано на одном языке.

Работает отлично. Ловила меня раз пять за неделю.

Сегодня выяснилось, что она не смотрела витрины вовсе. Обход идёт от корня репозитория, а две другие части проекта подключены симлинками — и симлинки скрипт отбрасывает намеренно, чтобы не считать одни и те же пары дважды. Вместе с симлинками отбрасывалась и проверка. Сорок с лишним документов, где, собственно, и описан весь продукт, не сверялись ни разу.

Всю неделю их сверял я. Глазами. Считая себя человеком с автоматической проверкой.

Починка на десять минут: ключ, позволяющий указать другой корень, и обёртка, которая прогоняет три репозитория подряд. 51 пара в одном, 31 и 31 в остальных.

Проверка, печатавшая падение как успех

И сразу третий случай — в той самой обёртке, которую я только что написал.

Она печатала последнюю строку вывода каждой проверки. У зелёной последняя строка — «пар проверено: 31, числа сходятся во всех». У красной последняя строка… пустая. То есть падение выглядело как имя репозитория и тишина. Код возврата был верный, но глазами это читалось как «всё хорошо».

Поймал контролем: подсадил расхождение, посмотрел, что печатается. Не поймал бы — узнал бы через неделю, когда «тишина» стала бы привычным видом успеха.

Теперь при зелёной печатается сводка, при красной — список разошедшихся пар. И да, я снова сломал её нарочно, чтобы посмотреть на красное.

Через двадцать минут это окупилось. Дописывая правку в трёх репозиториях, я вырезал строку из английских редакций и забыл написать туда новые абзацы. Проверка показала: «только в RU: 2026-08-29» и «только в EN: 2026-08-28», по всем трём. Та самая, которая утром печатала падение как успех.

Что у них у всех общего

Слепая зона. У каждой проверки она своя, и её надо знать наизусть.

Реестр формулировок ищет лишнее — отменённые фразы. Он не видит отсутствия: если верную фразу удалить, он промолчит.

Парность ищет разошедшиеся числа — и намеренно игнорирует одно- и двузначные. Иначе «5» против «five» краснело бы вечно. Значит сегодняшняя смена квоты с пяти на четыре для неё невидима: одна цифра. Её ловит реестр — но только потому, что я завёл правило руками.

Двусторонняя проверка правил сообщества, написанная накануне, требует обоих: чтобы отменённого не было и чтобы верное было. Она бы поймала и то и другое — но работает только на одном документе из сорока.

Итого: три инструмента, три разных представления о том, что такое «неправильно». И ни один не покрывает остальных.

Что унести

Знайте, чего ваша проверка не видит. «Зелёная» — это не «правильно», это «правильно в границах того, что она смотрит». Если границы не названы, зелёный цвет — украшение.

Проверка, стерегущая решение, отменяется вместе с решением. Иначе рано или поздно она начнёт защищать вчерашнюю правду от сегодняшней, и кто-то поверит ей, а не себе.

Смотрите не только на код возврата, но и на то, что человек видит. Верный exit 1 с пустым выводом — это провал, который выглядит как успех, и вы узнаете о нём в самый неподходящий момент.

Проверять надо не только присутствие лишнего, но и отсутствие нужного. Первое умеют почти все инструменты, второе — почти никакие, и именно там прячется самое дорогое: удалённое обещание, потерянный абзац, пропавшая гарантия.

← визитка · RSS