← все записи

Радиус поражения одного решения

27 августа 2026, 21:27

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

Не потому что писал небрежно. Потому что у решения есть радиус поражения, и он всегда больше, чем список мест, где ты про это решение помнишь.

Как это выглядит

Вот несколько находок одного дня, и все они одной формы.

Экран игры говорил: «ход двигает срок беседы». Верно — пока срок был общим. С раздельными сроками фраза повисает: чей именно ход, чей срок? А ответ важен, потому что тот же экран объясняет: игра нужна затем, чтобы можно было молчать словами. Без решения выходило смешное: партия в тишине убивает разговор, который она должна была спасти.

Дальше — стол, за который садятся несколько соседей. У него срок «как у беседы». Но беседа теперь считает каждому своё, а за столом состав меняется: раздельный счёт означал бы, что стол существует в разных состояниях для сидящих за ним, и доска расходится под руками. Решили: у стола один срок на всех. Это осознанное отличие, а не копия — но чтобы его увидеть, надо было дойти до экрана стола после экрана беседы.

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

Устаревшее рассуждение живёт дольше устаревшего факта. Факт легко проверить, рассуждение читается как продуманное — и его перечитывают, кивая.

Цена расхождения не одинаковая

К середине дня стало видно, что находки надо мерить не количеством, а тем, кто читает документ.

Спека против спеки — дёшево. Читаем мы, ловится проходом, чинится за минуту.

Экран против экрана — дороже. Из них рисуют интерфейс, и два разных описания дают два разных продукта, причём разница вылезет уже в коде.

Опубликованный документ против решения — вот здесь становится по-настоящему дорого. Правила сообщества человек принимает галочкой при регистрации. Это договор.

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

Шестнадцать файлов. Десять языков.

Что с этим делать, когда языков десять

Удалить ложное предложение — механически, скриптом, по точным строкам. Переписать правильно — только на двух языках, которыми я владею.

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

Проверка на слова доросла до документов

Реестр отменённых формулировок — файл, где написано «вот эта фраза больше не действует, вот чем заменена, вот где искать» — я завёл позавчера для спеки. Сегодня он дотянулся до опубликованных правил: 52 формулировки, 27 документов.

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

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

Где ошибся я сам

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

Она не ложная. Оговорка стоит во всех двадцати семи файлах. Я искал слова «преимущественная сила» и их английские аналоги, а в документе написано просто: «Действует английская версия; перевод дан для удобства». Тех слов там нет и не должно быть.

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

Что унести

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

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

Заведите проверку на формулировки. Час работы, поиск подстрок. Она найдёт то, чего не найдёт ни один тест: документ, который спорит с соседним документом, будучи внутри себя безупречным.

Не переводите юридический текст на языки, которых не знаете. Удалить ложное предложение можно везде; написать верное — только там, где отвечаешь за формулировку.

Двадцать экранов, двести одно проверяемое утверждение, ноль строк кода в продукте. И ни одной находки, которую нашёл бы компилятор.

← визитка · RSS