# Дизайн: выделение «мозга» в отдельный проект `claude-brain`

**Дата:** 2026-06-14

## Цель

Разделить смешанный репозиторий `Документация` на два проекта:

1. **`claude-brain`** (новый, `C:\моя\проекты\claude-brain`) — дом дальнейшей разработки слоя управления Claude (router / mentor / observer / registry / enforcement-машинерия M1–M7 в `tools/`).
2. **`Документация` (текущий)** — продукт **Лидерра** (Laravel + Vue CRM) плюс замороженная рабочая копия управляющего слоя, которая продолжает действовать. Дальнейшая работа в текущем репозитории — только над Лидеррой.

Управляющий слой **копируется** в `claude-brain` (не вырезается). В текущем репозитории он остаётся как замороженная рабочая копия. Требование — полнота переноса: `claude-brain` работает автономно, рабочая копия в текущем репозитории не ломается.

## Решения {#D1}

- **Модель связи — снимок.** Текущий репозиторий держит замороженную рабочую копию управляющего слоя + Лидерру. `claude-brain` — дом разработки. Будущие улучшения вносятся в `claude-brain` и вручную переносятся в текущий репозиторий по отдельной команде.
- **git у `claude-brain` — чистый старт.** Новый репозиторий, первый коммит = текущее состояние управляющего слоя. История остаётся в исходном репозитории (управляющий слой и Лидерра переплетены в общих коммитах — чистое разделение истории невозможно). Удалённый origin подключается позже.
- **Нормативный квартет — копия.** `claude-brain` получает копию `CLAUDE.md` / `Pravila_raboty_Claude_v1_1.md` / `Plugin_stack_rules_v1.md` / `Tooling_v8_3.md` / `CHANGELOG_claude_md.md` как есть. В текущем репозитории квартет остаётся как есть. Разбор содержимого на «управление vs продукт» — отдельная будущая задача, не эта.
- **Тесты управляющего слоя — только в `claude-brain`.** ~3931 vitest-теста (`tools/*.test.mjs`) + `vitest.config.tools.mjs` (сейчас физически в `app/`) + скрипты `test:tools` / `eval:llm` / `brain:dashboard` переезжают в `claude-brain`. В текущем репозитории `test:tools` убирается из корневого `package.json`, `vitest.config.tools.mjs` выносится из `app/`.

## Инвентарь — три корзины {#D2}

Источник: триангуляция нескольких независимых углов (граф проекта; карта импортов `tools/`; классификация конфигов; перекрёстные ссылки docs/memory; список активных runtime-процессов) + перепроверочный проход.

### A. Копируется в `claude-brain`

- `tools/*.mjs` (~180–190 рабочих модулей) + `tools/*.test.mjs` (~160–170 тестов) + данные `tools/` (`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`) + скрипты управляющего слоя.
- `docs/observer/`, `docs/registry/`, `docs/router-procedure.md`, `docs/routing-off-phase.md`, `docs/discovery/`, управляющие руководства из `docs/superpowers/`.
- управляющие specs/plans (правило ключевых слов — {#D3}), управляющие ADR (011, 016 + ADR off-phase-тулинга 003–010, 012–015, 017, 019).
- нормативный квартет (**копия**).
- память управляющего слоя + агенты `normative-sync`, `reviewer-agent`.
- подмножества общих конфигов (lefthook 9 управляющих job'ов, `.mcp.json` 4 сервера redis/perplexity/exa/firecrawl, управляющая часть `package.json`, копии `cspell-words.txt` / `.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` (полностью), `docs/observer/` + `docs/registry/` (подтвердить, что читаются рабочими процессами), квартет (как есть). Тесты `tools/*.test.mjs` здесь не нужны.
- Память Лидерры.

### C. Общее — расщепляется по факту

- `lefthook.yml` / `.mcp.json` / `package.json` / `.gitignore` — каждому репозиторию своё подмножество; 3 общих job'а (gitleaks / markdownlint / cspell) + 2 общих MCP (github / semgrep) — в обоих.
- `cspell-words.txt` — неразделим → копия в обоих.
- скилы и плагины уровня пользователя (`~/.claude/skills/`, `~/.claude/plugins/`) — общая инфраструктура, не трогаются (вне git-дерева обоих репозиториев). `.claude/skills/` в репозитории — пусто (`.gitkeep`).

## Правило ключевых слов для 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-тулинга.
- → остаётся: `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-тулинг) — в список ручной классификации перепроверочного прохода.

## Последовательность {#D4}

1. **Сначала** собрать `claude-brain` (полная копия управляющего слоя) и **верифицировать автономно**: ~3931 vitest-теста проходят в `claude-brain`, хуки исполняются, gitleaks 0, отсутствуют данные/секреты Лидерры.
2. **Только после** автономной верификации `claude-brain` — удаление в текущем репозитории. Удаление **минимальное**: только артефакты разработки управляющего слоя, которые не читаются ни одним рабочим процессом (`tools/*.test.mjs`, управляющие design-specs/plans, заметки brain-retro, `vitest.config.tools.mjs` из `app/`, `test:tools` из корня). Рабочие входы (`tools/*.mjs`, `docs/observer/`, `docs/registry/`, квартет) — не трогаются.
3. **Перед удалением** в текущем репозитории — зафиксировать полный список активных runtime-процессов и то, какие пути они читают, чтобы не удалить нужное. До этой фиксации удаление не начинается.

## Крайние случаи и риски {#D5}

- `vitest.config.tools.mjs` физически лежит в `app/`, хотя на 100% относится к управляющему слою; вынос затрагивает `app/`, но чисто.
- Зависимости рантайма `claude-brain`: node_modules (`js-yaml`, `ajv`, `@xenova/transformers`, `undici`, `keytar`, `shell-quote`, `proper-lockfile`, `glob`, `natural`), внешний API-прокси, системное хранилище ключей, `git`, `powershell`. `claude-brain` нужен собственный `npm install` (свой `package.json` + lockfile).
- Точный набор путей, читаемых рабочими процессами, фиксируется до фазы удаления (см. {#D4} п.3); фаза копирования этим не блокируется (`claude-brain` получает всё).
- Откат: удаление в текущем репозитории идёт в отдельной git-ветке/worktree, до слияния всё восстановимо `git restore`. `claude-brain` — новый каталог, на исходный репозиторий не влияет.

## Критерий готовности {#D6}

- `claude-brain`: `npm install` проходит, `npx vitest run --config vitest.config.tools.mjs` = ~3931 passed, хуки исполняются автономно, gitleaks 0, нет данных Лидерры.
- Текущий репозиторий после удаления: рабочая копия управляющего слоя по-прежнему действует, регрессия Лидерры зелёная (Pest / Vitest / build), `git status` чист.
- Независимая проверка: `claude-brain` полон (ничего несущего не забыто) и рабочая копия в текущем репозитории не сломана.

```verified-context-json
[
  {"id": "vc-tools-data", "kind": "EXTRACTED", "ref": "tools/cost-pricing.mjs", "anchor": "export const PRICING = Object.freeze("}
]
```
