d08925f06c
Круг 2 закрыт. Дверь у мешка полей построена и проверена, дорога номера менеджера доведена до последней доски. Счётчик не двигаю: вторая половина З-0.6 — отчёт робота о результате — по-прежнему не построена. Свои ошибки называю первыми, их две. Восемьдесят седьмая. Я четырежды записал число «проба 131, красных 0» как свойство кода, в том числе в сообщение прошлого коммита. Помощник сказал, что проба мигает. Перемерил своей рукой: два красных из двадцати заходов. Значит это была удача броска, а не замер. Причина внутри самой пробы: она меряет надёжность порогом, а порог на живой машине лотерея. Восемьдесят восьмая. Мой нож объявил новую дверь дырявой, двенадцать красных. Пошёл проверять прибор прежде, чем обвинять код, и оказалось: дверь не роняет ошибку, а возвращает причину словами, а нож ловил только падение. Красноту навёл я сам. И вторую половину той же ошибки вскрыл судья: мой нож звал часть, которая возвращает слова, а в дело идёт часть, которая обязана отказать в работе. Замерил, подменив падение обрубком: нож на слова остался зелёным семнадцать из семнадцати, слеп полностью; нож на отказ поймал шесть красных из двенадцати. Отсюда правило 51: проверяй не что защита скажет, а что она сделает. Что построено. У свободного мешка полей, которым портал говорит роботу что ещё сказать, теперь есть одна дверь на любое поле, и стоит она внутри самой сборки просьбы к телефонной станции. Судит свойством, а не списком: границу строки называет сам Python, разряд знака — таблица Unicode. Своего перечня плохих знаков в ней нет нигде. Мои ножи, три на этот круг, все зовут настоящий код побайтовой копии: Нож на дверь — 17 проверок, красных 0, показан красным 10 из 17. Отбиты десять знаков, которых не называл ни помощник, ни я, и отравленное имя поля тоже. Нож на отказ — 12 проверок, красных 0, показан красным 6 из 12. Заведён после указания судьи, закрывает мою же дыру. Нож на уборку — 4 проверки, красных 0, показан красным 1 из 4. Гонял настоящий набор в никуда: станция отказала, журнал сам сказал «снято ячеек 2», папка пуста, общий запасной файл цел. Вторая находка судьи, и она про живых людей. Дверь для входа на станцию встала позже, чем запись на диск: имя человека и номер менеджера ложились в общую папку до того, как выяснится, что звонка не будет, и ни один из девяти выходов «звонка не было» их не убирал. При сломанной настройке машины каждая попытка клала их снова. Закрыто: у записи и у отказа теперь один хозяин, и проглядеть новый десятый выход нельзя — другого пути наружу у набора нет. Помощник назвал свою ошибку первым: правил файл пробы через оболочку, что задание запрещает прямым текстом. И нашёл второе место того же класса, о котором я не сказал: отравить просьбу можно вообще без портала, часть настроек робот берёт из окружения своей машины и они не проверялись ничем. Замеры моей рукой: полный прогон 5454 проверки, 5450 зелёных, 4 пропущено, красных 0. Вход был 5444 — ровно плюс десять, его десять сторожей. Пробы робота 324, 58, 38, 121, красных 0. Чего писать в бумагах нельзя: что дверь отбивает всё опасное. Незанятые места таблицы знаков она пропускает намеренно, и что с ними сделает ствол оператора, не знает никто.