diff --git a/docs/registry/contracts/21st-magic.contract.json b/docs/registry/contracts/21st-magic.contract.json new file mode 100644 index 00000000..338163a6 --- /dev/null +++ b/docs/registry/contracts/21st-magic.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "21st-magic", + "kind": "external", + "needs": ["намерение UI-шаблона (компонент / лейаут / форма)"], + "produces": ["стартовый UI-шаблон (LLM-сгенерированный)"], + "constraints": ["генератор шаблонов через PSR_v1 R14.4 pipeline", "Pa11y проверка обязательна после генерации", "стек-фильтр R6.0"], + "preview-form": "mockup", + "defaults": ["после генерации — обязательный Pa11y"], + "key-decisions": ["какой шаблон; адаптация под Vue+Vuetify"], + "acceptance-criteria": ["шаблон в стеке Vue+Vuetify, Pa11y 0 нарушений"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/adr-kit.contract.json b/docs/registry/contracts/adr-kit.contract.json new file mode 100644 index 00000000..0fd225ac --- /dev/null +++ b/docs/registry/contracts/adr-kit.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "adr-kit", + "kind": "external", + "needs": ["архитектурное решение для фиксации/проверки"], + "produces": ["ADR в docs/adr/ + enforcement через adr-judge"], + "constraints": ["ADR + adr-judge lefthook job 9 (без LLM)", "НЕ диаграммы (mermaid)", "НЕ справочник паттернов (architecture-patterns)"], + "preview-form": "outline", + "defaults": ["adr-judge декларативно, без --llm"], + "key-decisions": ["что фиксировать как ADR; статус решения"], + "acceptance-criteria": ["решение зафиксировано ADR, adr-judge проходит"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/architecture-patterns.contract.json b/docs/registry/contracts/architecture-patterns.contract.json new file mode 100644 index 00000000..f30c319c --- /dev/null +++ b/docs/registry/contracts/architecture-patterns.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "architecture-patterns", + "kind": "external", + "needs": ["вопрос выбора архитектурного паттерна"], + "produces": ["описание паттернов + критерии выбора (Clean/Hexagonal/DDD/CQRS/...)"], + "constraints": ["справочник паттернов (knowledge)", "НЕ фиксация решения (adr-kit)"], + "preview-form": "none", + "defaults": ["давать критерии выбора, не догму"], + "key-decisions": ["какой паттерн под контекст"], + "acceptance-criteria": ["паттерн обоснован под контекст задачи"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/ccpm.contract.json b/docs/registry/contracts/ccpm.contract.json new file mode 100644 index 00000000..9aee9e46 --- /dev/null +++ b/docs/registry/contracts/ccpm.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "ccpm", + "kind": "external", + "needs": ["идея фичи для управления (PRD→эпик→issue→код)"], + "produces": ["PRD/эпики/issues в .claude/prds/ + .claude/epics/"], + "constraints": ["вендоренный скил, 14 bash-скриптов без хуков", "GitHub-issues через GitHub MCP", "НЕ продуктовые церемонии (product-management)"], + "preview-form": "outline", + "defaults": ["PRD → эпик → issues → код"], + "key-decisions": ["декомпозиция эпика на issues"], + "acceptance-criteria": ["фича прослежена PRD→issue→код"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/claude-md-management.contract.json b/docs/registry/contracts/claude-md-management.contract.json new file mode 100644 index 00000000..f36b8e52 --- /dev/null +++ b/docs/registry/contracts/claude-md-management.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "claude-md-management", + "kind": "external", + "needs": ["намерение правки CLAUDE.md (audit / capture learnings)"], + "produces": ["обновлённый CLAUDE.md (через claude-md-improver / revise-claude-md)"], + "constraints": ["единственный разрешённый канал правки CLAUDE.md (§5 п.10)", "синхронизировать Pravila + Tooling (п.7)"], + "preview-form": "none", + "defaults": ["claude-md-improver для структурных, revise для learnings"], + "key-decisions": ["audit-правка vs захват learnings"], + "acceptance-criteria": ["CLAUDE.md обновлён через плагин, нормативка синхронна"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/dependabot.contract.json b/docs/registry/contracts/dependabot.contract.json new file mode 100644 index 00000000..92f3c623 --- /dev/null +++ b/docs/registry/contracts/dependabot.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "dependabot", + "kind": "external", + "needs": ["Composer/npm-зависимости"], + "produces": ["auto-PR при обнаружении CVE в зависимости"], + "constraints": ["авто-PR через .github/dependabot.yml", "НЕ блок install (Roave)"], + "preview-form": "none", + "defaults": ["настройка через .github/dependabot.yml"], + "key-decisions": ["принять/отклонить предложенное обновление"], + "acceptance-criteria": ["CVE-зависимости имеют открытый update-PR"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/deptrac.contract.json b/docs/registry/contracts/deptrac.contract.json new file mode 100644 index 00000000..7abb7fdb --- /dev/null +++ b/docs/registry/contracts/deptrac.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "deptrac", + "kind": "external", + "needs": ["PHP-слои для проверки направления зависимостей"], + "produces": ["отчёт о нарушениях границ слоёв"], + "constraints": ["граф слоёв по app/deptrac.yaml; lefthook job 10", "НЕ типовой анализ (Larastan)", "НЕ декларативный ADR (adr-judge)"], + "preview-form": "none", + "defaults": ["конфиг 13 слоёв, консервативный ruleset"], + "key-decisions": ["допустимые направления зависимостей"], + "acceptance-criteria": ["0 нарушений границ слоёв"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/mermaid.contract.json b/docs/registry/contracts/mermaid.contract.json new file mode 100644 index 00000000..c2e1c448 --- /dev/null +++ b/docs/registry/contracts/mermaid.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "mermaid", + "kind": "external", + "needs": ["требование к диаграмме (C4 / flow / sequence / ...)"], + "produces": ["диаграмма в нотации Mermaid/C4"], + "constraints": ["вендоренный скил; диаграммы в docs/architecture/", "НЕ фиксация решения (adr-kit)"], + "preview-form": "diagram", + "defaults": ["C4: context/container/component"], + "key-decisions": ["тип и уровень диаграммы"], + "acceptance-criteria": ["диаграмма рендерится и отражает систему"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/pg-anonymizer.contract.json b/docs/registry/contracts/pg-anonymizer.contract.json new file mode 100644 index 00000000..ca2e4c3f --- /dev/null +++ b/docs/registry/contracts/pg-anonymizer.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "pg-anonymizer", + "kind": "external", + "needs": ["дамп БД с персональными данными"], + "produces": ["маскированный дамп (телефоны/имена/email)"], + "constraints": ["загрузка по требованию LOAD 'anon' (не db-wide preload)", "на проде liderra.ru"], + "preview-form": "sample", + "defaults": ["маски по требованию для выгрузок"], + "key-decisions": ["какие поля маскировать"], + "acceptance-criteria": ["ПДн в выгрузке замаскированы"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/pg-audit.contract.json b/docs/registry/contracts/pg-audit.contract.json new file mode 100644 index 00000000..93e98104 --- /dev/null +++ b/docs/registry/contracts/pg-audit.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "pg-audit", + "kind": "external", + "needs": ["DDL/DML/DCL операции БД"], + "produces": ["аудит-журнал операций на уровне БД"], + "constraints": ["pgaudit.log=ddl,role,write; log_parameter=off (ПДн не логируются)", "на проде liderra.ru; закрывает 152-ФЗ"], + "preview-form": "none", + "defaults": ["журнал в /var/log/postgresql"], + "key-decisions": ["scope логируемых операций"], + "acceptance-criteria": ["аудит-журнал БД ведётся, ПДн не в логах"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/product-management.contract.json b/docs/registry/contracts/product-management.contract.json new file mode 100644 index 00000000..813f200a --- /dev/null +++ b/docs/registry/contracts/product-management.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "product-management", + "kind": "external", + "needs": ["продуктовая церемония (спека / роадмап / метрики)"], + "produces": ["спецификация / роадмап / анализ метрик / конкурентный бриф"], + "constraints": ["продуктовые церемонии (write-spec/roadmap/metrics)", "НЕ dev-issues (CCPM)"], + "preview-form": "outline", + "defaults": ["/write-spec, /roadmap-update, /metrics-review"], + "key-decisions": ["какая церемония под запрос"], + "acceptance-criteria": ["артефакт церемонии готов и обоснован"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/redis-mcp.contract.json b/docs/registry/contracts/redis-mcp.contract.json new file mode 100644 index 00000000..8dd3428b --- /dev/null +++ b/docs/registry/contracts/redis-mcp.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "redis-mcp", + "kind": "external", + "needs": ["вопрос о состоянии Redis/Memurai (ключи/очереди/TTL)"], + "produces": ["состояние Redis (чтение): ключи, очереди, TTL, паттерны"], + "constraints": ["READ-ONLY MCP к Redis/Memurai", "НЕ prod-ошибки (Sentry MCP)"], + "preview-form": "none", + "defaults": ["read-only инспекция кэша/очередей"], + "key-decisions": ["что инспектировать: кэш, очередь, race"], + "acceptance-criteria": ["состояние кэша/очереди/race локализовано"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/security-guidance.contract.json b/docs/registry/contracts/security-guidance.contract.json new file mode 100644 index 00000000..e9bccaf3 --- /dev/null +++ b/docs/registry/contracts/security-guidance.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "security-guidance", + "kind": "external", + "needs": ["правка файла с потенциально уязвимым паттерном"], + "produces": ["inline-предупреждение + блок правки (sys.exit 2)"], + "constraints": ["блокирующий PreToolUse-хук, speed-bump per файл+правило", "НЕ глубокий аудит (Trail of Bits)"], + "preview-form": "none", + "defaults": ["одноразовый блок, retry проходит"], + "key-decisions": ["реальная уязвимость vs false-positive"], + "acceptance-criteria": ["уязвимый паттерн замечен до коммита"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/semgrep.contract.json b/docs/registry/contracts/semgrep.contract.json new file mode 100644 index 00000000..d6f1534f --- /dev/null +++ b/docs/registry/contracts/semgrep.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "semgrep", + "kind": "external", + "needs": ["PHP/JS/Vue-код для SAST"], + "produces": ["отчёт об уязвимостях кода (инъекции, небезопасная конфигурация, XSS)"], + "constraints": ["SAST бинарь + MCP", "НЕ секреты в diff (gitleaks)", "НЕ глубокий on-demand аудит (Trail of Bits)"], + "preview-form": "none", + "defaults": ["npm run sast"], + "key-decisions": ["scope скана; реальная уязвимость vs false-positive"], + "acceptance-criteria": ["0 уязвимостей высокого риска"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/sentry-mcp.contract.json b/docs/registry/contracts/sentry-mcp.contract.json new file mode 100644 index 00000000..d3cbd414 --- /dev/null +++ b/docs/registry/contracts/sentry-mcp.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "sentry-mcp", + "kind": "external", + "needs": ["production runtime ошибка для диагностики"], + "produces": ["события/ошибки/трассировки из Sentry (чтение)"], + "constraints": ["READ-ONLY MCP к self-hosted Sentry", "pending активации Б-1", "НЕ Redis-состояние (Redis MCP)"], + "preview-form": "none", + "defaults": ["read-only диагностика"], + "key-decisions": ["какое событие/трассировку смотреть"], + "acceptance-criteria": ["причина prod-ошибки локализована по событию Sentry"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/trail-of-bits.contract.json b/docs/registry/contracts/trail-of-bits.contract.json new file mode 100644 index 00000000..ef63b2b4 --- /dev/null +++ b/docs/registry/contracts/trail-of-bits.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "trail-of-bits", + "kind": "external", + "needs": ["diff/код для глубокого security-аудита"], + "produces": ["глубокий аудит-отчёт (diff-review / supply-chain / variant / static)"], + "constraints": ["on-demand глубокий аудит (8 скилов)", "НЕ inline-блок (Security Guidance)", "НЕ быстрый SAST (Semgrep)"], + "preview-form": "outline", + "defaults": ["on-demand кампания, не в хуке"], + "key-decisions": ["какой аудит-скил под задачу"], + "acceptance-criteria": ["аудит покрыл diff/supply-chain/варианты"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/trivy.contract.json b/docs/registry/contracts/trivy.contract.json new file mode 100644 index 00000000..45744ff9 --- /dev/null +++ b/docs/registry/contracts/trivy.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "trivy", + "kind": "external", + "needs": ["Docker-образ для скана"], + "produces": ["отчёт о CVE в OS-пакетах и зависимостях образа"], + "constraints": ["скан Docker-образов в CI перед push в registry", "НЕ скан кода (Semgrep)"], + "preview-form": "none", + "defaults": ["trivy image перед push в Yandex Container Registry"], + "key-decisions": ["порог severity для блока"], + "acceptance-criteria": ["0 критичных CVE в образе"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +} diff --git a/docs/registry/contracts/ui-ux-pro-max.contract.json b/docs/registry/contracts/ui-ux-pro-max.contract.json new file mode 100644 index 00000000..eaec46e8 --- /dev/null +++ b/docs/registry/contracts/ui-ux-pro-max.contract.json @@ -0,0 +1,12 @@ +{ + "skill": "ui-ux-pro-max", + "kind": "external", + "needs": ["UI-задача, требующая материала (стиль / палитра / UX-гайд / график)"], + "produces": ["UI-материалы: стили, палитры, UX-гайдлайны, паттерны графиков"], + "constraints": ["материал, не решатель; только через PSR_v1 R14.3 pipeline", "не параллельно с Frontend Design (#30)"], + "preview-form": "none", + "defaults": ["активация только через R14.3 pipeline"], + "key-decisions": ["какой материал нужен под задачу"], + "acceptance-criteria": ["материал отобран, решение принимает Frontend Design"], + "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } +}