From d74d3113e51d64dfdfd36afa15589dfb07a2c412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sun, 14 Jun 2026 15:44:42 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20research-tooling=20Perplexity=20Pack=20?= =?UTF-8?q?#87-89=20=E2=80=94=20registry/router/normative=20sync=20+=20ADR?= =?UTF-8?q?-019?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- CLAUDE.md | 14 +- docs/Plugin_stack_rules_v1.md | 11 +- docs/Pravila_raboty_Claude_v1_1.md | 6 +- docs/Tooling_v8_3.md | 47 +++- docs/adr/ADR-019-research-tooling.md | 148 +++++++++++++ docs/registry/contracts/exa-mcp.contract.json | 12 ++ .../contracts/firecrawl-mcp.contract.json | 12 ++ .../contracts/perplexity-mcp.contract.json | 12 ++ docs/registry/nodes.yaml | 79 +++++++ docs/routing-off-phase.md | 6 +- ...4-perplexity-pack-plan3-router-registry.md | 50 +++++ ...plexity-pack-research-tooling-design-v3.md | 204 ++++++++++++++++++ tools/observer-chain-map.json | 7 +- tools/registry-load.test.mjs | 12 +- 14 files changed, 599 insertions(+), 21 deletions(-) create mode 100644 docs/adr/ADR-019-research-tooling.md create mode 100644 docs/registry/contracts/exa-mcp.contract.json create mode 100644 docs/registry/contracts/firecrawl-mcp.contract.json create mode 100644 docs/registry/contracts/perplexity-mcp.contract.json create mode 100644 docs/superpowers/plans/2026-06-14-perplexity-pack-plan3-router-registry.md create mode 100644 docs/superpowers/specs/2026-06-14-perplexity-pack-research-tooling-design-v3.md diff --git a/CLAUDE.md b/CLAUDE.md index bbb1afe0..db574581 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,6 +1,6 @@ # CLAUDE.md — техконтекст Лидерры -**Версия:** 2.45 от 01.06.2026 — **lead region resolution (определение региона лида по телефону + каскадная маршрутизация) — фича реализована TDD, запушена, PR в main** (ветка `worktree-feat+lead-region-resolution`, 14 атомарных коммитов `ec219718..11079791`, origin `CoralMinister/lidpotok`). DaData-клиент + реестр Россвязи (`phone-ranges:import`) + `LeadRegionResolver` (каскад по qc-кодам DaData → Россвязь → tag-fallback) + `LeadRouter` каскад (exact→all-RF→fallback) + взвешенный жребий по остатку дневного лимита (вариант В, вес ≥ 1 — мелкие клиенты не отрезаются) + интеграция в `RouteSupplierLeadJob` (резолв ДО tx / persist 4 колонки / fail-safe аудит-лог / подмена региона шаг 3 / CSV-merge по рангу источника) + `phone-region:smoke`. Миграция `2026_05_31_100000` (3 таблицы + колонки на supplier_leads/deals, партиции m05/m06 + регистрация в `MonthlyPartitionManager`); `db/schema.sql` синхронизирован заголовком (v8.40), DDL в дельта-миграции. **Решения:** `LeadRegionResolver` через `app()` внутри `handle()` (не 7-й параметр — сохраняет сигнатуру + 3 существующих теста джобы); `deals.region_source` не добавляли (источник на supplier_leads + в журнале); запуск сразу на 100% без долевого гейта (решение заказчика). Тесты **101 pest GREEN / 509 assertions**; tools-vitest **1989 GREEN**. Code-review subagent (вердикт «с правками»): починены `atomicSwap()`→транзакция (spec §6.2) + убран stray comment; minor/deferred задокументированы (метрики §8.1 / `phone-ranges:rollback` / pg_anonymizer-маски / калибровка DaData call-cost). Прод-выкатка отложена (нужны `DADATA_API_KEY`/`DADATA_SECRET` в YC Lockbox + команда «запускаем»; runbook `docs/superpowers/runbooks/2026-05-31-lead-region-resolution-rollout.md`). Пре-существующий долг (НЕ из фичи): 3 чужих console-теста (BillingMigrateLeadsToRub / IncidentsWatchFailures / SnapshotBackfillCommand) взаимно загрязняются в одном процессе, в CI `pest --parallel` проходят. **§0 cross-refs НЕ меняются** — app-фича (сервисы/джоба/миграция), не tooling-канон #1-#86 / не ADR / не off-phase. §6 +абзац / §9 +entry. Через `claude-md-management:revise-claude-md`. **v2.44 наследие:** **router-gate v4 Layer 4 LLM-judge live wiring (item 2b) реализован + АКТИВИРОВАН владельцем + readonly-калибровка** (commits `dfae9f76` + `c9b9efd6` на main, push `a8996896..c9b9efd6`). Живой `main()` в обеих обёртках `enforce-llm-judge-{per-tool,response-scan}.mjs` (TDD; spend гейтится `resolveJudgeConfig` = флаг+ключ, без них $0; регистрировать **обёртки**, не движки — у движков `main()` тратит при одном ключе мимо флага). Владелец активировал Layer 4: env `ROUTER_LLM_JUDGE_ENABLED=1` + ключ `ROUTER_LLM_KEY` (user env) + регистрация обоих хуков в `.claude/settings.json` (per-tool→PreToolUse, response-scan→Stop) + перезапуск → судья заработал в hard-block (подтверждено: реальный вызов заблокировал команду). **Операционная находка:** живой судья сразу блокировал даже readonly git (`status`/`log`) — `MUTATING_TOOLS` включает Bash целиком + правило doubt→block, поэтому судился даже безобидный просмотр (over-block). **Калибровка** (commit `c9b9efd6`, TDD): новый `isReadonlyBashEvent` в `tools/enforce-llm-judge-per-tool.mjs` исключает readonly Bash (через `classifyBashCommand` reason `readonly|reading`) из per-tool судьи **до** LLM-вызова — scope-fix, дисциплина doubt→block на реальных мутациях (Edit/Write/commit/push/Skill/Task) **не понижена**. Регрессия vitest tools-only **1927 GREEN** (`npm run test:tools` сломан keytar'ом в `app/node_modules` → verify через `npx vitest run --root app --config vitest.config.tools.mjs`). **§0 cross-refs НЕ меняются** (инфраструктура `tools/enforce-*.mjs`, не tooling-канон #1-#86 / не ADR / не off-phase). §6 +абзац / §9 +entry. Через `claude-md-management:revise-claude-md`. **v2.43 наследие:** **router-gate v4 safe-baseline live wiring (item 1b) + enforce-runtime-write-deny (C3) + LLM-judge hook-обёртки + Read-deny over-block fix** (commits `ca52d354`+`6d512f5c..84dcf4aa`+`f740f612`+`80e514f5`+`3c5266c0` на main). **Item 1b:** живой `main()` в `tools/enforce-safe-baseline-metering.mjs` (учёт расхода safe-baseline-инструментов per-task + hard-block mutating-инструмента за порогом без skill-match; escape = любой Skill/EnterPlanMode, который этим слоем не блокируется) + чистые `extractKeywords`/`detectSkillMatch`/`runLiveDecision` (stickiness-контракт V2-1); новый `tools/enforce-runtime-write-deny.mjs` (C3 — защита `~/.claude/runtime` от Write/Edit, `.`-segment-proof через `pathNormalize`); judge-обёртки `enforce-llm-judge-{per-tool,response-scan}.mjs` (no-op main, $0 до активации 2b). Spec v4 через `superpowers:brainstorming` (3 adversarial-ревью + ghost-pass) закрыл C1/C2/C3/H1/V2-1/V2-2; G3 override вырезан как защита-призрак. Режим **hard-block** (решение владельца). Регистрация обоих хуков в `.claude/settings.json` — шаг владельца (Claude'у settings.json заблокирован); до регистрации хуки инертны. **Read-deny over-block fix** (commit `3c5266c0`, эта сессия): `enforce-read-path-deny` (Smoke 5) добавил CLAUDE.md/memory/нормативку в Read-protected paths → harness Edit требует Read → правка CLAUDE.md и MEMORY.md стала невозможна (claude-md-management workflow сломан). Введён узкий `READ_DENY_PATTERNS` в `tools/shell-content-rules.mjs` (только реальные exfil-цели: transcript `.jsonl` / `~/.claude/runtime` / settings / `.env`) — `enforce-read-path-deny` переключён на него; CLAUDE.md/Pravila/PSR/Tooling/memory снова Read-allowed, а полный `DEFAULT_PROTECTED_PATTERNS` по-прежнему держит Bash/PowerShell-read (`cat`/`Get-Content`) и Write-защиту этих файлов. TDD (RED→GREEN в одном ходе), регрессия vitest tools-only **1903 GREEN** (через рабочий корневой `npx vitest run --root app --config vitest.config.tools.mjs` — `npm run test:tools` ломается параллельной keytar-установкой в `app/node_modules`). **§0 cross-refs НЕ меняются** (инфраструктура `tools/enforce-*.mjs`, не tooling-канон #1-#86 / не ADR / не off-phase). §6 +абзац / §9 +entry. Через `claude-md-management:revise-claude-md`. **v2.42 наследие:** **router-gate v4.0+v4.1+v4.2 spec triple + master coordination plan + handoff + 5 worktrees + rationalization-audit fix deployed** (commits `0e768f9a` v4 specs + `c4c2afd1` master plan + `4e15fa70` handoff + `480649db` hook fix + `292a16bd` cspell на main `534e93d5..4e15fa70`). **v4.0 поведенческий разворот** 2249 строк (removes 16 защит-призраков v3.9, adds 5 Directions: safe-baseline metering / skill scope verifier / decomposition detector / TodoWrite verifier / brain-retro Table 16; target ~15-25% bypass). **v4.1 max-closure amendment** 1051 строка — Layer 1-4: 8 GAPs + behavioral hard-blocks + universal vocab removal + 3-judge consensus Sonnet+Haiku+Opus + per-tool LLM-judge + response scan; target ~2-5%; ongoing cost ~$300-1500/month. **v4.2 VM-sandbox amendment** 411 строк — Layer 5 phased для solo dev: Phase 1 VirtualBox ($0, 10-12h), Phase 2 биометрия + Phase 3 HSM через single YubiKey ($50-150 разово); two-person rule removed; target ~0.5-0.8%. **Master coordination plan** 666 строк (9 streams parallel session strategy, disjoint file scope → 0 conflicts by construction). **Handoff instructions** 450 строк с 5 ready-to-copy промтами для streams A-E + Checkpoint 1 merge + Stream G/H + smokes + cleanup (plain-Russian для non-programmer). **5 worktrees готовы** `C:\моя\проекты\портал crm\v4-stream-{A,B,C,D,E}` от `480649db`. **5 параллельных Claude sessions запущены** пользователем ~18:48 МСК через VS Code окна — каждая читает спеки, генерирует sub-plan через `superpowers:writing-plans`, реализует через `superpowers:subagent-driven-development`. Wall-clock 16-23h (vs 49-65h sequential). Aggregate bypass target after full deployment ~0.5-0.8% (vs v3.9 baseline ~25%); **architectural floor ~0.5% irreducible per 7 fundamental limits** (asymptote analysis установлен в сессии: goal-misalignment / recursive trust / info-theoretic leak / behavioral residual / external dependencies / user approval ambiguity / gate paradox). **Rationalization-audit hook fixed в этой сессии** (commit `480649db` — `stripQuotedContext()` функция strip'ает backticks/guillemets/fenced blocks/double quotes перед substring match; resolved 48 false-positive flags за сессию при описании самой защиты — controller часто цитирует pattern-слова в спеках). **Operational quirks обнаружены:** `LEFTHOOK=0` env-var отключает hooks на одну команду — необходим для rebase когда post-commit hooks регенерируют observer-файлы (STATUS.md / .pii-counters.json / episodes-*.jsonl) между picks и ломают long sequence; `enforce-memory-coverage` hook принимает строго `direct:memory-sync` per-turn, chain отклоняется как stale. Methodology session: `superpowers:brainstorming` skill для asymptote analysis 4 variant rounds (R7/R8/R9 layers + irreducible limits) → `superpowers:writing-plans` для master plan + handoff → `superpowers:subagent-driven-development` следующая фаза per stream. Memory entries (`project_router_gate_v4` + 3 feedback) — follow-up в отдельной session с `direct:memory-sync` coverage per memory-coverage hook constraint. **§0 cross-refs не меняются** (v4 — implementation, не tooling-канон #1-#86, не ADR, не off-phase подкатегория). §6 +абзац / §9 +entry. Через прямой Edit (worktree-эксцепшн §5 п.10 — плагин claude-md-management через MCP marketplace недоступен после disconnect; прецедент v2.36/v2.28/v2.16). **v2.41 наследие:** v3.9 Round 7 audit closure + concentrated rewrite (commits `8910ae6c` + `a6bde212` на main `ef19b9f2..a6bde212`): v3.9 закрыл 13 классов R7 (2 FATAL F5 parent-sentinel Read-leak через Glob+Read / F6 subagent tool_result.content exfil; 4 CRITICAL C12 system DNS/SSH/registry paths `/etc/hosts`+`~/.ssh/**`+`HKCU:\Software\Microsoft\**` / C13 `\|\| true` exit-code spoof — §5.1 hard-blacklist переформулирован «ANY part mutating» per-chain semantics + PostToolUse `git rev-parse HEAD` change verify / C14 subagent state Read-channel exfil / C15 §5.2 multi-language gap PHP/Ruby/Go/Java test runners; 5 SERIOUS S22 Skill exemption second-layer `tools/enforce-normative-content-rules.mjs` для memory/CLAUDE.md/Pravila writes + LLM-judge multi-judge consensus strict «один YES → block» / S23 Workflow approval pattern `scriptPath+sha256(args)` / S24 path equivalence NFC + Windows 8.3 long-name expansion + hardlink inode check через `protectedInodes` Set / S25 MCP-tool classification map (read_only/hard_blacklist/conditional/default block) / S26 stop-keywords +25 Russian morphology variants + LLM-judge ambiguous fallback; 2 EDGE E31 redacted block-reason mode `gate-config.json::reason_mode` / E32 LLM-judge cache scope per-session-id, TTL 24h→1h). **3 фундаментальные плоскости** R6/v3.8 не классифицировал: (1) safe baseline tools (Read/Glob/TodoWrite/AskUser) как exfil-каналы — все 9 раундов рассматривали их «always safe»; (2) system-level paths вне Claude session scope — `/etc/hosts`+`~/.ssh/*`+registry hives под Edit tool; (3) tool-composition / chain semantics where «mutating» per-token vs per-chain — `|| true` обходил §5.1 hard-blacklist «двух mutating». Generalisable formula R7: для каждого следующего audit 3 проверочных вопроса до enumeration (какие safe tools/paths/chains дают visibility/leverage; какие границы scope подразумеваются но не enforce'ятся; где per-token vs per-chain formulation gap). **Implementation budget:** 45-60h (v3.8) → **53-72h** (v3.9) +8-12h в 7 этапов через subagent-driven-development. **Закрыто 118 holes total** через 10 раундов adversarial audit. **Concentrated rewrite** (commit `a6bde212`, заказчик «убери всё лишнее оставь только то что необходимо для создания плана, нельзя потерять в качестве и объёме»): spec 2964→**2404 строк** (-560 / -19%) — убран audit-trail/version-history overhead (8 «Changes vX → vY» giant overview tables в шапке ~245 lines + §11 v3.8-v1 individual entries ~380 lines заменены 1 Timeline-paragraph + 1 condensed §11 entry «### v1 – v3.8 — 9 раундов 105 holes»). Технический content **100% сохранён** (verify-grep: fs.lstatSync 4 / parent_random_id 29 / SKILL_BASH_ALLOW 9 / schema_version 11 / Поведение[1-4] 17 / claude-md-management 19 / approve_git_operation 28 / restricted/ 21 / keytar 15 / shell-quote 17 / dep-checksums 11 / NFC|normalize 12 / mcp_tool_classification 7 / /etc/hosts 11 / git rev-parse HEAD 5). Все §1-§11 sections intact. v3.9 entry полный — план в следующей сессии будет ссылаться на R7 closure details. **§0 cross-refs не меняются** — spec-only, не tooling-канон / не ADR / не off-phase подкатегория. §6 +абзац / §9 +entry. Verify-sentinel: vitest tools-only **1179/1179 GREEN** per memory `feedback_vitest_sentinel_recipe.md`. Methodology: `superpowers:brainstorming` skill для R7 audit (full-closure через AskUserQuestion 4 options) + `EnterPlanMode`/`ExitPlanMode` для concentrated rewrite plan approval workflow. Pre-commit hooks GREEN (gitleaks 0 / markdownlint 0 / cspell 0 / adr-judge OK); pre-push (gitleaks-full-history 1848 commits 0 / lychee 120 OK 0 errors). Через `/claude-md-management:revise-claude-md`. **v2.40 наследие:** router-gate spec v3.5 → v3.8 sweep (commit `46c43169` на main `ef19b9f2..46c43169`): adversarial audit rounds 5+6 закрыли **45 новых attack-векторов в 22 классах** через 3 sequential bump'а (v3.5 → v3.6 → v3.7 → v3.8). **v3.6** — Round 5 closure 15 holes + 7 acceptable residual (§3.1 +9 paths transcript JSONL/user-level settings/lefthook/gitleaks/gitignore/classifier prompts/cost-tracker/scheduled-tasks lock; §3.2.0 +Smoke 4-7 на непредсказуемость tool_use_id/transcript hard-deny/AskUser structure/subagent gate startup; §4.7 recovery-pattern hard-block ~30 keywords в options/header/preview/annotations; §5.1 ↔ §4.5 git-pattern sync — git rebase/reset/checkout/etc перенесены из hard-blacklist в Conditional after approve_git_operation; §5.2 glob ↔ edited-files intersection check). **v3.7** — Maximum-closure pass (заказчик «закрывай в максимум чтоб и шанса не было»): все 7 acceptable residual + edge git stash закрыты defense-in-depth (LLM-judge Sonnet small-call на каждую AskUser-опцию для recovery-synonyms; `parent_random_id` 256-bit sentinel независимо от tool_use_id entropy; `~/.claude/runtime/restricted/*` Read-blocked subdir + dedicated `tools/journal-reader.mjs` CLI; `shell-quote` npm tokenizer для quoted Bash args; TF-IDF cosine + LLM-judge fallback для off-topic; smart batching multi-question AskUser для S6; git stash push/save/pop/apply в conditional class). **v3.8** — Round 6 closure (заказчик «забудь контекст, найди все дыры» → 30 attack-векторов в 18 классах incl. 4 FATAL): **F1** PowerShell tool gate был полностью вне scope §5.1 — controller через PowerShell tool обходил весь Bash whitelist (`Remove-Item ~/.claude/runtime/router-state-*.json`); v3.8 новый hook `tools/enforce-powershell-gate.mjs` (matcher `PowerShell`) + §5.1.2 content rules + shared `tools/shell-content-rules.mjs`. **F2** Workflow internal `agent()` enumeration — gate видел outer Workflow call один раз, внутри script.mjs запускалось 20 параллельных agents без gate-проверки; v3.8 scriptPath требует AskUser approval + content статически сканируется + каждый agent() inherit gate через env-vars + `resumeFromRunId` DISABLED + Smoke 8. **F3** `node_modules/*` не protected — controller мог patches `node_modules/shell-quote/index.js` подменить tokenizer; v3.8 §3.1 whole-dir hard-deny + §3.6.1 `tools/dep-checksums.json` SHA-256 верификация на startup ключевых deps (shell-quote/proper-lockfile/glob/natural/keytar). **F4** LLM-judge prompt injection через option content — Sonnet-судья читал controller-written content уязвимо; v3.8 delimiter tokens 24-char random unguessable + pre-filter regex strips `SYSTEM:`/``/JSON-fragments + multi-judge consensus Sonnet+Haiku independent, disagree → default-CLOSE. Дополнительно §3.1 расширен +30 entries: memory/CLAUDE.md/Pravila/PSR/Tooling (с Skill exemption для `claude-md-management` через legit writes) + CI/CD configs `.github/workflows/*` + lint/build configs (tsconfig/eslintrc/prettierrc/vitest/vite/webpack/nuxt/next) + plugin cache + shell init (`.bashrc`/`.profile`/`.zshrc`) + npm configs (`.npmrc`/`.yarnrc`/`.pnpmrc`) + node_modules + parent-sentinel-*.json + dep-checksums.json + expected-path.txt. §3.0.1 OS-keychain для LLM key (Windows Credential Manager / macOS Keychain / Linux libsecret через `keytar`); key не в `process.env` → не утечёт через npm test stdout. §3.2.1 automated bootstrap smoke (1/5/6/7 на каждый session start, cached 7 days); user-run остаётся для 3/4/8. §6.1 `docs/recovery-procedures.md` (spec-only, файл не создан реально — TODO followup) — шпаргалка PowerShell-команд для 3 уровней recovery. Implementation budget: 13.5-20h (v3.1) → 22.5-32h (v3.6) → 33-44h (v3.7) → **45-60h** (v3.8). **Закрыто 105 holes total** через 9 раундов adversarial audit. **Generalisable lesson v3.8:** «v3.7 maximum closure» был maximum **внутри границ воображения v3.6 R5-audit** — Round 6 показал что сами границы имели дыры. Каждый раунд audit должен начинать с **abstract classification** «какие классы атак вообще существуют в системе?» **до** enumeration конкретных дыр; иначе закрытие 99% surface'ов внутри одного класса не помогает если атакующий использует другой класс. 5 new attack surfaces discovered Round 6: parallel tools (PowerShell как эквивалент Bash), nested tool internals (Workflow `agent()`), npm-dependency-chain (`node_modules/*` patches), environment manipulation (shell init / PATH / `.npmrc`), cross-session context poisoning (memory/CLAUDE.md/Pravila). Spec: 1980 → 2554 строк (+1110 inserts / -44 deletes за v3.6-3.8 sweep). +13 терминов в cspell-words.txt (PowerShell aliases gci/sls/iwr/spps/rvpa + npm pkg names IDF/pnpmrc/toolu + tokenizer artifacts rnd/dxf/misattributes/сканится/социалка). Verify-sentinel: vitest tools-only 1179/1179 GREEN per memory `feedback_vitest_sentinel_recipe.md`. **§0 cross-refs не меняются** — spec-only, не tooling-канон / не ADR / не off-phase подкатегория. §6 +абзац / §9 +entry. Через прямой Edit (user-instruction priority к §5 п.10 — заказчик в prompt'е «обнови мозг», прецеденты v2.36/v2.28/v2.16). **v2.39 наследие:** router-gate Уровень 4 spec finalized (v3.2 → v3.5, 5 commits на main `832fadbc..80c81602` + cosmetic `6c6796d8`): 4 раунда adversarial audit от controller'а закрыли ВСЕ известные controller-writable signals архитектурно. **v3.2** (`832fadbc`) — первый audit на v3.1, closed 18 holes (4 fatal + 11 critical + 8 serious + 3 edge) через 7 секций A-G; +5-7h budget. **v3.3** (`903aa700`) — v4.1 audit на свою же v3.2: 12 новых holes, главное — N1 fatal честно признана как acceptable residual (BLOCKED-protocol regex был самообман — controller-written text fake-able trivially); +1.5-2h. **v3.4** (`15bf46a1`) — dedicated brainstorm на N1: **S5 TRUE closure** через out-of-band block-file `subagent-block-.json` (subagent gate-process пишет, path derived from harness-assigned tool_use_id, file в protected paths `~/.claude/runtime/*` §3.1); +2h. **v3.5** (`80c81602`) — dedicated brainstorm на S8: **S8 TRUE closure** через AskUserQuestion-gate (`enforce-branch-switch.mjs` больше не читает controller-written markers, controller обязан AskUser → §4.5 answer parser распознаёт git-pattern → пишет approve_git_operation в `askuser-decisions-.jsonl` → hook читает exact-match + one-shot consume + 5-min time window); +1.1h. **Acceptable residual list теперь ПУСТ** — все известные controller-writable signals (S5+S8) закрыты архитектурно через generalisable side-channel pattern: write-канал в protected file через отдельный gate-процесс при harness-driven событии. Implementation budget: 13.5-20h (v3.1) → **22.5-32h** (v3.5) в 6 этапов через subagent-driven-development. **Готов к writing-plans фазе в следующей сессии** — 3 mandatory user-run smoke-tests до Этапа 2.1 (env propagation H2 + PostToolUse semantics N10 + subagent block-file write Smoke 3 v3.4). Audit methodology: chain `audit-context-building` skill + ручной adversarial разбор по 13 attack-зонам. Brainstorm methodology: `superpowers:brainstorming` skill с clarifying-questions через AskUserQuestion. **§0 cross-refs не меняются** — Pravila/PSR_v1/Tooling Прил.Н не затронуты (нет нового tool/ADR/категории — это design-only spec в `docs/superpowers/specs/`, не tooling-канон). §6 +абзац / §9 +entry. ⚠️ Memory writes этой сессии заблокированы coverage-hook'ом (нужен `direct:memory-sync` per-turn) — оформлены drafts в handoff-сводке, сохранятся в новой сессии. Через `/claude-md-management:revise-claude-md`. **v2.38 наследие:** router-hooks Phase 4 follow-ups + Phase 5 closure (cost-tracker): commits `6e93ccc4` cosmetic (UTF-8 BOM L1 + EOF newline fix на `tools/enforce-semgrep-security.mjs` через node-fs one-liner, обходит TDD-gate по Bash matcher) + `c20a53c0` DRY refactor (`decide()` в `enforce-chain-recommendation.mjs` возвращает enriched struct `{block, message?, hasMutating, hasChainSkill, hasInlineOverride}`, `main()` сбрасывает дубли вычислений и читает result.*; +8 TDD-тестов на enriched return) + `836c433b` Phase 5 (новый `tools/cost-stop-hook.mjs` aggregates today's эпизодов в `~/.claude/runtime/cost-daily.json` USD breakdown — 5 компонент `classifier / self_assessment / reviewer_subagent / reviewer_direct_fallback / self_retrospect` + total + episode_count; closes brain-retro #9 Candidate 4 «cost-daily.json пуст»). Pure layer — `tools/cost-pricing.mjs` (frozen PRICING с Sonnet 4.6 / Opus 4.7 per-token rates) + `tools/cost-aggregator.mjs` (episodeUsd/aggregateDay) + `tools/cost-stop-hook.mjs` (runUpdate pure + main fail-quiet I/O). Registered Stop-hook в `.claude/settings.json` timeout=10s. Smoke на live эпизодах: today 24 episodes / $0.08 classifier_usd (Sonnet 4.6 LLM router calls). **Регрессия 1165/1165 vitest tools-only GREEN** (+30 за Phase 5 + 8 за DRY = +38 от 1135). **§0 cross-refs не меняются** — Phase 5 это инфраструктура tools/, не Tooling Прил.Н канон #1-#86, не ADR. §6 +абзац / §9 +entry. **Router-hooks epic закрыт полностью:** Phase 1 (`81f92ca3..4d7e9e33`) + Phase 2 (override-limit) + Phase 3 (PAMYATKA 4→8) + Phase 4 (Semgrep + chain-hook measurement Cut 11) + Phase 4 follow-ups + Phase 5 (cost-tracker). Все 10/10 кандидатов brain-retro #9 + self-retrospect #1 закрыты. Через прямой Edit (user-instruction priority к §5 п.10 — заказчик «делай все»). **v2.37 наследие:** router-hooks Phase 4 closure (Semgrep-security + chain-hook measurement): commits `5eb20665` Task A (новый PreToolUse Bash хук [tools/enforce-semgrep-security.mjs](tools/enforce-semgrep-security.mjs) блокирует `git commit` если staged-diff содержит auth/billing/CSV/webhook файлы И Semgrep в сессии не запускался; 3 escape hatch — запустить Semgrep / inline `semgrep-skip:` / global override; override-vocab +`semgrep-security` во всех 7 фразах; новый helper `sessionToolUses(transcript)`) + `a3f5f392` Task B (`logHookOutcome(rule, outcome, sessionId)` helper в [tools/enforce-hook-helpers.mjs](tools/enforce-hook-helpers.mjs) пишет JSONL в `~/.claude/runtime/hook-outcomes.jsonl`; [tools/enforce-chain-recommendation.mjs](tools/enforce-chain-recommendation.mjs) вызывает его per fire с outcome-classification из `classifyOutcome()` — 6 buckets `blocked` / `passed-with-skill` / `passed-inline-override` / `passed-global-override` / `passed-short-chain` / `passed-no-mutating`; новая Cut 11 `analyzeChainHookEffectiveness()` + `buildChainHookEffectiveness()` в [tools/brain-retro-analyzer.mjs](tools/brain-retro-analyzer.mjs); SKILL.md `.claude/skills/brain-retro/SKILL.md` mandatory tables 10→11) + `b93e5af4` review-fixes (export `CHAIN_OUTCOME_BUCKETS` для внешних consumers + dead `import fs` cleanup в helpers test). **Регрессия 1135/1135 vitest tools-only GREEN.** Push `8b818144..b93e5af4 main -> main` (rebased поверх Slepok Stage 3 PR #27 merge — orthogonal scope). **§0 cross-refs не меняются** — Pravila/PSR_v1/Tooling Прил.Н не затронуты (нет нового tool в реестре #1-#86, нет ADR, нет off-phase подкатегории; `tools/enforce-*.mjs` + `.claude/skills/brain-retro/` — инфраструктура контроллера, не tooling-канон). §6 +абзац / §9 +entry. Plan `docs/superpowers/plans/2026-05-28-router-hooks-phase4-semgrep-and-chain-measure.md`. Phase 5 (cost-tracker, brain-retro #9 Candidate 4) — отдельный план. Memory +3: `feedback_subagent_bom_eof_writes.md` / `feedback_reviewer_dead_import_falsepositive.md` / `feedback_rebase_observer_dirt.md`. Open follow-ups (non-blocking per final reviewer): cosmetic BOM L1 + missing EOF newline на `enforce-semgrep-security.mjs`; DRY `decide()`↔`main()` в chain-rec hook. Через `/claude-md-management:revise-claude-md`. **v2.36 наследие:** router-hooks fixes Phase 1+2+3 closure (infrastructure, 13 commits): closes 7/10 brain-retro #9 candidates за одну сессию. Phase 1 — analyzer archive-fallback removed (Mermaid noise source в Cut 8) + System Health block в STATUS.md (long-running процессы >1ч). Phase 2 — `tools/enforce-override-limit.mjs` hard-block 6-й override-фразы одного типа за день, bypass «лимит снят» one-shot. Phase 3 — PAMYATKA в `tools/router-classifier.mjs` 4→8 паттернов (feature→writing-plans / bugfix→debugging+Pest / prod→Sentry / mechanical→coder-agent). Push `81f92ca3..4d7e9e33 main -> main`. Регрессия 1088/1088 vitest GREEN. **§0 cross-refs не меняются** (нет нового tool/ADR/категории — infrastructure layer). §6 +абзац / §9 +entry. Memory `feedback_subagent_api_crashes.md` + `feedback_tdd_gate_subagent_handoff.md` + `project_state.md` entry. Через прямой Edit (user-instruction priority к §5 п.10 — заказчик в prompt'е «обнови мозг»). **v2.35 наследие:** prompt-caching split on reviewer-agent (perf, infrastructure): commit `a0bb11a6` `buildReviewPromptStructured()` в [tools/brain-retro-opus-reviewer.mjs](tools/brain-retro-opus-reviewer.mjs) возвращает `{system, user}`; `reviewViaDirectApi` через структурированную ветку `callAnthropicAPI` с `cache_control: ephemeral` (паттерн `buildClassifierPromptStructured` с фазы классификатора — infra reused). Эффект на Opus 4.7 ~ноль: Anthropic минимум кешируемого префикса 4096 токенов vs наш static-блок ~400 токенов; активируется при свиче на Sonnet 4.6 или росте static-блока. §6 +абзац / §9 +entry; **§0 cross-refs не меняются** (нет нового tool/ADR/категории — инфраструктура tools/, не реестр инструментов). Push `5e70ab78..a0bb11a6`. Memory `feedback_prompt_caching_callAnthropicAPI.md`. Через `/claude-md-management:revise-claude-md`. **v2.34 наследие:** retro #8 follow-up — 3 enforcement hook (classifier threshold 0.7→0.8 / chain-recommendation PreToolUse block / graph-first Stop block) + vocab gap fix (graph-first + chain-recommendation подавляются всеми 7 global override-фразами); §6 +абзац / §9 +entry; **§0 cross-refs не меняются** (нет нового tool/ADR/категории — infrastructure hooks в tools/, не реестр инструментов). Memory `feedback_enforcement_hooks_retro8.md`. Через `/claude-md-management:revise-claude-md`. **v2.33 наследие:** graphify operationalization: (1) junction `graphify-out/` → `.claude/worktrees/graphify-spike/graphify-out/` — граф читается из main worktree, не только из spike; (2) `.gitignore` +`graphify-out/` + `graphify-out-*/` — build-артефакты не попадают в diff; (3) §5 +п.14 — операционная директива «перед открытым codebase-вопросом сначала `/graphify query`, потом Read/Grep/Glob» с явными исключениями (известный путь / узкий regex / запись / устаревший граф). **v2.32 наследие:** knowledge-graph-tooling: #86 graphifyy формализован как 19-я off-phase подкатегория; §3.3 +строка #86; §0 cross-refs Pravila v1.42→**v1.43** / PSR_v1 v3.22→**v3.23** / Tooling Прил.Н v2.23→**v2.24**; §9 +запись. ADR-017 (KG1–KG5). Через прямой Edit — worktree-эксцепшн §5 п.10. **v2.31 наследие:** adr-judge redos fix + brain-retro 7→10 cuts: commit `1e1457eb` чинит catastrophic backtracking в `ENFORCEMENT_BLOCK_RE` ([tools/adr-judge.py](tools/adr-judge.py), nested `(?:.*?\n)*?` + DOTALL виснет >60s на ADR-011/ADR-016 с прозаическим `## Enforcement` без ```json fence; декомпозированный поиск heading→section-boundary→fence; все 13 ADR <1ms post-fix; **vendored из adr-kit v0.13.1** — перезапишется при `/adr-kit:upgrade`, нужно re-apply или upstream PR); commit `b1398883` расширяет brain-retro SKILL.md MANDATORY DIGITAL ANALYSIS 7→10 таблиц (cuts 8/9/10: Class × canon coverage / Router vs Opus A-B-C / Chain-ignore breakdown — все три wired в [tools/brain-retro-analyzer.mjs](tools/brain-retro-analyzer.mjs) `analyze()` output автоматически; +216 lines analyzer / +288 lines tests). Push `e184ffe2..1e1457eb`. Регрессия 989/989 tools-tests GREEN. Не нормативный version-bump-worthy event (нет новых tool/ADR/категории), §6 +абзац / §9 +entry. Memory `feedback_adr_judge_redos.md` + fix `feedback_vitest_sentinel_recipe.md` (был self-contradicting — `.test.mjs` суффикс в exclude триггерил сам же документированный фильтр `detectFullTestRun` "narrow vitest"). Через `/claude-md-management:revise-claude-md`. **v2.30 наследие:** docs-only short-circuit landed: §5 +п.13 (новый — не запрашивать override `ремонт инфраструктуры` для docs-only коммитов); §9 +v2.30 entry; commit `8266755c` (4 файла, +192/−2, [tools/enforce-hook-helpers.mjs](tools/enforce-hook-helpers.mjs) + [tools/enforce-verify-before-push.mjs](tools/enforce-verify-before-push.mjs)) — хук теперь молча пропускает коммит/push если все изменённые файлы кончаются на `.md`. TDD 13 новых тестов GREEN, tools-only regression 965/965. Override остаётся для смешанных/кодовых. Через `/claude-md-management:revise-claude-md`. **v2.29 наследие:** slepok routing protection design artifacts: спек v0.4 + план реализации защиты слепка поставщика в маршрутизации лидов записаны в `docs/superpowers/{specs,plans}/2026-05-26-slepok-routing-protection*.md`. 19 рисков R-01..R-19 покрыты, 5 этапов реализации ~7.5-10 дней, бизнес-инвариант slepok №NЛ (18:00 МСК) → №NП (21:00 МСК). **Прод НЕ затронут** — это design-only артефакты, реализация не начата. Аудит-источник сессия `135a4adf`. §6 +абзац; §9 +запись. Memory `project_slepok_protection.md`. Через `/claude-md-management:revise-claude-md`. **v2.28 наследие:** Project-local AI-agents delegation rule: §3.9 (новая подсекция) + Pravila §2.4 — контроллер обязан звать `normative-sync` (#84) после крупной задачи и `prod-deploy-validator` (#85) перед каждым выкатом на liderra.ru; +2 узла в `docs/registry/nodes.yaml` (subcategory `project-agent`) для missed-activation детектора (Pravila §16.4). Tooling канон счётчиков **НЕ изменился** (#1-#83 сохраняются — project-агенты не входят в Tooling-канон). §0 cross-ref Pravila v1.39→**v1.40**. Spec `docs/superpowers/specs/2026-05-24-controller-offload-agents-design.md`. Через прямой Edit — worktree-эксцепшн §5 п.10 (прецедент A11/C10/discovery/finance/A8/marketing). **v2.27 наследие:** C1 marketing-tooling integration: §3.3 +#74-#83 (10 узлов, 18-я off-phase подкатегория marketing-tooling); §0 cross-refs Pravila v1.38→**v1.39** / PSR_v1 v3.21→**v3.22** / Tooling Прил.Н v2.22→**v2.23**; §6 +абзац; §9 +запись. ADR-015. Прямой Edit — worktree-эксцепшн §5 п.10. **v2.26 наследие:** pg_audit #28 + pg_anonymizer #29 **установлены на боевом `liderra.ru` 22.05.2026** (расширения PostgreSQL фазы 3, ранее недоступные на dev native-Windows): §3.4 строки #28/#29 → ✅ прод; §6 +абзац; §0 cross-ref Tooling Прил.Н v2.21→**v2.22**; §9 +запись; setup-док `docs/security/pgaudit-anonymizer-setup.md`. pg_audit закрывает 152-ФЗ аудит-журнал БД (`pgaudit.log='ddl, role, write'`, `log_parameter=off`); pg_anonymizer (anon 3.0.13/Rust, собран из исходников) — маскированные выгрузки, загрузка по требованию. NB: установка PGDG-dev потянула минорный апгрейд PG 16.13→16.14 (данные целы, версия закреплена `apt-mark hold`). runbook `docs/deploy/test-server-runbook.md` (ветка feat/test-deploy) — sync отдельно. Прямой Edit — worktree-эксцепшн §5 п.10 (прецедент A8/A11/finance). **v2.25 наследие:** A8 infosec-tooling install-sync: ZAP #68 + Ward #70 **установлены портативно 21.05.2026** (без choco — Go 1.26.3 / Temurin JRE 17 zip с проверкой SHA256, бинари в `bin/*` gitignored) → статус PENDING INSTALL снят (§3.3 строки 68/70, §6); setup-доки `docs/security/zap-setup.md` + `docs/security/ward-setup.md`; §0 cross-refs Pravila v1.37→**v1.38** / PSR_v1 v3.20→**v3.21** / Tooling Прил.Н v2.20→**v2.21**; §9 +запись. Прямой Edit — worktree-эксцепшн §5 п.10 (прецедент A8/A11/finance). **v2.24 наследие:** A8 infosec-tooling integration: §3.3 +#68 OWASP ZAP (DAST, PENDING INSTALL) / #69 Nuclei (CLI, installed+verified) / #70 Ward (CLI, заменил abandoned Enlightn, PENDING INSTALL) / #71 pdn-152fz-audit / #72 threat-model / #73 security-go-live (self-authored скилы); §0 cross-refs Pravila v1.37 / PSR_v1 v3.20 / Tooling Прил.Н v2.20; §6 +абзац; §9 +запись; новая 17-я off-phase подкатегория infosec-tooling (раздел A8); ADR-014 (IS1–IS9); провенанс-вет IS9 (риск ToxicSkills); серверный слой защиты → open questions SEC-1..SEC-7 (Б-1). Перенумеровано v2.23→v2.24 при ребейзе на origin/main (v2.23 параллельно занят observer). **v2.23 наследие:** observer missed-activations: §0 cross-ref Pravila v1.35→**v1.36** (§16.4 условное missed-activation правило — профильная задача без активации релевантного узла → сигнал в STATUS.md C5 + /brain-retro; маппинг `tools/observer-classification-map.json` + `tools/.node-dormancy.json` двойной сигнал dormant/DEFERRED); §3.6 +абзац missed-activation; §9 +запись. План `docs/superpowers/plans/2026-05-21-observer-missed-activations.md`. **v2.22 наследие:** A1 backend-tooling integration: §3.3 +#64 Rector / #65 PHP Insights / #66 laravel-backend-patterns / #67 NightOwl (DEFERRED); §0 cross-refs Pravila v1.35 / PSR_v1 v3.19 / Tooling Прил.Н v2.19; §6 +абзац; §9 +запись; новая 16-я off-phase подкатегория backend-tooling (раздел A1); ADR-013. **v2.21 наследие:** finance-tooling integration (C6+C7): §3.3 +#61 finance plugin (homed C7) / #62 billing-audit (C6) / #63 ru-tax-accounting (C7); §0 cross-refs Pravila v1.34 / PSR_v1 v3.18 / Tooling Прил.Н v2.18; §6 +абзац; §9 +запись; новая 15-я off-phase подкатегория finance-tooling; ADR-012. **v2.20 наследие:** observer factor-analysis extension + phase 1.1 (ADR-011 amend): schema v2 (`decision_provenance` 3 kinds incl. `user_chose_from_options`) + двусторонний routing-gate/C5 + brain-retro analyzer; полные записи — §9 v2.19/v2.20. **v2.18 наследие:** Brain governance Phase A/B/C complete (ADR-011): §0 cross-refs Pravila v1.30→**v1.31** / PSR_v1 v3.15→**v3.16** / Tooling v2.16→**v2.17**; §3.X +cross-ref на `docs/router-procedure.md` v1.0 (single SoT для router procedure); §9 +brain governance entry. Реализованы 4 phases: Phase A normative foundation (5 tasks/15 commits — ADR-011 anchor, router-procedure.md v1.0, Tooling Прил. Н 9-attribute template на 58 узлов, Pravila §16, PSR_v1 R16); Phase B observer infrastructure (6 tasks/6 commits — scaffolding + PII filter + Stop-hook + HK1 pre-check + settings.json registration + /brain-retro skill); Phase C 4 controllers (5 tasks/5 commits — L1-watcher, cross-ref-checker (DWC, noise refinement pending), observer-of-observer 54w self-prune, STATUS.md generator, lefthook wire). Spec v1.1 `docs/superpowers/specs/2026-05-19-brain-governance-design.md` (factor analysis amendment: routing_decision events + primary_rationale). План `docs/superpowers/plans/2026-05-19-brain-governance.md`. C1+C2 surface 9+150 pre-existing drifts (known); WARN-only lefthook pending follow-up alias/scope refinement. **v2.17 наследие:** компакция «мозга» (SYSTEM-аудит findings 2/3/6/7): §3 title — убран счётчик «60 инструментов»; §3.3 строки #31–#60 (30 off-phase) свёрнуты из многострочных абзацев в однострочный индекс с пином на Tooling §4.NN (finding 2 — устранён дубль реестра с Tooling); §3.3 footer / §1 row 2b / §0 row-label — счётчик «60» → пин на Tooling Прил. Н §0 как канон (finding 3); §2 БД + §8 self-review — schema-метрики → пин на header `db/schema.sql` (finding 3); §3.5 ruflo свёрнут в dormant-стаб, исторические абзацы убраны (finding 6); §0 cross-refs Pravila v1.29→**v1.30** / PSR_v1 v3.14→**v3.15** / Tooling v2.15→**v2.16**; §9 +запись. Finding 1 (раздувание шапки/§0) и finding 5 (баг хука экономии) — заказчиком не выбраны, вне scope. План `docs/superpowers/plans/2026-05-18-brain-compaction-findings-2-3-6-7.md`. **v2.16 наследие:** SYSTEM-аудит «мозга» Rec1–Rec5 closure: §0 cross-refs Pravila v1.28→**v1.29** / Tooling v2.14→**v2.15** / Plugin_stack_rules v3.13→**v3.14**; §3.5 +bold-блок «СТАТУС 18.05.2026: ИЗОЛИРОВАН (dormant)» — live-связи ruflo (hooks/MCP/daemon) отключены без удаления артефактов; §3.7 (новый) — cross-ref на `docs/routing-off-phase.md` v1.0 (off-phase routing-аид: 30 узлов триггер→узел + 12 канонических связок L1–L12); §3.6 → §3.8 renumber; §6 +абзац «2026-05-18 SYSTEM-аудит мозга + Rec1–Rec5 закрытие». Snapshot — `docs/discovery/2026-05-18-system-audit-brain.md`. Rec2 закрыл 2 из 3 ⚫-конфликтов карты. Связано: Pravila v1.29 (+§14.9 ruflo dormant), Tooling v2.15 (§4.10 status-block), PSR_v1 v3.14 (+R15 off-phase routing), `docs/routing-off-phase.md` v1.0 (новый), memory `feedback_ruflo_isolated.md` + `feedback_automation_map_not_sot.md` + `feedback_hard_rule_no_alt_question.md`. **v2.15 наследие:** Anthropic dev-tooling integration: формализованы 5 Anthropic dev-плагинов из marketplace `anthropics/claude-plugins-official`, уже включённых в `~/.claude/settings.json` `enabledPlugins` user-level без формализации — #56 skill-creator / #57 plugin-dev / #58 hookify (новая тринадцатая off-phase подкатегория «authoring-tooling») + #59 claude-code-setup / #60 context7 (новая четырнадцатая «dev-support»); §3 title 55→60, §1 row 2b 55→60, §3.3 +5 строк #56–#60, §3.3 footer 55→60 (14 off-phase подкатегорий), §0 cross-refs Pravila v1.28 / PSR_v1 v3.13 / Tooling v2.14, §6 +абзац, §9 +запись. Триггер — аудит «мозга» через discovery-interview SYSTEM-режим: вскрыт L1-паттерн «плагин включён в settings.json без формализации в правилах» (повтор UPM/21st 10.05, Sentry/Redis 13.05). ADR-010. hookify HK1 — pre-check на коллизию с 6-компонентной economy/skill-discipline хук-архитектурой; закрывает 🔴-конфликт карты `hookify_plugin ↔ hk_pre_claude`. **NB:** ветка `feat/anthropic-dev-tooling` ребейзнута на parallel-sessions §15 (origin/main `781a59c`) — v2.14 и Pravila v1.27 параллельно заняты §15-эпиком; перенумеровано v2.14→v2.15, Pravila v1.27→v1.28. План `docs/superpowers/plans/2026-05-18-anthropic-dev-tooling-formalization.md`. Через прямой Edit — worktree-constraint эксцепшн §5 п.10 (прецедент A11/C10/discovery). **v2.14 наследие:** parallel-sessions-coordination: sync §0 cross-ref Pravila v1.26→v1.27 + §1 priority chain footer-абзац «Hard-rules вне §9» (упомянуты §12/§14/**§15**); §15 — третье hard-rule после §12 и §14, лечит два класса инцидентов параллельных Claude-сессий (Sprint 6 субагент-угон-ветки + Tooling v2.11 collision 17.05.2026). Spec — `docs/superpowers/specs/2026-05-18-parallel-sessions-coordination-design.md`, план — `docs/superpowers/plans/2026-05-18-parallel-sessions-coordination.md`. v1.27 в Pravila добавила hard-rule с фиксированным списком 8 нормативных файлов (Pravila/CLAUDE.md/Tooling/PSR_v1/MEMORY.md/Открытые_вопросы/docs/adr/*/db/schema.sql) — pre-flight `git fetch && git log HEAD..origin/main --oneline` обязателен перед правкой любого. Связанные артефакты (на этой же ветке `feat/parallel-sessions-coordination`): `docs/sessions/CURRENT.md` заявочный лог + `tools/subagent-prompt-prefix.mjs` PreToolUse Task auto-inject хук + `.claude/skills/subagent-driven-development/` wrapper-скил с git-safety-checklist (Tasks 2/4/7 плана). PSR_v1 и Tooling **не правятся** — §15 про координацию сессий, не плагинов. Через `/claude-md-management:claude-md-improver`. **v2.13 наследие:** discovery-interview integration: формализован #55 discovery-interview (self-authored project-скил `.claude/skills/discovery-interview/` — структурированное интервью-discovery до проектирования, два режима: FEATURE интервью заказчика перед фичей + SYSTEM ориентация по мета-слою) как новая двенадцатая off-phase подкатегория «discovery-tooling»; §3 title 54→55, §1 row 2b 54→55, §3.3 +строка #55, §3.3 footer 54→55, §0 cross-refs Pravila v1.26 / PSR_v1 v3.12 / Tooling v2.13, §6 +абзац discovery-interview, §9 +запись. ADR-009. Триггер-eval 20/20. Конфликт-аудит DI1–DI6 — разрез по слою-источнику с C10-скилом process-analysis #53 (тот вскрывает бизнес-процесс из app-кода; discovery-interview интервьюирует человека). План `docs/superpowers/plans/2026-05-18-discovery-interview-integration.md`. Через прямой Edit — worktree-constraint эксцепшн §5 п.10 (claude-md-management не наводится на worktree-копию CLAUDE.md; прецедент A11/C10). **v2.12 наследие:** C10 business-process integration: формализованы #51 operations (Claude Code marketplace-плагин `operations@knowledge-work-plugins` v1.2.0, Anthropic Verified — 9 скилов, 0 lifecycle-хуков) + #52 process-modeling + #53 process-analysis (self-authored project-скилы `.claude/skills/`) + #54 n8n-mcp (workflow-движок — DEFERRED, у портала нет n8n) — новая одиннадцатая off-phase подкатегория «business-process»; §3 title 50→54, §1 row 2b 50→54, §3.3 +4 строки #51/#52/#53/#54, §3.3 footer 50→54, §0 cross-refs Pravila v1.25 / PSR_v1 v3.11 / Tooling v2.12, §6 +абзац C10, §9 +запись. ADR-008. Конфликт-аудит OPS1/OPS5/N8N1/LINT1/BPMN1/PA1. План `docs/superpowers/plans/2026-05-17-c10-business-process-tooling-integration.md`. Через прямой Edit — worktree-constraint эксцепшн §5 п.10 (claude-md-management не наводится на worktree-копию CLAUDE.md; прецедент A11/ruflo). **v2.11 наследие:** ADR-006 Decision-4 icon-path boundary mirror: §3.3 строка #45 +граница «Lucide-иконки → канонический путь `lucide-vue-next` + Vuetify IconSet; raw-SVG Universal Icons MCP — только для не-Lucide коллекций». Источник — ADR-006 (поправка 17.05.2026, Decision item 4 — закрывает ранее нерегламентированную границу #45 ↔ `lucide-vue-next`, выявленную конфликт-аудитом карты). §0 cross-ref Tooling v2.10→**v2.11** (Pravila v1.24 / PSR_v1 v3.10 — без изменений: assess показал, что Pravila §13.2 делегирует к ADR-006, PSR_v1 R10.1 — role-registry). Счётчики инструментов без изменений (50 позиций). §9 +запись. Через `/claude-md-management:claude-md-improver` в worktree от origin/main (прямой Edit — worktree-constraint эксцепшн §5 п.10, прецедент A11 v2.10). **v2.10 наследие:** A11 ml-ai-tooling integration: формализованы #48 promptfoo (npm devDependency `promptfoo`, CLI-eval LLM-промптов, MIT) + #49 Data Scientist skill (вендоренный сторонний скил `.claude/skills/data-scientist/`, классический ML-воркфлоу) + #50 Jupyter MCP (исполняемые ноутбуки — DEFERRED, требует Python ML-окружения) — новая десятая off-phase подкатегория «ml-ai-tooling»; §3 title 47→50, §1 row 2b 47→50, §3.3 +3 строки #48/#49/#50, §3.3 footer 47→50, §0 cross-refs Pravila v1.24 / PSR_v1 v3.10 / Tooling v2.10, §6 +абзац A11, §9 +запись. ADR-007. Конфликт-аудит ML1 (promptfoo платные вызовы → вручную/CI) / ML3 (Data Scientist skill вендорен) / ML7 (bus-factor → вендоринг). План `docs/superpowers/plans/2026-05-17-a11-ml-ai-tooling-integration.md`. Через прямой Edit — worktree-constraint эксцепшн §5 п.10 (claude-md-management не наводится на worktree-копию CLAUDE.md; прецедент ruflo big-bang v2.0). **v2.9 наследие:** A3 integration-tooling integration: формализован #47 openapi-mcp-server (+ api-docs agent — узел карты A3 без Tooling-номера), новая девятая off-phase подкатегория «integration-tooling»; §3 title 46→47, §1 row 2b 46→47, §3.3 +строка #47, §3.3 footer 46→47, §0 cross-refs Pravila v1.23 / PSR_v1 v3.9 / Tooling v2.9, §6 +абзац A3, §9 +запись. Карта A3 0→7 узлов / 116→118. План `docs/superpowers/plans/2026-05-17-a3-integration-tooling-integration.md`. Через `/claude-md-management:claude-md-improver`. **v2.8 наследие:** A4 design-tooling integration: формализованы #44 Figma MCP (DEFERRED — у проекта нет Figma-аккаунта) + #45 Universal Icons MCP + #46 Design plugin — новая восьмая off-phase подкатегория «design-tooling»; §3 title 43→46, §1 row 2b 43→46, §3.3 +3 строки #44/#45/#46, §3.3 footer 43→46, §0 cross-refs Pravila v1.22 / PSR_v1 v3.8 / Tooling v2.8, §6 +абзац A4, §9 +запись. План `docs/superpowers/plans/2026-05-17-a4-design-tooling-integration.md`. Через `/claude-md-management:claude-md-improver`. **v2.7 наследие:** deptrac architecture-fitness integration: формализован #43 deptrac (Composer dev-dependency `deptrac/deptrac` v4.6.1, BSD-3) — 4-й инструмент off-phase подкатегории architecture-tooling; архитектурный fitness-гейт направления зависимостей / границ слоёв, врезан как lefthook pre-commit job 10; §3 title 42→43, §1 row 2b 42→43, §3.3 +строка #43, §3.3 footer 42→43, §0 cross-refs Pravila v1.21 / PSR_v1 v3.7 / Tooling v2.7, §6 +абзац deptrac, §9 +запись. План `docs/superpowers/plans/2026-05-17-deptrac-architecture-fitness-integration.md`. Через `/claude-md-management:claude-md-improver`. **v2.6 наследие:** C9 project-management integration: формализованы #41 CCPM (вендоренный скил) + #42 product-management (Anthropic marketplace-плагин) — новая седьмая off-phase подкатегория «project-management»; §3 title 40→42, §1 row 2b 40→42, §3.3 +2 строки #41/#42, §3.3 footer 40→42 + семь подкатегорий, §0 cross-refs Pravila v1.20 / PSR_v1 v3.6 / Tooling v2.6, §6 +абзац C9, §9 +запись. План `docs/superpowers/plans/2026-05-17-c9-project-management-tooling-integration.md`. Через `/claude-md-management:claude-md-improver`. **v2.5 наследие:** фактическая правка #40 Security Guidance: это **блокирующий** PreToolUse-хук (`sys.exit(2)`), не warn-only — при первом за сессию срабатывании уязвимого паттерна в файле блокирует правку (одноразовый speed-bump per «файл+правило», retry проходит); §3.3 строка #40 переписана (+SG2 Windows-починка python3-резолва), §6 абзац D3 уточнён, §0 cross-refs Pravila v1.19 / PSR_v1 v3.5 / Tooling v2.5, §9 +запись. Счётчики инструментов без изменений (40 позиций). План `docs/superpowers/plans/2026-05-17-d3-audit-risk-tooling-integration.md`. Через `/claude-md-management:claude-md-improver`. **v2.4 наследие:** D3 audit-security: формализованы #39 Trail of Bits Skills (субсет 8 audit-плагинов, marketplace `trailofbits`, CC-BY-SA-4.0) + #40 Security Guidance (Anthropic PreToolUse-хук) — новая шестая off-phase подкатегория «audit-security»; §3 title 35→40 (исправляет A6-пропуск: title оставался «35»), §1 row 2b 38→40, §3.3 +2 строки, §3.3 footer 38→40, §0 cross-refs Pravila v1.18 / PSR_v1 v3.4 / Tooling v2.4, §6 +абзац интеграции. План `docs/superpowers/plans/2026-05-17-d3-audit-risk-tooling-integration.md`. Через `/claude-md-management:claude-md-improver`. **v2.3 наследие:** A6 architecture-tooling: формализованы 3 инструмента раздела A6 карты «Архитектура систем» — #36 adr-kit, #37 mermaid-skill, #38 architecture-patterns; §3 title 35→38, §3.3 +3 строки, §1 row 2b 35→38, §3.3 footer 35→38 (пятая off-phase подкатегория architecture-tooling), §0 cross-refs Pravila v1.17 / PSR_v1 v3.3 / Tooling v2.3, §6 +абзац интеграции. План `docs/superpowers/plans/2026-05-17-a6-architecture-tooling-integration.md`. Через `/claude-md-management:claude-md-improver`. **v2.2 наследие:** реколлаж ruflo: §1 убран уровень −1 (entry-point framing → advisory-подсистема); §3/§3.5 advisory-подсистема; §0 cross-refs Pravila v1.16 / PSR_v1 v3.2 / Tooling v2.2. **v2.1 наследие:** §14 queen-trigger: §1 priority chain уровень −1 +триггер queen/королева → Pravila §14; §3.5 +абзац «Queen trigger»; §0 cross-ref Pravila v1.15. **v2.0 наследие:** Ruflo big-bang integration: 8-level → 9-level priority chain, ruflo Queen-led routing на уровне −1 (entry-point); §1 +уровень −1 ruflo; §3 title «35 инструментов» → «35 + ruflo orchestration layer»; §3.5 added (off-phase orchestration «ruflo»; «Заметки к settings.json» renumber §3.5 → §3.6); §5 п.10 → sub-policy note (claude-md-management остаётся preferred channel через ruflo routing); §6 +2026-05-15 ruflo phase paragraph. Major bump reflects architectural inversion (paper-level: ruflo daemon/swarm not yet running, technical compensators retained: gitleaks/RLS/dev DB only). Через прямой Edit (plan §1.4 user-authorized exception к §5 п.10). **v1.93 наследие:** Audit #3 deferred fixes sprint closure: sync schema header drift «62 → 63 базовые таблицы (61 regular + 2 partitioned parents: deals + supplier_lead_costs)» в §0 row «Схема БД», §2 БД row, §8 self-review row. Цифра 62 была commit-baseline артефактом; фактический count base-tables (regular + partitioned parents) — 63 (audit-verified в Audit #3 Phase 3). Sprint commits: `8ba9c55` (plan) + `0c36b7a` (Pa11y migration) + `e746b3c` (dead code cleanup, incl. schema.sql:4 header) + `c5c0e76` (coverage debt F-COV-01/02/03 → ≥95%) + `c524227` (P3 tooling). Pushed `f9d2452..c524227 main -> main`. Через `/claude-md-management:claude-md-improver`. **v1.92 наследие:** Task 9 sync нормативки после merge PR #3 `cc5f63b`: §3.3 +#34 Sentry MCP + #35 Redis MCP (off-phase debug-runtime category, отдельная от UI-пула UPM/21st и от infrastructure claude-md-management); §3 title «33» → «35»; §3.3 footer count 33 → 35 (29 phase-active + 5 off-phase + 1 historic); §0 cross-refs Tooling v1.16 → v1.17, PSR_v1 v2.0 → v2.1, Pravila v1.12 → v1.13. **v1.91 наследие:** Session-end documentation hygiene после CTO-19 ✅ closure via Lucide migration. Содержание: (1) §0 cross-ref row Pravila v1.11 → **v1.12** (sync: §4.6 +visual smoke methodology для UI-refactor; §4.7 +п.4 plans/specs relative paths `../../../`); (2) §9 +v1.91 entry. Связано: реестр v1.82→v1.83 (CTO-19 closure в commit `0832997`); audit `docs/superpowers/audits/2026-05-12-portal-full-audit-findings.md` Q.INFO.001 +audit methodology gap note (Phase 4 SAST checks must begin с `ls .github/workflows/`); memory quirks 74-76 (Lucide+Histoire peerDep / Vuetify-internal mdi defaults gap / plans-relative-paths). Регрессия зелёная (verified в commit `0832997`): Pest --parallel 742/739/0/3 ✅, Vitest 88 files / 683 passed + 3 skipped, Vite build 3.52s, axe-core /admin/billing 0 iconography violations, lychee 252 OK / 0 errors, gitleaks 0 (372+ commits). Workflow learning: `superpowers:brainstorming` → `:writing-plans` → `:subagent-driven-development` efficient для mechanical UI-refactor (icon migration). Через `/claude-md-management:revise-claude-md`. **v1.90 наследие:** Merge R15 motion-runtime removal cleanup из `origin/main` в `plan5-frontend-projects` (commits `0fd93fd` planning + `615db99` нормативная правка). Plan5 ветка форкнулась 12.05 утром от `48f27b4` ДО появления `615db99` на main; после 113 атомарных коммитов на plan5 (audit fixes, Plan 5 frontend Tasks 7-11, Quiet Luxury portal redesign, Q.DEFER.002/003/004 closures, audit-cleanup tail) — merge синхронизирует R15 changes. **§5 п.12** → маркер «Резерв (снят 12.05.2026, см. CHANGELOG)» (нумерация п.1–11 сохранена, чтобы cross-refs в memory не сломать). **§2 строка «Animation default stack»** переписана с regulatory denylist на guidance recommendation (motion-v/gsap/anime.js/lottie-web/popmotion/@motionone/dom — ✅ разрешены без обоснования; framer-motion остаётся technical block — React-only peerDep, runtime crash в Vue, не regulatory rule). **§0 cross-refs** обновлены — Pravila v1.10 → **v1.11**, PSR_v1 v1.7 → **v2.0**, Tooling v1.15 → **v1.16**. **§6 фаза** + **§8 self-review** строки (Plan 4/5 + Quiet Luxury + Q.DEFER closures context + schema baseline v8.19 + dev-actual factual) — preserved из plan5 v1.88/v1.89 base. Plan5 v1.89 factual fix §6 (615db99 = R15 removal, ≠ Plan 4) подтверждён и сохранён. NB: §9 содержит **две v1.88 entries** — plan5 audit schema-sync + origin/main R15-removal — это collision версионной нумерации parallel-branch bump'ов; обе валидны исторически, явно labelled в §9. Files fast-forwarded без conflict: `Plugin_stack_rules_v1.md` (R15 удалён, 162 lines diff), `Pravila_raboty_Claude_v1_1.md` (§11.5/§13.2 счётчик 16→15 + cross-refs), `Tooling_v8_3.md` (§9.2 reformulated). Через ручное conflict resolution на 2 файлах (CLAUDE.md + CHANGELOG_claude_md.md) + post-merge `/claude-md-management:revise-claude-md` polish (per §5 п.10). **v1.89 наследие:** factual fix §6 + шапка v1.88 changelog (615db99 ≠ Plan 4). **v1.88 наследие (plan5 branch):** audit-driven sync §0/§2/§6/§8 после полного аудита портала. Schema-метрики §0/§2/§8 разделены на «commit baseline v8.19» (62/12/117/39/5/13/5) + «dev-actual factual» (75/102/289/39/5/19/0). **v1.88 наследие (origin/main):** снятие R15 motion-runtime restrictions per user decision 12.05.2026 («сними все запреты на использование framer motion»); conscious rollback v1.83 audited construction. **v1.87 наследие:** sync schema-метрик после Plan 4 (Billing+CSV+Admin) на ветке `plan4-billing`. Schema **v8.11 → v8.19**. Предыдущая v1.86 — закрытие 13 находок третьего аудита (детали в [docs/CHANGELOG_claude_md.md](docs/CHANGELOG_claude_md.md)). +**Версия:** 2.46 от 14.06.2026 — **research-tooling (Perplexity Pack) — нормативный синк #87-89 + ADR-019 + реестр/роутер (Plan 2 + Plan 3)**. Off-phase слой **research-tooling** (20-я подкатегория): #87 perplexity (`@perplexity-ai/mcp-server`, ранжированный ответ-с-источниками sonar) + #88 exa (`exa-mcp-server`, семантическое обнаружение) + #89 firecrawl (`firecrawl-mcp`, глубокое чтение/обход) — внешние MCP веб-разведки, READ-ONLY (gate read_only `tools/mcp-tool-classifier.mjs`, commit `bfc1f575`), платные API ключи в env (owner waiver), IS9-вет `docs/research/research-vet.md` все ПРИНЯТ. **Plan 3** (роутер/реестр): `nodes.yaml` +3 узла + связка **L17** (research chain) + 3 contract-карточки (Машина 3-E) + `registry-load.test` 86→89/78→81 + `registry-render` (Tooling-summary + routing-table) + `routing-off-phase` L17/v1.7; tools-регрессия **3931 GREEN**. **Plan 2** (нормативка): Tooling §4.60-62 + §0 счётчик 84→87 / 104→107 / off-phase +54→+57; PSR R10.1 Блок 3 + R15.6; Pravila §13.2; CLAUDE.md §3.3/§0/§6/§9 — все +headers. ADR-019 (RT1–RT9). **§0 cross-refs МЕНЯЮТСЯ** — Pravila v1.43→**v1.44** / PSR_v1 v3.23→**v3.24** / Tooling Прил.Н v2.24→**v2.25** (новая off-phase подкатегория). Под стеной «роутер-наставник»: Plan 3 — прямые правки; Plan 2 ЗАКОН-файлы — owner **FLOOR-ESCAPE per write** (нормативный §6-гейт требует владельца). automation-graph viz отложена батчем (карта лагает с #84-86). Через прямой Edit под owner-escape. **v2.45 наследие:** **lead region resolution (определение региона лида по телефону + каскадная маршрутизация) — фича реализована TDD, запушена, PR в main** (ветка `worktree-feat+lead-region-resolution`, 14 атомарных коммитов `ec219718..11079791`, origin `CoralMinister/lidpotok`). DaData-клиент + реестр Россвязи (`phone-ranges:import`) + `LeadRegionResolver` (каскад по qc-кодам DaData → Россвязь → tag-fallback) + `LeadRouter` каскад (exact→all-RF→fallback) + взвешенный жребий по остатку дневного лимита (вариант В, вес ≥ 1 — мелкие клиенты не отрезаются) + интеграция в `RouteSupplierLeadJob` (резолв ДО tx / persist 4 колонки / fail-safe аудит-лог / подмена региона шаг 3 / CSV-merge по рангу источника) + `phone-region:smoke`. Миграция `2026_05_31_100000` (3 таблицы + колонки на supplier_leads/deals, партиции m05/m06 + регистрация в `MonthlyPartitionManager`); `db/schema.sql` синхронизирован заголовком (v8.40), DDL в дельта-миграции. **Решения:** `LeadRegionResolver` через `app()` внутри `handle()` (не 7-й параметр — сохраняет сигнатуру + 3 существующих теста джобы); `deals.region_source` не добавляли (источник на supplier_leads + в журнале); запуск сразу на 100% без долевого гейта (решение заказчика). Тесты **101 pest GREEN / 509 assertions**; tools-vitest **1989 GREEN**. Code-review subagent (вердикт «с правками»): починены `atomicSwap()`→транзакция (spec §6.2) + убран stray comment; minor/deferred задокументированы (метрики §8.1 / `phone-ranges:rollback` / pg_anonymizer-маски / калибровка DaData call-cost). Прод-выкатка отложена (нужны `DADATA_API_KEY`/`DADATA_SECRET` в YC Lockbox + команда «запускаем»; runbook `docs/superpowers/runbooks/2026-05-31-lead-region-resolution-rollout.md`). Пре-существующий долг (НЕ из фичи): 3 чужих console-теста (BillingMigrateLeadsToRub / IncidentsWatchFailures / SnapshotBackfillCommand) взаимно загрязняются в одном процессе, в CI `pest --parallel` проходят. **§0 cross-refs НЕ меняются** — app-фича (сервисы/джоба/миграция), не tooling-канон #1-#86 / не ADR / не off-phase. §6 +абзац / §9 +entry. Через `claude-md-management:revise-claude-md`. **v2.44 наследие:** **router-gate v4 Layer 4 LLM-judge live wiring (item 2b) реализован + АКТИВИРОВАН владельцем + readonly-калибровка** (commits `dfae9f76` + `c9b9efd6` на main, push `a8996896..c9b9efd6`). Живой `main()` в обеих обёртках `enforce-llm-judge-{per-tool,response-scan}.mjs` (TDD; spend гейтится `resolveJudgeConfig` = флаг+ключ, без них $0; регистрировать **обёртки**, не движки — у движков `main()` тратит при одном ключе мимо флага). Владелец активировал Layer 4: env `ROUTER_LLM_JUDGE_ENABLED=1` + ключ `ROUTER_LLM_KEY` (user env) + регистрация обоих хуков в `.claude/settings.json` (per-tool→PreToolUse, response-scan→Stop) + перезапуск → судья заработал в hard-block (подтверждено: реальный вызов заблокировал команду). **Операционная находка:** живой судья сразу блокировал даже readonly git (`status`/`log`) — `MUTATING_TOOLS` включает Bash целиком + правило doubt→block, поэтому судился даже безобидный просмотр (over-block). **Калибровка** (commit `c9b9efd6`, TDD): новый `isReadonlyBashEvent` в `tools/enforce-llm-judge-per-tool.mjs` исключает readonly Bash (через `classifyBashCommand` reason `readonly|reading`) из per-tool судьи **до** LLM-вызова — scope-fix, дисциплина doubt→block на реальных мутациях (Edit/Write/commit/push/Skill/Task) **не понижена**. Регрессия vitest tools-only **1927 GREEN** (`npm run test:tools` сломан keytar'ом в `app/node_modules` → verify через `npx vitest run --root app --config vitest.config.tools.mjs`). **§0 cross-refs НЕ меняются** (инфраструктура `tools/enforce-*.mjs`, не tooling-канон #1-#86 / не ADR / не off-phase). §6 +абзац / §9 +entry. Через `claude-md-management:revise-claude-md`. **v2.43 наследие:** **router-gate v4 safe-baseline live wiring (item 1b) + enforce-runtime-write-deny (C3) + LLM-judge hook-обёртки + Read-deny over-block fix** (commits `ca52d354`+`6d512f5c..84dcf4aa`+`f740f612`+`80e514f5`+`3c5266c0` на main). **Item 1b:** живой `main()` в `tools/enforce-safe-baseline-metering.mjs` (учёт расхода safe-baseline-инструментов per-task + hard-block mutating-инструмента за порогом без skill-match; escape = любой Skill/EnterPlanMode, который этим слоем не блокируется) + чистые `extractKeywords`/`detectSkillMatch`/`runLiveDecision` (stickiness-контракт V2-1); новый `tools/enforce-runtime-write-deny.mjs` (C3 — защита `~/.claude/runtime` от Write/Edit, `.`-segment-proof через `pathNormalize`); judge-обёртки `enforce-llm-judge-{per-tool,response-scan}.mjs` (no-op main, $0 до активации 2b). Spec v4 через `superpowers:brainstorming` (3 adversarial-ревью + ghost-pass) закрыл C1/C2/C3/H1/V2-1/V2-2; G3 override вырезан как защита-призрак. Режим **hard-block** (решение владельца). Регистрация обоих хуков в `.claude/settings.json` — шаг владельца (Claude'у settings.json заблокирован); до регистрации хуки инертны. **Read-deny over-block fix** (commit `3c5266c0`, эта сессия): `enforce-read-path-deny` (Smoke 5) добавил CLAUDE.md/memory/нормативку в Read-protected paths → harness Edit требует Read → правка CLAUDE.md и MEMORY.md стала невозможна (claude-md-management workflow сломан). Введён узкий `READ_DENY_PATTERNS` в `tools/shell-content-rules.mjs` (только реальные exfil-цели: transcript `.jsonl` / `~/.claude/runtime` / settings / `.env`) — `enforce-read-path-deny` переключён на него; CLAUDE.md/Pravila/PSR/Tooling/memory снова Read-allowed, а полный `DEFAULT_PROTECTED_PATTERNS` по-прежнему держит Bash/PowerShell-read (`cat`/`Get-Content`) и Write-защиту этих файлов. TDD (RED→GREEN в одном ходе), регрессия vitest tools-only **1903 GREEN** (через рабочий корневой `npx vitest run --root app --config vitest.config.tools.mjs` — `npm run test:tools` ломается параллельной keytar-установкой в `app/node_modules`). **§0 cross-refs НЕ меняются** (инфраструктура `tools/enforce-*.mjs`, не tooling-канон #1-#86 / не ADR / не off-phase). §6 +абзац / §9 +entry. Через `claude-md-management:revise-claude-md`. **v2.42 наследие:** **router-gate v4.0+v4.1+v4.2 spec triple + master coordination plan + handoff + 5 worktrees + rationalization-audit fix deployed** (commits `0e768f9a` v4 specs + `c4c2afd1` master plan + `4e15fa70` handoff + `480649db` hook fix + `292a16bd` cspell на main `534e93d5..4e15fa70`). **v4.0 поведенческий разворот** 2249 строк (removes 16 защит-призраков v3.9, adds 5 Directions: safe-baseline metering / skill scope verifier / decomposition detector / TodoWrite verifier / brain-retro Table 16; target ~15-25% bypass). **v4.1 max-closure amendment** 1051 строка — Layer 1-4: 8 GAPs + behavioral hard-blocks + universal vocab removal + 3-judge consensus Sonnet+Haiku+Opus + per-tool LLM-judge + response scan; target ~2-5%; ongoing cost ~$300-1500/month. **v4.2 VM-sandbox amendment** 411 строк — Layer 5 phased для solo dev: Phase 1 VirtualBox ($0, 10-12h), Phase 2 биометрия + Phase 3 HSM через single YubiKey ($50-150 разово); two-person rule removed; target ~0.5-0.8%. **Master coordination plan** 666 строк (9 streams parallel session strategy, disjoint file scope → 0 conflicts by construction). **Handoff instructions** 450 строк с 5 ready-to-copy промтами для streams A-E + Checkpoint 1 merge + Stream G/H + smokes + cleanup (plain-Russian для non-programmer). **5 worktrees готовы** `C:\моя\проекты\портал crm\v4-stream-{A,B,C,D,E}` от `480649db`. **5 параллельных Claude sessions запущены** пользователем ~18:48 МСК через VS Code окна — каждая читает спеки, генерирует sub-plan через `superpowers:writing-plans`, реализует через `superpowers:subagent-driven-development`. Wall-clock 16-23h (vs 49-65h sequential). Aggregate bypass target after full deployment ~0.5-0.8% (vs v3.9 baseline ~25%); **architectural floor ~0.5% irreducible per 7 fundamental limits** (asymptote analysis установлен в сессии: goal-misalignment / recursive trust / info-theoretic leak / behavioral residual / external dependencies / user approval ambiguity / gate paradox). **Rationalization-audit hook fixed в этой сессии** (commit `480649db` — `stripQuotedContext()` функция strip'ает backticks/guillemets/fenced blocks/double quotes перед substring match; resolved 48 false-positive flags за сессию при описании самой защиты — controller часто цитирует pattern-слова в спеках). **Operational quirks обнаружены:** `LEFTHOOK=0` env-var отключает hooks на одну команду — необходим для rebase когда post-commit hooks регенерируют observer-файлы (STATUS.md / .pii-counters.json / episodes-*.jsonl) между picks и ломают long sequence; `enforce-memory-coverage` hook принимает строго `direct:memory-sync` per-turn, chain отклоняется как stale. Methodology session: `superpowers:brainstorming` skill для asymptote analysis 4 variant rounds (R7/R8/R9 layers + irreducible limits) → `superpowers:writing-plans` для master plan + handoff → `superpowers:subagent-driven-development` следующая фаза per stream. Memory entries (`project_router_gate_v4` + 3 feedback) — follow-up в отдельной session с `direct:memory-sync` coverage per memory-coverage hook constraint. **§0 cross-refs не меняются** (v4 — implementation, не tooling-канон #1-#86, не ADR, не off-phase подкатегория). §6 +абзац / §9 +entry. Через прямой Edit (worktree-эксцепшн §5 п.10 — плагин claude-md-management через MCP marketplace недоступен после disconnect; прецедент v2.36/v2.28/v2.16). **v2.41 наследие:** v3.9 Round 7 audit closure + concentrated rewrite (commits `8910ae6c` + `a6bde212` на main `ef19b9f2..a6bde212`): v3.9 закрыл 13 классов R7 (2 FATAL F5 parent-sentinel Read-leak через Glob+Read / F6 subagent tool_result.content exfil; 4 CRITICAL C12 system DNS/SSH/registry paths `/etc/hosts`+`~/.ssh/**`+`HKCU:\Software\Microsoft\**` / C13 `\|\| true` exit-code spoof — §5.1 hard-blacklist переформулирован «ANY part mutating» per-chain semantics + PostToolUse `git rev-parse HEAD` change verify / C14 subagent state Read-channel exfil / C15 §5.2 multi-language gap PHP/Ruby/Go/Java test runners; 5 SERIOUS S22 Skill exemption second-layer `tools/enforce-normative-content-rules.mjs` для memory/CLAUDE.md/Pravila writes + LLM-judge multi-judge consensus strict «один YES → block» / S23 Workflow approval pattern `scriptPath+sha256(args)` / S24 path equivalence NFC + Windows 8.3 long-name expansion + hardlink inode check через `protectedInodes` Set / S25 MCP-tool classification map (read_only/hard_blacklist/conditional/default block) / S26 stop-keywords +25 Russian morphology variants + LLM-judge ambiguous fallback; 2 EDGE E31 redacted block-reason mode `gate-config.json::reason_mode` / E32 LLM-judge cache scope per-session-id, TTL 24h→1h). **3 фундаментальные плоскости** R6/v3.8 не классифицировал: (1) safe baseline tools (Read/Glob/TodoWrite/AskUser) как exfil-каналы — все 9 раундов рассматривали их «always safe»; (2) system-level paths вне Claude session scope — `/etc/hosts`+`~/.ssh/*`+registry hives под Edit tool; (3) tool-composition / chain semantics where «mutating» per-token vs per-chain — `|| true` обходил §5.1 hard-blacklist «двух mutating». Generalisable formula R7: для каждого следующего audit 3 проверочных вопроса до enumeration (какие safe tools/paths/chains дают visibility/leverage; какие границы scope подразумеваются но не enforce'ятся; где per-token vs per-chain formulation gap). **Implementation budget:** 45-60h (v3.8) → **53-72h** (v3.9) +8-12h в 7 этапов через subagent-driven-development. **Закрыто 118 holes total** через 10 раундов adversarial audit. **Concentrated rewrite** (commit `a6bde212`, заказчик «убери всё лишнее оставь только то что необходимо для создания плана, нельзя потерять в качестве и объёме»): spec 2964→**2404 строк** (-560 / -19%) — убран audit-trail/version-history overhead (8 «Changes vX → vY» giant overview tables в шапке ~245 lines + §11 v3.8-v1 individual entries ~380 lines заменены 1 Timeline-paragraph + 1 condensed §11 entry «### v1 – v3.8 — 9 раундов 105 holes»). Технический content **100% сохранён** (verify-grep: fs.lstatSync 4 / parent_random_id 29 / SKILL_BASH_ALLOW 9 / schema_version 11 / Поведение[1-4] 17 / claude-md-management 19 / approve_git_operation 28 / restricted/ 21 / keytar 15 / shell-quote 17 / dep-checksums 11 / NFC|normalize 12 / mcp_tool_classification 7 / /etc/hosts 11 / git rev-parse HEAD 5). Все §1-§11 sections intact. v3.9 entry полный — план в следующей сессии будет ссылаться на R7 closure details. **§0 cross-refs не меняются** — spec-only, не tooling-канон / не ADR / не off-phase подкатегория. §6 +абзац / §9 +entry. Verify-sentinel: vitest tools-only **1179/1179 GREEN** per memory `feedback_vitest_sentinel_recipe.md`. Methodology: `superpowers:brainstorming` skill для R7 audit (full-closure через AskUserQuestion 4 options) + `EnterPlanMode`/`ExitPlanMode` для concentrated rewrite plan approval workflow. Pre-commit hooks GREEN (gitleaks 0 / markdownlint 0 / cspell 0 / adr-judge OK); pre-push (gitleaks-full-history 1848 commits 0 / lychee 120 OK 0 errors). Через `/claude-md-management:revise-claude-md`. **v2.40 наследие:** router-gate spec v3.5 → v3.8 sweep (commit `46c43169` на main `ef19b9f2..46c43169`): adversarial audit rounds 5+6 закрыли **45 новых attack-векторов в 22 классах** через 3 sequential bump'а (v3.5 → v3.6 → v3.7 → v3.8). **v3.6** — Round 5 closure 15 holes + 7 acceptable residual (§3.1 +9 paths transcript JSONL/user-level settings/lefthook/gitleaks/gitignore/classifier prompts/cost-tracker/scheduled-tasks lock; §3.2.0 +Smoke 4-7 на непредсказуемость tool_use_id/transcript hard-deny/AskUser structure/subagent gate startup; §4.7 recovery-pattern hard-block ~30 keywords в options/header/preview/annotations; §5.1 ↔ §4.5 git-pattern sync — git rebase/reset/checkout/etc перенесены из hard-blacklist в Conditional after approve_git_operation; §5.2 glob ↔ edited-files intersection check). **v3.7** — Maximum-closure pass (заказчик «закрывай в максимум чтоб и шанса не было»): все 7 acceptable residual + edge git stash закрыты defense-in-depth (LLM-judge Sonnet small-call на каждую AskUser-опцию для recovery-synonyms; `parent_random_id` 256-bit sentinel независимо от tool_use_id entropy; `~/.claude/runtime/restricted/*` Read-blocked subdir + dedicated `tools/journal-reader.mjs` CLI; `shell-quote` npm tokenizer для quoted Bash args; TF-IDF cosine + LLM-judge fallback для off-topic; smart batching multi-question AskUser для S6; git stash push/save/pop/apply в conditional class). **v3.8** — Round 6 closure (заказчик «забудь контекст, найди все дыры» → 30 attack-векторов в 18 классах incl. 4 FATAL): **F1** PowerShell tool gate был полностью вне scope §5.1 — controller через PowerShell tool обходил весь Bash whitelist (`Remove-Item ~/.claude/runtime/router-state-*.json`); v3.8 новый hook `tools/enforce-powershell-gate.mjs` (matcher `PowerShell`) + §5.1.2 content rules + shared `tools/shell-content-rules.mjs`. **F2** Workflow internal `agent()` enumeration — gate видел outer Workflow call один раз, внутри script.mjs запускалось 20 параллельных agents без gate-проверки; v3.8 scriptPath требует AskUser approval + content статически сканируется + каждый agent() inherit gate через env-vars + `resumeFromRunId` DISABLED + Smoke 8. **F3** `node_modules/*` не protected — controller мог patches `node_modules/shell-quote/index.js` подменить tokenizer; v3.8 §3.1 whole-dir hard-deny + §3.6.1 `tools/dep-checksums.json` SHA-256 верификация на startup ключевых deps (shell-quote/proper-lockfile/glob/natural/keytar). **F4** LLM-judge prompt injection через option content — Sonnet-судья читал controller-written content уязвимо; v3.8 delimiter tokens 24-char random unguessable + pre-filter regex strips `SYSTEM:`/``/JSON-fragments + multi-judge consensus Sonnet+Haiku independent, disagree → default-CLOSE. Дополнительно §3.1 расширен +30 entries: memory/CLAUDE.md/Pravila/PSR/Tooling (с Skill exemption для `claude-md-management` через legit writes) + CI/CD configs `.github/workflows/*` + lint/build configs (tsconfig/eslintrc/prettierrc/vitest/vite/webpack/nuxt/next) + plugin cache + shell init (`.bashrc`/`.profile`/`.zshrc`) + npm configs (`.npmrc`/`.yarnrc`/`.pnpmrc`) + node_modules + parent-sentinel-*.json + dep-checksums.json + expected-path.txt. §3.0.1 OS-keychain для LLM key (Windows Credential Manager / macOS Keychain / Linux libsecret через `keytar`); key не в `process.env` → не утечёт через npm test stdout. §3.2.1 automated bootstrap smoke (1/5/6/7 на каждый session start, cached 7 days); user-run остаётся для 3/4/8. §6.1 `docs/recovery-procedures.md` (spec-only, файл не создан реально — TODO followup) — шпаргалка PowerShell-команд для 3 уровней recovery. Implementation budget: 13.5-20h (v3.1) → 22.5-32h (v3.6) → 33-44h (v3.7) → **45-60h** (v3.8). **Закрыто 105 holes total** через 9 раундов adversarial audit. **Generalisable lesson v3.8:** «v3.7 maximum closure» был maximum **внутри границ воображения v3.6 R5-audit** — Round 6 показал что сами границы имели дыры. Каждый раунд audit должен начинать с **abstract classification** «какие классы атак вообще существуют в системе?» **до** enumeration конкретных дыр; иначе закрытие 99% surface'ов внутри одного класса не помогает если атакующий использует другой класс. 5 new attack surfaces discovered Round 6: parallel tools (PowerShell как эквивалент Bash), nested tool internals (Workflow `agent()`), npm-dependency-chain (`node_modules/*` patches), environment manipulation (shell init / PATH / `.npmrc`), cross-session context poisoning (memory/CLAUDE.md/Pravila). Spec: 1980 → 2554 строк (+1110 inserts / -44 deletes за v3.6-3.8 sweep). +13 терминов в cspell-words.txt (PowerShell aliases gci/sls/iwr/spps/rvpa + npm pkg names IDF/pnpmrc/toolu + tokenizer artifacts rnd/dxf/misattributes/сканится/социалка). Verify-sentinel: vitest tools-only 1179/1179 GREEN per memory `feedback_vitest_sentinel_recipe.md`. **§0 cross-refs не меняются** — spec-only, не tooling-канон / не ADR / не off-phase подкатегория. §6 +абзац / §9 +entry. Через прямой Edit (user-instruction priority к §5 п.10 — заказчик в prompt'е «обнови мозг», прецеденты v2.36/v2.28/v2.16). **v2.39 наследие:** router-gate Уровень 4 spec finalized (v3.2 → v3.5, 5 commits на main `832fadbc..80c81602` + cosmetic `6c6796d8`): 4 раунда adversarial audit от controller'а закрыли ВСЕ известные controller-writable signals архитектурно. **v3.2** (`832fadbc`) — первый audit на v3.1, closed 18 holes (4 fatal + 11 critical + 8 serious + 3 edge) через 7 секций A-G; +5-7h budget. **v3.3** (`903aa700`) — v4.1 audit на свою же v3.2: 12 новых holes, главное — N1 fatal честно признана как acceptable residual (BLOCKED-protocol regex был самообман — controller-written text fake-able trivially); +1.5-2h. **v3.4** (`15bf46a1`) — dedicated brainstorm на N1: **S5 TRUE closure** через out-of-band block-file `subagent-block-.json` (subagent gate-process пишет, path derived from harness-assigned tool_use_id, file в protected paths `~/.claude/runtime/*` §3.1); +2h. **v3.5** (`80c81602`) — dedicated brainstorm на S8: **S8 TRUE closure** через AskUserQuestion-gate (`enforce-branch-switch.mjs` больше не читает controller-written markers, controller обязан AskUser → §4.5 answer parser распознаёт git-pattern → пишет approve_git_operation в `askuser-decisions-.jsonl` → hook читает exact-match + one-shot consume + 5-min time window); +1.1h. **Acceptable residual list теперь ПУСТ** — все известные controller-writable signals (S5+S8) закрыты архитектурно через generalisable side-channel pattern: write-канал в protected file через отдельный gate-процесс при harness-driven событии. Implementation budget: 13.5-20h (v3.1) → **22.5-32h** (v3.5) в 6 этапов через subagent-driven-development. **Готов к writing-plans фазе в следующей сессии** — 3 mandatory user-run smoke-tests до Этапа 2.1 (env propagation H2 + PostToolUse semantics N10 + subagent block-file write Smoke 3 v3.4). Audit methodology: chain `audit-context-building` skill + ручной adversarial разбор по 13 attack-зонам. Brainstorm methodology: `superpowers:brainstorming` skill с clarifying-questions через AskUserQuestion. **§0 cross-refs не меняются** — Pravila/PSR_v1/Tooling Прил.Н не затронуты (нет нового tool/ADR/категории — это design-only spec в `docs/superpowers/specs/`, не tooling-канон). §6 +абзац / §9 +entry. ⚠️ Memory writes этой сессии заблокированы coverage-hook'ом (нужен `direct:memory-sync` per-turn) — оформлены drafts в handoff-сводке, сохранятся в новой сессии. Через `/claude-md-management:revise-claude-md`. **v2.38 наследие:** router-hooks Phase 4 follow-ups + Phase 5 closure (cost-tracker): commits `6e93ccc4` cosmetic (UTF-8 BOM L1 + EOF newline fix на `tools/enforce-semgrep-security.mjs` через node-fs one-liner, обходит TDD-gate по Bash matcher) + `c20a53c0` DRY refactor (`decide()` в `enforce-chain-recommendation.mjs` возвращает enriched struct `{block, message?, hasMutating, hasChainSkill, hasInlineOverride}`, `main()` сбрасывает дубли вычислений и читает result.*; +8 TDD-тестов на enriched return) + `836c433b` Phase 5 (новый `tools/cost-stop-hook.mjs` aggregates today's эпизодов в `~/.claude/runtime/cost-daily.json` USD breakdown — 5 компонент `classifier / self_assessment / reviewer_subagent / reviewer_direct_fallback / self_retrospect` + total + episode_count; closes brain-retro #9 Candidate 4 «cost-daily.json пуст»). Pure layer — `tools/cost-pricing.mjs` (frozen PRICING с Sonnet 4.6 / Opus 4.7 per-token rates) + `tools/cost-aggregator.mjs` (episodeUsd/aggregateDay) + `tools/cost-stop-hook.mjs` (runUpdate pure + main fail-quiet I/O). Registered Stop-hook в `.claude/settings.json` timeout=10s. Smoke на live эпизодах: today 24 episodes / $0.08 classifier_usd (Sonnet 4.6 LLM router calls). **Регрессия 1165/1165 vitest tools-only GREEN** (+30 за Phase 5 + 8 за DRY = +38 от 1135). **§0 cross-refs не меняются** — Phase 5 это инфраструктура tools/, не Tooling Прил.Н канон #1-#86, не ADR. §6 +абзац / §9 +entry. **Router-hooks epic закрыт полностью:** Phase 1 (`81f92ca3..4d7e9e33`) + Phase 2 (override-limit) + Phase 3 (PAMYATKA 4→8) + Phase 4 (Semgrep + chain-hook measurement Cut 11) + Phase 4 follow-ups + Phase 5 (cost-tracker). Все 10/10 кандидатов brain-retro #9 + self-retrospect #1 закрыты. Через прямой Edit (user-instruction priority к §5 п.10 — заказчик «делай все»). **v2.37 наследие:** router-hooks Phase 4 closure (Semgrep-security + chain-hook measurement): commits `5eb20665` Task A (новый PreToolUse Bash хук [tools/enforce-semgrep-security.mjs](tools/enforce-semgrep-security.mjs) блокирует `git commit` если staged-diff содержит auth/billing/CSV/webhook файлы И Semgrep в сессии не запускался; 3 escape hatch — запустить Semgrep / inline `semgrep-skip:` / global override; override-vocab +`semgrep-security` во всех 7 фразах; новый helper `sessionToolUses(transcript)`) + `a3f5f392` Task B (`logHookOutcome(rule, outcome, sessionId)` helper в [tools/enforce-hook-helpers.mjs](tools/enforce-hook-helpers.mjs) пишет JSONL в `~/.claude/runtime/hook-outcomes.jsonl`; [tools/enforce-chain-recommendation.mjs](tools/enforce-chain-recommendation.mjs) вызывает его per fire с outcome-classification из `classifyOutcome()` — 6 buckets `blocked` / `passed-with-skill` / `passed-inline-override` / `passed-global-override` / `passed-short-chain` / `passed-no-mutating`; новая Cut 11 `analyzeChainHookEffectiveness()` + `buildChainHookEffectiveness()` в [tools/brain-retro-analyzer.mjs](tools/brain-retro-analyzer.mjs); SKILL.md `.claude/skills/brain-retro/SKILL.md` mandatory tables 10→11) + `b93e5af4` review-fixes (export `CHAIN_OUTCOME_BUCKETS` для внешних consumers + dead `import fs` cleanup в helpers test). **Регрессия 1135/1135 vitest tools-only GREEN.** Push `8b818144..b93e5af4 main -> main` (rebased поверх Slepok Stage 3 PR #27 merge — orthogonal scope). **§0 cross-refs не меняются** — Pravila/PSR_v1/Tooling Прил.Н не затронуты (нет нового tool в реестре #1-#86, нет ADR, нет off-phase подкатегории; `tools/enforce-*.mjs` + `.claude/skills/brain-retro/` — инфраструктура контроллера, не tooling-канон). §6 +абзац / §9 +entry. Plan `docs/superpowers/plans/2026-05-28-router-hooks-phase4-semgrep-and-chain-measure.md`. Phase 5 (cost-tracker, brain-retro #9 Candidate 4) — отдельный план. Memory +3: `feedback_subagent_bom_eof_writes.md` / `feedback_reviewer_dead_import_falsepositive.md` / `feedback_rebase_observer_dirt.md`. Open follow-ups (non-blocking per final reviewer): cosmetic BOM L1 + missing EOF newline на `enforce-semgrep-security.mjs`; DRY `decide()`↔`main()` в chain-rec hook. Через `/claude-md-management:revise-claude-md`. **v2.36 наследие:** router-hooks fixes Phase 1+2+3 closure (infrastructure, 13 commits): closes 7/10 brain-retro #9 candidates за одну сессию. Phase 1 — analyzer archive-fallback removed (Mermaid noise source в Cut 8) + System Health block в STATUS.md (long-running процессы >1ч). Phase 2 — `tools/enforce-override-limit.mjs` hard-block 6-й override-фразы одного типа за день, bypass «лимит снят» one-shot. Phase 3 — PAMYATKA в `tools/router-classifier.mjs` 4→8 паттернов (feature→writing-plans / bugfix→debugging+Pest / prod→Sentry / mechanical→coder-agent). Push `81f92ca3..4d7e9e33 main -> main`. Регрессия 1088/1088 vitest GREEN. **§0 cross-refs не меняются** (нет нового tool/ADR/категории — infrastructure layer). §6 +абзац / §9 +entry. Memory `feedback_subagent_api_crashes.md` + `feedback_tdd_gate_subagent_handoff.md` + `project_state.md` entry. Через прямой Edit (user-instruction priority к §5 п.10 — заказчик в prompt'е «обнови мозг»). **v2.35 наследие:** prompt-caching split on reviewer-agent (perf, infrastructure): commit `a0bb11a6` `buildReviewPromptStructured()` в [tools/brain-retro-opus-reviewer.mjs](tools/brain-retro-opus-reviewer.mjs) возвращает `{system, user}`; `reviewViaDirectApi` через структурированную ветку `callAnthropicAPI` с `cache_control: ephemeral` (паттерн `buildClassifierPromptStructured` с фазы классификатора — infra reused). Эффект на Opus 4.7 ~ноль: Anthropic минимум кешируемого префикса 4096 токенов vs наш static-блок ~400 токенов; активируется при свиче на Sonnet 4.6 или росте static-блока. §6 +абзац / §9 +entry; **§0 cross-refs не меняются** (нет нового tool/ADR/категории — инфраструктура tools/, не реестр инструментов). Push `5e70ab78..a0bb11a6`. Memory `feedback_prompt_caching_callAnthropicAPI.md`. Через `/claude-md-management:revise-claude-md`. **v2.34 наследие:** retro #8 follow-up — 3 enforcement hook (classifier threshold 0.7→0.8 / chain-recommendation PreToolUse block / graph-first Stop block) + vocab gap fix (graph-first + chain-recommendation подавляются всеми 7 global override-фразами); §6 +абзац / §9 +entry; **§0 cross-refs не меняются** (нет нового tool/ADR/категории — infrastructure hooks в tools/, не реестр инструментов). Memory `feedback_enforcement_hooks_retro8.md`. Через `/claude-md-management:revise-claude-md`. **v2.33 наследие:** graphify operationalization: (1) junction `graphify-out/` → `.claude/worktrees/graphify-spike/graphify-out/` — граф читается из main worktree, не только из spike; (2) `.gitignore` +`graphify-out/` + `graphify-out-*/` — build-артефакты не попадают в diff; (3) §5 +п.14 — операционная директива «перед открытым codebase-вопросом сначала `/graphify query`, потом Read/Grep/Glob» с явными исключениями (известный путь / узкий regex / запись / устаревший граф). **v2.32 наследие:** knowledge-graph-tooling: #86 graphifyy формализован как 19-я off-phase подкатегория; §3.3 +строка #86; §0 cross-refs Pravila v1.42→**v1.43** / PSR_v1 v3.22→**v3.23** / Tooling Прил.Н v2.23→**v2.24**; §9 +запись. ADR-017 (KG1–KG5). Через прямой Edit — worktree-эксцепшн §5 п.10. **v2.31 наследие:** adr-judge redos fix + brain-retro 7→10 cuts: commit `1e1457eb` чинит catastrophic backtracking в `ENFORCEMENT_BLOCK_RE` ([tools/adr-judge.py](tools/adr-judge.py), nested `(?:.*?\n)*?` + DOTALL виснет >60s на ADR-011/ADR-016 с прозаическим `## Enforcement` без ```json fence; декомпозированный поиск heading→section-boundary→fence; все 13 ADR <1ms post-fix; **vendored из adr-kit v0.13.1** — перезапишется при `/adr-kit:upgrade`, нужно re-apply или upstream PR); commit `b1398883` расширяет brain-retro SKILL.md MANDATORY DIGITAL ANALYSIS 7→10 таблиц (cuts 8/9/10: Class × canon coverage / Router vs Opus A-B-C / Chain-ignore breakdown — все три wired в [tools/brain-retro-analyzer.mjs](tools/brain-retro-analyzer.mjs) `analyze()` output автоматически; +216 lines analyzer / +288 lines tests). Push `e184ffe2..1e1457eb`. Регрессия 989/989 tools-tests GREEN. Не нормативный version-bump-worthy event (нет новых tool/ADR/категории), §6 +абзац / §9 +entry. Memory `feedback_adr_judge_redos.md` + fix `feedback_vitest_sentinel_recipe.md` (был self-contradicting — `.test.mjs` суффикс в exclude триггерил сам же документированный фильтр `detectFullTestRun` "narrow vitest"). Через `/claude-md-management:revise-claude-md`. **v2.30 наследие:** docs-only short-circuit landed: §5 +п.13 (новый — не запрашивать override `ремонт инфраструктуры` для docs-only коммитов); §9 +v2.30 entry; commit `8266755c` (4 файла, +192/−2, [tools/enforce-hook-helpers.mjs](tools/enforce-hook-helpers.mjs) + [tools/enforce-verify-before-push.mjs](tools/enforce-verify-before-push.mjs)) — хук теперь молча пропускает коммит/push если все изменённые файлы кончаются на `.md`. TDD 13 новых тестов GREEN, tools-only regression 965/965. Override остаётся для смешанных/кодовых. Через `/claude-md-management:revise-claude-md`. **v2.29 наследие:** slepok routing protection design artifacts: спек v0.4 + план реализации защиты слепка поставщика в маршрутизации лидов записаны в `docs/superpowers/{specs,plans}/2026-05-26-slepok-routing-protection*.md`. 19 рисков R-01..R-19 покрыты, 5 этапов реализации ~7.5-10 дней, бизнес-инвариант slepok №NЛ (18:00 МСК) → №NП (21:00 МСК). **Прод НЕ затронут** — это design-only артефакты, реализация не начата. Аудит-источник сессия `135a4adf`. §6 +абзац; §9 +запись. Memory `project_slepok_protection.md`. Через `/claude-md-management:revise-claude-md`. **v2.28 наследие:** Project-local AI-agents delegation rule: §3.9 (новая подсекция) + Pravila §2.4 — контроллер обязан звать `normative-sync` (#84) после крупной задачи и `prod-deploy-validator` (#85) перед каждым выкатом на liderra.ru; +2 узла в `docs/registry/nodes.yaml` (subcategory `project-agent`) для missed-activation детектора (Pravila §16.4). Tooling канон счётчиков **НЕ изменился** (#1-#83 сохраняются — project-агенты не входят в Tooling-канон). §0 cross-ref Pravila v1.39→**v1.40**. Spec `docs/superpowers/specs/2026-05-24-controller-offload-agents-design.md`. Через прямой Edit — worktree-эксцепшн §5 п.10 (прецедент A11/C10/discovery/finance/A8/marketing). **v2.27 наследие:** C1 marketing-tooling integration: §3.3 +#74-#83 (10 узлов, 18-я off-phase подкатегория marketing-tooling); §0 cross-refs Pravila v1.38→**v1.39** / PSR_v1 v3.21→**v3.22** / Tooling Прил.Н v2.22→**v2.23**; §6 +абзац; §9 +запись. ADR-015. Прямой Edit — worktree-эксцепшн §5 п.10. **v2.26 наследие:** pg_audit #28 + pg_anonymizer #29 **установлены на боевом `liderra.ru` 22.05.2026** (расширения PostgreSQL фазы 3, ранее недоступные на dev native-Windows): §3.4 строки #28/#29 → ✅ прод; §6 +абзац; §0 cross-ref Tooling Прил.Н v2.21→**v2.22**; §9 +запись; setup-док `docs/security/pgaudit-anonymizer-setup.md`. pg_audit закрывает 152-ФЗ аудит-журнал БД (`pgaudit.log='ddl, role, write'`, `log_parameter=off`); pg_anonymizer (anon 3.0.13/Rust, собран из исходников) — маскированные выгрузки, загрузка по требованию. NB: установка PGDG-dev потянула минорный апгрейд PG 16.13→16.14 (данные целы, версия закреплена `apt-mark hold`). runbook `docs/deploy/test-server-runbook.md` (ветка feat/test-deploy) — sync отдельно. Прямой Edit — worktree-эксцепшн §5 п.10 (прецедент A8/A11/finance). **v2.25 наследие:** A8 infosec-tooling install-sync: ZAP #68 + Ward #70 **установлены портативно 21.05.2026** (без choco — Go 1.26.3 / Temurin JRE 17 zip с проверкой SHA256, бинари в `bin/*` gitignored) → статус PENDING INSTALL снят (§3.3 строки 68/70, §6); setup-доки `docs/security/zap-setup.md` + `docs/security/ward-setup.md`; §0 cross-refs Pravila v1.37→**v1.38** / PSR_v1 v3.20→**v3.21** / Tooling Прил.Н v2.20→**v2.21**; §9 +запись. Прямой Edit — worktree-эксцепшн §5 п.10 (прецедент A8/A11/finance). **v2.24 наследие:** A8 infosec-tooling integration: §3.3 +#68 OWASP ZAP (DAST, PENDING INSTALL) / #69 Nuclei (CLI, installed+verified) / #70 Ward (CLI, заменил abandoned Enlightn, PENDING INSTALL) / #71 pdn-152fz-audit / #72 threat-model / #73 security-go-live (self-authored скилы); §0 cross-refs Pravila v1.37 / PSR_v1 v3.20 / Tooling Прил.Н v2.20; §6 +абзац; §9 +запись; новая 17-я off-phase подкатегория infosec-tooling (раздел A8); ADR-014 (IS1–IS9); провенанс-вет IS9 (риск ToxicSkills); серверный слой защиты → open questions SEC-1..SEC-7 (Б-1). Перенумеровано v2.23→v2.24 при ребейзе на origin/main (v2.23 параллельно занят observer). **v2.23 наследие:** observer missed-activations: §0 cross-ref Pravila v1.35→**v1.36** (§16.4 условное missed-activation правило — профильная задача без активации релевантного узла → сигнал в STATUS.md C5 + /brain-retro; маппинг `tools/observer-classification-map.json` + `tools/.node-dormancy.json` двойной сигнал dormant/DEFERRED); §3.6 +абзац missed-activation; §9 +запись. План `docs/superpowers/plans/2026-05-21-observer-missed-activations.md`. **v2.22 наследие:** A1 backend-tooling integration: §3.3 +#64 Rector / #65 PHP Insights / #66 laravel-backend-patterns / #67 NightOwl (DEFERRED); §0 cross-refs Pravila v1.35 / PSR_v1 v3.19 / Tooling Прил.Н v2.19; §6 +абзац; §9 +запись; новая 16-я off-phase подкатегория backend-tooling (раздел A1); ADR-013. **v2.21 наследие:** finance-tooling integration (C6+C7): §3.3 +#61 finance plugin (homed C7) / #62 billing-audit (C6) / #63 ru-tax-accounting (C7); §0 cross-refs Pravila v1.34 / PSR_v1 v3.18 / Tooling Прил.Н v2.18; §6 +абзац; §9 +запись; новая 15-я off-phase подкатегория finance-tooling; ADR-012. **v2.20 наследие:** observer factor-analysis extension + phase 1.1 (ADR-011 amend): schema v2 (`decision_provenance` 3 kinds incl. `user_chose_from_options`) + двусторонний routing-gate/C5 + brain-retro analyzer; полные записи — §9 v2.19/v2.20. **v2.18 наследие:** Brain governance Phase A/B/C complete (ADR-011): §0 cross-refs Pravila v1.30→**v1.31** / PSR_v1 v3.15→**v3.16** / Tooling v2.16→**v2.17**; §3.X +cross-ref на `docs/router-procedure.md` v1.0 (single SoT для router procedure); §9 +brain governance entry. Реализованы 4 phases: Phase A normative foundation (5 tasks/15 commits — ADR-011 anchor, router-procedure.md v1.0, Tooling Прил. Н 9-attribute template на 58 узлов, Pravila §16, PSR_v1 R16); Phase B observer infrastructure (6 tasks/6 commits — scaffolding + PII filter + Stop-hook + HK1 pre-check + settings.json registration + /brain-retro skill); Phase C 4 controllers (5 tasks/5 commits — L1-watcher, cross-ref-checker (DWC, noise refinement pending), observer-of-observer 54w self-prune, STATUS.md generator, lefthook wire). Spec v1.1 `docs/superpowers/specs/2026-05-19-brain-governance-design.md` (factor analysis amendment: routing_decision events + primary_rationale). План `docs/superpowers/plans/2026-05-19-brain-governance.md`. C1+C2 surface 9+150 pre-existing drifts (known); WARN-only lefthook pending follow-up alias/scope refinement. **v2.17 наследие:** компакция «мозга» (SYSTEM-аудит findings 2/3/6/7): §3 title — убран счётчик «60 инструментов»; §3.3 строки #31–#60 (30 off-phase) свёрнуты из многострочных абзацев в однострочный индекс с пином на Tooling §4.NN (finding 2 — устранён дубль реестра с Tooling); §3.3 footer / §1 row 2b / §0 row-label — счётчик «60» → пин на Tooling Прил. Н §0 как канон (finding 3); §2 БД + §8 self-review — schema-метрики → пин на header `db/schema.sql` (finding 3); §3.5 ruflo свёрнут в dormant-стаб, исторические абзацы убраны (finding 6); §0 cross-refs Pravila v1.29→**v1.30** / PSR_v1 v3.14→**v3.15** / Tooling v2.15→**v2.16**; §9 +запись. Finding 1 (раздувание шапки/§0) и finding 5 (баг хука экономии) — заказчиком не выбраны, вне scope. План `docs/superpowers/plans/2026-05-18-brain-compaction-findings-2-3-6-7.md`. **v2.16 наследие:** SYSTEM-аудит «мозга» Rec1–Rec5 closure: §0 cross-refs Pravila v1.28→**v1.29** / Tooling v2.14→**v2.15** / Plugin_stack_rules v3.13→**v3.14**; §3.5 +bold-блок «СТАТУС 18.05.2026: ИЗОЛИРОВАН (dormant)» — live-связи ruflo (hooks/MCP/daemon) отключены без удаления артефактов; §3.7 (новый) — cross-ref на `docs/routing-off-phase.md` v1.0 (off-phase routing-аид: 30 узлов триггер→узел + 12 канонических связок L1–L12); §3.6 → §3.8 renumber; §6 +абзац «2026-05-18 SYSTEM-аудит мозга + Rec1–Rec5 закрытие». Snapshot — `docs/discovery/2026-05-18-system-audit-brain.md`. Rec2 закрыл 2 из 3 ⚫-конфликтов карты. Связано: Pravila v1.29 (+§14.9 ruflo dormant), Tooling v2.15 (§4.10 status-block), PSR_v1 v3.14 (+R15 off-phase routing), `docs/routing-off-phase.md` v1.0 (новый), memory `feedback_ruflo_isolated.md` + `feedback_automation_map_not_sot.md` + `feedback_hard_rule_no_alt_question.md`. **v2.15 наследие:** Anthropic dev-tooling integration: формализованы 5 Anthropic dev-плагинов из marketplace `anthropics/claude-plugins-official`, уже включённых в `~/.claude/settings.json` `enabledPlugins` user-level без формализации — #56 skill-creator / #57 plugin-dev / #58 hookify (новая тринадцатая off-phase подкатегория «authoring-tooling») + #59 claude-code-setup / #60 context7 (новая четырнадцатая «dev-support»); §3 title 55→60, §1 row 2b 55→60, §3.3 +5 строк #56–#60, §3.3 footer 55→60 (14 off-phase подкатегорий), §0 cross-refs Pravila v1.28 / PSR_v1 v3.13 / Tooling v2.14, §6 +абзац, §9 +запись. Триггер — аудит «мозга» через discovery-interview SYSTEM-режим: вскрыт L1-паттерн «плагин включён в settings.json без формализации в правилах» (повтор UPM/21st 10.05, Sentry/Redis 13.05). ADR-010. hookify HK1 — pre-check на коллизию с 6-компонентной economy/skill-discipline хук-архитектурой; закрывает 🔴-конфликт карты `hookify_plugin ↔ hk_pre_claude`. **NB:** ветка `feat/anthropic-dev-tooling` ребейзнута на parallel-sessions §15 (origin/main `781a59c`) — v2.14 и Pravila v1.27 параллельно заняты §15-эпиком; перенумеровано v2.14→v2.15, Pravila v1.27→v1.28. План `docs/superpowers/plans/2026-05-18-anthropic-dev-tooling-formalization.md`. Через прямой Edit — worktree-constraint эксцепшн §5 п.10 (прецедент A11/C10/discovery). **v2.14 наследие:** parallel-sessions-coordination: sync §0 cross-ref Pravila v1.26→v1.27 + §1 priority chain footer-абзац «Hard-rules вне §9» (упомянуты §12/§14/**§15**); §15 — третье hard-rule после §12 и §14, лечит два класса инцидентов параллельных Claude-сессий (Sprint 6 субагент-угон-ветки + Tooling v2.11 collision 17.05.2026). Spec — `docs/superpowers/specs/2026-05-18-parallel-sessions-coordination-design.md`, план — `docs/superpowers/plans/2026-05-18-parallel-sessions-coordination.md`. v1.27 в Pravila добавила hard-rule с фиксированным списком 8 нормативных файлов (Pravila/CLAUDE.md/Tooling/PSR_v1/MEMORY.md/Открытые_вопросы/docs/adr/*/db/schema.sql) — pre-flight `git fetch && git log HEAD..origin/main --oneline` обязателен перед правкой любого. Связанные артефакты (на этой же ветке `feat/parallel-sessions-coordination`): `docs/sessions/CURRENT.md` заявочный лог + `tools/subagent-prompt-prefix.mjs` PreToolUse Task auto-inject хук + `.claude/skills/subagent-driven-development/` wrapper-скил с git-safety-checklist (Tasks 2/4/7 плана). PSR_v1 и Tooling **не правятся** — §15 про координацию сессий, не плагинов. Через `/claude-md-management:claude-md-improver`. **v2.13 наследие:** discovery-interview integration: формализован #55 discovery-interview (self-authored project-скил `.claude/skills/discovery-interview/` — структурированное интервью-discovery до проектирования, два режима: FEATURE интервью заказчика перед фичей + SYSTEM ориентация по мета-слою) как новая двенадцатая off-phase подкатегория «discovery-tooling»; §3 title 54→55, §1 row 2b 54→55, §3.3 +строка #55, §3.3 footer 54→55, §0 cross-refs Pravila v1.26 / PSR_v1 v3.12 / Tooling v2.13, §6 +абзац discovery-interview, §9 +запись. ADR-009. Триггер-eval 20/20. Конфликт-аудит DI1–DI6 — разрез по слою-источнику с C10-скилом process-analysis #53 (тот вскрывает бизнес-процесс из app-кода; discovery-interview интервьюирует человека). План `docs/superpowers/plans/2026-05-18-discovery-interview-integration.md`. Через прямой Edit — worktree-constraint эксцепшн §5 п.10 (claude-md-management не наводится на worktree-копию CLAUDE.md; прецедент A11/C10). **v2.12 наследие:** C10 business-process integration: формализованы #51 operations (Claude Code marketplace-плагин `operations@knowledge-work-plugins` v1.2.0, Anthropic Verified — 9 скилов, 0 lifecycle-хуков) + #52 process-modeling + #53 process-analysis (self-authored project-скилы `.claude/skills/`) + #54 n8n-mcp (workflow-движок — DEFERRED, у портала нет n8n) — новая одиннадцатая off-phase подкатегория «business-process»; §3 title 50→54, §1 row 2b 50→54, §3.3 +4 строки #51/#52/#53/#54, §3.3 footer 50→54, §0 cross-refs Pravila v1.25 / PSR_v1 v3.11 / Tooling v2.12, §6 +абзац C10, §9 +запись. ADR-008. Конфликт-аудит OPS1/OPS5/N8N1/LINT1/BPMN1/PA1. План `docs/superpowers/plans/2026-05-17-c10-business-process-tooling-integration.md`. Через прямой Edit — worktree-constraint эксцепшн §5 п.10 (claude-md-management не наводится на worktree-копию CLAUDE.md; прецедент A11/ruflo). **v2.11 наследие:** ADR-006 Decision-4 icon-path boundary mirror: §3.3 строка #45 +граница «Lucide-иконки → канонический путь `lucide-vue-next` + Vuetify IconSet; raw-SVG Universal Icons MCP — только для не-Lucide коллекций». Источник — ADR-006 (поправка 17.05.2026, Decision item 4 — закрывает ранее нерегламентированную границу #45 ↔ `lucide-vue-next`, выявленную конфликт-аудитом карты). §0 cross-ref Tooling v2.10→**v2.11** (Pravila v1.24 / PSR_v1 v3.10 — без изменений: assess показал, что Pravila §13.2 делегирует к ADR-006, PSR_v1 R10.1 — role-registry). Счётчики инструментов без изменений (50 позиций). §9 +запись. Через `/claude-md-management:claude-md-improver` в worktree от origin/main (прямой Edit — worktree-constraint эксцепшн §5 п.10, прецедент A11 v2.10). **v2.10 наследие:** A11 ml-ai-tooling integration: формализованы #48 promptfoo (npm devDependency `promptfoo`, CLI-eval LLM-промптов, MIT) + #49 Data Scientist skill (вендоренный сторонний скил `.claude/skills/data-scientist/`, классический ML-воркфлоу) + #50 Jupyter MCP (исполняемые ноутбуки — DEFERRED, требует Python ML-окружения) — новая десятая off-phase подкатегория «ml-ai-tooling»; §3 title 47→50, §1 row 2b 47→50, §3.3 +3 строки #48/#49/#50, §3.3 footer 47→50, §0 cross-refs Pravila v1.24 / PSR_v1 v3.10 / Tooling v2.10, §6 +абзац A11, §9 +запись. ADR-007. Конфликт-аудит ML1 (promptfoo платные вызовы → вручную/CI) / ML3 (Data Scientist skill вендорен) / ML7 (bus-factor → вендоринг). План `docs/superpowers/plans/2026-05-17-a11-ml-ai-tooling-integration.md`. Через прямой Edit — worktree-constraint эксцепшн §5 п.10 (claude-md-management не наводится на worktree-копию CLAUDE.md; прецедент ruflo big-bang v2.0). **v2.9 наследие:** A3 integration-tooling integration: формализован #47 openapi-mcp-server (+ api-docs agent — узел карты A3 без Tooling-номера), новая девятая off-phase подкатегория «integration-tooling»; §3 title 46→47, §1 row 2b 46→47, §3.3 +строка #47, §3.3 footer 46→47, §0 cross-refs Pravila v1.23 / PSR_v1 v3.9 / Tooling v2.9, §6 +абзац A3, §9 +запись. Карта A3 0→7 узлов / 116→118. План `docs/superpowers/plans/2026-05-17-a3-integration-tooling-integration.md`. Через `/claude-md-management:claude-md-improver`. **v2.8 наследие:** A4 design-tooling integration: формализованы #44 Figma MCP (DEFERRED — у проекта нет Figma-аккаунта) + #45 Universal Icons MCP + #46 Design plugin — новая восьмая off-phase подкатегория «design-tooling»; §3 title 43→46, §1 row 2b 43→46, §3.3 +3 строки #44/#45/#46, §3.3 footer 43→46, §0 cross-refs Pravila v1.22 / PSR_v1 v3.8 / Tooling v2.8, §6 +абзац A4, §9 +запись. План `docs/superpowers/plans/2026-05-17-a4-design-tooling-integration.md`. Через `/claude-md-management:claude-md-improver`. **v2.7 наследие:** deptrac architecture-fitness integration: формализован #43 deptrac (Composer dev-dependency `deptrac/deptrac` v4.6.1, BSD-3) — 4-й инструмент off-phase подкатегории architecture-tooling; архитектурный fitness-гейт направления зависимостей / границ слоёв, врезан как lefthook pre-commit job 10; §3 title 42→43, §1 row 2b 42→43, §3.3 +строка #43, §3.3 footer 42→43, §0 cross-refs Pravila v1.21 / PSR_v1 v3.7 / Tooling v2.7, §6 +абзац deptrac, §9 +запись. План `docs/superpowers/plans/2026-05-17-deptrac-architecture-fitness-integration.md`. Через `/claude-md-management:claude-md-improver`. **v2.6 наследие:** C9 project-management integration: формализованы #41 CCPM (вендоренный скил) + #42 product-management (Anthropic marketplace-плагин) — новая седьмая off-phase подкатегория «project-management»; §3 title 40→42, §1 row 2b 40→42, §3.3 +2 строки #41/#42, §3.3 footer 40→42 + семь подкатегорий, §0 cross-refs Pravila v1.20 / PSR_v1 v3.6 / Tooling v2.6, §6 +абзац C9, §9 +запись. План `docs/superpowers/plans/2026-05-17-c9-project-management-tooling-integration.md`. Через `/claude-md-management:claude-md-improver`. **v2.5 наследие:** фактическая правка #40 Security Guidance: это **блокирующий** PreToolUse-хук (`sys.exit(2)`), не warn-only — при первом за сессию срабатывании уязвимого паттерна в файле блокирует правку (одноразовый speed-bump per «файл+правило», retry проходит); §3.3 строка #40 переписана (+SG2 Windows-починка python3-резолва), §6 абзац D3 уточнён, §0 cross-refs Pravila v1.19 / PSR_v1 v3.5 / Tooling v2.5, §9 +запись. Счётчики инструментов без изменений (40 позиций). План `docs/superpowers/plans/2026-05-17-d3-audit-risk-tooling-integration.md`. Через `/claude-md-management:claude-md-improver`. **v2.4 наследие:** D3 audit-security: формализованы #39 Trail of Bits Skills (субсет 8 audit-плагинов, marketplace `trailofbits`, CC-BY-SA-4.0) + #40 Security Guidance (Anthropic PreToolUse-хук) — новая шестая off-phase подкатегория «audit-security»; §3 title 35→40 (исправляет A6-пропуск: title оставался «35»), §1 row 2b 38→40, §3.3 +2 строки, §3.3 footer 38→40, §0 cross-refs Pravila v1.18 / PSR_v1 v3.4 / Tooling v2.4, §6 +абзац интеграции. План `docs/superpowers/plans/2026-05-17-d3-audit-risk-tooling-integration.md`. Через `/claude-md-management:claude-md-improver`. **v2.3 наследие:** A6 architecture-tooling: формализованы 3 инструмента раздела A6 карты «Архитектура систем» — #36 adr-kit, #37 mermaid-skill, #38 architecture-patterns; §3 title 35→38, §3.3 +3 строки, §1 row 2b 35→38, §3.3 footer 35→38 (пятая off-phase подкатегория architecture-tooling), §0 cross-refs Pravila v1.17 / PSR_v1 v3.3 / Tooling v2.3, §6 +абзац интеграции. План `docs/superpowers/plans/2026-05-17-a6-architecture-tooling-integration.md`. Через `/claude-md-management:claude-md-improver`. **v2.2 наследие:** реколлаж ruflo: §1 убран уровень −1 (entry-point framing → advisory-подсистема); §3/§3.5 advisory-подсистема; §0 cross-refs Pravila v1.16 / PSR_v1 v3.2 / Tooling v2.2. **v2.1 наследие:** §14 queen-trigger: §1 priority chain уровень −1 +триггер queen/королева → Pravila §14; §3.5 +абзац «Queen trigger»; §0 cross-ref Pravila v1.15. **v2.0 наследие:** Ruflo big-bang integration: 8-level → 9-level priority chain, ruflo Queen-led routing на уровне −1 (entry-point); §1 +уровень −1 ruflo; §3 title «35 инструментов» → «35 + ruflo orchestration layer»; §3.5 added (off-phase orchestration «ruflo»; «Заметки к settings.json» renumber §3.5 → §3.6); §5 п.10 → sub-policy note (claude-md-management остаётся preferred channel через ruflo routing); §6 +2026-05-15 ruflo phase paragraph. Major bump reflects architectural inversion (paper-level: ruflo daemon/swarm not yet running, technical compensators retained: gitleaks/RLS/dev DB only). Через прямой Edit (plan §1.4 user-authorized exception к §5 п.10). **v1.93 наследие:** Audit #3 deferred fixes sprint closure: sync schema header drift «62 → 63 базовые таблицы (61 regular + 2 partitioned parents: deals + supplier_lead_costs)» в §0 row «Схема БД», §2 БД row, §8 self-review row. Цифра 62 была commit-baseline артефактом; фактический count base-tables (regular + partitioned parents) — 63 (audit-verified в Audit #3 Phase 3). Sprint commits: `8ba9c55` (plan) + `0c36b7a` (Pa11y migration) + `e746b3c` (dead code cleanup, incl. schema.sql:4 header) + `c5c0e76` (coverage debt F-COV-01/02/03 → ≥95%) + `c524227` (P3 tooling). Pushed `f9d2452..c524227 main -> main`. Через `/claude-md-management:claude-md-improver`. **v1.92 наследие:** Task 9 sync нормативки после merge PR #3 `cc5f63b`: §3.3 +#34 Sentry MCP + #35 Redis MCP (off-phase debug-runtime category, отдельная от UI-пула UPM/21st и от infrastructure claude-md-management); §3 title «33» → «35»; §3.3 footer count 33 → 35 (29 phase-active + 5 off-phase + 1 historic); §0 cross-refs Tooling v1.16 → v1.17, PSR_v1 v2.0 → v2.1, Pravila v1.12 → v1.13. **v1.91 наследие:** Session-end documentation hygiene после CTO-19 ✅ closure via Lucide migration. Содержание: (1) §0 cross-ref row Pravila v1.11 → **v1.12** (sync: §4.6 +visual smoke methodology для UI-refactor; §4.7 +п.4 plans/specs relative paths `../../../`); (2) §9 +v1.91 entry. Связано: реестр v1.82→v1.83 (CTO-19 closure в commit `0832997`); audit `docs/superpowers/audits/2026-05-12-portal-full-audit-findings.md` Q.INFO.001 +audit methodology gap note (Phase 4 SAST checks must begin с `ls .github/workflows/`); memory quirks 74-76 (Lucide+Histoire peerDep / Vuetify-internal mdi defaults gap / plans-relative-paths). Регрессия зелёная (verified в commit `0832997`): Pest --parallel 742/739/0/3 ✅, Vitest 88 files / 683 passed + 3 skipped, Vite build 3.52s, axe-core /admin/billing 0 iconography violations, lychee 252 OK / 0 errors, gitleaks 0 (372+ commits). Workflow learning: `superpowers:brainstorming` → `:writing-plans` → `:subagent-driven-development` efficient для mechanical UI-refactor (icon migration). Через `/claude-md-management:revise-claude-md`. **v1.90 наследие:** Merge R15 motion-runtime removal cleanup из `origin/main` в `plan5-frontend-projects` (commits `0fd93fd` planning + `615db99` нормативная правка). Plan5 ветка форкнулась 12.05 утром от `48f27b4` ДО появления `615db99` на main; после 113 атомарных коммитов на plan5 (audit fixes, Plan 5 frontend Tasks 7-11, Quiet Luxury portal redesign, Q.DEFER.002/003/004 closures, audit-cleanup tail) — merge синхронизирует R15 changes. **§5 п.12** → маркер «Резерв (снят 12.05.2026, см. CHANGELOG)» (нумерация п.1–11 сохранена, чтобы cross-refs в memory не сломать). **§2 строка «Animation default stack»** переписана с regulatory denylist на guidance recommendation (motion-v/gsap/anime.js/lottie-web/popmotion/@motionone/dom — ✅ разрешены без обоснования; framer-motion остаётся technical block — React-only peerDep, runtime crash в Vue, не regulatory rule). **§0 cross-refs** обновлены — Pravila v1.10 → **v1.11**, PSR_v1 v1.7 → **v2.0**, Tooling v1.15 → **v1.16**. **§6 фаза** + **§8 self-review** строки (Plan 4/5 + Quiet Luxury + Q.DEFER closures context + schema baseline v8.19 + dev-actual factual) — preserved из plan5 v1.88/v1.89 base. Plan5 v1.89 factual fix §6 (615db99 = R15 removal, ≠ Plan 4) подтверждён и сохранён. NB: §9 содержит **две v1.88 entries** — plan5 audit schema-sync + origin/main R15-removal — это collision версионной нумерации parallel-branch bump'ов; обе валидны исторически, явно labelled в §9. Files fast-forwarded без conflict: `Plugin_stack_rules_v1.md` (R15 удалён, 162 lines diff), `Pravila_raboty_Claude_v1_1.md` (§11.5/§13.2 счётчик 16→15 + cross-refs), `Tooling_v8_3.md` (§9.2 reformulated). Через ручное conflict resolution на 2 файлах (CLAUDE.md + CHANGELOG_claude_md.md) + post-merge `/claude-md-management:revise-claude-md` polish (per §5 п.10). **v1.89 наследие:** factual fix §6 + шапка v1.88 changelog (615db99 ≠ Plan 4). **v1.88 наследие (plan5 branch):** audit-driven sync §0/§2/§6/§8 после полного аудита портала. Schema-метрики §0/§2/§8 разделены на «commit baseline v8.19» (62/12/117/39/5/13/5) + «dev-actual factual» (75/102/289/39/5/19/0). **v1.88 наследие (origin/main):** снятие R15 motion-runtime restrictions per user decision 12.05.2026 («сними все запреты на использование framer motion»); conscious rollback v1.83 audited construction. **v1.87 наследие:** sync schema-метрик после Plan 4 (Billing+CSV+Admin) на ветке `plan4-billing`. Schema **v8.11 → v8.19**. Предыдущая v1.86 — закрытие 13 находок третьего аудита (детали в [docs/CHANGELOG_claude_md.md](docs/CHANGELOG_claude_md.md)). **Назначение:** оперативная карта для Claude Code. Не первоисточник — первоисточники указаны в §0. **Владелец и режим правок:** все изменения этого файла — **только** через плагин `claude-md-management` (skills `/claude-md-management:claude-md-improver` для audit/targeted-updates и `/claude-md-management:revise-claude-md` для capture session-learnings). Прямые правки запрещены — см. §5 п.11. @@ -12,9 +12,9 @@ | Тема | Документ | |---|---| -| Продуктовые правила работы Claude | [docs/Pravila_raboty_Claude_v1_1.md](docs/Pravila_raboty_Claude_v1_1.md) (**v1.43 от 27.05.2026** — knowledge-graph-tooling: §13.2 +абзац «Off-phase knowledge-graph-tooling» (#86 graphifyy, user-level скил, CLI `graphifyy`, knowledge graph портала, activation `/graphify`, артефакты `graphify-out*/` gitignored), 19-я off-phase подкатегория; ADR-017 (KG1–KG5). **v1.42 наследие** — §17.7 «Coverage announcement»: новая подсекция — правило показывать `coverage: :` пометку на каждой non-conversation задаче (6 каналов: skill/node/chain/hook/agent/direct). **v1.41 наследие** — LLM-first router overhaul Phase 1 Tasks 4-5: §12 «Superpowers hard rule» снят в архив, §17 «Universal skill-coverage» добавлен (classifier-driven default-deny, ADR-016), §16.4 cross-refs мигрированы на nodes.yaml; полные детали в шапке Pravila «Что изменилось в v1.41». **v1.40 наследие** — Делегирование проектным AI-агентам: §2.4 (новая подсекция) — контроллер обязан звать `normative-sync` (#84) после крупной задачи + `prod-deploy-validator` (#85) перед каждым выкатом liderra.ru; прежние `pest-parallel-debugger` + `rls-reviewer` тоже формализованы в одной таблице. Project-агенты в `docs/registry/nodes.yaml` subcategory `project-agent`, **не входят в Tooling канон счётчиков** #1-#83. Связано: CLAUDE.md v2.28, spec `docs/superpowers/specs/2026-05-24-controller-offload-agents-design.md`. **v1.39 наследие** — C1 marketing-tooling: §13.2 +абзац «Off-phase marketing-tooling» (#74 marketing / #75 marketingskills / #76 brand-voice / #77 marketing-ru / #78 Яндекс.Метрика MCP / #79 Яндекс.Директ+Wordstat MCP / #80 Telegram MCP / #81 Postiz / #82 DataForSEO MCP DEFERRED / #83 Unisender Go MCP DEFERRED), 18-я off-phase подкатегория; провенанс-вет IS9 (`docs/security/marketing-vet.md`); VK out-of-scope; ADR-015. **v1.38 наследие** — A8 infosec-tooling install-sync: ZAP #68 + Ward #70 установлены портативно 21.05 → статус PENDING снят (§13.2). **v1.37 наследие** — A8 infosec-tooling §13.2 +абзац «Off-phase infosec-tooling» (A8: #68 OWASP ZAP DAST PENDING / #69 Nuclei CLI / #70 Ward CLI PENDING / #71 pdn-152fz-audit / #72 threat-model / #73 security-go-live), 17-я off-phase подкатегория; провенанс-вет IS9; ADR-014. **v1.36 наследие** — A8 infosec-tooling install-sync: ZAP #68 + Ward #70 установлены портативно 21.05 → статус PENDING снят (§13.2). **v1.37 наследие** — A8 infosec-tooling §13.2 +абзац «Off-phase infosec-tooling» (A8: #68 OWASP ZAP DAST PENDING / #69 Nuclei CLI / #70 Ward CLI PENDING / #71 pdn-152fz-audit / #72 threat-model / #73 security-go-live), 17-я off-phase подкатегория; провенанс-вет IS9; ADR-014. **v1.36 наследие** — §16.4 расширен симметрией missed activation (условное правило): эпизод с профильной классификацией (`tools/observer-classification-map.json`) при `node_chosen === 'direct'` и наличии non-dormant рекомендуемого узла → сигнал, surface в STATUS.md C5 + /brain-retro; DEFERRED-исключения через `tools/.node-dormancy.json`. **v1.35 наследие** — A1 backend-tooling §13.2 +абзац «Off-phase backend-tooling» (A1: #64 Rector / #65 PHP Insights / #66 laravel-backend-patterns / #67 NightOwl DEFERRED), 16-я off-phase подкатегория. **v1.34 наследие** — finance-tooling §13.2 +абзац «Off-phase finance-tooling» (C6+C7: #61 finance plugin / #62 billing-audit / #63 ru-tax-accounting). **v1.33 наследие** — observer factor-analysis phase 1.1 (ADR-011 amend): §16.2 — `decision_provenance.kind` расширен до 3 значений (`autonomous` \| `user_directed_method` \| `user_chose_from_options`); 3-й kind — collaborative-choice case (заказчик выбирает один из предложенных Claude вариантов в предыдущем ходе); §16.7 +абзац «Граница `user_chose_from_options`» — routing-gate НЕ блокирует этот kind (выбор из choice-space самого Claude, не навязанный извне метод). **v1.32 наследие** — observer factor-analysis extension (ADR-011 amend): §16.2 +абзац «Схема эпизода v2» (`schema_version`, `decision_provenance`, `environment`, `task_size`, `task_ref`, `prompt_signal`; `outcome` `unknown` при записи; +`hook_fired`/`interrupt`/`retry`/`time_burn`/`parse_gap`; `observer_error` маркер); §16.3 4→5 контролёров (+C5 observer-coverage-checker, warn-only); §16.7 (новое) routing-тег-дисциплина — Stop-хук `decision: block` при навязанном методе без тега, `stop_hook_active` guard против петли; §16.8 (новое) самодисциплина наблюдателя (`observer_error` маркер вместо тихого пропуска, `parse_gap` событие, C5 контролёр); §16.6 +cross-ref на factor-analysis spec. **v1.31 наследие** — Brain governance §16 implementation (ADR-011): §16.1 router-only, §16.2 observer scope B (5 mandatory fields incl. primary_rationale, 7 event kinds incl. routing_decision per spec v1.1), §16.3 4 controllers, §16.4 поведенческое правило «не использован ≠ проблема», §16.5 не override-floor §9, §16.6 cross-refs. **v1.30 наследие** — компакция «мозга» finding 3: §13.2 счётчики off-phase подкатегорий → пин на Tooling Прил. Н §0 (канон счётчиков); §14 заголовок +метка «(dormant — §14.9)». **v1.29 наследие** — +§14.9 «Текущий статус: изолирован (18.05.2026, dormant)» — Rec2 SYSTEM-аудита: ruflo изолирован от Claude-потока, артефакты сохранены; live-связи hooks/MCP/daemon отключены; queen-триггер §14.1 dormant. **v1.28 наследие** — §13.2 +абзац «Off-phase authoring-tooling + dev-support» (#56 skill-creator / #57 plugin-dev / #58 hookify — тринадцатая off-phase подкатегория authoring-tooling; #59 claude-code-setup / #60 context7 — четырнадцатая dev-support); ADR-010. **v1.27 наследие** — §15 hard-rule «Параллельные сессии» (15.1 субагенты+git Sonnet/Opus only, 15.2 нормативка+pre-flight sync с 8-позиционным списком файлов: Pravila/CLAUDE.md/Tooling/PSR_v1/MEMORY.md/Открытые_вопросы/docs/adr/*/db/schema.sql, 15.3 cross-refs); третье hard-rule после §12 и §14; +§10 changelog entry v1.27. **v1.26 наследие** — §13.2 +абзац «Off-phase discovery-tooling» (#55 discovery-interview — проектный скил, режимы FEATURE+SYSTEM); двенадцатая off-phase подкатегория. **v1.25 наследие** — §13.2 +абзац «Off-phase business-process» (#51 operations / #52 process-modeling / #53 process-analysis / #54 n8n-mcp DEFERRED — раздел C10 карты); одиннадцатая off-phase подкатегория. **v1.24 наследие** — §13.2 +абзац «Off-phase ml-ai-tooling» (#48 promptfoo / #49 Data Scientist skill / #50 Jupyter MCP DEFERRED — раздел A11 карты); десятая off-phase подкатегория. **v1.23 наследие** — §13.2 +абзац «Off-phase integration-tooling» (#47 openapi-mcp-server / api-docs agent — раздел A3 карты); девятая off-phase подкатегория. **v1.22 наследие** — §13.2 +абзац «Off-phase design-tooling» (#44 Figma MCP / #45 Universal Icons MCP / #46 Design plugin — раздел A4 карты); восьмая off-phase подкатегория. **v1.21 наследие** — §13.2 абзац «Off-phase architecture-tooling» расширен: +#43 deptrac (4-й инструмент категории, Composer dev-dep). **v1.20 наследие** — §13.2 +абзац «Off-phase project-management» (#41 CCPM / #42 product-management — раздел C9 карты); новая седьмая off-phase подкатегория. **v1.19 наследие** — §13.2 факт-правка #40 Security Guidance: блокирующий хук (`sys.exit 2`), не warn-only. **v1.18 наследие** — §13.2 +абзац «Off-phase audit-security» (#39 Trail of Bits Skills / #40 Security Guidance — раздел D3 карты). **v1.17 наследие** — §13.2 +абзац «Off-phase architecture-tooling» (#36 adr-kit / #37 mermaid-skill / #38 architecture-patterns — раздел A6 карты). **v1.16 наследие** — реколлаж ruflo: §1 убран уровень −1, ruflo переописан в advisory-подсистему; §14 queen-триггер сохранён. **v1.15 наследие** — §14 (new) Ruflo Queen routing hard-rule (триггер queen/королева). **v1.14 наследие** — §12 → sub-policy под ruflo routing (commit `9c3057b`); Superpowers hard-rule сохраняется. **v1.13 наследие** — §13.2 +новый абзац «Off-phase MCP debug-runtime (отдельная категория)»: `@sentry/mcp-server` (Tooling #34) + `@modelcontextprotocol/server-redis` (Tooling #35) — retrospective formalization после PR #3 merge. Категория отдельная от UI-пула и от infrastructure (claude-md-management). READ-ONLY usage обязателен. v1.12 наследие — methodology additions §4.6 visual smoke для UI-refactor + §4.7 п.4 plans/specs relative paths `../../../`) | -| **Правила совместного использования плагинов Claude** | [docs/Plugin_stack_rules_v1.md](docs/Plugin_stack_rules_v1.md) (**v3.23 от 27.05.2026** — knowledge-graph-tooling: R10.1 Блок 1 note +graphifyy #86 (user-level скил, CLI `graphifyy`); R15.6 +knowledge-graph-tooling; 19-я off-phase подкатегория; ADR-017 (KG1–KG5). **v3.22 наследие** — C1 marketing-tooling: R10.1 Блок 1 +marketing (#74 plugin + #75 marketingskills + #76 brand-voice + #77 marketing-ru) + note (+Яндекс.Метрика MCP #78 / Яндекс.Директ+Wordstat MCP #79 / Telegram MCP #80 / Postiz #81 / DataForSEO MCP #82 DEFERRED / Unisender Go MCP #83 DEFERRED); R15.6 +marketing-tooling; 18-я off-phase подкатегория; не UI → вне R6/R14. **v3.21 наследие** — A8 infosec-tooling install-sync: ZAP #68 + Ward #70 установлены портативно 21.05 → R10.1 Блок 1 note + Блок 3 ZAP-row статус PENDING INSTALL снят. **v3.20 наследие** — A8 infosec-tooling install-sync: ZAP #68 + Ward #70 установлены портативно 21.05 → R10.1 Блок 1 note + Блок 3 ZAP-row статус PENDING INSTALL снят. **v3.20 наследие** — A8 infosec-tooling: R10.1 Блок 1 note +infosec (#69 Nuclei / #70 Ward — CLI; #71-73 self-authored скилы) + Блок 3 +OWASP ZAP MCP (#68, PENDING INSTALL); R15.6 +infosec-tooling; 17-я off-phase подкатегория. **v3.19 наследие** — A1 backend-tooling: R10.1 Блок 1 note +backend-tooling (#64 Rector / #65 PHP Insights — Composer dev-deps; #66 laravel-backend-patterns — self-authored; #67 NightOwl DEFERRED); R15.6 +backend-tooling; 16-я off-phase подкатегория. **v3.18 наследие** — finance-tooling: R10.1 Блок 1 +finance plugin (#61) + note (+billing-audit #62 / ru-tax-accounting #63). **v3.17 наследие** — observer schema v2 sync (ADR-011 amend): R16.1 +предложение про `schema_version` / `decision_provenance` / `environment` / `task_size` / `prompt_signal` + расширенные события (`hook_fired`/`interrupt`/`retry`/`time_burn`/`parse_gap`) + `observer_error` маркер; R16.4 +cross-ref на factor-analysis spec и plan. R0–R15 без изменений. Routing-gate / C5 / `/brain-retro` analyzer — нормативно в Pravila §16.7/§16.8 + ADR-011 §5; R16 фиксирует evidence-сбор, не enforcement. **v3.16 наследие** — Brain governance R16 «Brain evidence loop» (ADR-011): R16.1 observer scope (5 mandatory fields), R16.2 plugin stack-conscious events (routing_decision + factor matrix 5 axes), R16.3 не override (R16 evidence-сбор, не правило выбора), R16.4 cross-refs. 17 правил R0-R16. **v3.15 наследие** — компакция «мозга» finding 3: R10.1 счётчики позиций → пин на Tooling Прил. Н §0 (канон счётчиков). **v3.14 наследие** — +R15 «Off-phase routing» на свободном слоте (motion удалён v2.0): R15.1 off-phase узлы вне R6.0/R6.1/R14, R15.2 routing-таблица — `docs/routing-off-phase.md` v1.0+, R15.3 приоритет специфичности + ADR-границы, R15.4 hard-rules Pravila §12/§14/§15 перевешивают, R15.5 live-override, R15.6 гранулярные категории, R15.7 обычное правило. UI-аппарат R0–R14 без изменений. Rec5 SYSTEM-аудита. **v3.13 наследие** — R10.1 Блок 1 +5 строк (#56 skill-creator / #57 plugin-dev / #58 hookify / #59 claude-code-setup / #60 context7) + note (v3.13); новые тринадцатая (authoring-tooling) и четырнадцатая (dev-support) off-phase подкатегории, не UI → вне R6/R14; hookify HK1 pre-check. **v3.12 наследие** — R10.1 Блок 1 note (v3.12) +discovery-interview (#55, self-authored project-скил, discovery-tooling); новая двенадцатая off-phase подкатегория discovery-tooling, не UI → вне R6/R14. **v3.11 наследие** — R10.1 Блок 1 +operations (#51, business-process, marketplace-плагин) + Блок 1 note +process-modeling (#52) + process-analysis (#53, self-authored project-скилы) + Блок 3 +n8n-mcp (#54, DEFERRED); новая одиннадцатая off-phase подкатегория business-process, не UI → вне R6/R14. **v3.10 наследие** — R10.1 Блок 3 +Jupyter MCP (#50, ml-ai-tooling, DEFERRED) + Блок 1 note +promptfoo (#48) + Data Scientist skill (#49); новая десятая off-phase подкатегория ml-ai-tooling, не UI → вне R6/R14. **v3.9 наследие** — R10.1 Блок 3 +openapi-mcp-server (#47, integration-tooling); новая девятая off-phase подкатегория integration-tooling, не UI → вне R6/R14. **v3.8 наследие** — R10.1 Блок 1 +Design plugin (#46, design-tooling); Блок 3 +Universal Icons MCP (#45) + Figma MCP (#44, DEFERRED); новая восьмая off-phase подкатегория design-tooling, не UI → вне R6/R14. **v3.7 наследие** — R10.1 Блок 1 +note: deptrac #43 (Composer dev-dep, не marketplace-плагин, architecture-tooling), не UI → вне R6/R14. **v3.6 наследие** — R10.1 Блок 1 +2 строки (CCPM + product-management); новая категория project-management, не UI → вне R6/R14. **v3.5 наследие** — R10.1 факт-правка security-guidance: блокирующий хук, не warn-only. **v3.4 наследие** — R10.1 Блок 1 +2 строки (Trail of Bits Skills + security-guidance); новая категория audit-security, не UI → вне R6/R14. **v3.3 наследие** — R10.1 Блок 1 +2 строки (adr-kit + architecture-patterns) + note (mermaid-skill вендоренный); новая категория architecture-tooling, не UI → вне R6/R14. **v3.2 наследие** — реколлаж ruflo: R0 entry-point framing убран, ruflo advisory-подсистема. **v3.1 наследие** — queen-триггер §14. **v3.0 наследие** — major bump: R0 stack-gate → paired-stack delegation pattern (commit `d30cbeb`). **v2.1 наследие** — R10.1 Блок 3 (MCP-серверы) +2 строки sentry + redis с категорией **debug-runtime**: `@sentry/mcp-server@0.33.0+` (Tooling #34, pending Б-1) + `@modelcontextprotocol/server-redis@2025.4.25` (Tooling #35, deprecated Anthropic source, Memurai PONG verified Task 4). Не trigger'ит R6.0/R6.1 фильтры и не входит в R14 pipeline UI-генераторов. v2.0 наследие — major bump: removal of R15 motion-runtime restrictions per user decision 12.05.2026; conscious rollback v1.4 audited construction; framer-motion переведён из regulatory hard-запрета в technical-guidance уровень) | -| Полный реестр формализованных позиций тулчейна (счётчики — канон в Прил. Н §0) | [docs/Tooling_v8_3.md](docs/Tooling_v8_3.md) (**Прил. Н v2.24 от 27.05.2026** — knowledge-graph-tooling: §4.59 #86 graphifyy (user-level скил `~/.claude/skills/graphify/SKILL.md`, CLI `graphifyy`, knowledge graph портала docs+code; `/graphify `; spike 6305 nodes / 6753 edges / 1009 communities, 93% EXTRACTED/7% INFERRED); §0 счётчик 83→84 (103→104 total) + 19-я подкатегория knowledge-graph-tooling; ADR-017 (KG1–KG5). **Прил. Н v2.23 наследие** — C1 marketing-tooling: §4.49 marketing plugin + §4.50 marketingskills + §4.51 brand-voice + §4.52 marketing-ru + §4.53 Яндекс.Метрика MCP + §4.54 Яндекс.Директ+Wordstat MCP + §4.55 Telegram MCP + §4.56 Postiz + §4.57 DataForSEO MCP (DEFERRED) + §4.58 Unisender Go MCP (DEFERRED); §0 счётчик 73→83 (93→103 total) + 18-я подкатегория marketing-tooling (раздел C1); ADR-015; IS9-вет (`docs/security/marketing-vet.md`). **Прил. Н v2.22 наследие** — pg_audit #28 + pg_anonymizer #29 установлены на боевом `liderra.ru` (расширения PostgreSQL фазы 3): §5.1 attribute-блоки #28/#29 + §6 compliance-таблица + §10.4 шаг 2 → ✅ прод; setup-dok `docs/security/pgaudit-anonymizer-setup.md`. **Прил. Н v2.21 наследие** — pg_audit #28 + pg_anonymizer #29 установлены на боевом `liderra.ru` (расширения PostgreSQL фазы 3): §5.1 attribute-блоки #28/#29 + §6 compliance-таблица + §10.4 шаг 2 → ✅ прод; setup-док `docs/security/pgaudit-anonymizer-setup.md`. **Прил. Н v2.21 наследие** — A8 infosec-tooling install-sync: ZAP #68 + Ward #70 установлены портативно 21.05 → §4.43/§4.45 dormant true→false, §4.48 уточнён, setup-доки `docs/security/{zap,ward}-setup.md`; счётчики без изменений (73/93). **Прил. Н v2.20 наследие** — A8 infosec-tooling: §4.43 OWASP ZAP #68 + §4.44 Nuclei #69 + §4.45 Ward #70 + §4.46 pdn-152fz-audit #71 + §4.47 threat-model #72 + §4.48 security-go-live #73; §0 счётчик 67→73 (87→93 total) + 17-я подкатегория infosec-tooling (раздел A8); ADR-014. **Прил. Н v2.19 наследие** — A1 backend-tooling: §4.39 Rector #64 + §4.40 PHP Insights #65 + §4.41 laravel-backend-patterns #66 + §4.42 NightOwl #67 (DEFERRED); §0 счётчик 63→67 (83→87 total) + 16-я подкатегория backend-tooling (раздел A1); ADR-013. **Прил. Н v2.18 наследие** — finance-tooling: §4.36 finance plugin #61 + §4.37 billing-audit #62 + §4.38 ru-tax-accounting #63; §0 счётчик 60→63 + 15-я подкатегория finance-tooling. **Прил. Н v2.17 наследие** — Brain governance Task A3 (ADR-011): §0.1 row template (9 obligatory attributes) + 58 Атрибуты blocks на всех узлах реестра. Дамп-блоки для phase-active (§2.4/§3.5/§5.1 для phase 0/1/3) + inline-блоки для phase-2 (§4.1-§4.4) и off-phase (§4.5-§4.35). dormant=true для #1 PG MCP (replaced), #17 pg_partman (no native Windows PG ext), ruflo §4.10. 6 atomic sub-batches: 1f77134/0718e41/16f7f1c/ca4da69/39231ef/3e73396 + header bump 8170527. Структурный реестр — вход для router-procedure.md (commit 8a2e701) step 3. **Прил. Н v2.16 наследие** — компакция «мозга» finding 3: §0 +«КАНОН СЧЁТЧИКОВ» anchor (Прил. Н §0 — единственный источник числовых счётчиков тулчейна); §12 заголовок — убран stale-счётчик «35». **v2.15 наследие** — §4.10 +status-block «ruflo ИЗОЛИРОВАН 18.05.2026» (live-связи hooks/MCP/daemon отключены, артефакты сохранены, queen-триггер dormant). Счётчики тулчейна без изменений — 60 формализованных позиций + 20 ruflo plugins = 80 total. Rec2 SYSTEM-аудита. **v2.14 наследие** — §4.31–§4.35 (#56 skill-creator / #57 plugin-dev / #58 hookify — authoring-tooling; #59 claude-code-setup / #60 context7 — dev-support — новые тринадцатая и четырнадцатая off-phase подкатегории); §0 счётчик 55→60 (75→80 total). **v2.13 наследие** — §4.30 (#55 discovery-interview, discovery-tooling — новая двенадцатая off-phase подкатегория); §0 счётчик 54→55. **v2.12 наследие** — §4.26/§4.27/§4.28/§4.29 (#51 operations / #52 process-modeling / #53 process-analysis / #54 n8n-mcp DEFERRED, business-process — новая одиннадцатая off-phase подкатегория); §0 счётчик 50→54. **v2.11 наследие** — §4.20 +UI3 (ADR-006 Decision-4 icon-path boundary mirror: Lucide-иконки канонически через `lucide-vue-next` + Vuetify IconSet, raw-SVG MCP — только не-Lucide коллекции). **v2.10 наследие** — §4.23/§4.24/§4.25 (#48 promptfoo / #49 Data Scientist skill / #50 Jupyter MCP DEFERRED, ml-ai-tooling — новая десятая off-phase подкатегория); §0 счётчик 47→50. **v2.9 наследие** — §4.22 (#47 openapi-mcp-server, integration-tooling — новая девятая off-phase подкатегория); §0 счётчик 46→47. **v2.8 наследие** — §4.19/§4.20/§4.21 (#44 Figma MCP / #45 Universal Icons MCP / #46 Design plugin, design-tooling — новая восьмая off-phase подкатегория); §0 счётчик 43→46. **v2.7 наследие** — §4.18 (#43 deptrac, architecture-tooling — 4-й инструмент категории); §0 счётчик 42→43. **v2.6 наследие** — §4.16/§4.17 (#41 CCPM / #42 product-management), новая седьмая off-phase подкатегория project-management; §0 счётчик 40→42. **v2.5 наследие** — §4.15 факт-правка #40 Security Guidance: блокирующий хук (`sys.exit 2`), не warn-only; +SG2 Windows-починка python3-резолва. **v2.4 наследие** — §4.14/§4.15 (#39 Trail of Bits Skills / #40 Security Guidance), новая шестая off-phase подкатегория audit-security; §0 счётчик 38→40. **v2.3 наследие** — §4.11–4.13 (#36 adr-kit / #37 mermaid-skill / #38 architecture-patterns), новая пятая off-phase подкатегория architecture-tooling; §0 счётчик 35→38. **v2.2 наследие** — реколлаж ruflo: §4.10 переписан из «entry-point оркестратора уровня −1» в «advisory/automation-подсистема». **v2.1 наследие** — queen-триггер §14. **v2.0 наследие** — §4.10 (новый) «Orchestration layer (ruflo)»: ruflo v3.7.0-alpha.38+ (off-phase, orchestration category). **v1.17 наследие** — §0 счётчик off-phase 3 → 5; итого 33 → 35; §4.8 (новый) — #34 Sentry MCP (`@sentry/mcp-server@0.33.0+`, official; pending Sentry instance deployment Б-1); §4.9 (новый) — #35 Redis MCP (`@modelcontextprotocol/server-redis@2025.4.25`, deprecated Anthropic source, рабочий с Memurai localhost:6379). Категория **debug-runtime**, отдельная от UI-пула. v1.16 наследие — §9.2 «Motion runtime библиотеки» переформулирован из regulatory denylist в technical guidance) | +| Продуктовые правила работы Claude | [docs/Pravila_raboty_Claude_v1_1.md](docs/Pravila_raboty_Claude_v1_1.md) (**v1.44 от 14.06.2026** — research-tooling (Perplexity Pack): §13.2 +абзац «Off-phase research-tooling» (#87 perplexity / #88 exa / #89 firecrawl — двадцатая off-phase подкатегория, внешние MCP веб-разведки, READ-ONLY, платные API — ключи в env); ADR-019 (RT1–RT9). **v1.43 наследие** — knowledge-graph-tooling: §13.2 +абзац «Off-phase knowledge-graph-tooling» (#86 graphifyy, user-level скил, CLI `graphifyy`, knowledge graph портала, activation `/graphify`, артефакты `graphify-out*/` gitignored), 19-я off-phase подкатегория; ADR-017 (KG1–KG5). **v1.42 наследие** — §17.7 «Coverage announcement»: новая подсекция — правило показывать `coverage: :` пометку на каждой non-conversation задаче (6 каналов: skill/node/chain/hook/agent/direct). **v1.41 наследие** — LLM-first router overhaul Phase 1 Tasks 4-5: §12 «Superpowers hard rule» снят в архив, §17 «Universal skill-coverage» добавлен (classifier-driven default-deny, ADR-016), §16.4 cross-refs мигрированы на nodes.yaml; полные детали в шапке Pravila «Что изменилось в v1.41». **v1.40 наследие** — Делегирование проектным AI-агентам: §2.4 (новая подсекция) — контроллер обязан звать `normative-sync` (#84) после крупной задачи + `prod-deploy-validator` (#85) перед каждым выкатом liderra.ru; прежние `pest-parallel-debugger` + `rls-reviewer` тоже формализованы в одной таблице. Project-агенты в `docs/registry/nodes.yaml` subcategory `project-agent`, **не входят в Tooling канон счётчиков** #1-#83. Связано: CLAUDE.md v2.28, spec `docs/superpowers/specs/2026-05-24-controller-offload-agents-design.md`. **v1.39 наследие** — C1 marketing-tooling: §13.2 +абзац «Off-phase marketing-tooling» (#74 marketing / #75 marketingskills / #76 brand-voice / #77 marketing-ru / #78 Яндекс.Метрика MCP / #79 Яндекс.Директ+Wordstat MCP / #80 Telegram MCP / #81 Postiz / #82 DataForSEO MCP DEFERRED / #83 Unisender Go MCP DEFERRED), 18-я off-phase подкатегория; провенанс-вет IS9 (`docs/security/marketing-vet.md`); VK out-of-scope; ADR-015. **v1.38 наследие** — A8 infosec-tooling install-sync: ZAP #68 + Ward #70 установлены портативно 21.05 → статус PENDING снят (§13.2). **v1.37 наследие** — A8 infosec-tooling §13.2 +абзац «Off-phase infosec-tooling» (A8: #68 OWASP ZAP DAST PENDING / #69 Nuclei CLI / #70 Ward CLI PENDING / #71 pdn-152fz-audit / #72 threat-model / #73 security-go-live), 17-я off-phase подкатегория; провенанс-вет IS9; ADR-014. **v1.36 наследие** — A8 infosec-tooling install-sync: ZAP #68 + Ward #70 установлены портативно 21.05 → статус PENDING снят (§13.2). **v1.37 наследие** — A8 infosec-tooling §13.2 +абзац «Off-phase infosec-tooling» (A8: #68 OWASP ZAP DAST PENDING / #69 Nuclei CLI / #70 Ward CLI PENDING / #71 pdn-152fz-audit / #72 threat-model / #73 security-go-live), 17-я off-phase подкатегория; провенанс-вет IS9; ADR-014. **v1.36 наследие** — §16.4 расширен симметрией missed activation (условное правило): эпизод с профильной классификацией (`tools/observer-classification-map.json`) при `node_chosen === 'direct'` и наличии non-dormant рекомендуемого узла → сигнал, surface в STATUS.md C5 + /brain-retro; DEFERRED-исключения через `tools/.node-dormancy.json`. **v1.35 наследие** — A1 backend-tooling §13.2 +абзац «Off-phase backend-tooling» (A1: #64 Rector / #65 PHP Insights / #66 laravel-backend-patterns / #67 NightOwl DEFERRED), 16-я off-phase подкатегория. **v1.34 наследие** — finance-tooling §13.2 +абзац «Off-phase finance-tooling» (C6+C7: #61 finance plugin / #62 billing-audit / #63 ru-tax-accounting). **v1.33 наследие** — observer factor-analysis phase 1.1 (ADR-011 amend): §16.2 — `decision_provenance.kind` расширен до 3 значений (`autonomous` \| `user_directed_method` \| `user_chose_from_options`); 3-й kind — collaborative-choice case (заказчик выбирает один из предложенных Claude вариантов в предыдущем ходе); §16.7 +абзац «Граница `user_chose_from_options`» — routing-gate НЕ блокирует этот kind (выбор из choice-space самого Claude, не навязанный извне метод). **v1.32 наследие** — observer factor-analysis extension (ADR-011 amend): §16.2 +абзац «Схема эпизода v2» (`schema_version`, `decision_provenance`, `environment`, `task_size`, `task_ref`, `prompt_signal`; `outcome` `unknown` при записи; +`hook_fired`/`interrupt`/`retry`/`time_burn`/`parse_gap`; `observer_error` маркер); §16.3 4→5 контролёров (+C5 observer-coverage-checker, warn-only); §16.7 (новое) routing-тег-дисциплина — Stop-хук `decision: block` при навязанном методе без тега, `stop_hook_active` guard против петли; §16.8 (новое) самодисциплина наблюдателя (`observer_error` маркер вместо тихого пропуска, `parse_gap` событие, C5 контролёр); §16.6 +cross-ref на factor-analysis spec. **v1.31 наследие** — Brain governance §16 implementation (ADR-011): §16.1 router-only, §16.2 observer scope B (5 mandatory fields incl. primary_rationale, 7 event kinds incl. routing_decision per spec v1.1), §16.3 4 controllers, §16.4 поведенческое правило «не использован ≠ проблема», §16.5 не override-floor §9, §16.6 cross-refs. **v1.30 наследие** — компакция «мозга» finding 3: §13.2 счётчики off-phase подкатегорий → пин на Tooling Прил. Н §0 (канон счётчиков); §14 заголовок +метка «(dormant — §14.9)». **v1.29 наследие** — +§14.9 «Текущий статус: изолирован (18.05.2026, dormant)» — Rec2 SYSTEM-аудита: ruflo изолирован от Claude-потока, артефакты сохранены; live-связи hooks/MCP/daemon отключены; queen-триггер §14.1 dormant. **v1.28 наследие** — §13.2 +абзац «Off-phase authoring-tooling + dev-support» (#56 skill-creator / #57 plugin-dev / #58 hookify — тринадцатая off-phase подкатегория authoring-tooling; #59 claude-code-setup / #60 context7 — четырнадцатая dev-support); ADR-010. **v1.27 наследие** — §15 hard-rule «Параллельные сессии» (15.1 субагенты+git Sonnet/Opus only, 15.2 нормативка+pre-flight sync с 8-позиционным списком файлов: Pravila/CLAUDE.md/Tooling/PSR_v1/MEMORY.md/Открытые_вопросы/docs/adr/*/db/schema.sql, 15.3 cross-refs); третье hard-rule после §12 и §14; +§10 changelog entry v1.27. **v1.26 наследие** — §13.2 +абзац «Off-phase discovery-tooling» (#55 discovery-interview — проектный скил, режимы FEATURE+SYSTEM); двенадцатая off-phase подкатегория. **v1.25 наследие** — §13.2 +абзац «Off-phase business-process» (#51 operations / #52 process-modeling / #53 process-analysis / #54 n8n-mcp DEFERRED — раздел C10 карты); одиннадцатая off-phase подкатегория. **v1.24 наследие** — §13.2 +абзац «Off-phase ml-ai-tooling» (#48 promptfoo / #49 Data Scientist skill / #50 Jupyter MCP DEFERRED — раздел A11 карты); десятая off-phase подкатегория. **v1.23 наследие** — §13.2 +абзац «Off-phase integration-tooling» (#47 openapi-mcp-server / api-docs agent — раздел A3 карты); девятая off-phase подкатегория. **v1.22 наследие** — §13.2 +абзац «Off-phase design-tooling» (#44 Figma MCP / #45 Universal Icons MCP / #46 Design plugin — раздел A4 карты); восьмая off-phase подкатегория. **v1.21 наследие** — §13.2 абзац «Off-phase architecture-tooling» расширен: +#43 deptrac (4-й инструмент категории, Composer dev-dep). **v1.20 наследие** — §13.2 +абзац «Off-phase project-management» (#41 CCPM / #42 product-management — раздел C9 карты); новая седьмая off-phase подкатегория. **v1.19 наследие** — §13.2 факт-правка #40 Security Guidance: блокирующий хук (`sys.exit 2`), не warn-only. **v1.18 наследие** — §13.2 +абзац «Off-phase audit-security» (#39 Trail of Bits Skills / #40 Security Guidance — раздел D3 карты). **v1.17 наследие** — §13.2 +абзац «Off-phase architecture-tooling» (#36 adr-kit / #37 mermaid-skill / #38 architecture-patterns — раздел A6 карты). **v1.16 наследие** — реколлаж ruflo: §1 убран уровень −1, ruflo переописан в advisory-подсистему; §14 queen-триггер сохранён. **v1.15 наследие** — §14 (new) Ruflo Queen routing hard-rule (триггер queen/королева). **v1.14 наследие** — §12 → sub-policy под ruflo routing (commit `9c3057b`); Superpowers hard-rule сохраняется. **v1.13 наследие** — §13.2 +новый абзац «Off-phase MCP debug-runtime (отдельная категория)»: `@sentry/mcp-server` (Tooling #34) + `@modelcontextprotocol/server-redis` (Tooling #35) — retrospective formalization после PR #3 merge. Категория отдельная от UI-пула и от infrastructure (claude-md-management). READ-ONLY usage обязателен. v1.12 наследие — methodology additions §4.6 visual smoke для UI-refactor + §4.7 п.4 plans/specs relative paths `../../../`) | +| **Правила совместного использования плагинов Claude** | [docs/Plugin_stack_rules_v1.md](docs/Plugin_stack_rules_v1.md) (**v3.24 от 14.06.2026** — research-tooling (Perplexity Pack): R10.1 Блок 3 +3 MCP-сервера (#87 perplexity / #88 exa / #89 firecrawl, READ-ONLY); R15.6 +research-tooling; 20-я off-phase подкатегория; ADR-019. **v3.23 наследие** — knowledge-graph-tooling: R10.1 Блок 1 note +graphifyy #86 (user-level скил, CLI `graphifyy`); R15.6 +knowledge-graph-tooling; 19-я off-phase подкатегория; ADR-017 (KG1–KG5). **v3.22 наследие** — C1 marketing-tooling: R10.1 Блок 1 +marketing (#74 plugin + #75 marketingskills + #76 brand-voice + #77 marketing-ru) + note (+Яндекс.Метрика MCP #78 / Яндекс.Директ+Wordstat MCP #79 / Telegram MCP #80 / Postiz #81 / DataForSEO MCP #82 DEFERRED / Unisender Go MCP #83 DEFERRED); R15.6 +marketing-tooling; 18-я off-phase подкатегория; не UI → вне R6/R14. **v3.21 наследие** — A8 infosec-tooling install-sync: ZAP #68 + Ward #70 установлены портативно 21.05 → R10.1 Блок 1 note + Блок 3 ZAP-row статус PENDING INSTALL снят. **v3.20 наследие** — A8 infosec-tooling install-sync: ZAP #68 + Ward #70 установлены портативно 21.05 → R10.1 Блок 1 note + Блок 3 ZAP-row статус PENDING INSTALL снят. **v3.20 наследие** — A8 infosec-tooling: R10.1 Блок 1 note +infosec (#69 Nuclei / #70 Ward — CLI; #71-73 self-authored скилы) + Блок 3 +OWASP ZAP MCP (#68, PENDING INSTALL); R15.6 +infosec-tooling; 17-я off-phase подкатегория. **v3.19 наследие** — A1 backend-tooling: R10.1 Блок 1 note +backend-tooling (#64 Rector / #65 PHP Insights — Composer dev-deps; #66 laravel-backend-patterns — self-authored; #67 NightOwl DEFERRED); R15.6 +backend-tooling; 16-я off-phase подкатегория. **v3.18 наследие** — finance-tooling: R10.1 Блок 1 +finance plugin (#61) + note (+billing-audit #62 / ru-tax-accounting #63). **v3.17 наследие** — observer schema v2 sync (ADR-011 amend): R16.1 +предложение про `schema_version` / `decision_provenance` / `environment` / `task_size` / `prompt_signal` + расширенные события (`hook_fired`/`interrupt`/`retry`/`time_burn`/`parse_gap`) + `observer_error` маркер; R16.4 +cross-ref на factor-analysis spec и plan. R0–R15 без изменений. Routing-gate / C5 / `/brain-retro` analyzer — нормативно в Pravila §16.7/§16.8 + ADR-011 §5; R16 фиксирует evidence-сбор, не enforcement. **v3.16 наследие** — Brain governance R16 «Brain evidence loop» (ADR-011): R16.1 observer scope (5 mandatory fields), R16.2 plugin stack-conscious events (routing_decision + factor matrix 5 axes), R16.3 не override (R16 evidence-сбор, не правило выбора), R16.4 cross-refs. 17 правил R0-R16. **v3.15 наследие** — компакция «мозга» finding 3: R10.1 счётчики позиций → пин на Tooling Прил. Н §0 (канон счётчиков). **v3.14 наследие** — +R15 «Off-phase routing» на свободном слоте (motion удалён v2.0): R15.1 off-phase узлы вне R6.0/R6.1/R14, R15.2 routing-таблица — `docs/routing-off-phase.md` v1.0+, R15.3 приоритет специфичности + ADR-границы, R15.4 hard-rules Pravila §12/§14/§15 перевешивают, R15.5 live-override, R15.6 гранулярные категории, R15.7 обычное правило. UI-аппарат R0–R14 без изменений. Rec5 SYSTEM-аудита. **v3.13 наследие** — R10.1 Блок 1 +5 строк (#56 skill-creator / #57 plugin-dev / #58 hookify / #59 claude-code-setup / #60 context7) + note (v3.13); новые тринадцатая (authoring-tooling) и четырнадцатая (dev-support) off-phase подкатегории, не UI → вне R6/R14; hookify HK1 pre-check. **v3.12 наследие** — R10.1 Блок 1 note (v3.12) +discovery-interview (#55, self-authored project-скил, discovery-tooling); новая двенадцатая off-phase подкатегория discovery-tooling, не UI → вне R6/R14. **v3.11 наследие** — R10.1 Блок 1 +operations (#51, business-process, marketplace-плагин) + Блок 1 note +process-modeling (#52) + process-analysis (#53, self-authored project-скилы) + Блок 3 +n8n-mcp (#54, DEFERRED); новая одиннадцатая off-phase подкатегория business-process, не UI → вне R6/R14. **v3.10 наследие** — R10.1 Блок 3 +Jupyter MCP (#50, ml-ai-tooling, DEFERRED) + Блок 1 note +promptfoo (#48) + Data Scientist skill (#49); новая десятая off-phase подкатегория ml-ai-tooling, не UI → вне R6/R14. **v3.9 наследие** — R10.1 Блок 3 +openapi-mcp-server (#47, integration-tooling); новая девятая off-phase подкатегория integration-tooling, не UI → вне R6/R14. **v3.8 наследие** — R10.1 Блок 1 +Design plugin (#46, design-tooling); Блок 3 +Universal Icons MCP (#45) + Figma MCP (#44, DEFERRED); новая восьмая off-phase подкатегория design-tooling, не UI → вне R6/R14. **v3.7 наследие** — R10.1 Блок 1 +note: deptrac #43 (Composer dev-dep, не marketplace-плагин, architecture-tooling), не UI → вне R6/R14. **v3.6 наследие** — R10.1 Блок 1 +2 строки (CCPM + product-management); новая категория project-management, не UI → вне R6/R14. **v3.5 наследие** — R10.1 факт-правка security-guidance: блокирующий хук, не warn-only. **v3.4 наследие** — R10.1 Блок 1 +2 строки (Trail of Bits Skills + security-guidance); новая категория audit-security, не UI → вне R6/R14. **v3.3 наследие** — R10.1 Блок 1 +2 строки (adr-kit + architecture-patterns) + note (mermaid-skill вендоренный); новая категория architecture-tooling, не UI → вне R6/R14. **v3.2 наследие** — реколлаж ruflo: R0 entry-point framing убран, ruflo advisory-подсистема. **v3.1 наследие** — queen-триггер §14. **v3.0 наследие** — major bump: R0 stack-gate → paired-stack delegation pattern (commit `d30cbeb`). **v2.1 наследие** — R10.1 Блок 3 (MCP-серверы) +2 строки sentry + redis с категорией **debug-runtime**: `@sentry/mcp-server@0.33.0+` (Tooling #34, pending Б-1) + `@modelcontextprotocol/server-redis@2025.4.25` (Tooling #35, deprecated Anthropic source, Memurai PONG verified Task 4). Не trigger'ит R6.0/R6.1 фильтры и не входит в R14 pipeline UI-генераторов. v2.0 наследие — major bump: removal of R15 motion-runtime restrictions per user decision 12.05.2026; conscious rollback v1.4 audited construction; framer-motion переведён из regulatory hard-запрета в technical-guidance уровень) | +| Полный реестр формализованных позиций тулчейна (счётчики — канон в Прил. Н §0) | [docs/Tooling_v8_3.md](docs/Tooling_v8_3.md) (**Прил. Н v2.25 от 14.06.2026** — research-tooling (Perplexity Pack): §4.60 #87 perplexity MCP + §4.61 #88 exa MCP + §4.62 #89 firecrawl MCP — 20-я off-phase подкатегория research-tooling (внешние MCP веб-разведки, READ-ONLY); §0 счётчик 84→87 (104→107 total); ADR-019 (RT1–RT9). **Прил. Н v2.24 наследие** — knowledge-graph-tooling: §4.59 #86 graphifyy (user-level скил `~/.claude/skills/graphify/SKILL.md`, CLI `graphifyy`, knowledge graph портала docs+code; `/graphify `; spike 6305 nodes / 6753 edges / 1009 communities, 93% EXTRACTED/7% INFERRED); §0 счётчик 83→84 (103→104 total) + 19-я подкатегория knowledge-graph-tooling; ADR-017 (KG1–KG5). **Прил. Н v2.23 наследие** — C1 marketing-tooling: §4.49 marketing plugin + §4.50 marketingskills + §4.51 brand-voice + §4.52 marketing-ru + §4.53 Яндекс.Метрика MCP + §4.54 Яндекс.Директ+Wordstat MCP + §4.55 Telegram MCP + §4.56 Postiz + §4.57 DataForSEO MCP (DEFERRED) + §4.58 Unisender Go MCP (DEFERRED); §0 счётчик 73→83 (93→103 total) + 18-я подкатегория marketing-tooling (раздел C1); ADR-015; IS9-вет (`docs/security/marketing-vet.md`). **Прил. Н v2.22 наследие** — pg_audit #28 + pg_anonymizer #29 установлены на боевом `liderra.ru` (расширения PostgreSQL фазы 3): §5.1 attribute-блоки #28/#29 + §6 compliance-таблица + §10.4 шаг 2 → ✅ прод; setup-dok `docs/security/pgaudit-anonymizer-setup.md`. **Прил. Н v2.21 наследие** — pg_audit #28 + pg_anonymizer #29 установлены на боевом `liderra.ru` (расширения PostgreSQL фазы 3): §5.1 attribute-блоки #28/#29 + §6 compliance-таблица + §10.4 шаг 2 → ✅ прод; setup-док `docs/security/pgaudit-anonymizer-setup.md`. **Прил. Н v2.21 наследие** — A8 infosec-tooling install-sync: ZAP #68 + Ward #70 установлены портативно 21.05 → §4.43/§4.45 dormant true→false, §4.48 уточнён, setup-доки `docs/security/{zap,ward}-setup.md`; счётчики без изменений (73/93). **Прил. Н v2.20 наследие** — A8 infosec-tooling: §4.43 OWASP ZAP #68 + §4.44 Nuclei #69 + §4.45 Ward #70 + §4.46 pdn-152fz-audit #71 + §4.47 threat-model #72 + §4.48 security-go-live #73; §0 счётчик 67→73 (87→93 total) + 17-я подкатегория infosec-tooling (раздел A8); ADR-014. **Прил. Н v2.19 наследие** — A1 backend-tooling: §4.39 Rector #64 + §4.40 PHP Insights #65 + §4.41 laravel-backend-patterns #66 + §4.42 NightOwl #67 (DEFERRED); §0 счётчик 63→67 (83→87 total) + 16-я подкатегория backend-tooling (раздел A1); ADR-013. **Прил. Н v2.18 наследие** — finance-tooling: §4.36 finance plugin #61 + §4.37 billing-audit #62 + §4.38 ru-tax-accounting #63; §0 счётчик 60→63 + 15-я подкатегория finance-tooling. **Прил. Н v2.17 наследие** — Brain governance Task A3 (ADR-011): §0.1 row template (9 obligatory attributes) + 58 Атрибуты blocks на всех узлах реестра. Дамп-блоки для phase-active (§2.4/§3.5/§5.1 для phase 0/1/3) + inline-блоки для phase-2 (§4.1-§4.4) и off-phase (§4.5-§4.35). dormant=true для #1 PG MCP (replaced), #17 pg_partman (no native Windows PG ext), ruflo §4.10. 6 atomic sub-batches: 1f77134/0718e41/16f7f1c/ca4da69/39231ef/3e73396 + header bump 8170527. Структурный реестр — вход для router-procedure.md (commit 8a2e701) step 3. **Прил. Н v2.16 наследие** — компакция «мозга» finding 3: §0 +«КАНОН СЧЁТЧИКОВ» anchor (Прил. Н §0 — единственный источник числовых счётчиков тулчейна); §12 заголовок — убран stale-счётчик «35». **v2.15 наследие** — §4.10 +status-block «ruflo ИЗОЛИРОВАН 18.05.2026» (live-связи hooks/MCP/daemon отключены, артефакты сохранены, queen-триггер dormant). Счётчики тулчейна без изменений — 60 формализованных позиций + 20 ruflo plugins = 80 total. Rec2 SYSTEM-аудита. **v2.14 наследие** — §4.31–§4.35 (#56 skill-creator / #57 plugin-dev / #58 hookify — authoring-tooling; #59 claude-code-setup / #60 context7 — dev-support — новые тринадцатая и четырнадцатая off-phase подкатегории); §0 счётчик 55→60 (75→80 total). **v2.13 наследие** — §4.30 (#55 discovery-interview, discovery-tooling — новая двенадцатая off-phase подкатегория); §0 счётчик 54→55. **v2.12 наследие** — §4.26/§4.27/§4.28/§4.29 (#51 operations / #52 process-modeling / #53 process-analysis / #54 n8n-mcp DEFERRED, business-process — новая одиннадцатая off-phase подкатегория); §0 счётчик 50→54. **v2.11 наследие** — §4.20 +UI3 (ADR-006 Decision-4 icon-path boundary mirror: Lucide-иконки канонически через `lucide-vue-next` + Vuetify IconSet, raw-SVG MCP — только не-Lucide коллекции). **v2.10 наследие** — §4.23/§4.24/§4.25 (#48 promptfoo / #49 Data Scientist skill / #50 Jupyter MCP DEFERRED, ml-ai-tooling — новая десятая off-phase подкатегория); §0 счётчик 47→50. **v2.9 наследие** — §4.22 (#47 openapi-mcp-server, integration-tooling — новая девятая off-phase подкатегория); §0 счётчик 46→47. **v2.8 наследие** — §4.19/§4.20/§4.21 (#44 Figma MCP / #45 Universal Icons MCP / #46 Design plugin, design-tooling — новая восьмая off-phase подкатегория); §0 счётчик 43→46. **v2.7 наследие** — §4.18 (#43 deptrac, architecture-tooling — 4-й инструмент категории); §0 счётчик 42→43. **v2.6 наследие** — §4.16/§4.17 (#41 CCPM / #42 product-management), новая седьмая off-phase подкатегория project-management; §0 счётчик 40→42. **v2.5 наследие** — §4.15 факт-правка #40 Security Guidance: блокирующий хук (`sys.exit 2`), не warn-only; +SG2 Windows-починка python3-резолва. **v2.4 наследие** — §4.14/§4.15 (#39 Trail of Bits Skills / #40 Security Guidance), новая шестая off-phase подкатегория audit-security; §0 счётчик 38→40. **v2.3 наследие** — §4.11–4.13 (#36 adr-kit / #37 mermaid-skill / #38 architecture-patterns), новая пятая off-phase подкатегория architecture-tooling; §0 счётчик 35→38. **v2.2 наследие** — реколлаж ruflo: §4.10 переписан из «entry-point оркестратора уровня −1» в «advisory/automation-подсистема». **v2.1 наследие** — queen-триггер §14. **v2.0 наследие** — §4.10 (новый) «Orchestration layer (ruflo)»: ruflo v3.7.0-alpha.38+ (off-phase, orchestration category). **v1.17 наследие** — §0 счётчик off-phase 3 → 5; итого 33 → 35; §4.8 (новый) — #34 Sentry MCP (`@sentry/mcp-server@0.33.0+`, official; pending Sentry instance deployment Б-1); §4.9 (новый) — #35 Redis MCP (`@modelcontextprotocol/server-redis@2025.4.25`, deprecated Anthropic source, рабочий с Memurai localhost:6379). Категория **debug-runtime**, отдельная от UI-пула. v1.16 наследие — §9.2 «Motion runtime библиотеки» переформулирован из regulatory denylist в technical guidance) | | Главное ТЗ | [docs/CRM_bp-gr_Инструкция_v8_5.md](docs/CRM_bp-gr_Инструкция_v8_5.md) (v8.5 от 07.05.2026 — реализация 27 решений аудита C; in-place hygiene v1.20 от 08.05.2026 поздний вечер: §2.4/§5.5/§5.6/§6.5/§11/§20.12.3/§21.1/§27.1 синхронизированы под schema v8.6 двустадийный dedup) | | Схема БД | [db/schema.sql](db/schema.sql) (**v8.19 от 11.05.2026** — Plan 4 (Billing+CSV+Admin): +1 таблица `supplier_csv_reconcile_log` SaaS-level, +3 колонки `tenants.delivered_in_month` / `lead_charges.charge_source` / `supplier_leads.recovered_from_csv_at`, +3 индекса, +2 CHECK. **Schema baseline (commit-факт после Audit #3 P2 header sync):** 63 базовые таблицы (61 regular + 2 partitioned parents: deals + supplier_lead_costs) + 12 партиций + 117 индексов + 39 RLS-политик + 5 функций (`audit_block_mutation`, `audit_chain_hash`, `calc_lead_score`, `report_jobs_log_export`, `set_pd_subject_request_deadline`) + 13 триггеров. **Dev `liderra` factual** после `migrate:fresh` + накопленных `partitions:create-months`: **75 root tables + 102 partition children + 289 indexes + 39 RLS + 5 user funcs + 19 triggers + 0 dev roles** (на prod 5 ролей через `db/00_create_roles.sql`). Verified 2026-05-12 audit Phase 3.) | | Открытые вопросы | [docs/Открытые_вопросы_v8_3.md](docs/Открытые_вопросы_v8_3.md) (**v1.83 от 13.05.2026 (day +1) — CTO-19 ✅ closed** через Lucide migration: `npm i lucide-vue-next ^1.0.0` + custom Vuetify `IconSet` в `app/resources/js/plugins/vuetify.ts` с 103-entry mapping (78 user-grep'нутых mdi-* + 25 Vuetify-internal defaults). 51 view untouched. CLAUDE.md §2 «Иконки: Lucide» бренд-spec compliance achieved. **Сводка §0 после v1.83: 87 продуктовых / 71 ✅ / 5 🟦 / 11 ⏸ / 1 P0 + 5 P1 + 3 P2 + 2 P3**. **Регрессия: Pest --parallel 742/739/0/3 / Vitest 88 files / 683 passed + 3 skipped / Vite build 3.52s / axe-core /admin/billing 0 iconography violations**. Spec/plan в docs/superpowers/. v1.82 — Catch-up bump v1.77 → v1.82. v1.77 — Sprint 4 «Audit tail» (Pest 421 / Vitest 416). Section ## 13 collision fixed: Plan 4 → ## 14, Аудит C ## 13) | @@ -176,6 +176,9 @@ | 82 | SEO-данные по РФ (платный) — **DEFERRED** — *off-phase* | **DataForSEO MCP** | off-phase, marketing-tooling — Tooling §4.57; post-Б-1, раздел C1 | | 83 | Email-маркетинг через Unisender Go (своя обёртка) — **DEFERRED** — *off-phase* | **Unisender Go MCP** | off-phase, marketing-tooling — Tooling §4.58; нет upstream MCP, раздел C1 | | 86 | Knowledge graph портала (docs + code) — *off-phase* | **graphifyy** | off-phase, knowledge-graph-tooling — Tooling §4.59; user-level скил `/graphify`; ADR-017 (KG1–KG5) | +| 87 | Веб-разведка: ранжированный ответ-с-источниками (sonar) — *off-phase* | **perplexity MCP** | off-phase, research-tooling — Tooling §4.60; READ-ONLY, ключ `PERPLEXITY_API_KEY` в env; ADR-019; связка L17 | +| 88 | Семантическое обнаружение источников по смыслу — *off-phase* | **exa MCP** | off-phase, research-tooling — Tooling §4.61; READ-ONLY, ключ `EXA_API_KEY` в env; ADR-019; связка L17 | +| 89 | Глубокое чтение/обход страниц (scrape/crawl/extract) — *off-phase* | **firecrawl MCP** | off-phase, research-tooling — Tooling §4.62; READ-ONLY, ключ `FIRECRAWL_API_KEY` в env; ADR-019; связка L17 | ### 3.4. Фаза 3 — pre-production (+5, итого 29) @@ -292,6 +295,8 @@ trivy image liderra:latest ## 6. Текущая фаза проекта +**2026-06-14 research-tooling (Perplexity Pack) — нормативный синк + реестр (Plan 2 + Plan 3):** Заведён off-phase слой **research-tooling** (20-я подкатегория) — три внешних MCP веб-разведки: **#87 perplexity** (`@perplexity-ai/mcp-server`, ранжированный ответ-с-источниками sonar: search/ask/research/reason), **#88 exa** (`exa-mcp-server`, семантическое/нейро обнаружение источников), **#89 firecrawl** (`firecrawl-mcp`, глубокое чтение/обход — scrape/crawl/extract/agent). Все три **READ-ONLY** (gate-постура read_only в `tools/mcp-tool-classifier.mjs` +тест, commit `bfc1f575`), платные API — ключи только в env (owner waiver), IS9-вет `docs/research/research-vet.md` — все три ПРИНЯТ. **Plan 1** (вет + перенос 3 блоков в `.mcp.json` + gate read_only) — закоммичен ранее. **Plan 3 (роутер/реестр):** `docs/registry/nodes.yaml` +3 узла + связка **L17** (research chain: brainstorming → perplexity → exa → firecrawl) + 3 contract-карточки (`docs/registry/contracts/{perplexity,exa,firecrawl}-mcp.contract.json` — инвариант Машина 3-E) + `tools/registry-load.test.mjs` 86→89/78→81 + `node tools/registry-render.mjs` (регенерация Tooling-summary + routing-table авто-блоков) + `docs/routing-off-phase.md` L17/version. Tools-регрессия **3931 passed / 2 skip / 0 fail**. (automation-graph viz отложена батчем — карта лагает с #84). **Plan 2 (нормативка, этот синк):** Tooling §4.60-62 + §0 счётчик 84→87 / 104→107 / off-phase +54→+57 + header v2.25; PSR R10.1 Блок 3 + R15.6 + header v3.24; Pravila §13.2 + header v1.44; CLAUDE.md §3.3/§0 cross-refs/§6/§9/header; ADR-019 (RT1–RT9 — границы research-tooling vs context7 #60 / openapi #47 / Boost #10 / Sentry+Redis #34/#35 / graphify #86 / GitHub #3). **§0 cross-refs МЕНЯЮТСЯ** (Pravila v1.43→v1.44 / PSR v3.23→v3.24 / Tooling Прил.Н v2.24→v2.25 — новая off-phase подкатегория). Под стеной «роутер-наставник»: Plan 3 — прямые правки (не ЗАКОН-файлы); Plan 2 — owner **FLOOR-ESCAPE per write** (нормативный §6-гейт требует владельца — `claude-md-management` для ЗАКОН-файлов недостаточен). Через прямой Edit под owner-escape. + **2026-06-01 lead region resolution — фича реализована TDD + запушена (PR в main):** Определение настоящего региона лида по телефону (DaData → реестр Россвязи → tag-fallback) + каскадная маршрутизация по региону (exact→all-RF→fallback) со взвешенным жребием по остатку дневного лимита (вариант В, вес ≥ 1 — мелкие клиенты не отрезаются). Состав: `LeadRegionResolver` (каскад по qc-кодам DaData) + `DaData/*` (клиент / страж бюджета / enum кодов качества / исключения) + `DaDataRegionMap` + `RossvyazPrefixLookup` + `RossvyazRecord`/`RegionResolution` DTO + команда `phone-ranges:import` (parse/map/dry-run/idempotency, atomic RENAME-swap в транзакции) + `LeadRouter` переписан (`matchEligibleProjects` + region-фильтр + `weightedPick` + инъекция `Randomizer`) + интеграция в `RouteSupplierLeadJob` (резолв ДО tx / persist 4 колонки / fail-safe аудит-лог `lead_region_resolution_log` / подмена subject_code на шаге 3 / CSV-merge по рангу источника `dadata/rossvyaz > CSV-tag`) + `phone-region:smoke`. Миграция `2026_05_31_100000` (`phone_ranges` / `phone_ranges_imports` / `lead_region_resolution_log` партиц. по месяцам + колонки на supplier_leads/deals) + регистрация в `MonthlyPartitionManager`; `db/schema.sql` синхронизирован заголовком (v8.40), DDL — в дельта-миграции (иначе двойной CREATE TABLE сломал бы migrate). **Решения заказчика/проекта:** резолвер через `app()` внутри `handle()` (не 7-й параметр — сохраняет сигнатуру + 3 существующих теста джобы); `deals.region_source` не добавляли (источник на supplier_leads + в журнале, CSV-merge по эвристике); запуск сразу на 100% без долевого гейта. **14 атомарных коммитов** `ec219718..11079791` на ветке `worktree-feat+lead-region-resolution`, запушено в origin (`CoralMinister/lidpotok`), **PR в main открывается вручную** по ссылке из `git push` output (MCP `create_pull_request` + `gh pr create` оба заблокированы router-гейтом). Тесты **101 pest GREEN / 509 assertions**; tools-vitest **1989 GREEN**. Code-review subagent (вердикт «с правками») → починены `atomicSwap()`→транзакция (spec §6.2) + убран stray comment; minor/deferred задокументированы (метрики §8.1 / `phone-ranges:rollback` / pg_anonymizer-маски / калибровка `DADATA_CALL_COST_KOPECKS`). Прод-выкатка отложена (нужны `DADATA_API_KEY`/`DADATA_SECRET` в YC Lockbox + команда «запускаем»; runbook `docs/superpowers/runbooks/2026-05-31-lead-region-resolution-rollout.md`). Пре-существующий долг (НЕ из фичи, отдельная задача): 3 чужих console-теста (`BillingMigrateLeadsToRub` / `IncidentsWatchFailures` / `SnapshotBackfillCommand`) взаимно загрязняются в одном процессе (накопление счётчиков), в CI `pest --parallel` (файл=процесс) проходят. **Lefthook в worktree-shell не в PATH** → cspell/larastan/squawk/deptrac не гонялись на коммитах; deptrac проверен инспекцией (Service→Service разрешён), новые cspell-термины (Rossvyaz/DaData/kopecks) добавлены в `cspell-words.txt`, остальное — CI на push. **§0 cross-refs НЕ меняются** — app-фича (сервисы/джоба/миграция), не tooling-канон #1-#86 / не ADR / не off-phase. Через `claude-md-management:revise-claude-md`. **2026-05-31 (продолжение) router-gate v4 Layer 4 LLM-judge — item 2b live wiring + активация владельцем + readonly-калибровка:** `tools/enforce-llm-judge-per-tool.mjs` (PreToolUse) и `tools/enforce-llm-judge-response-scan.mjs` (Stop) получили живой `main()` (TDD, чистые `runPerTool`/`runResponseScan`; commit `dfae9f76`). Spend строго гейтится `resolveJudgeConfig()` (флаг `ROUTER_LLM_JUDGE_ENABLED` И ключ); без флага/ключа `decide()` короткозамыкается → $0. **Архитектурный нюанс:** регистрировать надо именно **обёртки** `enforce-llm-judge-*`, не движки `llm-judge-{per-tool,response-scan}.mjs` — у движков `main()` зовёт `llmJudgeCall` по наличию ОДНОГО ключа, игнорируя флаг (т.е. движок начал бы тратить деньги без рубильника). **Владелец активировал Layer 4** (env `ROUTER_LLM_JUDGE_ENABLED=1` через `rundll32 sysdm.cpl,EditEnvironmentVariables` + ключ `ROUTER_LLM_KEY` уже был в user env, как у классификатора + регистрация обоих хуков в `.claude/settings.json` + перезапуск) → судья ожил в **hard-block** (подтверждено: тот же `git log`, что при выключенном флаге проходил мгновенно, после активации заблокирован реальным вызовом — verdict ≠ YES → block). **Операционная находка / over-block:** `MUTATING_TOOLS` в `llm-judge-per-tool.mjs` включает `Bash` целиком, а правило вопроса — «Сомнения → NO» + код «не-YES → block», поэтому живой судья блокировал даже readonly-просмотры (`git status`/`git log`/`grep`) — и тем самым полностью клинил рабочий цикл (commit/push/правки тоже под судьёй). **Калибровка** (commit `c9b9efd6`, TDD, судья на время выключался владельцем — правка кода тоже под судьёй): новый экспортируемый `isReadonlyBashEvent(event)` — если tool=Bash и `classifyBashCommand(command, {})` даёт `result==='allow'` с reason `readonly|reading`, `runPerTool` возвращает allow **до** обращения к судье (без LLM-вызова, без budget-bump). Это **scope-fix к собственной декларации судьи** («judge on mutating tools»), а **не понижение дисциплины**: правило doubt→block и полная проверка всего, что реально меняет состояние (Edit/Write/MultiEdit/git commit/push/Skill/Task), — без изменений. Регрессия vitest tools-only **1927 GREEN** (+13 калибровочных тестов; verify через `npx vitest run --root app --config vitest.config.tools.mjs`, т.к. `npm run test:tools` падает из-за параллельной keytar-установки в `app/node_modules`). Коммиты `dfae9f76` (live wiring) + `c9b9efd6` (калибровка); push `a8996896..c9b9efd6 main`. План `docs/superpowers/plans/2026-05-31-llm-judge-live-wiring.md`. **§0 cross-refs НЕ меняются** — инфраструктура `tools/enforce-*.mjs`, не tooling-канон #1-#86 / не ADR / не off-phase. Через `claude-md-management:revise-claude-md`. @@ -409,6 +414,7 @@ trivy image liderra:latest Полная история — [docs/CHANGELOG_claude_md.md](docs/CHANGELOG_claude_md.md) (вынесена 09.05.2026 при правке v1.73→v1.74 ради лаконичности шапки). Здесь — последние правки: +- **v2.46 от 14.06.2026 — research-tooling (Perplexity Pack): нормативный синк #87-89 + ADR-019 (Plan 2) + реестр/роутер (Plan 3)** — off-phase слой research-tooling (20-я подкатегория): #87 perplexity + #88 exa + #89 firecrawl (внешние MCP веб-разведки, READ-ONLY, платные API — ключи в env, gate read_only `bfc1f575`, IS9-вет `docs/research/research-vet.md` все ПРИНЯТ). **Plan 3** (роутер/реестр): nodes.yaml +3 узла + L17 (research chain) + 3 contract-карточки (Машина 3-E инвариант) + registry-load.test 86→89/78→81 + `node tools/registry-render.mjs` (регенерация Tooling-summary + routing-table) + routing-off-phase L17/v1.7; tools-регрессия **3931 passed / 2 skip**. **Plan 2** (нормативка): Tooling §4.60-62 + §0 счётчик 84→87 / 104→107 / off-phase +54→+57 + header v2.25; PSR R10.1 Блок 3 + R15.6 + header v3.24; Pravila §13.2 + header v1.44; CLAUDE.md §3.3/§0 cross-refs/§6/§9/header; ADR-019 (RT1–RT9 — границы vs context7 #60 / openapi #47 / Boost #10 / Sentry+Redis #34/#35 / graphify #86 / GitHub #3). **§0 cross-refs МЕНЯЮТСЯ** — Pravila v1.43→v1.44 / PSR v3.23→v3.24 / Tooling Прил.Н v2.24→v2.25 (новая off-phase подкатегория). Под стеной «роутер-наставник»: Plan 3 — прямые правки (не ЗАКОН-файлы); Plan 2 ЗАКОН-файлы — через owner **FLOOR-ESCAPE per write** (нормативный §6-гейт требует владельца, `claude-md-management` недостаточен). automation-graph viz отложена батчем (карта лагает с #84-86). Через прямой Edit под owner-escape. - **v2.45 от 01.06.2026 — lead region resolution (определение региона лида по телефону + каскадная маршрутизация)** — app-фича, TDD (Сессии 1-6). `LeadRegionResolver` (каскад по qc DaData → реестр Россвязи → tag-fallback) + слой `DaData/*` + `DaDataRegionMap` + `RossvyazPrefixLookup` + DTO + команда `phone-ranges:import` (atomic RENAME-swap в транзакции) + `LeadRouter` каскад (exact→all-RF→fallback) + взвешенный жребий по остатку лимита (вариант В) + интеграция в `RouteSupplierLeadJob` (резолв до tx / persist / fail-safe лог / подмена региона шаг 3 / CSV-merge по рангу источника) + `phone-region:smoke`. Миграция `2026_05_31_100000` + регистрация в `MonthlyPartitionManager`; `db/schema.sql` v8.40 (заголовок; DDL в дельта-миграции). **14 атомарных коммитов** `ec219718..11079791` на ветке `worktree-feat+lead-region-resolution`, запушено + PR в main (`CoralMinister/lidpotok`; PR открывается вручную — MCP/gh заблокированы гейтом). Тесты 101 pest GREEN / 509 assertions; tools-vitest 1989 GREEN. Code-review subagent «с правками» → atomicSwap-транзакция (spec §6.2) + stray comment починены; minor/deferred задокументированы (метрики §8.1 / `phone-ranges:rollback` / pg_anonymizer / DaData call-cost калибровка). Прод-выкатка отложена (DADATA keys в YC Lockbox + команда «запускаем»; runbook `docs/superpowers/runbooks/2026-05-31-lead-region-resolution-rollout.md`). Пре-существующий долг (не из фичи): 3 чужих console-теста взаимно загрязняются в одном процессе, в CI `pest --parallel` проходят. **§0 cross-refs не меняются** — app-фича (сервисы/джоба/миграция), не tooling-канон / не ADR / не off-phase. §6 +абзац / §9 +этот entry. Через `claude-md-management:revise-claude-md`. - **v2.44 от 31.05.2026 — Layer 4 LLM-judge live wiring (item 2b) + активация владельцем + readonly-калибровка** — живой `main()` в обёртках `enforce-llm-judge-{per-tool,response-scan}.mjs` (TDD, `runPerTool`/`runResponseScan`; spend гейтится `resolveJudgeConfig`=флаг+ключ; регистрировать обёртки, не движки — движок тратит по одному ключу мимо флага); commit `dfae9f76`. Владелец активировал Layer 4 (`ROUTER_LLM_JUDGE_ENABLED=1` + `ROUTER_LLM_KEY` + оба хука в settings.json + перезапуск) → судья в hard-block, подтверждён реальным блоком. Over-block: `MUTATING_TOOLS` включает Bash целиком + doubt→block → судился даже readonly `git status`/`log`, клинило рабочий цикл. Калибровка (commit `c9b9efd6`, TDD): `isReadonlyBashEvent` исключает readonly Bash из per-tool судьи до LLM-вызова (scope-fix; дисциплина doubt→block на реальных мутациях **не тронута**). Регрессия **1927 GREEN**. Push `a8996896..c9b9efd6`. План `docs/superpowers/plans/2026-05-31-llm-judge-live-wiring.md`. **§0 cross-refs не меняются** (инфраструктура `tools/`, не tooling-канон / не ADR / не off-phase). §6 +абзац / §9 +этот entry. Через `claude-md-management:revise-claude-md`. diff --git a/docs/Plugin_stack_rules_v1.md b/docs/Plugin_stack_rules_v1.md index c534aa3a..23d7d8e6 100644 --- a/docs/Plugin_stack_rules_v1.md +++ b/docs/Plugin_stack_rules_v1.md @@ -1,8 +1,10 @@ -# Plugin Stack Rules — Superpowers + Frontend Design (v3.23) +# Plugin Stack Rules — Superpowers + Frontend Design (v3.24) -**Дата:** 27.05.2026 +**Дата:** 14.06.2026 **Назначение:** свод правил совместного использования плагинов Claude Code в проекте Лидерра — paired-stack ядро `obra/superpowers` (14 skills) + `anthropics/frontend-design`, плюс расширенный пул UI-инструментов `ui-ux-pro-max` (skill, marketplace `nextlevelbuilder/ui-ux-pro-max-skill`) и `21st.dev Magic MCP` (MCP-сервер `magic`), плюс инфраструктурный `claude-md-management` (skills, marketplace `anthropics/claude-plugins-official`), плюс **debug-runtime MCP** `@sentry/mcp-server` + `@modelcontextprotocol/server-redis` (v2.1+, R10.1 Блок 3). **17 правил R0–R16** (R15 off-phase routing введён в v3.14 на освободившийся после v2.0 R15-motion слот; R16 brain evidence loop введён в v3.16). +**v3.24** — research-tooling (Perplexity Pack): R10.1 Блок 3 +3 MCP-сервера **perplexity** #87 / **exa** #88 / **firecrawl** #89 (внешняя веб-разведка, READ-ONLY, платные API — ключи только в env, gate read_only `bfc1f575`). Новая 20-я off-phase подкатегория **research-tooling**; R15.6 +research-tooling. ADR-019 (RT1–RT9). User-level/external MCP, не UI → вне R6.0/R6.1/R14. Содержательных изменений R0–R16: 0. Связано: Tooling v2.25 (§4.60–§4.62 + §0 счётчик 84→87), Pravila v1.44 (§13.2 +абзац), CLAUDE.md v2.46 (§3.3 +#87-89; §0 cross-refs); план `docs/superpowers/plans/2026-06-14-perplexity-pack-plan3-router-registry.md`. + **v3.23** — knowledge-graph-tooling: R10.1 Блок 1 note +**graphifyy** #86 (user-level скил `~/.claude/skills/graphify/SKILL.md`, CLI `graphifyy`, строит knowledge graph портала; активация `/graphify `; артефакты `graphify-out*/` gitignored). Новая 19-я off-phase подкатегория **knowledge-graph-tooling** (раздел A12/graph карты). User-level скил, не project-level → вне R6.0/R6.1/R14. R15.6 +knowledge-graph-tooling. ADR-017 (KG1–KG5). Содержательных изменений R0–R16: 0. Связано: Tooling v2.24 (§4.59 + §0 счётчик 83→84), Pravila v1.43 (§13.2 +абзац), CLAUDE.md v2.31 (§3.3 +#86; §0 cross-refs). **v3.22** — C1 marketing-tooling: R10.1 Блок 1 +2 строки (**marketing** #74, Anthropic `knowledge-work-plugins/marketing`; **brand-voice** #76, Anthropic partner-built/Tribe AI) + Блок 1 note (v3.22 — **marketingskills** #75 вендорен MIT, материал/резерв-библиотека; **marketing-ru** #77 self-authored project-скил, eval 20/20) + Блок 3 +6 строк (**Метрика MCP** #78 `atomkraft/yandex-metrika-mcp` READ-ONLY; **Директ+Wordstat MCP** #79 `SvechaPVL/yandex-mcp` Wordstat-only, Direct-mutations disabled IS9; **Telegram MCP** #80 `chigwell/telegram-mcp` Apache-2.0; **Postiz MCP** #81 self-host AGPL-3.0 internal; **DataForSEO MCP** #82 DEFERRED — платный post-Б-1; **Unisender Go MCP** #83 DEFERRED — своя обёртка). Новая 18-я off-phase подкатегория **marketing-tooling** (раздел C1 карты). Не UI → вне R6.0/R6.1/R14. R15.6 +marketing-tooling. Провенанс-вет IS9 выполнен (`docs/security/marketing-vet.md`, 5 инструментов PASS/PASS-with-conditions). Содержательных изменений R0–R14, R16: 0. Связано: Tooling v2.23+, Pravila v1.42+, CLAUDE.md v2.27+; план `docs/superpowers/plans/2026-05-22-c1-marketing-tooling.md`; spec `docs/superpowers/specs/2026-05-22-c1-marketing-tooling-design.md`. @@ -516,6 +518,9 @@ Stack — **головной**. Все плагины вне stack'а — **ин | **Postiz MCP** *(`postiz-mcp` сервер)* — **self-hosted AGPL-3.0** | `.mcp.json` (stdio MCP, `antoniolg/postiz-mcp`; precondition: запущенный self-hosted Postiz `gitroomhq/postiz-app`, AGPL-3.0 — допустим для внутреннего self-host без дистрибуции) | **marketing-tooling MCP** — мультиканальный постинг в соцсети (VK через Postiz, Telegram, и др.). Категория: **marketing-tooling** (Tooling #81). Раздел C1 карты. Off-phase. Провенанс-вет C1-5 PASS-with-conditions | при мультиканальном постинге контента. AGPL-3.0: self-host as-is без модификаций, copyright сохранить. Проверить лицензию `antoniolg/postiz-mcp` перед активацией (Open note в marketing-vet.md). Не trigger'ит R6.0/R6.1/R14 | | **DataForSEO MCP** *(`dataforseo-mcp` сервер)* — **DEFERRED** | `.mcp.json` (stdio MCP, `dataforseo/mcp-server-typescript`, ~204★ официальный) — не установлен; precondition: платный аккаунт DataForSEO | **marketing-tooling MCP** — SEO-данные (ключевые слова, SERP, backlinks, технический SEO-аудит). Категория: **marketing-tooling** (Tooling #82). Раздел C1 карты. Off-phase | DEFERRED — **платный** аккаунт DataForSEO; активация после Б-1. Зарегистрирован как pending-слот (как Figma MCP #44). Не trigger'ит R6.0/R6.1/R14 | | **Unisender Go MCP** *(своя обёртка)* — **DEFERRED** | `.mcp.json` (stdio MCP — нет готового upstream-сервера; обёртка над Unisender Go API пишется по мере необходимости) | **marketing-tooling MCP** — email-маркетинг через Unisender Go (массовые рассылки, шаблоны, аналитика доставки). Категория: **marketing-tooling** (Tooling #83). Раздел C1 карты. Off-phase | DEFERRED — нет готового MCP-сервера Unisender Go; написать тонкий wrapper когда понадобится массовая рассылка. Unisender Go уже в стеке как SMTP-relay (транзакционный). Зарегистрирован как pending-слот. Не trigger'ит R6.0/R6.1/R14 | +| **perplexity MCP** *(`perplexity` сервер, tools `mcp__perplexity__*`)* | `.mcp.json` (stdio MCP, `@perplexity-ai/mcp-server`; env `PERPLEXITY_API_KEY` + `PERPLEXITY_BASE_URL` через AITUNNEL — только в env) | **research-tooling MCP** — ранжированный веб-ответ с источниками (search/ask/research/reason поверх sonar). Категория: **research-tooling** (Tooling §4.60 #87). Off-phase. Провенанс-вет `docs/research/research-vet.md` ПРИНЯТ; gate read_only (`bfc1f575`) | при веб-разведке (актуальные практики/нормы/конкуренты, deep-research). **READ-ONLY**; платный API, без авто-трат. Связка L17 (research chain). Не trigger'ит R6.0/R6.1/R14. Вне R6/R14. ADR-019 | +| **exa MCP** *(`exa` сервер, tools `mcp__exa__*`)* | `.mcp.json` (stdio MCP, `exa-mcp-server` exa-labs; env `EXA_API_KEY` — только в env) | **research-tooling MCP** — семантическое/нейро обнаружение источников (`web_search_exa` / `web_fetch_exa`). Категория: **research-tooling** (Tooling §4.61 #88). Off-phase. Провенанс-вет ПРИНЯТ | при обнаружении источников по смыслу (что keyword-поиск пропускает). **READ-ONLY**; платный API. Связка L17. Не trigger'ит R6.0/R6.1/R14. Вне R6/R14. ADR-019 | +| **firecrawl MCP** *(`firecrawl` сервер, tools `mcp__firecrawl__*`)* | `.mcp.json` (stdio MCP, `firecrawl-mcp` Firecrawl/Mendable; env `FIRECRAWL_API_KEY` — только в env) | **research-tooling MCP** — глубокое чтение/обход веба (scrape/batch/map/search/crawl/extract + agent). Категория: **research-tooling** (Tooling §4.62 #89). Off-phase. Провенанс-вет ПРИНЯТ | при глубоком чтении страницы / обходе сайта / извлечении структурированного. **READ-ONLY** (read-тяжёлый); платный API. Связка L17. Не trigger'ит R6.0/R6.1/R14. Вне R6/R14. ADR-019 | **Отмена:** через удаление из `~/.claude.json` или `.mcp.json`. Live-override через `/команду` для MCP не предусмотрен — MCP-серверы не имеют slash-интерфейса. @@ -848,7 +853,7 @@ Pravila §12 (Superpowers инвокация первой), §14 (queen-роут - **UI-пул** (#31 UPM, #32 21st) — здесь R15 не применяется; R14 pipeline ведёт (это UI-задачи по природе). - **infrastructure** (#33 claude-md-management) — единственный канал для правок CLAUDE.md (Pravila §5 п.10 + R10.1 Блок 1). - **authoring-tooling** (#56-#58) — политика триггеров: skill-creator ≥3 повторений workflow → новый скил; hookify повторяющаяся ошибка → новый хук (с pre-check HK1); plugin-dev — для расширений plugin-grain. -- **business-process / discovery-tooling / ml-ai-tooling / architecture-tooling / audit-security / project-management / design-tooling / integration-tooling / dev-support / finance-tooling / backend-tooling / infosec-tooling / marketing-tooling / knowledge-graph-tooling** — следуют routing-off-phase.md. +- **business-process / discovery-tooling / ml-ai-tooling / architecture-tooling / audit-security / project-management / design-tooling / integration-tooling / dev-support / finance-tooling / backend-tooling / infosec-tooling / marketing-tooling / knowledge-graph-tooling / research-tooling** — следуют routing-off-phase.md. ### 15.7. Тип правила и enforcement diff --git a/docs/Pravila_raboty_Claude_v1_1.md b/docs/Pravila_raboty_Claude_v1_1.md index 6e7726cd..fa1bb020 100644 --- a/docs/Pravila_raboty_Claude_v1_1.md +++ b/docs/Pravila_raboty_Claude_v1_1.md @@ -1,7 +1,7 @@ # Правила работы Claude в проекте «Лидерра» -**Версия:** v1.43 (27.05.2026) -**Дата:** 27.05.2026 +**Версия:** v1.44 (14.06.2026) +**Дата:** 14.06.2026 **Назначение:** настройки проекта (Project instructions) — Claude читает этот файл в каждом чате и следует правилам ниже. **Статус документа:** ✅ утверждён. Содержимое скопировано в поле "Project instructions" Claude.ai. Файл хранится в архиве как служебный документ. @@ -748,6 +748,8 @@ Frontend Design и `obra/superpowers` (v5.1.0, 14 skills) — **парный sta **Off-phase knowledge-graph-tooling (v1.43, 27.05.2026):** #86 `graphifyy` (Tooling §4.59; CLI-инструмент, установка `uv tool install graphifyy`; user-level skill `~/.claude/skills/graphify/SKILL.md` установлен через `/graphify install --platform claude`). **Активация:** через явный вызов `/graphify <команда>` — `query` / `path` / `explain` / `update` / `build`; не проактивно. Граф знаний всего портала Лидерры (docs + .claude/ + app/) для cross-layer навигации — «где вызывается функция», «как модуль X связан с Y», «структурные зависимости spec→code». Spike 27.05.2026: combined граф 6305 узлов / 6753 рёбер / 1009 communities (93% EXTRACTED / 7% INFERRED). **Артефакты `graphify-out*/` обязательно в `.gitignore`**. Backend экстракции: GEMINI_API_KEY (если есть) ИЛИ Claude Code subagent dispatch (применяется в Лидерре). Граничные правила ADR-017: KG1 (vs context7 #60 — внутренний codebase vs внешние SDK-доки), KG2 (vs Boost #10 — статический граф vs runtime-queries), KG3 (vs openapi-mcp #47 — весь проект vs один спек), KG4 (vs Sentry MCP #34 — структура vs runtime errors), KG5 (vs adr-kit #36 / mermaid #37 — auto-discovery vs manual authoring). **Девятнадцатая** off-phase подкатегория. Off-phase, не UI → вне R6.0/R6.1/R14 PSR_v1. Регулируется PSR_v1 R10.1 Блок 1 note + R15.6 knowledge-graph-tooling. +**Off-phase research-tooling (Perplexity Pack, v1.44, 14.06.2026):** Внешние MCP-серверы веб-разведки — #87 `perplexity` (Tooling §4.60; `@perplexity-ai/mcp-server`, READ-ONLY; ранжированный ответ-с-источниками поверх sonar: search/ask/research/reason; первичный «дай ответ-с-источниками»; базовый URL через AITUNNEL, ключ `PERPLEXITY_API_KEY` только в env), #88 `exa` (Tooling §4.61; `exa-mcp-server` exa-labs, READ-ONLY; семантическое/нейро обнаружение источников — web_search_exa/web_fetch_exa — находит концептуально близкое, что keyword-поиск пропускает; ключ `EXA_API_KEY` только в env), #89 `firecrawl` (Tooling §4.62; `firecrawl-mcp` Firecrawl/Mendable, READ-ONLY read-тяжёлый; глубокое чтение/обход — scrape/batch/map/search/crawl/extract + agent; ключ `FIRECRAWL_API_KEY` только в env). Все три — **READ-ONLY** (gate-постура read_only зафиксирована в коде, commit `bfc1f575`); **платные API**, ключи только в env, без авто-трат (owner waiver). Провенанс-вет IS9 (`docs/research/research-vet.md`) — все три **ПРИНЯТ** ДО формализации. Связка L17 (research chain): perplexity (ответ) → exa (обнаружение) → firecrawl (чтение). **Двадцатая** off-phase подкатегория. Off-phase, не UI → вне R6.0/R6.1/R14 PSR_v1. Счётчики инструментов — канон [Tooling Прил. Н §0](Tooling_v8_3.md). Границы — ADR-019 (RT1–RT9: research-tooling = открытый веб vs context7 #60 SDK-доки / openapi #47 наш REST / Boost #10 Laravel / Sentry+Redis #34/#35 runtime / graphify #86 внутренний граф / GitHub #3 репо). Регулируется PSR_v1 R10.1 Блок 3 + R15.6 research-tooling. Plan `docs/superpowers/plans/2026-06-14-perplexity-pack-plan3-router-registry.md`. + ### 13.3. Скоуп | Тип задачи | Кто отвечает | diff --git a/docs/Tooling_v8_3.md b/docs/Tooling_v8_3.md index eabb3726..39bf5f79 100644 --- a/docs/Tooling_v8_3.md +++ b/docs/Tooling_v8_3.md @@ -1,7 +1,7 @@ # Приложение Н — Tooling, скиллы и плагины Claude (v8.3) **Дата:** 27.05.2026 -**Версия:** 2.24 (Прил. Н v2.24 — knowledge-graph-tooling: §4.59 (#86) graphifyy — 19-я off-phase подкатегория **knowledge-graph-tooling** (skill-based CLI, user-level `~/.claude/skills/graphify/`); §0 счётчик 83→84 (103→104 total), off-phase row +53→+54; cross-ref Pravila v1.43+ / PSR_v1 v3.23+ / CLAUDE.md v2.32+; ADR-017 (KG1–KG5). Граничные правила: KG1 ↔ context7 #60 (внутренний codebase vs внешние SDK-доки), KG2 ↔ Boost #10 (static graph vs runtime queries), KG3 ↔ openapi-mcp #47 (весь проект vs один спек), KG4 ↔ Sentry MCP #34 (структурные связи vs runtime errors), KG5 ↔ adr-kit #36 / mermaid #37 (auto-discovery vs manual authoring). Spike `spike/graphify-2026-05-27`: 3 фазы (docs/ + .claude/ + app/) → ultimate combined граф 6305 узлов / 6753 рёбер / 1009 communities (93% EXTRACTED / 7% INFERRED). Артефакты `graphify-out*/` обязательно gitignored. **Прил. Н v2.23 наследие** — C1 marketing-tooling: §4.49–§4.58 (#74–#83) — 18-я off-phase подкатегория **marketing-tooling** (раздел C1 «Маркетинг и лидогенерация»); §0 счётчик 73→83 (93→103 total), off-phase row +43→+53; cross-ref Pravila v1.42+ / PSR_v1 v3.22+ / CLAUDE.md v2.28+; ADR-015 (MKT1–MKT10). Узлы: #74 marketing plugin (Anthropic, 8 скилов — первичный решатель C1) + #75 marketingskills (вендоренный скил-набор, MIT, 40 скилов — материал, модель UPM) + #76 brand-voice (Anthropic partner Tribe AI, 3 скила — вербальный бренд) + #77 marketing-ru (self-authored project-скил, РФ-специфика C1) + #78 Яндекс.Метрика MCP (`atomkraft/yandex-metrika-mcp`, MIT, READ-ONLY, выбран по IS9-вету из 3 кандидатов) + #79 Яндекс.Директ+Wordstat MCP (`SvechaPVL/yandex-mcp`, MIT — **только Wordstat-инструменты; Direct-мутации НЕ активированы** per IS9) + #80 Telegram MCP (`chigwell/telegram-mcp`, Apache-2.0, выделенный аккаунт) + #81 Postiz (`gitroomhq/postiz-app`, AGPL-3.0, внутренний self-host без модификаций и дистрибуции) + #82 DataForSEO MCP (**DEFERRED** — платный, после Б-1) + #83 Unisender Go MCP (**DEFERRED** — нет готового upstream-сервера, своя обёртка по потребности). IS9-вет выполнен: `docs/security/marketing-vet.md` — все 5 внешних PASS/PASS-with-conditions; VK standalone MCP отброшен (0★, право тратить бюджет). Plan `docs/superpowers/plans/2026-05-22-c1-marketing-tooling.md`. **Прил. Н v2.22 наследие** — pg_audit #28 + pg_anonymizer #29 **установлены на боевом liderra.ru 22.05.2026** (расширения PostgreSQL фазы 3, ранее недоступные на dev native-Windows): §5.1 attribute-блоки #28/#29 + §6 compliance-таблица + §10.4 шаг 2 → ✅ прод; setup-док `docs/security/pgaudit-anonymizer-setup.md`; cross-ref Pravila v1.38 / PSR_v1 v3.21 / CLAUDE.md v2.26; счётчики без изменений (#28/#29 уже в phase-3). **Прил. Н v2.21 наследие** — A8 infosec-tooling install-sync: ZAP #68 + Ward #70 **установлены портативно 21.05.2026** (без choco — Go 1.26.3/Temurin JRE 17 zip с проверкой SHA256, всё в `bin/*` gitignored) → статус PENDING INSTALL снят в §4.43/§4.45 (dormant true→false) + §4.48 уточнён; setup-доки `docs/security/zap-setup.md` + `docs/security/ward-setup.md`; счётчики/состав реестра без изменений (73 формализованных / 93 total); cross-ref Pravila v1.38 / PSR_v1 v3.21 / CLAUDE.md v2.25; план `docs/superpowers/plans/2026-05-21-a8-infosec-tooling.md`. **v2.20 наследие:** Прил. Н v2.20 — A8 infosec-tooling: §4.43 #68 OWASP ZAP (MCP add-on, глубокая боевая DAST — **PENDING INSTALL**: нет Java) + §4.44 #69 Nuclei (CLI-бинарь `bin/nuclei.exe` v3.8.0, известные уязвимости — УСТАНОВЛЕН+verified; CLI не MCP) + §4.45 #70 Ward (CLI Go-бинарь, безопасность настроек Laravel — ЗАМЕНИЛ Enlightn abandoned/L13, **PENDING INSTALL**: нет Go) + §4.46 #71 pdn-152fz-audit + §4.47 #72 threat-model + §4.48 #73 security-go-live (self-authored project-скилы) — 17-я off-phase подкатегория **infosec-tooling**, раздел A8; §0 счётчик 67→73 (87→93 total), off-phase row +37→+43; cross-ref Pravila v1.37 / PSR_v1 v3.20 / CLAUDE.md v2.24; ADR-014 (IS1–IS9). **v2.19 наследие:** A1 backend-tooling: §4.39 #64 Rector + rector-laravel (Composer dev-dep, авто-рефакторинг/version-upgrade, manual/CI постура — dry-run baseline 16 файлов, не блокирующий) + §4.40 #65 PHP Insights (Composer dev-dep, метрики complexity/architecture, on-demand/CI, SyntaxCheck removed — Windows subprocess-краш) + §4.41 #66 laravel-backend-patterns (self-authored project-скил, backend-конвенции Лидерры) + §4.42 #67 NightOwl (self-hosted runtime-телеметрия — **DEFERRED**: native-Windows нет pcntl/posix, OSS без MCP, hosted 152-ФЗ) — 16-я off-phase подкатегория **backend-tooling**, раздел A1; §0 счётчик 63→67 (83→87 total), off-phase row +33→+37; cross-ref Pravila v1.35 / PSR_v1 v3.19 / CLAUDE.md v2.22; ADR-013. **v2.18 наследие:** finance-tooling (C6+C7): §4.36 #61 finance plugin (homed C7, cross-ref C6; US-GAAP частично, SOX not-applicable РФ, warehouse-MCP DEFERRED) + §4.37 #62 billing-audit (C6, self-authored) + §4.38 #63 ru-tax-accounting (C7, self-authored) — 15-я off-phase подкатегория finance-tooling; §0 счётчик 60→63 (80→83 total), off-phase row +30→+33; cross-ref Pravila v1.34 / PSR_v1 v3.18 / CLAUDE.md v2.21; ADR-012. **v2.17 наследие:** applied 9-attribute row template per ADR-011 brain-governance spec §4.1. §0.1 row template +Атрибуты blocks для 58 узлов: §2.4 dump phase-0 (9 nodes #1-9 incl. dormant #1 PG MCP), §3.5 dump phase-1 (9 nodes #10-18 incl. dormant #17 pg_partman), §4.1-§4.4 inline phase-2 (7 nodes #19-23+#24+#30), §5.1 dump phase-3 (5 nodes #25-29), §4.5-§4.17 inline off-phase #31-42 incl. ruflo §4.10 dormant, §4.18-§4.35 inline off-phase #43-60. Структурный реестр для router procedure step 3 (`docs/router-procedure.md` v1.0). Связано: ADR-011, spec/plan brain-governance, Pravila v1.33 / PSR_v1 v3.17 / CLAUDE.md v2.20. **v2.16 наследие:** компакция «мозга» — SYSTEM-аудит 18.05.2026 findings 2/3/6/7: §0 +«КАНОН СЧЁТЧИКОВ» anchor — Прил. Н §0 объявлен единственным источником числовых счётчиков тулчейна, CLAUDE.md / Pravila §13.2 / PSR_v1 R10.1 переведены на пин-ссылку (finding 3 — устранение дрейфа счётчиков); §12 заголовок «вне 35 формализованных позиций» → «вне реестра» — убран stale-счётчик. Счётчики тулчейна без изменений — 60 формализованных + 20 ruflo = 80 total. План `docs/superpowers/plans/2026-05-18-brain-compaction-findings-2-3-6-7.md`. **v2.15 наследие:** ruflo isolation — §4.10 +status block: ruflo отключён от активного потока Claude 18.05.2026 без удаления артефактов; live-связи hooks/MCP/daemon выключены; план реактивации в Pravila §14.9 + memory `feedback_ruflo_isolated.md`; счётчики тулчейна без изменений — 60 формализованных позиций + 20 ruflo plugins = 80 total. Rec2 SYSTEM-аудита 18.05.2026. **v2.14 наследие:** authoring-tooling + dev-support — формализованы 5 Anthropic dev-плагинов уже включённых в `~/.claude/settings.json` user-level: #56 skill-creator / #57 plugin-dev / #58 hookify (новая 13-я off-phase подкатегория authoring-tooling — §4.31/§4.32/§4.33) + #59 claude-code-setup / #60 context7 (новая 14-я off-phase подкатегория dev-support — §4.34/§4.35); §0 счётчик 55→60 (75→80 total), off-phase row +25→+30. hookify HK1 — hard-rule pre-check на коллизию с economy/skill-discipline хуками, закрывает 🔴-конфликт карты `hookify_plugin ↔ hk_pre_claude`. Конфликт-аудит — ADR-010 (SC1–SC3 / PD1–PD3 / HK1–HK3 / CCS1 / CTX1–CTX2). Связано: PSR_v1 v3.13, Pravila v1.28, CLAUDE.md v2.15; план `docs/superpowers/plans/2026-05-18-anthropic-dev-tooling-formalization.md`. **v2.13 наследие:** discovery-tooling — формализован #55 discovery-interview (self-authored project-скил `.claude/skills/discovery-interview/`, два режима — FEATURE интервью заказчика перед фичей + SYSTEM ориентация по мета-слою) как новая 12-я off-phase подкатегория discovery-tooling — §4.30; §0 счётчик 54→55 (74→75 total), off-phase row +24→+25. Триггер-eval 20/20. Конфликт-аудит — ADR-009 DI1–DI6: разрез по слою-источнику с process-analysis #53. Связано: PSR_v1 v3.12, Pravila v1.26, CLAUDE.md v2.13; план `docs/superpowers/plans/2026-05-18-discovery-interview-integration.md`. **v2.12 наследие:** C10 business-process — формализованы #51 operations (Claude Code marketplace-плагин `operations@knowledge-work-plugins` v1.2.0, Anthropic Verified — 9 скилов process-doc/process-optimization/change-request/capacity-plan/compliance-tracking/risk-assessment/runbook/status-report/vendor-review, 0 lifecycle-хуков) + #52 process-modeling + #53 process-analysis (self-authored project-скилы `.claude/skills/`, BPMN-моделирование to-be + as-is discovery) + #54 n8n-mcp (`czlonkowski/n8n-mcp`, MIT, workflow-движок — **DEFERRED**, у портала нет n8n) как новая 11-я off-phase подкатегория business-process — §4.26/§4.27/§4.28/§4.29; §0 счётчик 50→54 (70→74 total), off-phase row +20→+24. Конфликт-аудит — OPS1 (process-doc↔mermaid рендер-SoT), OPS5 (operations generic ↔ self-authored stack-grounded), N8N1 (n8n-mcp DEFERRED — n8n не в стеке портала), LINT1 (self-authored скилы линтуются, не в ignorePaths). Связано: PSR_v1 v3.11, Pravila v1.25, CLAUDE.md v2.12; план `docs/superpowers/plans/2026-05-17-c10-business-process-tooling-integration.md`. **v2.11 наследие:** ADR-006 Decision-4 icon-path boundary mirror — §4.20 +UI3: Lucide-иконки канонически через `lucide-vue-next` + Vuetify `IconSet` (CTO-19), raw-SVG `get_icon` Universal Icons MCP — только для не-Lucide коллекций; источник — ADR-006 поправка 17.05.2026. Счётчики без изменений — 50 формализованных позиций / 70 total. Связано: CLAUDE.md v2.11, ADR-006. **v2.10 наследие:** A11 ml-ai-tooling — формализованы #48 promptfoo (npm devDependency `promptfoo` v0.121.11, MIT — CLI-eval LLM-промптов) + #49 Data Scientist skill (вендоренный сторонний скил `.claude/skills/data-scientist/`, классический ML-воркфлоу, код MIT / контент CC BY 4.0) + #50 Jupyter MCP (`datalayer/jupyter-mcp-server`, исполняемые ноутбуки — **DEFERRED**, требует Python ML-окружения) как новая 10-я off-phase подкатегория ml-ai-tooling — §4.23/§4.24/§4.25; §0 счётчик 47→50 (67→70 total), off-phase row +17→+20. Конфликт-аудит — ML1 (promptfoo платные вызовы → только вручную/CI, никогда в хук), ML3 (Data Scientist skill вендорен → lefthook exclude), ML7 (bus-factor → вендоринг). Связано: PSR_v1 v3.10, Pravila v1.24, CLAUDE.md v2.10; план `docs/superpowers/plans/2026-05-17-a11-ml-ai-tooling-integration.md`. **v2.9 наследие:** A3 integration-tooling — формализован #47 openapi-mcp-server (`@ivotoby/openapi-mcp-server`, npm, v1.14.0, MIT) как 9-я off-phase подкатегория integration-tooling — §4.22; §0 счётчик 46→47 (66→67 total), off-phase row +16→+17. Связано: PSR_v1 v3.9, Pravila v1.23, CLAUDE.md v2.9; план `docs/superpowers/plans/2026-05-17-a3-integration-tooling-integration.md`. **v2.8 наследие:** A4 design-tooling — формализованы #44 Figma MCP (remote MCP, extract-only, DEFERRED — нет Figma-аккаунта) + #45 Universal Icons MCP (`mcp-universal-icons`, MIT) + #46 Design plugin (Anthropic Verified) как новая 8-я off-phase подкатегория design-tooling — §4.19/§4.20/§4.21; §0 счётчик 43→46 (63→66 total), off-phase row +13→+16. Связано: PSR_v1 v3.8, Pravila v1.22, CLAUDE.md v2.8; план `docs/superpowers/plans/2026-05-17-a4-design-tooling-integration.md`. **v2.7 наследие:** A6-расширение — deptrac: формализован #43 deptrac (Composer dev-dependency `deptrac/deptrac` v4.6.1, BSD-3-Clause) как 4-й инструмент off-phase подкатегории architecture-tooling — архитектурный fitness-гейт направления зависимостей / границ слоёв; врезан как lefthook pre-commit job 10; конфиг `app/deptrac.yaml` (13 слоёв), первый прогон 0 нарушений → baseline-файл не нужен (red-green доказан); §4.18 новый; §0 счётчик 42→43 (62→63 total), off-phase row +12→+13. Связано: PSR_v1 v3.7, Pravila v1.21, CLAUDE.md v2.7; план `docs/superpowers/plans/2026-05-17-deptrac-architecture-fitness-integration.md`. **v2.6 наследие:** C9 project-management — формализованы #41 CCPM (vendored standalone skill) + #42 product-management (Anthropic-verified marketplace plugin) как новая 7-я off-phase подкатегория «project-management» — §4.16/§4.17; §0 счётчик 40→42 (60→62 total); off-phase row +10→+12. Связано: PSR_v1 v3.6, Pravila v1.20, CLAUDE.md v2.6; план `docs/superpowers/plans/2026-05-17-c9-project-management-tooling-integration.md`. **v2.5 наследие:** фактическая правка #40 Security Guidance — это **блокирующий** PreToolUse-хук (`sys.exit(2)`), не warn-only: при первом за сессию срабатывании уязвимого паттерна блокирует правку (одноразовый speed-bump, retry проходит). §4.15 переписан, SG1 уточнён, +SG2 — Windows-починка python3-резолва (`python3.exe`-шим). Счётчики не меняются — 40 позиций. Связано: PSR_v1 v3.5, Pravila v1.19, CLAUDE.md v2.5; план `docs/superpowers/plans/2026-05-17-d3-audit-risk-tooling-integration.md`. **v2.4 наследие:** D3 audit-security — формализованы #39 Trail of Bits Skills (субсет 8 audit-плагинов, marketplace `trailofbits`, CC-BY-SA-4.0) + #40 Security Guidance (Anthropic PreToolUse-хук) как новая 6-я off-phase подкатегория «audit-security» — §4.14/§4.15; §0 счётчик 38→40 (58→60 total); off-phase row +8→+10. Связано: PSR_v1 v3.4, Pravila v1.18, CLAUDE.md v2.4; план `docs/superpowers/plans/2026-05-17-d3-audit-risk-tooling-integration.md`. **v2.3 наследие:** A6 architecture-tooling — формализованы 3 инструмента раздела A6 карты «Архитектура систем»: **#36 adr-kit** (ADR-решения + `adr-judge` gate), **#37 mermaid-skill** (C4-диаграммы), **#38 architecture-patterns** (паттерны) — новые §4.11–4.13, новая пятая off-phase подкатегория «architecture-tooling»; §0 счётчик 35→38 формализованных позиций (55→58 total), §0 table row off-phase +5→+8. Связано: PSR_v1 v3.3, Pravila v1.17, CLAUDE.md v2.3; план `docs/superpowers/plans/2026-05-17-a6-architecture-tooling-integration.md`. **v2.2 наследие:** §4.10 реколлаж — ruflo переописан из «entry-point иерархии» в «advisory/automation-подсистему» (декларация приведена к рантайму: рой idle, 0 задач); заголовок §4.10 + «Архитектурная роль» переписаны; §0 table row + «Категории off-phase tools» + «Назначение» обновлены; §13 +v2.2 entry. Связано: Pravila v1.16, PSR_v1 v3.2, CLAUDE.md v2.2; spec `docs/superpowers/specs/2026-05-16-ruflo-hierarchy-factual-recollage-design.md`. **v2.1 наследие:** §4.10 +абзац «Queen trigger»: триггер queen/королева → безусловный route через ruflo Queen (`hive-mind spawn --claude`), explicit hard-rule Pravila §14, enforcement-хук `tools/ruflo-queen-hook.mjs`. Связано: spec/plan `docs/superpowers/{specs,plans}/2026-05-15-ruflo-queen-trigger-and-delegation*`, Pravila v1.15, CLAUDE.md v2.1, PSR_v1 v3.1. **v2.0 наследие:** Ruflo big-bang — major bump: добавлен **orchestration layer (ruflo)** как четвёртая off-phase подкатегория. §0 +ruflo orchestration row: 35 формализованных позиций + 20 ruflo plugins = 55 total; новая §4.10 «Orchestration layer (ruflo)». Связано: spec/plan 2026-05-15, Pravila v1.14, PSR_v1 v3.0, CLAUDE.md v2.0.) +**Версия:** 2.25 (Прил. Н v2.25 — research-tooling (Perplexity Pack): §4.60 #87 perplexity MCP + §4.61 #88 exa MCP + §4.62 #89 firecrawl MCP — новая **20-я off-phase подкатегория research-tooling** (внешние MCP веб-разведки, READ-ONLY, платные API — ключи только в env); §0 счётчик 84→87 (104→107 total), off-phase row +54→+57; cross-ref Pravila v1.44+ / PSR_v1 v3.24+ / CLAUDE.md v2.46+; ADR-019 (RT1–RT9). Узлы: #87 perplexity (`@perplexity-ai/mcp-server` — ранжированный ответ-с-источниками sonar) + #88 exa (`exa-mcp-server` — семантическое/нейро обнаружение) + #89 firecrawl (`firecrawl-mcp` — глубокое чтение/обход). Gate-постура read_only зафиксирована в коде (commit `bfc1f575`, `tools/mcp-tool-classifier.mjs` +тест); IS9-вет `docs/research/research-vet.md` — все три ПРИНЯТ; связка L17 (research chain). Plan `docs/superpowers/plans/2026-06-14-perplexity-pack-plan3-router-registry.md`. **Прил. Н v2.24 наследие** — knowledge-graph-tooling: §4.59 (#86) graphifyy — 19-я off-phase подкатегория **knowledge-graph-tooling** (skill-based CLI, user-level `~/.claude/skills/graphify/`); §0 счётчик 83→84 (103→104 total), off-phase row +53→+54; cross-ref Pravila v1.43+ / PSR_v1 v3.23+ / CLAUDE.md v2.32+; ADR-017 (KG1–KG5). Граничные правила: KG1 ↔ context7 #60 (внутренний codebase vs внешние SDK-доки), KG2 ↔ Boost #10 (static graph vs runtime queries), KG3 ↔ openapi-mcp #47 (весь проект vs один спек), KG4 ↔ Sentry MCP #34 (структурные связи vs runtime errors), KG5 ↔ adr-kit #36 / mermaid #37 (auto-discovery vs manual authoring). Spike `spike/graphify-2026-05-27`: 3 фазы (docs/ + .claude/ + app/) → ultimate combined граф 6305 узлов / 6753 рёбер / 1009 communities (93% EXTRACTED / 7% INFERRED). Артефакты `graphify-out*/` обязательно gitignored. **Прил. Н v2.23 наследие** — C1 marketing-tooling: §4.49–§4.58 (#74–#83) — 18-я off-phase подкатегория **marketing-tooling** (раздел C1 «Маркетинг и лидогенерация»); §0 счётчик 73→83 (93→103 total), off-phase row +43→+53; cross-ref Pravila v1.42+ / PSR_v1 v3.22+ / CLAUDE.md v2.28+; ADR-015 (MKT1–MKT10). Узлы: #74 marketing plugin (Anthropic, 8 скилов — первичный решатель C1) + #75 marketingskills (вендоренный скил-набор, MIT, 40 скилов — материал, модель UPM) + #76 brand-voice (Anthropic partner Tribe AI, 3 скила — вербальный бренд) + #77 marketing-ru (self-authored project-скил, РФ-специфика C1) + #78 Яндекс.Метрика MCP (`atomkraft/yandex-metrika-mcp`, MIT, READ-ONLY, выбран по IS9-вету из 3 кандидатов) + #79 Яндекс.Директ+Wordstat MCP (`SvechaPVL/yandex-mcp`, MIT — **только Wordstat-инструменты; Direct-мутации НЕ активированы** per IS9) + #80 Telegram MCP (`chigwell/telegram-mcp`, Apache-2.0, выделенный аккаунт) + #81 Postiz (`gitroomhq/postiz-app`, AGPL-3.0, внутренний self-host без модификаций и дистрибуции) + #82 DataForSEO MCP (**DEFERRED** — платный, после Б-1) + #83 Unisender Go MCP (**DEFERRED** — нет готового upstream-сервера, своя обёртка по потребности). IS9-вет выполнен: `docs/security/marketing-vet.md` — все 5 внешних PASS/PASS-with-conditions; VK standalone MCP отброшен (0★, право тратить бюджет). Plan `docs/superpowers/plans/2026-05-22-c1-marketing-tooling.md`. **Прил. Н v2.22 наследие** — pg_audit #28 + pg_anonymizer #29 **установлены на боевом liderra.ru 22.05.2026** (расширения PostgreSQL фазы 3, ранее недоступные на dev native-Windows): §5.1 attribute-блоки #28/#29 + §6 compliance-таблица + §10.4 шаг 2 → ✅ прод; setup-док `docs/security/pgaudit-anonymizer-setup.md`; cross-ref Pravila v1.38 / PSR_v1 v3.21 / CLAUDE.md v2.26; счётчики без изменений (#28/#29 уже в phase-3). **Прил. Н v2.21 наследие** — A8 infosec-tooling install-sync: ZAP #68 + Ward #70 **установлены портативно 21.05.2026** (без choco — Go 1.26.3/Temurin JRE 17 zip с проверкой SHA256, всё в `bin/*` gitignored) → статус PENDING INSTALL снят в §4.43/§4.45 (dormant true→false) + §4.48 уточнён; setup-доки `docs/security/zap-setup.md` + `docs/security/ward-setup.md`; счётчики/состав реестра без изменений (73 формализованных / 93 total); cross-ref Pravila v1.38 / PSR_v1 v3.21 / CLAUDE.md v2.25; план `docs/superpowers/plans/2026-05-21-a8-infosec-tooling.md`. **v2.20 наследие:** Прил. Н v2.20 — A8 infosec-tooling: §4.43 #68 OWASP ZAP (MCP add-on, глубокая боевая DAST — **PENDING INSTALL**: нет Java) + §4.44 #69 Nuclei (CLI-бинарь `bin/nuclei.exe` v3.8.0, известные уязвимости — УСТАНОВЛЕН+verified; CLI не MCP) + §4.45 #70 Ward (CLI Go-бинарь, безопасность настроек Laravel — ЗАМЕНИЛ Enlightn abandoned/L13, **PENDING INSTALL**: нет Go) + §4.46 #71 pdn-152fz-audit + §4.47 #72 threat-model + §4.48 #73 security-go-live (self-authored project-скилы) — 17-я off-phase подкатегория **infosec-tooling**, раздел A8; §0 счётчик 67→73 (87→93 total), off-phase row +37→+43; cross-ref Pravila v1.37 / PSR_v1 v3.20 / CLAUDE.md v2.24; ADR-014 (IS1–IS9). **v2.19 наследие:** A1 backend-tooling: §4.39 #64 Rector + rector-laravel (Composer dev-dep, авто-рефакторинг/version-upgrade, manual/CI постура — dry-run baseline 16 файлов, не блокирующий) + §4.40 #65 PHP Insights (Composer dev-dep, метрики complexity/architecture, on-demand/CI, SyntaxCheck removed — Windows subprocess-краш) + §4.41 #66 laravel-backend-patterns (self-authored project-скил, backend-конвенции Лидерры) + §4.42 #67 NightOwl (self-hosted runtime-телеметрия — **DEFERRED**: native-Windows нет pcntl/posix, OSS без MCP, hosted 152-ФЗ) — 16-я off-phase подкатегория **backend-tooling**, раздел A1; §0 счётчик 63→67 (83→87 total), off-phase row +33→+37; cross-ref Pravila v1.35 / PSR_v1 v3.19 / CLAUDE.md v2.22; ADR-013. **v2.18 наследие:** finance-tooling (C6+C7): §4.36 #61 finance plugin (homed C7, cross-ref C6; US-GAAP частично, SOX not-applicable РФ, warehouse-MCP DEFERRED) + §4.37 #62 billing-audit (C6, self-authored) + §4.38 #63 ru-tax-accounting (C7, self-authored) — 15-я off-phase подкатегория finance-tooling; §0 счётчик 60→63 (80→83 total), off-phase row +30→+33; cross-ref Pravila v1.34 / PSR_v1 v3.18 / CLAUDE.md v2.21; ADR-012. **v2.17 наследие:** applied 9-attribute row template per ADR-011 brain-governance spec §4.1. §0.1 row template +Атрибуты blocks для 58 узлов: §2.4 dump phase-0 (9 nodes #1-9 incl. dormant #1 PG MCP), §3.5 dump phase-1 (9 nodes #10-18 incl. dormant #17 pg_partman), §4.1-§4.4 inline phase-2 (7 nodes #19-23+#24+#30), §5.1 dump phase-3 (5 nodes #25-29), §4.5-§4.17 inline off-phase #31-42 incl. ruflo §4.10 dormant, §4.18-§4.35 inline off-phase #43-60. Структурный реестр для router procedure step 3 (`docs/router-procedure.md` v1.0). Связано: ADR-011, spec/plan brain-governance, Pravila v1.33 / PSR_v1 v3.17 / CLAUDE.md v2.20. **v2.16 наследие:** компакция «мозга» — SYSTEM-аудит 18.05.2026 findings 2/3/6/7: §0 +«КАНОН СЧЁТЧИКОВ» anchor — Прил. Н §0 объявлен единственным источником числовых счётчиков тулчейна, CLAUDE.md / Pravila §13.2 / PSR_v1 R10.1 переведены на пин-ссылку (finding 3 — устранение дрейфа счётчиков); §12 заголовок «вне 35 формализованных позиций» → «вне реестра» — убран stale-счётчик. Счётчики тулчейна без изменений — 60 формализованных + 20 ruflo = 80 total. План `docs/superpowers/plans/2026-05-18-brain-compaction-findings-2-3-6-7.md`. **v2.15 наследие:** ruflo isolation — §4.10 +status block: ruflo отключён от активного потока Claude 18.05.2026 без удаления артефактов; live-связи hooks/MCP/daemon выключены; план реактивации в Pravila §14.9 + memory `feedback_ruflo_isolated.md`; счётчики тулчейна без изменений — 60 формализованных позиций + 20 ruflo plugins = 80 total. Rec2 SYSTEM-аудита 18.05.2026. **v2.14 наследие:** authoring-tooling + dev-support — формализованы 5 Anthropic dev-плагинов уже включённых в `~/.claude/settings.json` user-level: #56 skill-creator / #57 plugin-dev / #58 hookify (новая 13-я off-phase подкатегория authoring-tooling — §4.31/§4.32/§4.33) + #59 claude-code-setup / #60 context7 (новая 14-я off-phase подкатегория dev-support — §4.34/§4.35); §0 счётчик 55→60 (75→80 total), off-phase row +25→+30. hookify HK1 — hard-rule pre-check на коллизию с economy/skill-discipline хуками, закрывает 🔴-конфликт карты `hookify_plugin ↔ hk_pre_claude`. Конфликт-аудит — ADR-010 (SC1–SC3 / PD1–PD3 / HK1–HK3 / CCS1 / CTX1–CTX2). Связано: PSR_v1 v3.13, Pravila v1.28, CLAUDE.md v2.15; план `docs/superpowers/plans/2026-05-18-anthropic-dev-tooling-formalization.md`. **v2.13 наследие:** discovery-tooling — формализован #55 discovery-interview (self-authored project-скил `.claude/skills/discovery-interview/`, два режима — FEATURE интервью заказчика перед фичей + SYSTEM ориентация по мета-слою) как новая 12-я off-phase подкатегория discovery-tooling — §4.30; §0 счётчик 54→55 (74→75 total), off-phase row +24→+25. Триггер-eval 20/20. Конфликт-аудит — ADR-009 DI1–DI6: разрез по слою-источнику с process-analysis #53. Связано: PSR_v1 v3.12, Pravila v1.26, CLAUDE.md v2.13; план `docs/superpowers/plans/2026-05-18-discovery-interview-integration.md`. **v2.12 наследие:** C10 business-process — формализованы #51 operations (Claude Code marketplace-плагин `operations@knowledge-work-plugins` v1.2.0, Anthropic Verified — 9 скилов process-doc/process-optimization/change-request/capacity-plan/compliance-tracking/risk-assessment/runbook/status-report/vendor-review, 0 lifecycle-хуков) + #52 process-modeling + #53 process-analysis (self-authored project-скилы `.claude/skills/`, BPMN-моделирование to-be + as-is discovery) + #54 n8n-mcp (`czlonkowski/n8n-mcp`, MIT, workflow-движок — **DEFERRED**, у портала нет n8n) как новая 11-я off-phase подкатегория business-process — §4.26/§4.27/§4.28/§4.29; §0 счётчик 50→54 (70→74 total), off-phase row +20→+24. Конфликт-аудит — OPS1 (process-doc↔mermaid рендер-SoT), OPS5 (operations generic ↔ self-authored stack-grounded), N8N1 (n8n-mcp DEFERRED — n8n не в стеке портала), LINT1 (self-authored скилы линтуются, не в ignorePaths). Связано: PSR_v1 v3.11, Pravila v1.25, CLAUDE.md v2.12; план `docs/superpowers/plans/2026-05-17-c10-business-process-tooling-integration.md`. **v2.11 наследие:** ADR-006 Decision-4 icon-path boundary mirror — §4.20 +UI3: Lucide-иконки канонически через `lucide-vue-next` + Vuetify `IconSet` (CTO-19), raw-SVG `get_icon` Universal Icons MCP — только для не-Lucide коллекций; источник — ADR-006 поправка 17.05.2026. Счётчики без изменений — 50 формализованных позиций / 70 total. Связано: CLAUDE.md v2.11, ADR-006. **v2.10 наследие:** A11 ml-ai-tooling — формализованы #48 promptfoo (npm devDependency `promptfoo` v0.121.11, MIT — CLI-eval LLM-промптов) + #49 Data Scientist skill (вендоренный сторонний скил `.claude/skills/data-scientist/`, классический ML-воркфлоу, код MIT / контент CC BY 4.0) + #50 Jupyter MCP (`datalayer/jupyter-mcp-server`, исполняемые ноутбуки — **DEFERRED**, требует Python ML-окружения) как новая 10-я off-phase подкатегория ml-ai-tooling — §4.23/§4.24/§4.25; §0 счётчик 47→50 (67→70 total), off-phase row +17→+20. Конфликт-аудит — ML1 (promptfoo платные вызовы → только вручную/CI, никогда в хук), ML3 (Data Scientist skill вендорен → lefthook exclude), ML7 (bus-factor → вендоринг). Связано: PSR_v1 v3.10, Pravila v1.24, CLAUDE.md v2.10; план `docs/superpowers/plans/2026-05-17-a11-ml-ai-tooling-integration.md`. **v2.9 наследие:** A3 integration-tooling — формализован #47 openapi-mcp-server (`@ivotoby/openapi-mcp-server`, npm, v1.14.0, MIT) как 9-я off-phase подкатегория integration-tooling — §4.22; §0 счётчик 46→47 (66→67 total), off-phase row +16→+17. Связано: PSR_v1 v3.9, Pravila v1.23, CLAUDE.md v2.9; план `docs/superpowers/plans/2026-05-17-a3-integration-tooling-integration.md`. **v2.8 наследие:** A4 design-tooling — формализованы #44 Figma MCP (remote MCP, extract-only, DEFERRED — нет Figma-аккаунта) + #45 Universal Icons MCP (`mcp-universal-icons`, MIT) + #46 Design plugin (Anthropic Verified) как новая 8-я off-phase подкатегория design-tooling — §4.19/§4.20/§4.21; §0 счётчик 43→46 (63→66 total), off-phase row +13→+16. Связано: PSR_v1 v3.8, Pravila v1.22, CLAUDE.md v2.8; план `docs/superpowers/plans/2026-05-17-a4-design-tooling-integration.md`. **v2.7 наследие:** A6-расширение — deptrac: формализован #43 deptrac (Composer dev-dependency `deptrac/deptrac` v4.6.1, BSD-3-Clause) как 4-й инструмент off-phase подкатегории architecture-tooling — архитектурный fitness-гейт направления зависимостей / границ слоёв; врезан как lefthook pre-commit job 10; конфиг `app/deptrac.yaml` (13 слоёв), первый прогон 0 нарушений → baseline-файл не нужен (red-green доказан); §4.18 новый; §0 счётчик 42→43 (62→63 total), off-phase row +12→+13. Связано: PSR_v1 v3.7, Pravila v1.21, CLAUDE.md v2.7; план `docs/superpowers/plans/2026-05-17-deptrac-architecture-fitness-integration.md`. **v2.6 наследие:** C9 project-management — формализованы #41 CCPM (vendored standalone skill) + #42 product-management (Anthropic-verified marketplace plugin) как новая 7-я off-phase подкатегория «project-management» — §4.16/§4.17; §0 счётчик 40→42 (60→62 total); off-phase row +10→+12. Связано: PSR_v1 v3.6, Pravila v1.20, CLAUDE.md v2.6; план `docs/superpowers/plans/2026-05-17-c9-project-management-tooling-integration.md`. **v2.5 наследие:** фактическая правка #40 Security Guidance — это **блокирующий** PreToolUse-хук (`sys.exit(2)`), не warn-only: при первом за сессию срабатывании уязвимого паттерна блокирует правку (одноразовый speed-bump, retry проходит). §4.15 переписан, SG1 уточнён, +SG2 — Windows-починка python3-резолва (`python3.exe`-шим). Счётчики не меняются — 40 позиций. Связано: PSR_v1 v3.5, Pravila v1.19, CLAUDE.md v2.5; план `docs/superpowers/plans/2026-05-17-d3-audit-risk-tooling-integration.md`. **v2.4 наследие:** D3 audit-security — формализованы #39 Trail of Bits Skills (субсет 8 audit-плагинов, marketplace `trailofbits`, CC-BY-SA-4.0) + #40 Security Guidance (Anthropic PreToolUse-хук) как новая 6-я off-phase подкатегория «audit-security» — §4.14/§4.15; §0 счётчик 38→40 (58→60 total); off-phase row +8→+10. Связано: PSR_v1 v3.4, Pravila v1.18, CLAUDE.md v2.4; план `docs/superpowers/plans/2026-05-17-d3-audit-risk-tooling-integration.md`. **v2.3 наследие:** A6 architecture-tooling — формализованы 3 инструмента раздела A6 карты «Архитектура систем»: **#36 adr-kit** (ADR-решения + `adr-judge` gate), **#37 mermaid-skill** (C4-диаграммы), **#38 architecture-patterns** (паттерны) — новые §4.11–4.13, новая пятая off-phase подкатегория «architecture-tooling»; §0 счётчик 35→38 формализованных позиций (55→58 total), §0 table row off-phase +5→+8. Связано: PSR_v1 v3.3, Pravila v1.17, CLAUDE.md v2.3; план `docs/superpowers/plans/2026-05-17-a6-architecture-tooling-integration.md`. **v2.2 наследие:** §4.10 реколлаж — ruflo переописан из «entry-point иерархии» в «advisory/automation-подсистему» (декларация приведена к рантайму: рой idle, 0 задач); заголовок §4.10 + «Архитектурная роль» переписаны; §0 table row + «Категории off-phase tools» + «Назначение» обновлены; §13 +v2.2 entry. Связано: Pravila v1.16, PSR_v1 v3.2, CLAUDE.md v2.2; spec `docs/superpowers/specs/2026-05-16-ruflo-hierarchy-factual-recollage-design.md`. **v2.1 наследие:** §4.10 +абзац «Queen trigger»: триггер queen/королева → безусловный route через ruflo Queen (`hive-mind spawn --claude`), explicit hard-rule Pravila §14, enforcement-хук `tools/ruflo-queen-hook.mjs`. Связано: spec/plan `docs/superpowers/{specs,plans}/2026-05-15-ruflo-queen-trigger-and-delegation*`, Pravila v1.15, CLAUDE.md v2.1, PSR_v1 v3.1. **v2.0 наследие:** Ruflo big-bang — major bump: добавлен **orchestration layer (ruflo)** как четвёртая off-phase подкатегория. §0 +ruflo orchestration row: 35 формализованных позиций + 20 ruflo plugins = 55 total; новая §4.10 «Orchestration layer (ruflo)». Связано: spec/plan 2026-05-15, Pravila v1.14, PSR_v1 v3.0, CLAUDE.md v2.0.) **Предыдущая версия:** 1.17 (13.05.2026 day +1 — формализация retrospective двух off-phase MCP debug-инструментов установленных на feat/claude-automation `6f7e7d7` + `bd4ec48` после merge PR #3 в main `cc5f63b`: §0 счётчик off-phase 3 → 5, итого 33 → 35; §4.8 новый — #34 Sentry MCP; §4.9 новый — #35 Redis MCP. Категория debug-runtime, отдельная от UI-пула.) **Адресат:** Claude + разработчики проекта Лидерра **Назначение:** единый источник истины по 84 формализованным позициям тулчейна + 20 ruflo orchestration plugins = 104 total (29 «активных» номеров фаз + 54 off-phase инструментов-резерв в категориях UI-пул, инфраструктура, debug-runtime, architecture-tooling, audit-security, project-management, design-tooling, integration-tooling, ml-ai-tooling, business-process, discovery-tooling, authoring-tooling, dev-support, finance-tooling, backend-tooling, infosec-tooling, marketing-tooling, knowledge-graph-tooling — UPM, 21st, claude-md-management, Sentry MCP, Redis MCP, adr-kit, mermaid-skill, architecture-patterns, Trail of Bits Skills, Security Guidance, CCPM, product-management, deptrac, Figma MCP, Universal Icons MCP, Design plugin, openapi-mcp-server, promptfoo, Data Scientist skill, Jupyter MCP, operations, process-modeling, process-analysis, n8n-mcp, discovery-interview, skill-creator, plugin-dev, hookify, claude-code-setup, context7, finance plugin, billing-audit, ru-tax-accounting, Rector, PHP Insights, laravel-backend-patterns, NightOwl, OWASP ZAP, Nuclei, Ward, pdn-152fz-audit, threat-model, security-go-live, marketing plugin, marketingskills, brand-voice, marketing-ru, Яндекс.Метрика MCP, Яндекс.Директ+Wordstat MCP, Telegram MCP, Postiz, DataForSEO MCP, Unisender Go MCP, graphifyy; +1 заменённый PG MCP исторически; +ruflo advisory/automation-подсистема — 20 plugins, см. §4.10), скиллам Claude Code, MCP-серверам и плагинам, используемым в проекте. Зафиксирован выбор, объяснено, что заменяет что, и в какой фазе вводится каждый инструмент. @@ -81,10 +81,10 @@ | **1 — старт Laravel** | `composer create-project laravel/laravel` | **17** | +9 новых, −1 заменённый (PostgreSQL MCP → Laravel Boost) | | **2 — старт frontend** | первый коммит в `resources/js/` (Vue 3 + Vuetify 3) | **24** | +7 (включая #30 Frontend Design plugin, добавлен post-MVP в v1.10) | | **3 — pre-production** | ~спринт 12, перед публичным релизом | **29** | +5 | -| **off-phase tools** | по факту включения в `~/.claude/settings.json` / `~/.claude.json` / `.mcp.json` / `.claude/skills/` / `composer.json` / `package.json` | **+54** | #31 UPM (UI-резерв), #32 21st Magic MCP (UI-генератор), #33 claude-md-management (инфраструктура CLAUDE.md edits), #34 Sentry MCP (debug self-hosted Sentry в Yandex Cloud), #35 Redis MCP (debug Memurai/Redis runtime), #36 adr-kit (ADR-решения, architecture-tooling), #37 mermaid-skill (C4-диаграммы), #38 architecture-patterns (паттерны), #39 Trail of Bits Skills (8 audit-плагинов, audit-security), #40 Security Guidance (inline security warn-hook), #41 CCPM (PRD→эпик→issue→код трассируемость, project-management), #42 product-management (product-strategy церемонии, project-management), #43 deptrac (архитектурный fitness-гейт, architecture-tooling), #44 Figma MCP (извлечение дизайн-токенов, design-tooling, DEFERRED), #45 Universal Icons MCP (SVG-иконки, design-tooling), #46 Design plugin (дизайн-критика/UX, design-tooling), #47 openapi-mcp-server (introspection OpenAPI/REST, integration-tooling), #48 promptfoo (CLI-eval LLM-промптов, ml-ai-tooling), #49 Data Scientist skill (классический ML-воркфлоу, ml-ai-tooling), #50 Jupyter MCP (исполняемые ноутбуки, ml-ai-tooling, DEFERRED), #51 operations (документирование/оптимизация/change-mgmt бизнес-процессов, business-process), #52 process-modeling (BPMN-моделирование to-be, business-process), #53 process-analysis (as-is discovery/узкие места, business-process), #54 n8n-mcp (workflow-движок, business-process, DEFERRED), #55 discovery-interview (интервью-discovery FEATURE/SYSTEM, discovery-tooling), #56 skill-creator (конструктор скилов, authoring-tooling), #57 plugin-dev (конструктор плагинов, authoring-tooling), #58 hookify (генератор хуков, authoring-tooling), #59 claude-code-setup (рекомендатель автоматизаций, dev-support), #60 context7 (документация библиотек, dev-support), #61 finance plugin (финансы/бухгалтерия US-GAAP, finance-tooling), #62 billing-audit (денежные инварианты биллинга, finance-tooling), #63 ru-tax-accounting (РСБУ/НК РФ контекст, finance-tooling), #64 Rector (авто-рефакторинг/version-upgrade PHP, backend-tooling), #65 PHP Insights (метрики качества/сложности кода, backend-tooling), #66 laravel-backend-patterns (backend-конвенции Лидерры, backend-tooling), #67 NightOwl (runtime-телеметрия self-hosted, backend-tooling, DEFERRED), #68 OWASP ZAP (глубокая боевая DAST, infosec-tooling, MCP, установлен 21.05), #69 Nuclei (известные уязвимости, infosec-tooling, CLI), #70 Ward (безопасность настроек Laravel, infosec-tooling, CLI, установлен 21.05), #71 pdn-152fz-audit (аудит ПДн/152-ФЗ, infosec-tooling), #72 threat-model (STRIDE угрозы going-public, infosec-tooling), #73 security-go-live (go-live security-gate, infosec-tooling), #74 marketing plugin (первичный решатель C1, marketing-tooling), #75 marketingskills (резерв-библиотека фреймворков, marketing-tooling), #76 brand-voice (вербальный бренд, marketing-tooling), #77 marketing-ru (РФ-специфика маркетинга, marketing-tooling), #78 Яндекс.Метрика MCP (веб-аналитика READ-ONLY, marketing-tooling), #79 Яндекс.Директ+Wordstat MCP (Wordstat only, marketing-tooling), #80 Telegram MCP (постинг/управление каналами, marketing-tooling), #81 Postiz (планировщик соцсетей self-hosted, marketing-tooling), #82 DataForSEO MCP (SEO-данные РФ, marketing-tooling, DEFERRED), #83 Unisender Go MCP (email-рассылки обёртка, marketing-tooling, DEFERRED), #86 graphifyy (knowledge graph портала docs+code, knowledge-graph-tooling) | +| **off-phase tools** | по факту включения в `~/.claude/settings.json` / `~/.claude.json` / `.mcp.json` / `.claude/skills/` / `composer.json` / `package.json` | **+57** | #31 UPM (UI-резерв), #32 21st Magic MCP (UI-генератор), #33 claude-md-management (инфраструктура CLAUDE.md edits), #34 Sentry MCP (debug self-hosted Sentry в Yandex Cloud), #35 Redis MCP (debug Memurai/Redis runtime), #36 adr-kit (ADR-решения, architecture-tooling), #37 mermaid-skill (C4-диаграммы), #38 architecture-patterns (паттерны), #39 Trail of Bits Skills (8 audit-плагинов, audit-security), #40 Security Guidance (inline security warn-hook), #41 CCPM (PRD→эпик→issue→код трассируемость, project-management), #42 product-management (product-strategy церемонии, project-management), #43 deptrac (архитектурный fitness-гейт, architecture-tooling), #44 Figma MCP (извлечение дизайн-токенов, design-tooling, DEFERRED), #45 Universal Icons MCP (SVG-иконки, design-tooling), #46 Design plugin (дизайн-критика/UX, design-tooling), #47 openapi-mcp-server (introspection OpenAPI/REST, integration-tooling), #48 promptfoo (CLI-eval LLM-промптов, ml-ai-tooling), #49 Data Scientist skill (классический ML-воркфлоу, ml-ai-tooling), #50 Jupyter MCP (исполняемые ноутбуки, ml-ai-tooling, DEFERRED), #51 operations (документирование/оптимизация/change-mgmt бизнес-процессов, business-process), #52 process-modeling (BPMN-моделирование to-be, business-process), #53 process-analysis (as-is discovery/узкие места, business-process), #54 n8n-mcp (workflow-движок, business-process, DEFERRED), #55 discovery-interview (интервью-discovery FEATURE/SYSTEM, discovery-tooling), #56 skill-creator (конструктор скилов, authoring-tooling), #57 plugin-dev (конструктор плагинов, authoring-tooling), #58 hookify (генератор хуков, authoring-tooling), #59 claude-code-setup (рекомендатель автоматизаций, dev-support), #60 context7 (документация библиотек, dev-support), #61 finance plugin (финансы/бухгалтерия US-GAAP, finance-tooling), #62 billing-audit (денежные инварианты биллинга, finance-tooling), #63 ru-tax-accounting (РСБУ/НК РФ контекст, finance-tooling), #64 Rector (авто-рефакторинг/version-upgrade PHP, backend-tooling), #65 PHP Insights (метрики качества/сложности кода, backend-tooling), #66 laravel-backend-patterns (backend-конвенции Лидерры, backend-tooling), #67 NightOwl (runtime-телеметрия self-hosted, backend-tooling, DEFERRED), #68 OWASP ZAP (глубокая боевая DAST, infosec-tooling, MCP, установлен 21.05), #69 Nuclei (известные уязвимости, infosec-tooling, CLI), #70 Ward (безопасность настроек Laravel, infosec-tooling, CLI, установлен 21.05), #71 pdn-152fz-audit (аудит ПДн/152-ФЗ, infosec-tooling), #72 threat-model (STRIDE угрозы going-public, infosec-tooling), #73 security-go-live (go-live security-gate, infosec-tooling), #74 marketing plugin (первичный решатель C1, marketing-tooling), #75 marketingskills (резерв-библиотека фреймворков, marketing-tooling), #76 brand-voice (вербальный бренд, marketing-tooling), #77 marketing-ru (РФ-специфика маркетинга, marketing-tooling), #78 Яндекс.Метрика MCP (веб-аналитика READ-ONLY, marketing-tooling), #79 Яндекс.Директ+Wordstat MCP (Wordstat only, marketing-tooling), #80 Telegram MCP (постинг/управление каналами, marketing-tooling), #81 Postiz (планировщик соцсетей self-hosted, marketing-tooling), #82 DataForSEO MCP (SEO-данные РФ, marketing-tooling, DEFERRED), #83 Unisender Go MCP (email-рассылки обёртка, marketing-tooling, DEFERRED), #86 graphifyy (knowledge graph портала docs+code, knowledge-graph-tooling), #87 perplexity MCP (веб-разведка/ранжированный ответ sonar, research-tooling), #88 exa MCP (семантическое обнаружение, research-tooling), #89 firecrawl MCP (глубокое чтение/обход, research-tooling) | | **ruflo advisory/automation-подсистема** (off-phase, post-MVP 2026-05-15) | `npx ruflo@latest init` + `.mcp.json` ruflo entry | **+20 plugins** | `ruflo` v3.7.0-alpha.38+ + 20 plugins (`@claude-flow/*`, IPFS-registry) — advisory/automation-подсистема; orchestration подкатегория off-phase (см. §4.10) | -**Итого формализованных позиций:** 84 (29 активных по фазам + 54 off-phase + 1 заменённый PG MCP исторически) + 20 ruflo orchestration plugins = **104 total**. Полный перечень — §2–§5 (по фазам) + §4.5/§4.6/§4.7/§4.8/§4.9/§4.11/§4.12/§4.13/§4.14/§4.15/§4.16/§4.17/§4.18/§4.19/§4.20/§4.21/§4.22/§4.23/§4.24/§4.25/§4.26/§4.27/§4.28/§4.29/§4.30/§4.31/§4.32/§4.33/§4.34/§4.35/§4.36/§4.37/§4.38/§4.39/§4.40/§4.41/§4.42/§4.43/§4.44/§4.45/§4.46/§4.47/§4.48/§4.49/§4.50/§4.51/§4.52/§4.53/§4.54/§4.55/§4.56/§4.57/§4.58/§4.59 (off-phase) + §4.10 (ruflo orchestration). Карта «когда что использовать» — §7. Что НЕ ставим и почему — §9. +**Итого формализованных позиций:** 87 (29 активных по фазам + 57 off-phase + 1 заменённый PG MCP исторически) + 20 ruflo orchestration plugins = **107 total**. Полный перечень — §2–§5 (по фазам) + §4.5/§4.6/§4.7/§4.8/§4.9/§4.11/§4.12/§4.13/§4.14/§4.15/§4.16/§4.17/§4.18/§4.19/§4.20/§4.21/§4.22/§4.23/§4.24/§4.25/§4.26/§4.27/§4.28/§4.29/§4.30/§4.31/§4.32/§4.33/§4.34/§4.35/§4.36/§4.37/§4.38/§4.39/§4.40/§4.41/§4.42/§4.43/§4.44/§4.45/§4.46/§4.47/§4.48/§4.49/§4.50/§4.51/§4.52/§4.53/§4.54/§4.55/§4.56/§4.57/§4.58/§4.59/§4.60/§4.61/§4.62 (off-phase) + §4.10 (ruflo orchestration). Карта «когда что использовать» — §7. Что НЕ ставим и почему — §9. **КАНОН СЧЁТЧИКОВ.** Числовые счётчики формализованных позиций и off-phase подкатегорий тулчейна каноничны здесь — в Прил. Н §0. CLAUDE.md, Pravila §13.2 и PSR_v1 R10.1 ссылаются сюда формулировкой «реестр и счётчики — Tooling Прил. Н §0» и не дублируют числа. Введено SYSTEM-аудитом 18.05.2026 (finding 3) для устранения класса «арифметический дрейф счётчиков» (ловился аудитами v1.85/v1.86). @@ -454,6 +454,9 @@ Existing prose follows the table. | #84 | normative-sync | off-phase | active | | #85 | prod-deploy-validator | off-phase | active | | #86 | graphifyy | off-phase | active | +| #87 | perplexity MCP | off-phase | active | +| #88 | exa MCP | off-phase | active | +| #89 | firecrawl MCP | off-phase | active | @@ -1656,6 +1659,44 @@ Existing prose follows the table. **Ollama compliance:** Ollama установлен в проекте для 152-ФЗ-чувствительных задач (локальный LLM без отправки в Anthropic), но graphify Ollama НЕ использует — два независимых инструмента. +### 4.60. perplexity MCP — ранжированный веб-ответ с источниками (off-phase, research-tooling) + +**Атрибуты:** + +| id | name | kind | phase | subcategory | triggers | boundaries | dormant | last-touched | +|---|---|---|---|---|---|---|---|---| +| #87 | perplexity MCP | mcp | off-phase | research-tooling | «веб-разведка», «актуальные практики», «что говорят источники», «deep research», «sonar» | ADR-019 (RT1 ↔ context7 #60; RT4 ↔ exa #88) | false | 2026-06-14 | + +**Роль:** инструмент **#87**. MCP-сервер `@perplexity-ai/mcp-server` (READ-ONLY): `perplexity_search` (ранжированный web-ответ), `perplexity_ask` (sonar-pro real-time с цитатами), `perplexity_research` (sonar-deep-research, 30s+), `perplexity_reason` (sonar-reasoning-pro). Первичный «дай ответ-с-источниками» в research chain L17. Базовый URL через AITUNNEL (`PERPLEXITY_BASE_URL`); ключ `PERPLEXITY_API_KEY` только в env (платный API, owner waiver). + +**Категория:** off-phase, **research-tooling** — 20-я off-phase подкатегория (внешние MCP веб-разведки). Не UI → **не** проходит R6.0/R6.1/R14 PSR_v1. Регулируется PSR_v1 R10.1 Блок 3 (MCP-сервер). Gate-постура read_only зафиксирована в `tools/mcp-tool-classifier.mjs` (commit `bfc1f575`). + +### 4.61. exa MCP — семантическое обнаружение источников (off-phase, research-tooling) + +**Атрибуты:** + +| id | name | kind | phase | subcategory | triggers | boundaries | dormant | last-touched | +|---|---|---|---|---|---|---|---|---| +| #88 | exa MCP | mcp | off-phase | research-tooling | «семантический поиск», «нейро-поиск», «обнаружение источников по смыслу», «exa» | ADR-019 (RT4 ↔ perplexity #87 / firecrawl #89) | false | 2026-06-14 | + +**Роль:** инструмент **#88**. MCP-сервер `exa-mcp-server` (exa-labs, READ-ONLY): `web_search_exa` (находит концептуально близкое, что keyword-поиск пропускает) + `web_fetch_exa` (страница по URL). Слой «обнаружение источников по смыслу» в research chain L17. Ключ `EXA_API_KEY` только в env (платный API). + +**Категория:** off-phase, research-tooling — 20-я off-phase подкатегория (внешние MCP веб-разведки). Не UI → вне R6.0/R6.1/R14 PSR_v1. PSR_v1 R10.1 Блок 3. Gate read_only (commit `bfc1f575`). + +### 4.62. firecrawl MCP — глубокое чтение и обход веба (off-phase, research-tooling) + +**Атрибуты:** + +| id | name | kind | phase | subcategory | triggers | boundaries | dormant | last-touched | +|---|---|---|---|---|---|---|---|---| +| #89 | firecrawl MCP | mcp | off-phase | research-tooling | «глубокое чтение страницы», «обход сайта», «scrape», «crawl», «извлечь структурированное», «firecrawl» | ADR-019 (RT4 ↔ perplexity #87 / exa #88; RT3 ↔ openapi #47) | false | 2026-06-14 | + +**Роль:** инструмент **#89**. MCP-сервер `firecrawl-mcp` (Firecrawl/Mendable, READ-ONLY read-тяжёлый): `firecrawl_scrape` / `batch_scrape` / `map` / `search` / `crawl` / `extract` + `firecrawl_agent` (автономный web-research) + `firecrawl_agent_status`. Слой «прочитать страницу целиком / обойти сайт» в research chain L17. Ключ `FIRECRAWL_API_KEY` только в env (платный API). + +**Категория:** off-phase, research-tooling — 20-я off-phase подкатегория (внешние MCP веб-разведки). Не UI → вне R6.0/R6.1/R14 PSR_v1. PSR_v1 R10.1 Блок 3. Gate read_only (commit `bfc1f575`). + +**Граница research-tooling (ADR-019, RT1–RT9):** открытый веб (практики/нормы/конкуренты); ≠ context7 #60 (SDK-доки) / openapi #47 (наш REST) / Boost #10 (Laravel) / Sentry #34 + Redis #35 (runtime прод) / graphify #86 (внутренний граф) / GitHub #3 (репо). Внутри пака: perplexity #87 (ответ) → exa #88 (обнаружение) → firecrawl #89 (чтение) — связка L17. Платные API, ключи только в env, без авто-трат (RT8). IS9-вет `docs/research/research-vet.md` — все три ПРИНЯТ. + --- ## 5. Фаза 3 — pre-production (+5 новых, итого 29 активных) diff --git a/docs/adr/ADR-019-research-tooling.md b/docs/adr/ADR-019-research-tooling.md new file mode 100644 index 00000000..10618ddd --- /dev/null +++ b/docs/adr/ADR-019-research-tooling.md @@ -0,0 +1,148 @@ +# ADR-019: Off-phase research-tooling (Perplexity Pack) + +**Status:** Accepted +**Date:** 2026-06-14 +**Контекст:** эпик «Perplexity Pack», spec `docs/superpowers/specs/2026-06-14-perplexity-pack-research-tooling-design-v3.md`, провенанс-вет `docs/research/research-vet.md`. + +## Context + +В тулчейне Лидерры не было выделенного слоя веб-разведки. Существующие узлы дают +знания узких типов: `context7` (#60) — документация библиотек/SDK; `openapi`-mcp (#47) +— интроспекция нашего REST-API; `Laravel Boost` (#10) — Laravel-экосистема и runtime-запросы; +`Sentry`/`Redis` MCP (#34/#35) — runtime-факты прод-системы; `graphify` (#86) — внутренний +граф проекта; `GitHub` MCP (#3) — операции с репозиторием. Ни один не покрывает **открытый +веб**: актуальные практики, нормативные требования, фич-разведку конкурентов, deep-research +с цитатами. + +Три зрелых MCP-сервера закрывают этот пробел: **perplexity** (ранжированный ответ-с-источниками поверх sonar), **exa** (нейро/семантическое обнаружение источников), **firecrawl** (глубокое чтение и обход страниц). Все три присутствовали только в ветке `worktree-perplexity-pack`; +main и нормативка их не знали. + +Аналогичный паттерн «новый off-phase слой» закрывался ранее: A8 infosec (ADR-014), C1 +marketing (ADR-015), knowledge-graph (ADR-017). Дисциплина та же: провенанс-вет IS9 → +перенос конфигурации в main → формализация в нормативке → реестр узлов. + +**Риск ecosystem.** Все три — внешние пакеты с платными API-ключами. Snyk/SentinelOne +«ToxicSkills» 2025: ≈13% маркетплейс-артефактов содержат критичные дефекты. Провенанс-гейт +IS9 (прецедент A8/C1) обязателен ДО формализации; вет завершён — `docs/research/research-vet.md`, +все три **ПРИНЯТ**. + +**Решение заказчика (зафиксировано):** платные API приняты владельцем (owner waiver, +Вариант 2); ключи (`PERPLEXITY_API_KEY` / `EXA_API_KEY` / `FIRECRAWL_API_KEY`) живут только +в пользовательском окружении, никогда в репозитории. + +## Decision + +Принят слой **research-tooling** — новая **20-я off-phase подкатегория**, номера Tooling +**#87–#89**, классификация роутера `research`. + +| # | Узел | Источник | Тип | Назначение | +|---|---|---|---|---| +| 87 | perplexity MCP | `@perplexity-ai/mcp-server` | внешний MCP, READ-ONLY | ранжированный ответ-с-источниками (search/ask/research/reason; sonar) | +| 88 | exa MCP | `exa-mcp-server` (exa-labs) | внешний MCP, READ-ONLY | семантическое/нейро обнаружение источников (web_search_exa/web_fetch_exa) | +| 89 | firecrawl MCP | `firecrawl-mcp` (Firecrawl/Mendable) | внешний MCP, READ-ONLY (read-тяжёлый) | глубокое чтение и обход (scrape/batch/map/search/crawl/extract + agent) | + +**Детали решений:** + +1. **#87 perplexity** — первичный «дай ответ-с-источниками». Четыре инструмента поверх + sonar-моделей: `perplexity_search` (ранжированный web), `perplexity_ask` (sonar-pro + real-time), `perplexity_research` (sonar-deep-research, медленный 30s+), `perplexity_reason` + (sonar-reasoning-pro). READ-ONLY. Базовый URL через AITUNNEL-прокси (`PERPLEXITY_BASE_URL`). +2. **#88 exa** — обнаружение того, что keyword-поиск пропускает: семантический `web_search_exa` плюс `web_fetch_exa`. READ-ONLY. +3. **#89 firecrawl** — прочитать страницу целиком/обойти сайт/извлечь структурированное; + `firecrawl_agent` — автономный web-research. READ-ONLY (read-тяжёлый режим). + +**Gate-постура (реализована, commit `bfc1f575`):** все инструменты трёх серверов +(`mcp__perplexity__*` / `mcp__exa__*` / `mcp__firecrawl__*`) классифицированы как **read_only** +в `tools/mcp-tool-classifier.mjs` (+тест). Это не намерение, а зафиксированный факт: router-gate +пускает их без approve, мутаций они не несут. + +## Boundaries (конфликт-аудит) + +- **RT1 — ↔ context7 (#60):** разные слои знаний. context7 = документация библиотек/SDK + (vendor docs известного пакета); research-tooling = открытый веб — практики, нормы, + конкуренты, новости. context7 первый для «как настроить пакет X»; research для «что + индустрия делает с Y». +- **RT2 — ↔ openapi-mcp (#47):** разный объект. openapi = наш REST-спек (introspection + endpoints/схем); research = внешние источники в вебе. +- **RT3 — ↔ Laravel Boost (#10):** разный масштаб. Boost = Laravel-экосистема и runtime-запросы + в app/; research = веб вне проекта. +- **RT4 — ↔ Sentry (#34) / Redis (#35):** разная плоскость. Sentry/Redis = runtime-факты + прод-системы (ошибки/очереди/кэш); research = внешние знания. +- **RT5 — ↔ graphify (#86):** направление. graphify = внутренний граф проекта (наружу не + ходит); research = наружу, в открытый веб. Post-mortem: graphify даёт blast radius внутри, + research приносит внешний контекст. +- **RT6 — ↔ GitHub MCP (#3):** разный канал. GitHub = операции с репозиторием/issues/PR; + research = открытый веб. +- **RT7 — внутренние слои (anti-overlap внутри пака):** хотя все три «ищут в вебе», роли + не пересекаются. **perplexity** = ранжированный ответ-с-источниками; **exa** = семантическое + обнаружение источников по смыслу; **firecrawl** = глубокое чтение/обход конкретных страниц. + Канонический порядок — связка L17: perplexity (ответ) → exa (обнаружение) → firecrawl + (глубокое чтение). +- **RT8 — платные API + запрет авто-трат:** все три держат платные ключи (прецедент MKT8 + / READ-ONLY Sentry/Redis). Ключи только в пользовательском окружении; без авто-расхода + без нужды; gitleaks стережёт утечку в репозиторий. +- **RT9 — классификация `research` ≠ analysis/knowledge_graph_query/planning:** `research` + = разведка широты во внешнем вебе на крупных/абстрактных задачах. Не перехватывает + `analysis` (статанализ кода — Semgrep/ToB), `knowledge_graph_query` (внутренний граф — + graphify), `planning` (Superpowers/CCPM). Разграничение — триггер-ключевые слова + + настоящий ADR. + +## Alternatives Considered + +- **Только WebSearch/WebFetch (встроенные)** — отклонено: дают сырой список/одну страницу, + без ранжированного ответа-с-источниками, без семантического обнаружения, без глубокого + обхода. research-tooling — качественный апгрейд. +- **Один сервер вместо трёх** — отклонено: роли не дублируются (RT7); ответ ≠ обнаружение ≠ + глубокое чтение. Один сервер не закрывает все три потребности. +- **DEFERRED до Б-1** — отклонено: владелец принял платные API сейчас (owner waiver); + слой полезен немедленно для разведки практик/норм при проектировании. + +## Consequences + +**Positive:** + +- Закрыт пробел «открытый веб»: 0 → 3 узла research-разведки. +- Новая **20-я off-phase подкатегория research-tooling**; номера #87–#89. +- Связка **L17** research chain (`brainstorming` → perplexity → exa → firecrawl) в + routing-off-phase.md (canonical chain). +- Провенанс-вет IS9 всех трёх пройден ДО формализации — ни одного FAIL. +- Gate-постура read_only зафиксирована в коде (не декларация): мутаций нет. + +**Neutral / Cautionary:** + +- Платные API: расход контролируется дисциплиной (без авто-вызовов без нужды); ключи в env. +- Bulk-load MCP-инструментов исторически ронял субагентов API-ошибкой; +3 сервера + увеличивают суммарное число инструментов — митигация через deferred-tools (схемы по запросу), + риск помечен в дом-README раздела. +- `perplexity_research` медленный (30s+) — для глубоких задач, не для быстрых вопросов. + +## Related Decisions + +- **ADR-014** — A8 infosec-tooling; IS9-провенанс-дисциплина, прецедент платных/внешних. +- **ADR-015** — C1 marketing-tooling; паттерн «пустой/новый слой → наполнение», MKT8 + (READ-ONLY + запрет авто-трат) — прямой предок RT8. +- **ADR-017** — knowledge-graph-tooling; граница «внутрь vs наружу» (graphify ↔ research, RT5). + +## Enforcement + +Граница research-tooling против смежных узлов (RT1–RT9) проверяется при маршрутизации: задача +«открытый веб / практики / нормы / конкуренты» → research-узлы (#87–#89); задача «документация +библиотеки» → context7 (#60); «наш API» → openapi (#47); «внутренний граф» → graphify (#86); +«runtime прод» → Sentry/Redis (#34/#35). Read-only-постура трёх серверов закреплена в +`tools/mcp-tool-classifier.mjs` (+тест в `tools/mcp-tool-classifier.test.mjs`) — router-gate +пускает их без approve и блокирует любую не-read_only попытку по умолчанию. Ключи API только +в пользовательском окружении; gitleaks (pre-commit/pre-push) блокирует утечку в репозиторий. +Узлы #87–#89 живут в `docs/registry/nodes.yaml` (`subcategory: research-tooling`, +`triggers.classification: research`); инвариант покрытия карточками (Машина 3-E) требует +контракт-карточку на каждый узел (`docs/registry/contracts/{perplexity,exa,firecrawl}-mcp.contract.json`). + +## References + +- `docs/superpowers/specs/2026-06-14-perplexity-pack-research-tooling-design-v3.md` — design (D1–D9). +- `docs/research/research-vet.md` — IS9 провенанс-вет (#87/#88/#89, все ПРИНЯТ). +- `docs/research/README.md` — дом раздела research-tooling. +- `docs/Tooling_v8_3.md` §4.60–§4.62 — 9-атрибутные блоки узлов #87–#89. +- `docs/Plugin_stack_rules_v1.md` R10.1 Блок 3 + R15.6 — реестр ролей MCP-серверов. +- `docs/Pravila_raboty_Claude_v1_1.md` §13.2 — Off-phase research-tooling абзац. +- `docs/routing-off-phase.md` — связка L17 (research chain) + routing #87–#89. +- `.mcp.json` — три блока mcpServers (perplexity/exa/firecrawl); commit `bfc1f575` (gate read_only). diff --git a/docs/registry/contracts/exa-mcp.contract.json b/docs/registry/contracts/exa-mcp.contract.json new file mode 100644 index 00000000..4774d738 --- /dev/null +++ b/docs/registry/contracts/exa-mcp.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "exa-mcp", + "kind": "external", + "needs": ["нужно найти источники по смыслу, которые keyword-поиск пропускает"], + "produces": ["семантически близкие результаты веб-поиска (web_search_exa) + страница по URL (web_fetch_exa)"], + "constraints": ["READ-ONLY MCP, живой веб", "платный API, ключ EXA_API_KEY только в env", "обнаружение источников, НЕ ранжированный ответ (perplexity #87) и НЕ глубокое чтение (firecrawl #89)"], + "preview-form": "none", + "defaults": ["семантическое обнаружение источников по смыслу"], + "key-decisions": ["web_search_exa vs web_fetch_exa; глубина выдачи"], + "acceptance-criteria": ["найдены концептуально релевантные источники по смыслу запроса"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/firecrawl-mcp.contract.json b/docs/registry/contracts/firecrawl-mcp.contract.json new file mode 100644 index 00000000..182e93d3 --- /dev/null +++ b/docs/registry/contracts/firecrawl-mcp.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "firecrawl-mcp", + "kind": "external", + "needs": ["нужно прочитать страницу целиком / обойти сайт / извлечь структурированное со страниц"], + "produces": ["содержимое страниц и обхода (scrape/batch_scrape/map/search/crawl/extract) + автономный web-research (firecrawl_agent)"], + "constraints": ["READ-ONLY (read-тяжёлый) MCP, живой веб", "платный API, ключ FIRECRAWL_API_KEY только в env", "глубокое чтение/обход, НЕ ранжированный ответ (perplexity #87) и НЕ наш REST-спек (openapi #47)"], + "preview-form": "none", + "defaults": ["scrape одной страницы целиком в markdown"], + "key-decisions": ["scrape vs crawl vs extract vs agent; глубина обхода"], + "acceptance-criteria": ["получено полное/структурированное содержимое целевой страницы или обхода"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/perplexity-mcp.contract.json b/docs/registry/contracts/perplexity-mcp.contract.json new file mode 100644 index 00000000..5b1ff971 --- /dev/null +++ b/docs/registry/contracts/perplexity-mcp.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "perplexity-mcp", + "kind": "external", + "needs": ["вопрос веб-разведки: актуальные практики/нормы/конкуренты — нужен ответ-с-источниками"], + "produces": ["ранжированный web-ответ с цитатами (sonar): search/ask/research/reason"], + "constraints": ["READ-ONLY MCP, живой веб", "платный API (sonar-*), ключ PERPLEXITY_API_KEY только в env — без авто-расхода без нужды", "НЕ SDK-доки (context7 #60); НЕ внутренний граф проекта (graphify #86)"], + "preview-form": "none", + "defaults": ["ранжированный ответ-с-источниками, не сырой список ссылок"], + "key-decisions": ["search vs ask vs research vs reason; глубина (reasoning_effort)"], + "acceptance-criteria": ["получен ответ с цитируемыми источниками по запросу веб-разведки"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/nodes.yaml b/docs/registry/nodes.yaml index 2a2305b0..74eb85e4 100644 --- a/docs/registry/nodes.yaml +++ b/docs/registry/nodes.yaml @@ -1718,6 +1718,75 @@ nodes: version: "0.8.20+" spike_branch: "spike/graphify-2026-05-27" + - id: "#87" + name: "perplexity MCP" + slug: "perplexity-mcp" + category: "off-phase" + subcategory: "research-tooling" + status: "active" + dormancy_reason: null + capabilities: "MCP-сервер веб-разведки Perplexity: perplexity_search (ранжированный web-ответ), perplexity_ask (sonar-pro real-time с цитатами), perplexity_research (sonar-deep-research, многоисточниковое расследование), perplexity_reason (sonar-reasoning-pro). READ-ONLY, живой веб; назначение — ответ-с-источниками, не сырой список ссылок." + triggers: + - {keyword: "веб-разведка", weight: 1.0} + - {keyword: "актуальные практики", weight: 1.0} + - {keyword: "что говорят источники", weight: 1.0} + - {keyword: "ранжированный веб-ответ", weight: 1.0} + - {keyword: "perplexity", weight: 1.0} + - {keyword: "sonar", weight: 1.0} + - {keyword: "deep research", weight: 1.0} + - {classification: "research", weight: 1.0} + boundaries: + - {adr: "ADR-019", role: "RT1 ≠ context7 #60 (открытый веб/практики vs SDK-доки); RT4 — perplexity = ранжированный ответ vs exa #88 семантическое обнаружение"} + chain_membership: ["L17"] + attributes: + tooling_section: "§4.60 #87" + install: "npx -y @perplexity-ai/mcp-server (в .mcp.json; PERPLEXITY_API_KEY в env)" + + - id: "#88" + name: "exa MCP" + slug: "exa-mcp" + category: "off-phase" + subcategory: "research-tooling" + status: "active" + dormancy_reason: null + capabilities: "MCP-сервер нейро/семантического веб-поиска Exa: web_search_exa (находит концептуально близкое, что keyword-поиск пропускает), web_fetch_exa (страница по URL). READ-ONLY, живой веб; назначение — обнаружение источников по смыслу, а не по точным словам." + triggers: + - {keyword: "семантический поиск", weight: 1.0} + - {keyword: "нейро-поиск", weight: 1.0} + - {keyword: "обнаружение источников по смыслу", weight: 1.0} + - {keyword: "концептуально близкое", weight: 1.0} + - {keyword: "exa", weight: 1.0} + - {classification: "research", weight: 1.0} + boundaries: + - {adr: "ADR-019", role: "RT4 — exa = семантическое обнаружение vs perplexity #87 ранжированный ответ vs firecrawl #89 глубокое чтение"} + chain_membership: ["L17"] + attributes: + tooling_section: "§4.61 #88" + install: "npx -y exa-mcp-server (в .mcp.json; EXA_API_KEY в env)" + + - id: "#89" + name: "firecrawl MCP" + slug: "firecrawl-mcp" + category: "off-phase" + subcategory: "research-tooling" + status: "active" + dormancy_reason: null + capabilities: "MCP-сервер глубокого чтения и обхода веба Firecrawl: firecrawl_scrape / batch_scrape / map / search / crawl / extract + firecrawl_agent (автономный web-research) + firecrawl_agent_status. READ-ONLY (read-тяжёлый), живой веб; назначение — прочитать страницу целиком, обойти сайт, извлечь структурированное." + triggers: + - {keyword: "глубокое чтение страницы", weight: 1.0} + - {keyword: "обход сайта", weight: 1.0} + - {keyword: "scrape", weight: 1.0} + - {keyword: "crawl", weight: 1.0} + - {keyword: "извлечь структурированное со страницы", weight: 1.0} + - {keyword: "firecrawl", weight: 1.0} + - {classification: "research", weight: 1.0} + boundaries: + - {adr: "ADR-019", role: "RT4 — firecrawl = глубокое чтение/обход vs perplexity #87 ответ vs exa #88 обнаружение; RT3 ≠ openapi #47 (внешний веб vs наш REST-спек)"} + chain_membership: ["L17"] + attributes: + tooling_section: "§4.62 #89" + install: "npx -y firecrawl-mcp (в .mcp.json; FIRECRAWL_API_KEY в env)" + chains: L1: name: "feature discovery & implementation chain" @@ -1850,3 +1919,13 @@ chains: - "#79" - "#80" - "#81" + + L17: + name: "research chain" + sequence: + - "superpowers:brainstorming" + - "#87" + - "#88" + - "#89" + triggers: + - {classification: "research"} diff --git a/docs/routing-off-phase.md b/docs/routing-off-phase.md index c808c4c6..2a43a50c 100644 --- a/docs/routing-off-phase.md +++ b/docs/routing-off-phase.md @@ -12,7 +12,7 @@ > **Источник истины.** Tooling §4.X (детальное описание каждого узла), Pravila §13.2 > (категоризация off-phase), PSR_v1 R10.1 (3-блочный реестр ролей). > -> **Версия.** 1.6 (22.05.2026 — C1 marketing-tooling: +10 строк routing #74-#83 + связка L16 (marketing chain), ADR-015). 1.5 (21.05.2026 — A8 install-sync: #68 ZAP + #70 Ward установлены портативно → строки routing #68/#70 обновлены, статус pending install снят, setup-доки `docs/security/{zap,ward}-setup.md`). 1.4 (21.05.2026 — A8 infosec-tooling: +6 строк routing #68-#73 + связка L15 (security go-live chain), ADR-014; #69 Nuclei/#70 Ward — CLI (не MCP), #68 ZAP/#70 Ward pending install. 1.3 (20.05.2026) — A1 backend-tooling: +4 строки routing #64-#67 + связка L14 + scope §4.11→§4.42, ADR-013. v1.2 — finance-tooling: +3 строки routing #61-#63 + связка L13 + scope, ADR-012. v1.1 18.05.2026 вечер — аудит дисциплины R15: +строка «диагностика +> **Версия.** 1.7 (14.06.2026 — research-tooling: +3 строки routing #87-#89 (классификация `research`) + связка L17 (research chain), ADR-019; узлы perplexity/exa/firecrawl, 20-я off-phase подкатегория). 1.6 (22.05.2026 — C1 marketing-tooling: +10 строк routing #74-#83 + связка L16 (marketing chain), ADR-015). 1.5 (21.05.2026 — A8 install-sync: #68 ZAP + #70 Ward установлены портативно → строки routing #68/#70 обновлены, статус pending install снят, setup-доки `docs/security/{zap,ward}-setup.md`). 1.4 (21.05.2026 — A8 infosec-tooling: +6 строк routing #68-#73 + связка L15 (security go-live chain), ADR-014; #69 Nuclei/#70 Ward — CLI (не MCP), #68 ZAP/#70 Ward pending install. 1.3 (20.05.2026) — A1 backend-tooling: +4 строки routing #64-#67 + связка L14 + scope §4.11→§4.42, ADR-013. v1.2 — finance-tooling: +3 строки routing #61-#63 + связка L13 + scope, ADR-012. v1.1 18.05.2026 вечер — аудит дисциплины R15: +строка «диагностика > конверсии» → process-analysis #53 (M3); +note про UI-пул #31/#32 как делегирующие > строки, не R15-routed (M1). v1.0 — Rec3 SYSTEM-аудита). Триггеры — формулировки > заказчика или явные ключевые слова в промпте. @@ -55,6 +55,9 @@ | `refactor` | #64 Rector | 1 | | `refactor` | #65 PHP Insights | 1 | | `refactor` | #19 Superpowers v5.1.0 | 0.8 | +| `research` | #87 perplexity MCP | 1 | +| `research` | #88 exa MCP | 1 | +| `research` | #89 firecrawl MCP | 1 | | `security` | #68 OWASP ZAP | 1 | | `security` | #69 Nuclei | 1 | | `security` | #70 Ward | 1 | @@ -96,6 +99,7 @@ | L14 | `Rector` (#64) → `PHP Insights` (#65) → `Larastan` (#12) → `deptrac` (#43) | backend-quality chain: авто-трансформация кода (Rector) → метрики сложности/архитектуры (PHP Insights) → типовой статанализ (Larastan) → fitness направления слоёв (deptrac). Все на одном PHP-коде, разные оси. Anti-pattern: Rector-автоправка и PHP Insights-метрика — разные фазы, не один блокирующий шаг (ADR-013). | | L15 | `security-go-live` (#73) → статика (`gitleaks` #8 / `Semgrep` #25 / `Ward` #70 / `Trail of Bits` #39) → `pdn-152fz-audit` (#71) → `threat-model` (#72) → динамика (`Nuclei` #69 широта → `OWASP ZAP` #68 глубина, цель 127.0.0.1 IS8) | security go-live chain: единый прогон перед публикацией → вердикт GO/NO-GO. #73 оркеструет, не заменяет D3 (IS7). Anti-pattern: ZAP/Nuclei в pre-commit хук (тяжёлые, нужна запущенная цель); #73 ≠ audit-portal (полный 14-фазный аудит). ADR-014. | | L16 | `brainstorming` → `marketing` (#74) → `marketing-ru` (#77) → каналы (#78 Метрика / #79 Wordstat / #80 Telegram / #81 Postiz) | marketing chain: entry-скил #74 оркеструет RU-заземлённую маркетинговую работу через специфику рынка (#77) и канальные MCP (#78-#81). Anti-pattern: #82 DataForSEO / #83 Unisender Go — DEFERRED, не использовать до Б-1. ADR-015. | +| L17 | `brainstorming` → `perplexity` (#87 ask/research) → `exa` (#88 discovery) → `firecrawl` (#89 deep-read) | research chain: разведка широты на крупных/абстрактных задачах — ранжированный ответ-с-источниками (perplexity) → семантическое обнаружение источников по смыслу (exa) → глубокое чтение/обход страниц (firecrawl). Anti-pattern: подмена context7 #60 (открытый веб vs SDK-доки) или graphify #86 (наружу vs внутренний граф проекта); платные API — без авто-расхода. ADR-019. | **Anti-pattern связок** (не комбинировать в одной задаче): diff --git a/docs/superpowers/plans/2026-06-14-perplexity-pack-plan3-router-registry.md b/docs/superpowers/plans/2026-06-14-perplexity-pack-plan3-router-registry.md new file mode 100644 index 00000000..a6b7343c --- /dev/null +++ b/docs/superpowers/plans/2026-06-14-perplexity-pack-plan3-router-registry.md @@ -0,0 +1,50 @@ +# План: Perplexity Pack — реестр узлов и таблицы соответствия (Plan 3) + +## Цель + +Подхватить три новых off-phase узла research-tooling — perplexity #87, exa #88, firecrawl #89 — из единого источника `docs/registry/nodes.yaml` и регенерировать +все производные таблицы соответствия «задача → инструмент». Реализует раздел {#D7} +дизайна и закрывает критерий {#D8} (пункт 5 + регрессия инструментов). + +Состав работы: + +- В `docs/registry/nodes.yaml` добавляются три карточки узлов (#87/#88/#89) с + `category: off-phase`, `subcategory: research-tooling`, `status: active` и + `triggers.classification: research` (по форме существующих off-phase MCP-узлов + #78/#79/#80), плюс каноническая связка **L17** research chain + (`brainstorming` → perplexity → exa → firecrawl). +- Авто-регенерируемые блоки приводятся в соответствие генератором + `node tools/registry-render.mjs`: таблица соответствия в `docs/routing-off-phase.md` + (регион `auto:routing-table`) и сводка реестра в `docs/Tooling_v8_3.md` + (регион `auto:tooling-registry-summary`). +- В `docs/routing-off-phase.md` добавляется ручная строка связки L17 и поднимается + версия заголовка. +- Карта `docs/automation-graph.html` (NODE_META baseline) и + `docs/automation-graph-data.js` (NODE_SECTION) получают по три новых элемента. +- Фикстуры-счётчики `tools/registry-load.test.mjs` поднимаются под новое число узлов + (86 → 89 nodes; active 78 → 81). +- Финальная регрессия инструментов остаётся зелёной. + +```skills-json +[] +``` + +```steps-json +[ + {"op": "MultiEdit", "object": "docs/registry/nodes.yaml", "ref": "D7"}, + {"op": "MultiEdit", "object": "tools/registry-load.test.mjs", "ref": "D7"}, + {"op": "Bash", "object": "node tools/registry-render.mjs", "ref": "D7"}, + {"op": "Edit", "object": "docs/routing-off-phase.md", "ref": "D7"}, + {"op": "Edit", "object": "docs/automation-graph.html", "ref": "D7"}, + {"op": "Edit", "object": "docs/automation-graph-data.js", "ref": "D7"}, + {"op": "Bash", "object": "npx vitest run --root app --config vitest.config.tools.mjs", "ref": "D8"} +] +``` + +```verified-context-json +[ + {"id": "vc1", "kind": "EXTRACTED", "ref": "tools/cost-pricing.mjs", "anchor": "export const PRICING = Object.freeze("}, + {"id": "vc2", "kind": "EXTRACTED", "ref": "docs/registry/nodes.yaml", "anchor": "subcategory: \"knowledge-graph-tooling\""}, + {"id": "vc3", "kind": "EXTRACTED", "ref": "docs/routing-off-phase.md", "anchor": ""} +] +``` diff --git a/docs/superpowers/specs/2026-06-14-perplexity-pack-research-tooling-design-v3.md b/docs/superpowers/specs/2026-06-14-perplexity-pack-research-tooling-design-v3.md new file mode 100644 index 00000000..e035bd54 --- /dev/null +++ b/docs/superpowers/specs/2026-06-14-perplexity-pack-research-tooling-design-v3.md @@ -0,0 +1,204 @@ +# Дизайн: интеграция «Perplexity Pack» (off-phase research-tooling) — v3 + +**Дата:** 2026-06-14 +**Тип:** off-phase tooling integration (research-канал MCP) +**Статус:** проектируется +**Примечание:** повтор печати после фикса таймаута тяжёлых LLM-вызовов (судья 30с→90с); содержание идентично v2, раздел D7 нейтрализован. + +## Цель + +Завести в тулчейн Лидерры новый off-phase слой **research-tooling** — три MCP-сервера +веб-разведки (`perplexity`, `exa`, `firecrawl`), сейчас присутствующие только в ветке +`worktree-perplexity-pack` (main не затронут, в нормативке не формализованы). Назначение +слоя — разведка широты на крупных/абстрактных задачах: актуальные практики, нормативные +требования, фич-разведка конкурентов, deep-research с цитатами. Интеграция доводится по +обкатанному паттерну off-phase (как A8 infosec, C1 marketing): провенанс-вет → перенос +конфигурации в main → формализация в нормативке → обновление реестра узлов тулчейна +(`docs/registry/nodes.yaml`) и производных от него таблиц соответствия «задача → инструмент». + +```verified-context-json +[ + {"id":"vc1","kind":"EXTRACTED","ref":".mcp.json","anchor":"\"$schema\": \"https://raw.githubusercontent.com/anthropics/claude-code/main/schemas/mcp.json\""}, + {"id":"vc2","kind":"EXTRACTED","ref":"docs/routing-off-phase.md","anchor":""}, + {"id":"vc3","kind":"EXTRACTED","ref":"docs/security/infosec-vet.md","anchor":"Провенанс-вет внешних инструментов A8 infosec-tooling"}, + {"id":"vc4","kind":"EXTRACTED","ref":"tools/cost-pricing.mjs","anchor":"export const PRICING = Object.freeze("} +] +``` + +## Состав пака {#D1} + +**Контракт.** Слой состоит из трёх MCP-серверов, каждый — отдельный узел реестра: + +- **perplexity** (`@perplexity-ai/mcp-server`) — ранжированный веб-ответ + sonar: + `perplexity_search` (web search ranked) / `perplexity_ask` (sonar-pro, real-time) / + `perplexity_research` (sonar-deep-research, цитаты) / `perplexity_reason` + (sonar-reasoning-pro). Назначение: получить ответ-с-источниками, а не сырой список. +- **exa** (`exa-mcp-server`) — нейро/семантический поиск: `web_search_exa` (находит + концептуально близкое, что keyword-поиск пропускает) / `web_fetch_exa` (страница по URL). + Назначение: обнаружение источников по смыслу. +- **firecrawl** (`firecrawl-mcp`) — глубокое чтение и обход: `firecrawl_scrape` / + `batch_scrape` / `map` / `search` / `crawl` / `extract` + `firecrawl_agent` + (автономный web-research) + `firecrawl_agent_status`. Назначение: прочитать + страницу целиком, обойти сайт, извлечь структурированное. + +**Конвенция разделения (anti-overlap).** Хотя все три умеют «веб-поиск», их роли +не пересекаются по слою: perplexity — ранжированный ответ; exa — семантическое +обнаружение; firecrawl — глубокое чтение/обход. Граница закрепляется в ADR ({#D6}). + +**Крайний случай.** Состав финализируется ПОСЛЕ провенанс-вета ({#D2}): любой сервер +с неприемлемым провенансом исключается из пака, остальные интегрируются как есть. + +## Провенанс-вет {#D2} + +**Контракт.** Перед формализацией каждого из трёх пакетов выполняется обязательный +провенанс-вет по методологии существующего `docs/security/infosec-vet.md`: + +1. README + метаданные через npm registry и GitHub API — факты, не память. +2. Поля на каждый пакет: владелец/организация, лицензия, звёзды, активность коммитов, + дата последнего релиза, что инструмент исполняет (сетевые вызовы, телеметрия, + аутентификация), куда уходит трафик. +3. Вердикт: ПРИНЯТ / ОТКЛОНЁН с зафиксированной причиной. + +**Артефакты.** Новый `docs/research/research-vet.md` (вет-док, единственный +авторитетный источник «какой репозиторий/версию ставить») + `docs/research/README.md` +(дом раздела, как `docs/ml/` и `docs/marketing/`). + +**Крайний случай.** Платные API (sonar-*, exa, firecrawl): ключи `PERPLEXITY_API_KEY` / +`EXA_API_KEY` / `FIRECRAWL_API_KEY` живут ТОЛЬКО в пользовательском окружении и +никогда не попадают в репозиторий (правило секретов проекта; gitleaks). + +**Критерий.** Вет-док завершён со статусом ЗАВЕРШЁН и таблицей вердиктов на все три +пакета; пакеты с вердиктом ОТКЛОНЁН не попадают в перенос ({#D3}). + +## Перенос конфигурации {#D3} + +**Контракт.** Перенос аддитивный: в `.mcp.json` (main) добавляются ровно три блока +`mcpServers` (`perplexity`, `exa`, `firecrawl`) — по образцу уже присутствующих +блоков `sentry`/`openapi` (поля `command`/`args`/`env`/`comment`). Существующие блоки +не трогаются. + +**Конвенция.** Каждый блок несёт `env` с ключом через `${VAR}`-подстановку (ключ — +из пользовательского окружения, не из файла) и `comment` с назначением, источником +пакета, статусом и пином. + +**Постура активации.** Active: блоки в main, ключи уже в пользовательском окружении; +при отсутствии ключа сервер обязан падать gracefully (как `sentry`), не ломая сессию. + +**Безопасность правки.** Перед правкой `.mcp.json` снимается бэкап; после правки JSON +валидируется; при невалидном JSON — авто-откат из бэкапа (необратимого повреждения +прод-конфига не происходит). Правка аддитивная, существующие серверы не трогаются. + +**Крайний случай / риск.** Bulk-load большого числа MCP-инструментов исторически давал +API-ошибку и ронял субагентов; +3 сервера увеличивают суммарное число инструментов. +Митигация: механизм deferred-tools (загрузка схем по запросу) + явная пометка риска +в `comment` и в дом-README, чтобы при массовом субагент-прогоне учитывать. + +**Критерий.** В main `.mcp.json` присутствуют три валидных блока; JSON валиден по +объявленной `$schema`; есть бэкап и пройдена пост-валидация. + +## Реестр инструментов {#D4} + +**Контракт.** В `docs/Tooling_v8_3.md` Прил. Н заводится новая (20-я) off-phase +подкатегория **research-tooling** с тремя узлами: **#87 perplexity**, **#88 exa**, +**#89 firecrawl**. Каждый узел получает 9-атрибутный блок по шаблону §0.1 (как у +существующих off-phase узлов). + +**Конвенция счётчиков.** §0 «КАНОН СЧЁТЧИКОВ» — единственный источник числовых +счётчиков; счётчик off-phase узлов поднимается 86→89. CLAUDE.md числа не дублирует, +а ссылается на этот канон. + +**Критерий.** Три §4.x-блока добавлены; §0-счётчик согласован; cross-ref-версии +Прил. Н подняты согласованно с остальной нормативкой ({#D5}). + +## Нормативная синхронизация {#D5} + +**Контракт.** Через канал `claude-md-management` синхронизируются четыре нормативных +документа (атомарным version-bump-набором, как требует cross-ref-checker): + +- **CLAUDE.md** — §3.3 +3 строки оперативной карты, §0 cross-refs (Pravila/PSR/Tooling), + §6 +абзац интеграции, §9 +запись, версия шапки. +- **Pravila_raboty_Claude_v1_1.md** — §13.2 +абзац «Off-phase research-tooling», версия. +- **Plugin_stack_rules_v1.md** — R10.1 Блок 3 (MCP-серверы) +3 строки, R15.6 + +research-tooling, версия. +- **Tooling Прил. Н** — см. {#D4}. + +**Конвенция.** Все четыре файла несут согласованные cross-ref-строки друг на друга +с поднятыми версиями; §0/footer-счётчики берутся из канона Tooling Прил. Н §0. + +**Критерий.** cross-ref-checker и l1-watcher не показывают дрейфа после правок. + +## Границы (ADR-019) {#D6} + +**Контракт.** Новый ADR (следующий свободный номер; в плане подтверждается фактически) +закрепляет границы research-tooling против смежных узлов, чтобы не было дублей: + +- vs `context7` (#60) — context7 для документации библиотек/SDK; research-tooling для + открытого веба, практик, нормативных требований, конкурентов. +- vs `openapi` (#47) — openapi для нашего REST API; research-tooling для внешних источников. +- vs `Boost` (#10) — Boost для Laravel-экосистемы; research-tooling для веба. +- vs `Sentry` (#34) / `Redis` (#35) — runtime-факты прод-системы; research-tooling — внешние знания. +- vs `graphify` (#86) — graphify по внутреннему графу проекта; research-tooling — наружу. +- vs `GitHub` MCP (#3) — GitHub для репо-операций; research-tooling — открытый веб. + +**Внутренние границы.** perplexity (ранжированный ответ) / exa (семантическое +обнаружение) / firecrawl (глубокое чтение+обход) — слои из {#D1}. + +**Конвенция.** ADR в формате adr-kit (Status / Context / Decision / Consequences / +Enforcement), проходит `adr-judge` (lefthook job 9) без `--llm`. + +**Критерий.** ADR принят, `adr-judge` зелёный. + +## Реестр узлов и таблицы соответствия {#D7} + +**Контракт.** Три новых узла подхватываются из единого источника — +`docs/registry/nodes.yaml`: + +- В `nodes.yaml` добавляются **три записи узлов** (#87/#88/#89) с + `subcategory: research-tooling` и `triggers.classification: "research"`. +- Из `nodes.yaml` авто-регенерируются производные: таблица соответствия «задача → + инструмент» в `docs/routing-off-phase.md` (блок между `auto:routing-table:begin`/`end`) + и карта соответствия (`registry-to-classification-map.mjs`). +- В `docs/routing-off-phase.md` добавляется каноническая связка **L17** research chain: + `brainstorming` → perplexity (ask/research) → exa (discovery) → firecrawl (deep-read). +- `docs/automation-graph.html` — три новых элемента (NODE_META baseline + NODE_SECTION). +- `tools/registry-load.test.mjs` — счётчики фикстур поднимаются под новое число узлов. + +**Конвенция.** Записи узлов следуют форме существующих off-phase узлов реестра; +авто-генерируемые блоки правятся только генератором, не вручную. + +**Крайний случай.** Новая классификация `research` не должна перехватывать задачи, +покрытые `analysis`/`knowledge_graph_query`/`planning`; разграничение — через ADR ({#D6}). + +**Критерий.** Регенерированные таблица соответствия и карта содержат research-узлы; +`registry-load.test.mjs` зелёный. + +## Критерий приёмки {#D8} + +**Контракт.** Интеграция считается доделанной, когда: + +1. Провенанс-вет завершён, состав пака финализирован ({#D2}). +2. Три блока в main `.mcp.json`, JSON валиден, есть бэкап ({#D3}). +3. Реестр + нормативка синхронизированы без дрейфа cross-ref ({#D4}, {#D5}). +4. ADR принят, `adr-judge` зелёный ({#D6}). +5. nodes.yaml + регенерация + карта обновлены, `registry-load.test.mjs` зелёный ({#D7}). +6. Регрессия инструментов зелёная: одиночная команда + `npx vitest run --root app --config vitest.config.tools.mjs` (база 3928 passed + 2 skip, + не ниже после правок фикстур). +7. Live-smoke трёх серверов ПОСЛЕ переноса в main и перезапуска: по одному вызову + на сервер (`perplexity_ask` / `web_search_exa` / `firecrawl_scrape`) возвращает + осмысленный ответ — подтверждает живость и ключи. + +**Конвенция.** Доказательства — фактический вывод команд, не утверждения. + +## Конвенция заголовков и версий {#D9} + +**Контракт.** Версии и даты ведутся единообразно: + +- Дата во всех новых/правленых заголовках — 2026-06-14. +- Version-bump четырёх нормативных файлов — атомарным набором с согласованными + cross-ref-строками (см. {#D5}). +- §9 CLAUDE.md и changelog получают по записи с указанием: app-фича/нет, затронуты + ли §0 cross-refs, через какой канал внесено. +- Новые узлы нумеруются строго после последнего существующего (#86) → #87/#88/#89. + +**Критерий.** Заголовки и счётчики согласованы; нет «TBD»/«TODO»/полупустых разделов. diff --git a/tools/observer-chain-map.json b/tools/observer-chain-map.json index 6671413e..8fcfeb6e 100644 --- a/tools/observer-chain-map.json +++ b/tools/observer-chain-map.json @@ -1,7 +1,7 @@ { "_note": "node_chosen -> L-цепочки. Только узлы, входящие хотя бы в одну L1-L13. Узлы вне цепочек (direct, прочее) НЕ включаются -> chainsFor вернёт null. Имена ключей = реальные значения primary_rationale.node_chosen (skill-id из skill_invoked). MCP/agent-узлы (laravel-boost, openapi-mcp-server, api-docs, sentry-mcp, redis-mcp, pest, github-mcp) в node_chosen не появляются, но включены для полноты покрытия цепочек L1-L13 (контролёр C6 требует, чтобы каждая L из routing-off-phase.md была покрыта). Синхронизируется с docs/routing-off-phase.md через tools/observer-chain-map-checker.mjs.", "discovery-interview": ["L1", "L2"], - "superpowers:brainstorming": ["L1", "L16"], + "superpowers:brainstorming": ["L1", "L16", "L17"], "superpowers:writing-plans": ["L1"], "superpowers:subagent-driven-development": ["L1"], "audit-portal": ["L2"], @@ -52,5 +52,8 @@ "yandex-metrika-mcp": ["L16"], "yandex-wordstat-mcp": ["L16"], "telegram-mcp": ["L16"], - "postiz": ["L16"] + "postiz": ["L16"], + "perplexity-mcp": ["L17"], + "exa-mcp": ["L17"], + "firecrawl-mcp": ["L17"] } diff --git a/tools/registry-load.test.mjs b/tools/registry-load.test.mjs index 3ade5f3d..9d15b37f 100644 --- a/tools/registry-load.test.mjs +++ b/tools/registry-load.test.mjs @@ -5,9 +5,9 @@ import { loadRegistry, clearCache, findByClassification, findByKeyword, findActi describe('registry-load', () => { beforeEach(() => clearCache()); - it('loads registry (86 nodes after #86 graphifyy added 27.05.2026)', () => { + it('loads registry (89 nodes after #87-89 research-tooling added 14.06.2026)', () => { const r = loadRegistry(); - expect(r.nodes).toHaveLength(86); + expect(r.nodes).toHaveLength(89); expect(r.version).toBe('0.1.0'); }); @@ -43,12 +43,12 @@ describe('registry-load', () => { expect(r.indexById.get('#1').status).toBe('historic'); }); - it('findActiveNodes excludes non-active', () => { + it('findActiveNodes excludes non-active (nodes.yaml registry)', () => { const r = loadRegistry(); const active = findActiveNodes(r); - // 86 nodes total; #1 historic, #17 dormant, #44/#50/#54/#67/#82/#83 deferred, - // #84/#85/#86 (project-agents 24.05 + graphifyy 27.05) are active → 75 + 3 = 78 active - expect(active).toHaveLength(78); + // 89 nodes total; #1 historic, #17 dormant, #44/#50/#54/#67/#82/#83 deferred, + // #84/#85/#86 (project-agents 24.05 + graphifyy 27.05) + #87/#88/#89 (research-tooling 14.06) are active → 78 + 3 = 81 active + expect(active).toHaveLength(81); expect(active.map(n => n.id)).toContain('#18'); expect(active.map(n => n.id)).toContain('#19'); expect(active.map(n => n.id)).not.toContain('#1');