diff --git a/docs/registry/contracts/plugin-dev.contract.json b/docs/registry/contracts/plugin-dev.contract.json deleted file mode 100644 index 22d0c91..0000000 --- a/docs/registry/contracts/plugin-dev.contract.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "skill": "plugin-dev", - "kind": "external", - "needs": ["намерение разработать marketplace Claude-плагин"], - "produces": ["scaffold плагина (plugin.json, MCP, хуки, доки, публикация)"], - "constraints": ["8 sub-skills + 3 агента", "НЕ standalone-скилы (skill-creator)"], - "preview-form": "outline", - "defaults": ["plugin.json + структура компонентов"], - "key-decisions": ["состав компонентов плагина"], - "acceptance-criteria": ["плагин валиден и публикуем"], - "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } -} diff --git a/docs/registry/contracts/plugin-dev__agent-development.contract.json b/docs/registry/contracts/plugin-dev__agent-development.contract.json new file mode 100644 index 0000000..d868682 --- /dev/null +++ b/docs/registry/contracts/plugin-dev__agent-development.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "plugin-dev:agent-development", + "kind": "external", + "needs": [ + "намерение создать субагента плагина" + ], + "produces": [ + "субагент: frontmatter + when-to-use + системный промпт" + ], + "constraints": [ + "под-навык зонтика plugin-dev (разработка Claude-плагинов)", + "компоненты плагина, НЕ standalone-навыки (skill-creator)" + ], + "preview-form": "outline", + "defaults": [ + "структура агента и условия срабатывания" + ], + "key-decisions": [ + "scope и триггеры агента" + ], + "acceptance-criteria": [ + "агент оформлен по best-practices" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/plugin-dev__command-development.contract.json b/docs/registry/contracts/plugin-dev__command-development.contract.json new file mode 100644 index 0000000..306d33a --- /dev/null +++ b/docs/registry/contracts/plugin-dev__command-development.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "plugin-dev:command-development", + "kind": "external", + "needs": [ + "намерение создать слэш-команду плагина" + ], + "produces": [ + "слэш-команда: YAML-frontmatter + аргументы + bash" + ], + "constraints": [ + "под-навык зонтика plugin-dev (разработка Claude-плагинов)", + "компоненты плагина, НЕ standalone-навыки (skill-creator)" + ], + "preview-form": "outline", + "defaults": [ + "frontmatter и динамические аргументы" + ], + "key-decisions": [ + "аргументы и интерактивность команды" + ], + "acceptance-criteria": [ + "команда работает с аргументами" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/plugin-dev__hook-development.contract.json b/docs/registry/contracts/plugin-dev__hook-development.contract.json new file mode 100644 index 0000000..5ba6dad --- /dev/null +++ b/docs/registry/contracts/plugin-dev__hook-development.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "plugin-dev:hook-development", + "kind": "external", + "needs": [ + "намерение создать хук плагина (PreToolUse/PostToolUse/...)" + ], + "produces": [ + "хук: событие + matcher + скрипт ${CLAUDE_PLUGIN_ROOT}" + ], + "constraints": [ + "под-навык зонтика plugin-dev (разработка Claude-плагинов)", + "компоненты плагина, НЕ standalone-навыки (skill-creator)" + ], + "preview-form": "outline", + "defaults": [ + "событие хука и matcher" + ], + "key-decisions": [ + "какое событие перехватывать" + ], + "acceptance-criteria": [ + "хук срабатывает и не ломает поток" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/plugin-dev__mcp-integration.contract.json b/docs/registry/contracts/plugin-dev__mcp-integration.contract.json new file mode 100644 index 0000000..b765912 --- /dev/null +++ b/docs/registry/contracts/plugin-dev__mcp-integration.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "plugin-dev:mcp-integration", + "kind": "external", + "needs": [ + "намерение подключить MCP-сервер в плагин" + ], + "produces": [ + ".mcp.json: stdio/SSE/HTTP-сервер в плагине" + ], + "constraints": [ + "под-навык зонтика plugin-dev (разработка Claude-плагинов)", + "компоненты плагина, НЕ standalone-навыки (skill-creator)" + ], + "preview-form": "outline", + "defaults": [ + "тип MCP-сервера и конфиг" + ], + "key-decisions": [ + "тип транспорта MCP" + ], + "acceptance-criteria": [ + "MCP-сервер подключён через плагин" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/plugin-dev__plugin-settings.contract.json b/docs/registry/contracts/plugin-dev__plugin-settings.contract.json new file mode 100644 index 0000000..a3c4313 --- /dev/null +++ b/docs/registry/contracts/plugin-dev__plugin-settings.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "plugin-dev:plugin-settings", + "kind": "external", + "needs": [ + "намерение сделать поведение плагина настраиваемым" + ], + "produces": [ + ".local.md настройки плагина (YAML-frontmatter + состояние)" + ], + "constraints": [ + "под-навык зонтика plugin-dev (разработка Claude-плагинов)", + "компоненты плагина, НЕ standalone-навыки (skill-creator)" + ], + "preview-form": "outline", + "defaults": [ + "per-project конфиг плагина" + ], + "key-decisions": [ + "какие настройки выносить" + ], + "acceptance-criteria": [ + "настройки читаются плагином" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/plugin-dev__plugin-structure.contract.json b/docs/registry/contracts/plugin-dev__plugin-structure.contract.json new file mode 100644 index 0000000..7eb585a --- /dev/null +++ b/docs/registry/contracts/plugin-dev__plugin-structure.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "plugin-dev:plugin-structure", + "kind": "external", + "needs": [ + "намерение создать или организовать плагин" + ], + "produces": [ + "структура плагина: plugin.json + раскладка компонентов" + ], + "constraints": [ + "под-навык зонтика plugin-dev (разработка Claude-плагинов)", + "компоненты плагина, НЕ standalone-навыки (skill-creator)" + ], + "preview-form": "outline", + "defaults": [ + "раскладка каталогов и манифест" + ], + "key-decisions": [ + "организация компонентов плагина" + ], + "acceptance-criteria": [ + "структура плагина валидна" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/plugin-dev__skill-development.contract.json b/docs/registry/contracts/plugin-dev__skill-development.contract.json new file mode 100644 index 0000000..e24e6ee --- /dev/null +++ b/docs/registry/contracts/plugin-dev__skill-development.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "plugin-dev:skill-development", + "kind": "external", + "needs": [ + "намерение создать навык внутри плагина" + ], + "produces": [ + "навык плагина: SKILL.md + прогрессивное раскрытие" + ], + "constraints": [ + "под-навык зонтика plugin-dev (разработка Claude-плагинов)", + "компоненты плагина, НЕ standalone-навыки (skill-creator)" + ], + "preview-form": "outline", + "defaults": [ + "структура навыка и прогрессивное раскрытие" + ], + "key-decisions": [ + "scope и описание навыка" + ], + "acceptance-criteria": [ + "навык оформлен и триггерится" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/nodes.yaml b/docs/registry/nodes.yaml index 3ff2d22..b6b9251 100644 --- a/docs/registry/nodes.yaml +++ b/docs/registry/nodes.yaml @@ -1245,14 +1245,70 @@ nodes: attributes: tooling_section: "§4.31 #56" - - id: "#57" - name: "plugin-dev" - slug: "plugin-dev" + - id: "#57a" + name: "agent-development" + slug: "plugin-dev:agent-development" category: "off-phase" subcategory: "authoring-tooling" status: "active" dormancy_reason: null - capabilities: "Плагин для разработки marketplace Claude-плагинов: 8 sub-skills (plugin.json, MCP-интеграция, хуки, документация, публикация) + 3 специализированных агента." + capabilities: "Субагент плагина: frontmatter + when-to-use + системный промпт." + triggers: [] + boundaries: [] + chain_membership: [] + attributes: + tooling_section: "§4.32 #57" + + - id: "#57b" + name: "command-development" + slug: "plugin-dev:command-development" + category: "off-phase" + subcategory: "authoring-tooling" + status: "active" + dormancy_reason: null + capabilities: "Слэш-команда плагина: YAML-frontmatter + аргументы + bash." + triggers: [] + boundaries: [] + chain_membership: [] + attributes: + tooling_section: "§4.32 #57" + + - id: "#57c" + name: "hook-development" + slug: "plugin-dev:hook-development" + category: "off-phase" + subcategory: "authoring-tooling" + status: "active" + dormancy_reason: null + capabilities: "Хук плагина: событие (PreToolUse/PostToolUse/...) + matcher + скрипт ${CLAUDE_PLUGIN_ROOT}." + triggers: [] + boundaries: [] + chain_membership: [] + attributes: + tooling_section: "§4.32 #57" + + - id: "#57d" + name: "mcp-integration" + slug: "plugin-dev:mcp-integration" + category: "off-phase" + subcategory: "authoring-tooling" + status: "active" + dormancy_reason: null + capabilities: "MCP-сервер в плагине: .mcp.json (stdio/SSE/HTTP)." + triggers: [] + boundaries: [] + chain_membership: [] + attributes: + tooling_section: "§4.32 #57" + + - id: "#57e" + name: "plugin-structure" + slug: "plugin-dev:plugin-structure" + category: "off-phase" + subcategory: "authoring-tooling" + status: "active" + dormancy_reason: null + capabilities: "Структура плагина: plugin.json + раскладка компонентов. Входная точка разработки Claude-плагина." triggers: - {keyword: "разработка claude-плагинов", weight: 1.0} - {keyword: "плагин claude code", weight: 1.0} @@ -1264,6 +1320,34 @@ nodes: attributes: tooling_section: "§4.32 #57" + - id: "#57f" + name: "plugin-settings" + slug: "plugin-dev:plugin-settings" + category: "off-phase" + subcategory: "authoring-tooling" + status: "active" + dormancy_reason: null + capabilities: "Настройки плагина: .local.md (YAML-frontmatter + состояние), per-project конфиг." + triggers: [] + boundaries: [] + chain_membership: [] + attributes: + tooling_section: "§4.32 #57" + + - id: "#57g" + name: "skill-development" + slug: "plugin-dev:skill-development" + category: "off-phase" + subcategory: "authoring-tooling" + status: "active" + dormancy_reason: null + capabilities: "Навык плагина: SKILL.md + прогрессивное раскрытие." + triggers: [] + boundaries: [] + chain_membership: [] + attributes: + tooling_section: "§4.32 #57" + - id: "#58" name: "hookify" slug: "hookify" @@ -2083,7 +2167,7 @@ chains: sequence: - "#56" - "#58" - - "#57" + - "plugin-dev:plugin-structure" L12: name: "CLAUDE.md capture chain" diff --git a/docs/registry/splitting-inventory.md b/docs/registry/splitting-inventory.md index 892be30..52d8ac2 100644 --- a/docs/registry/splitting-inventory.md +++ b/docs/registry/splitting-inventory.md @@ -111,8 +111,8 @@ | Комок | Статус | Коммит | |---|---|---| | claude-md-management (2) | ✅ DONE | e98ba1e (pushed) | -| superpowers (14) | ✅ DONE (не закоммичено) | — | -| plugin-dev (7) | ⬜ | | +| superpowers (14) | ✅ DONE | 5a7c5c2 (pushed) | +| plugin-dev (7) | ✅ DONE | этот коммит | | adr-kit (2: adr, judge) | ⬜ | | | hookify (1–2) | ⬜ | | | product-management (8) | ⬜ | | diff --git a/tools/registry-load.test.mjs b/tools/registry-load.test.mjs index 37f9f01..eb527a8 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 (103 nodes: 90 + разворачивание #19 superpowers в 14 под-узлов 18.06.2026)', () => { + it('loads registry (109 nodes: разворачивание #33/#19/#57 комков 18.06.2026)', () => { const r = loadRegistry(); - expect(r.nodes).toHaveLength(103); + expect(r.nodes).toHaveLength(109); expect(r.version).toBe('0.1.0'); }); @@ -46,9 +46,9 @@ describe('registry-load', () => { it('findActiveNodes excludes non-active (nodes.yaml registry)', () => { const r = loadRegistry(); const active = findActiveNodes(r); - // 103 nodes total; #1 historic, #17 dormant, #44/#50/#54/#67/#82/#83 deferred; - // #33→#33a/#33b (+1 active) и #19→#19a..#19n (14 active вместо 1, +13) → 82 + 13 = 95 active - expect(active).toHaveLength(95); + // 109 nodes total; #1 historic, #17 dormant, #44/#50/#54/#67/#82/#83 deferred; + // развёрнуты комки: #33→2, #19→14, #57 plugin-dev→7 (active +1+13+6) → 82+13+6 = 101 active + expect(active).toHaveLength(101); expect(active.map(n => n.id)).toContain('#18'); expect(active.map(n => n.id)).toContain('#19a'); expect(active.map(n => n.id)).not.toContain('#1');