# Роутер-наставник — вход + контроль разговорной фазы + ловля «всплывающих» нужд — дизайн

**Кодовая фраза возобновления:** `роутер-наставник`

**Статус:** дизайн согласован с владельцем 2026-06-05 (через `superpowers:brainstorming`). Это дополнение/поправка к уже зафиксированному снаряжению Машины 3 (`2026-06-03-router-mentor-master-roadmap.md` §«МАШИНА 3» + `2026-06-04-router-mentor-m3-shape-and-k4-design.md`). Меняет **одно несущее правило (P16-e)** и добавляет 4 механизма ловли мелочей.

**На чём стоит:** Машины 1 (фундамент) + 2 (стена/замок) собраны; Машина 3 (роутер: контракты 3-A, граф узлов 3-B, машина охвата 3-C, движок 3-D, очередь 3-E) собрана. Часть правок ниже **меняет уже построенный код Машины 3** (вход/выход `router-engine`, схема контракта, граф зависимостей), часть — **контракт к Машине 4** (линза пре-мортема на Гейте-1).

---

## 1. Проблема (что не так в текущем дизайне)

Несущее правило **P16-e** сейчас: «роутер работает по СЫРОЙ просьбе владельца, НЕ по пересказу Claude». Это убирает риск, что контроллер (я) подкручу маршрут своим пересказом. **Но платой стала смена ролей:** в разговорной фазе (1а) роутер *ведёт*, а контроллер *исполняет* — тогда как в фазе стройки (1б) наоборот: контроллер *производит* план, роутер *критикует*. Две разные схемы в одной системе.

**Возражения владельца (приняты):**
- **(а) Роли.** У контроллера шире контекст и «фантазия»; роутер — узкий спец-проверяльщик. Производить разговорный план должен тот, у кого контекст (контроллер). Плюс **единообразие** логики (владелец-человек не держит в голове две разные схемы — чем единообразнее, тем лучше).
- **(б) Контекст.** Роутер физически не может писать план разговора — он не видит живой контекст переписки. Его естественная роль — сказать «ответ заказчика и твои правки в план НЕ соответствуют».

**Ключевое наблюдение:** интент P16-e (нет подкрутки маршрута пересказом) можно сохранить, **не меняя ролей** — если дать роутеру не пересказ, а **сырые слова владельца как якорь** рядом с моим планом.

---

## 2. Решение по входу и ролям (поправка к P16-e)

### 2.1 Симметрия фаз
Разговорная фаза (1а) получает **ту же форму, что фаза стройки (1б):**
**контроллер ПРОИЗВОДИТ разговорный план → роутер КРИТИКУЕТ → опора = сырые слова владельца** (в 1б опора = опечатанный артефакт).

### 2.2 Вход роутера в разговорной фазе
Роутер получает три вещи (НЕ мой пересказ):
1. **сырой стартовый промпт владельца** (дословно);
2. **все сырые ответы владельца по порядку** (полная накопленная история, не только последний — иначе тихо потеряется ранний ответ, и роутер этого не поймает);
3. **мой текущий разговорный план** (вопросы + рекомендованные навыки).

### 2.3 Работа роутера = сверка верности
Роутер проверяет: **мой план честно отражает то, что владелец реально сказал?** Возвращает расхождения вида «владелец сказал X (ответ №N) — в плане X нет / искажён». Это та же роль, что в 1б (критик плана).

### 2.4 Анти-внушение (обязательное правило)
Риск: роутер, видя мой уверенный план, **поддакнет** ему вместо самостоятельного чтения сырых слов. Лечение — **порядок чтения зашит в построитель промпта:**
1. сперва роутер **сам** выводит из сырых слов «что просил владелец» (независимый слот трассы);
2. **потом** сверяет с моим планом (слот «расхождения»).
Оба слота — **обязательные структурные слоты трассы** (как существующий валидатор трассы 5.1): пустой слот → невалидно (механическая проверка, не «честное слово» роутера). Это не убирает остаточную вероятность поддакивания полностью (роутер — ИИ), но делает независимый вывод **обязательным и проверяемым по форме**.

### 2.5 Что НЕ меняется
- Анти-подкрутка маршрута сохранена: якорь = **сырые слова владельца**, не мой пересказ. Интент P16-e цел.
- В фазе стройки (1б) и на гейтах — без изменений (там роутер уже критик, судья уже слеп к разговору).

---

## 3. Каденс проверки (гибрид «в»)

Две тревоги разведены — у них разные лекарства и разный каденс:

