# Машина 5 — handoff в новую сессию (Пакеты 5-8 ЗАКРЫТЫ — финализация + продолжение эпика)

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

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

---

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

роутер-наставник — ФИНАЛИЗАЦИЯ Машины 5 (Пакеты 5-8 закрыты) + продолжение эпика.

Эпик «роутер-наставник» (цепочка план→роутер→судья→владелец→ПОЛ). Машина 5 (несущий пол)
РЕАЛИЗОВАНА ПОЛНОСТЬЮ — все пакеты плана собраны и закоммичены. Твоя задача — финализировать
(пуш только по слову владельца) и далее по указанию владельца, СТРОГО соблюдая алгоритм
использования скилов (п.5 — нарушать ЗАПРЕЩЕНО).

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

2. ГДЕ СТОИМ (HEAD = 5d350b69): Машины 1-4 собраны+переаудичены ранее. **Машина 5 (Пакеты 5-8)
   ЗАКРЫТА** — 14 атомарных коммитов 24ce7b39..5d350b69, всё через TDD RED→GREEN, регрессия
   tools-only **2788 passed + 2 skip** (новый baseline). НЕ ЗАПУШЕНО (commit-not-push).
   - Пакет 5 (6 коммитов 54f0974b..0875cd24) — Блок 3 критерий-носитель: sealed criterion_id
     в plan-lock (Δ5) / механическая значимость k5CriterionCheck (C3/F18) / fingerprintFresh
     (Δ2) / greenSignaturesValid (Δ5) / criterionGateSteps+runCriterionGate лесенка 4 шагов
     (Δ6) в judge-orchestrator / criterion-green.mjs производитель + мутация P18 (5.6).
   - Пакет 6 (32b688e0) — Блок 5 сквозные инварианты: N5 строгая проверка пола (поведенч.
     finalGate/runGateLadder + grep judge-orchestrator) / Δ9-а анти-усыхание floor-набора /
     Δ9-б единственный источник (seed) / escape≠protection / Δ8 floor-manifest-check.mjs WARN.
   - Пакет 7 (6 коммитов acc90450..7b2a3d32) — Блок 4 семь заплаток хуков: 7.1 read-path-deny
     +контент-скан секретов (новый общий secret-scan.mjs) / 7.2 normative-content детерм-only
     +fail-CLOSE (H3, reason-based no_api_key vs budget_exhausted) / 7.3 mcp-classification
     +egress-скан / 7.4 workflow-gate inline-script +keychain-паттерны (C5) / 7.5 parallel-
     session-lock pid-liveness (дыра 5) / 7.6 инвариант разделения дисциплина/защита; 7.7
     закрыт Пакетами 3+5.
   - Пакет 8 (5d350b69) — Δ3 честный двухтакт reconcile: 8.1 пред-запись намерения ДО allow
     в runGate (нет записи → block) / 8.2 enforce-reconcile.mjs PostToolUse-реконсилер
     (action-without-record / record-without-action, WARN).

3. ЧТО ОСТАЛОСЬ (по разделу «Завершение» плана):
   а) `finishing-a-development-branch` — merge/PR **только по слову владельца «пуш»** (commit-not-push).
   б) Память эпика (`direct:memory-sync`) — отдельным ходом с явным coverage `direct:memory-sync`
      (хук enforce-memory-coverage принимает строго это per-turn; chain отклоняется).
   в) Активация владельцем (НЕ код): регистрация новых хуков в `.claude/settings.json`
      (enforce-floor + floor-manifest-check + enforce-reconcile + safe-baseline + llm-judge-обёртки);
      провижининг ключа подписанта вне доступного контроллеру окружения; сперва тихий режим, затем
      hard-block. Claude'у settings.json заблокирован — это шаг владельца.
   г) Дальше по указанию владельца: либо стоп, либо Машина 6/М7 (следующий слой эпика —
      это НОВАЯ фаза дизайна: `superpowers:brainstorming` → `superpowers:writing-plans`, не
      продолжение текущего плана; см. spec §5 шов М5↔М6 и §6 «Не входит в М5 (YAGNI → М6/М7)»).

4. ПРОЧИТАТЬ ПЕРВЫМ:
   - Этот handoff (раздел «СОСТОЯНИЕ» ниже).
   - План: docs/superpowers/plans/2026-06-07-router-mentor-machine-5-floor.md (все пакеты ✅;
     раздел «Завершение» — что осталось).
   - Spec: docs/superpowers/specs/2026-06-07-router-mentor-machine-5-floor-design.md (§5 шов
     М5↔М6 + §6 YAGNI + §7 остаточные пределы).
   - Память эпика (если уже сохранена): topic-файлы про машины M1-M5 (кодовая фраза).

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

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

