Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
11 KiB
Handoff — Router-gate Hard Wall Уровень 4
Создан: 2026-05-28 поздний вечер Статус: spec v3.1 готов, implementation НЕ начата Для: следующая Claude-сессия, переход к writing-plans skill
TL;DR
Заказчик выбрал Уровень 4 (полная переделка enforcement-архитектуры) после серии brainstorming-сессий 28.05.2026.
Уровень 1+2 уже реализован и выкачен на origin/main (5 commits, последний c95445de).
Уровень 4 spec — docs/superpowers/specs/2026-05-28-router-gate-hard-wall-design.md (версия v3.1, последний commit fab8e72d). Прошёл 3 раунда adversarial audit, закрыто 30 holes. Implementation 13.5-20 часов sequential / 6-9 часов wall-clock через subagent-driven parallelism.
Что нужно сделать в новой сессии
Шаг 1 — Прочитать спек
Открыть docs/superpowers/specs/2026-05-28-router-gate-hard-wall-design.md целиком. Особое внимание:
- TL;DR в начале — fast orientation.
- §3-§7 — основная архитектура.
- §8 — этапы implementation.
- §10.2 — JSON-схемы 8 state-файлов.
- §10.3 — test strategy.
- §10.4 — success metrics.
- §10.5 — rollback plan.
- §10.6 — parallelism между этапами.
Шаг 2 — Перейти к writing-plans skill
Per brainstorming workflow последний шаг — invocation superpowers:writing-plans. Это правильный next step. Команда:
/superpowers:writing-plans (или вызвать Skill('superpowers:writing-plans') напрямую)
Skill попросит контекст: укажи спек docs/superpowers/specs/2026-05-28-router-gate-hard-wall-design.md.
Skill сгенерирует детальный план implementation в формате docs/superpowers/plans/2026-05-XX-router-gate-hard-wall.md со всеми этапами как TDD-tasks.
Шаг 3 — Implementation через subagent-driven-development
После writing-plans → перейти к subagent-driven-development skill (проектный wrapper). Делегировать каждый этап Sonnet субагенту.
Parallelism opportunity (§10.6 спека):
- Этап 1 (pure decision module) — sequential первым, остальные ждут.
- Этапы 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8 — параллельны (8 подэтапов, max 3 субагента одновременно). Дают существенное wall-clock сокращение.
- Этап 2 — sequential после всех 1.X (нужны все модули перед удалением старых хуков).
- Этапы 2.1 и 2.2 — параллельны с этапом 2.
- Этап 3 — sequential после 2/2.1/2.2.
- Этап 6 (brain-retro adaptation) — sequential после Этапа 3 (нужны real data).
Per Pravila §15.1: субагенты git-commit задач только Sonnet/Opus, никогда Haiku. Git-safety верификация после каждого субагента — pre-spawn HEAD, post-commit parent сравнение, branch check.
Шаг 4 — После implementation
- Push на origin (ветка может быть
feat/router-gate-l4для PR-flow или прямо main с feature-branch merge). - Brain-retro #11 через ~1 неделю под Уровнем 4.
- Self-retrospect #3 через ~50 эпизодов под новой архитектурой.
- Pravila §16/§17 обновление через
claude-md-managementskill (отдельная задача, не в этом эпике).
Контекст для понимания «зачем»
Триггер (brain-retro #10)
Override-events trend за 4 дня: 12 → 229 → 348 → 679. Из них recovery ушёл 525/день 28.05.2026. Это не аварийные случаи — это шаблонная привычка обхода gate'а.
Текущая архитектура (Уровни 1+2) сделала vocab более узкой и rate-limited, но не закрыла структурные дырки:
- Одна override-фраза снимает 5 хуков разом.
- Inline
router-skip: <50+ chars>— self-bypass. - Substring-match без user explicit consent.
Self-retrospect #2 подтверждение
5 commitments утреннего self-retrospect (override-дисциплина / feature→план first / Sentry-first / Semgrep / coder-agent на массовое) → сломаны 2 из 5 за 6 часов. Тезис «привычку без enforcement не удержать» теперь подтверждён двумя независимыми данными.
Решение заказчика
«Hard wall. Никаких обходов. Разрешение на любой обход даёт только заказчик. Все router-рекомендации (одиночные и цепочки) — через явную санкцию. Любая неясная ситуация — controller ничего не делает сам, спрашивает заказчика с честными рекомендациями.»
Это explicit acknowledged risk — заказчик соглашается быть recovery-каналом ручной правкой файлов при ошибочном lockout.
Принципы дизайна (из §2 спека)
- Hard wall, no escape valves в коде.
- User approval everywhere для router output (single + chains).
- Прямые поручения заказчика (
/skill, явные «делай X») — без переспрашивания. - Read-only действия — всегда разрешены.
- Honest reasoning required в каждом AskUserQuestion.
- Recovery — explicit acknowledged risk (ручная правка settings.json / state-файлов при ошибочном lockout).
- All decisions logged для post-hoc анализа в brain-retro.
Архитектура (TL;DR из §3-7 спека)
Новый компонент
tools/enforce-router-gate.mjs — единственный PreToolUse-хук. Регистрируется в .claude/settings.json с matcher: "" (все tools).
На каждый tool call:
- Читает
~/.claude/runtime/router-state-<sess>.json(classifier output). - Читает
~/.claude/runtime/chain-state-<sess>.json(across-turns chain progress). - Анализирует transcript (askuser_called_this_turn, skill_invoked_matching).
- Резолвит «разрешено / заблокировано» по 4 поведениям.
- Пишет в
~/.claude/runtime/router-gate-decisions.jsonl.
4 поведения
| # | Когда | Что разрешено |
|---|---|---|
| 1 | Direct invocation заказчика (slash-cmd / Skill() / используй #N / делай exact) | Matching skill/Task + read-only baseline |
| 2 | Single router-рекомендация | Matching Skill/Task + baseline, mutating требует AskUser approval |
| 3 | Chain router-рекомендация | Текущий шаг chain (state persists across turns, TTL 24h) |
| 4 | Silence | Baseline только, mutating требует AskUser в 1/2+/0-формате |
Безопасная база (всегда)
Read / Grep / Glob / LS / TodoWrite / AskUserQuestion (лимит 2 per turn) / ListMcpResourcesTool / ReadMcpResourceTool (только marked read-only) / text response.
Bash — НЕ в baseline, отдельные правила в §5.1.
Удаляется
5 хуков (chain-recommendation / classifier-match / graph-first / semgrep-security / override-limit) + enforce-override-vocab.json + 3 helper-функции (findOverride / findOverrideAttempt / loadOverrideVocab) → stubs.
Сохраняется (7 preserved)
tdd-gate / coverage-verify / memory-coverage / verify-before-push / rationalization-audit / prompt-injection / branch-switch. 6 из 7 используют findOverride — после удаления vocab.json эти вызовы возвращают null, hooks работают корректно без правки кода. Acknowledged risk: 6 preserved хуков теряют escape-фразы для починки их самих → требуют ручного вмешательства заказчика при ошибках инфры.
Версии спека в git
| Версия | Commit | Что |
|---|---|---|
| v1 | 7a43c175 |
Initial design — 5 hooks replaced by single gate, vocab gone |
| v2 | b510a758 |
Closes 10 holes from v1 adversarial audit |
| v3 | b632bcba |
Closes 10 new holes from v2 audit (subagent inheritance fatal, race conditions, DoS, script execution, etc) |
| v3.1 | fab8e72d |
Clarification pass — TL;DR, schemas, test strategy, success metrics, cross-refs, rollback, parallelism |
Все 4 версии на origin/main. v3.1 — рабочая версия для writing-plans.
Связанные артефакты
- L1+L2 план (уже merged):
docs/superpowers/plans/2026-05-28-router-discipline-level-1-2.md— commitc95445de. - Brain-retro #10:
docs/observer/notes/2026-05-28-brain-retro-10.md. - Self-retrospect #2:
docs/observer/notes/2026-05-28-self-retrospect-2.md. - Pravila §16 (brain governance) + §17 (universal skill-coverage) — обновится после implementation эпика отдельной задачей через
claude-md-management.
Известные limitations / open questions для writing-plans
Из §9 спека v3.1:
- Точный формат AskUserQuestion message templates — нужно выбрать в плане implementation.
- Throttling AskUserQuestion (если 3+ вызова в одном turn) — есть лимит 2, но fail-CLOSE поведение можно tighten.
- Free-form answer интерпретация — может потребоваться LLM-парсинг (cost considerations).
- Logging granularity — раздельные файлы для askuser/gate-decisions/errors vs unified.
- Bash whitelist completeness — итеративно расширяется по реальной работе.
Эти 5 вопросов решаются на этапе writing-plans, не сейчас.
Дальше
Команда для новой сессии (после прочтения этого handoff):
Я прочитал handoff `docs/superpowers/handoff-router-gate-l4.md`. Перехожу к writing-plans для эпика router-gate Уровень 4.
Затем вызвать superpowers:writing-plans skill с reference на spec.