⌂ все дашборды/Правила и канон← Coverage-Map · Hook-Canon-Lag →

Гейт судил слово, а не дело — класс закрыт

хаб A-2022BAYAREA · сессия auto-hub-260822-repair-gate-substring-not-action · 22 августа 2026, вечер
9строк класса в журнале
05.08 – 21.08
3/3ложных блока из журнала
теперь проходят
5тихих пропусков закрыто
(нашла панель, 2 раунда)
31+6кейсов в двух тестах
4 мутанта убиты
6машин получили посылку

Что болело (простыми словами)

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

Корень серии (5 почему по 9 строкам, не по последнему случаю)

Каждый гейт нёс свою копию вопроса «запускает или упоминает». Каждую копию латали отдельно — и класс просто перебегал на тот гейт, который ещё не залатали. Корень: не было единого ответа «что команда реально исполняет».
Единый ответ — ~/.claude/scripts/_shared/cmd_action.py — построен 20.08 и ужесточён панелью 21.08. Эта сессия доказала, что он закрывает серию, и зашила последнюю незашитую деталь.

Замер: три названных в журнале ложных блока — живой прогон на хабе

Случай из журналаЧто это на самом делеБылоСтало
20.08 · python-heredoc с мемозапись файлаБЛОКпроходит
21.08 · семь карточек CRMзапись файлаБЛОКпроходит
14.08 · дозапись строки в журналзапись файлаБЛОКпроходит
настоящий запуск сессиизапускБЛОКБЛОК
19.08 · правка файла с именем рутиныправкаБЛОКпроходит
20.08 · греп по файлу рутинычтениеБЛОКпроходит
настоящий запуск рутинызапускБЛОКБЛОК

Что починено сегодня

ДетальЧто былоЧто сталоУлика
hooks/av_spawn_guard.py судил подстроку: запись заметки и настоящий вызов давали один вердикт. Дыра дремала — на хабе нет Касперского, гейт уходит в stand down спрашивает у общего разбора cmd_action; разбор не удался → блок (fail-closed) мутант старой логики = красный тест
он же, ветка тихих пропусков мимо гейта шли настоящие запуски: powershell -c "schtasks /create", абсолютный путь, путь в кавычках закрыты разбором действия; /query и /run по-прежнему свободны нашла панель ломателей 3/3 за 38с, все три воспроизведены живьём
scripts/registry_dispatch.py лепил taskId с кириллицей, а приёмник spawn_slot_guard берёт только латиницу → сессия не поднималась никогда, очередь считалась поставленной транслит из единого источника имён auto_session_name.slugify тест импортирует регекс у самого потребителя; мутант = 4 красных
Сегодня это ударило по самой сессии починки: диспетчер поднимал её руками под ASCII-именем.

Честные границы (названы вслух, не заметены)

Что не закрытоПочему так решено
start /b schtasks /create — общий разбор видит только start чинить надо в cmd_action, а не копией в гейте. Строка 1/3 в журнале поломок; по правилу третьей поломки механизм пока не строю
PowerShell-командлеты (New-ScheduledTaskAction) остались на текстовом якоре cmd_action разбирает шелл, а не PowerShell: снятие блока по нему дало бы пропуск настоящего вызова. Тест поймал это сразу
Два разных имени задачи могут дать один taskId после транслита поведение не новое, ни одного датированного случая нет; выдумывать поломку заранее не буду

Раскатка на флот

Посылка substr-gate-action-20260822 зарегистрирована на 6 машин (хаб, Маяк, MacBook-Anton, MacBook-Ruslana, MyOwnPC-Natalia, ZBOOKG8). Файлы едут синком (hooks/** и scripts/**/*.py в шаре), шаг посылки — прогнать два теста: красный тест на узле = там ещё старая версия файла.
Важно: все девять поломок класса случились на Mac16, а чинилось на хабе — поэтому проверка идёт по узлам, а не по хабу.

Ворота качества

ПроверкаРезультат
_test_av_spawn_guard.py31/31 · три мутанта убиты
_test_dispatch_taskid_ascii.py6/6 · мутант убит (4 красных)
_test_blackbox_guard.py41/41
_test_gates_substring_regression.py19/19
_test_maintenance_gate_action.py / _body.py40/40 · 33/33
substr_lint.py по изменённым файламчисто
панель ломателей /secondop t3раунд 1 BLOCK → 3 находки закрыты · раунд 2 COUNTER → из 4 находок 2 реальны (дефисный ключ -create, имя задачи со словом create) и закрыты, 2 опровергнуты зелёными тестами