7. КВИРКИ:
   - vitest одной АБСОЛЮТНОЙ командой, без 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» — шум.)
   - Гейт АКТИВЕН в сессии и режет: цепочки (&&/;/|) с мутацией → по одной простой команде;
     rm/mv/cp/Remove-Item → блок; git clean/commit/push → требуют approve_git_operation (проси
     владельца). node сужен (Пакет 4): только tools/<file>.mjs + vitest-runner + node --version.
   - Glob с {} на кириллице глючит → **/имя.mjs.
   - ХУК tdd-real-test-verifier: на Edit существующего тест-файла new_string обязан содержать
     it(+expect(+строковый литерал с basename prod-модуля, правленого В ЭТОЙ сессии (coverage);
     it.each( не распознаётся как тест-блок → for-of + плоский it(). НОВЫЙ тест-файл (Write) от
     coverage-требования свободен.
   - ХУК tdd-gate: правка prod-файла без предшествующей правки ЕГО тест-файла (RED) → блок.
     Сначала тест в *.test.mjs, прогон RED, потом prod-правка.
   - ХУК enforce-coverage-verify (Stop): coverage `skill:<имя>` принимается только если этот
     Skill реально инвокирован В ЭТОМ turn'е; иначе переключай на `direct:<role>` с обоснованием.
   - Baseline tools-only: **2788 passed + 2 skip**.

8. СТАРТ: прочитай handoff §СОСТОЯНИЕ + план (раздел «Завершение») + spec §5/§6 → подтверди
   tree-состояние (`git -C "<wt>" log -1 --oneline` → 5d350b69; быстрый vitest-прогон → 2788) →
   доложи владельцу, что Машина 5 собрана и ждёт «пуш»/памяти/активации, и спроси направление.

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

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

---

## СОСТОЯНИЕ (детали для новой сессии)

**Машина 5 ЗАКРЫТА. 14 коммитов `24ce7b39..5d350b69` на `worktree-brainrepo`. НЕ запушено.**
**Регрессия tools-only: 2788 passed + 2 skip (151 файл).** baseline до сессии был 2676 → +112 тестов.

### Новые/изменённые модули Машины 5 (Пакеты 5-8)
- **Новые prod:** `tools/criterion-green.mjs` (5.6), `tools/floor-manifest-check.mjs` (6.5),
  `tools/secret-scan.mjs` (7.1, общий для 7.1+7.3), `tools/enforce-reconcile.mjs` (8.2).
- **Изменённые prod:** `tools/plan-lock.mjs` (5.1 stepCriterionId/sealedCriterionIds/freezePlan
  обогащение) · `tools/judge-gate-floor.mjs` (5.2 isSignificantStep + k5 rewire / 5.3
  fingerprintFresh / 5.4 greenSignaturesValid) · `tools/judge-orchestrator.mjs` (5.5
  criterionGateSteps + runCriterionGate) · `tools/enforce-read-path-deny.mjs` (7.1 content-скан) ·
  `tools/enforce-normative-content-rules.mjs` (7.2 isProtectiveNormativePath + protectiveSubset +
  main fail-CLOSE) · `tools/enforce-mcp-classification.mjs` (7.3 scanEgress) ·
  `tools/enforce-workflow-gate.mjs` (7.4 inline-script + keychain-паттерны) ·
  `tools/parallel-session-lock.mjs` + `tools/enforce-parallel-session-lock.mjs` (7.5
  isProcessAlive + isPidAlive) · `tools/enforce-supreme-gate.mjs` (8.1 runGate пред-запись→block) ·
  `tools/m5-floor-invariants.test.mjs` (6.1-6.4 + 7.6 инварианты).

### Ключевые решения сессии (важно для контекста)
- **Δ6 авторитетнее план-задач 5.3/5.4:** spec §10 Δ6 явно перечисляет 4 ОТДЕЛЬНЫХ шага лесенки
  (criteriaFromSealedPlan ∧ criteriaGreenMatched(green) ∧ fingerprintFresh ∧ greenSignaturesValid),
  поэтому `criteriaGreenMatched` оставлена «green-присутствием», а fingerprint+подпись —
  отдельными хелперами. Композит-гейт (`runCriterionGate`) И-нит все 4 — сила не теряется.
- **7.2 reason-based:** деградация судьи различается — `no_api_key` (судья ВЫКЛЮЧЕН, дефолт) →
  детерм-only флор (fail-open, без over-block claude-md-management); `budget_exhausted` (судья был
  активен, вектор обхода) → fail-CLOSE для защитного подмножества (CLAUDE.md/память/Pravila).
  Reason приходит от судьи, не controller-writable.
- **N5 scope сужен до judge-orchestrator** (избежал ложного срабатывания на токенайзер floor-decide
  `tok.ok &&`, который НЕ floor-вердикт). Поведенческие тесты finalGate/runGateLadder + grep.
- **Guard-инварианты (Пакет 6, 7.6):** prod-код не пишется → iron-law TDD неприменим; positive
  controls делают их non-vacuous (паттерн seed Пакета 1).

### Осталось (раздел «Завершение» плана)
- `finishing-a-development-branch` под «пуш».
- Память эпика `direct:memory-sync` (отдельный turn).
- Активация хуков владельцем в settings.json + ключ подписанта вне окружения контроллера.
- М6/М7 — отдельная фаза дизайна (spec §5/§6), не продолжение этого плана.
