Три модели по стадиям и сторожа, которые не врут.
Главное в числах
| было | стало | |
|---|---|---|
| Сторожей, молча пропускавших действие при сломанной служебной утилите | 26 из 26 | 0 |
| Журнал фич живого проекта (ротация не срабатывала ни разу с v8) | 1,16 МБ | 707 КБ |
| Ложные блокировки датчика активации : пойманные случаи мёртвых сторожей | 111 : 0 | механизм снесён |
| Механизмов с тремя атрибутами | 71 | 87 |
Три модели по стадиям
Верхний уровень — архитектура, план, критика, аудит — идёт на Fable 5.1 и кода не пишет: запрет висит на роли и покрывает запись через оболочку (раньше шесть «только читающих» ролей могли писать в обход). Написание кода — Opus 5, и только когда есть команда проверки: фича, трогающая код, не входит в работу с пустым «чем докажем». Сбор сырья и рутина — Sonnet 5 со ступенью ниже по усилию.
Модель, на которой субагент реально стартовал, сверяется с реестром ролей. Если движок не сообщает модель — сторож пишет об этом в журнал, и пин честно остаётся дисциплиной, а не выдаётся за замок.
Основание — измеренная Anthropic связка «исполнитель Opus 5 с советником Fable 5.1»; цитаты и ссылки в _internal/plans/v9-research-digest.md.
Сторожа перестали врать
Замер показал: все 26 сторожей при подменённых jq/python3 отвечали «возражений нет». Прицельно — защита от боевого ключа в исходниках при сломанном jq молчала, и ключ проходил.
Очевидное решение (строгий режим оболочки) сознательно не применено: он ломает трёх сторожей на нормальном входе и, хуже того, превращает запрет в предупреждение — сторож, умерший до своей строки «блокирую», отдаёт пустой ответ. Вместо этого — проверка утилит на входе и маркер завершения.
Появился журнал срабатываний: впервые можно ответить, сколько раз каждый механизм предотвратил беду и сколько раз помешал работе. Эталонный корпус задаёт ожидание заранее, а не снимком поведения — иначе болезнь стала бы эталоном. Сквозной зонд поднимает настоящую сессию и проверяет, что движок вообще вызывает сторожей.
Против «готово на бумаге»
Доказательство теперь порождается запуском: квитанция с кодом возврата, отпечатком вывода и состоянием рабочего дерева — прозой не напишешь. Рождение записи сразу в готовом состоянии стало событием (так прошёл прошлый инцидент с дублями в CRM). Фича с внешней связью требует живого прогона, а не подменённой в тестах границы. Починка начинается с команды, которая краснеет на симптоме.
Снос по правилу двух починок
Блокировка коммита по свежести датчика активации: 395 упоминаний в журналах живых проектов, 111 ложных блокировок и обходов, ни одного пойманного случая мёртвых сторожей. Каждый обход снимал разом все проверки хука. Механизм снесён, защита неподтверждённого профиля сохранена.
Контекст и эстафета
Ротация журналов заработала впервые с v8: она отбирала записи по состоянию done, которого в графе переходов нет вовсе. Сторож размера журналов называет счёт в токенах при старте сессии. Шесть команд, которые запускает только человек, убраны из постоянного контекста.
Волна режется на направления по слоям (задачи с общим файлом остаются вместе), очередь лежит в файле — закрытие одного направления открывает следующее.
Честность
Заведён реестр осознанных отказов _internal/out-of-scope/: что решено не делать и почему. Появился сторож согласованности витрины — версия сверяется в манифесте, файле маркетплейса и описаниях, потому что раньше витрина отставала на два мажора.
Самопроверка — 52 раздела, тестов — 52, все зелёные.