| Что проверяем | Чем | Когда |
|---|---|---|
| **Верность** (план vs сырые ответы) — тяжёлая полная сверка | роутер (LLM) | при **сборке/пересборке** плана |
| **Всплывшая озвученная нужда** (мелочь в последнем ответе, которой нет в плане) | роутер, **лёгкий узкий проход** («в этом последнем ответе есть что-то, чего нет в плане?» — вход = последний ответ + план, не полный пересчёт) | **после каждого ответа** |
| **Полнота по названным нуждам** (дыра/сирота/цикл) | сверщик полноты (механический, $0) | **после каждого ответа** + на Гейте-1 |

**Обоснование лёгкого per-ответ прохода:** при батче из 5–6 ответов мелочь (озвученная нужда, напр. «сделай отступ») **тонет** среди материала → шанс пропуска выше. Отдельный взгляд на каждый ответ даёт чистый шанс поймать. Сверщик полноты бесплатен → гоняется на каждый ответ без вопросов; дорогой только роутер → его лёгкий проход узкий и дешёвый, полный — реже (при пересборке).

**Размер-страховка:** план пухнет (десятки вопросов / несколько независимых тем) → это **сигнал дробить** на волны / под-разговоры, каждый — полностью проверяемый. Не гнать плоский монстр. *(Авто-волны — отложенный пункт R-08; принцип «дроби, не держи монстра» действует и до их вшивки.)*

---

## 3А. Диалог роутер↔контроллер + контроль разговорной фазы (решения 2026-06-05)

### Роли — равный диалог, не диктовка (решение 1)
Обмен «контроллер предложил план → роутер критикует» — НЕ одна реплика и НЕ диктовка (ни «роутер начальник», ни «контроллер начальник»). Это **короткий коллегиальный диалог** (предложил → возразил → ответил/принял → сошлись), где истина рождается в споре и где **может зацепиться мелочь**. Роутер — наставник, не диктатор.

### Граница петли — 3 прохода → владелец + судья в конце (решение 2)
Диалог роутер↔контроллер по одному несогласию ограничен **3 проходами**; не сошлись → **эскалация владельцу** (та же тройка, что апелляция C-12). Финальный стоп — **судья на Гейте-1** (артефакт рано или поздно идёт к нему). Двойной терминатор: раунды→владелец (по ходу) + Гейт-1 (в конце). Вечного круга нет.

### Контроль покругово (решение 3 — лёгкий, НЕ пошаговая стена)
Разговорный план **не печатается** (эмерджентный) → пошаговой стены, как на стройке, НЕТ (намеренно — «не душить, это не реализация»). Вместо неё — покруговая сверка перед пересборкой плана. **Новый план не рождается, пока текущий круг не сошёлся:**
- **Код ($0, НЕ ИИ):** скил реально вызван (журнал) + ни один заданный вопрос не повис (есть ответ). Требует трекинга вопросов как **слотов (id)**, не вольным текстом.
- **Роутер (ИИ):** ответы по смыслу легли в план (я не исказил/не потерял — сверка с **предыдущим** планом).
- Пробел (вопрос повис / скил не вызван / искажение) → **мягкий возврат** ко мне (дозадай / перезадай нужным скилом). Я в отказ → эскалация владельцу (в пределах 3 проходов).
- *(Каденс этих проверок — см. §3: лёгкий проход на каждый ответ, полная сверка при пересборке плана. §3А описывает ЧТО проверяется покругово; §3 — КОГДА.)*

### Контроль на ВЫХОДЕ разговора — ТРИ проверки подряд (щит от своенравности контроллера)
Когда я объявляю «готово» (артефакт полон), на стыке разговор→стройка идёт **ОДНА сквозная лесенка из трёх шагов** (у разных хозяев); провал любого → стоп раньше:
1. **Существование ($0, код) — М4 (пред-слой Гейта-1):** все вопросы отвечены + скилы вызваны. Чистое «было/не было».
2. **Верность спеки (ИИ, роутер) — М3:** готовая спека честно отражает сырые ответы владельца + одобренный план. **Это ловит «прошёл движения, а написал своё»** — существование само по себе своенравность НЕ ловит. Разошлось → назад ко мне / к владельцу.
3. **Полнота + пре-мортем (ИИ, судья) — М4 (Гейт-1):** машина охвата (дыра/сирота/цикл) + линза K7 «что от решений сломается?». **Ум — только здесь.**

GO всех трёх → артефакт владельцу (K1) → печать. *Честный остаток:* шаг 2 — это ИИ; грубое «написал не то» ловит, тонкую подмену смыслом может пропустить → последний рубеж владелец (артефакт всегда перед глазами, K1).

