Files
portal/docs/superpowers/specs/2026-06-14-claude-brain-split-design.md
T

83 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Дизайн: выделение «мозга» в отдельный проект `claude-brain`
**Дата:** 2026-06-14
**Статус:** согласован заказчиком (дизайн), ожидает spec-review → writing-plans
**Кодовая фраза среды:** «роутер-наставник» (работа идёт под стеной supreme-gate)
## Цель
Разделить текущий смешанный репозиторий `c:\моя\проекты\портал crm\Документация` на два:
1. **`claude-brain`** (новый, `C:\моя\проекты\claude-brain`) — дом дальнейшей разработки «мозга» (Claude-governance / router-mentor / observer / registry / enforcement-машинерия M1M7).
2. **`Документация` (здесь)** — продукт **Лидерра** (Laravel+Vue CRM) + **замороженный работающий рантайм мозга**, который продолжает гейтить работу. Дальнейшая работа здесь — только над Лидеррой.
Мозг **копируется** в claude-brain (не вырезается). Здесь он остаётся как замороженный рантайм. Цель — ювелирная полнота: claude-brain работает автономно, рантайм здесь не сломан.
## Решения (locked) {#D1}
- **Модель связи — снимок-рантайм.** Здесь — замороженный рантайм мозга + Лидерра. claude-brain — дом разработки. Будущие улучшения мозга вносятся в claude-brain и при желании вручную ре-синкаются сюда по команде владельца.
- **git claude-brain — чистый старт.** Новый репозиторий, первый коммит = текущее состояние мозга. История остаётся в исходном репо (мозг и Лидерра переплетены в общих коммитах — чистое разделение истории невозможно). origin позже (GitHub-аккаунт `CoralMinister` suspended → push обоих репо сейчас невозможен; claude-brain пока локальный).
- **Нормативный квартет — копия-снимок.** claude-brain получает копию `CLAUDE.md` / `Pravila` / `PSR_v1` / `Tooling` / `CHANGELOG_claude_md` как есть. Здесь квартет остаётся как есть (рантайм стены его читает — ломать нельзя). Контент-split «governance-only vs product-only» — отдельный будущий рефактор, НЕ эта задача.
- **Тест-харнесс мозга — только в claude-brain.** 3931 vitest-тест + `vitest.config.tools.mjs` (сейчас физически в `app/`) + brain-scripts (`test:tools`/`eval:llm`/`brain:dashboard`) переезжают в claude-brain. Здесь — рантайм без своих brain-тестов: `test:tools` убирается из корневого `package.json`, `vitest.config.tools.mjs` выносится из `app/`.
## Инвентарь — три корзины {#D2}
Источник: триангуляция 5 углов (graphify-граф — второстепенный, слеп к M1M7; import-closure `tools/`; конфиг-классификация; doc/memory cross-refs; hook-closure из settings.json — owner-зависимость) + critic-проход.
### A. Копируется в claude-brain (мозг развивается там)
- `tools/*.mjs` (~180190 production) + `tools/*.test.mjs` (~160170) + tools-data (`observer-chain-map.json`, `router-test-prompts.json`, `subagent-output-schema.json`, `.node-dormancy.json`, `enforce-override-vocab.json`, `observer-known-nodes.txt`). **Кроме** `tools/liderra-monitoring/`.
- `vitest.config.tools.mjs` (выносится из `app/` → корень claude-brain) + brain-scripts.
- `docs/observer/`, `docs/registry/`, `docs/router-procedure.md`, `docs/routing-off-phase.md`, `docs/discovery/`, `docs/superpowers/router-mentor-wall-GUIDE.md`.
- brain-specs/plans (keyword-правило ниже), governance-ADR (011/016 + off-phase-tooling ADR 003-010/012-015/017/019).
- нормативный квартет (**копия**).
- brain-память + brain-агенты (`normative-sync`, `reviewer-agent`).
- shared-конфиги — brain-подмножество (lefthook 9 brain-jobs, .mcp.json 4 brain-сервера redis/perplexity/exa/firecrawl, package.json brain-часть, копии cspell/.gitignore).
### B. Остаётся здесь (Лидерра + замороженный рантайм)
- `app/`, `db/`, `web/`, `лендинг/`, `liderra_v8_handoff/`, `.github/workflows/`.
- Лидерра-доки: `docs/CRM_*`, `docs/Открытые_вопросы_*`, `docs/Analiz_*`, `docs/security/`, `docs/deploy/`, `docs/api/`, `docs/architecture/`, `docs/audit/`, `docs/ml/`, `docs/process/`, `docs/backend/`, `docs/projects/`, `docs/support/`.
- Лидерра-specs/plans (billing/supplier/lead-region/slepok/audit/project/admin), Лидерра-ADR (001/002/018).
- Лидерра-агенты (`pest-parallel-debugger`, `rls-reviewer`, `prod-deploy-validator`), `tools/liderra-monitoring/`.
- **Замороженный рантайм мозга**: `tools/*.mjs` (полностью — runtime стены), `docs/observer/` + `docs/registry/` (writable/readable рантаймом — подтвердить hook-closure), квартет (как есть). brain `*.test.mjs` здесь **не нужны** (рантайм их не читает).
- Лидерра-память.
### C. Shared — расщепляется по факту
- `lefthook.yml` / `.mcp.json` / `package.json` / `.gitignore` — каждому репо своё подмножество; 3 shared-jobs (gitleaks/markdownlint/cspell) + 2 shared-MCP (github/semgrep) — в обоих.
- `cspell-words.txt` — неразделим → копия в обоих.
- **user-level скилы** (`~/.claude/skills/`, `~/.claude/plugins/`) — общая инфраструктура, **не трогаем** (вне git-дерева обоих репо). `.claude/skills/` в репо — пусто (`.gitkeep`).
### keyword-правило для specs/plans {#D3}
- → claude-brain: `router-mentor`, `router-gate`, `router-discipline`, `judge`, `floor`, `escape`, `machine`, `observer`, `brain-governance`, `brain-factor`, `automation-graph`, `print-sanity`, `sealed-plan`, `safe-baseline`, `llm-first-router`, off-phase-tooling-design (адр-номерные).
- → остаётся здесь: `billing`, `supplier`, `lead-region`, `slepok`, `audit`, `project`, `admin`, `deals`, `csv-reconcile`, `webhook`, `migrate`, `delete`, `parallel-sessions`, `controller-offload`.
- Спорные (`enforce-hard-rules`, `controller-offload-agents`, off-phase-tooling) — в critic-список, ручная классификация.
## Критическая последовательность {#D4}
1. **Сначала** собрать claude-brain (полная копия мозга) + **верифицировать автономно**: 3931 vitest tools GREEN в claude-brain, стена-смок (хуки исполняются), gitleaks 0, 0 Лидерра-секретов/данных. Эта фаза **НЕ требует settings.json**.
2. **Только после** автономной верификации claude-brain — прун здесь. Прун **минимальный**: убрать лишь brain DEV-артефакты, которые не читает ни один активный хук (brain `*.test.mjs`, brain design-specs/plans, brain-retro-заметки, `vitest.config.tools.mjs` из `app/`, `test:tools` из корня). Рантайм-входы (`tools/*.mjs`, `docs/observer/`, `docs/registry/`, квартет) — **не трогаются**.
3. **Перед пруном** — owner присылает блок `"hooks"` из `.claude/settings.json` (мне Read-denied по `READ_DENY_PATTERNS`) → доказываем hook-closure (что именно рантайм читает) → решаем, что безопасно удалить. До этого прун не начинаем.
## Крайние случаи / риски {#D5}
- **`vitest.config.tools.mjs` в `app/`** — тест-харнесс мозга вплетён в Лидерра-каталог; вынос трогает `app/`, но чисто (конфиг 100% brain).
- **Runtime-зависимости claude-brain**: `~/.claude/runtime` (session-scoped, не код), node_modules (`js-yaml`, `ajv`, `@xenova/transformers`, `undici`, `keytar`, `shell-quote`, `proper-lockfile`, `glob`, `natural`), ProxyAPI/keychain/git/powershell. claude-brain нужен свой `npm install` (свой package.json + lockfile).
- **Hook-closure неизвестен мне** (settings.json Read-denied) → owner-gate перед пруном (см. D4 п.3). Фаза копирования им не блокируется (claude-brain получает всё).
- **Откат**: прун здесь — отдельная git-ветка/worktree, до мержа всё восстановимо `git restore`. claude-brain — новый каталог, на исходный репо не влияет.
- **Под стеной**: реальные правки кода/конфигов — только опечатанными шагами плана; правки квартета/памяти — owner FLOOR-ESCAPE per write.
## Критерий готовности {#D6}
- claude-brain: `npm install` ок, `npx vitest run --config vitest.config.tools.mjs` = 3931 passed (база), хуки исполняются автономно, gitleaks 0, 0 Лидерра-данных.
- Здесь после пруна: стена по-прежнему гейтит (live-смок), Лидерра-регрессия зелёная (Pest/Vitest/build), `git status` чист.
- Независимый review: claude-brain полон (ничего load-bearing не забыто) И здесь рантайм не сломан.
```verified-context-json
[
{"id": "vc-tools-data", "kind": "EXTRACTED", "ref": "tools/cost-pricing.mjs", "anchor": "export const PRICING = Object.freeze("}
]
```