# Реестр хвостов эпика «роутер-наставник / реинжиниринг мозга» — до боевого режима

**Дата:** 2026-06-08
**Ветка:** `worktree-brainrepo` · HEAD `7c3a495e`
**Статус:** СВОД ДЛЯ СОГЛАСОВАНИЯ. Ничего не чинится этим документом — это карта отложенного.
**Кодовая фраза эпика:** «роутер-наставник».

## Как собрано

Инлайн-проход (read-only) по памяти-итогам машин M4–M7, аудит-резидуалам (m1_m4 correctness/sharp-edges/guard, m2/m3), дизайн-спекам (M7 §5/§10, M5 §6, M4 judge, router-discipline notes), реестру замечаний `brain-reengineering-remarks-v2` (R-01…R-35), коду (`tools/*.mjs` маркеры проводки), периферии мозга (governance/observer/factor-analysis) и графу скилов (`docs/registry/`).

Колонка **«Кто»** — ключевая: **Claude** = данные/код, которые можно закрыть до активации; **владелец** = `.claude/settings.json` + ключи.

> Закрытыми (не хвосты): Л2 (D29), В5 (D34), 7 дыр критразбора, R-23/K3 (в М5), вся factor-analysis (30 осей, на origin/main), observer remediation/instrument (на origin/main).

---

## ✅ H. Граф скилов / карточки — данные (ЗАКРЫТ 2026-06-08, ветка worktree-brainrepo, commit-not-push)

Реализован по дизайну `docs/superpowers/specs/2026-06-08-router-mentor-H-cards-conflict-edges-design.md` + плану `...-H-cards-conflict-edges.md`. Регрессия tools-only **3174 passed / 2 skipped / 0 failed**; инвариант покрытия `m3e` GREEN. Цепочка скилов: brainstorming → audit-context → variant-analysis → sharp-edges → writing-plans → test-driven-development → executing-plans. Коммиты `d1a76786..65b3c575` (НЕ запушено).

| ID | Хвост | Факт сейчас | Кто |
|---|---|---|---|
| ✅ **H1 / R-11** | Карточки-контракты узлов | **86/86 написаны** (`docs/registry/contracts/<slug>.contract.json`, per-node, `skill=slug`; own — наши скилы+superpowers, external — zero-hash+path""). Инвариант `m3e` «у каждого узла валидная карточка». | **Claude — ГОТОВО** |
| ✅ **H2 / R-12** | Явные конфликт-рёбра `attributes.conflicts_with` | **4 пары канона** (`65b3c575`): postgres-mcp↔boost (§6.1) + треугольник UI-генераторов frontend-design↔ui-ux-pro-max↔21st-magic (R14.5). ADR-границы = комплементарные различения, не конфликты. Инвариант резолв+симметрия GREEN. | **Claude — ГОТОВО** |
| H3 / 3.4-3.5 | Наполнять ли память/примеры роутера (few-shot) | решение отложено владельцем | владелец → Claude |

**Побочные артефакты H:** мех-правка G-E (`tools/skill-contract.mjs` — страж дрейфа инертен при пустом `source.path`); новый чекер `tools/card-coverage.mjs`; инвариант `tools/m3e-*`; m3a расширен «все карточки form-валидны». Авторские нормы (G-A разделитель близнецов в `constraints`+`capabilities`, G-G вход≠выход, G-B не пустые) — из аудита достаточности §10.1 дизайна.

## 🟥 A. Активация — боевое включение (только владелец)

Финальный рубильник — делается ПОСЛЕ готовности H/B, когда система обкатана в shadow.