### Граница с реализационным планом (по факту, для ясности)
Реализационный план **печатается** → пошаговая стена матчит каждое действие (op+object) + закрытая дверь + надзор A2 (скил по журналу) + стоп на расхождении. Разговорный план **не печатается** → пошаговой стены нет, контроль лёгкий (покруговая сверка + выходная лесенка из трёх).

**Две оси единообразия — НЕ путать:** по оси **РОЛЕЙ** единообразие достигнуто (везде «контроллер производит → роутер критикует» — и в 1а, и в 1б; это и есть плюс из §1а). По оси **ПРИНУЖДЕНИЯ** единообразия НЕТ намеренно (стройка — печать + пошаговая стена; разговор — лёгкий контроль), потому что **природа фаз разная** (реализация vs думанье). Вариант А.

---

## 4. Ловля «всплывающих» нужд — 4 механизма

Разделяем нужды: **пассивные** (известны заранее из карточек навыков — большой охват) и **всплывающие** (рождаются по ходу беседы). Всплывающие делятся на **озвученные** (владелец сказал) и **невысказанные следствия** («больше отступ → поедет мобильный», вслух про мобильный никто не сказал).

Принцип отбора механизмов (владелец): **делать умным, а не загонять в стойло.** Отвергнут «журнал слепых зон» (накопленный чек-лист прошлых промахов) — он замораживает умную половину в штамп (тот же класс, что отклонённый L6 «скелет-прецедент»). Берём 4:

### #1 — Богатые ЧЕСТНЫЕ контракты навыков (сорт «механизация повторяющегося»)
Карточка навыка честно объявляет, что ему **присуще по природе** (фронт по сути делает адаптив → в его `needs`/`constraints` входит «мобильный», «доступность», «состояния ошибок»). Тогда повторяющееся следствие становится **названной нуждой** и ловится бесплатным сверщиком **каждый раз**, а не «если додумаюсь в моменте».
- **Грань с отвергнутым #5 (жёсткая):** «что инструменту нужно ВСЕГДА по его природе» — да (честное самоописание = контракт, фундамент C-13). «Что мы прошлый раз прошляпили» (растущий проектный список промахов) — **нет** (это баран). Запрет превращать поле в накопительный чек-лист промахов.
- Развивает отложенный R-11 (наполнение контрактов ~84 узлов) — но качеством и честностью полей, не числом узлов.

### #2 — Граф зависимостей РЕШЕНИЙ (сорт «тупой наводчик»)
**Это НОВЫЙ граф, не существующий.** Машина охвата уже строит граф зависимостей **НАВЫКОВ** (узлы=скилы, рёбра=needs↔produces) — он про другое. Здесь нужен **отдельный граф зависимостей решений/секций артефакта** (по мотиву того же приёма, но свой): **изменил решение → граф подсвечивает зависимые СЕКЦИИ на перепроверку** («поменял отступ → вёрстка/мобильный зависят → перепроверь»). Это **не размышление**, а механическое **наведение внимания** на уже-связанные куски. Тупому наводчику положено быть тупым — мыслителя не клетит.
- *Граница:* ловит только **объявленные** зависимости (тот же предел названности).
- *Реализация:* секции артефакта несут поле «зависит от §X» (расширение схемы артефакта); при смене решения — обход зависимых секций.

### #3 — Реальный вызов доменного навыка рано (сорт «добавить ума»)
Доменный навык (`frontend-design`) про мобильный знает по природе и **рассуждает свежо**. Улучшение: в фазе артефакта **реально вызывать доменный навык** (журнал-проверяемо, K2-принцип), а не мне «пересказывать, что бы он сказал». Лучший ловец доменных следствий — сам домен-эксперт.

### #4 — Линза пре-мортема у судьи на Гейте-1 (сорт «добавить ума») → КОНТРАКТ К МАШИНЕ 4
К проверке полноты на Гейте-1 добавить **отдельный вопрос**: «какие следствия этих решений НЕ закрыты?» Это **другая линза**, чем «полно ли» — разные линзы ловят разное (диверсификация > повтор).
- *Честно:* это размышление ИИ → **поднимает шанс, не гарантирует.**
- *Где живёт:* Машина 4 (судья, Гейт-1). **Записывается как контракт к Машине 4** (в один ряд с K1/K5/K6): «Гейт-1 несёт линзу пре-мортема как отдельный обязательный слот вердикта».

---

## 5. Честный потолок (зафиксировано, не убирается)

Ни один механизм не ловит **по-настоящему новое, невысказанное и не-подразумеваемое контрактом** следствие с гарантией — это остаётся на **контроллере (соображаю) + судье + владельце**. Механизмы #1/#2 **сужают** зазор, превращая повторяющееся в механически-проверяемое; #3/#4 добавляют думающих (вероятностно). До нуля не доводится — тот самый предел ~0.5% («субъективная оценка качества» + «эфемерная мысль»). Это заложено сознательно.

