docs(brain-plugin-routing): implementation plan

6 atomic tasks (5 commits + 1 verification) for implementing brain-plugin-routing.md
v1.0 per design spec dbd80e9.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-05-11 13:42:58 +03:00
parent dbd80e9715
commit 22eb6abf05
@@ -0,0 +1,637 @@
# Brain Plugin Routing Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Create `docs/brain-plugin-routing.md` v1.0 + update 5 related artifacts so brain repo gets explicit, non-PSR plugin selection rules that resolve the 8 sources of ambiguity (К1-К8) identified in the design spec.
**Architecture:** Single new normative document (~275 lines) covers reestr + disabled-in-brain soft-rule + routing table + categorization + install checklist + update procedure. CLAUDE.md root gets a short link. `plugins-manifest.json` gains opt-in `target` field for consumer-targeting (D9). `settings-fragment.json` adds 2 Phase 0 meta plugins. `.brain-version` + CHANGELOG.md bump to v1.1.
**Tech Stack:** Markdown, JSON (jq for validation), git atomic commits.
**Spec:** [docs/superpowers/specs/2026-05-11-brain-plugin-routing-design.md](../specs/2026-05-11-brain-plugin-routing-design.md) (commit `dbd80e9`)
---
## File Structure
| File | Action | Responsibility |
|---|---|---|
| `docs/brain-plugin-routing.md` | CREATE | главный нормативный документ; 7 разделов |
| `CLAUDE.md` (root) | UPDATE | оперативная карта brain'а; +5-7 строк ссылка на routing.md |
| `user-level-files/plugins-manifest.json` | UPDATE | snapshot pinned versions; +`target` field (D9) + 2 новые entries |
| `user-level-files/settings-fragment.json` | UPDATE | `enabledPlugins` snapshot; +2 entries skill-creator + claude-code-setup |
| `.brain-version` (root) | UPDATE | self-marker brain'а; v1.0 → v1.1 |
| `CHANGELOG.md` (root) | UPDATE | history brain'а; +v1.1 entry |
**Total:** 6 файлов изменяется; 1 создаётся (routing.md). 5 атомарных commit'ов:
- Task 1 → routing.md
- Task 2 → CLAUDE.md
- Task 3 → plugins-manifest.json
- Task 4 → settings-fragment.json
- Task 5 → .brain-version + CHANGELOG.md (атомарный bump согласно D11)
Task 6 — verification only, без commit'а.
---
### Task 1: Create `docs/brain-plugin-routing.md` v1.0
**Files:**
- Create: `docs/brain-plugin-routing.md`
**Source of content:** [docs/superpowers/specs/2026-05-11-brain-plugin-routing-design.md §3.1-§3.7](../specs/2026-05-11-brain-plugin-routing-design.md). Каждый раздел spec'а — это section в routing.md.
**Mapping spec → routing.md разделы:**
- spec §3.1 → routing.md §1 (Шапка + Принципы)
- spec §3.2 → routing.md §2 (Реестр + Disabled-in-brain)
- spec §3.3 → routing.md §3 (Routing table + tie-breakers)
- spec §3.4 → routing.md §4 (Categorization 5 + распределение 22 строк)
- spec §3.5 → routing.md §5 (Install checklist 5 подсекций)
- spec §3.6 → routing.md §6 (Update procedure)
- spec §3.7 → routing.md §7 (Финальная формула + свойства)
- [ ] **Step 1: Write pre-edit grep test (RED)**
Run: `grep -c "## §" "c:/моя/проекты/claude-brain/docs/brain-plugin-routing.md" 2>/dev/null || echo 0`
Expected: `0` (файл ещё не существует или есть, но без `## §` секций)
- [ ] **Step 2: Implement — write full routing.md per spec §3.1-§3.7**
Содержание полностью derivable из committed design spec. Engineer должен открыть spec и пройти секции §3.1 → §3.7 последовательно. **Не** добавлять контент не из spec'а; **не** пропускать секции.
Ключевые конкретные элементы которые должны попасть в файл:
- §1 — версия v1.0, дата 2026-05-11, явная ссылка на CLAUDE.md и PSR template (с пометкой «не применяется к brain»), 3 принципа
- §2.1 — таблица 6 плагинов с категориями process/meta/consumer-UI
- §2.2 — soft-rule с триггером по `pwd` начинается с `c:/моя/проекты/claude-brain/`, edge case для structural visualization HTML edit
- §3 — 17 routing-rows + 3 tie-breakers
- §4.1 — 5 категорий (meta / consumer-universal / consumer-stack-gated / consumer-UI / skip)
- §4.2 — таблица 22 строк (4 legacy + 17 shortlist + 1 cut)
- §4.3 — правило установки нового плагина
- §5.1-§5.5 — 5 install подсекций с шагами; §5.1 шаг 2 явно говорит что на этой машине primary install = `git clone` (Phase 0 Path 2), preferred-future = `/plugin install`
- §6.1-§6.4 — Update procedure
- §7 — финальная формула + свойства
- [ ] **Step 3: Verify section count (GREEN test)**
Run: `grep -c "^## §" "c:/моя/проекты/claude-brain/docs/brain-plugin-routing.md"`
Expected: `7` (ровно 7 разделов §1-§7)
- [ ] **Step 4: Verify key tokens present**
Run: `grep -c "soft-rule\|consumer-universal\|consumer-stack-gated\|consumer-UI\|skill-creator\|claude-md-improver\|skip" "c:/моя/проекты/claude-brain/docs/brain-plugin-routing.md"`
Expected: ≥ 7 (одна или больше встречаемость каждой ключевой категории/токена)
- [ ] **Step 5: Verify line count target**
Run: `wc -l "c:/моя/проекты/claude-brain/docs/brain-plugin-routing.md"`
Expected: 250-300 строк (per spec §3 target ~275).
- [ ] **Step 6: Commit atomic**
```bash
cd "c:/моя/проекты/claude-brain"
git add docs/brain-plugin-routing.md
git commit -m "$(cat <<'EOF'
feat(brain-plugin-routing): create routing rules v1.0
Normative document for plugin selection in brain repo. Implements design
spec dbd80e9. Covers reestr, disabled-in-brain soft-rule, routing table,
categorization, install checklist, and update procedure.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
```
Expected: 1 file changed, ~275 insertions.
---
### Task 2: Update root `CLAUDE.md` — add link to routing.md
**Files:**
- Modify: `CLAUDE.md` (brain root) — append section after existing structure
**Goal:** короткая (5-7 строк) ссылка с описанием на новый routing документ.
- [ ] **Step 1: Read current CLAUDE.md state (RED — verify no plugin section yet)**
Run: `grep -c "brain-plugin-routing\|Plugin routing\|выбор плагина" "c:/моя/проекты/claude-brain/CLAUDE.md"`
Expected: `0` (никаких упоминаний routing.md пока нет)
- [ ] **Step 2: Implement — append section to CLAUDE.md**
После раздела «## Что НЕ редактировать прямо в этом репо» (line ~28 в текущей версии — проверить точное место), перед разделом «## Безопасность», вставить:
```markdown
## Выбор плагина и установка нового
Brain имеет собственные правила выбора плагина — **не PSR template** (тот для consumer'а с UI/Vue стеком, в brain не применяется).
- Какой плагин брать для задачи / как разрешить overlap / куда поставить новый — см. [docs/brain-plugin-routing.md](docs/brain-plugin-routing.md) (v1.0+)
- При работе в brain repo плагины `frontend-design` и `ui-ux-pro-max` игнорируются (soft-rule §2.2 routing.md) — несмотря на их `enabledPlugins: true` на user-level
- При установке нового плагина — atomic procedure из §5 routing.md (6 артефактов)
```
- [ ] **Step 3: Verify section added (GREEN test)**
Run: `grep -c "brain-plugin-routing" "c:/моя/проекты/claude-brain/CLAUDE.md"`
Expected: `1` (одна ссылка)
Run: `grep -c "## Выбор плагина" "c:/моя/проекты/claude-brain/CLAUDE.md"`
Expected: `1`
- [ ] **Step 4: Verify CLAUDE.md still parses as markdown**
Run: `head -60 "c:/моя/проекты/claude-brain/CLAUDE.md"`
Expected: вывод содержит новый раздел между «## Что НЕ редактировать прямо в этом репо» и «## Безопасность»
- [ ] **Step 5: Commit atomic**
```bash
cd "c:/моя/проекты/claude-brain"
git add CLAUDE.md
git commit -m "$(cat <<'EOF'
docs(brain): link CLAUDE.md to brain-plugin-routing v1.0
Add short section pointing to new routing document and disabled-in-brain
soft-rule for FD/UPM.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
```
Expected: 1 file changed, ~10 insertions.
---
### Task 3: Update `user-level-files/plugins-manifest.json` — add `target` field + 2 Phase 0 entries
**Files:**
- Modify: `user-level-files/plugins-manifest.json`
**Goal:** реализовать D9 ENUM `target` field и зафиксировать skill-creator + claude-code-setup в brain manifest'е (К3 — закрытие drift'а Phase 0 Path 2).
**Current state ([user-level-files/plugins-manifest.json](../../../user-level-files/plugins-manifest.json)):** 4 entries — ui-ux-pro-max, claude-md-management, superpowers, frontend-design. Нет поля `target`.
**Target state:**
- 6 entries (4 legacy + skill-creator + claude-code-setup)
- Каждый entry имеет поле `target` со значением:
- `superpowers``"user-level"`
- `claude-md-management``"user-level"`
- `skill-creator``"user-level"` (meta, brain only)
- `claude-code-setup``"user-level"` (meta, brain only)
- `frontend-design``"user-level+consumer"` (consumer-UI category, активен и в brain user-level, и для Liderra)
- `ui-ux-pro-max``"user-level+consumer"` (consumer-UI category)
- skill-creator + claude-code-setup entries — installMethod = `"manual-git-clone-Path2"` (как зафиксировано в [project_brain_v2_phase0.md:24](../../../../../Users/Administrator/.claude/projects/c--------------claude-brain/memory/project_brain_v2_phase0.md))
- [ ] **Step 1: Write jq verification test (RED)**
Run:
```bash
jq -e '.plugins | to_entries | all(.value[0] | has("target"))' "c:/моя/проекты/claude-brain/user-level-files/plugins-manifest.json"
```
Expected: `false` (ни один entry не имеет поля `target` — fail RED)
Run:
```bash
jq '.plugins | keys | length' "c:/моя/проекты/claude-brain/user-level-files/plugins-manifest.json"
```
Expected: `4` (только 4 legacy entries сейчас)
- [ ] **Step 2: Read current actual gitCommitSha for Phase 0 plugins**
```bash
ls -la "$HOME/.claude/plugins/cache/claude-plugins-official/skill-creator/" 2>&1 | head -20
ls -la "$HOME/.claude/plugins/cache/claude-plugins-official/claude-code-setup/" 2>&1 | head -20
cat "$HOME/.claude/plugins/installed_plugins.json" | jq '."skill-creator@claude-plugins-official", ."claude-code-setup@claude-plugins-official"' 2>&1
```
Записать фактические значения `installPath`, `version`, `installedAt`, `lastUpdated`, `gitCommitSha` для skill-creator и claude-code-setup. Использовать их в Step 3.
- [ ] **Step 3: Implement — write new plugins-manifest.json**
Полный новый JSON:
```json
{
"version": 2,
"plugins": {
"ui-ux-pro-max@ui-ux-pro-max-skill": [
{
"scope": "user",
"installPath": "C:\\Users\\Administrator\\.claude\\plugins\\cache\\ui-ux-pro-max-skill\\ui-ux-pro-max\\2.5.0",
"version": "2.5.0",
"installedAt": "2026-05-08T04:27:19.451Z",
"lastUpdated": "2026-05-08T04:27:19.451Z",
"gitCommitSha": "b7e3af80f6e331f6fb456667b82b12cade7c9d35",
"target": "user-level+consumer",
"category": "consumer-UI"
}
],
"claude-md-management@claude-plugins-official": [
{
"scope": "user",
"installPath": "C:\\Users\\Administrator\\.claude\\plugins\\cache\\claude-plugins-official\\claude-md-management\\1.0.0",
"version": "1.0.0",
"installedAt": "2026-05-09T11:00:16.145Z",
"lastUpdated": "2026-05-09T11:00:16.145Z",
"gitCommitSha": "76b35e91d1c99c090b1a08dade53bcc5e352c1b2",
"target": "user-level",
"category": "meta"
}
],
"superpowers@superpowers-dev": [
{
"scope": "user",
"installPath": "C:\\Users\\Administrator\\.claude\\plugins\\cache\\superpowers-dev\\superpowers\\5.1.0",
"version": "5.1.0",
"installedAt": "2026-05-09T11:57:22.170Z",
"lastUpdated": "2026-05-09T11:57:22.170Z",
"gitCommitSha": "f2cbfbefebbfef77321e4c9abc9e949826bea9d7",
"target": "user-level",
"category": "process"
}
],
"frontend-design@claude-plugins-official": [
{
"scope": "user",
"installPath": "C:\\Users\\Administrator\\.claude\\plugins\\cache\\claude-plugins-official\\frontend-design\\unknown",
"version": "unknown",
"installedAt": "2026-05-09T13:02:38.251Z",
"lastUpdated": "2026-05-10T21:02:22.266Z",
"gitCommitSha": "76b35e91d1c99c090b1a08dade53bcc5e352c1b2",
"target": "user-level+consumer",
"category": "consumer-UI"
}
],
"skill-creator@claude-plugins-official": [
{
"scope": "user",
"installPath": "<FILL FROM STEP 2>",
"version": "<FILL FROM STEP 2>",
"installedAt": "<FILL FROM STEP 2>",
"lastUpdated": "<FILL FROM STEP 2>",
"gitCommitSha": "<FILL FROM STEP 2 OR n/a IF MANUAL>",
"installMethod": "manual-git-clone-Path2",
"target": "user-level",
"category": "meta"
}
],
"claude-code-setup@claude-plugins-official": [
{
"scope": "user",
"installPath": "<FILL FROM STEP 2>",
"version": "<FILL FROM STEP 2>",
"installedAt": "<FILL FROM STEP 2>",
"lastUpdated": "<FILL FROM STEP 2>",
"gitCommitSha": "<FILL FROM STEP 2 OR n/a IF MANUAL>",
"installMethod": "manual-git-clone-Path2",
"target": "user-level",
"category": "meta"
}
]
}
}
```
**ВАЖНО:** в Step 2 получены реальные значения для skill-creator + claude-code-setup. Подставить их вместо `<FILL FROM STEP 2>`. Не оставлять placeholder'ы в финальном файле.
- [ ] **Step 4: Run jq verification (GREEN test)**
Run:
```bash
jq -e '.plugins | to_entries | all(.value[0] | has("target"))' "c:/моя/проекты/claude-brain/user-level-files/plugins-manifest.json"
```
Expected: `true`
Run:
```bash
jq '.plugins | keys | length' "c:/моя/проекты/claude-brain/user-level-files/plugins-manifest.json"
```
Expected: `6`
Run:
```bash
jq -e '.plugins | to_entries | all(.value[0].target | test("^(user-level|consumer|user-level\\+consumer)$"))' "c:/моя/проекты/claude-brain/user-level-files/plugins-manifest.json"
```
Expected: `true` (все `target` соответствуют ENUM из D9)
- [ ] **Step 5: Verify no JSON syntax errors**
Run: `jq '.' "c:/моя/проекты/claude-brain/user-level-files/plugins-manifest.json" > /dev/null && echo OK`
Expected: `OK`
- [ ] **Step 6: Commit atomic**
```bash
cd "c:/моя/проекты/claude-brain"
git add user-level-files/plugins-manifest.json
git commit -m "$(cat <<'EOF'
feat(brain-plugins): add target field + register Phase 0 plugins in manifest
Implements D9 ENUM (user-level/consumer/user-level+consumer) and closes
Phase 0 install drift (К3) by registering skill-creator and claude-code-setup
in brain manifest. Also tags each entry with category from routing.md §4.1.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
```
Expected: 1 file changed.
---
### Task 4: Update `user-level-files/settings-fragment.json` — add 2 Phase 0 entries to enabledPlugins
**Files:**
- Modify: `user-level-files/settings-fragment.json`
**Goal:** brain settings-fragment отражает реальное состояние `~/.claude/settings.json` после Phase 0 (закрытие drift'а К3).
- [ ] **Step 1: Write jq verification test (RED)**
Run:
```bash
jq -e '.enabledPlugins | has("skill-creator@claude-plugins-official")' "c:/моя/проекты/claude-brain/user-level-files/settings-fragment.json"
```
Expected: `false`
Run:
```bash
jq -e '.enabledPlugins | has("claude-code-setup@claude-plugins-official")' "c:/моя/проекты/claude-brain/user-level-files/settings-fragment.json"
```
Expected: `false`
Run:
```bash
jq '.enabledPlugins | keys | length' "c:/моя/проекты/claude-brain/user-level-files/settings-fragment.json"
```
Expected: `4`
- [ ] **Step 2: Implement — add 2 keys to enabledPlugins**
Найти секцию `"enabledPlugins": {` (line ~2) и добавить две строки ПЕРЕД закрывающей `}` секции:
```json
"enabledPlugins": {
"ui-ux-pro-max@ui-ux-pro-max-skill": true,
"claude-md-management@claude-plugins-official": true,
"frontend-design@claude-plugins-official": true,
"superpowers@superpowers-dev": true,
"skill-creator@claude-plugins-official": true,
"claude-code-setup@claude-plugins-official": true
},
```
(Остальная часть файла — `permissions`, `hooks` — не меняется.)
- [ ] **Step 3: Run jq verification (GREEN)**
Run:
```bash
jq -e '.enabledPlugins."skill-creator@claude-plugins-official" == true and .enabledPlugins."claude-code-setup@claude-plugins-official" == true' "c:/моя/проекты/claude-brain/user-level-files/settings-fragment.json"
```
Expected: `true`
Run:
```bash
jq '.enabledPlugins | keys | length' "c:/моя/проекты/claude-brain/user-level-files/settings-fragment.json"
```
Expected: `6`
Run:
```bash
jq 'has("permissions") and has("hooks")' "c:/моя/проекты/claude-brain/user-level-files/settings-fragment.json"
```
Expected: `true` (permissions и hooks остались нетронутыми)
- [ ] **Step 4: Verify JSON valid**
Run: `jq '.' "c:/моя/проекты/claude-brain/user-level-files/settings-fragment.json" > /dev/null && echo OK`
Expected: `OK`
- [ ] **Step 5: Commit atomic**
```bash
cd "c:/моя/проекты/claude-brain"
git add user-level-files/settings-fragment.json
git commit -m "$(cat <<'EOF'
feat(brain-plugins): enable skill-creator + claude-code-setup in settings-fragment
Close Phase 0 install drift (К3) — brain settings-fragment now reflects
the actual state of ~/.claude/settings.json after Phase 0.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
```
Expected: 1 file changed, 2 insertions.
---
### Task 5: Bump `.brain-version` v1.0 → v1.1 + add CHANGELOG.md v1.1 entry (atomic per D11)
**Files:**
- Modify: `.brain-version` (brain root)
- Modify: `CHANGELOG.md` (brain root)
- [ ] **Step 1: Read current state (RED)**
Run:
```bash
cat "c:/моя/проекты/claude-brain/.brain-version"
```
Expected: `brain-v1.0` (или похожий формат — записать актуальное значение для verification)
Run: `head -30 "c:/моя/проекты/claude-brain/CHANGELOG.md"`
Expected: содержит v1.0 entry, не содержит v1.1
- [ ] **Step 2: Get current HEAD sha for `.brain-version` update**
Run: `cd "c:/моя/проекты/claude-brain" && git rev-parse HEAD`
Записать SHA — он попадёт в `.brain-version`.
- [ ] **Step 3: Implement — update `.brain-version`**
Перезаписать `.brain-version` (2 строки):
```
brain-v1.1
sha: <SHA_FROM_STEP_2>
```
- [ ] **Step 4: Implement — add CHANGELOG.md v1.1 entry**
Сверху файла CHANGELOG.md (после header), добавить запись:
```markdown
## brain-v1.1 — 2026-05-11
### Added
- `docs/brain-plugin-routing.md` v1.0 — normative document for plugin selection in brain repo. Resolves 8 sources of ambiguity (К1-К8 from design spec). Covers reestr, disabled-in-brain soft-rule (FD/UPM), routing table (17 overlaps + 3 tie-breakers), categorization (5 categories × 22 plugins), install checklist (5 sub-procedures), update procedure.
- `docs/superpowers/specs/2026-05-11-brain-plugin-routing-design.md` — design spec backing routing.md v1.0.
- `docs/superpowers/plans/2026-05-11-brain-plugin-routing.md` — implementation plan.
- `target` field (ENUM `user-level`/`consumer`/`user-level+consumer`) in `user-level-files/plugins-manifest.json` — implements D9 from design spec.
- `category` field in plugins-manifest (from routing.md §4.1).
- Two new brain manifest entries: `skill-creator@claude-plugins-official` + `claude-code-setup@claude-plugins-official` (Phase 0 install drift closed — К3).
### Changed
- `CLAUDE.md` brain root — new section «Выбор плагина и установка нового» linking to routing.md and noting disabled-in-brain soft-rule.
- `user-level-files/settings-fragment.json``enabledPlugins` extended with skill-creator and claude-code-setup (matching user-level `~/.claude/settings.json` state after Phase 0).
### Notes
- PSR template (`project-files/docs/Plugin_stack_rules.template.md`) is NOT modified — it remains the consumer-side ruleset.
- D11: `.brain-version` and CHANGELOG bumped atomically with brain-plugin-routing v1.0 implementation.
```
- [ ] **Step 5: Verify both edits (GREEN)**
Run:
```bash
cat "c:/моя/проекты/claude-brain/.brain-version"
```
Expected: `brain-v1.1` + sha line
Run:
```bash
grep -c "brain-v1.1" "c:/моя/проекты/claude-brain/CHANGELOG.md"
```
Expected: ≥ 1
- [ ] **Step 6: Commit atomic (D11)**
```bash
cd "c:/моя/проекты/claude-brain"
git add .brain-version CHANGELOG.md
git commit -m "$(cat <<'EOF'
chore(brain-version): bump v1.0 → v1.1 (plugin routing)
Atomic bump per D11. Brain-plugin-routing v1.0 released; CHANGELOG updated.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
```
Expected: 2 files changed.
---
### Task 6: Final verification
**Files:** none modified (read-only verification).
- [ ] **Step 1: git log review**
Run: `cd "c:/моя/проекты/claude-brain" && git log --oneline -7`
Expected (in reverse-chrono):
1. `chore(brain-version): bump v1.0 → v1.1 (plugin routing)`
2. `feat(brain-plugins): enable skill-creator + claude-code-setup in settings-fragment`
3. `feat(brain-plugins): add target field + register Phase 0 plugins in manifest`
4. `docs(brain): link CLAUDE.md to brain-plugin-routing v1.0`
5. `feat(brain-plugin-routing): create routing rules v1.0`
6. `docs(brain-plugin-routing): design spec for plugin selection rules`
7. (previous) `docs(brain-v2): Phase 0 meta-foundation analysis`
- [ ] **Step 2: routing.md sanity check**
Run: `wc -l "c:/моя/проекты/claude-brain/docs/brain-plugin-routing.md"`
Expected: 250-300 строк
Run: `grep -c "## §" "c:/моя/проекты/claude-brain/docs/brain-plugin-routing.md"`
Expected: `7`
- [ ] **Step 3: cross-file consistency check**
Run: `grep -c "brain-plugin-routing" "c:/моя/проекты/claude-brain/CLAUDE.md"`
Expected: ≥ 1
Run:
```bash
jq '.plugins | keys' "c:/моя/проекты/claude-brain/user-level-files/plugins-manifest.json"
```
Expected: 6 keys matching `enabledPlugins` keys.
Run:
```bash
diff <(jq -S '.enabledPlugins | keys' "c:/моя/проекты/claude-brain/user-level-files/settings-fragment.json") <(jq -S '.plugins | keys' "c:/моя/проекты/claude-brain/user-level-files/plugins-manifest.json")
```
Expected: пустой diff (settings-fragment и plugins-manifest имеют одинаковый набор ключей)
- [ ] **Step 4: Brain-version consistency**
Run: `cat "c:/моя/проекты/claude-brain/.brain-version"`
Expected: `brain-v1.1` + valid sha
- [ ] **Step 5: Tree clean**
Run: `git status`
Expected: `nothing to commit, working tree clean`
- [ ] **Step 6: invoke superpowers:verification-before-completion**
Это финальный gate по economy 0% rule. Запустить skill и подтвердить что:
- 5 commit'ов прошли atomic
- routing.md создан per spec
- CLAUDE.md обновлён
- 2 JSON-файла валидны по jq
- `.brain-version` v1.1
- CHANGELOG содержит v1.1 entry
Если verification skill репортит violation — НЕ коммитить ничего нового, найти причину, исправить, повторить verification.
---
## Self-Review
### Spec coverage
| Spec section | Task | Notes |
|---|---|---|
| §1 (проблема, цели, принципы) | Task 1 — routing.md §1 | ✓ |
| §2 (scope in/out) | — | scope соблюдается через outline Task 1-6 (out-of-scope не меняется) |
| §3.1-§3.7 (архитектура документа) | Task 1 | ✓ |
| §4 (D1-D12 decisions) | D1 → Task 1; D2 → Task 1 §2.2; D3 → Task 1 §5; D4 → Task 1 §4.1; D5 → Task 3; D6 → Task 5 (CHANGELOG); D7 → Task 1 line target; D8 → Task 1 §3 routing-table; D9 → Task 3; D10 → не реализовано (deferred); D11 → Task 5 (atomic); D12 → не нужен код (review only) | ✓ покрыто |
| §5 (changeset) | Task 1-5 покрывают 6 файлов | ✓ |
| §6 (открытые вопросы) | Закрыты дефолтами D10-D12 | ✓ |
| §7 (свойства spec'а) | — meta | n/a |
**Gap check:** все требования spec покрыты задачами 1-5; Task 6 — verification.
### Placeholder scan
Запустил mental grep на «TBD», «TODO», «add appropriate», «similar to», «implement later»:
- Task 3 Step 3 содержит `<FILL FROM STEP 2>` placeholder'ы — но это легитимно: engineer должен заполнить реальными значениями из Step 2 (это явный mechanism, не недосказанность). Если placeholder остаётся в финальном файле после Task 3 → Step 5 jq verification fail'ит (path "<FILL FROM STEP 2>" — не валидный path; и `installedAt` "<FILL FROM STEP 2>" не парсится как ISO date — но jq не проверяет date format, только JSON syntax; впрочем, явно сказано «Не оставлять placeholder'ы в финальном файле» в Step 3).
- Task 1 Step 2: «Содержание полностью derivable из committed design spec» — engineer открывает spec по ссылке, не placeholder.
Чисто.
### Type consistency
- `target` ENUM — `user-level` / `consumer` / `user-level+consumer` — используется консистентно в Task 3 (manifest) и в Task 1 routing.md §3.5 (install checklist 5.4).
- `category` field — `meta` / `consumer-universal` / `consumer-stack-gated` / `consumer-UI` / `skip` — используется консистентно в Task 3 + Task 1.
- Все commit message scopes — `brain-plugin-routing`, `brain`, `brain-plugins`, `brain-version` — соответствуют существующему стилю brain'а ([git log](../../../CHANGELOG.md): `docs(brain-v2):`, `docs(visualizations):`, `chore(gitignore):`).
Чисто.
---
## Execution Handoff
Plan complete and saved to [docs/superpowers/plans/2026-05-11-brain-plugin-routing.md](../plans/2026-05-11-brain-plugin-routing.md).
Two execution options:
**1. Subagent-Driven (recommended)** — fresh subagent per task with two-stage review between tasks. Best for plans where independent verification per task is valuable. Slower but safer.
**2. Inline Execution** — execute tasks in current session via `superpowers:executing-plans` skill. Batch execution with checkpoints. Faster, single context.
Per economy 0% rule (no subagent abuse for trivial tasks) and given that the plan has 6 tasks where each is atomic and small, **Inline Execution** is recommended for this plan — subagent-driven would add overhead without significant benefit for plan of this size.
Which approach?