From 85ffb25e2da7fc880b9fe4bd7c41762888fa4cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Mon, 8 Jun 2026 16:40:40 +0300 Subject: [PATCH] =?UTF-8?q?docs(router-mentor):=20=D1=81=D0=B2=D0=BE=D0=B4?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D1=80=D0=B5=D0=B5=D1=81=D1=82=D1=80=20?= =?UTF-8?q?=D1=85=D0=B2=D0=BE=D1=81=D1=82=D0=BE=D0=B2=20=D1=8D=D0=BF=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B4=D0=BE=20=D0=B1=D0=BE=D0=B5=D0=B2=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Свод всех отложенных пунктов «роутер-наставник / реинжиниринг мозга» (7 машин + router-discipline + периферия мозга + граф скилов): блоки H/A/B/C/E/F/G, критический путь к продакшену, колонка «кто закрывает» (Claude / владелец). Read-only сбор, ничего не чинится. Главный недостающий кусок — карточки узлов (2 из ~86) + конфликт-рёбра (0). Co-Authored-By: Claude Opus 4.8 (1M context) --- ...06-08-router-mentor-loose-ends-registry.md | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 docs/superpowers/plans/2026-06-08-router-mentor-loose-ends-registry.md diff --git a/docs/superpowers/plans/2026-06-08-router-mentor-loose-ends-registry.md b/docs/superpowers/plans/2026-06-08-router-mentor-loose-ends-registry.md new file mode 100644 index 00000000..88b7ff78 --- /dev/null +++ b/docs/superpowers/plans/2026-06-08-router-mentor-loose-ends-registry.md @@ -0,0 +1,100 @@ +# Реестр хвостов эпика «роутер-наставник / реинжиниринг мозга» — до боевого режима + +**Дата:** 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. Граф скилов / карточки — данные (Claude может; главный недостающий кусок) + +Без этого роутер M3 живьём выбирает узлы «вслепую». Механика 3-A/3-B построена и протестирована; не хватает **данных**. + +| ID | Хвост | Факт сейчас | Кто | +|---|---|---|---| +| **H1 / R-11** | Карточки-контракты узлов (`needs/produces/constraints` + `preview-form/defaults/key-decisions/acceptance-criteria`) | **2 из ~86** написаны (`docs/registry/contracts/writing-plans.contract.json`, `operations-process-doc.contract.json`); ~84 пусты | **Claude** (данные) | +| **H2 / R-12** | Явные конфликт-рёбра `attributes.conflicts_with` в `docs/registry/nodes.yaml` (free-text граф не парсит, только explicit) | **0** проставлено | **Claude** (данные) | +| H3 / 3.4-3.5 | Наполнять ли память/примеры роутера (few-shot) | решение отложено владельцем | владелец → Claude | + +## 🟥 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. Вшивка — код готов, не подключён живьём + +| ID | Хвост | +|---|---| +| R-26 | Система собрана деталями, нигде не включена живьём (зонтик над A). | +| R-08 | Волны: step-pointer tree → живой `supreme-gate.main`; до вшивки крупный шаг динамически НЕ дробится, правка плана только через возврат в разговор + перепечать (closed-door C-5). | +| R-09 | Доставка очереди обучения (`statusSignal`/`renderApprovalSection`) в STATUS/brain-retro. | +| R-24 | `door-coverage` не вшит в живой прогон/STATUS (утилита есть). | +| R-30 | Журнал пишется, но `verifyChain`/reconcile/door живьём не вызываются. | +| — | `enforce-reconcile.main()` — пустой каркас; 2-й такт сверки после owner-настройки (чистые функции готовы). | +| — | `enforce-decomposition-detector` / `enforce-parallel-session-lock:12` — no-op до Ф8 (последний → §10 увольнение). | + +## 🟧 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** — атомарность дозаписи журнала оставлена (fail-closed по конструкции, чистого теста нет). **М2** — межмашинные контракты T1-T9. + +## 🟨 E. Doc-gaps / косметика + +- **DOC-1 (важно перед активацией М6):** escape чтут только стена М2/пол М5/egress; параллельные стражи (`enforce-router-gate`, `enforce-runtime-write-deny`, судья) escape НЕ знают → реальный `force-push`/`.env`-запись не пройдут, пока зоопарк зарегистрирован. Полностью «дверь» открывается только когда Фаза 8 растворит/научит зоопарк (escape-awareness, §10 правило 7). +- Доска «Кто на посту» — **детальный рендер недавних escape/блоков** (счётчики есть, детализация — follow-up handoff#5). +- M3 `node-graph` docstring «от loadRegistry» (косметика комментария). `brain-retro-opus-reviewer` prompt-caching no-op (perf-minor). + +## 🟦 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: цитата `/node` в pasted-тексте классифицируется как директива (минор, observer accuracy). +- Embedding-index: файл-кэш + HNSW/faiss — defer (пока N мал). `observer-self-assessment-api.test.mjs:258` pre-existing fail (тех-долг). Мелкие regex-нити (`\bcommit\b` в release-классе / двойной счёт перекрывающихся PII-паттернов). + +--- + +## Вывод: критический путь к боевому режиму + +| Этап | Что | Кто | +|---|---|---| +| 1 | **H** — карточки ~84 узлов + конфликт-рёбра (главный недостающий кусок) | **Claude** | +| 2 | **B** — вшивка R-08/R-09/R-24/R-30 + `reconcile` | Claude (код) + владелец (порядок) | +| 3 | Owner-обкатка в **shadow** (судья + пол + стена + escape) | владелец | +| 4 | **A** — активация + Фаза 8 переезд + увольнение зоопарка + push | владелец | + +**Claude может двигать к продакшену прямо сейчас только этапы 1–2** (данные + код); этап 3–4 — рубильник владельца (settings.json/ключи), делается последним. + +## Дальше + +- Согласовать порядок (рекомендуется начать с **H** — наполнение карточек через `writing-plans` → схема контракта + проход по ~86 узлам + конфликт-рёбра). +- Этот файл — якорь; обновлять по мере закрытия пунктов.