diff --git a/docs/automation-graph.html b/docs/automation-graph.html index d0636e51..f4440c87 100644 --- a/docs/automation-graph.html +++ b/docs/automation-graph.html @@ -579,7 +579,7 @@ const EDGES = [ // ══════════════════════════════════════════════════ CONFLICT('sk_rls', 'ag_rls', 'RLS: граница задана — скил по таблице, агент по diff/PR (spec 2026-05-16)', 'GREEN'), CONFLICT('hookify_plugin', 'hk_pre_claude', 'Закрыто правилом HK1 (ADR-010, PSR_v1 R10.1 v3.13): hookify вызывается только по явному /hookify + обязательный pre-check на коллизию с зарегистрированными хуками; перезапись economy/skill-discipline архитектуры запрещена', 'GREEN'), - CONFLICT('mcp_pw', 'sk_parallel', 'Browser is already in use (квирк #2)', 'BLACK'), + CONFLICT('mcp_pw', 'sk_parallel', 'Профиль Playwright MCP хэшируется per-cwd (квирк #95) → worktrees получают разные mcp-chrome-{hash}, не конфликтуют. Same-dir parallel — редкий случай (две Claude-сессии в одной dir), регулируется Pravila §15.2 claim в docs/sessions/CURRENT.md', 'GREEN'), CONFLICT('ag_pest', 'mcp_redis', 'Квирк 72 устранён 16.05.2026 (commit 0fa1a73 — array-стор в тестах): гонки в Redis при Pest --parallel больше нет', 'GREEN'), CONFLICT('psr_v1', 'claude_md', 'Закрыто §5п.10 CLAUDE.md + хук CLAUDE.md-warn', 'GREEN'), CONFLICT('upm', 'fd_plugin', 'PSR_v1 R14.5: не параллельно', 'GREEN'), @@ -1000,7 +1000,7 @@ const NODE_DETAILS = { [{ name: 'плагин Superpowers', cond: 'содержит' }], [], [{ name: 'скил worktree', cond: 'parallel-work использует worktree для изоляции' }], - [{ name: 'MCP-сервер playwright', desc: 'Браузер уже занят (Browser is already in use) при одновременном запуске нескольких сессий через worktree', type: 'BLACK' }] + [{ name: 'MCP-сервер playwright', desc: 'Профили per-cwd hash (квирк #95) → worktrees получают разные mcp-chrome-{hash} директории, не конфликтуют. Same-dir parallel — редкий runtime, регулируется Pravila §15.2 claim', type: 'GREEN' }] ), sk_worktree: nd( 'Создаёт изолированную копию репозитория (worktree) для рискованной или параллельной работы.', @@ -1231,11 +1231,11 @@ const NODE_DETAILS = { mcp_pw: nd( 'Управляет браузером — снимает скриншоты, кликает, заполняет формы для smoke- и a11y-тестов.', 'При визуальной проверке прототипов (фаза 0), при a11y smoke (axe-core), при UI integration smoke.', - 'Не для боевых пользователей. На сессию один общий браузер — при parallel-work возможны столкновения (см. квирк #2 в memory).', + 'Не для боевых пользователей. Профиль persistent кэшируется per-cwd hash (квирк #95 в memory) → разные worktrees получают разные mcp-chrome-{hash} директории и не конфликтуют. Конфликт остаётся только при same-dir parallel (две Claude-сессии в одной dir одновременно вызывают browser).', [{ name: 'CLAUDE.md §3.1 #2', cond: 'активен с фазы 0' }], [], [{ name: 'SessionStart хук', cond: 'используется для визуальной проверки прототипов' }], - [{ name: 'parallel-work скил', desc: 'Один shared browser на сессию — конкуренция при параллельной работе через worktrees (memory квирк #2)', type: 'BLACK' }] + [{ name: 'parallel-work скил', desc: 'Профили per-cwd hash → worktrees не конфликтуют (квирк #95). Same-dir parallel регулируется Pravila §15.2 claim в CURRENT.md', type: 'GREEN' }] ), mcp_gh: nd( 'GitHub API — читает/создаёт PR, issues, коммиты, ветки в репозитории CoralMinister/lidpotok.', @@ -1847,7 +1847,7 @@ const EDGE_DETAILS = { // ── КОНФЛИКТЫ (8 рёбер; 3 из них имеют ту же пару from/to, что и обычные — здесь объединены под одним ключом) ─ 'sk_rls->ag_rls': { type: 'конфликт', when: 'граница задана: скил — по таблице, агент — по diff/ветке/PR', transfers: 'coverage', mandatory: 'опционально', rule: 'секции «Граница…» в SKILL.md + rls-reviewer.md (spec 2026-05-16)' }, 'hookify_plugin->hk_pre_claude': { type: 'конфликт', when: 'hookify plugin генерирует hook — двойное owner-ship vs settings.json', transfers: 'coverage', mandatory: 'опционально', rule: 'нет регламента (plugin vs settings.json)' }, - 'mcp_pw->sk_parallel': { type: 'конфликт', when: 'Playwright и parallel-agents оба требуют изоляцию', transfers: 'coverage', mandatory: 'опционально', rule: 'нет регламента (изоляция worktree vs MCP)' }, + 'mcp_pw->sk_parallel': { type: 'конфликт', when: 'Playwright и parallel-agents оба требуют изоляцию', transfers: 'coverage', mandatory: 'опционально', rule: 'GREEN: квирк #95 — профили per-cwd hash → worktrees не конфликтуют; same-dir parallel под Pravila §15.2 claim' }, 'ag_pest->mcp_redis': { type: 'конфликт', when: 'Pest --parallel race на Redis cache (quirk 72/77)', transfers: 'coverage', mandatory: 'опционально', rule: 'CLAUDE.md §3.3 #35 (Redis MCP) — race остаётся вне регламента' }, 'psr_v1->claude_md': { type: 'конфликт', when: 'PSR_v1 уровень 3 vs CLAUDE.md 2a — приоритет CLAUDE.md', transfers: 'контроль', mandatory: 'hard-block', rule: 'CLAUDE.md §1 (priority chain)' }, 'upm->fd_plugin': { type: 'конфликт', when: 'UPM и FD оба претендуют на UI-решения', transfers: 'coverage', mandatory: 'hard-block', rule: 'PSR_v1 R14.5 (не параллельно)' }, diff --git a/docs/discovery/2026-05-18-system-audit-brain.md b/docs/discovery/2026-05-18-system-audit-brain.md index b806acd9..1e5c10b0 100644 --- a/docs/discovery/2026-05-18-system-audit-brain.md +++ b/docs/discovery/2026-05-18-system-audit-brain.md @@ -12,11 +12,18 @@ Scope: **весь мозг, 125 узлов**. Заказчик попросил ## Состояние -Карта `docs/automation-graph.html`: **125 узлов / 135 рёбер**, конфликты **🔴0 / ⚫3 / 🟢8** +Карта `docs/automation-graph.html`: **125 узлов / 135 рёбер**, конфликты **🔴0 / ⚫2 / 🟢9** (11 конфликтных рёбер). Тулчейн — **60 формализованных позиций** (29 phase-active + 30 off-phase + 1 historic). Последняя интеграция — #56–60 Anthropic dev-tooling (push `515acb6`, 18.05). +> **UPDATE 18.05.2026 вечер:** ⚫1 `mcp_pw ↔ sk_parallel` понижен до 🟢 после +> верификации квирка #95 — профиль Playwright MCP хэшируется per-cwd → worktrees +> получают разные `mcp-chrome-{hash}` директории, не конфликтуют. README playwright-mcp +> прямо: конфликт — только для клиентов «sharing the same workspace». Same-dir parallel +> регулируется Pravila §15.2 claim в `docs/sessions/CURRENT.md`. Эффект: ⚫3 → ⚫2, +> 🟢8 → 🟢9. Оба оставшихся ⚫ — ruflo (после изоляции 18.05 dormant). + ### Ось 1 — здоровье новых узлов С iter7 (16.05, 83 узла) мозг вырос на ~42 узла серией интеграций A6→D3→C9→A4→A3→A11→ @@ -38,18 +45,20 @@ section) синхронизирован интеграциями — покры ### Ось 2 — конфликты -🔴0 структурных — все закрыты правилами. 3 ⚫ (возникли на практике, рантайм): +🔴0 структурных — все закрыты правилами. 2 ⚫ (после downgrade 18.05 вечер): -1. `mcp_pw ↔ sk_parallel` — Playwright «Browser is already in use» (квирк #2). Смягчён - квирком #95 (профиль per-directory → worktrees не конфликтуют), same-dir parallel - остаётся. +1. ~~`mcp_pw ↔ sk_parallel`~~ — **🟢 закрыт**: квирк #95 (профили per-cwd hash → worktrees + не конфликтуют) + Pravila §15.2 claim для same-dir parallel. Текст nd() в карте + ссылался на «квирк #2», но memory[#2] — это taskkill, не Playwright; реальный источник + — квирк #95 (опровергает hypothesis shared-browser). 2. `ruflo_memory ↔ mem_state` — два хранилища памяти не синхронизированы; ruflo-память - почти пуста (0 записей + 2 HNSW-призрака #1122). + почти пуста (0 записей + 2 HNSW-призрака #1122). **После изоляции 18.05 — dormant.** 3. `ruflo_daemon ↔ ag_pest` — daemon worker-jitter усиливает Pest-квирки 73/77. + **После изоляции 18.05 — dormant** (daemon stopped, dump.pm2=[]). -**Системное наблюдение: 2 из 3 ⚫ — ruflo.** Плюс рой idle (0 задач), демон с известным -jitter-вредом для Pest, память-пустышка. ruflo — главный источник рантайм-трения при -near-zero отдаче: реально работают только recall-хук и queen-триггер. +**Системное наблюдение: оба оставшихся ⚫ — ruflo, оба dormant.** Реальное runtime-трение +— ноль. ruflo сохранён как артефакт, queen-триггер dormant, артефакты можно реактивировать +по плану в `feedback_ruflo_isolated.md`. ### Ось 3 — корректность routing (задача→узел)