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 (задача→узел)