docs(brain-plugin): handoff №6 — #1/#2/#3-cross-ref/#3-shell done, остаток observer+Фаза2

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-06-16 10:17:55 +03:00
parent 3d7690650e
commit c19941aea0
@@ -0,0 +1,103 @@
# Brain-as-plugin — handoff сессии №6 (закрытие 2026-06-16)
**Кодовая фраза стены:** «роутер-наставник». **Канон дизайна:** `2026-06-15-brain-as-plugin-design-v6.md` (§14 фазы).
**План Фазы 1:** `2026-06-15-brain-plugin-phase1-config-seam.md`. Предыдущие handoff: 5/4/3/2/handoff.
Эта сессия — закрытие остатка Task 7 follow-up: **#1 deepseek тест-дрейф, #2 classifier_context wiring,
#3 greenfield-hardening (cross-ref + shell)**. Остаток: #3-observer + Фаза 2.
---
## 1. Что сделано (свод 3994 passed, все коммиты в терминале владельца)
| # | Что | Коммит |
|---|---|---|
| 1 | deepseek тест-дрейф — 3 assertions (router-config модель `deepseek-v4-pro`; 2 timeout `90000→300000`) | `8c4c50c` |
| 1b | устаревшие комментарии (`90с``300с`, sonnet→deepseek, alias-canonical) | `13e080b` |
| 2 | classifier_context wiring — `classify`(router-classifier:652) + `reviewViaDirectApi`(brain-retro:141) | `a160237` |
| 3-cross-ref | config-driven имена — `docStem` + `buildCrossRefPatterns` + `DEFAULT_ALIASES` + CLI | `deb5049` |
| 3-shell | config-driven защита — `buildProtectedPatterns(cfg,norm)` + wire 2 гейта | `3d76906` |
**Находки:**
- #1 «parse plan_soundness» НЕ был сломан — judge-gate-тест падал на встроенном timeout-assert (стр. 222) ДО парс-проверки; `parseJudgeResponse` цел.
- `docStem` (снятие хвоста версии `_v\d+(?:[._]\d+)*`) — общий, **экспортирован из `cross-ref-checker.mjs`**; импортируется shell-content-rules.
- #3-shell: config-augment `buildProtectedPatterns` БЫЛ не подключён живьём (оба гейта строили `ctx.protectedPaths = DEFAULT_PROTECTED_PATTERNS`, стр. 102/192). Тест 281 пинит DEFAULT-защиту → **оставили хардкод 32-34 + augment** (НЕ «убрать», как было в дизайне §4); augment только ДОБАВЛЯет паттерны (защита монотонно растёт, fail-CLOSE).
**Authoring-доки сессии №6:** specs/`2026-06-16-greenfield-regex-names-config-design.md`;
plans/`2026-06-16-{deepseek-testdrift-fix, classifier-context-wiring-plan, greenfield-cross-ref-config-plan, greenfield-shell-config-plan}.md`.
---
## 2. УРОКИ ПРО СТЕНУ (НОВОЕ — для GUIDE «Уроки сессии №6»)
1. **Production-правки (`tools/*.mjs`) гейтит `enforce-tdd-gate` — и floor-escape его НЕ снимает** (это отдельный
PreToolUse-хук, не стена М2). Он требует свежий парный test-edit + vitest-**RED** в ходе; RED под Claude-Bash
недостижим (harness-collapse). **Единственный рабочий канал — master-override в промте владельца:**
`ремонт инфраструктуры` + вторая строка `ремонт: <причина>`. Override снимает Rule #3 И #6 на весь ход.
Тест-файлы (`.test.mjs`) — НЕ production (`isProductionCodePath`), gate молчит, хватает floor-escape.
2. **Floor-escape по гранту на КАЖДУЮ правку.** На один файл — несколько грантов (по одному на Edit). В одном
`AskUserQuestion` несколько грантов на ОДИН файл (один label) рискуют ts-коллизией при погашении →
группируй так, чтобы в раунде каждый файл максимум раз; повторные правки того же файла — следующим раундом.
`AskUserQuestion` — максимум 4 вопроса.
3. **Skill под стеной:** `systematic-debugging`/`brainstorming`/`writing-plans` грузятся в разговорном режиме
БЕЗ escape (think-навыки). `executing-plans` (импл) звал через `skill:superpowers:executing-plans`-escape.
`ToolSearch` и `TodoWrite` стена блокирует в разговорном режиме как «реализация» (TodoWrite недоступен).
4. **Коммит — терминал владельца** (как и весь авторитетный свод). Память живёт вне git-репо (`~/.claude/...`) —
отдельного коммита не требует. Печать (seal) за сессию №6 ни разу не понадобилась — весь impl через escape-per-step.
5. **AskUserQuestion-опция несёт точную метку** `FLOOR-ESCAPE: write:<путь-lowercase прямые-слэши>` /
`bash:<кмд>` / `skill:<имя>` — клик владельца подписывает грант. `write:` НЕ лоуэркейсится парсером →
путь в метке уже должен быть в выводе `pathNormalize` (lowercase + `/` + NFC).
---
## 3. Остаток (порядок)
### 3.1. #3-observer (последний кусок greenfield-hardening #3)
`observer-transcript-parser.mjs` `classifyFilePath` (стр. 360) — захардкоженные 'norm'-стемы 371-373
(`Pravila_raboty_Claude`/`Plugin_stack_rules`/`Tooling`). Сделать `classifyFilePath(path, normativeStems =
DEFAULT_NORMATIVE_STEMS)` — цикл по стемам (`(?:^|/)<stem>[^/]*\.md$`→'norm'); дефолт = текущие 3. Универсальные
(CLAUDE/MEMORY/memory 370/375/376) + `Открытые_вопросы` (374) — хардкод (YAGNI). §/R citation-паттерны
(529-531/578-579) — **НЕ трогать** (Лидерра-нотация, greenfield без них безопасен). Wiring: протянуть
`normativeStems` через вызывающую цепочку (внутр. вызов стр. 401) до CLN/потребителя, читающего
`loadConfig().normative_files``docStem` (импорт из cross-ref-checker). Тесты 1883-1885 пинят текущее
(дефолт сохранит). Дизайн — `2026-06-16-greenfield-regex-names-config-design.md` §5 (Подход A).
### 3.2. Фаза 2 — plugin packaging (design v6 §14, §6 группы)
Манифест плагина + docs; `${CLAUDE_PLUGIN_ROOT}`; группы хуков §6 (`enabled_hook_groups` уже хранится в
`brain.local.md`); инлайн-хуки в файлы плагина; команда `/brain-migrate` + `config_version`. Первый внешний
накат — greenfield (design v6 §14).
---
## 4. Скилл-цепочка (как раньше)
using-superpowers → (brainstorming → writing-plans для дизайна) → executing-plans ИНЛАЙН (через `skill:`-escape)
+ test-driven-development → claude-md-management/escape для памяти → systematic-debugging для разбора →
verification-before-completion перед коммитом. Печать H4 не встаёт → исполнение owner escape-per-step.
---
## 5. Промт для сессии №7 (копировать целиком)
```
Продолжаем эпик «Мозг как плагин Claude Code» в проекте claude-brain. Кодовая фраза стены — «роутер-наставник», работаем ПО ПРАВИЛАМ (authoring-канал для новых .md в docs/superpowers/{specs,plans}; escape/память — только с моего разрешения; субагенты под стеной запрещены — инлайн; коммит + полный свод — в моём терминале).
Сначала прочитай (разговорный режим, чтение свободно):
- docs/superpowers/specs/2026-06-15-brain-as-plugin-design-v6.md (канон дизайна; §14 фазы, §6 группы)
- docs/superpowers/plans/2026-06-15-brain-plugin-phase1-config-seam.md (план Фазы 1)
- docs/superpowers/specs/2026-06-16-brain-as-plugin-session-handoff-6.md (handoff №6 — что сделано #1/#2/#3-cross-ref/#3-shell, §2 уроки стены №6, §3 остаток, §5 этот промт)
- docs/superpowers/specs/2026-06-16-greenfield-regex-names-config-design.md (дизайн #3; §5 observer — Подход A)
- docs/superpowers/router-mentor-wall-GUIDE.md (как работать под стеной)
- память project-brain-plugin-phase1-progress.md (прогресс + How to apply, уроки №6)
ВАЖНО про стену (handoff №6 §2): печать H4 не встаёт → owner escape-per-step (на КАЖДЫЙ Edit/Write/Bash/Skill отдельный грант FLOOR-ESCAPE: write:<путь-lowercase>/bash:<кмд>/skill:<имя>, окно 5 мин; на один файл — по гранту на правку; AskUserQuestion ≤4 вопроса). ПРАВКА production-файлов (tools/*.mjs) дополнительно гейтится enforce-tdd-gate, который floor-escape НЕ снимает, а vitest-RED под Claude-Bash недостижим (harness-collapse) → нужен мой override `ремонт инфраструктуры` + `ремонт: <причина>`. Тест-файлы (.test.mjs) — не production, хватает floor-escape. ToolSearch/TodoWrite стена блокирует в разговорном режиме. Полный свод + коммит — в МОЁМ терминале (npx vitest run --config vitest.config.tools.mjs).
Скилл-цепочка: using-superpowers → (brainstorming → writing-plans для дизайна) → executing-plans ИНЛАЙН (через skill:-escape) + test-driven-development → claude-md-management/escape для памяти → systematic-debugging для разбора → verification-before-completion перед коммитом.
Остаток (порядок): (1) #3-observer — classifyFilePath(path, normativeStems) из config, дефолт=текущие 371-373, §/R-паттерны не трогать, threading через вызов стр.401 + docStem из cross-ref-checker (дизайн greenfield §5); (2) Фаза 2 plugin packaging (манифест +docs, ${CLAUDE_PLUGIN_ROOT}, группы §6, инлайн-хуки в файлы, /brain-migrate + config_version, design v6 §14).
Сделай в начале:
1. Спроси, какой канал для памяти (escape или claude-md-management).
2. Спроси, что берём первым из остатка (рекомендую #3-observer — закроет весь #3 greenfield-hardening, свод останется зелёным).
Не пломбируй и не коммить без моего клика. Все находки фиксируй в authoring-доки, в память — только по правилам.
```