# Paste-ready блок settings.json — М7 Фаза 8 переезд (Шаги 3+4 runbook)

**Дата:** 2026-06-10 · **Кодовая фраза эпика:** «роутер-наставник» · **Тип:** референс для владельца (Claude `.claude/settings.json` не пишет — даёт текст).
**Источник:** runbook `2026-06-09-phase8-deployment-runbook.md` Шаги 3 (регистрация 13) + 4 (снятие зоопарка) + spec М7 §9.3/§10.

---

## ⚠️ ПЕРЕД вставкой — четыре правила

1. **Это НЕ замена файла целиком.** Claude не может прочитать твой `.claude/settings.json` (он в Read-deny). Ниже — **записи для слияния** в существующий объект `hooks.<Событие>[]` + **список того, что удалить**. Слить и удалить — **в ОДНОЙ атомарной правке** (Шаги 3+4 = один заход).
2. **Порядок критичен (V1/V1-PS, DOC-1):** пол `enforce-floor` (#1) и стена `enforce-supreme-gate` (#2) обязаны быть **зарегистрированы ДО** удаления `router-gate`/`powershell-gate`. Иначе ≈20 Bash-классов + весь PowerShell открываются в окне между правками. Одна атомарная правка снимает риск.
3. **Сверь форму матчера** с уже существующими записями в твоём settings.json (Claude Code: matcher — строка-regex по имени инструмента; в разных конфигах встречается `"*"` vs `""` для «все», `"mcp__.*"` vs `"mcp__*"`). Ниже — форма по runbook-таблице; приведи к своей конвенции, если она иная.
4. **Бэкап до правки** (Шаг 0): `Copy-Item .claude\settings.json .claude\settings.json.bak-phase8-2026-06-10`. Без него откат §9.4 невозможен.

---

## ДОБАВИТЬ — 13 хуков защитного контура

Слить в соответствующие массивы `hooks.PreToolUse[]`, `hooks.PostToolUse[]`, `hooks.Stop[]`.

### PreToolUse (10 хуков — пол/стена первыми)

```jsonc
// 1. М5 пол — вето-до-плана на необратимое + content-floor (Bash/PowerShell)
{ "matcher": "*", "hooks": [ { "type": "command", "command": "node tools/enforce-floor.mjs" } ] },
// 2. М2 стена — default-deny вне запечатанного плана
{ "matcher": "*", "hooks": [ { "type": "command", "command": "node tools/enforce-supreme-gate.mjs" } ] },
// 3. М1/М5 защита нормативки/памяти (КАРТА/ЗАКОН)
{ "matcher": "Edit|Write|MultiEdit|NotebookEdit", "hooks": [ { "type": "command", "command": "node tools/enforce-normative-content-rules.mjs" } ] },
// 4. М5 read-exfil (transcript/runtime/secrets)
{ "matcher": "Read", "hooks": [ { "type": "command", "command": "node tools/enforce-read-path-deny.mjs" } ] },
// 5. М5 egress-exfil (исходящий MCP-payload)
{ "matcher": "mcp__.*", "hooks": [ { "type": "command", "command": "node tools/enforce-mcp-classification.mjs" } ] },
// 6. М6 снимок — точка отката перед разрушительным (после пола)
{ "matcher": "*", "hooks": [ { "type": "command", "command": "node tools/enforce-snapshot.mjs" } ] },
// 7. М4 судья (рубильник + режим; Гейт-2: Write плана + per-tool надзор)
{ "matcher": "*", "hooks": [ { "type": "command", "command": "node tools/enforce-judge-gate.mjs" } ] },
// 8. G1 — подписанный verify-receipt перед commit/push
{ "matcher": "Bash", "hooks": [ { "type": "command", "command": "node tools/enforce-verify-gate.mjs" } ] },
// 9. Level B — по-критерийный mutation-proven GREEN
{ "matcher": "Bash", "hooks": [ { "type": "command", "command": "node tools/enforce-criterion-gate.mjs" } ] },
// 10. поглощённая дисциплина (журнал-K2)
{ "matcher": "TodoWrite", "hooks": [ { "type": "command", "command": "node tools/enforce-todowrite-skill-verifier.mjs" } ] }
```

### PostToolUse (2 хука)

```jsonc
// 11. М1 журналер навыков (неподделываемый канал K2)
{ "matcher": "Skill", "hooks": [ { "type": "command", "command": "node tools/enforce-skill-journaler.mjs" } ] },
// 12. М6 escape — one-shot погашение гранта
{ "matcher": "*", "hooks": [ { "type": "command", "command": "node tools/enforce-floor-escape-consume.mjs" } ] }
```

### Stop (1 хук)

```jsonc
// 13. поглощённая дисциплина coverage (журнал-K2)
{ "hooks": [ { "type": "command", "command": "node tools/enforce-coverage-verify.mjs" } ] }
```

---

## ОСТАВИТЬ / ДОБАВИТЬ — companion-хуки (не входят в 13 «required», но нужны контуру)

- **SessionStart:** `node tools/floor-manifest-check.mjs` — самопроверка регистрации (кричит «ПОСТ ПУСТОЙ», если кто-то из 13 не зарегистрирован).
- **Доска «кто на посту»:** генератор `STATUS.md` (read-only) — оставить.
- **Наблюдение (оставить):** `observer-stop-hook`, `cost-stop-hook`, `askuser-cosmetic-detector`.

---

## УДАЛИТЬ — зоопарк (та же атомарная правка, §10)

Удалить из `hooks` регистрации этих команд (по строке `node tools/<имя>.mjs`):

**Старая защита (растворена в пол/стену):** `enforce-router-gate`, `enforce-powershell-gate`, `enforce-runtime-write-deny`, `enforce-verify-before-push`, `enforce-verify-record`, `enforce-branch-switch`.
> ⚠️ `router-gate`/`powershell-gate` — снимать ТОЛЬКО после того, как пол #1 зарегистрирован (см. правило 2).

**Старый судья (L4):** `enforce-llm-judge-per-tool`, `enforce-llm-judge-response-scan`.

**Старый роутер-классификатор:** `router-prehook`, `router-tool-gate`, `router-stop-gate`, `router-embedding-warmup` (заменён М3).

**Поглощённая дисциплина (СТАРЫЕ версии — не путать с новыми #10/#13):** `enforce-memory-coverage`, старый `coverage-verify`, `tdd-gate`, `enforce-tdd-real-test-verifier`, `enforce-self-debrief-detector`, `enforce-rationalization-audit`, старый `todowrite-skill-verifier`, `enforce-prompt-injection` (reminder).
> NB: новые журнал-K2 версии `enforce-coverage-verify.mjs` (#13) и `enforce-todowrite-skill-verifier.mjs` (#10) — это НЕ старые одноимённые. Различить по тому, что новые входят в `DEFAULT_REQUIRED_HOOKS` (G2, манифест). Старые снять, новые (из блока выше) оставить.

**Мёртвый груз (no-op):** `enforce-decomposition-detector`, `enforce-safe-baseline-metering`, `enforce-parallel-session-lock`.

**Бессмысленные (субагенты запрещены):** `enforce-subagent-return-scanner`, `subagent-prompt-prefix`.

---

## После правки (Шаг 5 → Verification)

1. Три ENV-флага (user scope, затем перезапуск Claude): `ROUTER_MENTOR_VERIFY_ENABLED=1`, `ROUTER_MENTOR_JUDGE_ENABLED=1`, `ROUTER_MENTOR_JUDGE_MODE=shadow` (позже `block`).
2. SessionStart `floor-manifest-check` → `mode: protected` (не кричит «ПОСТ ПУСТОЙ»). Если кричит — WARN перечислит отсутствующие, дописать.
3. Доска `STATUS.md` §7: все М1–М6 + режим судьи показаны.
4. Если `verify`/`criterion-gate` блокируют commit сразу → ключ `router-mentor-receipts` не в keychain (Шаг 1) → провижинить или снять флаг.

**Откат (Шаг 7):** `Copy-Item .claude\settings.json.bak-phase8-2026-06-10 .claude\settings.json -Force` + снять три ENV-флага + перезапуск.

---

> **Полная процедура (Шаги 0–7, troubleshooting, escalation):** `docs/superpowers/runbooks/2026-06-09-phase8-deployment-runbook.md`. При расхождении — приоритет у runbook + spec М7 §9.3/§10.