---

## 6. Куда садится при сборке

| Кусок | Машина | Тип |
|---|---|---|
| Вход роутера (сырой промпт + история ответов + мой план), роль критика, анти-внушение (слоты трассы), поправка P16-e | **Машина 3** (`router-engine` — меняем вход/выход + построитель промпта + валидатор трассы) | правка построенного кода + тесты |
| Каденс «в» (лёгкий per-ответ проход + полная сверка при пересборке) | **Машина 3** | правка/добавление |
| Диалог роутер↔контроллер (реш.1) + граница 3 прохода → владелец (реш.2) | **Машина 3** (движок + эскалация) | правка/добавление |
| Покруговой контроль (реш.3): код существование + роутер верность; мягкий возврат | **Машина 3** (роутер) + чуть кода (журнал) | правка/добавление |
| Выходная лесенка (существование $0 → роутер-верность спеки → судья) | **М4** (существование + судья) + **М3** (роутер-верность) | правка кода + контракт M4 |
| #1 богатые честные контракты | **Машина 3** (схема контракта 3-A — поля; + наполнение R-11 как данные) | схема (код) + данные |
| #2 граф зависимостей решений | **Машина 3** (расширение машины охвата 3-C / схемы артефакта) | правка кода + тесты |
| #3 реальный вызов доменного навыка рано | **Машина 3** (дисциплина движка 3-D, journal-проверка K2) | правка/дисциплина |
| #4 линза пре-мортема на Гейте-1 | **Машина 4** (контракт, ещё не построена) | контракт к M4 |
| Поправка P16-e в мастер-карте | нормативка (`master-roadmap` §«МАШИНА 3» + §несущие) | правка дока |

---

## 7. Риски и открытые точки (честно)

- **R1 — анти-внушение не абсолютно.** Обязательный независимый слот трассы делает поддакивание видимым по форме, но роутер-ИИ может заполнить слот формально. Остаточный риск; механический валидатор ловит только пустоту слота, не качество мысли. Принимаем (часть потолка ~0.5%).
- **R2 — стоимость лёгкого per-ответ прохода.** Это вызов LLM на каждый ответ (узкий, дешевле полного, но не $0). Точную экономику меряем в тихом режиме (D28); порог «когда лёгкий проход нужен» подкручивается данными.
- **R3 — #2 и #1 ограничены названностью.** Граф зависимостей и сверщик ловят только объявленные связи/нужды. Это известный предел, добивают #3/#4 + владелец.
- **R4 — грань #1↔#5.** Поле «слепые зоны» обязано остаться честным самоописанием навыка; контроль, чтобы не сползло в накопительный проектный чек-лист (ревью при наполнении контрактов).
- **R5 — изменение построенного кода M3.** Вход/выход `router-engine` и схема контракта меняются → правки покрываются TDD; существующие тесты не должны падать (регрессия tools-only).
- **R6 — порядок включения.** Как и K4, живой роутер активируется только после Машины 4 и в режиме D28 («сперва тихо»). До этого — код есть, не зарегистрирован.
- **R7 — «вопросы как слоты-id» (условие, не опция).** Механическая проверка «нет повисших вопросов» работает, только если вопросы трекаются как слоты с id (я помечаю «вопрос №N задан/отвечен»). Без id попытка матчить вольный текст сползает из кода в ИИ — тогда «$0 механика» становится призраком. Это требование реализации покругового контроля.
- **R8 — выходная роутер-сверка спеки — это ИИ.** Шаг 2 выходной лесенки ловит грубое «написал не то», тонкую смысловую подмену может пропустить → последний рубеж владелец (K1). Часть потолка ~0.5%, не механическая гарантия.

---

## 8. Что НЕ входит

- Реализация Машины 4 (судья) — отдельно; #4 здесь только контракт.
- Live-wiring (регистрация в settings.json, реальные вызовы Sonnet) — шаг владельца + режим D28.
- Авто-волны (дерево указателей) — отложенный R-08; здесь только принцип «дроби монстра».
- Наполнение контрактов ~84 узлов — данные (R-11), не код этого дизайна.

---

## СЛЕДУЮЩИЙ ШАГ
По одобрению владельцем этого документа — детальный TDD-план через `superpowers:writing-plans` на правки Машины 3 (вход роутера + каденс + #1 схема + #2 граф зависимостей + #3 дисциплина) и запись контракта #4 в аварийный блок Машины 4. Поправка P16-e в мастер-карте — частью того же плана.
