5d7ebb2751
Обход хозяйства правилом 258 («у защиты спроси, сколько у неё тел»), по слову владельца. 🔴 ЗАМЕР ПО ВСЕМУ ХОЗЯЙСТВУ: рабочих папок ДВАДЦАТЬ ТРИ, у каждой своё тело каждой защиты. Сличены четыре: сторож боевой базы, указатель на живую базу, предкоммитные сторожа, настройки. | защита | тел | вердикт | | сторож `prod-db-guard.mjs` | 3 | 🔴 13 папок на САМОМ ПЕРВОМ теле, включая ветку `main` | | указатель `prod-db-pointer.mjs` | 2 | 🔴 врал дважды (см. ниже) | | предкоммитные `lefthook.yml` | 5 | 🟢 набор сторожей одинаков везде (21 штука), различия в мелочах | | настройки `.claude/settings.json` | 2 | 🟢 второе — нарочно своё у работников ночи | 🔴 ЛОЖНАЯ ТРЕВОГА, СНЯТАЯ ЗАМЕРОМ, — НАЗЫВАЮ ЧЕСТНО. У девяти папок (углы работников ночи) в настройках сторожа боевой базы НЕТ ВОВСЕ. Выглядело страшно. Замерил: `.env` работника указывает на СВОЮ местную базу (`night_r_..._w_1` на 127.0.0.1), а в его белом списке команд нет ни `psql`, ни `dropdb`, ни `yc`, ни `curl`, ни `ssh` — дотянуться до боевой ему нечем. Живого вреда нет. Тонкая стенка одна: `.env` работник править может, но боевую связь взять неоткуда — чтение соседних папок ему запрещено. 🔴 ГЛАВНАЯ НАХОДКА: ПОДСКАЗКА, КОТОРУЮ СЕССИЯ ЧИТАЕТ ПЕРВОЙ, ВРАЛА ПРО ЗАЩИТУ. Хук `prod-db-pointer.mjs` печатает в начале каждой сессии, что именно ловит сторож. Он отстал: 1. называл ПЯТЬ приёмов сноса, а сторож ловит ШЕСТЬ (не назван снос средствами приложения); 2. хуже — прямо обещал: «ЧЕГО ХУК НЕ ЛОВИТ — на это не полагаться: снос по связи, где имя базы не названо». А сторож это ловит с 07.08. 🔑 ВТОРАЯ ЛОЖЬ ХУЖЕ МОЛЧАНИЯ. Смена, прочитав «на это не полагаться», либо сочтёт такой снос допустимым, либо, упёршись в неожиданный отказ, пойдёт искать обход там, где обхода уже нет. У знания о защите оказалось ДВА ТЕЛА — сам сторож и рассказ о нём, — и второе отстало молча. Правило 254 и правило 258 сходятся здесь в одной точке. СДЕЛАНО: · подсказка вылечена (шестой приём назван, обещание пропуска заменено объяснением, как писать цель словами, и честной ценой строгости); · заведён сторож «подсказка не отстаёт от сторожа»: оба хука зовутся ЖИВЬЁМ (правило 246) — сторожу дают команду и смотрят, остановит ли; у подсказки берут ровно тот текст, который увидит смена. Читать исходники вместо запуска значило бы зеленеть от примечаний (244); · вчерашний сторож «одно тело» расширен с ОДНОГО хука на ОБА: правило 258 спрашивает про КЛАСС защит, а не про тот файл, на котором беду поймали. Сам же на этом и попался — завёл сторожа на сторожа и забыл про указатель; · подсказка в ГЛАВНОЙ папке тоже заменена свежей (не коммичу — чужая ветка). ПРИЁМКА ВЫРЕЗАНИЕМ, ТРИЖДЫ, И КАЖДЫЙ РАЗ СЧЁТ СОШЁЛСЯ (М-394): · до починки ждал 2 красных — вышло ровно 2; · вернул врущую строку в подсказку: ждал 1 — вышла ровно 1, с цитатой строки целиком; · рассогласовал тела указателя: ждал 1 — вышла ровно 1. 🪤 ТРИ СВОИ ОШИБКИ, КАЖДУЮ ПОЙМАЛ ЧУЖОЙ СТОРОЖ ИЛИ ЗАМЕР: 1. первый вид датчика ПОКРАСНЕЛ НА ВЕРНОМ ТЕКСТЕ — искал слова `PGDATABASE`/`pgpass` сами по себе, а правильное объяснение их законно упоминает. Правил ПРОВЕРКУ, а не текст под неё; 2. не внёс новую проверку в поимённый список тех, кому живой запуск разрешён, — сторож поймал и назвал причину; 3. набрал СВОЁ число предела времени (`60_000`) вместо общего `PREDEL_ZHIVOGO_ZAPUSKA` — сторож покраснел словами «через полгода его никто не сможет объяснить». Он прав. 4. в счёте проверок ошибся в арифметике: назвал 2987 вместо 2982, посчитав расширение прибора с 5 проверок до 7 как +7, а не как +2. 🪤 Чужой прибор `platnyy-zamer-tolko-cherez-schyot` покраснел по истёкшему сроку в двух прогонах из шести. Замерено: в одиночку он тратит 2,2 с из пяти — запас двукратный, под полной нагрузкой 112 файлов проедается. Вдвоём с моим новым файлом — зелено, значит дело не в нём. Плавающая беда от загрузки; перемер закрыл. Прогон: 2982 проверки в 112 файлах (было 2978 в 111), код 0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>