<divid="legend-sections-title">📂 Разделы деятельности Лидерры</div>
<divclass="legend-section">
<p>Узлы карты распределены по функциональным разделам. Пустые разделы — будущие домены «мозга», под которые в карте dev-автоматики ещё нет узлов (playbook не наполнен).</p>
<p>Отложенные «хотелки» развития мозга и портала — то, что решили сделать позже, чтобы не забыть. Источник правды — массив WISHLIST в этом HTML-файле; новая хотелка = новый объект.</p>
<divclass="wish-legend"><span>▶ к работе</span><span>⏸ ждёт зависимости</span><span>💭 идея</span></div>
<divclass="cat-item"data-filter-key="conflict:RED"><divclass="cat-dot"style="background:#ff5f57; border:1px dashed #ff5f57"></div>🔴 Не закрыт правилом</div>
<divclass="cat-item"data-filter-key="conflict:BLACK"><divclass="cat-dot"style="background:#888888; border:1px dashed #888888"></div>⚫ Возник на практике</div>
'§12 Superpowers — hard-rule уровня 0 цепочки приоритетов: скил инвокируется первым, §9 «Отступления» не применяется, economy-режим §12 не отменяет. Расходимость с другими документами — нарушение §7.',
'Оперативная карта проекта — технологии, команды, фазы, 7-уровневая цепочка приоритетов (§1, уровни 0–6) и §3.5 — ruflo как advisory/automation-подсистема, ссылки на документы.',
'Читается при старте каждой сессии; обновляется при новом инструменте или новой фазе.',
'Править можно только через скил `/claude-md-management:claude-md-improver` или `:revise-claude-md` (правило §5 п.10). Прямые Edit/Write блокируются хуком предупреждения.',
'Правила совместной работы плагинов — кто с кем работает, какая процедура обязательна. R0 — головной фильтр выбора плагинов (с реколлажа 16.05.2026 снова на вершине стека, не sub-policy под ruflo).',
'При выборе UI-инструмента (плагин Frontend Design против плагина UI UX Pro Max против MCP-сервера 21st Magic), при координации парных плагинов, при включении дополнительного MCP (внешнего сервиса-инструмента Claude) вне основных фаз.',
'Обязательное правило R14.5: плагины UI UX Pro Max, 21st Magic, Frontend Design — нельзя использовать одновременно. Обязательное правило R6.0 (фильтр стека) и R6.1 (палитра Forest) — нужно соблюдать при UI-выводе плагинов.',
[{name:'CLAUDE.md',desc:'CLAUDE.md §5 п.10 требует править только через скил claude-md-management, а PSR_v1 это ограничение не повторяет — риск прямых Edit',type:'GREEN'}]
'При выборе инструмента для фазы (нулевая документация / первая backend / вторая frontend / третья перед запуском в боевую среду), при добавлении нового инструмента, при обновлении версий.',
[{name:'плагин Frontend Design',desc:'Правило PSR_v1 R14.5: нельзя одновременно — UI UX Pro Max как материал, Frontend Design как решатель; риск смешать роли',type:'GREEN'}]
'Единственный разрешённый способ править CLAUDE.md — через скил claude-md-improver или revise-claude-md.',
'При любой правке CLAUDE.md (новая фаза, новый инструмент, смена версии, новые особенности — всё через скил).',
'Правило PSR_v1 R10.1 блок 1 (инфраструктурная категория). Внутри процедуры продолжают действовать §4 правил Клода (синхронизация Pravila + Tooling).',
'PSR_v1 R10.1 блок 1 #58 (authoring-tooling). HK1 hard-rule: только по явному /hookify, не проактивно; перед генерацией хука — обязательный pre-check на коллизию с зарегистрированными хуками settings.json; перезапись 6-компонентной economy/skill-discipline архитектуры запрещена. ADR-010.',
[{name:'PSR_v1',cond:'R10.1 блок 1 #58: authoring-tooling, HK1 pre-check (ADR-010)'}],
{name:'хук pre-claude-warn',desc:'Закрыто правилом HK1 (ADR-010): hookify — только по явному /hookify, перед генерацией хука обязательный pre-check на коллизию с существующими хуками settings.json; перезапись 6-компонентной economy/skill-discipline архитектуры запрещена',type:'GREEN'}
'При фиксации архитектурного решения — стек, паттерн, граница слоёв; ADR-NNN в docs/adr/. Открытые вопросы — не сюда, они в реестре Открытые_вопросы.',
'Правило PSR_v1 R10.1 блок 1 (architecture-tooling, off-phase). adr-judge врезан в lefthook pre-commit job 9 — декларативный regex без --llm, 0 вызовов Claude API. init/install-hooks НЕ запускаются (конфликт-аудит AK1/AK2). Не UI → вне фильтров R6.0/R6.1/R14. Tooling §4.11, CLAUDE.md §3.3 #36.',
[{name:'PSR_v1',cond:'R10.1 блок 1: architecture-tooling'},{name:'Tooling',cond:'§4.11 #36 — реестр'}],
[{name:'lefthook job 9 (adr-judge)',cond:'врезан как pre-commit проверка Enforcement-блоков'}],
'При архитектурном вопросе «какой паттерн подходит» — playbook паттернов; код не генерирует, файлы не правит.',
'Правило PSR_v1 R10.1 блок 1 (architecture-tooling, off-phase). Knowledge-only — без хуков и машинерии. Не UI → вне фильтров R6.0/R6.1/R14. Tooling §4.13, CLAUDE.md §3.3 #38.',
[{name:'PSR_v1',cond:'R10.1 блок 1: architecture-tooling'},{name:'Tooling',cond:'§4.13 #38 — реестр'}],
[],
[]
),
mermaid_skill:nd(
'Вендоренный standalone-скил (.claude/skills/mermaid/) — генерирует исходник Mermaid-диаграмм (23 типа, включая C4/architecture). Рендера mmdc/Chromium не требует.',
'При построении C4/архитектурной диаграммы — результат в docs/architecture/ (Mermaid рендерится на GitHub нативно).',
'Вендорен — не плагин, не marketplace, не подсистема (конфликт-аудит CC1: иммунен к потере апстрима). lefthook markdownlint+cspell исключают .claude/skills/mermaid/** (MK1). Tooling §4.12, CLAUDE.md §3.3 #37.',
'Composer dev-dependency deptrac/deptrac v4.6.1 (BSD-3) — статический анализ направления зависимостей между слоями App\\ (Controller/Service/Model/Job/…). Чистый PHP, 0 вызовов LLM.',
'Архитектурный fitness-гейт: проверяет, что код не нарушает границы слоёв. Конфиг app/deptrac.yaml (13 слоёв) + ruleset; запускается автоматически как lefthook pre-commit job 10 на staged app/**/*.php.',
'Правило PSR_v1 R10.1 блок 1 note (architecture-tooling, off-phase — composer dev-dep, не marketplace-плагин). Первый прогон 0 нарушений → baseline-файл не нужен (red-green доказан). Не UI → вне фильтров R6.0/R6.1/R14. Tooling §4.18, CLAUDE.md §3.3 #43.',
[{name:'PSR_v1',cond:'R10.1 блок 1 note: architecture-tooling'},{name:'Tooling',cond:'§4.18 #43 — реестр'}],
[{name:'lefthook job 10 (deptrac)',cond:'врезан как pre-commit гейт направления зависимостей'}],
'DEFERRED — не установлен, требует Figma-аккаунт (Б-1). Не UI-решатель → вне R6.0/R6.1/R14. Extract-only, не генерирует UI-решения. PSR_v1 R10.1 блок 3.',
[{name:'PSR_v1',cond:'R10.1 блок 3: design-tooling (DEFERRED)'}],
'SVG framework-neutral — результат нужно обернуть в Vue-компонент вручную. R6.0 фильтр не блокирует (SVG — не React/Tailwind). Lucide — branded иконочный стек проекта (CLAUDE.md §2). PSR_v1 R10.1 блок 3.',
[{name:'PSR_v1',cond:'R10.1 блок 3: design-tooling'}],
[{name:'Frontend Design',cond:'FD использует результат поиска как материал при UI-задачах'}]
),
design_plugin:nd(
'Плагин Design (#46, Anthropic Verified) — дизайн-критика, a11y-аудит дизайн-уровня, UX-копирайт, research synthesis. Pre-code (ADR-006); Pa11y остаётся техническим a11y SoT.',
'При дизайн-критике макета или компонента, при UX-анализе flow, при написании UX-копирайта, при synthesis пользовательских исследований.',
'Pre-code инструмент (ADR-006) — не генерирует финальный код, даёт дизайн-рекомендации. Pa11y остаётся техническим a11y SoT (§5 п.3). Не UI-решатель в смысле PSR_v1 R14 → вне R14 pipeline. PSR_v1 R10.1 блок 1.',
[{name:'PSR_v1',cond:'R10.1 блок 1: design-tooling'}],
'При глубоком аудите безопасности: diff-ревью, supply-chain риски зависимостей, поиск вариантов уязвимостей, статический анализ (SARIF). Глубокие кампании — не inline SAST.',
'Правило PSR_v1 R10.1 блок 1 (audit-security, off-phase). Граница TB1: Semgrep MCP (#25) = inline SAST, ToB = глубокие on-demand кампании. CC-BY-SA-4.0 — не вендорено, лицензионный триггер TB4 не применяется. Не UI → вне R6.0/R6.1/R14. Tooling §4.14, CLAUDE.md §3.3 #39.',
[{name:'PSR_v1',cond:'R10.1 блок 1: audit-security'},{name:'Tooling',cond:'§4.14 #39 — реестр'}],
[],
[{name:'MCP: semgrep',cond:'TB1: граница — Semgrep inline SAST, ToB глубокие кампании'}],
[{name:'MCP: semgrep',desc:'TB1: граница разграничена регламентом — Semgrep = inline SAST в процессе работы, Trail of Bits = глубокие аудит-кампании по запросу. Параллельное использование разрешено при разных сценариях.',type:'GREEN'}]
'Anthropic-плагин (`security-guidance@claude-plugins-official`, Anthropic Verified) — один блокирующий PreToolUse-хук, inline-предупреждения уязвимостей при правке кода (8 контентных правил + 1 path-правило). При первом за сессию совпадении уязвимого паттерна в файле — sys.exit(2), блокирует правку (одноразовый speed-bump, retry проходит). Раздел D3. Tooling #40.',
'Активен автоматически при каждом Write/Edit/MultiEdit — при уязвимом паттерне печатает предупреждение и блокирует первую такую правку файла за сессию; повторная попытка проходит.',
'Правило PSR_v1 R10.1 блок 1 (audit-security, off-phase). SG1: 5-й PreToolUse-хук, блокирующий (sys.exit 2), одноразовый per «файл+правило» за сессию — economy/ruflo-цепочка не нарушается, +~34 мс/правку. SG2: Windows-починка — bundled hooks.json зовёт python3 (нет в PATH), решено python3.exe-шимом в каталоге Python. Не UI → вне R6.0/R6.1/R14. Tooling §4.15, CLAUDE.md §3.3 #40.',
'При проведении полного аудита портала — запуск 14 фаз последовательно с документированием находок P0/P1/P2/P3.',
'Раздел D3. Оркеструет несколько инструментов: sk_security_review, Trail of Bits Skills, regression-скил. Находки фиксируются в docs/superpowers/audits/.',
[{name:'скил security-review',cond:'оркеструет как security-фазу аудита'},{name:'Trail of Bits Skills',cond:'оркеструет для глубоких кампаний'},{name:'скил regression',cond:'использует на фазе тестов'}],
[{name:'скил security-review',cond:'пара в D3 audit-security'}]
'Агент claude-flow — генерирует OpenAPI-спеку REST API по роутам и контроллерам Laravel. Pattern learning. 0 установки — агент доступен в сессии.',
'При фиксации контракта REST API: генерация/обновление OpenAPI-спеки группы эндпоинтов. Результат — docs/api/.',
'Sub-агент claude-flow — узел карты, но без отдельного номера в реестре Tooling Прил. Н (реестр — plugin-grain; 11 agent-узлов карты так же без Tooling-номеров). Не UI → вне фильтров R6.0/R6.1/R14.',
[{name:'CLAUDE.md',cond:'§3.3 — упомянут при #47 openapi-mcp'}],
[],
[{name:'MCP: openapi',cond:'генерирует спеку → openapi-mcp отдаёт её как MCP-ресурс'}]
),
mcp_openapi:nd(
'MCP-сервер (npm, stdio) — отдаёт OpenAPI-спеку как MCP-ресурс/тулы; introspection своей и чужих API при интеграционной разработке.',
'При работе с интеграциями (API/вебхуки) — обращение к структуре OpenAPI-спеки из сессии Claude. READ-ONLY introspection.',
'Правило PSR_v1 R10.1 блок 3 (integration-tooling, off-phase — 9-я подкатегория). stdio-режим, без port-conflict. Не UI → вне фильтров R6.0/R6.1/R14. Tooling §4.22 #47, CLAUDE.md §3.3 #47.',
[{name:'PSR_v1',cond:'R10.1 блок 3: integration-tooling'},{name:'Tooling',cond:'§4.22 #47 — реестр'}],
'Вендорен в .claude/skills/data-scientist/ (ML3 — lefthook markdownlint+cspell исключают через job-exclude). Knowledge-only, не решатель. Не UI → вне фильтров R6.0/R6.1/R14. Tooling §4.24 #49, CLAUDE.md §3.3 #49.',
'При работе с бизнес-процессом — документировать процесс, спланировать change-request, рассчитать capacity. Marketplace-плагин, 0 lifecycle-хуков.',
'Правило PSR_v1 R10.1 блок 1 (business-process, off-phase). Marketplace `operations@knowledge-work-plugins` v1.2.0, тот же marketplace что #42/#46. Не UI → вне фильтров R6.0/R6.1/R14. Tooling §4.26 #51, CLAUDE.md §3.3 #51.',
[{name:'PSR_v1',cond:'R10.1 блок 1: business-process'}],
[{name:'OPS1',cond:'process-doc → Mermaid-исходник; рендер за mermaid'},{name:'OPS5',cond:'generic ↔ self-authored stack-grounded скилы'}],
'Self-authored скил: структурированное интервью-discovery до проектирования — FEATURE (JTBD-интервью заказчика) + SYSTEM (ориентация по мета-слою проекта).',
'При расплывчатом проблемном запросе — провести JTBD-интервью, отдать discovery-brief в brainstorming; при «сориентируй по проекту» — синтез по карте/CLAUDE.md/MEMORY/Открытые_вопросы/Tooling.',
'Свой project-скил в .claude/skills/discovery-interview/ (не вендоренный → линтуется, LINT1). Не UI → вне фильтров R6.0/R6.1/R14. Триггер-eval 20/20. Tooling §4.30 #55, CLAUDE.md §3.3 #55, ADR-009.',
[{name:'PSR_v1',cond:'R10.1 блок 1 note: discovery-tooling'},{name:'Tooling',cond:'§4.30 #55 — реестр'}],
[{name:'DI2',cond:'разрез по слою-источнику с process-analysis (ADR-009)'}],
[{name:'process-analysis',cond:'граница: app-код ↔ голова заказчика/мета-слой'},{name:'brainstorming',cond:'хэндофф FEATURE-brief'}]
'Ведёт разработку через написание падающего теста до кода: сначала RED (тест провален), потом GREEN (тест проходит). TDD (разработка через тесты — failing test first).',
'Системная отладка: минимум 3 гипотезы, опровержение каждой реальной проверкой до того, как править код — никаких «должно работать».',
'При неожиданном поведении, падении теста, ошибке во время работы, неожиданном выводе.',
'Минимум 3 гипотезы. Опровержение через реальные команды и тесты, а не «логика подсказывает». Никаких «попробую исправить» без подтверждённой причины.',
[{name:'скил writing-plans',cond:'получает план от writing-plans'},{name:'скил subagent-driven-development',cond:'альтернатива — зависит от выбора пользователя'}]
'Обязательная проверка перед заявлением «готово»: запускает тесты, видит реальный вывод, никаких предположений.',
'Перед любым заявлением «готово»/«passed»/«closed»/«merged» — обязательно (правило §12 + экономия 0% как жёсткое требование).',
'Реальный запуск, не «должно пройти». Вывод тестов виден полностью. Выборочные результаты запрещены («tests pass» = ровно столько, сколько действительно прошло).',
'Перед слиянием PR (запроса на слияние кода); после крупной серии коммитов; при подготовке к релизу; при подозрении на регрессию (возврат к старому багу).',
'Без выборочности: разбор всех изменений, а не только подозрительных. SAST (статический анализ кода на уязвимости, через MCP-сервер semgrep) включается обязательно.',
'7-шаговый чеклист RLS (защита строк по тенанту) для новой таблицы: tenant_id, ENABLE RLS (включение защиты строк), политики, права для 5 ролей, CHANGELOG, проверка через squawk, дымовой тест (быстрая проверка функциональности).',
'При создании новой таблицы в db/schema.sql ИЛИ при правках существующих политик RLS (защиты строк по тенанту).',
'Права для 5 ролей обязательны (crm_app_user / crm_app_admin / crm_supplier_worker BYPASSRLS (право обходить защиту строк — для системных задач) / crm_readonly / crm_migrator). Запись в CHANGELOG_schema.md обязательна.',
[{name:'плагин hookify',desc:'плагин hookify динамически создаёт новые хуки PreToolUse — может перезаписать или конкурировать с этим хуком',type:'RED'}]
'§12 Superpowers — hard-rule уровня 0, economy-режим §12 НЕ отменяет ни на каком уровне. Действует только на текущую задачу — следующий промпт разбирается заново.',
[{name:'плагин Superpowers (§12)',desc:'Экономия=100% теоретически может «сэкономить» вызов скила — §12 (hard-rule уровня 0) economy-режим не отменяет ни на каком уровне (Pravila §12.4).',type:'GREEN'}]
'Разбирает падения тестов Pest --parallel: отличает настоящую ошибку от известных квирков (73/77 и др.; квирк 72 устранён 16.05.2026 — commit 0fa1a73).',
'При падении Pest --parallel ИЛИ при дымовом тесте (быстрой проверке функциональности) только из подкаталога (как в аудите Phase 3 SyncSupplierProjectsJobTest).',
'READ-ONLY (только чтение — только читает код, ничего не правит). Каждую гипотезу подтверждает реальным запуском, а не «похоже на квирк».',
{name:'MCP-сервер redis',desc:'Квирк 72 (гонка с кэшем Redis при Pest --parallel из подкаталога) устранён 16.05.2026 — commit 0fa1a73, array-стор в тестах. Конфликт закрыт.',type:'GREEN'},
{name:'демон ruflo',desc:'Worker-jitter фонового демона ruflo (PM2) усиливает частоту Pest-квирков 73/77. Квирк 72 устранён 16.05 — его jitter больше не усиливает. На baseline-регрессии — `pm2 stop ruflo-daemon` (квирк #93, переоценён).',type:'BLACK'}
'Не для боевых пользователей. Профиль persistent кэшируется per-cwd hash (квирк #95 в memory) → разные worktrees получают разные mcp-chrome-{hash} директории и не конфликтуют. Конфликт остаётся только при same-dir parallel (две Claude-сессии в одной dir одновременно вызывают browser).',
'**READ-ONLY к prod** — `.env.production` не должен попадать в локальный конфиг. Не использовать правила-подсказки Inertia/Livewire/Tailwind/Filament.',
[{name:'CLAUDE.md §3.2 #10',cond:'активен с фазы 1, доступ к prod только на чтение'}],
'На третьей фазе проекта (перед запуском в боевую среду) — при просмотре кода через скил code-review и при автозапуске проверок CI (continuous integration) перед выпуском новой версии.',
[{name:'агент pest-parallel-debugger',desc:'Квирк 72 (гонка с кэшем Redis при Pest --parallel из подкаталога) устранён 16.05.2026 — commit 0fa1a73. Конфликт закрыт.',type:'GREEN'}]
[{name:'Frontend Design',desc:'PSR_v1 R14.5: нельзя параллельно — 21st как генератор материала, FD как решатель; риск смешать роли и нарушить R6 (фильтр стека)',type:'GREEN'}]
'Ищет ПДн (персональные данные), токены и API-ключи в файлах, готовых к коммиту. Если находит — коммит блокируется.',
'Перед каждым коммитом — проверяет только те файлы, что добавлены через `git add`.',
'Обход через `--no-verify` запрещён (правило §4.2 Pravila). Находка = блокирующая ошибка, не предупреждение. Известные ложные срабатывания — в файл `.gitleaksignore`.',
[{name:'lefthook.yml',cond:'задача №1 в наборе перед коммитом, без параллельного запуска'}],
[{name:'SessionStart хук',cond:'читается при старте для быстрого контекста'}],
[{name:'память ruflo',desc:'Два хранилища памяти не синхронизированы: проектные `memory/*.md` (16 файлов) и база ruflo `.swarm/memory.db`. Фактически память ruflo почти пуста — MCP-сервер репортит 0 записей (+2 тестовых призрака от alpha-бага HNSW #1122). Recall-хук срабатывает на каждый промпт, но извлекать ему почти нечего.',type:'BLACK'}]
'Queen оркестратора ruflo v3.7.0-alpha.38 — стратегическая «королева» роя hive-mind (топология hierarchical-mesh, консенсус byzantine). С реколлажа 16.05.2026 (CLAUDE.md §3.5, Tooling §4.10) — advisory/automation-подсистема, не entry-point: рой работает параллельно, Клод — напрямую.',
'Запускается только по триггеру queen/королева в промпте (Pravila §14 — hard-rule маршрутизации). Без триггера рой простаивает — Клод работает напрямую.',
'Фактическая инспекция рантайма 15.05.2026: Queen активна (term 1, нагрузка 0), но за всё время — 0 задач, 0 раундов консенсуса, 0 общей памяти. Реколлаж 16.05.2026 привёл нормативку к этому факту — ruflo переописан в advisory/automation-подсистему, декларация уровня −1 убрана. Alpha-версия, LLM API-ключей нет.',
[
{name:'Pravila §14',cond:'queen-триггер — hard-rule маршрутизации задачи через Queen'},
{name:'CLAUDE.md §3.5 / Tooling §4.10',cond:'нормативно описан как advisory/automation-подсистема'}
'Рабочие агенты роя hive-mind ruflo — 10 штук. Все одного типа (generic worker), без специализации. На карте до iter5 рисовались 9 «ролей» (Архитектор/Кодер/…) — таких ролей в рантайме не существует.',
'По задумке — Queen раздаёт воркерам подзадачи. Фактически — ни разу.',
'Инспекция рантайма 15.05.2026: 10 воркеров, все в статусе «простаивает» (idle), у каждого 0 выполненных задач. LLM API-ключей нет → реальная агентская работа невозможна. Последний рой запущен с тестовой задачей «ответь словом READY и ничего не меняй».',
'Инспекция рантайма 15.05.2026: воркеры audit / optimize / testgaps пытаются запустить `claude` и КАЖДЫЙ РАЗ падают с ошибкой «файл не найден» (spawn claude ENOENT) — результат пустой (за сутки: audit 29 запусков, optimize 19, testgaps 14 — все пустые). Журнал демона при этом помечает их «успешными» — расхождение метрики и факта. Локально работают только воркеры map и consolidate (без вызова `claude`). Worker-jitter усиливает частоту Pest-квирков 73/77 (квирк 72 устранён 16.05) — на baseline-регрессии нужно `pm2 stop ruflo-daemon`.',
'MCP-сервер ruflo (внешний сервис-инструмент Клода) — отдельный процесс `ruflo mcp start`, режим stdio, 7-й сервер в `.mcp.json`. Экспонирует ~210 инструментов (агенты / память / рой / хуки / нейросеть и др.).',
'Инструменты доступны Клоду постоянно. Это единственная по-настоящему рабочая точка интеграции ruflo — через неё и собрана фактическая инспекция 15.05.2026.',
'Клод НЕ обязан вызывать ruflo-инструменты — отсюда статус ruflo как параллельной подсистемы, а не overlord. Память, опрашиваемая через MCP, почти пуста (0 записей). Alpha-версия.',
'Хранилище памяти ruflo — файл базы `.swarm/memory.db` (SQLite через sql.js) + векторный индекс HNSW с реальными embeddings Xenova/all-MiniLM-L6-v2 (384 измерения).',
'Должно накапливать факты между сессиями; recall-хук и MCP-инструменты обращаются к нему.',
'Инспекция рантайма 15.05.2026: MCP-сервер репортит 0 записей. В базе — 2 тестовых «призрака» (h7-fixed-verify, hook-e2e) от alpha-бага HNSW #1122 (`memory delete` убирает строку, но не вектор). Проектные `memory/*.md` (16 файлов) в неё не проиндексированы. Наполняется только вручную через `ruflo memory store`.',
{name:'ruflo MCP',cond:'MCP читает/пишет через инструменты memory_*'},
{name:'хук recall',cond:'recall-хук запускает поиск по памяти'},
{name:'демон ruflo',cond:'воркер consolidate обращается к памяти'}
],
[{name:'memory:project_state',desc:'Два хранилища памяти не синхронизированы: проектные `memory/*.md` (16 файлов) и база ruflo `.swarm/memory.db`. Фактически память ruflo почти пуста — MCP-сервер репортит 0 записей (+2 тестовых призрака от alpha-бага HNSW #1122). Recall-хук срабатывает на каждый промпт, но извлекать ему почти нечего.',type:'BLACK'}]
'Хук типа UserPromptSubmit, зарегистрирован в `.claude/settings.json` — скрипт `tools/ruflo-recall-hook.mjs`. На каждый промпт пользователя запускает `ruflo memory search` и подмешивает топ-3 найденных записи в контекст. Единственный хук ruflo, реально вшитый в сессию Claude Code.',
'Перед каждым промптом пользователя.',
'Срабатывает «мягко» (fail-open): при ошибке/таймауте — пустой инжект, промпт не блокируется. Хук работает (виден в системных напоминаниях этой сессии), но память ruflo почти пуста — извлекать почти нечего (recall возвращает 2 тестовых призрака). У самого ruflo есть 26-27 внутренних хуков, но в `.claude/settings.json` вшит только этот один.',
'Каталог определений агентов, который `ruflo init` высыпал в `.claude/agents/` — 100 файлов в 23 категориях (core, consensus, sparc, github, v3, flow-nexus, optimization, sublinear, templates и др.). Из них 98 — от ruflo, 2 — проектные (rls-reviewer, pest-parallel-debugger).',
'Определения видны Claude Code как доступные типы суб-агентов.',
'Статичные файлы-заготовки. «ruflo использует каталог» — нет: воркеры роя безымянные generic, у демона свой набор воркеров. Каталог просто лежит.',
'Slash-команды, которые `ruflo init` высыпал в `.claude/commands/` — 88 файлов (категории sparc, github, hooks, analysis, automation, optimization, monitoring).',
'Доступны как slash-команды Claude Code.',
'Статичные файлы. Это ближайший аналог «скилов» у ruflo — но НЕ Claude Code скилы; в `.claude/skills/` ruflo не положил ничего (там только 2 проектных скила). Команды лежат, в работе проекта не задействуются.',
'Фактически: папки `.claude-flow/plugins/` не существует, ни один плагин не установлен. `ruflo plugins list` зависает на IPFS-discovery (реестр недоступен — Pinata/Cloudflare не отвечают). Отдельно: Claude Code скилов ruflo не привнёс — в `.claude/skills/` только 2 проектных (rls-check, q-item-add). Прямой ответ на вопрос «какие плагины и скилы использует ruflo»: ноль и ноль.',
[{name:'ruflo Queen',cond:'часть установки ruflo'}],
'Плагин Anthropic для создания новых скилов — eval-driven подход: датасеты сценариев, train/test split, бенчмарк-цикл.',
'При формализации повторяющегося процесса в скил с проверяемым выводом (генерация кода, преобразование файлов).',
'Включён в настройках (~/.claude/settings.json). Для discipline-скилов (TDD-типа) предпочтительнее скил writing-skills плагина Superpowers — у них разные философии.',
'Хук PreToolUse на Edit/Write/MultiEdit/Bash/Agent — economy-state-guard.py: ловит обходы режима экономии (в т.ч. Bash-обход Edit и наследование суб-агентами).',
'Хук Stop — агент-верификатор (модель Sonnet 4.6): после ответа проверяет соответствие режиму экономии — заявления «готово» без тестов, правки без тестов, выборочные результаты.',
'Stop — после каждого ответа Claude (кроме тривиальных Q&A-ходов).',
'Решение decision:block при нарушении. На уровне экономии 5 — short-circuit {compliant:true}. Стоит денег (вызовы Sonnet).',
[{name:'~/.claude/settings.json',cond:'хук Stop типа agent (user-level)'}],
[],
[{name:'скил verification-before-completion',cond:'верификатор энфорсит то, что требует скил'}]
),
hk_ruflo_queen:nd(
'Хук UserPromptSubmit — ruflo-queen-hook.mjs: при триггер-словах queen/королева в промпте инжектит жёсткую директиву маршрутизации задачи через ruflo Queen (Pravila §14).',
'UserPromptSubmit — перед каждым промптом; срабатывает на queen / королева.',
'Энфорсит §14 Pravila (hard-rule). Перед платным спавном роя — превью. Зарегистрирован в project .claude/settings.json.',
[{name:'ruflo Queen',cond:'хук маршрутизирует queen-задачи на Queen'}]
),
sk_regression:nd(
'Проектный скил /regression — единый прогон регрессии: Pest --parallel + Vitest + сборка, парсинг результатов (JSON-first для pest --parallel, см. квирк 94).',
'Перед коммитом/пушем или при запросе полной регрессии — единая сводка по тестам.',
'Единый источник истины процедуры роутера «задача → узел(ы)» — docs/router-procedure.md v1.0. 5 шагов: hard-floor (§12/§14/§15) → классификация → выбор по триггерам (Tooling Прил. Н §4.X) → проверка связок L1-L12 → исполнение. ADR-011.',
'При любой задаче (имплицитно) определяет узел/связку; явно — при разборе routing-решений и в /brain-retro.',
'Не вводит новый реестр — формализует процедуру над существующим (Tooling §4.X). Кэша «проверенных цепочек» нет (router-only). Каждая задача — свежая сборка пути.',
[{name:'Pravila §12/§14/§15',cond:'hard-floor — шаг 1 процедуры'},{name:'CLAUDE.md §3.6',cond:'cross-ref на router-procedure.md'}],
[{name:'Tooling Прил. Н §4.X',cond:'реестр узлов — вход шага 3'}],
[{name:'observer (Stop-хук)',cond:'пишет evidence о routing-решениях'},{name:'/brain-retro',cond:'факторный анализ routing'}],
[]
),
observer_stophook:nd(
'Stop-хук observer (tools/observer-stop-hook.mjs, project-level) — пишет один JSONL-эпизод в docs/observer/episodes-YYYY-MM.jsonl в конце каждого хода + routing-gate. Внутри: transcript-parser (схема v2), routing-detector + choice-detector (provenance), pii-filter (маскирование ПДн). ADR-011 + observer factor-analysis.',
'Конец каждого хода (Stop-event). routing-gate: при навязанном методе без routing-тега → decision:block (необойдёмо).',
'Только пишет evidence, не вмешивается в нормативку. При внутреннем отказе — маркер observer_error, не тихий пропуск. HK1 §5.3: сосуществует с economy-verifier на Stop (append-chain).',
[{name:'Pravila §16',cond:'observer + routing-тег-дисциплина'},{name:'.claude/settings.json',cond:'зарегистрирован как Stop-хук'}],
[{name:'docs/observer/ evidence',cond:'пишет эпизоды'},{name:'/brain-retro',cond:'читает то, что хук пишет'}],
[{name:'hk_verifier',desc:'HK1 §5.3: оба на Stop-event — коллизии нет (append-chain), оба decision:block отрабатываются',type:'GREEN'}]
),
sk_brain_retro:nd(
'Проектный скил /brain-retro (.claude/skills/brain-retro/) — раз в спринт читает docs/observer/episodes-*.jsonl и строит факторный анализ: распределение path_type, топ-узлы/связки, вывод исхода, факторная матрица (9 осей × outcome). Анализатор tools/brain-retro-analyzer.mjs.',
'Раз в спринт по команде заказчика («брейн-ретро»). Read-only агрегатор.',
'Только читает и предлагает кандидатов на корректировку нормативки — не пишет в логи, не правит Tooling/Pravila/PSR_v1. Решение по правкам — за заказчиком.',
[{name:'Pravila §16',cond:'evidence-loop, раз в спринт'},{name:'PSR_v1 R16',cond:'brain evidence loop'}],
'ПДн маскируется pii-filter перед записью (§5.4). Помесячное rotation; архив после 12 месяцев. Память ruflo (.swarm/memory.db) — отдельное хранилище, не связано.',
'MCP-сервер (OWASP ZAP add-on, alpha) — глубокая боевая динамическая проверка работающего портала: обход входа, инъекции (SQL/XSS), проблемы сессий/CSRF на живых endpoint-ах. ZAP 2.17.0 + MCP-аддон mcp-alpha-0.0.1 на portable Temurin JRE 17 (не системная Java).',
'Перед публикацией портала в интернет — для динамического security-gate перед релизом; вызывается скилом security-go-live (#73) как шаг динамики.',
'Цель по умолчанию — локальная копия 127.0.0.1; бой только по явной команде (граничное условие IS8, ADR-014). MCP-аддон в alpha — API может меняться. Требует запущенного ZAP-демона на portable JRE; без демона MCP-режим возвращает PENDING.',
[{name:'PSR_v1',cond:'R10.1 блок 3 — MCP-сервер при включённом демоне'}],
[],
[
{name:'скил security-go-live (#73)',cond:'оркеструет ZAP как шаг динамики; связка L15'},
'CLI-инструмент (Go-бинарь bin/nuclei.exe v3.8.0 + 13 060 шаблонов) — широкое быстрое сканирование известных уязвимостей: CVE, дефолтные креды, открытые двери (.env/.git), утечки конфигов, слабый TLS, fingerprint стека. НЕ MCP — nuclei не говорит на MCP, обёртка стала бы доп. attack surface.',
'Регулярный security-scan живого портала; вызывается скилом security-go-live (#73). Срабатывает в задаче «прогнать сканер уязвимостей по порталу».',
'Цель — IP-литерал (127.0.0.1, не localhost — резолвер падает на native-Windows). Низкий rate-limit для однопоточного dev-сервера (-rate-limit 20 -c 5). Безопасный режим: исключать теги fuzz/dos/intrusive/brute-force при сканах боевого. Гард IS8.',
[{name:'PSR_v1',cond:'R10.1 блок 1 — CLI-инструмент'}],
[],
[
{name:'скил security-go-live (#73)',cond:'оркеструет Nuclei как шаг широкого сканирования; связка L15'},
'CLI-инструмент (Go-бинарь bin/ward.exe v0.4.1) — сканер misconfig и секретов в Laravel: .env (8 проверок), config/*.php (13), deps через OSV.dev (live), код (7 категорий — secrets/injection/XSS/debug-артефакты/crypto/config CORS-CSRF-mass-assignment/auth). Go-бинарь → не зависит от версии Laravel.',
'Аудит безопасности настроек Laravel при ревью .env/config или подготовке к релизу; вызывается скилом security-go-live (#73).',
'CLI, не MCP, не Composer dev-dep — отдельный путь установки (portable Go SDK). Молодой проект (фев 2026), single-maintainer — bus-factor; митигация — версия-pin v0.4.1 и MIT-форкабельность. Заменил Enlightn (тот abandoned + без поддержки Laravel 13).',
[{name:'PSR_v1',cond:'R10.1 блок 1 — CLI-инструмент'}],
[],
[
{name:'скил security-go-live (#73)',cond:'оркеструет Ward как шаг Laravel-misconfig; связка L15'},
'Project-скил — аудит персональных данных и соответствие 152-ФЗ. Два режима: технический (где лежат ПДн в схеме/коде, RLS, маскирование через pg_anonymizer, утечки в логах/CSV-экспортах) + юридический (хранение в РФ, согласия, сроки/удаление, реестр обработки, уведомление РКН, права субъекта).',
'При вопросах «проверь ПДн», «утекают ли персональные данные», «соответствие 152-ФЗ», «где хранятся телефоны лидов», перед публичным запуском. Вызывается также security-go-live (#73) как шаг ПДн.',
'Project-скил (self-authored, .claude/skills/pdn-152fz-audit/). Заземлён в db/schema.sql — даёт оценку, не правит код. Не подменяет юридическое оформление (D2: договоры/политики).',
[{name:'PSR_v1',cond:'R10.1 блок 1 — self-authored project-скил'}],
{name:'скил security-go-live (#73)',cond:'оркеструет как шаг 152-ФЗ; связка L15'}
],
[]
),
sk_threat_model:nd(
'Project-скил — моделирование угроз портала по STRIDE. Карта точек входа (login/2FA/recovery, supplier webhooks, deals API, админка, impersonation, CSV-импорт; заземлён в app/routes/), что меняется при выходе в интернет, приоритизация защиты. Результат — docs/security/threat-model-<date>.md.',
'Перед публикацией портала в интернет; при вопросах «смоделируй угрозы», «откуда могут атаковать», «карта точек входа». Вызывается также security-go-live (#73).',
'Project-скил под наш портал (не generic STRIDE). Не подменяет deep code-audit (Trail of Bits #39); фокус — атакующая поверхность, не уязвимости в реализации.',
[{name:'PSR_v1',cond:'R10.1 блок 1'}],
[],
[
{name:'скил security-go-live (#73)',cond:'оркеструет STRIDE как шаг приоритизации; связка L15'},
{name:'скил pdn-152fz-audit (#71)',cond:'STRIDE → угрозы на ПДн → ПДн-аудит'}
'Перед каждой публикацией боевого портала или большим релизом; при вопросах «готов ли портал к публикации по безопасности», «финальная проверка безопасности перед релизом».',
'Не подменяет полный 14-фазный audit-portal (тот шире); фокус — security-only срез часть дня. ZAP-шаг возвращает PENDING если ZAP-демон не запущен. Цель по умолчанию локальная (IS8).',
[{name:'PSR_v1',cond:'R10.1 блок 1'}],
[
{name:'OWASP ZAP MCP (#68)',cond:'вызывает как шаг динамики (глубина)'},
{name:'Nuclei (#69)',cond:'вызывает как шаг широкого сканирования'},
{name:'Ward (#70)',cond:'вызывает как шаг Laravel-misconfig'},
{name:'скил pdn-152fz-audit (#71)',cond:'вызывает как шаг ПДн'},
{name:'скил threat-model (#72)',cond:'вызывает как шаг STRIDE'}
],
[{name:'Semgrep MCP (#25), gitleaks (#8), Trivy (#26), Trail of Bits (#39)',cond:'статический слой — выполняются как часть оркестрации; связка L15'}],
'При любой маркетинговой задаче: «напиши пост», «составь план кампании», «сделай SEO-аудит», «разработай email-цепочку», «подготовь конкурент-бриф». Активируется первым в marketing chain L16 (brainstorming → mkt_plugin → sk_marketing_ru → каналы).',
'Встроенные коннекторы #74 к западным SaaS (HubSpot/Ahrefs/Klaviyo/Amplitude/SimilarWeb/Canva/Figma) — не используются: РФ-аналитика через Метрика (#78)/Директ (#79), визуал — A4. `performance-report` скил относится к метрикам каналов/кампаний (CAC, конверсия, CTR) — не пересекается с product-management `metrics-review` (#42, C9: MRR/retention). Граница C1 vs C2 (sales): плагины `sales`/`small-business` из той же витрины не входят в C1 (MKT1, ADR-015).',
[
{name:'PSR_v1',cond:'R10.1 блок 1 — первичный решатель C1'},
{name:'скил brainstorming',cond:'marketing chain L16: brainstorming предшествует mkt_plugin как вход'},
{name:'brand-voice (#76)',cond:'голос бренда держится при генерации контента mkt_plugin'},
{name:'marketingskills (#75)',cond:'резерв-библиотека фреймворков — обогащает mkt_plugin как материал'},
{name:'скил marketing-ru (#77)',cond:'РФ-адаптация контента и playbook каналов РФ'}
],
[
{name:'marketingskills (#75)',desc:'MKT3 (ADR-015): seo-audit (#74) как решатель vs SEO-скилы marketingskills (#75) как материал — конфликт решён role-разделением (решатель/резерв-библиотека, модель FD vs UPM). Не параллельно, не дублирующие роли.',type:'GREEN'},
'Вендоренный community-набор маркетинговых скилов (`coreyhaines31/marketingskills`, ~30k★, MIT), 40 скилов: CRO, копирайтинг, SEO, ai-seo, programmatic-seo, ad-creative, cold-email, lead-magnets, pricing, marketing-psychology и др. Только чистый markdown, без исполняемого кода. Роль: материал/резерв-библиотека фреймворков (модель UPM #31), не решатель.',
'Как дополнительный референс при работе с mkt_plugin (#74) — углублённые фреймворки CRO/SEO/психологии; при задаче «покажи примеры cold-email фреймворков», «дай фреймворк лид-магнита». Не активируется напрямую как первичный решатель.',
'Роль строго «материал» — решатель C1 это mkt_plugin (#74), модель аналогична UPM #31 vs FD #30 (MKT3, ADR-015). Вендорим в `.claude/skills/marketingskills/` — исключается из lefthook markdownlint+cspell (`ignorePaths: .claude/skills/marketingskills/**`) по прецеденту MK1 mermaid #37 / CC1 ccpm #41 (MKT10, ADR-015). IS9-вет пройден (MIT, только markdown, нет исполняемого кода).',
[
{name:'PSR_v1',cond:'R10.1 блок 1 — материал/резерв-библиотека, не решатель'},
{name:'tooling',cond:'реестр #75'}
],
[],
[
{name:'mkt_plugin (#74)',cond:'обогащает как резерв-библиотека; mkt_plugin — решатель, mkt_skills — материал'}
],
[
{name:'mkt_plugin (#74)',desc:'MKT3 (ADR-015): потенциальный SEO-дубль (seo-audit #74 vs SEO-скилы #75) — решён role-разделением: #74 быстрый on-page аудит как воркфлоу; #75 резерв-библиотека фреймворков (материал). Не параллельно, аналогично FD #30 vs UPM #31.',type:'GREEN'}
]
),
brand_voice:nd(
'Плагин из витрины Anthropic (partner-built, Tribe AI), 3 скила: извлечь голос бренда из текстов, сгенерировать вербальные гайдлайны бренда, держать тон бренда при написании материалов. Закрывает вербальный бренд Лидерры — тон копирайта, голос, стиль коммуникации.',
'При задачах «сформулируй голос бренда», «держи тон Лидерры в тексте», «сгенерируй гайдлайн тона для копирайтера», «проверь этот текст на соответствие бренду». Используется совместно с mkt_plugin (#74) при генерации маркетингового контента.',
'Граница с Brandbook v2: Brandbook = визуальный бренд (палитра Forest, шрифты, лого) — источник истины для дизайна; brand-voice = вербальный бренд (тон, голос, копирайт) — взаимодополняют, не пересекаются (MKT6, ADR-015). brand-voice заземлён в позиционировании Brandbook, не подменяет его.',
[
{name:'PSR_v1',cond:'R10.1 блок 1'},
{name:'tooling',cond:'реестр #76'}
],
[],
[
{name:'mkt_plugin (#74)',cond:'голос бренда применяется при генерации контента marketing plugin'},
{name:'скил marketing-ru (#77)',cond:'marketing-ru несёт РФ-плейбук; brand-voice — тон и стиль независимо от канала'}
],
[
{name:'Brandbook v2',desc:'MKT6 (ADR-015): brand-voice (#76) вербальный бренд vs Brandbook v2 визуальный бренд — взаимодополняющие инструменты; Brandbook остаётся источником истины для визуального слоя, brand-voice его не заменяет и не пересекается.',type:'GREEN'}
]
),
sk_marketing_ru:nd(
'Self-authored project-скил `.claude/skills/marketing-ru/` — закрывает РФ-специфику маркетинга, которой нет ни в одном готовом инструменте: playbook каналов РФ (Яндекс.Директ, Яндекс.Метрика, Telegram, VK), конверсия реального лендинга Лидерры (заземлён в `лендинг/TZ_landing_v1_0.md`), маркетинг в рамках 152-ФЗ (согласия на рассылки, получение номера телефона/email).',
'При задачах «как запустить кампанию в Яндекс.Директ для Лидерры», «оптимизируй конверсию лендинга», «нужны ли согласия на эту рассылку», «составь план маркетинга в РФ-каналах». Вызывается в marketing chain L16 после mkt_plugin (#74).',
'Project-скил (self-authored, модель billing-audit #62 / threat-model #72 / pdn-152fz-audit #71). Линтуется lefthook в обычном режиме (не в ignorePaths). Несёт 152-ФЗ playbook маркетинговых согласий с cross-ref на pdn-152fz-audit #71 — технический аудит ПДн остаётся за #71, не за этим скилом (MKT9, ADR-015).',
[
{name:'mkt_plugin (#74)',cond:'подчинён как РФ-специализация в marketing chain L16'},
{name:'PSR_v1',cond:'R10.1 блок 1'},
{name:'tooling',cond:'реестр #77'}
],
[
{name:'Яндекс.Метрика MCP (#78)',cond:'marketing-ru даёт playbook; Метрика MCP — данные'},
{name:'скил pdn-152fz-audit (#71)',cond:'cross-ref MKT9: marketing-ru несёт 152-ФЗ согласия на рассылки; #71 — технический аудит всех ПДн портала'}
],
[
{name:'скил pdn-152fz-audit (#71)',desc:'MKT9 (ADR-015): marketing-ru несёт playbook маркетинговых согласий 152-ФЗ (сбор email/телефона для рассылок); #71 несёт полный технический аудит ПДн по портальной схеме. Разные объекты; cross-ref обязателен, не дублирование.',type:'GREEN'}
]
),
mcp_metrika:nd(
'MCP-сервер Яндекс.Метрики (`atomkraft/yandex-metrika-mcp`, MIT) — чтение веб-аналитики лендинга и портала: визиты, источники трафика, гео, демография, поведение пользователей, конверсии. Только чтение (READ-ONLY), без мутаций.',
'При задачах «покажи источники трафика», «сколько посещений лендинга», «откуда приходят пользователи», «проверь конверсию страницы». Активируется осмысленно при живом лендинге со счётчиком Метрики (⏸ Б-1).',
'READ-ONLY — только чтение аналитики, прецедент Sentry/Redis MCP (MKT8, ADR-015). Токен OAuth бесплатный. Выбран из 3 кандидатов по итогам IS9-вета: `atomkraft/yandex-metrika-mcp` — код верифицирован (только `api-metrika.yandex.net`). SHA-пин в `.mcp.json` обязателен. Установлен (вариант Б), «загорается» при наличии счётчика Метрики на лендинге.',
[
{name:'PSR_v1',cond:'R10.1 блок 3 — внешний MCP READ-ONLY'},
{name:'mkt_plugin (#74)',cond:'marketing chain L16: данные Метрики обогащают маркетинговый анализ'}
],
[
{name:'Яндекс.Директ MCP (#79)',desc:'Потенциальное дублирование метрик: yandex-mcp (#79) также содержит Metrika-модуль (43 tools). Граница: #78 специализирован на Метрике, #79 активен только для Wordstat; Metrika-модуль #79 не активируется (MKT8, ADR-015) — конфликта нет.',type:'GREEN'}
]
),
mcp_ya_direct:nd(
'MCP-сервер Яндекс.Директ + Wordstat (`SvechaPVL/yandex-mcp`, MIT, 128 инструментов: Direct 80 + Metrika 43 + Wordstat 5). В текущей конфигурации активированы **только Wordstat 5 read-only инструментов** — подбор ключевых слов, частотность, конкурентность. Direct-модуль (80 mutation-tools для управления кампаниями) и Metrika-модуль (43 tools) не активированы.',
'При задачах «подбери ключевые слова для лендинга», «проверь частотность запросов», «найди SEO-кластер для контента». Wordstat полезен немедленно без активных рекламных кампаний. Мутации Директа (создание/правка кампаний, управление ставками) — только с явным подтверждением заказчика.',
'Direct-мутации (#79 Direct-модуль) **ОТКЛЮЧЕНЫ per IS9 и MKT8 (ADR-015)** — в конфигурации активированы ТОЛЬКО Wordstat 5 read-only tools, OAuth-токен с минимальным scope (Wordstat only). Без авто-расхода бюджета никогда. Урок: отброшенный VK standalone MCP имел профиль «can spend money» — принципиальный вето. Установлен (вариант Б).',
[
{name:'PSR_v1',cond:'R10.1 блок 3 — внешний MCP'},
{name:'Яндекс.Метрика MCP (#78)',desc:'Дублирование Metrika-модуля: yandex-mcp (#79) содержит 43 Metrika-инструмента. Граница: #78 специализирован на Метрике, Metrika-модуль #79 не активируется. При наличии обоих в .mcp.json — Active scope разделён явно.',type:'GREEN'},
{name:'прямой расход бюджета',desc:'MKT8 (ADR-015): Direct-мутации поведенчески запрещены без явного разрешения заказчика. Нарушение = чёрный конфликт (активация Direct-модуля без подтверждения).',type:'BLACK'}
]
),
mcp_telegram:nd(
'MCP-сервер Telegram (`chigwell/telegram-mcp`, Apache-2.0, ~1.1k★, 259 коммитов) — управление Telegram через MTProto user-account: постинг в каналы, чтение сообщений, управление группами. Лучший по зрелости среди РФ-релевантных каналов.',
'При задачах «опубликуй пост в Telegram-канал Лидерры», «прочитай последние сообщения канала», «управление Telegram-каналом». Используется совместно с marketing chain L16 для публикации контента.',
'Работает через MTProto user-account (не bot-токен) — `SESSION_STRING` хранить только в `.env` (IS9-условие, ADR-015). Обязателен выделенный аккаунт; при компрометации SESSION_STRING — немедленная ротация. READ-тяжёлый режим предпочтителен; мутации (постинг) — осознанно.',
[
{name:'PSR_v1',cond:'R10.1 блок 3 — внешний MCP'},
{name:'Postiz (#81)',cond:'Postiz планирует и публикует в Telegram как часть мультиканальной очереди; Telegram MCP — прямое управление'}
],
[
{name:'Postiz (#81)',desc:'Перекрытие публикации в Telegram: Postiz #81 покрывает постинг в Telegram в составе 30+ площадок. Telegram MCP #80 — прямое управление (read + post + управление). Граница: Postiz для мультиканального планирования контента; Telegram MCP для прямого API-доступа (чтение, реакции, управление группами). Не параллельны для одной задачи.',type:'GREEN'}
]
),
postiz:nd(
'Postiz (`gitroomhq/postiz-app`, ~30k★, AGPL-3.0) + `antoniolg/postiz-mcp` — self-hosted планировщик публикаций в 30+ площадок включая VK и Telegram. Закрывает VK-постинг (альтернатива отброшенному VK standalone MCP). Управляется через MCP-клиент после запуска self-hosted экземпляра.',
'При задачах «запланируй посты в соцсети», «опубликуй контент в VK и Telegram», «управление контент-календарём». Используется в marketing chain L16 как публикационный слой после подготовки контента mkt_plugin (#74) и marketing-ru (#77).',
'Лицензия AGPL-3.0 — внутренний self-host без модификаций и дистрибуции допустим (IS9-вет PASS-with-conditions, ADR-015). Если код Postiz будет модифицирован для распространения — возникают AGPL-обязательства по раскрытию исходников (фиксируется как ограничение). Лицензия `antoniolg/postiz-mcp` не верифицирована в рамках вета — проверить перед активацией MCP-клиента. Установка self-host — отдельный шаг при потребности.',
[
{name:'PSR_v1',cond:'R10.1 блок 1 — self-hosted инструмент'},
{name:'mkt_plugin (#74)',cond:'mkt_plugin генерирует контент; Postiz публикует его по каналам'},
{name:'Telegram MCP (#80)',cond:'Postiz для мультиканальной очереди; Telegram MCP для прямого управления'}
],
[
{name:'Telegram MCP (#80)',desc:'Перекрытие публикации в Telegram: оба умеют публиковать в Telegram. Граница: Postiz = мультиканальный планировщик очереди (контент-календарь); Telegram MCP = прямое API-управление (read/write/groups). Не параллельны для одной публикации.',type:'GREEN'},
{name:'AGPL-3.0',desc:'Лицензионный риск: если код Postiz будет модифицирован и распространён — AGPL §4/§13 требуют раскрытия исходников. Внутренний self-host без модификаций и дистрибуции: обязательств нет. Зафиксировано как cautionary condition (ADR-015 Consequences).',type:'GREEN'}
]
),
mcp_dataforseo:nd(
'MCP-сервер DataForSEO (`dataforseo/mcp-server-typescript`, ~204★, официальный) — SERP-данные, ключевые слова, бэклинки, контент-аудит с данными по РФ-выдаче. Единственный отложенный SEO-слот. **DEFERRED**: требует платного аккаунта DataForSEO → активация после Б-1 (прецедент Figma #44 / NightOwl #67).',
'При задачах «SEO-аудит сайта по РФ-выдаче», «анализ бэклинков», «SERP-позиции по ключевым словам» — после появления платного аккаунта DataForSEO. До этого: SEO-аудит через mkt_plugin #74 (`seo-audit`), ключевые слова через Wordstat #79.',
{name:'Яндекс.Директ Wordstat (#79)',cond:'при активации #82 добавляет SERP-данные к Wordstat-ключам #79'}
],
[
{name:'mkt_plugin (#74) seo-audit',desc:'При активации #82: DataForSEO SERP-данные дополняют, а не заменяют seo-audit скил #74 (тот — воркфлоу, #82 — данные). Граница чёткая.',type:'GREEN'}
]
),
mcp_unisender:nd(
'Unisender Go MCP — своя тонкая MCP-обёртка над API Unisender Go (текущий email-сервис портала): массовые маркетинговые рассылки, управление списками подписчиков, шаблоны писем, статистика доставки. **DEFERRED**: готового качественного upstream-сервера нет (Composio платный, клиентские библиотеки ненадёжны) — написать по потребности.',
'При потребности в массовых маркетинговых рассылках: «отправь кампанию сегментам», «управляй списком подписчиков», «просмотри статистику рассылок». До появления обёртки — использовать Unisender Go API напрямую или через `email-sequence` скил mkt_plugin (#74).',
'DEFERRED — нет готового upstream MCP-сервера; зарегистрирован как pending-слот. Условие активации: появилась потребность в автоматизации массовых рассылок → написать тонкую обёртку над API Unisender Go. Граница с транзакционным email портала (уведомления): транзакционный email = продуктовый код (не C1), маркетинговые рассылки = C1 (MKT5, ADR-015). `email-sequence` (#74) генерирует копии кампаний; отправка = Unisender Go API/#83.',
[
{name:'PSR_v1',cond:'R10.1 блок 1 — self-authored, DEFERRED'},
{name:'tooling',cond:'реестр #83'}
],
[],
[
{name:'mkt_plugin (#74)',cond:'при активации #83: email-sequence #74 генерирует копии кампаний; #83 отправляет через Unisender Go API'}
// ── ПРАВИЛА — иерархия ──────────────────────────
'pravila->claude_md':{type:'подчиняет',when:'всегда — CLAUDE.md уровень ниже Pravila',transfers:'контроль',mandatory:'обязательно',rule:'Pravila §1 (уровень 1→2a)'},
'pravila->psr_v1':{type:'подчиняет',when:'всегда — PSR_v1 уровень 3 ниже Pravila',transfers:'контроль',mandatory:'обязательно',rule:'Pravila §1 (уровень 1→3)'},
'claude_md->tooling':{type:'документирует',when:'при правке реестра инструментов',transfers:'документация',mandatory:'обязательно',rule:'CLAUDE.md §0, §3 (ссылка на Прил. Н)'},
'pravila->superpowers':{type:'подчиняет',when:'задача попадает под карту §12.2 (14 типов)',transfers:'контроль',mandatory:'hard-block',rule:'Pravila §12 (hard-rule уровня 0; скил первым, §9 не применяется)'},
'psr_v1->upm':{type:'координирует',when:'вне основных фаз — активация через процедуру R14.3',transfers:'контроль',mandatory:'опционально',rule:'PSR_v1 R10.1, R11.5, R14.3'},
'psr_v1->mcp_21st':{type:'координирует',when:'вне основных фаз — активация через процедуру R14.4',transfers:'контроль',mandatory:'опционально',rule:'PSR_v1 R10.1, R14.4'},
'psr_v1->claude_md_mgmt':{type:'координирует',when:'инфраструктурный плагин для CLAUDE.md edits',transfers:'контроль',mandatory:'обязательно',rule:'PSR_v1 R10.1 блок 1'},
'claude_md->mcp_sentry':{type:'документирует',when:'вне основных фаз — для отладки во время работы, ждёт Б-1',transfers:'документация',mandatory:'опционально',rule:'CLAUDE.md §3.3 #34'},
'claude_md->mcp_redis':{type:'документирует',when:'вне основных фаз — Memurai только на чтение',transfers:'документация',mandatory:'опционально',rule:'CLAUDE.md §3.3 #35'},
'claude_md->claude_md_mgmt':{type:'документирует',when:'единственный канал правок CLAUDE.md',transfers:'документация',mandatory:'hard-block',rule:'CLAUDE.md §5 п.10'},
'claude_md->ag_pest':{type:'документирует',when:'агент для Pest TDD задач',transfers:'документация',mandatory:'рекомендуется',rule:'CLAUDE.md §3 (агенты)'},
'claude_md->ag_rls':{type:'документирует',when:'агент для RLS-аудита и smoke-тестов',transfers:'документация',mandatory:'рекомендуется',rule:'CLAUDE.md §3 (агенты)'},
'sk_wplans->sk_eplans':{type:'запускает',when:'plan готов → executing-plans',transfers:'триггер',mandatory:'рекомендуется',rule:'Superpowers process chain'},
'sk_wplans->sk_subagent':{type:'альтернатива',when:'если в текущей сессии — subagent-driven-development вместо executing',transfers:'триггер',mandatory:'опционально',rule:'Superpowers process chain (in-session alt)'},
'sk_subagent->ag_general':{type:'запускает',when:'general-purpose subagent для независимых задач',transfers:'триггер',mandatory:'опционально',rule:'subagent-driven-development (Task agent)'},
'sk_subagent->ag_plan':{type:'запускает',when:'агент планирования больших задач',transfers:'триггер',mandatory:'опционально',rule:'subagent-driven-development (Task agent)'},
'sk_parallel->sk_worktree':{type:'запускает',when:'parallel agents требует изоляцию worktree',transfers:'триггер',mandatory:'рекомендуется',rule:'PSR_v1 R5 (dispatching-parallel-agents)'},
'sk_rls->tooling':{type:'читает',when:'RLS-аудит сверяется с реестром инструментов',transfers:'данные',mandatory:'обязательно',rule:'Tooling Прил. Н (squawk/Boost)'},
'sk_rls->mcp_boost':{type:'запускает',when:'RLS-смоук читает БД через Boost MCP',transfers:'данные',mandatory:'обязательно',rule:'CLAUDE.md §3.2 #10 (Boost)'},
'ag_hookify->hookify_plugin':{type:'запускает',when:'агент hookify создаёт правила через plugin',transfers:'триггер',mandatory:'опционально',rule:'hookify plugin docs'},
'ag_rls->mcp_boost':{type:'запускает',when:'RLS-аудит через Boost MCP',transfers:'данные',mandatory:'обязательно',rule:'CLAUDE.md §3.2 #10'},
'ag_guide->mcp_gh':{type:'запускает',when:'агент гайдов работает с GitHub issues/PR',transfers:'триггер',mandatory:'опционально',rule:'CLAUDE.md §3.1 #3 (GitHub MCP)'},
// ── LEFTHOOK jobs ───────────────────────────────
'lh_gitleaks->mem_plugins':{type:'документирует',when:'gitleaks-job описан в memory о плагинах',transfers:'документация',mandatory:'рекомендуется',rule:'Tooling Прил. Н §8 (lefthook.yml)'},
'lh_larastan->mcp_boost':{type:'запускает',when:'Larastan job использует Boost для контекста',transfers:'проверка',mandatory:'обязательно',rule:'lefthook.yml job + Boost'},
'lh_squawk->tooling':{type:'читает',when:'squawk-конфиг описан в реестре инструментов',transfers:'документация',mandatory:'обязательно',rule:'Tooling Прил. Н #15'},
'lh_gitleaks2->lh_gitleaks':{type:'альтернатива',when:'второй gitleaks-job (pre-push) вариант pre-commit',transfers:'проверка',mandatory:'опционально',rule:'lefthook.yml (дубль pre-push)'},
'lh_lychee->claude_md':{type:'читает',when:'lychee валидирует ссылки в CLAUDE.md и docs',transfers:'проверка',mandatory:'обязательно',rule:'CLAUDE.md §4 + lefthook'},
'mem_env->ag_pest':{type:'документирует',when:'memory о квирках окружения нужен для Pest agent',transfers:'данные',mandatory:'рекомендуется',rule:'memory/feedback_environment.md'},
'mem_plugins->psr_v1':{type:'документирует',when:'memory о парном стеке отражает PSR_v1',transfers:'данные',mandatory:'рекомендуется',rule:'memory/feedback_plugin_paired_stack.md'},
'mem_archive->claude_md':{type:'документирует',when:'memory об архиве содержит refs на CLAUDE.md',transfers:'данные',mandatory:'рекомендуется',rule:'memory/reference_archive.md'},
'mcp_pw->hk_session':{type:'триггерит',when:'Playwright MCP вызывается из SessionStart hook',transfers:'триггер',mandatory:'опционально',rule:'settings.json hooks + Playwright'},
'mcp_gh->sk_pr':{type:'запускает',when:'finishing-a-development-branch использует gh-команды',transfers:'триггер',mandatory:'обязательно',rule:'Superpowers finishing-a-development-branch'},
'mcp_boost->ag_rls':{type:'запускает',when:'Boost MCP отдаёт данные RLS-агенту',transfers:'данные',mandatory:'обязательно',rule:'CLAUDE.md §3.2 #10'},
// ── КОНФЛИКТЫ (8 рёбер; 3 из них имеют ту же пару from/to, что и обычные — здесь объединены под одним ключом) ─
'mcp_pw->sk_parallel':{type:'конфликт',when:'Playwright и parallel-agents оба требуют изоляцию',transfers:'coverage',mandatory:'опционально',rule:'GREEN: квирк #95 — профили per-cwd hash → worktrees не конфликтуют; same-dir parallel под Pravila §15.2 claim'},
'ag_pest->mcp_redis':{type:'конфликт',when:'Pest --parallel race на Redis cache (quirk 72/77)',transfers:'coverage',mandatory:'опционально',rule:'CLAUDE.md §3.3 #35 (Redis MCP) — race остаётся вне регламента'},
'psr_v1->claude_md':{type:'конфликт',when:'PSR_v1 уровень 3 vs CLAUDE.md 2a — приоритет CLAUDE.md',transfers:'контроль',mandatory:'hard-block',rule:'CLAUDE.md §1 (priority chain)'},
'upm->fd_plugin':{type:'конфликт',when:'UPM и FD оба претендуют на UI-решения',transfers:'coverage',mandatory:'hard-block',rule:'PSR_v1 R14.5 (не параллельно)'},
'mcp_21st->fd_plugin':{type:'конфликт',when:'21st Magic и FD оба генераторы UI',transfers:'coverage',mandatory:'hard-block',rule:'PSR_v1 R14.5 (не параллельно)'},
'ruflo_queen->ruflo_workers':{type:'подчиняет',when:'hive-mind активен, но рой ни разу не получал задач',transfers:'контроль',mandatory:'опционально (рой idle)',rule:'Tooling §4.10 (ruflo как advisory-подсистема)'},
'ruflo_queen->ruflo_agents_catalog':{type:'артефакт',when:'`ruflo init` высыпал каталог в .claude/agents/',transfers:'ничего (файлы лежат)',mandatory:'не задействовано',rule:'артефакт установки ruflo'},
'ruflo_queen->ruflo_commands':{type:'артефакт',when:'`ruflo init` высыпал команды в .claude/commands/',transfers:'ничего (файлы лежат)',mandatory:'не задействовано',rule:'артефакт установки ruflo'},
'ruflo_queen->ruflo_plugins':{type:'артефакт',when:'плагины ruflo — 0 установлено из ~20 в реестре',transfers:'ничего',mandatory:'не задействовано',rule:'артефакт установки ruflo'},
'ruflo_mcp->ruflo_memory':{type:'читает',when:'MCP-инструменты memory_* обращаются к хранилищу',transfers:'данные',mandatory:'опционально',rule:'Tooling §4.10'},
'ruflo_recall_hook->ruflo_memory':{type:'читает',when:'recall-хук на каждый промпт запускает `ruflo memory search`',transfers:'данные',mandatory:'«мягко» (fail-open)',rule:'.claude/settings.json (UserPromptSubmit)'},
'ruflo_daemon->ruflo_memory':{type:'читает',when:'воркер consolidate демона обращается к памяти',transfers:'данные',mandatory:'опционально',rule:'.claude-flow daemon'},
'ruflo_queen->pravila':{type:'конфликт',when:'реколлаж 16.05.2026 привёл нормативку к рантайму — конфликт «декларация ≠ рантайм» закрыт',transfers:'coverage',mandatory:'закрыто',rule:'Закрыто реколлажем: Pravila v1.16 / CLAUDE.md v2.2 / PSR_v1 v3.2 / Tooling v2.2'},
'pravila->ruflo_queen':{type:'триггерит',when:'триггер-слова queen/королева в промпте — задача маршрутизируется через ruflo Queen',transfers:'триггер',mandatory:'hard-rule',rule:'Pravila §14 (queen/королева → hive-mind spawn)'},
'claude_md->ruflo_queen':{type:'документирует',when:'CLAUDE.md §3.5 описывает ruflo как advisory/automation-подсистему',transfers:'документация',mandatory:'рекомендуется',rule:'CLAUDE.md §3.5'},
'psr_v1->ruflo_queen':{type:'документирует',when:'PSR_v1 §14 — cross-ref на queen-триггер Pravila §14',transfers:'документация',mandatory:'рекомендуется',rule:'PSR_v1 §14'},
'tooling->ruflo_queen':{type:'документирует',when:'Tooling §4.10 — реестр ruflo как advisory/automation-подсистемы',transfers:'документация',mandatory:'рекомендуется',rule:'Tooling §4.10'},
'mem_ruflo->ruflo_queen':{type:'документирует',when:'memory-файл хранит историю ruflo-интеграции',transfers:'данные',mandatory:'рекомендуется',rule:'memory/project_ruflo_integration.md'},
'ruflo_memory->mem_state':{type:'конфликт',when:'два хранилища памяти не синхронизированы; память ruflo почти пуста',transfers:'coverage',mandatory:'опционально',rule:'нет регламента синхронизации (alpha-баг HNSW #1122)'},
'pravila->sk_brain_retro':{type:'подчиняет',when:'§16: факторный анализ раз в спринт',transfers:'контроль',mandatory:'по команде заказчика',rule:'Pravila §16 + PSR_v1 R16'},
'sk_brain_retro->observer_evidence':{type:'читает',when:'раз в спринт — агрегирует эпизоды',transfers:'данные',mandatory:'read-only',rule:'ADR-011 §5.5 (/brain-retro — читатель)'},
'lh_crossref->claude_md':{type:'проверяет',when:'pre-commit при правке любого из 5 нормативных файлов',transfers:'проверка',mandatory:'STRICT (блокирует)',rule:'ADR-011 §6.2 (C2) + lefthook.yml job 12'},