# Handoff-2 — переезд сессии (роутер-наставник), 2026-06-10 (после R6.2 + sub-plan A)

> Самодостаточный промт для НОВОЙ сессии. Скопируй блок ниже целиком.
> Durable-копия (на случай потери чата). Зафиксированы R6.2 + 6 решений + sub-plan A + остаток B-E.

---

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

═══ КАК РАБОТАТЬ (жёсткие правила владельца — НАРУШАТЬ НЕЛЬЗЯ) ═══
• БЕЗ ОТСЕБЯТИНЫ. Только КОД и ДИЗАЙН. КАЖДОЕ утверждение — с цитатой (file:line / ДР-/D-/O-номер).
  Прошлые сессии ехали из-за плохого чтения кода и фантазий. Сомнение — читай ещё.
• КАЧЕСТВО ПРЕВЫШЕ ВСЕГО. Скорость/экономия/цена/время — НЕ важны.
• Ничего сразу: сверь, прочитай, СПРОСИ. Каждую новую фазу/задачу и цепочку скилов — на
  согласование ПЕРЕД стартом (AskUserQuestion).
• Коммиты/push/правки settings.json/keychain/ENV — делает ВЛАДЕЛЕЦ. 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), запись кода.
Режим (б): стену НЕ снимать, ЭСКЕЙПИТЬ каждое мутирующее действие. КАК: AskUserQuestion, где ОДНА
опция = строка FLOOR-ESCAPE (>30 симв.). Владелец выбирает → `enforce-askuser-answer-parser`
(PostToolUse, уже зарегистрирован) пишет ПОДПИСАННЫЙ одноразовый грант, окно 5 мин. Затем РОВНО одно
мутирующее действие проходит. Грант ОДНОРАЗОВЫЙ — на каждое действие свой.
КАНОН (lowercase / прямые слэши / NFC — проверено по escape-grant.mjs:30-49 + path-normalization.mjs:38-39,82-118
+ caseFold=toLowerCase win32):
  • запись/правка файла: FLOOR-ESCAPE: write:c:/моя/проекты/портал crm/документация/<путь в нижнем регистре>
  • вызов скила (канон=cwd, СКИЛ-АГНОСТИЧЕН escape-grant.mjs:43-44):
    FLOOR-ESCAPE: write:c:/моя/проекты/портал crm/документация
Семена escape НЕ требуют. Один escape = одно действие. Несколько правок в файле — ОДНИМ Write (перезапись).
⚠️ УРОК ПРОШЛОЙ СЕССИИ: окно 5 мин истекает если владелец долго отвечает между AskUser(escape) и Write.
ЗАПРАШИВАЙ escape и делай мутирующее действие В ТОМ ЖЕ ХОДУ (минимальный зазор). Если Write заблокирован
«разговорный режим» — НЕ менять канон (он верен), а перезапросить свежий грант + Write немедленно.

═══ ГДЕ МЫ В ЭПИКЕ (после сессии 2026-06-10) ═══
Эпик «роутер-наставник» — строим ЖИВОГО роутера-наставника (соавтор плана). Фаза ДИЗАЙН закрыта,
ФАЗА ПЛАНИРОВАНИЯ начата (sub-plan A написан). Стройка — потом.

