# Роутер-наставник — мастер-карта стройки (координирующий план)

> **Для исполнителя:** это **карта**, а не пошаговый чертёж. Она задаёт 7 машин, строгий порядок их сборки, зависимости и точки стыковки. Детальные TDD-планы (task-by-task, REQUIRED SUB-SKILL `superpowers:subagent-driven-development`) пишутся **отдельно по каждой машине** на основе этой карты — по одному, в порядке снизу вверх.

**Цель:** заменить нынешний «зоопарк» из ~12 живых блокеров одной цельной конструкцией «план → роутер-наставник → судья → владелец», где **ни одно действие не исполняется без шага замороженного плана, прошедшего судью**, при этом детерминированная защита-пол остаётся независимым слоем.

**Архитектура:** семь машин друг на друге. Низ — неподделываемый фундамент (журнал действий + подписанные расписки + защита секретов/служебки). Над ним — стена (верховный хук default-deny на ВСЁ) и замок плана (хеш-печать). Сбоку у стены — голова (роутер-наставник). На воротах — судья A–I (безопасный отказ, не переопределяет пол). По бокам — укрепление существующей защиты и переделка дисциплины. Сверху — видимость и поэтапное «тихое» включение (D28).

> **СТАТУС РЕВЬЮ 2026-06-04:** Машина 1 (Фундамент) — **✅ СОБРАНА и проверена по коду** (переделка не нужна, см. её раздел). Машина 2 — идёт построчное ревью решений A–G (владелец ведёт). **Закрыто:** A (структура шага), B (строгий матч), **C (C-1…C-14: два плана / две печати / закрытая дверь / контракты+охват / апелляция)** и **L-серия** (меньше итераций: L1/L3/L4/L5/L7; L2/L6 в утиль; принцип «умный не баран»). **Закрыто также:** D (матчер `*` + зелёный проход строго по способности — семена + только-смотрящие, никогда мутирующий; под аудитом дверей), E (указатель шага — линейный сейчас, «волны» → Машина 3), F (авто-аудит дверей + страховка «зелёного прохода» к D), G (сверка план↔журнал постфактум). **ВСЕ A–G + L закрыты — Машина 2 готова к плану сборки.** Детали дельты C/L — в разделе **«НАДСТРОЙКА C/L»** ниже + в чертеже Машины 2. Код Машин 2+ ещё НЕ строим — сначала владелец подтверждает D–G.

**Источники истины (spec):**
- `docs/superpowers/specs/2026-06-01-router-discipline-plan-anchor-design-notes.md` — логика план→роутер→судья→владелец (D1–D36, OQ1–OQ7, судья A–I, снаряжение роутера 6 групп / 24 пункта).
- `docs/superpowers/specs/2026-06-01-router-mentor-hooks-decisions.md` — хуки: 26-пунктная карта покрытия + два прохода усилений + «ПРЕД-СПЕКА #1 — чистовой список 🟥/🟩/🟨/🆕».

**Технологии:** Node.js хуки `tools/enforce-*.mjs` (PreToolUse/PostToolUse/Stop), Sonnet/Haiku/Opus как судьи/роутер через `callAnthropicAPI` (кэш промпта), `audit_chain_hash`-паттерн PostgreSQL для журнала, HMAC-ключ из OS-keychain (`keytar`), Pest 4 mutation для проверки тестов, vitest tools-only для регрессии хуков. **Портативность — жёсткое требование: никакого project-specific хардкода; судья/роутер РАССУЖДАЮТ, не читают зашитые списки.**

---

## СКВОЗНЫЕ НЕСУЩИЕ ПРИНЦИПЫ (держат всю конструкцию — закладываются в фундамент, используются всеми машинами)

1. **Журнал S1 — полный и неподделываемый.** Лог пишется **ДО** действия (нет записи → действие не исполняется, P21-h); append-only хеш-цепочка (как `audit_chain_hash`, стереть/править задним числом нельзя, P21-k); первичен над моими словами (что сделано — из журнала, мой отчёт сверяется, P21-e). Под него легли: честность (п.21), вход судьи (J7), результат субагента (п.13), сверка-аудит по сессии (п.25).
2. **Замороженный план (хеш-печать, P15-f).** После одобрения план «запечатан»; правка = новое одобрение, видимое владельцу. Без этого «в плане» — фикция (я переписал бы план под действие). Закрывает circularity «дисциплину собираю я сам».
3. **Судья НЕ переопределяет детерминированный пол (J9).** «Да» судьи не отпирает тонкий пол/верховный хук — судья только блокирует ИЛИ пропускает к детерм-слоям. Обманутый судья = ограниченный ущерб (не авторизует force-push/секрет/необратимое), не катастрофа.
4. **Машинная правда владельцу при одобрении (E10 / P4-b / J10).** Окно «да» показывает риск/последствие **машинно из фактов действия**, не из моей формулировки. Опасное нельзя подать мягкими словами. Против предела «обманули владельца».
5. **Подпись расписок ключом-вне-меня (P10-c, HMAC из OS-keychain).** Расписки судьи/владельца/GREEN подписаны; взлома служебной папки **мало** — нужен ключ, мне недоступный.
6. **Матчер-«всё» (`*`), не список имён.** Ворота судят по СУТИ действия, не по имени инструмента (урок F1: следили за Bash → PowerShell мимо). Новый канал → закрыт сам, пока осознанно не впишут. + авто-аудит покрытия дверей (P15-b).
7. **Портативность.** Что project-specific — берётся живьём из реального состояния, не вшивается. Зашитой «карты критического» НЕТ — судья рассуждает.

> **О счёте несущих (во избежание путаницы трёх разных счётчиков):** выше — **7 принципов** (высокий уровень). Конкретных несущих **механизмов**, которыми эти принципы держатся, — **10**; их поимённый список с привязкой к машинам — в коверидж-таблице «10 несущих механизмов → машина» внизу. Отдельно «**7 пределов**» (абзац ниже) — это про честный пол ~0.5% (предел защиты), а НЕ про несущие. Три счёта — **7 принципов / 10 механизмов / 7 пределов** — разные, не путать.

