# Handoff — переезд сессии (роутер-наставник), 2026-06-10

> Это самодостаточный промт для НОВОЙ сессии. Скопируй блок ниже целиком в новую сессию.
> Durable-копия чата (на случай потери). Зафиксированы все находки/решения ДР-1..6 + P1.

---

```
роутер-наставник. Подхвати работу из прошлой сессии. Кодовая фраза эпика: «роутер-наставник».

═══ КАК РАБОТАТЬ (жёсткие правила владельца — НАРУШАТЬ НЕЛЬЗЯ) ═══
• БЕЗ ОТСЕБЯТИНЫ. Только КОД и ДИЗАЙН. КАЖДОЕ утверждение — с цитатой (file:line или
  ДР-/D-номер). Прошлые сессии ехали из-за плохого чтения кода и фантазий — владелец ловил.
  Сомнение — читай ещё, не выдумывай.
• КАЧЕСТВО ПРЕВЫШЕ ВСЕГО. Скорость, экономия, цена, время — НЕ важны.
• Ничего сразу: сверь, прочитай, СПРОСИ. Каждую новую фазу/задачу и цепочку скилов —
  на согласование ПЕРЕД стартом.
• Коммиты/push/правки settings.json/keychain/ENV — делает ВЛАДЕЛЕЦ (git у Claude зажат
  стеной; GitHub-аккаунт suspended). Claude settings.json не пишет — даёт точный текст.
• Каждый ответ: 1-я строка «экономия:…», 2-я «coverage:…».
• Ветка main, чекаут: c:\моя\проекты\портал crm\Документация (русские «а/и» в пути — ловушка).
• Субагенты/Task/Workflow владельцем ЗАПРЕЩЕНЫ — всё инлайн.
• git — терминал владельца; && не работает в PS 5.1.
• CLAUDE.md в основном чекауте — ЧУЖАЯ ЗОНА параллельных сессий, НЕ трогать.

═══ ⛔ МЕХАНИКА СТЕНЫ И ESCAPE (КРИТИЧНО — без этого застрянешь) ═══
Оборона М1–М6 АКТИВНА (владелец включил). Стена `enforce-supreme-gate` в разговорном
режиме (нет замороженного плана) ПУСКАЕТ только семена (writing-plans / brainstorming /
discovery-interview / systematic-debugging / test-driven-development / requesting-code-review /
verification-before-completion) + чтения (Read/Grep/Glob/readonly-Bash/TodoWrite), а БЛОКИРУЕТ
всё мутирующее: запись/правку файлов, формальные скилы (audit-context-building / sharp-edges /
variant-analysis), запись кода.
Владелец выбрал режим (б): стену НЕ снимать, а ЭСКЕЙПИТЬ каждое мутирующее действие.
КАК: Claude показывает AskUserQuestion, где ОДНА из опций = строка FLOOR-ESCAPE (длинная,
>30 симв., иначе cosmetic-detector её срежет). Владелец выбирает её → хук-писатель
`enforce-askuser-answer-parser` (УЖЕ зарегистрирован в settings.json PostToolUse этой сессией)
пишет ПОДПИСАННЫЙ одноразовый грант, окно 5 мин. Затем Claude делает РОВНО одно мутирующее
действие — проходит. Грант ОДНОРАЗОВЫЙ (гасится после действия) — на каждое мутирующее
действие свой грант.
КАНОН строки (lowercase / прямые слэши / NFC, проверено по escape-grant.mjs:30-49 +
path-normalization.mjs:82-118):
  • запись/правка файла:
    FLOOR-ESCAPE: write:c:/моя/проекты/портал crm/документация/<путь файла в нижнем регистре>
  • вызов скила (канон = cwd, СКИЛ-АГНОСТИЧЕН — escape-grant.mjs:43-44):
    FLOOR-ESCAPE: write:c:/моя/проекты/портал crm/документация
Семена (systematic-debugging / brainstorming / verification-before-completion) escape НЕ требуют.
Один escape = одно действие. Несколько правок в файле — делай ОДНИМ Write (перезапись = одно
действие), не серией Edit.

═══ ГДЕ МЫ В ЭПИКЕ ═══
Эпик «роутер-наставник» — строим ЖИВОГО роутера-наставника (соавтор плана). Сейчас фаза
ДИЗАЙНА, пишем СПЕКУ. Стройка — потом, отдельной фазой (writing-plans).
Главный файл-спека (ПРОЧИТАЙ ПЕРВЫМ):
  docs/superpowers/specs/2026-06-10-router-mentor-live-rebuild-design.md
Состояние спеки: РЕВИЗИЯ R5. Прошла полную цепочку: черновик(R1) → audit-context-building(R1
цитаты) → sharp-edges(R2 §12) → variant-analysis(R3 §13) → systematic-debugging(R4 §14) →
2-й адверсариал(R5 §15) → self-review. На диске R5. Коммит R5: владельцу дана команда
git add + git commit -m "docs(router-mentor): спека живого роутера-наставника (R5 …)" —
ПРОВЕРЬ git log, закоммичен ли.
ВАЖНО: R5 — это БАЗА ДО редизайна. Дальше владелец в обсуждении переосмыслил разговорный
поток → 6 решений ДР + P1 (ниже). R6 будет КРУПНОЙ переработкой §4/§5/§6 спеки.

═══ ДВЕ ПРОБЛЕМЫ, ЗАПУСТИВШИЕ РЕДИЗАЙН (владелец) ═══
1. Разную литературу читать по-разному, разными скилами (худож./науч./закон/код). У нас был
   ОДИН подход (как к коду, так к спеке) — НЕПРАВИЛЬНО. → закрыто ДР-1/ДР-5.
2. Наставник слишком слеп. С нуля — ок; но проект в разгаре — наставник должен хотя бы
   поверхностно понимать проект, иначе советует вслепую. → закрыто ДР-3/ДР-P1.

═══ НОВЫЙ ПОТОК (владелец, богаче спеки §4) ═══
Всё = plan-с-ОБОСНОВАНИЯМИ-по-пунктам → роутер (граф проекта + граф скилов + карточки + промт +
план+обоснования + накопленный контекст/ответы) → согласование в 3 круга → тупик → ВЛАДЕЛЕЦ →
судья (пломба + контроль исполнения) → исполнить (прочитать/собрать ИЛИ спросить владельца ИЛИ
сделать) → по результату НОВЫЙ план (что уточнить/спросить владельца) → снова роутер → судья →
… итеративно. СВОБОДНЫХ действий НЕТ. Единственное пред-плановое: чтение ГРАФА проекта +
написание плана.

═══ РЕШЕНИЯ СЕССИИ (ДР-1..6 + P1) — ЯДРО, перенести в R6 дословно ═══
ДР-1 (гранулярность + чтение):
  • Единица плана = «уверенная растяжка до следующей НЕИЗВЕСТНОСТИ» (вар. B).
  • Роутер задаёт крупность + ГРОМКОСТЬ церемонии по сложности/риску (вар. C) через
    LEVEL_SKIP_CATEGORIES (router-engine.mjs:29) + detectHighRisk (:19). Пол C = atomic-план +
    роутер-выбор-скила-чтения, НИКОГДА не ноль.
  • Свободного чтения НЕТ. Свободно ТОЛЬКО: чтение графа + написание плана. Любое чтение
    СЫРЬЯ = гейченый шаг, роутер выбирает reading-скил под тип контента (= решение проблемы 1).
    Граница: пред-проверенная карта (граф) — свободно; свежее понимание из сырья — под воротами.
ДР-2 (свежесть): авто-ИНКРЕМЕНТАЛЬНОЕ освежение графа (по git-diff с последнего снимка) ПЕРЕД
  заходом к наставнику. Что именно освежать/слать — уточняет P1.
ДР-3 (понимание наставника + радары пропусков):
  • Слой 0 = прунённый граф-СТРУКТУРА (имена+связи+capabilities, БЕЗ содержимого) — ВСЕГДА
    (дёшево, «карта метро»). Это и есть «поверхностно».
  • Слой 1 = зона задачи (релевантная партиция, освежённая, + проверенный контекст). Роутер
    дозирует глубину. Наставник РАССУЖДАЕТ, не читает по умолчанию.
  • Пропуски ловим лестницей: граф-радар (файл-уровень: тронул X, граф связывает с Y — где Y?)
    + скелет-радар (раздел-уровень: grep заголовков/сигнатур, Claude отчитывается по КАЖДОМУ
    пункту скелета: затронуто/не релевантно/не читал) + строгий reading-скил (внутри-раздела,
    предотвращение, ДР-1) + машинная context-verity (верность цитат, НЕ наставник читает) +
    НАСТАВНИК МОЖЕТ САМ прочитать подозрительный файл/раздел (по конкретному подозрению, с
    обоснованием, нужным скилом, маленький бюджет — ПРОВЕРОЧНОЕ чтение критика, НЕ свободное
    чтение автора) + владелец (остаток). Сокращаем, не обнуляем (L2-пол).
ДР-4 (информированность vs независимость): информированный наставник + СЛЕПОЙ судья
  (judge-engine.mjs:12) — намеренная ПАРА. Захват-резистанс = РАСШИРЕНИЕ уже существующего
  «поспори-с-собой / не глотай молча / воздержание 5.2» (router-engine.mjs:107-109 + механика
  :152-153 confidence<threshold→abstain→эскалация) с «выбора скила» на разбор плана-ПО-ПУНКТАМ.
  НЕ новый механизм. Слепота судьи + owner-гейт — backstop'ы.
ДР-5 (выбор reading-скила): тип контента = из дешёвых метаданных (расширение + путь + узел
  графа) + grep-заголовок fallback; неоднозначно → воздержание 5.2 (переспрос). Рекурсии нет.
ДР-6 (СИММЕТРИЯ спора): спор наставник↔Claude ДВУСТОРОННИЙ. Любая сторона, выдвигая (роутер —
  дозапрос/чтение/правку/возражение; Claude — ОТКАЗ принять), ОБЯЗАНА дать обоснование.
  Не сошлись за 3 круга → к ВЛАДЕЛЬЦУ — в ОБОИХ направлениях.
ДР-P1 (граф 6305 узлов — НЕ слать целиком):
  • Прунинг мусора (build/node_modules/бэкапы/осиротевшее — targets ПРОВЕРИТЬ против реального
    graphify-out, НЕ выдумывать).
  • Партиция = вар. C: свернуть 1009 communities в ~10-15 человеко-именованных «районов».
  • Две резолюции: слой 0 = карта районов (всегда, дёшево); слой 1 = детали нужного района
    (роутер выбирает под задачу, освежается per ДР-2).
  • + Наставник вправе ДОЗАПРОСИТЬ соседний район (с обоснованием) для полной оценки — дешёвое
    чтение КАРТЫ (не файлов), отдельный бюджет, конструктивная форма воздержания. Лечит риск
    «дали не тот район».

═══ ЧТО ДАЛЬШЕ — 3 ВОПРОСА ВЛАДЕЛЬЦА + ПРЕДЛОЖЕННАЯ ЦЕПОЧКА (ждёт согласования) ═══
Q1: переписать спеку (R6) со ВСЕМИ ДР-1..6 + P1.
Q2: доработать НЕ ТОЛЬКО роутер, но СУДЬЮ + Машину 2 (стену), посмотреть взаимодействие со
    ВСЕМИ машинами (М1 журнал / М5 пол / М6 escape / М7) и доработать спеку с этим учётом.
Q3: посмотреть — усилит ли что-то из ДР РЕАЛИЗАЦИОННЫЙ цикл (не только разговорный).
ПРЕДЛОЖЕННАЯ ЦЕПОЧКА (НЕ начинать без «вперёд» владельца):
  Q2: 1.audit-context-building (прочитать РЕАЛЬНЫЙ код+дизайн машин М2/М3/М4 + швы М1/М5/М6/М7,
      без фантазий) [escape:skil] → 2.variant-analysis (куда КАЖДЫЙ ДР приземляется по машинам)
      [escape:skil] → 3.sharp-edges (footgun'ы межмашинных правок) [escape:skil] →
      4.systematic-debugging (противоречия между машинами) [SEED].
  Q3: 5.superpowers:brainstorming (что из ДР усиливает СТРОЙКУ) [SEED].
  Сборка: 6.R6 — переписать спеку начисто (Q1+Q2+Q3) [escape:запись] → 7.повторный адверсариал
      на R6 (sharp-edges + variant-analysis) [escape:skil×2] → 8.verification-before-completion
      [SEED] → 9.ревью владельца.
  Моя рекомендация по порядку: СНАЧАЛА анализ (шаги 1-5), ПОТОМ одна запись R6 (не переписывать
  трижды — находки Q2/Q3 изменят КАК писать базу).
  ОТКРЫТО на согласование с владельцем: (а) цепочка ОК? (б) порядок — анализ→одна R6 ИЛИ
  поэтапно 3 записи? (в) глубина чтения шага 1 — сфокусированно М2/М3/М4+швы ИЛИ все 7 машин?

ПЕРВОЕ ДЕЙСТВИЕ НОВОЙ СЕССИИ: подтверди, что прочитал спеку R5 + все ДР, переспроси у владельца
3 вопроса согласования цепочки (а/б/в выше). НЕ начинай шаг 1 без «вперёд». Когда «вперёд» —
запроси escape на audit-context-building (канон cwd) через AskUser.

═══ КЛЮЧЕВЫЕ ФАЙЛЫ (цитаты ПРОВЕРЕНЫ прошлой сессией — не перефантазируй) ═══
КОД:
  tools/router-engine.mjs — buildRouterPrompt(:98), :106 «Ты—РОУТЕР-НАСТАВНИК», :107-109
    поспори-с-собой/не-глотай/переспрос, :112 слоты трассы (candidates/chosen/why/twins/conf),
    :121 получает план, :140 runRouter(confidenceThreshold 0.5), :152-153 воздержание 5.2
    abstain→эскалация, :29 LEVEL_SKIP_CATEGORIES, :19 detectHighRisk, шапка :6-7 «live-wiring
    НЕ трогает». Зовут только тесты — живого нет (упущенный кирпич).
  tools/judge-engine.mjs — buildJudgePrompt(:44,55-57), :12/:47 «СЛЕП к переписке»,
    :15 validateVerdictSlots, :29 PREMORTEM_CLASSES, :11 consensusDecision, :19 VOTE_LAYOUTS.
  tools/enforce-supreme-gate.mjs (М2 стена) — :25-27 SEED_SKILLS/SEED_TOOLS, :41 isObserveOnly,
    :84 resolveStepPtr(R-27), :135-181 decide, :188 decideMode, :193 escapeGrantOpen (choke!),
    :196-198 разговорный режим.
  tools/escape-grant.mjs — :30-49 canonicalAction (skill→write:cwd скил-агностичен :43-44),
    :57-64 findOpenGrant, :78 escapeAllowsEvent, :96 loadFloorEscapes (key-gated).
  tools/path-normalization.mjs:82-118 pathNormalize. tools/plan-lock.mjs:226 refResolves.
  tools/judge-seal-channel.mjs:2-5 канал печати, :8-9 carve-out (деньги/3-круговой тупик→
    ВЛАДЕЛЕЦ ставит печать), :24-29 detectMoney.
  tools/askuser-answer-parser.mjs:192-203 toFloorEscapeRecord (парс FLOOR-ESCAPE).
ДИЗАЙН:
  docs/superpowers/specs/2026-06-10-router-mentor-live-rebuild-design.md (СПЕКА R5; §12 sharp-
    edges/§13 variant/§14 systematic-debugging/§15 предельные свойства presence≠substance +
    централизация escape).
  docs/superpowers/specs/2026-06-01-router-discipline-plan-anchor-design-notes.md (D-номера:
    D11/D12/D16:130/D24/D29:172/D30:178/D33/D34:190,274/D35:198/D36:217-218; §6.5; L2:172).
  docs/superpowers/plans/2026-06-03-router-mentor-master-roadmap.md (:136 A0/:141 роли ПОСЛЕ/
    :147+ секция МАШИНА 3 роли ДО/:149 K4-мина/:337 owner-гейт-1 на план).
  docs/superpowers/specs/2026-06-05-router-conversational-input-and-emergent-catch-design.md:
    16-17,46 (наставник НЕ кормить сырым живым контекстом — reasoned-решение, которое мы
    ОСОЗНАННО ревизуем: кормим ПРОВЕРЕННЫМ контекстом, не сырым).
  docs/superpowers/specs/2026-06-08-router-mentor-machine-7-design.md:69,246 enforce by
    construction. docs/superpowers/specs/2026-06-09-router-mentor-A1-judge-gate2-wiring-design.md
    (проводка судьи A1). docs/superpowers/specs/2026-06-05-router-mentor-machine-4-judge-design.md.

═══ КВИРКИ ═══
• vitest ТОЛЬКО из app/: cd app && node node_modules/vitest/vitest.mjs run --config
  vitest.config.tools.mjs <фильтры> --reporter dot. cwd между Bash-вызовами ненадёжен.
• keytar рабочий ТОЛЬКО в КОРНЕВОМ node_modules (в app/node_modules битый).
• settings.json под Read-deny — Claude его не читает; правит ВЛАДЕЛЕЦ по тексту от Claude.
• graphify-out = карта проекта (junction на spike worktree), ~6305 узлов / 1009 communities.

СТАРТ: подтверди, что прочитал спеку R5 + ДР-1..6+P1, задай 3 вопроса согласования цепочки,
дождись «вперёд». Без отсебятины. Качество превыше всего. Спрашивай перед каждой фазой.
```