| ID | Хвост | Кто |
|---|---|---|
| A1 / R-33 | Судья М4: реальный llmCall-транспорт + извлечение «продукта на суд» в `enforce-judge-gate.runJudgeGate` (сейчас `{decision:'GO', wired:false}`) + ключ `router-mentor-judge` (keychain) + флаг `ROUTER_MENTOR_JUDGE_ENABLED=1` + регистрация хука + обкатка shadow→block | владелец |
| A2 | Фаза 8 «Большой переезд» (§9): тест-гейт §9.2 → атомарная регистрация М1–М6 (9 хуков `DEFAULT_REQUIRED_HOOKS` + 4 поглощённых дисциплины) → увольнение v4-зоопарка §10 → `sealedPlanCoversEdit` live через `plan-lock.actionMatchesStep` + matcher `normative-content-rules` на дисциплинарные исходники → откат (escape/снимок М6) | владелец |
| A3 | Активация пола М5: регистрация `enforce-floor` + `floor-manifest-check` + `enforce-reconcile` + провижининг ключа подписанта; shadow→hard-block | владелец |
| A4 | Активация escape/снимка М6: `enforce-snapshot` (PreToolUse после `enforce-floor`) + `enforce-floor-escape-consume` (PostToolUse); shadow→hard-block | владелец |
| A5 / R-20+R-29 | Стена М2: matcher `*` в settings.json + HMAC-ключ включать **вместе** (иначе кирпичит мутации) | владелец |
| A6 / R-15 | M1 пол: узкий matcher хука (код готов, нужна регистрация — иначе MCP-писатель не ловится) | владелец |
| A7 / R-07 | M3 роутер: live-wiring + живой Sonnet вместо мока | владелец |
| A8 / R-34 | Правила судьи в защищённом файле (контроллер не смягчит) | владелец/конфиг |
| A9 | **Push всего эпика** (commit-not-push) | владелец («пуш») |

## ✅ B. Вшивка — ЗАКРЫТ 2026-06-09 (commit-not-push, ветка worktree-brainrepo)

Классы 1+2 (R-09/R-24/R-30/reconcile) + R-08 (волны) реализованы TDD инлайн. Все блоки
observation-only / стена усилена под волны без ослабления инварианта. Регрессия tools-only
**3257 GREEN / 0 failed**; все существующие тесты GREEN без правок (flat-регрессия SE-7).

| ID | Хвост | Факт |
|---|---|---|
| R-26 | Система собрана деталями, нигде не включена живьём (зонтик над A). | ⏳ owner (A, Ф8) |
| ✅ R-08 | Волны: step-pointer tree → живой `supreme-gate.main` | **ГОТОВО** — единый дерево-указатель (целое=depth-1/массив=глубже), `treeLeafAt`/`advanceOverTree`/`validatePlanTree`, SE-1 флаг `advance`; adversarial-разбор (audit-context→sharp-edges→variant-analysis), spec `2026-06-09-r08-hierarchical-waves-design.md` |
| ✅ R-09 | Очередь обучения в STATUS | **ГОТОВО** — `computeLearningQueueBlock` (read-only) |
| ✅ R-24 | `door-coverage` в STATUS | **ГОТОВО** — `computeDoorCoverageBlock` + `extractGateMatcher`/`CANONICAL_MUTATING_TOOLS` (read-only) |
| ✅ R-30 | `verifyChain` живьём | **ГОТОВО** — `computeJournalIntegrityBlock` (verifyChain live в read-only STATUS-генераторе) |
| ✅ — | `enforce-reconcile.main()` reader | **ГОТОВО** — `reconcileEvent` + main-reader (WARN-only, ИНЕРТЕН до регистрации хука владельцем A3) |
| — | `enforce-decomposition-detector` / `enforce-parallel-session-lock:12` — no-op до Ф8 (последний → §10 увольнение). | ⏳ owner (Ф8) |
| — | **V3 future** (R-08 variant-analysis): `enforce-normative-content-rules.mjs:253` `sealedPlanCoversEdit` — при Ф8 owner-wiring coverage через `actionMatchesStep` обязана стать tree-aware (`treeLeaves`). | ⏳ owner (Ф8) |

## 🟧 C. Контракты к будущим машинам / осознанно отложено (без призраков)

- **R-06** — K4 узкое Write-исключение в `decideMode` — включать ПОСЛЕ live K1.
- **R-10** — G6 адаптер чужого скила под журналом + сверка судьёй — **НЕ построен**.
- **М4 think-layer** — 4 пункта думающего слоя задокументированы как задачи этапа включения; рассинхрон счётчика халтуры с журналом — вопрос подключения.
- **М6 FIX-5** — подпись floor_escape-гранта сознательно не делали (spec §6 «не обязательно»; в режиме без ключа нулевая защита).
- **М5 F-4** — ложные срабатывания защиты при описании механизма → решение владельца C (код не менять); «3 круга→эскалация» Layer 4 ведёт контроллер вручную.
- **М1** — атомарность дозаписи журнала: ✅ **запинен** характеризационным тестом (2026-06-09, commit `5782ede3`) — оборванная дозапись (entry в jsonl без обновления head) → `verifyChain {ok:false, brokenAt}` (fail-closed подтверждён). Сама неатомарность двух fs-вызовов по конструкции остаётся (исправление = иной дизайн персиста, owner-scope). **М2** — межмашинные контракты T1-T9: не спецированы как задачи (высокоуровневая отметка), не автономно-закрываемы.

