Files
portal/docs/superpowers/runbooks/2026-06-10-phase8-settings-paste-block.md
T
Дмитрий 2aea040125 docs(phase8): refresh снимок+runbook + paste-ready settings.json блок
После закрытия M6 FIX-5 и верификации тест-гейта §9.2:

- 2026-06-10-phase8-state-snapshot.md: HEAD f2aa3fb7→33894a62; M6 FIX-5 из
  «отложено» → закрыто (key-gated); D-3 доска live → закрыта (c9f823df);
  регрессия 3449→3478; §9.2 верифицирован зелёным (предусловие C закрыто).
- 2026-06-09-phase8-deployment-runbook.md: Prerequisites регрессия →3478 +
  §9.2 verified; +строка History 2026-06-10.
- 2026-06-10-phase8-settings-paste-block.md (новый): paste-ready записи для
  settings.json — 13 хуков защитного контура (PreToolUse 10 / PostToolUse 2 /
  Stop 1) + companion + список снятия зоопарка (~20). Merge-not-replace, атомарно,
  пол #1 ДО снятия router-gate. Референс для владельца (Claude settings.json не пишет).

Только docs. Активация Фазы 8 (settings.json/keychain/ENV) — шаги владельца.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 05:52:32 +03:00

8.4 KiB
Raw Blame History

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 хуков — пол/стена первыми)

// 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 хука)

// 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 хук)

// 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-checkmode: 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-флага + перезапуск.


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