# Handoff — М7 Фаза 8 «Растворение зоопарка + переезд» (настроить → тест → бой)

**Дата:** 2026-06-09 · **Кодовая фраза:** «роутер-наставник».
**Ветка:** `worktree-brainrepo` · **HEAD:** `487a6f1d` · commit-not-push (origin не тронут).
**Дерево:** `c:\моя\проекты\портал crm\Документация\.claude\worktrees\brainrepo` (далее `<WT>`).

---

## Зачем эта фаза (формулировка владельца)

У владельца **постоянные глюки в живой работе из-за старого v4-зоопарка хуков**. Цель: **растворить зоопарк**,
настроить вместо него машины М1–М6, **протестировать «всё работает» на ветке брейнрепо**, затем **выкатить в бой**
(merge в main по слову «пуш»). Это ровно **М7 Фаза 8** (дизайн `docs/superpowers/specs/2026-06-08-router-mentor-machine-7-design.md` §9/§10/§12).

## Что сделано этой сессией (A1 — закрыт)

A1 (🟦-проводка судьи М4 на Гейт-2) реализован TDD, инертен ($0), commit-not-push:
- `tools/enforce-judge-gate.mjs`: `parseJudgeResponse` (fail-closed) / `extractGate2Product` (Write-only детект плана `docs/superpowers/plans/*.md`) / `callJudgeModel` (async транспорт `callAnthropicAPI`/Sonnet за `ROUTER_LLM_KEY`; **unavailable** ≠ malformed) / `runJudgeGate` async (судья недоступен → **degraded-allow** + WARN, не block-all — урок v4) / `runJudgeTurn`+`main` (inert=$0 / shadow=прогон+лог J8+allow / live-block=прогон+лог+decide).
- Коммиты `0c6f084f..e8958155` + спека/план `44c194bc`/`843097c0`/`cfca7ecf` + активационная заметка `487a6f1d`.
- Регрессия tools-only **3323 passed / 2 skipped / 0 failed**. Движок М4 / стены / пол / нормативка / CLAUDE.md — НЕ тронуты.
- Активация A1 (твои 🔴-шаги) — `docs/superpowers/runbooks/2026-06-09-A1-judge-gate2-activation.md`. **Войдёт в общий переезд Фазы 8**, отдельно включать не нужно.

## Дорожная карта (приоритет — твой)

1. **Хвосты: что осталось ДО настройки всех машин** (ПЕРВЫЙ приоритет, read-only аудит — безопасно).
2. **Настройка машин на брейнрепо** (регистрация + увольнение зоопарка — твой settings.json).
3. **Тест «всё ок»** (тест-гейт §9.2).
4. **Выкат в бой** (по «пуш» → merge в main).

## ⚠️ Жёсткий порядок (иначе вместо починки — дыра)

- **§10 V1/V1-PS (БЛОКЁР):** `router-gate` и `powershell-gate` снимаются **только ПОСЛЕ** переноса их полного чёрного списка (≈20 классов Bash + весь PowerShell) в **пол М5 (content-floor, правило 8)**. Раньше — откроются все эти команды.
- **Правило 7 / L6 escape-survivability:** остающиеся content-стражи (`read-path-deny` / `mcp-classification` / `normative-content-rules`) **обязаны читать escape-грант М6**, иначе аварийная кнопка владельца работает лишь частично (DOC-1).
- **Тест-гейт §9.2 (обязателен до переключения):** регрессия tools-only **≥ 2843 passed + 2 skip**; per-machine smokes (каждая М1–М6 блокирует свой класс, fail-CLOSE, громко); интеграционные smokes (escape сквозной; манифест кричит при снятом страже; ЗАКОН требует ключ, КАРТА — нет; дисциплина fail-CLOSE+громко; журнал-факт не обходится текстом). Зелёное **по каждому** пункту.
- **Big-bang без обкатки — ПРИНЯТ владельцем** (§11), но рекомендация дизайнера: короткий тихий период D28 (shadow) у судьи М4 перед hard-block.

## Шаг 1 — аудит готовности (с него начинает новая сессия)