## 🟨 E. Doc-gaps / косметика

- ✅ **DOC-1** (E/G warm-up `a85d7f9d`): callout добавлен в M7 design spec §10 (перед активацией М6 — escape чтут только М2/М5/egress; до Фазы 8 частичный по конструкции).
- ✅ **Доска «Кто на посту» — детальный рендер** (E/G warm-up `cf9f803d`): `computeGuardBoardBlock` рендерит таблицу недавних escape/блоков при непустых массивах + `escapeCell` anti-injection (SE-3). **Открытым остаётся live-источник** событий (`main()` передаёт `[]`) — это вшивка B-блока (R-09/R-30), не E.
- ✅ **M3 `node-graph` docstring** + пиннинг (E/G warm-up `553ddea4`): docstring «от loadRegistry» уточнён (принимает любой plain `{nodes,chains}`-литерал). `brain-retro-opus-reviewer` prompt-caching no-op — **уже был задокументирован** в коде (строки 38-43), добавлен лишь пиннинг-тест контракта.

## 🟦 F. Архитектурные (решение владельца)

- **enforce-hole-3-deferred** — доверять ли `confidence<0.7`, когда LLM-классификатор реально отработал; вариант **C** (trust-level field + `schema_version` bump, ~1-2 дня) = Stage 4 router-discipline-overhaul; re-open по данным (≥5 эпизодов skip при `recommended_node≠null`).
- **Остаточный предел ~0.5%** неустраним (7 ограничений v4); абсолют ключа — только HSM/YubiKey (v4.2-фаза).

## ⬜ G. Периферия мозга (Машина 0 — observer/governance, в основном на origin/main)

Почти всё DONE+pushed; открыты только фаза-2 и мелочи:

- **Фаза 2** (observer spec §10): независимый LLM agent-судья качества роутинга, реальные `confusion_marker`/`chain_divergence`, real-time friction-флаги, авто-правка нормативки.
- ✅ **4-й FP-класс** routing-gate (E/G warm-up `5ae0b135`): новый узкий `stripPastedContext` (fenced+blockquote only) снимает PASTED-цитаты `/node` ДО детекции; inline-форма остаётся директивой (FP-смещение routingGate сохранено, SE-1).
- ✅ **regex-нити** (E/G warm-up): `\bcommit\b` убран из release-класса `classifyTask` (`cfc4e0a8`); двойной счёт перекрывающихся PII закрыт единым конвейером sanitize/count (`84f75abb`, count==редакции, SE-2).
- Embedding-index: файл-кэш + HNSW/faiss — defer (пока N мал). ✅ `observer-self-assessment-api.test.mjs` — заметка «pre-existing fail» **устарела**: фактически 17/17 GREEN (проверено 2026-06-09). **Открытым остаётся:** Фаза 2 observer (LLM agent-судья качества + **авто-правка нормативки** → требует owner-scoping, НЕ автономно: правка Pravila/Tooling — ровно то, что стерегут М1–М6).

---

## Вывод: критический путь к боевому режиму

| Этап | Что | Кто |
|---|---|---|
| 1 | ✅ **H** — карточки 86 узлов + конфликт-рёбра (ЗАКРЫТ 2026-06-08, commit-not-push) | **Claude — ГОТОВО** |
| 2 | ✅ **B** — вшивка R-08/R-09/R-24/R-30 + `reconcile` (ЗАКРЫТ 2026-06-09, commit-not-push, 3257 GREEN) | **Claude — ГОТОВО** |
| 3 | Owner-обкатка в **shadow** (судья + пол + стена + escape) | владелец |
| 4 | **A** — активация + Фаза 8 переезд + увольнение зоопарка + push | владелец |

**Этапы 1–2 (данные + код) ЗАКРЫТЫ Claude.** Автономный фронт исчерпан: остаток — этап 3–4
(рубильник владельца: settings.json/ключи/shadow-обкатка/Ф8-переезд/push) + Фаза 2 observer
(требует owner-scoping из-за авто-правки нормативки) + C-контракты (owner-gated / «после live K1»).
Один автономный хвост закрыт сверх B: М1 атомарность журнала запинена (commit `5782ede3`).

## Дальше

- Согласовать порядок (рекомендуется начать с **H** — наполнение карточек через `writing-plans` → схема контракта + проход по ~86 узлам + конфликт-рёбра).
- Этот файл — якорь; обновлять по мере закрытия пунктов.
