0781b1be8c
Находка М-405, правила 242-243. Смена 26 назвала четыре разъезда (правило 239: обёртка есть, а работа идёт мимо). Проверил каждый замером — НАСТОЯЩИЙ ОДИН, три ложные тревоги. Ровно та же доля, что и в разборе 33 долгов: список, собранный беглым взглядом под верным правилом, оказался наполовину чужим. - `readEvents` — ❌ обвинённые делают ДРУГУЮ работу: судья ленту вовсе не читает (только проверяет, есть ли файл), а `zhiv-li-progon.mjs` разбирает её своим путём НАРОЧНО — `readLines` порванную строку глотает молча, а ему она обязана значить «неизвестно». Свёл бы «как велено» — сломал бы нарочную защиту; - `vorotaVetkiNochi` — ✅ настоящий, закрыт этим коммитом; - `schyotZovushchih` — ❌ общее уже вынесено в `tolkoKod`+`zovyImeni`, обе дороги через него; - читалки `schyot-zamerov.mjs` — ❌ живой дороге нужны порванные строки, читалкам нет. ЧТО ПОЧИНЕНО. `sverkaNastroek` делала «спросить хранилище и разобрать ответ» своими руками — тем же телом, что лежит внутри ворот `vorotaVetkiNochi`. Дороги уже начали расходиться МОЛЧА: у ворот умолчание «спрашивать каждый раз», у сверки — «помнить ответ на заход». Сегодня это не видно ничем, потому что сверка всегда передаёт свой `sprosit` явно, — но поправь кто-нибудь ворота, и починка до живой дороги не доехала бы. Доказано вырезанием: разъезд возвращён — краснеет ровно одна, посчитал ДО прогона, сошлось. Страховка починки отдельной проверкой: ворота и прежняя прямая пара отвечают одинаково на обоих исходах, включая бросок хранилища, — поведение не изменилось ни на знак. 🔴 ГЛАВНОЕ, ЧТО КУПИЛА СМЕНА, И КУПЛЕНО ЭТО СВОЕЙ ОШИБКОЙ. Замер нашёл рядом пятый разъезд на вид настоящий: имя ленты `events.jsonl` написано РУКАМИ в трёх местах, хотя обёртка `eventsPath` заведена ровно затем, чтобы оно жило в одном. Свёл — и полный прогон дал две красных, ОБЕ У ЧУЖОГО СТОРОЖА, ни одной у моего. `nadziratel-obyavlyaetsya-a-pribor-chitaet.test.mjs` (сеть 3) требует ПРОТИВОПОЛОЖНОГО: путь к журналу не берёт себе никто, кроме дома ленты, — потому что взявший однажды начнёт в журнал ПИСАТЬ мимо единственной пишущей руки `logEvent`, и сети, считающие её зовы, ослепнут молча. А от них зависит, не запустят ли второй прогон на те же файлы. Разъезд же имён он закрывает не сведением, а СВЕРКОЙ: читает оба написания и краснеет, если разошлись. ⇒ Беда, которую я шёл закрывать, была уже закрыта — другим способом, которого я не увидел. Откачено целиком, чужого сторожа не тронул ни знаком, своего убрал и оставил на его месте записку следующей смене, чтобы она не потеряла тот же час. 242. КРАСНОЕ НА ЧУЖОМ СТОРОЖЕ ПОСЛЕ ТВОЕЙ ПРАВКИ — НЕ ПОМЕХА, А ОТВЕТ: место, которое ты счёл беззащитным, охраняется, и не так, как ты собирался его чинить. 243. У СПИСКА, СОБРАННОГО ПОД СВЕЖИМ ПРАВИЛОМ, ПРОВЕРЬ КАЖДУЮ СТРОКУ ОТДЕЛЬНО: правило проверяют мыслью, список — замером, и это две разные работы. ПОПУТНО: два реза сведены в один дом. `bezPrimechaniy` перенесён к грубому `tolkoKod` с развилкой «какой брать». Врозь они и стоили смене 26 сторожа, который физически не мог покраснеть: искала команду, живущую строкой, а взяла рез, который строки режет (правило 234). 🪤 Мелочь, стоившая ложной тревоги: копия утренней бумаги помечена временем МИРОВЫМ (`toISOString`), а часы на машине московские. Разница три часа — и след моего же прогона выглядел работой чужой смены, пришедшей после конца предыдущей. Проверок 2927 в 108 файлах (было 2924 в 107), ноль красных, код 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>