Read-only: пройти §12 дизайна пункт-за-пунктом и сверить «собрано в коде / осталось» по факту (`tools/*.mjs`). Критично подтвердить **в первую очередь**:
- **М5 content-floor port** (`matchBashHardBlacklist`/`BASH_HARD_BLACKLIST` → пол; PowerShell-набор; floor-write-guard на содержимое node/PowerShell-команд) — **блокёр увольнения** router-gate/powershell-gate.
- **escape-survivability** — читают ли `read-path-deny`/`mcp-classification`/`normative-content-rules` escape-грант.
- **ИИ-проводка судьи** (live llmCall в `enforce-judge-gate` — A1 шов готов; нужен реальный транспорт в live-block + ключ/флаг владельца).
- **PostToolUse skill-журналер** (SE-K), **доска «кто на посту»**, **манифест-самопроверка** (`floor-manifest-check` — уже есть, §7), **normative-канал КАРТА/ЗАКОН**.
- Память (M1–M6 *_done.md в `memory/`) говорит «Фазы 0–7 собраны» — но это надо **верифицировать по коду**, не на доверии.
Итог Шага 1 — точная карта остатка: «вот что достроить до безопасного увольнения зоопарка».

## Источники истины (читать)

- Дизайн М7: `docs/superpowers/specs/2026-06-08-router-mentor-machine-7-design.md` (§5 карты покрытия / §9 план переезда / §10 список увольнений / §11 пределы / §12 инвентарь для writing-plans).
- Манифест регистрации (9 хуков М1–М6): `tools/floor-manifest-check.mjs` → `DEFAULT_REQUIRED_HOOKS`:
  `enforce-floor` (М5 пол, PreToolUse) · `enforce-supreme-gate` (М2 стена, PreToolUse) · `enforce-normative-content-rules` · `enforce-read-path-deny` · `enforce-mcp-classification` · `enforce-judge-gate` (М4) · `enforce-snapshot` (М6, PreToolUse после пола) · `enforce-floor-escape-consume` (М6, PostToolUse) · `enforce-skill-journaler` (М1, PostToolUse).
- §10 увольнение (опасный порядок!): старая защита `router-gate`/`powershell-gate`/`runtime-write-deny`/`verify-before-push`/`verify-record`/`branch-switch`; старый судья `llm-judge-per-tool`/`-response-scan`; старый роутер `router-prehook`/`router-tool-gate`/`router-stop-gate`/`router-embedding-warmup`; поглощённая дисциплина `memory-coverage`/`coverage-verify`/`tdd-gate`/`tdd-real-test-verifier`/`self-debrief-detector`/`rationalization-audit`/`todowrite-skill-verifier`/`prompt-injection`; мёртвый груз `decomposition-detector`/`safe-baseline-metering`/`parallel-session-lock`; субагентные `subagent-return-scanner`/`subagent-prompt-prefix`; Класс 6 `findOverride`/`findOverrideAttempt`. **Остаются:** `observer-stop-hook`/`cost-stop-hook`/`askuser-cosmetic-detector` + content-стражи М5.
- Реестр хвостов эпика: `docs/superpowers/plans/2026-06-08-router-mentor-loose-ends-registry.md` (раздел A — активация).
- A1 активация: `docs/superpowers/runbooks/2026-06-09-A1-judge-gate2-activation.md`.

## Квирки среды (экономят время)

- **vitest — через Bash tool** (PowerShell-гейт режет `npx`/`node`): `npx vitest run --root "<WT>/app" --config "<WT>/app/vitest.config.tools.mjs" <фильтр> --reporter dot`. БЕЗ `cd`, абсолютный `--root`.
- **git — через PowerShell** `git -C "<WT>" ...`, отдельными командами (без `if`), короткие ASCII commit-msg. `git --no-verify` запрещён гейтом (G5). `--%`/`Write-Output` режутся PowerShell-гейтом — не использовать.
- **TDD-gate / real-test-verifier:** новый describe в тест-файле добавлять так, чтобы правка содержала `it`+`expect` (надёжнее — `Write` тест-файла целиком).
- **settings.json + keychain — закрыты Claude'у** (рубильники владельца). Память харнесса (`memory/`) требует активного `claude-md-management` + `coverage: direct:memory-sync`.
- **«Can't find lefthook in PATH»** — ШУМ, игнор. **CLAUDE.md в worktree НЕ трогать** (чужая зона).
- **Субагенты / Task / Workflow — ЗАПРЕЩЕНЫ** (всё инлайн). commit-not-push (пуш ТОЛЬКО по слову «пуш»). 1-я строка ответа «экономия:…», 2-я «coverage:…».
- Цепочка скилов для несущего кода (высылать на согласование ДО старта): `brainstorming → audit-context-building → sharp-edges → variant-analysis → writing-plans → executing-plans (инлайн TDD, наблюдаемый RED) → verification-before-completion → regression`. НЕ `requesting-code-review`. Для read-only аудита — без adversarial-скилов.

