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:
@@ -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?
|
||||
Reference in New Issue
Block a user