Починка класса: «bus_send.py принимает флаги как ТЕКСТ»
Сессия auto-hub-260822-repair-bus-send-flags-as-text · хаб A-2022BAYAREA · 22 августа 2026, вечер · правило третьей поломки (§5.10)
47
задач шины уехало человеком и пропало как работа (июль-август)
3
починки в одном заходе: гейт шины · ASCII-имя сессии · анти-петля журнала
40/40
тест гейтов шины (было 16)
3/3
внешних ломателя ответили, все находки закрыты
0
новых потерь возможно: отказ exit 2 вместо зелёного «OK»
Корень (5 почему по СЕРИИ, не по одному случаю)
| шаг | вопрос | ответ |
| 1 | почему заказ не сделали? | тело начиналось с --subject, а инбокс-робот берёт только тело с TASK: |
| 2 | почему тело начиналось с флага? | _parse склеивал все аргументы после --to X в текст |
| 3 | почему отправка всё равно прошла? | гейт печатал ⚠️, но exit оставался 0 и обе рельсы рапортовали DUAL-SEND OK |
| 4 | почему гейт был мягким? | жёстко блокировался только один узнанный промах («TASK» без двоеточия), остальное — предупреждение |
| 5 · КОРЕНЬ | почему вообще возникает флаг в теле? | интерфейс ПОЛУфлаговый: приняв --to, он учит вызывающего, что флаги тут работают, и молча съедает все остальные. Плюс: предупреждение рядом с зелёным exit проигрывает всегда |
Что стало
| вызов | было | стало |
--to X --subject Y --body Z | exit 0, тело «--subject Y…», задача потеряна | exit 2, ничего не ушло, печатается верная форма |
--to X --priority=high TASK: x | обходил даже первую версию гейта (знак «=») | exit 2 (находка панели) |
--to X " --text ЗАКАЗ" | обходил: ведущий пробел в кавычках | exit 2 (находка панели) |
ALL "- пункт" / "--- разделитель" / "-1 узел" | проходило | проходит — живую прозу гейт не трогает |
--to X -- "--text буквально" | не существовало | POSIX-люк: текст с дефисом уходит как есть |
Доказательства (не «должно работать», а замер)
| проверка | результат |
тест гейтов шины _test_bus_near_miss.py | 40/40 |
| мутация: тот же тест против ДОфиксовой копии | 9 красных из 40 — тест реально что-то держит |
| мутация: против первой версии гейта | 4 красных — находки панели закрыты по-настоящему |
регресс дуал-рельсы test_bus_send_dual_rail.py | 11/11 |
| живая канарейка: реальная отправка на ALL | обе рельсы OK, exit 0 |
| живые отказы обеих новых форм | exit 2, ноль отправок |
| имя сессии починки против гейта-потребителя | 6/6, мутант краснеет 5/6 |
| анти-петля журнала | 2/2, мутант видит 5 «поломок» вместо 2 |
Раскатка на флот
| посылка | узлы | хаб |
bus-send-flag-body-gate-20260822 | 6 (все) | applied, verify машинный |
selfheal-taskid-and-antiloop-20260822 | 6 (все) | applied, verify машинный |
Файлы едут сами: ~/.claude/scripts/*.py внутри синкающейся шары claude-home (проверено по конфигу Syncthing: !/scripts/*.py стоит ПЕРЕД /scripts). Пиры применят посылку своим обычным сметанием; объявление ушло на обе рельсы шины.
Что осталось человеку
Труба заткнута, но хвост из 47 старых сообщений — реальные задачи, доехавшие человеком и не взятые роботом. Часть, вероятно, уже сделана глазами. Список: 00-System\Bus-Lost-Tasks-Behind-Flags.md, карточка: 10-Tasks\task-2026-08-22-bus-lost-tasks-behind-flags.md. Слепую переотправку 47 задач по флоту сам не делаю — это массовое действие (§3.3-бис).