# 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-management` skill (отдельная задача, не в этом эпике).

---

## Контекст для понимания «зачем»

### Триггер (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 спека)

1. Hard wall, no escape valves в коде.
2. User approval everywhere для router output (single + chains).
3. Прямые поручения заказчика (`/skill`, явные «делай X») — без переспрашивания.
4. Read-only действия — всегда разрешены.
5. Honest reasoning required в каждом AskUserQuestion.
6. Recovery — explicit acknowledged risk (ручная правка settings.json / state-файлов при ошибочном lockout).
7. All decisions logged для post-hoc анализа в brain-retro.

---

## Архитектура (TL;DR из §3-7 спека)

### Новый компонент

`tools/enforce-router-gate.mjs` — единственный PreToolUse-хук. Регистрируется в `.claude/settings.json` с `matcher: ""` (все tools).

На каждый tool call:

1. Читает `~/.claude/runtime/router-state-<sess>.json` (classifier output).
2. Читает `~/.claude/runtime/chain-state-<sess>.json` (across-turns chain progress).
3. Анализирует transcript (askuser_called_this_turn, skill_invoked_matching).
4. Резолвит «разрешено / заблокировано» по 4 поведениям.
5. Пишет в `~/.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` — commit `c95445de`.
- 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.
