# Машина 5 — handoff в новую сессию (после Пакетов 1-2)

> **Это готовый промт.** Скопируй блок «=== ПРОМТ ДЛЯ НОВОЙ СЕССИИ ===» целиком в новую сессию.

Кодовая фраза эпика: **«роутер-наставник»**.

---

## === ПРОМТ ДЛЯ НОВОЙ СЕССИИ ===

роутер-наставник — ПРОДОЛЖИТЬ РЕАЛИЗАЦИЮ Машины 5 с Пакета 3.

Продолжаем эпик «роутер-наставник» (цепочка план→роутер→судья→владелец→ПОЛ).
Машина 5 (несущий пол) строится по плану. Пакеты 1-2 уже сделаны и закоммичены.
Твоя задача — продолжить реализацию С ПАКЕТА 3, СТРОГО соблюдая алгоритм
использования скилов (п.4 — нарушать ЗАПРЕЩЕНО).

1. ДЕРЕВО (вся работа здесь, НЕ в основном репо):
   путь: c:\моя\проекты\портал crm\Документация\.claude\worktrees\brainrepo
   ветка: worktree-brainrepo
   Все git/vitest — с этим путём. «parallel session lock» → закрой второе окно
   Claude на этом дереве; замок протухнет за 5 минут.
   ОПЕЧАТКА-ловушка: «Документация» — русские а/и (не украинская «і»).

2. ПРОЧИТАТЬ ПЕРВЫМ:
   - Spec: docs/superpowers/specs/2026-06-07-router-mentor-machine-5-floor-design.md
     (§3 пять блоков + §10 «Амендмент» Δ1-Δ9 + N1/N5).
   - План: docs/superpowers/plans/2026-06-07-router-mentor-machine-5-floor.md
     (шапка «Ревизия R1»; Пакеты 3-8 — задачи+критерии+линзы, бит-сайз пишется
     just-in-time на RED).
   - Этот handoff: docs/superpowers/plans/2026-06-07-router-mentor-machine-5-handoff-session2.md
     (раздел «СОСТОЯНИЕ» ниже — что уже сделано и какие расхождения план↔код вскрыты).

3. ГДЕ СТОИМ (HEAD = b6d06ede):
   - Машины 1-4 собраны+переаудичены ранее; М4 инертна ($0).
   - Машина 5 Пакет 1 — ГОТОВ, commit 22b84fbb (classifyDestructive двухуровневый
     {floor,suspicious} + rewire a2CaseSelect/detectHighRisk; оба локальных
     DESTRUCTIVE_RE удалены; Δ9-б seed-инвариант m5-floor-invariants.test.mjs).
   - Машина 5 Пакет 2 — ГОТОВ, commit b6d06ede (несущий пол: tools/floor-decide.mjs +
     tools/enforce-floor.mjs matcher '*' + дверь владельца Δ1 read-only + Δ7
     defense-in-depth в supreme-gate + C4 migrate:fresh/refresh/reset убраны из
     router-gate whitelist → default-deny).
   - Базовая регрессия tools-only сейчас: **2649 passed + 2 skip** (новый baseline).
   - НАЧАТЬ: Пакет 3 (floor-signer + RECEIPT_DOMAINS.M5_GREEN + occurrence).

4. ПЛАН СКИЛОВ — HARD-RULE, НАРУШАТЬ ЗАПРЕЩЕНО. Исполнение ИНЛАЙН через
   superpowers:executing-plans. Суб-агенты / Task / Workflow / ultracode ЗАПРЕЩЕНЫ.
   Петля на КАЖДЫЙ пакет:
   (1) executing-plans ведёт пакет;
   (2) audit-context-building — ТОЛЬКО Пакеты 4,5,7 (трогают существующий код M1-M4/
       хуки); на net-new Пакетах 3,6,8 ПРОПУСТИТЬ (понимать нечего, скил для
       существующего кода);
   (3) test-driven-development — RED→GREEN, реальный expect в изменённом фрагменте;
   (4) линзы: focus-линза пакета из таблицы плана ОБЯЗАТЕЛЬНА; две другие
       (sharp-edges / корректность / agentic-actions-auditor) — по риску, не вслепую;
   (5) requesting-code-review инлайн (суб-агент запрещён → самопроверка по чеклисту);
   (6) verification-before-completion — без свежего прогона «готово» НЕ говорить;
   (7) regression (quick per-пакет, full в конце) — sentinel ≥2649 passed + 2 skip.
   Спец: systematic-debugging при ЛЮБОМ непредвиденном красном (НЕ угадывать фикс!);
   verify на Пакете 4 (живой прогон тулчейна после сужения node-whitelist — RISK);
   finishing-a-development-branch только под слово владельца «пуш».
   ЗАПРЕЩЕНО: пропускать audit-context-building на 4/5/7; линзы вслепую вместо focus;
   угадывать фикс вместо systematic-debugging; код до RED; два инструмента на задачу;
   «готово» без verification; суб-агенты.

5. ЖЁСТКИЕ ПРАВИЛА: commit-not-push (пуш только по слову «пуш»); эпик в памяти +
   spec/план/handoff в worktree, НЕ в основном CLAUDE.md (worktree-эксцепшн);
   владельцу — простым языком, код/память — технически; активация хуков в
   settings.json (enforce-floor + будущие) — шаг ВЛАДЕЛЬЦА, не код (до регистрации
   пол инертен); каждый ответ: 1-я строка «экономия:…», 2-я «coverage:…».

