From 39bde69b748ca1f45d5f39d72c8eb61c0f541e37 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: Thu, 14 May 2026 12:47:10 +0300 Subject: [PATCH] =?UTF-8?q?chore(graph):=20rewrite=20group=20C=20(agents?= =?UTF-8?q?=20+=20MCP,=2018=20nodes)=20=E2=80=94=20plain=20language?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Переписаны nd() блоки для 11 агентов (ag_pest/ag_rls/ag_explore/ag_general/ag_plan/ag_guide/ag_statusline/ag_hookify/ag_pcreator/ag_pvalid/ag_skreview) и 7 MCP (mcp_pw/mcp_gh/mcp_boost/mcp_semgrep/mcp_sentry/mcp_redis/mcp_21st). Иностранные аббревиатуры расшифрованы (SAST/CVE/SQLi/XSS/ПДн). Iter2 spec §3 group C. Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/automation-graph.html | 124 ++++++++++++++++++------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/docs/automation-graph.html b/docs/automation-graph.html index 4886e4ae..8c969ee5 100644 --- a/docs/automation-graph.html +++ b/docs/automation-graph.html @@ -661,152 +661,152 @@ const NODE_DETAILS = { // ── АГЕНТЫ ─────────────────────────────────────── ag_pest: nd( - 'Диагностирует падения Pest --parallel: классифицирует как реальный баг или один из 5 квирков (72-73-77...).', - 'При падении Pest --parallel ИЛИ при subdir-only flake (как в audit Phase 3 SyncSupplierProjectsJobTest).', - 'READ-ONLY на коде, не правит самостоятельно. Falsify каждую гипотезу через реальный запуск, не «вероятно квирк».', + 'Разбирает падения тестов Pest --parallel: отличает настоящую ошибку от одного из пяти известных квирков (72/73/77...).', + 'При падении Pest --parallel ИЛИ при subdir-only flake (как в аудите Phase 3 SyncSupplierProjectsJobTest).', + 'READ-ONLY (только читает код, ничего не правит). Каждую гипотезу подтверждает реальным запуском, а не «похоже на квирк».', [{ name: 'CLAUDE.md §6', cond: 'описывает когда вызывать' }], [], - [{ name: 'MCP: redis', cond: 'читает Redis для дебага quirk 72 (supplier:session race)' }] + [{ name: 'MCP: redis', cond: 'читает Redis для дебага квирка 72 (supplier:session race)' }] ), ag_rls: nd( - 'Проверяет RLS compliance в миграциях — 7-item чеклист с реальными запусками команд, READ-ONLY.', - 'При создании/правке миграции в db/migrations/ ИЛИ при правке db/schema.sql ИЛИ при PR review с DB-изменениями.', - 'READ-ONLY (только Read/Grep/Glob/Bash) — не пишет код. Не альтернатива sk_rls skill, у них разные сценарии.', - [{ name: 'CLAUDE.md', cond: 'описывает в §6 и агенты/ директории' }], + 'Проверяет миграции на соответствие RLS (защите строк по тенанту) — 7 пунктов чеклиста с реальными командами, только чтение.', + 'При создании/правке миграции в db/migrations/ ИЛИ при правке db/schema.sql ИЛИ при ревью PR с изменениями БД.', + 'READ-ONLY (только Read/Grep/Glob/Bash) — код не пишет. Не замена скилу sk_rls — у них разные сценарии.', + [{ name: 'CLAUDE.md', cond: 'описывает в §6 и в директории агентов' }], [], [{ name: 'MCP: laravel-boost', cond: 'SQL запросы к db/schema.sql' }], - [{ name: 'rls-check скил', desc: 'оба покрывают RLS compliance, нет чёткой границы: агент — для PR/diff, скил — для ручной таблицы' }] + [{ name: 'rls-check скил', desc: 'оба покрывают соответствие RLS, чёткой границы нет: агент — для PR и диффов, скил — для ручной проверки таблицы' }] ), ag_statusline: nd( - 'Настраивает строку состояния Claude Code через редактирование файла конфига.', + 'Настраивает строку состояния Claude Code через правку файла настроек.', 'При запросе пользователя «настрой statusline» — редкая разовая задача.', - 'Правит только settings.json statusline-секцию, не другие части конфига.', + 'Правит только секцию statusline в settings.json, другие части файла не трогает.', [], [], [] ), ag_guide: nd( - 'Отвечает на вопросы об API Claude Code, SDK, MCP серверах, хуках, slash commands.', + 'Отвечает на вопросы про API Claude Code, SDK, MCP-серверы, хуки, slash-команды.', 'При вопросе про возможности Claude Code/SDK/API — «Can Claude...», «How do I...», «Does Claude...».', - 'READ-ONLY: ищет в документации, не правит код. Не для дебага кода — только для вопросов о platform.', + 'READ-ONLY: ищет в документации, код не правит. Не для отладки кода — только вопросы о платформе.', [], [], - [{ name: 'MCP: github', cond: 'ищет примеры в репозитории при необходимости' }] + [{ name: 'MCP: github', cond: 'при необходимости ищет примеры в репозитории' }] ), ag_explore: nd( - 'Быстрый поиск файлов по паттерну или символу — только чтение, без анализа.', - 'При targeted lookup — найти файл по имени или grep по символу/keyword.', - 'Не для open-ended exploration. Не для review/audit (читает excerpts, миссует content past read window).', + 'Быстрый поиск файлов по шаблону имени или по символу — только чтение, без анализа.', + 'При точечном поиске — найти файл по имени или сделать grep по символу/ключевому слову.', + 'Не для свободного исследования. Не для ревью/аудита (читает отрывки, теряет контекст за пределами окна чтения).', [{ name: 'subagent-driven скил', cond: 'запускается для задач поиска' }], [], [] ), ag_general: nd( - 'Универсальный агент для сложных multi-step исследований с полным доступом к инструментам.', - 'При сложных multi-step research / coding задачах, когда Explore недостаточно (нужен анализ, не только поиск).', - 'Полный доступ к инструментам — может писать код. Дороже Explore по токенам.', + 'Универсальный агент для сложных многошаговых исследований — с полным набором инструментов.', + 'При сложных multi-step research / coding задачах, когда Explore не хватает (нужен анализ, не только поиск).', + 'Полный набор инструментов — может писать код. Дороже Explore по токенам.', [{ name: 'subagent-driven скил', cond: 'запускается для основных задач' }], [], [] ), ag_plan: nd( - 'Архитектор: разрабатывает планы реализации, выявляет критичные файлы, рассматривает trade-offs.', - 'При архитектурном планировании multi-component задачи (не для small refactor).', - 'READ-ONLY (no Edit/Write/NotebookEdit). Возвращает план, не реализует его.', + 'Архитектор: разрабатывает планы реализации, находит критичные файлы, разбирает компромиссы.', + 'При архитектурном планировании multi-component задачи (не для мелкого рефакторинга).', + 'READ-ONLY (без Edit/Write/NotebookEdit). Возвращает план, сам его не реализует.', [{ name: 'subagent-driven скил', cond: 'запускается для архитектурных задач' }], [], - [{ name: 'writing-plans скил', cond: 'Plan агент и writing-plans решают похожую задачу для разных контекстов' }] + [{ name: 'writing-plans скил', cond: 'агент Plan и скил writing-plans решают похожую задачу в разных контекстах' }] ), ag_hookify: nd( - 'Анализирует транскрипты разговоров для поиска поведений, которые стоит предотвратить хуком.', + 'Разбирает транскрипты диалогов и ищет поведение, которое стоит предотвратить хуком.', 'При триггере /hookify без аргументов ИЛИ при запросе «look back at this conversation, what mistakes to prevent».', - 'READ-ONLY (Read+Grep only). Рекомендует хуки, не создаёт их сам — передаёт в hookify plugin.', + 'READ-ONLY (только Read+Grep). Рекомендует хуки, сам их не создаёт — передаёт в плагин hookify.', [], [], [{ name: 'hookify (плагин)', cond: 'агент передаёт рекомендации в плагин' }] ), ag_pcreator: nd( - 'Создаёт конфигурацию новых агентов по описанию пользователя.', + 'Создаёт настройку новых агентов по описанию от пользователя.', 'При запросе «create an agent that...» — генерация agent.md по описанию функциональности.', - 'Только Write/Read tools. Не валидирует созданного агента — передаёт в plugin-validator.', + 'Только инструменты Write/Read. Созданного агента сам не проверяет — передаёт в plugin-validator.', [], [], - [{ name: 'plugin-dev:plugin-validator', cond: 'validator проверяет созданного агента' }] + [{ name: 'plugin-dev:plugin-validator', cond: 'валидатор проверяет созданного агента' }] ), ag_pvalid: nd( - 'Проверяет структуру плагина на корректность — plugin.json, tools, manifest.', - 'После создания/изменения plugin.json или plugin component\'ов — proactive validation.', - 'READ-ONLY (Read/Grep/Glob/Bash). Сам не правит — даёт список нарушений.', + 'Проверяет структуру плагина на корректность — plugin.json, инструменты, манифест.', + 'После создания/правки plugin.json или компонентов плагина — превентивная проверка.', + 'READ-ONLY (Read/Grep/Glob/Bash). Сам не правит — выдаёт список нарушений.', [], [], - [{ name: 'plugin-dev:agent-creator', cond: 'validator и creator работают в паре' }] + [{ name: 'plugin-dev:agent-creator', cond: 'валидатор и creator работают в паре' }] ), ag_skreview: nd( - 'Оценивает качество написанного скила — описание, workflow, примеры, best practices.', - 'После создания/изменения скила через writing-skills — proactive review.', + 'Оценивает качество написанного скила — описание, ход работы, примеры, лучшие практики.', + 'После создания/правки скила через writing-skills — превентивное ревью.', 'READ-ONLY (Read/Grep/Glob). Не правит — выдаёт рекомендации.', [], [], - [{ name: 'writing-skills скил', cond: 'skill-reviewer проверяет то, что writing-skills создал' }] + [{ name: 'writing-skills скил', cond: 'skill-reviewer проверяет то, что создал writing-skills' }] ), // ── MCP-СЕРВЕРЫ ────────────────────────────────── mcp_pw: nd( - 'Управляет браузером — снимает скриншоты, кликает, заполняет формы для smoke и a11y тестов.', + 'Управляет браузером — снимает скриншоты, кликает, заполняет формы для smoke- и a11y-тестов.', 'При визуальной проверке прототипов (фаза 0), при a11y smoke (axe-core), при UI integration smoke.', - 'Не для production users. На каждой сессии один shared browser — конфликты при parallel-work (см. квирк #2 в memory).', + 'Не для боевых пользователей. На сессию один общий браузер — при parallel-work возможны столкновения (см. квирк #2 в memory).', [{ name: 'CLAUDE.md §3.1 #2', cond: 'активен с фазы 0' }], [], [{ name: 'SessionStart хук', cond: 'используется для визуальной проверки прототипов' }] ), mcp_gh: nd( - 'GitHub API — читает/создаёт PR, issues, коммиты, branches в репозитории CoralMinister/lidpotok.', - 'При работе с PR/issues, при поиске в репозитории, при создании PR через finishing-pr skill.', - 'Не push на main без явного одобрения. Pravila §4: атомарные коммиты, не batch\'ить через MCP.', + 'GitHub API — читает/создаёт PR, issues, коммиты, ветки в репозитории CoralMinister/lidpotok.', + 'При работе с PR/issues, при поиске в репозитории, при создании PR через скил finishing-pr.', + 'Не делать push в main без явного одобрения. Pravila §4: атомарные коммиты, не объединять их через MCP.', [{ name: 'CLAUDE.md §3.1 #3', cond: 'активен с фазы 0' }], [], [{ name: 'finishing-pr скил', cond: 'создаёт PR через этот MCP' }] ), mcp_boost: nd( - 'Laravel Boost — SQL запросы к dev-БД, схема таблиц, логи ошибок, поиск в docs Laravel.', - 'Фаза 1+: при SQL запросах, при поиске в Laravel docs, при работе с Eloquent моделями.', - '**READ-ONLY к prod** — `.env.production` не должен попадать в локальный конфиг. Не использовать Inertia/Livewire/Tailwind/Filament guidelines.', - [{ name: 'CLAUDE.md §3.2 #10', cond: 'активен с фазы 1, READ-ONLY к prod запрещено' }], + 'Laravel Boost — SQL-запросы к dev-БД, схема таблиц, журналы ошибок, поиск по документации Laravel.', + 'Фаза 1+: при SQL-запросах, при поиске в документации Laravel, при работе с моделями Eloquent.', + '**READ-ONLY к prod** — `.env.production` не должен попадать в локальный конфиг. Не использовать правила-подсказки Inertia/Livewire/Tailwind/Filament.', + [{ name: 'CLAUDE.md §3.2 #10', cond: 'активен с фазы 1, доступ к prod только на чтение' }], [], [{ name: 'ag_rls агент', cond: 'rls-reviewer использует Boost для SQL' }, { name: 'sk_rls скил', cond: 'rls-check использует Boost' }] ), mcp_semgrep: nd( - 'SAST анализ кода — ищет уязвимости, XSS, SQLi, нарушения правил по паттернам.', - 'Фаза 3 pre-production: при code review (sk_coderev), при CI перед релизом.', - 'Конфигурация в .semgrep.yml. False-positive\'ы документируются inline.', + 'SAST (статический анализ кода на уязвимости) — ищет уязвимости, XSS (внедрение JS), SQLi (внедрение SQL), нарушения правил по шаблонам.', + 'Фаза 3 pre-production: при ревью кода (sk_coderev), при CI перед релизом.', + 'Настройка в .semgrep.yml. Ложные срабатывания документируются прямо в коде.', [{ name: 'CLAUDE.md §3.4 #25', cond: 'фаза 3 pre-production' }], [], - [{ name: 'code-review скил', cond: 'Semgrep MCP используется при code review' }] + [{ name: 'code-review скил', cond: 'Semgrep MCP используется при ревью кода' }] ), mcp_sentry: nd( - 'Читает ошибки из self-hosted Sentry в Yandex Cloud — события, стектрейсы, метрики. READ-ONLY.', - 'При расследовании production runtime ошибок (после deployment Б-1).', - '**READ-ONLY** scope (org:read/project:read/event:read). Pending Sentry instance deployment Б-1 (зависит от ООО registration).', - [{ name: 'CLAUDE.md §3.3 #34', cond: 'off-phase debug-runtime; pending Sentry deployment Б-1' }], + 'Читает ошибки из self-hosted Sentry в Yandex Cloud — события, стектрейсы, метрики. READ-ONLY (только чтение).', + 'При расследовании ошибок боевой среды во время работы (после развёртывания Б-1).', + '**READ-ONLY** (org:read/project:read/event:read). Ждёт развёртывания инстанса Sentry по Б-1 (зависит от регистрации ООО).', + [{ name: 'CLAUDE.md §3.3 #34', cond: 'off-phase debug-runtime; ждёт развёртывания Sentry по Б-1' }], [], [] ), mcp_redis: nd( - 'Читает Redis/Memurai — ключи, очереди, кэш для дебага race conditions. СТРОГО READ-ONLY.', - 'При дебаге Redis-очередей (Pest --parallel quirk 72), при анализе кэш-инвалидации.', - '**СТРОГО READ-ONLY** — никаких DEL/FLUSHDB/SET/LPUSH из Claude (только GET/KEYS/LIST). Deprecated Anthropic source — миграция post-MVP.', + 'Читает Redis/Memurai — ключи, очереди, кэш для отладки гонок (race conditions). СТРОГО READ-ONLY.', + 'При отладке очередей Redis (Pest --parallel квирк 72), при анализе инвалидации кэша.', + '**СТРОГО READ-ONLY** — никаких DEL/FLUSHDB/SET/LPUSH из Claude (только GET/KEYS/LIST). Источник Anthropic устарел — миграция post-MVP.', [{ name: 'CLAUDE.md §3.3 #35', cond: 'off-phase debug-runtime; PSR_v1 R10.1 блок 3' }], [], - [{ name: 'pest-parallel-debugger агент', cond: 'агент использует для quirk 72 (Redis race)' }] + [{ name: 'pest-parallel-debugger агент', cond: 'агент использует для квирка 72 (гонка в Redis)' }] ), mcp_21st: nd( - 'Генератор стартовых шаблонов UI-компонентов через LLM. Активация только через R14.4 pipeline.', - 'Только через PSR_v1 R14.4 pipeline: pre-check 9 условий (брендовый App*? Vuetify-эквивалент? существующий компонент?).', - 'R14.5: не параллельно с FD/UPM. JSX→Vue, Tailwind→utility, shadcn→Vuetify обязательны. Pa11y a11y на deployable.', - [{ name: 'PSR_v1 R14.4', cond: 'строгий pre-check: 9 условий перед активацией' }], + 'Генератор стартовых шаблонов UI-компонентов через LLM. Активация только через процедуру R14.4.', + 'Только через процедуру PSR_v1 R14.4: предпроверка из 9 условий (брендовый App*? есть аналог в Vuetify? есть уже существующий компонент?).', + 'R14.5: не запускать параллельно с FD/UPM. Обязательны: JSX→Vue, Tailwind→utility, shadcn→Vuetify. Pa11y a11y на готовом виде.', + [{ name: 'PSR_v1 R14.4', cond: 'строгая предпроверка: 9 условий перед активацией' }], [], [], - [{ name: 'Frontend Design', desc: 'PSR_v1 R14.5: нельзя параллельно — 21st как генератор материала, FD как решатель; риск смешивания ролей и нарушения R6 фильтра стека' }] + [{ name: 'Frontend Design', desc: 'PSR_v1 R14.5: нельзя параллельно — 21st как генератор материала, FD как решатель; риск смешать роли и нарушить R6 (фильтр стека)' }] ), // ── LEFTHOOK JOBS ─────────────────────────────────