---

## === ПРОМТ ДЛЯ НОВОЙ СЕССИИ (скопировать целиком) ===

роутер-наставник. Продолжаем эпик — **М7 Фаза 8 «растворение v4-зоопарка + переезд»**. У владельца постоянные глюки в живой работе из-за старого зоопарка хуков; цель — растворить его, настроить машины М1–М6, протестировать на ветке брейнрепо, выкатить в бой. НЕ приступай к коду сразу: прочитай состояние, начни с аудита хвостов, согласуй со мной цепочку скилов перед несущим кодом. Всё инлайн, субагенты/Task/Workflow ЗАПРЕЩЕНЫ.

ДЕРЕВО: `c:\моя\проекты\портал crm\Документация\.claude\worktrees\brainrepo`, ветка `worktree-brainrepo`. Git — ТОЛЬКО PowerShell (`git -C "<wt>" ...`), литеральные пути. Сверь верх: `git -C "<wt>" log -10 --oneline` (верх — `487a6f1d` A1 activation note; ниже A1 `0c6f084f..e8958155`).

ПРОЧИТАЙ ПЕРВЫМИ: `docs/superpowers/plans/2026-06-09-phase8-migration-handoff.md` (этот handoff) + `docs/superpowers/specs/2026-06-08-router-mentor-machine-7-design.md` (§5/§9/§10/§12) + `tools/floor-manifest-check.mjs` (DEFAULT_REQUIRED_HOOKS) + `docs/superpowers/plans/2026-06-08-router-mentor-loose-ends-registry.md`.

ПЕРВЫЙ ПРИОРИТЕТ (Шаг 1, read-only, безопасно): **аудит готовности Фазы 8** — пройти §12 пункт-за-пунктом, сверить по коду `tools/*.mjs` «собрано / осталось». Критично подтвердить ПЕРВЫМ: (1) **М5 content-floor port** (BASH_HARD_BLACKLIST + PowerShell в пол — БЛОКЁР увольнения router-gate/powershell-gate, §10 V1/V1-PS); (2) **escape-survivability** content-стражей (правило 7/L6); (3) ИИ-проводка судьи live; (4) skill-журналер / доска / normative-канал. Память *_done.md верифицировать ПО КОДУ, не на доверии. Итог — карта остатка «что достроить до безопасного увольнения зоопарка».

ДАЛЬШЕ (после аудита): достроить остаток (несущий код, инлайн TDD — ВЫШЛИ цепочку скилов на согласование ДО старта) → карты покрытия §5 → точный deployment-runbook (9 хуков М1–М6 + §10 увольнение + ключи/флаги) → тест-гейт §9.2 (регрессия ≥2843+2skip + per-machine + интеграционные smokes, зелёное по каждому) → переключение settings.json (шаг ВЛАДЕЛЬЦА) → откат наготове → бой (по «пуш» merge в main).

ЖЁСТКОЕ: commit-not-push (пуш ТОЛЬКО по «пуш»); 1-я строка «экономия:…», 2-я «coverage:…»; CLAUDE.md в worktree НЕ трогать; стены М2/М5/М4/М6 не ослаблять; нормативку не двигать; settings.json/keychain — шаг владельца; чужую грязь дерева не коммитить — стейдж своих файлов поимённо. vitest через Bash tool (PowerShell-гейт режет npx/node). Кодовая фраза: «роутер-наставник».

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