6. КВИРКИ (проверено в сессии 1):
   - vitest в worktree — одной АБСОЛЮТНОЙ командой, без cd и без &&:
     node "<wt>\app\node_modules\vitest\vitest.mjs" run --root "<wt>\app" --config "<wt>\app\vitest.config.tools.mjs" [фильтр]   (+ --reporter dot для сводки)
   - git commit через PowerShell, БЕЗ переменных, по одной команде с литеральным путём:
     git -C "<wt>" add <files>   потом отдельно   git -C "<wt>" commit -F "<wt>\.scratch\msg.txt"
     («Can't find lefthook in PATH» — шум.)
   - PowerShell/Bash-гейт режет цепочки (&&/;/|) с мутирующей частью (C13) и sort —
     по одной простой команде.
   - Glob с {скобками} и tools/+path на кириллице глючит → используй **/имя.mjs.
   - ХУК tdd-real-test-verifier (важно!): (а) НЕ распознаёт it.each( как тест-блок
     (regex /\b(test|it)\s*\(/) → пиши for-of + плоский it(); (б) на Edit тест-файла
     new_string ОБЯЗАН содержать и expect(+it(, И строковый литерал с basename
     prod-файла, отредактированного в ЭТОЙ сессии (coverage) — иначе no_coverage.
     Решение: объединяй import+тест в один Edit, ИЛИ упомяни имя модуля
     (напр. 'classify-destructive') в describe-заголовке/строке. Чисто-import Edit
     тест-файла отклоняется (no_test_block/no_expect_call).
   - Базовая регрессия tools-only: 2649 passed + 2 skip.

7. СТАРТ: прочитай spec §3 (Блок 2) + §10 (Δ4) и план (Пакет 3), запусти
   superpowers:executing-plans, начни Пакет 3 (net-new → audit-context ПРОПУСТИТЬ,
   сразу TDD RED). Фокус-линза Пакета 3 — «атака». Коммить каждую задачу, БЕЗ пуша.

Кодовая фраза эпика: «роутер-наставник».

## === КОНЕЦ ПРОМТА ===

---

## СОСТОЯНИЕ (детали для новой сессии — расхождения план↔код, уже учтённые)

Аудит-контекст Пакета 2 (mandatory audit-context-building) вскрыл, что **премиссы
плана 2.2 не совпадали с кодом**. Это УЖЕ исправлено в Пакете 2 (commit b6d06ede),
задокументировано в JSDoc `tools/floor-decide.mjs`. Новой сессии знать для контекста
дверей/подписей в Пакетах 3 и 5:

1. **Writer approval-записей НЕ подписывает.** `enforce-askuser-answer-parser.mjs`
   пишет `{type:'approve_git_operation', command, ts}` БЕЗ `sig`. Функции
   `signApprovalRecord`/`verifyApprovalRecord` (домен `RECEIPT_DOMAINS.APPROVAL`)
   существуют в `askuser-answer-parser.mjs` (P10-c), но к writer'у НЕ подключены.
   → План «дверь через verifyReceipt(APPROVAL)» дал бы вечный deadlock. Дверь Пакета 2
   сделана на реальном механизме: read-only `approve_git_operation` через
   `shell-content-rules::loadApprovedGitOps` (exact-match + окно 5 мин), интегрити —
   protected-path side-channel (~/.claude/runtime: runtime-write-deny + Bash/PowerShell
   гейты; пишет только PostToolUse на реальный AskUser), НЕ HMAC.
2. **F5-гонка мнимая.** `enforce-branch-switch.mjs` НЕ потребляет `approve_git_operation`
   (он на текстовых маркерах). Реальный потребитель `loadApprovedGitOps` — read-only +
   window, НЕ consume. Гонки нет; floor читает тем же read-only способом.
3. **force-push доп-блокируется shell-content GIT_HARD_PATTERNS ВСЕГДА** (даже approved).
   → дверь владельца для force-push операционно мута (защита-в-глубину). Дверь реально
   значима для floor-only (migrate:fresh/reset/refresh/db:wipe). В М5 дверь = «шов под
   М6» (полный escape — в М6, Р3).
4. **router-gate default-deny** (стр.182). После C4 (Пакет 2) migrate:fresh/refresh/reset
   default-денятся router-gate'ом даже без enforce-floor (SPOF-защита).

**Для Пакета 3 (floor-signer):** Δ4 в плане УЖЕ честно переписан (§10 Δ4) — подписант
НЕ заявляет «защиту ключа от контроллера» (ключ читается через `node tools/X.mjs` до
сужения node-whitelist в Пакете 4). Честная ценность: (а) убрать ключ из логов/env;
(б) шов под HSM/YubiKey. occurrence-счётчик — анти-пере-зачёт одного green на 2 критерия.
Добавить `RECEIPT_DOMAINS.M5_GREEN` в `receipt-sign.mjs` (НЕ дефолтный домен).

**Для Пакета 5 (критерий):** Δ5 — criterion_id = целостность, не подлинность (защита =
подпись подписанта И id∈sealed, обе). Δ6 — 4 проверки регистрируются шагами
существующей `runGateLadder` (НЕ плодить criterionFullyProven). `judge-gate-floor.mjs`
`criteriaGreenMatched` дополняется fingerprint+подписью.

## Файлы Машины 5 (созданы/изменены в сессии 1)
- Новые: tools/classify-destructive.mjs(+test), tools/floor-decide.mjs(+test),
  tools/enforce-floor.mjs(+test), tools/enforce-supreme-gate-floor.test.mjs,
  tools/m5-floor-invariants.test.mjs.
- Изменены: tools/judge-orchestrator.mjs(+test), tools/router-engine.mjs(+test),
  tools/enforce-router-gate.mjs(+test), tools/enforce-supreme-gate.mjs.

## Осталось: Пакеты 3,4,5,6,7,8 + финал (full regression + finishing-a-development-branch под «пуш»).
