**Дата:** 2026-05-11 (ночная сессия с переходом из 2026-05-10)
**Скоуп:** Извлечение «мозга Claude» из проекта Лидерра в независимый репозиторий + публикация на GitHub.
**Итог:** Brain v1.0 опубликован — `CoralMinister/claude-brain` (private), 14 commits + tag `brain-v1.0`, 8 sync-скриптов с TDD, end-to-end install+verify работают.
**Контекст-родитель:** Этот session log — отдельный документ. Architecture spec — [../architecture.md](../architecture.md) (копия Liderra spec на момент bootstrap).
---
## 1. Pre-bootstrap решения пользователя
| Решение | Выбор |
|---|---|
| Mode | Economy 0% (полная rigor — full reads, real outputs, file:line refs, no "should work" claims) |
| Execution | Subagent-Driven Development (фресный субагент per Phase, two-stage review для TDD-фаз) |
| Worktree | Не нужен (новый repo, не модификация Лидерры in-place) |
-`claude` CLI: 2.1.138 (Claude Code), но **НЕ в `$PATH`** — лежит в VSCode extension binary `C:\Users\Administrator\.vscode\extensions\anthropic.claude-code-2.1.138-win32-x64\resources\native-binary\claude.exe`
**Block:** fine-grained PAT (используется в Liderra) не имеет `Administration: Write` permission на user-level. POST `/user/repos` → HTTP 403 «Resource not accessible by personal access token».
**Resolution:** Пользователь создал repo вручную через https://github.com/new (private, empty). Push via token URL:
```bash
git branch -M main # master → main (Windows git default vs GitHub default)
**Bug 1:** `merge-mcp.sh` через `jq --slurpfile` fails на Cyrillic paths Windows MSYS2 (`Could not open` — jq C-level fopen не понимает UTF-8 path).
**Bug 2:**`install.sh ${rel%.template}` — только trailing `.template`, не middle segment. `CHANGELOG_claude_md.template.md` оставался с`.template.` внутри.
**Bug 3:** manifest.json хранит brain-repo paths, verify.sh ищет target paths — pathing semantic mismatch (verify не может пройти на real consumer install).
**Bug 4:**`make_backup_dir` создаёт пустой dir, файлы не backupятся — overwrite consumer'а необратим.
**Bug 5:** brain's `project-files/README.md` overwrites consumer's `README.md` (оба попадают в target root после template stripping).
- **Bug 3:** manifest.json restructured into `files: {project-mode, user-mode, brain-internal}` maps с target-relative paths; verify.sh detects mode, picks matching map
- **Bug 4:** install.sh — `rsync -a --exclude .git/ --exclude .brain-backup-*` fallback `cp -r` ПЕРЕД modifications
- **Bug 5:** install.sh skip `README.md` in copy loops (brain READMEs — internal docs, не consumer content)
**Re-test:** install + verify end-to-end PASS на `/tmp/test-consumer-fix-final-udzgWI`. +17 new test assertions added (12 install + 9 merge-mcp + 6 verify).
**Tag re-pointed:**`brain-v1.0` annotation preserved, target moved `97b5da3` → `52584df` (tag не был ещё push'нут).
### Phase 10 — Liderra marker + memory
**Commit Лидерры:** `d598aec` на `supplier-sync-plan3` (subagent landed там потому что это был current branch). `.brain-version` = `brain-v1.0\nsha: 52584df34e1a8b2117b3f254731b06f52d84645c`.
- ✅ Cherry-pick `d598aec` → main (новый SHA `8965650`), main локально 3 commits ahead origin/main
- ✅ `git rebase --onto 8c70255 d598aec supplier-sync-plan3` — `d598aec` удалён из feature branch; 9 Plan 3 commits replayed с новыми SHA (`8a611eb..8fc9d3e`)
- ⏸ Push main BLOCKED — pre-push lychee нашёл 33 битые ссылки в 4 .md (28 в Plan 3 supplier-sync docs из прошлой сессии, 5 в моих brain extraction spec/plan). Pre-existing problem. User выбрал skip push до отдельной сессии для починки.
---
## 3. Обнаруженные плановые баги (8 total)
Plan был написан до bootstrap. Эти баги обнаружены при первом реальном запуске:
| ID | Где | Симптом | Fix |
|---|---|---|---|
| A | Plan §Task 3.3 | `jq -s '.[0] \| .mcpServers = (... + .[1].mcpServers)'` → "Cannot index object with number" | `jq --slurpfile brain ...` или `--argjson` |
| B | Plan §Task 3.5 | `claude marketplace add` → no such subcommand | `claude plugin marketplace add` |
| C | Plan §Task 3.5 | `claude` not in `$PATH` (VSCode extension only) | Fallback to JSON edit mode в install-plugins.sh |
| D | Plan §Task 3.2 | `jq '.[0] * {enabledPlugins: ...}'` → recursive merge (union, not replace) | Explicit `--slurpfile $frag` + `.key = $frag[0].key` assignment |
| E | Plan §Task 4.2 | `cp -r project-files/* target/` не strip'ает `.template` суффикс | `find` loop + `dst_rel="${rel%.template}"` |
| F | Plan §Task 4.3 | extract.sh middle-elif heuristic был syntactically buggy | Cleaner two-step fallback |
**Итого:** 11 багов обнаружены и исправлены за bootstrap. План v1.0 был ~70% корректен — оставшиеся 30% потребовали runtime discovery.
---
## 4. Quirks среды (Windows Server 2022 + Git Bash + VSCode)
1.**Cyrillic paths**: jq на MSYS2 не открывает файлы с UTF-8 путями. Workaround: `--argjson "$(cat ...)"` вместо `--slurpfile`.
2.**`python` not `python3`**: только `python` alias существует.
3.**`claude` CLI vs `claude plugin marketplace`**: subcommand структура `claude plugin <sub>` (включая `marketplace`).
4.**Git default branch на Windows = `master`**, GitHub default = `main`. `git branch -M main` нужен перед первым push.
5.**`core.autocrlf=true`**: git нормализует EOL на checkout. Может изменять sha256 файла при clone на другой машине. Для brain v1.0 — within-machine sync, не проблема.
6.**gitleaks путь**: либо в `$PATH`, либо в `c:/моя/проекты/портал crm/Документация/bin/gitleaks.exe` (предустановлен в Liderra).
7.**Fine-grained PAT vs classic PAT**: fine-grained не имеет user-level Administration:Write по умолчанию — POST `/user/repos` → 403. Classic PAT с`repo` scope работает, или создать repo через web UI.
8.**Lefthook pre-push hooks**: gitleaks-full-history + lychee + larastan + pint + pest + markdownlint + cspell. Можно ловить на pre-existing проблемах не введённых текущим коммитом.
9.**`~/.claude/backups/` filename pattern**: `*.backup.<unix_ms>`, НЕ `*.json` (могут содержать unredacted API_KEY).
---
## 5. Outstanding items для будущих сессий
### Critical
1.**Push Liderra main → origin/main** — 3 commits ahead, blocked by lychee (33 broken links). Опции:
2.**Rotate MAGIC_API_KEY на 21st.dev** (Phase 0 Task 0.4 deferred). Текущий ключ formally compromised (виден в session logs).
### Important
3.**Tooling/Pravila обновить** — добавить brain extraction в реестр инструментов как infrastructure category (#34 claude-brain или similar). После push main.
4.**gh CLI install** — `choco install gh` для будущих GitHub операций без curl boilerplate.
5.**Plan 3 supplier-sync docs broken links** — Plan 3 documentation использует `app/...` paths из `docs/superpowers/plans/...` но resolve неправильно. Hardcoded `../../../app/...` или `.lychee.toml` exclude.
### Nice-to-have
6.**`.gitattributes`** в brain repo с`* -text` для CRLF stability (для clone на другие machines с разными autocrlf settings).
7.**Tag immutability**: `brain-v1.0` был moved из `97b5da3` → `52584df` после Phase 9b hotfix. Push не было между. Для будущих версий — не moveать после push, лучше bump до `brain-v1.0.1`.
8.**Mock `claude` CLI in install-plugins-test**: пишет в global `/tmp/claude-calls.log` — race condition если parallel CI runs.
---
## 6. Workflow learnings
### Что работало хорошо
- **TDD discipline на bash scripts** — каждый failing-test-first cycle поймал по 1-3 бага до commit'а.
- **Subagent-driven dispatch per Phase** — 16 subagent dispatches (вместо 47 по плану TDD-granularity) — эффективный balance cost/quality.
- **Security gates (gitleaks)** — на Phase 2 (extract) и Phase 7 (pre-release). Поймали бы leak'и до commit'а.
- **Plan corrections inline in dispatcher prompt** — Phase 0 нашёл baги в плане; не редактировал план, передавал corrections в каждый последующий subagent через prompt. Чистая commit-история плана.
### Что нужно улучшить в следующий раз
- **Plan corrections должны быть applied к самому плану** перед dispatch — если plan живёт в repo и читается несколькими subagent'ами, inline corrections в prompt становятся single-point-of-failure.
- **Mock CLI bin (Phase 3 Task 3.5)** — `claude` mock должен был сразу матчить real subcommand структуру. Plan указал устаревший интерфейс, subagent fixed it on the fly.
- **Phase 9 self-test надо было дублировать с TDD-стилем** — 5 багов dropped на нас сразу. Если бы каждый test-консьюмер имел свой failing-test, мы поймали бы их по одному, не batch.
### Decision pattern, который сработал
- **Subagent reports DONE_WITH_CONCERNS** → controller (я) читает concerns, классифицирует как scope/correctness/observation → only correctness ones влияют на следующий dispatch → observation ones flagged в session log без блока.
Короткая follow-up сессия в новом workspace `c:/моя/проекты/claude-brain/`:
- **Closed Outstanding #4 (gh CLI install)** — поставлен через `choco install gh -y`, версия `gh 2.92.0` в `/c/Program Files/GitHub CLI/gh.exe`. PATH в текущем bash не подхватился (Bash tool inherited PATH со старта Claude Code до choco install) — вызов абсолютным путём.
- **gh auth уже работал** через env `GITHUB_TOKEN` как `CoralMinister` (без `gh auth login`).
- **Token scope ограничен:** `contents:read` ✓, `issues:read`/`pull_requests:read` ✗ (GraphQL "Resource not accessible by personal access token"). Если для будущих задач понадобится Issues/PRs — расширить scope.
- **winget отсутствует** на Server 2022 Eval (как и предполагалось в outstanding #4 fallback).
- **Memory bootstrap для brain workspace** в `~/.claude/projects/c--------------claude-brain/memory/`: `MEMORY.md` + 4 entries (user_role, reference_bootstrap_session, project_outstanding_items, reference_environment).