diff --git a/docs/superpowers/plans/2026-05-11-brain-plugin-routing.md b/docs/superpowers/plans/2026-05-11-brain-plugin-routing.md new file mode 100644 index 0000000..2f736e0 --- /dev/null +++ b/docs/superpowers/plans/2026-05-11-brain-plugin-routing.md @@ -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) +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) +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": "", + "version": "", + "installedAt": "", + "lastUpdated": "", + "gitCommitSha": "", + "installMethod": "manual-git-clone-Path2", + "target": "user-level", + "category": "meta" + } + ], + "claude-code-setup@claude-plugins-official": [ + { + "scope": "user", + "installPath": "", + "version": "", + "installedAt": "", + "lastUpdated": "", + "gitCommitSha": "", + "installMethod": "manual-git-clone-Path2", + "target": "user-level", + "category": "meta" + } + ] + } +} +``` + +**ВАЖНО:** в Step 2 получены реальные значения для skill-creator + claude-code-setup. Подставить их вместо ``. Не оставлять 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) +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) +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: +``` + +- [ ] **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) +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 содержит `` placeholder'ы — но это легитимно: engineer должен заполнить реальными значениями из Step 2 (это явный mechanism, не недосказанность). Если placeholder остаётся в финальном файле после Task 3 → Step 5 jq verification fail'ит (path "" — не валидный path; и `installedAt` "" не парсится как 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?