СПЕКА (ПРОЧИТАЙ ПЕРВОЙ): docs/superpowers/specs/2026-06-10-router-mentor-live-rebuild-design.md — **R6.2**.
  Путь: R1 черновик → audit-context-building → sharp-edges → variant-analysis → systematic-debugging →
  R5 2-й адверсариал → R6 (ДР-1..6+P1 §1.5 дословно + unified-цикл §4 + round-3 анализ РЕАЛЬНОГО кода
  машин М2/М3/М4 + швы) → R6.1 (round-4 ре-адверсариал: 8 SE-R7 + 3 системных анти-паттерна) →
  **R6.2 (6 MUST-fix open'ов разрешены дизайн-микропроходом)**. §0 = changelog, §1.5 = ДР дословно,
  §10 = O-вопросы TIERED (✅разрешено / 🟠design-choice), §11 = реестр цитат 13 файлов, §12-15 реестры.

6 РЕШЕНИЙ МИКРОПРОХОДА (в R6.2, дословно — НЕ переоткрывать без причины):
  ✅O2  context-verity: ГИБРИД — флаг при построении + freezePlan ОТКАЗывает печать артефакта с
        неразрешённой EXTRACTED (использует существующий чекпойнт, не mid-flow блок). §5.6.
  ✅O13 escape канон `skill:<полный input.skill>` нормализованный (lowercase/trim), НЕ суффикс. §6 NB.
  ✅O16 staleness: inline-поле {stale, commits_behind, uncommitted} в граф-секции промпта; СИГНАЛ
        каноничен, refresh — enhancement поверх (не «триггер ИЛИ сигнал»). §5.4.
  ✅O17 task-id: persisted first-plan-anchor (присвоен A0-хуком при ПЕРВОМ плане задачи, неизменен
        весь жизненный цикл; re-issue не сбрасывает). §6.3.
  ✅O18 judge_mode mismatch: WARN-лог + строка в owner-резюме гейта-1; fail-safe направление
        (→разговорный) СОХРАНЕНО, не блок. §7.3.
  ✅O19 MENTOR_PROBE_CAP=2 файла/круг (макс 6/задача при MENTOR_ROUND_CAP=3). §5.7.

ПЛАНЫ: docs/superpowers/plans/2026-06-10-router-mentor-subplan-a-context-verity.md — **sub-plan A НАПИСАН**
  (6 TDD-задач, placeholder-free: parseRef / resolveCitation / verifyArtifact / secure-default downgrade /
  artifactHasUnresolvedExtracted guard / регрессия; wiring guard'а в plan-lock.freezeArtifact ОТЛОЖЕН в C).

ДЕКОМПОЗИЦИЯ R6.2 на 5 sub-plan (writing-plans Scope Check — каждый = работающий тестируемый софт):
  A (НАПИСАН) — проверенный контекст: context-verity.mjs + артефакт {id,claim,ref,kind} + secure-default. §5.5/5.6.
  B — слоистый project-граф + staleness: прунинг (targets ПРОВЕРИТЬ против graphify-out!) + ~10-15 районов
      (свёртка 1009 communities) + inline staleness-поле (✅O16). §5.3/5.4. Зависит: graphify-out.
  C — ЖИВОЙ ШОВ наставника (ЯДРО): A0-хук пробуждения + buildRouterPrompt-вход (проверенный контекст +
      журнал переговоров задачи + слой-0/1 граф) + runRouter live caller + журнал переговоров tamper-evident +
      task-id (✅O17) + mentor-вердикт freeze-gate на freezePlan choke (СОБСТВЕННЫЕ слоты, не судьи) +
      wiring artifactHasUnresolvedExtracted из A в freezeArtifact (✅O2). §6/6.1/6.3. Зависит: A + B.
  D — дисциплина чтения: reading-typing gate (вид-2 raw-read, impl-only) + reading-скил селектор (ДР-5,
      machine-derived) + conversational read-LOG (SE-R7-5) + MENTOR_PROBE_CAP=2 (✅O19). §5.8/6.7/5.7.
      Аддитивно к стене (CD-3).
  E — footgun-фиксы: escape `skill:<name>` (✅O13, escape-grant.mjs canonicalAction) + judge_mode WARN
      (✅O18) + detectMoney сузить (O11) + loop-termination (§4, владелец/судья gate-3). Существующие машины.

═══ ЧТО ДАЛЬШЕ — выбор владельца (НЕ начинать без «вперёд») ═══
Варианты: (1) writing-plans sub-plan B/C/D/E (по одному, сверять структуру ДО записи); (2) реализация
sub-plan A инлайн (executing-plans, Task 1→6, каждый код-Write под escape, регрессия tools-vitest);
(3) что-то ещё по решению владельца. ПЕРВОЕ ДЕЙСТВИЕ: прочитать R6.2 + sub-plan A + этот handoff,
подтвердить, спросить владельца какой из вариантов, дождаться «вперёд».

⚠️ Файлы НЕ закоммичены (git зажат у Claude). Спека R6.2 + sub-plan A + этот handoff на диске uncommitted.
Команда владельцу: git add docs/superpowers/specs/2026-06-10-router-mentor-live-rebuild-design.md
  docs/superpowers/plans/2026-06-10-router-mentor-subplan-a-context-verity.md
  docs/superpowers/specs/2026-06-10-router-mentor-session-handoff-2.md && git commit -m "docs(router-mentor): R6.2 + sub-plan A + handoff-2"

═══ КЛЮЧЕВЫЕ ФАЙЛЫ КОДА (цитаты сверены построчно round-3, 13 файлов) ═══
  tools/router-engine.mjs (М3 наставник, НЕ живой :6-7) — buildRouterPrompt:98, runRouter:140,
    воздержание 5.2 :152-153, LEVEL_SKIP:29, detectHighRisk:19, groundTrace:73-79, catalog/graph :99,148.
  tools/judge-engine.mjs (М4 судья слеп :12) — buildJudgePrompt:44, validateVerdictSlots:15,
    VOTE_LAYOUTS:19-27 (gate3 goal_achieved :26), classifyByReversibility:67-70, runJudge:81-112.
  tools/enforce-supreme-gate.mjs (М2 стена) — isSeed:31-36, isObserveOnly:39-64 (Read always-allow :43),
    decideMode:188 (escape choke :193 ПЕРВОЙ строкой :194), decide:135-181, judge_mode whitelist :211-216,
    Δ7 разрушительное :170-172, Δ3 журнал-до-allow :244-249, R-27 resolveStepPtr:84.
  tools/escape-grant.mjs — canonicalAction:30-49 (Skill→write:cwd агностичен :43-44), findOpenGrant:57-65,
    окно 5мин FLOOR_ESCAPE_WINDOW_MS:17, loadFloorEscapes key-gated :96-104.
  tools/askuser-answer-parser.mjs — toFloorEscapeRecord:192-203, verifyFloorEscapeRecord:222-229.
  tools/plan-lock.mjs — freezePlan:62, freezeArtifact:194, refResolves:226, validatePlanTree:139-154,
    assertValidJudgeMode:53-57, treeLeafAt:126-135.
  tools/judge-seal-channel.mjs — sealOnApproval:48-67, detectMoney MONEY_RE :23-24 (подстрочный, O11),
    requiresOwnerSeal:33-36 (carve-out деньги/тупик→владелец).
  tools/classify-destructive.mjs — FLOOR_RE:29-39, classifyDestructive:54-67.
  tools/action-journal.mjs (М1) — хеш-цепь computeEntryHash:17, verifyChain:53-68, assertSafeSessionId:77-82.
  tools/enforce-judge-gate.mjs (A1/M7) — режимы :6-8,209-225, runJudgeGate:55-82 (degraded-GO :67-69,
    wired :81), extractGate2Product:129-135, sealOnWiredGo:233-250.
  tools/seal-orchestration.mjs — sealArtifact:25, sealPlan:36.
  tools/graphify-safe-update.mjs — post-commit :header, doc→флаг :127-141, код→AST-merge :143-190.
  tools/path-normalization.mjs — caseFold:38-39 (toLowerCase win32), pathNormalize:82-118 (realpath→caseFold→
    forward-slash→NFC).

═══ КЛЮЧЕВЫЕ ФАЙЛЫ ДИЗАЙНА ═══
  СПЕКА R6.2 (выше). design-notes 2026-06-01 (D11/D12/D16:130/D24/D29:172/D30:178/D33/D34:190,274/D35:198/
    D36:217-218; L2:172). master-roadmap 2026-06-03 (A0:136 / роли ПОСЛЕ:141 / ДО:147+ / K4-мина:149 /
    owner-гейт-1:337). conversational-input 2026-06-05:16-17,46 (НЕ кормить сырым — осознанно ревизуем).
    machine-7 2026-06-08:69,246. A1-judge-gate2-wiring 2026-06-09. machine-4-judge 2026-06-05.
    memory feedback_asymptote_floor (asymptote ~0.5% irreducible).

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

СТАРТ: прочитай R6.2 + sub-plan A + этот handoff, подтверди, спроси владельца (B/C/D/E план ИЛИ реализация A
ИЛИ другое), дождись «вперёд». Без отсебятины. Качество превыше всего. Спрашивай перед каждой фазой.
```
