fix(map): ⚫1 mcp_pw↔sk_parallel → 🟢 (квирк #95 + Pravila §15.2)
Фактологическая правка после повторного аудита «мозга» SYSTEM-режима (продолжение Rec1-5 закрытия 18.05.2026). Причина: - nd()-тексты mcp_pw + sk_parallel ссылались на «квирк #2» в memory - memory[#2] — это taskkill /F /IM на Windows, не Playwright - реальный источник — квирк #95 (16.05.2026): профиль Playwright MCP хэшируется per-cwd → разные worktrees получают разные mcp-chrome-{hash} директории и не конфликтуют. README playwright-mcp прямо: конфликт — только для клиентов «sharing the same workspace» Изменения: - CONFLICT() ⚫BLACK → 🟢GREEN с новым reasoning - mcp_pw nd() — текст «один shared browser» → «профиль per-cwd hash» - sk_parallel nd() — type BLACK → GREEN, актуализированный desc - EDGE_DETAILS rule — «нет регламента» → «GREEN: квирк #95 + §15.2 claim» - snapshot 18.05.2026: счётчик ⚫3/🟢8 → ⚫2/🟢9 + сноска UPDATE - snapshot «Ось 2» — переписана: оба оставшихся ⚫ — ruflo (dormant) Эффект: - ⚫3 → ⚫2 (оба оставшихся — ruflo, оба dormant после изоляции 18.05) - 🟢8 → 🟢9 - реальное runtime-трение — ноль Same-dir parallel (две Claude-сессии в одной dir одновременно зовут browser) — редкий runtime-сценарий, регулируется Pravila §15.2 claim в docs/sessions/CURRENT.md. Отдельный §15.4 «MCP same-dir locks» не добавляется (вариант A — только фактологические правки). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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 (не параллельно)' },
|
||||
|
||||
@@ -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 (задача→узел)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user