**Честный пол ~0.5% (7 пределов, неустраним по конструкции, заложен сознательно):** recursive-trust (я — соавтор плана и частично вход судьи) · user-approval (суверена можно обмануть, E10 сужает) · физ-канал без хуков (#15) · субъективная оценка качества · эфемерная негейтнутая мысль (#22) · cross-session дробление · info-theoretic утечка. Усиления подняли стены, пол не убрали.

**Режим внедрения (D28, общий для всех машин):** чертёж → сборка по TDD **в стороне, не вживую** → **тихий режим** (новые гейты логируют, что бы заблокировали/эскалировали, реально НЕ блокируют — **только дисциплинарные ворота; защита-пол (секреты/runtime/force-push) включена сразу, не «тихо»**) → подкрутка порогов по реальным данным → **включение по одному** (сперва мутации, потом чтения). Живая система во время стройки не ломается. Две сегодняшние починки кода (`max_tokens` 1500→15000, fix `task_type`) независимы — выкатываемы сразу.

---

## НАДСТРОЙКА C/L (ревью 2026-06-04) — что изменилось в конструкции

> Этот раздел — **актуальный слой поверх** детальных разделов машин ниже (они написаны ДО ревью C/L и остаются верны как фундамент; здесь — дельта). Закрыто на ревью: **A, B, C (C-1…C-14), L-серия, D** (матчер `*` + зелёный проход по способности), **E** (указатель шага линейный; «волны» → Машина 3), **F** (авто-аудит дверей + страховка «зелёного прохода»), **G** (сверка план↔журнал постфактум). **Все A–G + L закрыты 2026-06-04.**

**Главное изменение — план расщепился на ДВА (C-7):**
1. **Разговорный план** (думательный): цель + только семена (думать/спрашивать, реализация запрещена) + обязательный артефакт-результат и условие «готово». Последовательность эмерджентна (следующий вопрос рождается из ответа). Защита в этом окне — НЕ печать (её ещё нет), а запрет инструментов реализации + всегда-включённый пол (секреты/runtime/force-push). Один разговорный план на фазу, внутри — петля до готовности.
2. **Реализационный план** (строящий): фиксирован, опечатан заранее, строгий матч (A/B), каждый шаг ссылается на опечатанное решение артефакта.

**Две печати / два гейта судьи (C-10):**
- **Гейт-1** (после разговора) — судим ПРОДУКТ разговора: артефакт полон/здоров? Вход судьи = артефакт + контракты вызываемых скилов + цель (слеп к живой болтовне, артефакты-документы читать может). GO → печать артефакта → к плану стройки. Ловит «мусор на входе» РАНО.
- **Гейт-2** (после реализационного плана) — судим ПЛАН: верно применяет опечатанный артефакт, строгий, ссылки §X резолвятся? GO → печать плана → стройка.
- Асимметрия честная: план судим ДО (фиксирован), разговор — ПОСЛЕ (эмерджентен → судим продукт-артефакт).

**Закрытая дверь (C-5):** на стройке решать на ходу нельзя. (а) исполнение применяет ТОЛЬКО опечатанные решения; (б) шаг реализации ОБЯЗАН ссылаться на конкретное решение артефакта («крашу в цвет §X»), ссылка не резолвится → стоп; (в) нужно решение, которого нет → единственный легальный ход — возврат в разговор (семя) → пере-печать. Хода «спросил на ходу и продолжил» физически нет → петля обязательна.

**Контракт скила {needs/produces/constraints} (C-13) + L-поля (L-серия):** скил объявляет про себя машинно-читаемо. Базовый контракт `needs / produces / constraints`, расширен L-полями: `preview-form` (L1 — чем дёшево показать образец; `none` для мелочи), `defaults` (L3 — разумный дефолт под нужду, СВЕЖИЙ под задачу, не штамп), `key-decisions` (L4 — что фундаментально), `acceptance-criteria` (L7 — как поймём, что готово). На контракте проверки полноты/охвата = операции над множествами и графом (механика, не «ум ИИ»). Свои скилы — пишем контракт сами (точно); чужие (маркетплейс) — тонкий файл-адаптер рядом, гард-рейлы G1–G6, ключевой **G4: хеш-страж дрейфа** (версия+хеш чужого скила; расхождение → громкий флаг + откат на мягкое рассуждение судьи).

**Машина охвата A/B/C/D поверх контрактов (C-14):** A — граф зависимостей (узлы=скилы, рёбра=needs↔produces; декомпозиция=связные группы, порядок=топосортировка, дыра=нужда без producer, цикл=флаг); B — двусторонний реестр нужды↔решения (дыра / сирота-скоупкрип); C — чек-лист «просьбы цели → план» (мягкий край на извлечении просьб); D — ограничения как полноправные нужды. Хребет — буквальный чек-лист готовности (галочки + указатели §). Прецеденты прошлых планов — advisory, не гейт. + **look-ahead**: при сборке плана роутер читает контракты вызываемых скилов и тащит их вопросы ВПЕРЁД, в разговорную фазу.

**Апелляционный цикл (C-12):** деньги → сразу к владельцу; структурные замечания (нет §, ссылка не резолвится, нужда не покрыта, матч не сошёлся) → судья мотивированно назад ко мне → правлю (сначала сам, потом роутер) → роутер возвращает СУХОЕ (без мотиваций/диалогов) → судья пере-судит; **цикл до 3 раз, не прошло → к владельцу**; суть/дух → сразу к владельцу. Счётчик раундов неподделываемый (журнал М1), канал сухой (анти-инъекция), классификация «деньги» детерминированно-осторожная. Применяется на ОБОИХ гейтах.

**L-серия (меньше итераций, универсально):** L1 дешёвый образец до полной стройки (ОБЯЗАТЕЛЕН при `preview-form ≠ none`) · L3 предложи-и-вето (дефолт на вето вместо открытого вопроса) · L4 порядок решений по влиянию (фундамент раньше мелочи) · L5 ограничения-как-пре-мортем · L7 критерий приёмки заранее (объективное — авто-проверка, вкусовое — глаз владельца). Отклонены L2 (референсы, не универсально) и L6 (скелет-прецедент — «баранит», полноту лучше даёт граф A + look-ahead). **Принцип «умный не баран»:** половина ПЛАНИРОВАНИЯ/РАССУЖДЕНИЯ (роутер/разведка/декомпозиция) думает свежо каждую задачу, никаких шаблонов-решений; половина ЗАЩИТЫ/ПРИНУЖДЕНИЯ (стена/гейт/судья/пол) остаётся тупо-механической (тупой гейт нельзя уболтать).

**Куда садятся изменения (по машинам — детальные разделы ниже надстраиваются этим):**
- **Контракт скила** (новый сквозной артефакт) — общий вход для М3/М4; защищён от само-ослабления (убрал нужду/критерий/расширил дефолт → блок + да владельца + diff; анти-отрава #9/#11). Дом схемы — общий; чтение — М3/М4.
- **Машина 2 (стена):** ДВА режима — разговорный (только семена, артефакт обязателен, матча нет) + реализационный (строгий матч + закрытая дверь); ВТОРАЯ печать — заморозка артефакта (гейт-1), рядом с заморозкой плана; резолвер закрытой двери (шаг ↔ опечатанный §). Детально — в чертеже Машины 2 (Tasks 10–12, дефолты `[РЕШЕНИЕ H–K]`).
- **Машина 3 (роутер):** look-ahead + декомпозиция графом A из контрактов + L-ядро (дефолты L3 / порядок по влиянию L4 / образец L1 / ограничения L5 / критерии L7) + адаптер чужих скилов с G4.
- **Машина 4 (судья):** ДВА гейта (артефакт + план) + машина охвата A/B/C/D на гейте-1 + апелляционный цикл (3 раунда сухой петли) + 4 входа (план/артефакт/цель/контракты) + L7 на «готово» (объективные критерии прошли машинно).
- **Защитный пол (М1/М5):** почти не тронут; добавлены типы записей runtime (вторая печать + счётчик апелляции) + защита контрактов под анти-отраву.

**Открытость закона (C-11):** структурные законы (матч, «шаг ссылается на §», полнота нужд, защиты, семена) — публикуются целиком (как СНиП: знание помогает честному, не помогает обходчику). Судейские законы (рассуждение план↔цель, артефакт↔нужды): критерий открыт, вердикт защищён (слепота к уговорам + независимость + консенсус). Принцип «нет защиты через секретность».

**Предел честности (C-9):** конструкция полна настолько, насколько точно объявлены/выведены нужды скилов. Свои скилы — точно (свой контракт); чужие — мягче (судья выводит из текста рецепта, остаточный риск). Машина держит «наличие/происхождение решения» (прошло ли диалог+печать), но не «применили ли именно его значение/вкус» — это владелец (граница C-6/B). Добивает владелец.

---

## ПОРЯДОК СБОРКИ (строгий, по зависимостям)

```
Машина 1 (Фундамент) ──┬─→ Машина 2 (Замок плана + Верховный хук)
                       │        │
                       │        ├─→ Машина 3 (Роутер-наставник)
                       │        │        │
                       │        │        └─→ Машина 4 (Судья A–I)
                       │        │
                       ├─→ Машина 5 (Укрепление защиты-пола 🟩)
                       │
                       └────────┴──→ Машина 6 (Переделка дисциплины + чистка 🟨/🟥)
                                              │
                       Машина 7 (Видимость + теневой режим + включение) — поверх всего
```

**Правило порядка:** ничего из 2–7 не строится, пока Машина 1 (фундамент) не готова и не проверена. Машина 4 (судья) при сборке требует 1+2 + **граф-из-реестра** (фундаментный артефакт, НЕ готовый роутер); с роутером (М3) стыкуется на runtime. **Защитная часть Машины 6** (тонкий пол / escape-защита / авто-снимок) стоит ТОЛЬКО на М1 и строится сразу после фундамента, параллельно 2–4. Машина 7 (включение) — последняя и постепенная.

---

## МАШИНА 1 — ФУНДАМЕНТ (пол, на котором стоит всё)

**Одной фразой:** неподделываемая основа — журнал действий, подписанные расписки, защита секретов и служебки, честный приёмщик «да».

**На чём стоит:** ни на чём (основание). **Строится ПЕРВОЙ.**

> **✅ СОБРАНА (2026-06-04, ветка `worktree-brainrepo`).** Код-коммиты: `d7dc0327` receipt-key-config · `9bd45ce5` receipt-sign (HMAC) · `e3da14a7` action-journal (журнал S1) · `3af57e18` askuser signed receipts · `56da7fab` pathNormalize NFC · `7af68d62` runtime-write-deny (все каналы) · `b83cea2e` cross-инварианты. Регрессия 2035 GREEN. **Переделка НЕ нужна (проверено по коду):** `signPayload`/`verifyReceipt` подписывают/проверяют ЛЮБОЙ объект; `journalAppend` принимает ЛЮБОЙ payload + хеш-цепочка + HMAC-голова. → две печати / счётчик апелляции / записи приёмки = новые НАГРУЗКИ на тех же примитивах (хуки Машин 2/4 импортируют М1, не правят). Ноль переделок, только надстройка.

**Что входит:**
- **Журнал S1** (🆕, несущий №1, TO-BUILD №4) — append-only хеш-цепочка, лог-до-действия, первичен над словами. Базовый паттерн — `audit_chain_hash` проекта.
- **Подпись расписок HMAC** (🆕, несущий №5, P10-c) — ключ из OS-keychain (`keytar`), мне недоступен. Все расписки (судья/владелец/GREEN) подписаны.
- **runtime-write-deny** (🟩, п.10, существует) — нельзя писать в `~/.claude/runtime` (расписки). +все-каналы записи (`echo>`/`cp`/`mv`/MCP/помощник, матчер-«всё», P10-a) +нормализация пути (symlink/hardlink/8.3/NFC, P10-b).
- **read-path-deny** (🟩, п.8, существует) — нельзя читать чужие транскрипты `.jsonl` / `~/.claude/runtime` / настройки / `.env`. Базовый узкий список (over-block fix v2.43 сохранить — CLAUDE.md/нормативку/память НЕ блокировать).
- **askuser-answer-parser** (🟩-фундамент, п.4/26, существует) — честный приёмщик: ловит ТВОЙ ответ в окне AskUser, пишет официальную расписку «владелец разрешил X на 5 мин» в подписанную служебку. Расписку пишет КОД из твоего ответа, не я.

**Инвариант (НИКОГДА не убирать, Р2):** без любого из {journal, signed receipts, runtime-write-deny, read-path-deny, askuser-parser} судью можно подделать → вся конструкция рушится. Это краеугольные камни.

**Как проверяется отдельно:** журнал — записать действие до исполнения, попытаться исполнить без записи → блок; попытаться стереть/подменить запись задним числом → отказ цепочки. Расписка — подделать без HMAC-ключа → отвергнута. runtime-write-deny — попытка записи в `~/.claude/runtime` любым каналом → блок. read-path-deny — Read `.env`/`.jsonl` → блок, Read CLAUDE.md/память → проходит.

**Точки стыковки (что отдаёт наружу):**
- Журнал S1 → читают Машины 2 (сверка план↔след), 4 (вход судьи J7), 5 (неподделываемый GREEN/RED), 6 (счётчики escape/оправданий).
- Подписанные расписки → пишет askuser-parser, читают верховный хук (М2) и судья (М4).
- Защита-пол (runtime/read) → действует под всеми остальными машинами независимо.

---

## МАШИНА 2 — ЗАМОК ПЛАНА + ВЕРХОВНЫЙ ХУК (стена)

**Одной фразой:** план «замораживается» печатью; и главная стена — ни одно действие без шага замороженного плана, на любой инструмент.

**На чём стоит:** Машина 1 (журнал + расписки).

**Что входит:**
- **Замороженный план** (🆕, несущий №2, P15-f, TO-BUILD заморозка) — хеш-печать после одобрения; правка плана = новое одобрение, видимое владельцу. Терминальная метка обмена роутер↔Claude `СОГЛАСОВАНО`/`СПОР→ВЛАДЕЛЕЦ` (A0b) задаёт состояние «заморожен».
- **Верховный хук** (🆕, несущий, п.15/16, TO-BUILD №1) — default-deny на ВСЕ действия, **матчер = `*`** (не список имён). «В плане» = машинная сверка действия с объявленным объектом шага (P15-a), а не «это шаг 3». Совпадение по намерению/операции, не только объекту (P15-e). Объяви-потом-делай по каждому действию (P15-g). Лимит действий на шаг (P15-h). Сам хук **fail-CLOSED** (сбой → стоп + сигнал; рубильник у владельца — P15-d).
- **Семена-исключения (D12/D13)** — `writing-plans` + `AskUser` вызываемы БЕЗ готового плана, иначе стену нельзя загрузить (дедлок «нет плана → нечем создать план»). Реализуются ровно через escape = Skill/EnterPlanMode/AskUser (М6, E1) — никакого отдельного послабления; верховный хук пропускает только эти семена, всё остальное по-прежнему требует шаг замороженного плана. **H4-страховка:** «семя чистое» — не обещание, а проверка (writing-plans только пишет план-файл, не читает/не мутирует — иначе блок).
- **Классификатор режима (D33)** — по СМЫСЛУ (не код-список, П3-A) делит разговор: тривиальная болтовня → машина спит (плана не требует); содержательное мышление → мыслительный скил обязателен (D32, семенной класс: brainstorming/discovery-interview/writing-plans); продукт/код/прод → полная машина. **Страж секретов (D18) работает во ВСЕХ трёх режимах.**
  - **[ревизия 2026-06-04]:** D33 расщеплён. **ПРИМЕНЕНИЕ режима — механически в Машине 2** (`decideMode`: разговор→только семена, стройка→строгий матч) — уже есть. **СМЫСЛОВОЙ разбор** (болтовня vs думанье, подтолкнуть к мыслительному навыку) — это рассуждение → **Машина 3** (роутер), не стена («умный не баран»). **finding 8 РАСТВОРЁН призмой владельца (2026-06-04):** в этой среде болтовни нет → off-состояния нет → «чем включается слой» не существует как вопрос; дисциплина всегда на, остаются ДВА режима. Механического триггера и «спящего» режима не строим.
- **Сверка план↔сырая просьба владельца (D29, независимый проверяющий)** — отдельный прогон ДО исполнения: совпадает ли замороженный план с ЖИВЫМИ словами владельца (внешний якорь = его просьба, не мой пересказ). Отличен и от судьи (тот: действие↔план), и от оценщика (тот: постфактум); проверяющий ≠ автор плана. Закрывает остаток L2 (recursive-trust). Сырую просьбу подаёт роутер (P16-e, М3), но сама сверка независима.
  - **[ревизия 2026-06-04]:** D29 снята как ОТДЕЛЬНАЯ сущность — её роль выполняет **слой общения (C-7)**: артефакт, подтверждённый владельцем на гейте-1, + **закрытая дверь** (план обязан ссылаться на опечатанный артефакт). Привязка плана к настоящей воле владельца идёт ЧЕРЕЗ артефакт (владелец якорит на гейте-1), а не через отдельный сравниватель. Механический хвост «каждая явная просьба → шаг» — это машина охвата C-14-C (М3/М4). Отдельного D29-прогона больше не нужно.
- **Авто-аудит покрытия дверей** (🆕, P15-b, TO-BUILD №2) — перечислить все инструменты; непокрытый матчером → флаг + default-deny. Закрывает «забытый канал» как КЛАСС (не только WebFetch/WebSearch). Редкий ручной аудит «все ли двери под воротами» (остаток #4/#15).
- **Сверка план↔след по сессии** (🆕, п.25/M2, TO-BUILD №9) — каждая запись журнала ложится на шаг плана? запись-сирота → где-то пропустил гейт → флаг владельцу.

**Инвариант:** без замороженного плана «в плане» — фикция. Матчер обязан быть `*` — иначе «забытый канал» возвращается. A0: подсудный (я) дверь в зал суда не контролирует — ворота срабатывают структурно от состояния «заморожен», меня не зовут по желанию.

**Как проверяется отдельно:** действие без шага плана → блок (любой инструмент). Попытка переписать план под действие → требует нового одобрения (печать сменилась, видно владельцу). Новый канал/инструмент без матчера → default-deny + флаг аудита. Действие-сирота в журнале без шага → флаг.

**Точки стыковки:**
- Замороженный план → читают Машина 3 (роутер ведёт по нему), Машина 4 (вход судьи = заморож. план).
- Состояние «заморожен» (метка A0b) → триггерит автоворота судьи (М4, A0).
- Верховный хук → стена, под которой работают роутер (М3, «голова при стене») и переделанная дисциплина (М6).

---

## МАШИНА 3 — РОУТЕР-НАСТАВНИК (голова у стены)

> 🚨🔴 **МИНА ОТ РЕВИЗИИ МАШИНЫ 2 (2026-06-04, K4) — РЕШИТЬ ОСОЗНАННО, НЕ НА АВТОМАТЕ:** в разговорном режиме свободный Write закрыт, а семена `brainstorming`/`writing-plans` (их рекомендует роутер) сами пишут файлы (спеку/план). Артефакт/спека должны материализоваться ЧЕРЕЗ КАНАЛ ОДОБРЕНИЯ гейта-1 (семя выдаёт предложение-текст), а НЕ широким Write. «Починишь» широким Write → откроешь обход (freestyle-артефакт мимо думанья). Полный список — аварийный блок в чертеже Машины 2.

**Одной фразой:** видит весь граф инструментов, выбирает рассуждением, ловит размытый шаг, риск-фильтр, очередь «на твоё одобрение».

**На чём стоит:** Машины 1 (журнал) + 2 (замороженный план, верховный хук — детерминированная стена держит даже при «поглупевшем» роутере, P16-d).

**Что входит (снаряжение роутера, 6 групп / 24 пункта из spec-1):**
- **Движок выбора (1.1/1.2):** скил по СМЫСЛУ+рассуждением, ключевые слова сняты; вшитый метод брейнсторма (2–3 варианта → спор с собой → выбор). Граф+каталог узлов на **100%** через кэш промпта (никакого код-сужения — решение владельца).
- **Граф УЗЛОВ из РЕЕСТРА** (3.1/3.2/3.3) — стабильный (не graphify!), рёбра = альтернативы/подсказки/конфликты (ПОДСКАЗКИ, не рецепты). Цепочки СОБИРАЮТСЯ рассуждением (ОВ-Д1), не хранятся. Заземление: скилы резолвятся в реальный узел механически (ОВ-Д2-1), пути → на факты + пометка «гипотеза» (ОВ-Д2-2).
- **Прогресс плана выжимкой (2.3)**, **самообъясняющие шаги + цель (В6/D36 вар.B)**, **память спора (D36-1)**, **свежий каталог (D36-2)**.
- **🔖 ВОЛНЫ / дерево указателей шага (D6/OQ1) — ПЕРЕНОС ИЗ МАШИНЫ 2 (решение E, 2026-06-04, НЕ ЗАБЫТЬ):** в Машине 2 указатель шага сознательно линейный (прямой план). Ветвление — когда шаг раскрывается в под-план («волны») — живёт ЗДЕСЬ, где роутер собирает/разбивает планы. При сборке Машины 3 верховный хук Машины 2 переводится с линейного счётчика на **дерево указателей**.
- **Риск-фильтр у роутера** (W1+W2) — та же тройка, что у судьи (где сломается→больно?→откатимо?), но роутер сперва ЧИНИТ сам (откат/безопаснее/разбей/замена); не смог → флажок владельцу. Роутер НЕ блокирует.
- **Качество/честность (5.1–5.5):** видимая трасса 5.1 (⭐ сердце «крутить роутер»), право воздержаться 5.2, нюх на размытость 5.3, самопроверка 5.4 (слита с 1.2), согласованность плана целиком 5.5.
- **Анти-обманная тройка:** 5.2 воздержание + 5.3 нюх + 4.4/D39 интервьюер. `no_skill_found` = СТОП к владельцу (P16-c, OQ7 PRIMARY), не «свобода».
- **Роутер по СЫРОЙ просьбе владельца** (P16-e, несущий), не по моему пересказу. **[РЕВИЗИЯ 2026-06-05 — spec `2026-06-05-router-conversational-input-and-emergent-catch-design.md`]:** роли НЕ меняются (контроллер ПРОИЗВОДИТ разговорный план, роутер КРИТИКУЕТ — как в фазе стройки 1б); якорь роутера = сырой промпт + ВСЕ сырые ответы владельца по порядку + мой план (не пересказ). Интент P16-e (нет подкрутки маршрута пересказом) сохранён через сырой якорь. Добавлены: анти-внушение (роутер сперва сам выводит из сырых слов, потом сверяет — слоты трассы), покруговой контроль (код: скил вызван / вопрос не повис; роутер: смысл; мягкий возврат → 3 прохода → владелец), выходная 3-шаговая лесенка (существование $0 → роутер-верность спеки → судья полнота+K7). Полный дизайн — в спеке. **Высокий риск → скил обязателен** независимо от уверенности ИИ (P16-g: прод-код/деньги/авторизация/многошаговость). Назначение скила + его вызов = машинный факт (P16-b, S1). missed-activation = блок на высокорисковых классах (P16-h).
- **Дисциплина роутера** (он тоже ИИ): обязательные структурные слоты трассы 5.1 + механический валидатор (пустой слот = красный флаг); пропуск уровня только из ЗАКРЫТОГО списка категорий; счётчик частоты пропусков; оценщик постфактум.
- **Очередь одобрений 3.4/3.5** (🆕, hard-rule владельца 2026-06-03) — механизм СТРОИМ; **наполнение фонда примеров (3.4) и долгой памяти (3.5) — ТОЛЬКО по явному «да» владельца, иначе НИКАК** (без авто-обучения, без тихого накопления). Доставка: очередь-файл → раздел «На одобрение» в `/brain-retro` → сигнал в STATUS.md «ждут: N» → одобрение пачкой. Переиспользует существующий brain-retro + STATUS-генератор.
- **Чувство свежести (3.6)** — дата каталога/реестра; устарело → предупреждает + пересобирает, не работает уверенно по старью.
- **Группа 6 (Деньги)** — **цена = разделитель равноценных кандидатов** (6.1: при двух одинаково-годных узлах роутер берёт дешевле; «цена НЕ важнее правильности» — действует ТОЛЬКО при равенстве качества); крик при нуле бюджета (D27, стык М7); выжимка-не-свалка с исключением для графа (6.2: контекст экономим, но граф+каталог узлов всегда на 100% — решение владельца). Этим закрываются заявленные «6 групп / 24 пункта» снаряжения.
- **Разведка начинается с графа (Q-GRAPH)** + **ручка «% разведки» (крит-разбор #3)** — Q-GRAPH: дефолтный первый пункт любого плана-разведки (сперва `/graphify query`, потом Read/Grep, CLAUDE.md §5 п.14). Ручка #3 (заложить СЛОТ СЕЙЧАС, не пропустить при детализации): доля разрешённого «попробовать новый узел» (0 по умолчанию) + счётчик использования узлов + роутер СПРАШИВАЕТ разрешение на новый узел — анти-самоослепление петли обучения; наполняется ТОЛЬКО по «да» владельца (как 3.4/3.5).

**Инвариант:** граф = граф УЗЛОВ из реестра (стабильный), НЕ graphify (волатильный). Цель остаётся владельца (D29), роутер улучшает только МЕТОД. Вето Claude → арбитраж владельца. Очередь обучения наполняется ТОЛЬКО по «да».

**Как проверяется отдельно:** выдуманный скил → отклонён механически. Размытый шаг → нюх→интервьюер→стоп, не «свобода». Высокий риск без скила → обязателен. Трасса с пустым слотом → флаг валидатора. Кандидат в фонд без «да» владельца → НЕ добавляется.

**Точки стыковки:**
- Роутер → отдаёт замороженный план со скилами (М2 печатает, М4 судит).
- Граф УЗЛОВ из реестра → общий с судьёй (М4, только чтение).
- Очередь одобрений → `/brain-retro` (существующий) + STATUS.md (М7).
- Трасса 5.1 → оценщик (постфактум) + владелец (D17), НЕ судья (тот слеп).

---

## МАШИНА 4 — СУДЬЯ A–I (ворота)

> 🚨🔴 **КОНТРАКТЫ ОТ РЕВИЗИИ МАШИНЫ 2 (2026-06-04) — НЕ ПРОПУСТИТЬ ПРИ СБОРКЕ:** на Машину 4 ляжет КОНЦЕНТРАЦИЯ доверия — три закрытия ревизии держатся здесь.
> - **K1 (гейт-1):** печать артефакта/плана ставит ТОЛЬКО процесс одобрения гейта-1 (ключ контроллеру недоступен); артефакт ВСЕГДА доводится до владельца — это ЗАМЕНА снятой сверки D29. Пропустишь → контроллер сам себе печатает; план не привязан к воле владельца.
> - **K2 (A2):** «взял ли навык» сверяется по ФАКТИЧЕСКОМУ журналу вызовов (М1), НЕ по тексту TodoWrite/coverage-ярлыка. Пропустишь → зелёный проход TodoWrite (М2) = путь фейкового покрытия навыком.
> - **K5 (гейт-2, добавлен 2026-06-04 — канон M3) — судья судит ПЛАН как БУДУЩЕЕ.** Судья проверяет, что шаг объявляет конкретный проверяемый КРИТЕРИЙ приёмки (наличие+конкретность, да/нет); слова «сделано»/«проверено» в тексте плана за ФАКТ НЕ принимает; реальное «проверено» ставит только рантайм-сентинел при исполнении (М5: GREEN + мутация). Этот контракт ОБЯЗАН попасть в аварийный блок чертежа Машины 4. **Пропустишь → судью усыпляет слово «проверено» в плане → GO на ИМИТАЦИЮ проверяемости.**
> - **K6 (анти-откат, добавлен 2026-06-05 — аудит Машин 1+2) — судья держит МОНОТОННУЮ зарубку (high-water-mark) ВНЕ откатываемого набора.** Журнал М1 (`action-journal-*.jsonl`+`.head`), замороженный план/артефакт и указатель шага М2 лежат в `~/.claude/runtime` и ПОДПИСАНЫ — но СТАРАЯ подпись валидна, поэтому подмена на более раннюю валидную пару файлов = откат: прячет прошлое действие или отматывает шаг заново. `verifyChain`/`verifyFrozenPlan` это НЕ ловят (печать цела, просто старая). Судья на каждом действии запоминает максимум (`seq` журнала / номер шага); при старте/проверке сверяет загруженное — `seq`/шаг МЕНЬШЕ виденного → ОТКАТ → блок. **Зарубка обязана жить ВНЕ досягаемости записи контроллера** (OS-keychain рядом с ключом печати ИЛИ собственный append-only канал судьи) — зарубка в самом runtime-файле = ПРИЗРАК (откатится вместе с журналом). Подделку нового состояния закрывает печать (нужен ключ); откат-сокрытие прошлого — НЕ закрыт ничем, кроме пола (`runtime-write-deny`), а если пол пробьют — откат свободен. **Пропустишь → откат к старому подписанному состоянию стирает/реплеит действия мимо журнала; "я этого не делал" становится недоказуемым.**
> - **K7 (линза пре-мортема на Гейте-1, добавлен 2026-06-05 — brainstorm входа роутера) — судья на Гейте-1 несёт ОТДЕЛЬНЫЙ обязательный слот вердикта «какие следствия принятых решений НЕ закрыты?».** Другая линза, чем проверка полноты (полнота = «все названные нужды закрыты»; пре-мортем = «что от решений сломается/вылезет, чего никто не назвал, напр. больше отступ → поехал мобильный»). Разные линзы ловят разные промахи (диверсификация > повтор одной проверки). Слот обязателен ПО ФОРМЕ (пустой → невалидно); содержательно — размышление ИИ, поднимает шанс, НЕ гарантирует (часть потолка ~0.5%). Источник — spec `2026-06-05-router-conversational-input-and-emergent-catch-design.md` §4 #4. **Пропустишь → всплывающие невысказанные следствия ловятся только мной и владельцем, без второго независимого взгляда на гейте.**
> Полный список — аварийный блок в чертеже Машины 2 + канон Машины 3 (§«K5 → МАШИНА 4»).

**Одной фразой:** перестройка нынешнего llm-judge в полного судью — риск + качество + проверка скилов, безопасный отказ, не переопределяет пол.

**На чём стоит:** Машины 1 (журнал/расписки) + 2 (замороженный план, состояние «заморожен» триггерит ворота A0). **Граф узлов — фундаментный артефакт из РЕЕСТРА** (стабильный, не от роутера): судья читает его напрямую, от М3 нужен лишь единый формат, не готовность роутера. Build-time: судью собираем/тестируем на тестовых планах после 1+2+граф; runtime: судья судит планы, которые подаёт роутер (М3). Ложной жёсткой зависимости М4→М3 нет.

**Что входит (карта A–I из spec-1 + J1–J10 из spec-2):**
- **Функции (блок A):** A0 автоворота от состояния «заморожен» (подсудный дверь не контролирует); A0b метка `СОГЛАСОВАНО`/`СПОР→ВЛАДЕЛЕЦ`; A1 ворота на план (вкл. перемаршрутизированный после находки — #6); A2 надзор на исполнении (звенья цепочки не схлопнуты, скилы взяты, «сделано=плану»); A3-блок (ТОЛЬКО фатальное) + A3-замечание (качество → СОВЕТ владельцу).
- **Снаряжение:** гибрид риска 2+3 (где сломается → больно? → откатимо? → больно+необратимо=стоп); форма вердикта go/no-go №4 (GO / NO-GO+категория / GO+замечание); мерило качества плана (3 пункта из write-plans); 3 вопроса по скилам; граф УЗЛОВ (общий с роутером, только чтение); короткая память задачи (П1, вердикты не доводы).
- **Независимость (блок B/E):** вход = ТОЛЬКО цель + план со скилами + тип задачи + граф 100% + память задачи. **НЕ кладём** спор роутер↔Claude, рассуждения, весь чат, graphify (J4: проза обрезается механически — «слеп к рассуждениям» как механика).
- **Критерии (блок C):** граница «грубо vs качество» режется ОБРАТИМОСТЬЮ — необратимое → сомнение в СТОП; обратимое → ПРОПУСК+совет. Фатальное = тяжёлое И необратимое.
- **Модель (блок D):** ворота = **1 вызов Sonnet** на весь план (риск+качество+скилы разом). **Haiku не используем** (плоское «вроде ок» обнуляет свежий взгляд). Исполнение: код сверяет механику → совпало → пропуск ($0); расхождение ИЛИ разрушительная команда (`rm`/`DROP`/`DELETE`/`TRUNCATE`/`migrate`/push прод) даже при совпадении → Sonnet (I-2).
- **⚠️ ОТКРЫТО (решить в детальном плане Машины 4):** напряжение «Haiku НЕ используем» (блок D: плоское «вроде ок» обнуляет свежий взгляд) против «J3 = Sonnet+**Haiku**+Opus на высоком риске». Спор унаследован из самих источников, не ошибка карты. Зафиксировать выбор при сборке судьи (вероятная развязка: одиночные ворота = Sonnet без Haiku; высокорисковый консенсус J3 = с Haiku как «третий голос ради расхождения», где плоскость не вредит). Решение — за владельцем.
- **Усиления J1–J10:** J1 fail-closed на разрушительном (откатимое — fail-open); J2 судья ПОСЛЕДНИЙ, под ним детерм-сетка; J3 мульти-судья (Sonnet+Haiku+Opus, «один НЕТ→блок») только на высоком риске; **J9 (несущий) судья НЕ переопределяет пол**; J10 критичное = судья + ВЛАДЕЛЕЦ; J5 здоровье на доске + крик при тихой деградации; J6 критерии в защищённом файле (мне нельзя смягчить); J8 каждое решение append-only логируется (аудит судьи).
- **Дисциплина судьи** (он тоже ИИ, главный риск — штамповка): структурные слоты вердикта (риск/качество/скилы) — пустой слот = флаг; механическая проверка «GO с пустыми слотами = невалидно»; оценщик судит судью постфактум (D31); владелец крутит обе ручки.
- **Реакция владельца (блок H):** СТОП-карточка (что+почему одной фразой) / СОВЕТ списком с планом / споры в журнал. Ответы: снять/подтвердить/сам-поправить (стоп), принять/отклонить/отложить (совет). Решение владельца после судьи — финал, не пере-судится (П2). Сам Claude блок не снимает (A0).

**Инвариант:** судья слеп к рассуждениям (иначе сваливается в мою логику). Не выбирает план/скилы (роутер), не калибрует роутер (оценщик), блокирует только фатальное (качество — совет). J9: «да» судьи не отпирает пол.

**Как проверяется отдельно:** план с фатальным необратимым риском → NO-GO. План с косметическим изъяном → GO+замечание. Действие чужим скилом на исполнении → блок. GO с пустым слотом риска → невалидно (флаг). Попытка судьи одобрить force-push → пол не отпирается (J9).

**Точки стыковки:**
- Вход судьи ← замороженный план (М2) + журнал (М1) + граф узлов (М3/реестр).
- Вердикты → владелец (СТОП/совет, М7 доска) + оценщик (постфактум).
- J9 → стыкуется с тонким полом и верховным хуком (М2/М6): судья не первый и не один.

---

## МАШИНА 5 — УКРЕПЛЕНИЕ ЗАЩИТЫ-ПОЛА (🟩, существующие хуки + усиления)

> 🚨🔴 **КОНТРАКТ ОТ РЕВИЗИИ МАШИНЫ 2 (2026-06-04) — НЕ ПРОПУСТИТЬ:**
> - **K3 (`classifyBashCommand`):** команда помечается `readonly` ТОЛЬКО если заведомо смотрящая; редирект `>`/`>>`/`|`-в-писатель, `git config`/`gc`/`push`/`commit`, `tee`, `$(...)`, и ЛЮБАЯ неуверенность → НЕ readonly. От этого зависит безопасность «зелёного прохода» Машины 2 (read-only Bash пропускается без шага плана). Пропустишь → мутация просочится мимо плана (напр. `git log > evil.sh`).
> Полный список — аварийный блок в чертеже Машины 2.

**Одной фразой:** усилить то, что оставляем, чтобы судья опирался на крепкий пол.

**На чём стоит:** Машина 1 (фундамент). Параллельна 2–4 (защита независима от дисциплины).

**Что входит (🟩-список из пред-спеки + усиления второго прохода):**
- **read-path-deny → +content-class** (P8-a: детектор секрет-паттернов на выдаче, как gitleaks) +все-каналы чтения (P8-b, матчер-«всё») +внутри субагента (P8-c) +список в защищённом файле (P8-d).
- **normative-content (анти-отрава, п.9/11) → +по-смыслу** (P9-b: diff удаляет/ослабляет правило → блок+да; семантически судья «ослабляет ограничение?») +контрольные суммы зависимостей сторожей (P9-a) +видно владельцу с diff (P9-c) +**имя скила → портативный канал** (TO-BUILD №10: «назначенный роутером editing-скил + правка в плане + судья + твоё да», не зашитое `claude-md-management`). **Память = СОВЕТ, НИКОГДА не источник разрешения (P11-d)** — «мне в памяти разрешили» не проходит.
- **mcp-classification (п.12) → +скан ИСХОДЯЩЕГО запроса** (P12-a: внешний «read» = тоже отправка, проверяем что УХОДИТ — секрет-паттерны+размер) +SQL/команда fail-closed при неуверенном разборе (P12-b) +URL по сущности (P12-c, блок `data:`/`file:`/IP-литерал). 3 уровня для владельца: читать-наружу свободно / менять-по-плану / необратимое-наружу = план+твоё-да.
- **workflow-gate (п.13) → +наследование ДОКАЗЫВАЕТСЯ пробой** (P13-a, TO-BUILD №5: родитель гонит через помощника заведомо-плохое, убеждается что блокнуло; не доказано → помощнику мутации запрещены) +результат помощника через журнал S1 (P13-b, анти-228) +помощник под фундаментом (P13-c).
- **parallel-session-lock (п.14) → +pid-liveness** (P14-a, TO-BUILD №11) +**freshness-guard на слепой Write** (P14-c, несущий — **дом сборки: Машина 6**; здесь только стык: parallel-lock и freshness — одна линия защиты от потери чужой работы; механика — файл не менялся с момента чтения? менялся → стоп, файловый анти-клоббер). Основа коллизии — W-1 (1 задача=1 worktree=1 ветка=1 сессия).
- **tdd-real-test-verifier (п.18) → +мутационная проверка** (P18-a, несущий, TO-BUILD: Pest 4 mutation — сломай правленый код, тест ОБЯЗАН покраснеть; остался зелёным → не проверяет → флаг/блок) +покрытие изменённого (P18-b).
- **Неподделываемый GREEN/RED** (TO-BUILD №3, П6/П17/П21-S4) — привязан к ОТПЕЧАТКУ тестированного кода (правка после прогона аннулирует мгновенно, P6-a); пишет ТОЛЬКО харнесс в подписанную служебку (P6-b); детектор массовости (анти-228); несёт ЧТО прогонялось, покрытие изменённого (P6-c).

**Инвариант:** защита-пол non-escapable (даже escape/мёртвый судья её не отпирают, J1/J2/E2). Эти хуки чистая защита — судью НЕ заменяют и им НЕ заменяются.

**Как проверяется отдельно:** секрет в `.env.bak` → ловится по содержимому. Фейк-тест → мутация краснеет → блок. 228 липовых GREEN → детектор массовости. Помощник без доказанного наследования → мутации запрещены. Слепой Write по изменённому файлу → стоп.

**Точки стыковки:** журнал S1 (М1) ← GREEN/RED записи + результат помощника. Мутационная проверка → судья опирается (М4 верит факту прогона).

---

## МАШИНА 6 — ПЕРЕДЕЛКА ДИСЦИПЛИНЫ + ЧИСТКА (🟨 + 🟥)

**Одной фразой:** растворить старый «зоопарк» в стену+судью, удалить костыли, новый escape только через твоё «да», авто-снимок перед опасным.

**На чём стоит:** **раздельно (защита и дисциплина — разные опоры).** Защитная часть (тонкий детерминированный пол / escape-защита E2 non-escapable / авто-снимок P1-b / freshness-guard P14-c) стоит ТОЛЬКО на М1 — строится сразу после фундамента, параллельно 2–4 (приоритет защиты). Дисциплинарная часть (растворение router-gate/branch-switch/verify-before-push/script-watcher/tdd-gate/decomposition/self-debrief/rationalization/coverage в стену+судью, escape-механизм) стоит на Машинах 2 (верховный хук) + 3 (роутер) + 4 (судья).

**Что входит:**
- **🟥 УДАЛИТЬ:** `safe-baseline-metering` (п.19, костыль-счётчик чтений → работу берёт верховный хук); `override-vocab` (п.26, уже мёртв → escape проектируем заново).
- **🟨 router-gate Bash/PowerShell** (п.1/2/3/15) → растворить в верховный хук (default-deny, матчер=*) + **тонкий детерминированный пол** (ТОЛЬКО необратимое-невозвратимое: force-push/перепись истории, отправка секретов наружу, затирание несохранённого, запись в защищённые не-git пути — глухой, НЕ завязан на судью, P1-d список в защищённом файле) + **разбор цепочек на атомы** (P2-a по `&&`/`;`/`|`/подстановкам; непрозрачные `bash -c`/`node -e`/`eval`/`$()` → только план+судья, P2-b; не разобрал → СТОП, P2-c) + белый список git-флагов (P3-a инверсия: разрешаем заведомо-безопасные, нераспознанное → стоп; P3-b проверка ЭФФЕКТА; P3-c отключение сторожей `LEFTHOOK=0` → требует твоего да, не блок наглухо). **Секрет-страж безусловно** (зеркало `rm`: много раздражения/мало пользы → режем; ноль раздражения/много пользы → держим).
- **🟨 branch-switch + git-approval** (п.4/5) → AskUser-канал (расписка на ПОЛНОЕ действие: сервер+ветка+коммиты=отпечаток, P4-a; прод-push показывает diff, P4-b; не переиспользуется) + ожидаемая ветка БЕРЁТСЯ ИЗ WORKTREE (P5-b, физ-факт, подделать нечем) + замороженный план. Локальный commit по плану → верховный хук+судья (без попапа); прод-push = высший ярус (план+да+судья+`prod-deploy-validator` 8 SSH-проверок, P4-d).
- **🟨 verify-before-push** (п.6) → шаг тестов в плане + машинный GREEN (см. М5).
- **🟨 script-watcher** (п.7) → тонкий бэкстоп языконезависимый (P7-a) + **код сторожей = высший ярус** (P7-b, корона самоизменения: правка гейтов/хуков/судьи → канал+коммит+GREEN+твоё да; исполняется ВСЕГДА закоммиченная версия, никогда правка из рабочей копии; P7-c хеш-сверка).
- **🟨 router-tool-gate** (п.16) → верховный хук (стена) + роутер-наставник (голова) — см. М2/М3.
- **🟨 tdd-gate** (п.17) → план(роутер) + **порядок тест→RED→код→GREEN машинно по времени** (P17-a: RED на тесте РАНЬШЕ правки кода в журнале S1; нет → стоп; P17-b RED = настоящий assertion-провал, не сломанный импорт; P17-c только прод-код).
- **🟨 decomposition-detector** (п.20, заглушка) → **сигнал-растяжка роутеру, НЕ блокер** (P20-a граф работы по сессии; P20-b эскалация к фича-строгости по накоплению, не блок-по-счётчику; P20-c видно владельцу). Повтор костыля 19 запрещён.
- **🟨 self-debrief-detector** (п.22) → гейт на ПОСЛЕДСТВИЕ мысли (U1–U4: действие/артефакт/сохранение требуют машинный факт мыслительного скила; вольная проза инертна; P22-e вниз пускается только выход скила; P22-g вывод владельцу помечен «выверен/СЫРОЙ»).
- **🟨 rationalization-audit** (п.23) → сигнал-паттерн владельцу (P23-a, не превенция); превенция СТРУКТУРНАЯ (P23-b: судья слеп + детерм-гейт + план↔сырая просьба + заморозка → оправданию некуда приземлиться).
- **🟨 coverage-verify + memory-coverage** (п.25) → машинная метка из следа (M3, моей руки нет) + сверка след↔заморож.план по сессии (P25-d, аудит полноты — стык М2). Самописный ярлык не раздуваем.
- **🆕 Escape-механизм** (п.26, E1–E10) — **только Skill/EnterPlanMode/AskUser**; самописный routing-tag УБРАТЬ (E4: самоиздаваемого обхода НЕ существует). E1 код пишет из твоего ответа, узкий/точный/одноразовый/короткое окно; **E2 escape снимает ДИСЦИПЛИНУ, НИКОГДА защиту** (секреты/runtime/force-push/необратимое — non-escapable жёсткий список); E3 журнал+видим+счётчик; E7 узкий (один гейт, не «всё»); E8 cooldown+нарастающее трение; E9 критичное = полный ярус; **E10 окно показывает машинный риск** (не мои слова).
- **🆕 Авто-снимок перед разрушительным (P1-b) + freshness-guard на Write (P14-c)** — необратимое локальное → откатимое по построению (копия в бэкап); файловый анти-клоббер. P1-a «откатимо» = проверенный факт (есть чистая закоммиченная копия?), не допущение. P1-c рушить только НАЗВАННОЕ в плане.

**Инвариант:** escape снимает только дисциплину, не защиту (E2). Код сторожей = высший ярус (P7-b) — прямой путь самоосвобождения, держим жёстко. Тонкий пол — глухой, не завязан на судью.

**Как проверяется отдельно:** `rm` вне плана → блок верховным хуком (не потому что `rm`, а потому что не в плане). `rm` в плане над названным файлом → авто-снимок + судья. force-push → блок наглухо (non-escapable). Обфусцированная цепочка → не разобралась → стоп. escape-фраза, набранная мной → не существует (только твоё да). Правка кода судьи → только закоммиченная версия + твоё да.

**Точки стыковки:** верховный хук (М2) поглощает дисц-часть. Судья (М4) досматривает разрушительное. AskUser-канал (М1) пишет расписки. Счётчики escape/оправданий → журнал (М1) + доска (М7).

---

## МАШИНА 7 — ВИДИМОСТЬ + ТЕНЕВОЙ РЕЖИМ + ВКЛЮЧЕНИЕ (поверх всего)

**Одной фразой:** доска «кто на посту» + здоровье судьи; сперва всё «тихо» (логирует, не блокирует), мерим, включаем по одному.

**На чём стоит:** все 1–6 (наблюдает и включает их).

**Что входит:**
- **Доска «кто на посту»** (🆕, TO-BUILD №12, остаток #5) — в STATUS.md: верховный хук ✓ / фундамент 3/3 ✓ / судья ✓ / роутер ✓. Владелец видит, а не гадает. Закрывает «тихую дыру при недонастройке» (забыл включить → никто не кричит).
- **Здоровье судьи + крик при тихой деградации** (J5) — судья включён, но падает «открыто» → громкий крик «пост пустой» (прецедент bootstrap-smoke). Связь с D27: сбой ИИ = деградация до кода + крик про деньги (бюджет кончился → ГРОМКО; сеть → тихий повтор).
- **Очередь одобрений в `/brain-retro`** (стык М3) — раздел «На одобрение» + сигнал «ждут: N» в STATUS.md.
- **Теневой режим (D28 шаг 3)** — новые гейты работают и ЛОГИРУЮТ, что бы заблокировали/эскалировали, реально НЕ блокируют. Мерим: долю ложных блоков, цену, объём эскалаций. **ИСКЛЮЧЕНИЕ (важно):** тихий режим — ТОЛЬКО для новых **дисциплинарных** ворот (М2 верховный хук / М3 роутер / М4 судья / дисц-часть М6). **Защита-пол (М1 + защитная часть М5/М6: секреты, runtime, force-push, подпись расписок) включена с первой секунды и тихим режимом НЕ покрывается** — иначе во время стройки зияет дыра в защите.
- **Подкрутка порогов (D28 шаг 4)** по реальным данным — пороги уверенности роутера, частоты escape, грань тривиал↔содержательное.
- **Включение по одному (D28 шаг 5)** — сперва мутации, потом чтения. Старые дисциплинарные хуки снимаем ПО ОДНОМУ, после того как новое доказало себя в тихом режиме (турникет временный, с понятным концом — крит-разбор #1, вариант B).

**Инвариант:** живая система во время стройки не ломается. Рубильник держит ВЛАДЕЛЕЦ (настройки мне закрыты) — это защита, не дыра (подсудный не распускает сторожей). H1/I-3 (простой owner-facing переключатель / усталость владельца) — НЕ давим сейчас, настроим по факту эксплуатации.

**Как проверяется отдельно:** доска показывает пост → выключить хук → доска показывает дыру + крик. Тихий режим → лог «заблокировал бы X», действие прошло. Включение одного гейта → старый снят, новый блокирует.

**Точки стыковки:** читает журнал (М1), статус всех хуков (М1–М6), очередь роутера (М3), здоровье судьи (М4). Пишет в STATUS.md (существующий генератор).

---

## КОВЕРИДЖ-ТАБЛИЦА — доказательство «ничего не пропущено»

26 пунктов пред-спеки → машина:

| Пункт | Решение | Машина |
|---|---|---|
| 1 разрушительные shell | 🟨 тонкий пол + судья | 6 |
| 2 sub-shell/цепочки | 🟨 разбор на атомы + суть | 6 |
| 3 git-трюки обхода | оставить (тонкий пол) | 6 |
| 4 git без одобрения | 🟨 AskUser-канал | 6 (канал — 1) |
| 5 git на чужой ветке | 🟨 ветка из worktree | 6 |
| 6 commit без тестов | 🟨 машинный GREEN | 5/6 |
| 7 запуск правленого скрипта | 🟨 корона самоизменения | 6 |
| 8 чтение secrets | 🟩 read-path-deny | 1 (+усил. 5) |
| 9 shell-чтение/запись нормативки | 🟩 portable канал + protected | 5 |
| 10 запись в runtime | 🟩 runtime-write-deny | 1 (+подпись 1) |
| 11 правка нормативки/памяти | 🟩 анти-отрава | 5 |
| 12 внешний MCP | 🟩 классификатор + outbound | 5 |
| 13 workflow/субагенты | 🟩 наследование пробой | 5 |
| 14 лок сессии | 🟩 parallel-lock + freshness | 5 |
| 15 default-deny | 🆕 верховный хук матчер=* | 2 |
| 16 действие без скила | 🆕 верховный хук + роутер | 2+3 |
| 17 код без теста (TDD) | 🟨 порядок машинно | 6 (+5) |
| 18 фейк-тест | 🟩 мутационная проверка | 5 |
| 19 safe-baseline | 🟥 удалить | 6 |
| 20 тайное дробление | 🟨 сигнал-растяжка | 6 |
| 21 TodoWrite липовый скил | 🟨 судья A2 + журнал | 4 (+1) |
| 22 само-ретро без скила | 🟨 гейт на последствие | 6 |
| 23 фраза-самооправдание | 🟨 структурная превенция | 6 |
| 24 llm-judge | 🟨 Судья A–I (J1–J10) | 4 |
| 25 coverage/memory тег | 🟨 машинный след + аудит | 6 (+2) |
| 26 escape-фразы | 🆕 escape Skill/AskUser | 6 |

12 TO-BUILD → машина: №1 верховный хук (2), №2 WebFetch/Search аудит (2), №3 неподдел. GREEN/RED (5), №4 журнал S1 (1), №5 наследование субагенту (5), №6 decomposition-растяжка (6), №7 судья J1/J3/J5/J6 (4), №8 routing-tag→AskUser (6), №9 сверка план↔след (2), №10 portable normative-канал (5), №11 pid-liveness (5), №12 доска+здоровье (7).

10 несущих механизмов → машина (= 7 принципов из шапки, воплощённых конкретикой): журнал S1 (1), заморож. план (2), судья-не-переопределяет-пол J9 (4), машинная правда владельцу E10 (6, cross-cut), подпись расписок P10-c (1), авто-снимок P1-b + freshness P14-c (6), доказательство наследования P13-a (5), мутационная проверка P18-a (5), матчер-всё + аудит дверей P15-b (2), роутер по сырой просьбе P16-e + высокий риск всегда скил P16-g (3).

### Ключевые решения дизайна (D / OQ) → машина

Коверидж-таблица выше доказывала покрытие **хуков** (26 пунктов + 12 to-build). Этот блок доказывает покрытие **логики** источника-1 (D-решения + открытые вопросы) — то, что владелец просил проверить. Перечислены несущие/спорные решения; остальные D1–D36 живут внутри перечисленных машин.

| Решение | Суть | Машина |
|---|---|---|
| D6 / OQ1 | волновая декомпозиция (под-план = новый круг) | 3 (+6 decomposition-сигнал) |
| D10 / D21 | судья всеобъемлющий, код-вперёд | 4 |
| D11 / D12 | без плана нет действия | 2 |
| D12 / D13 | семена writing-plans/AskUser (bootstrap стены) | 2 (через escape — 6) |
| D15 / D22 / D26 | два вида «без скила» → СТОП к владельцу | 3 (P16-c) |
| D17 | владелец видит ВСЕ трассы/под-планы (дерево) | 3 → 7 (доска/очередь) |
| D23–D25 | роутер = наставник | 3 |
| D27 | сбой ИИ = деградация + крик про деньги | 7 (J5) |
| D28 | режим внедрения (тихо → по одному) | 7 |
| D29 | ~~независимая сверка план↔сырая просьба~~ → **поглощена** слоем общения C-7 (артефакт+печать владельца на гейте-1) + закрытой дверью (ревизия 2026-06-04); хвост «просьба→шаг» = C-14-C | (нет отдельной) М3/М4 |
| D31 | оценщик постфактум (судит судью/роутер) | 4 (+3) |
| D32 | мыслительные скилы = семенной класс + Stop-гейт | 2 (режим) + 6 (P22) |
| D33 | ~~три режима~~ → **ДВА** (думанье/стройка); «болтовня» неприменима (призма владельца 2026-06-04, болтовня → claude.ai). Применение режима — механически в М2 (`decideMode`); смысловой нудж — М3 | 2 (механика) + 3 (смысл) |
| D34 / D35 | роутер вправе разбить/переделать план | 3 |
| D36 | самообъясняющие шаги + память спора + свежий каталог | 3 |
| Группа 6 | деньги: цена-разделитель + выжимка | 3 |
| Q-GRAPH | разведка начинается с графа | 3 |
| #3 крит-разбор | ручка «% разведки» + счётчик проб (слот СЕЙЧАС) | 3 |
| OQ4 | чтение как канал утечки под планом | 5 (read-path +content) |
| OQ7 | no_skill_found = СТОП, не свобода | 3 (P16-c) |

**Покрытие:** все 26 пунктов хуков + 12 to-build + **10 несущих механизмов** + ключевые D/OQ-решения привязаны к машинам. Оставшиеся D1–D9 / D14 / D16 / D18–D20 / D30 — внутри перечисленных машин (страж секретов D18 → М1/М5; финальный поток D30 → М2/М4). Дыр покрытия не выявлено — ни по хукам, ни по логике дизайна.

---

## ЧТО НЕ ВХОДИТ В ЭТУ КАРТУ (по делу, не пропуск)

- **Пошаговые TDD-шаги** (тест→RED→код→GREEN→commit, с точным кодом и путями) — пишутся в **детальных планах по каждой машине отдельно**, на основе этой карты. Карта задаёт ЧТО и в каком порядке; детальные планы — КАК по шагам.
- **Точная регистрация хуков в `settings.json`** — шаг владельца (Claude'у settings.json закрыт; до регистрации хуки инертны).
- **Две независимые починки кода** (`max_tokens` 1500→15000, fix `task_type`, 1996 тестов GREEN, коммит-предки `6a8c8494`) — уже сделаны, выкатываемы отдельно, вне этой стройки.

---

## СЛЕДУЮЩИЙ ШАГ

Карта готова. По команде владельца — детальный TDD-чертёж **по первой машине (Фундамент)**, затем по второй, и так вверх по зависимости. Каждый детальный план — через `superpowers:writing-plans`, исполнение — через `superpowers:subagent-driven-development`.
