diff --git a/docs/registry/contracts/design-plugin.contract.json b/docs/registry/contracts/design-plugin.contract.json deleted file mode 100644 index 47707c6..0000000 --- a/docs/registry/contracts/design-plugin.contract.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "skill": "design-plugin", - "kind": "external", - "needs": ["дизайн-вопрос pre-code (критика / UX-копирайт / research synthesis)"], - "produces": ["дизайн-критика / UX-копирайт / research synthesis"], - "constraints": ["pre-code; a11y-принципы дизайн-уровня", "технический a11y SoT — Pa11y (#9)"], - "preview-form": "none", - "defaults": ["до написания кода"], - "key-decisions": ["критика, копирайт или synthesis"], - "acceptance-criteria": ["дизайн-замечания/копирайт учтены до кода"], - "source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" } -} diff --git a/docs/registry/contracts/design-plugin__accessibility-review.contract.json b/docs/registry/contracts/design-plugin__accessibility-review.contract.json new file mode 100644 index 0000000..dfb53b5 --- /dev/null +++ b/docs/registry/contracts/design-plugin__accessibility-review.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "design-plugin:accessibility-review", + "kind": "external", + "needs": [ + "дизайн/страница для аудита доступности" + ], + "produces": [ + "WCAG 2.1 AA аудит: контраст, клавиатура, тач-таргеты, screen reader" + ], + "constraints": [ + "под-навык зонтика design-plugin (дизайн до кода)", + "a11y-принципы дизайн-уровня; технический a11y SoT — Pa11y #9" + ], + "preview-form": "outline", + "defaults": [ + "accessibility-review — дизайн-уровень a11y (не Pa11y)" + ], + "key-decisions": [ + "какие WCAG-критерии под риском" + ], + "acceptance-criteria": [ + "аудит a11y покрывает ключевые критерии" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/design-plugin__design-critique.contract.json b/docs/registry/contracts/design-plugin__design-critique.contract.json new file mode 100644 index 0000000..c9f4010 --- /dev/null +++ b/docs/registry/contracts/design-plugin__design-critique.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "design-plugin:design-critique", + "kind": "external", + "needs": [ + "макет/экран для структурной обратной связи" + ], + "produces": [ + "критика: usability, иерархия, консистентность" + ], + "constraints": [ + "под-навык зонтика design-plugin (дизайн до кода)", + "a11y-принципы дизайн-уровня; технический a11y SoT — Pa11y #9" + ], + "preview-form": "outline", + "defaults": [ + "design-critique — структурный разбор дизайна" + ], + "key-decisions": [ + "главные проблемы юзабилити" + ], + "acceptance-criteria": [ + "критика структурна и actionable" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/design-plugin__design-handoff.contract.json b/docs/registry/contracts/design-plugin__design-handoff.contract.json new file mode 100644 index 0000000..0604ebf --- /dev/null +++ b/docs/registry/contracts/design-plugin__design-handoff.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "design-plugin:design-handoff", + "kind": "external", + "needs": [ + "готовый дизайн для передачи в разработку" + ], + "produces": [ + "спека хэндоффа: токены, props, состояния, breakpoints, edge-cases" + ], + "constraints": [ + "под-навык зонтика design-plugin (дизайн до кода)", + "a11y-принципы дизайн-уровня; технический a11y SoT — Pa11y #9" + ], + "preview-form": "outline", + "defaults": [ + "design-handoff — dev-спека из дизайна" + ], + "key-decisions": [ + "какие состояния и edge-cases" + ], + "acceptance-criteria": [ + "хэндофф покрывает layout/токены/состояния" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/design-plugin__design-system.contract.json b/docs/registry/contracts/design-plugin__design-system.contract.json new file mode 100644 index 0000000..9c11ccc --- /dev/null +++ b/docs/registry/contracts/design-plugin__design-system.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "design-plugin:design-system", + "kind": "external", + "needs": [ + "дизайн-система для аудита/документации/расширения" + ], + "produces": [ + "аудит консистентности / документация компонента / новый паттерн" + ], + "constraints": [ + "под-навык зонтика design-plugin (дизайн до кода)", + "a11y-принципы дизайн-уровня; технический a11y SoT — Pa11y #9" + ], + "preview-form": "outline", + "defaults": [ + "design-system — ведение дизайн-системы" + ], + "key-decisions": [ + "naming и hardcoded-значения" + ], + "acceptance-criteria": [ + "система консистентна и задокументирована" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/design-plugin__research-synthesis.contract.json b/docs/registry/contracts/design-plugin__research-synthesis.contract.json new file mode 100644 index 0000000..09e4b46 --- /dev/null +++ b/docs/registry/contracts/design-plugin__research-synthesis.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "design-plugin:research-synthesis", + "kind": "external", + "needs": [ + "сырой research (интервью/тесты/тикеты/NPS)" + ], + "produces": [ + "темы, инсайты, сегменты, приоритеты" + ], + "constraints": [ + "под-навык зонтика design-plugin (дизайн до кода)", + "a11y-принципы дизайн-уровня; технический a11y SoT — Pa11y #9" + ], + "preview-form": "outline", + "defaults": [ + "research-synthesis — дистилляция research в паттерны" + ], + "key-decisions": [ + "доминирующие темы и сегменты" + ], + "acceptance-criteria": [ + "research сведён в приоритезированные инсайты" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/design-plugin__user-research.contract.json b/docs/registry/contracts/design-plugin__user-research.contract.json new file mode 100644 index 0000000..ee93471 --- /dev/null +++ b/docs/registry/contracts/design-plugin__user-research.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "design-plugin:user-research", + "kind": "external", + "needs": [ + "потребность понять пользователей" + ], + "produces": [ + "план/гайд интервью, юзабилити-тест, опрос" + ], + "constraints": [ + "под-навык зонтика design-plugin (дизайн до кода)", + "a11y-принципы дизайн-уровня; технический a11y SoT — Pa11y #9" + ], + "preview-form": "outline", + "defaults": [ + "user-research — планирование и проведение исследований" + ], + "key-decisions": [ + "метод и вопросы исследования" + ], + "acceptance-criteria": [ + "research спланирован и синтезируем" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/contracts/design-plugin__ux-copy.contract.json b/docs/registry/contracts/design-plugin__ux-copy.contract.json new file mode 100644 index 0000000..7bbeaee --- /dev/null +++ b/docs/registry/contracts/design-plugin__ux-copy.contract.json @@ -0,0 +1,29 @@ +{ + "skill": "design-plugin:ux-copy", + "kind": "external", + "needs": [ + "элемент интерфейса, требующий текста" + ], + "produces": [ + "UX-копирайт: microcopy, ошибки, пустые состояния, CTA" + ], + "constraints": [ + "под-навык зонтика design-plugin (дизайн до кода)", + "a11y-принципы дизайн-уровня; технический a11y SoT — Pa11y #9" + ], + "preview-form": "outline", + "defaults": [ + "ux-copy — микротексты интерфейса" + ], + "key-decisions": [ + "тон и формулировка под контекст" + ], + "acceptance-criteria": [ + "копирайт ясен и соответствует тону" + ], + "source": { + "version": "n/a", + "hash": "0000000000000000000000000000000000000000000000000000000000000000", + "path": "" + } +} diff --git a/docs/registry/nodes.yaml b/docs/registry/nodes.yaml index 3d06593..9197b6c 100644 --- a/docs/registry/nodes.yaml +++ b/docs/registry/nodes.yaml @@ -1147,18 +1147,15 @@ nodes: tooling_section: "§4.20 #45" install: "npx -y mcp-universal-icons (в .mcp.json)" - - id: "#46" - name: "Design plugin" - slug: "design-plugin" + - id: "#46a" + name: "accessibility-review" + slug: "design-plugin:accessibility-review" category: "off-phase" subcategory: "design-tooling" status: "active" dormancy_reason: null - capabilities: "Плагин для дизайн-критики, UX-копирайтинга и research synthesis на стадии до написания кода; a11y-принципы дизайн-уровня (технический SoT остаётся за Pa11y #9)." - triggers: - - {keyword: "дизайн-критика", weight: 1.0} - - {keyword: "ux-копирайт", weight: 1.0} - - {keyword: "research synthesis", weight: 1.0} + capabilities: "WCAG 2.1 AA аудит дизайна (контраст, клавиатура, тач-таргеты, screen reader). Дизайн-уровень; технический a11y SoT — Pa11y #9." + triggers: [] boundaries: - {relation: "pre-code; Pa11y остаётся a11y SoT"} chain_membership: [] @@ -1166,6 +1163,93 @@ nodes: tooling_section: "§4.21 #46" install: "claude plugin install design@knowledge-work-plugins" + - id: "#46b" + name: "design-critique" + slug: "design-plugin:design-critique" + category: "off-phase" + subcategory: "design-tooling" + status: "active" + dormancy_reason: null + capabilities: "Структурная критика дизайна: usability, иерархия, консистентность." + triggers: + - {keyword: "дизайн-критика", weight: 1.0} + boundaries: [] + chain_membership: [] + attributes: + tooling_section: "§4.21 #46" + + - id: "#46c" + name: "design-handoff" + slug: "design-plugin:design-handoff" + category: "off-phase" + subcategory: "design-tooling" + status: "active" + dormancy_reason: null + capabilities: "Dev-спека из дизайна: токены, props, состояния, breakpoints, edge-cases, анимация." + triggers: [] + boundaries: [] + chain_membership: [] + attributes: + tooling_section: "§4.21 #46" + + - id: "#46d" + name: "design-system" + slug: "design-plugin:design-system" + category: "off-phase" + subcategory: "design-tooling" + status: "active" + dormancy_reason: null + capabilities: "Аудит/документация/расширение дизайн-системы (naming, hardcoded-значения, новый паттерн)." + triggers: [] + boundaries: [] + chain_membership: [] + attributes: + tooling_section: "§4.21 #46" + + - id: "#46e" + name: "design-research-synthesis" + slug: "design-plugin:research-synthesis" + category: "off-phase" + subcategory: "design-tooling" + status: "active" + dormancy_reason: null + capabilities: "Синтез research (интервью/тесты/тикеты/NPS) в темы, инсайты, сегменты, приоритеты." + triggers: + - {keyword: "research synthesis", weight: 1.0} + boundaries: [] + chain_membership: [] + attributes: + tooling_section: "§4.21 #46" + + - id: "#46f" + name: "user-research" + slug: "design-plugin:user-research" + category: "off-phase" + subcategory: "design-tooling" + status: "active" + dormancy_reason: null + capabilities: "Планирование и проведение user research: гайд интервью, юзабилити-тест, опрос." + triggers: [] + boundaries: [] + chain_membership: [] + attributes: + tooling_section: "§4.21 #46" + + - id: "#46g" + name: "ux-copy" + slug: "design-plugin:ux-copy" + category: "off-phase" + subcategory: "design-tooling" + status: "active" + dormancy_reason: null + capabilities: "UX-копирайт: microcopy, ошибки, пустые состояния, CTA." + triggers: + - {keyword: "ux-копирайт", weight: 1.0} + boundaries: [] + chain_membership: [] + attributes: + tooling_section: "§4.21 #46" + - id: "#47" name: "openapi-mcp-server" slug: "openapi-mcp" diff --git a/docs/registry/splitting-inventory.md b/docs/registry/splitting-inventory.md index 7ad2cb4..50ec261 100644 --- a/docs/registry/splitting-inventory.md +++ b/docs/registry/splitting-inventory.md @@ -115,8 +115,8 @@ | plugin-dev (7) | ✅ DONE | ded5372 (pushed) | | adr-kit (2: adr, judge) | ✅ DONE | f01f5b8 (pushed) | | hookify (1–2) | ⏸ развилка владельцу (slug hookify:hookify кривой) | | -| product-management (8) | ✅ DONE | этот коммит | -| design-plugin (7) | ⬜ | | +| product-management (8) | ✅ DONE | 0258b9d (pushed) | +| design-plugin (7) | ✅ DONE | этот коммит | | marketing-plugin (8) | ⬜ | | | operations (8) | ⬜ | | | finance-plugin (7–8) | ⬜ | | diff --git a/tools/registry-load.test.mjs b/tools/registry-load.test.mjs index cad933e..9fa154e 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 (117 nodes: разворачивание #33/#19/#57/#36/#42 комков 18.06.2026)', () => { + it('loads registry (123 nodes: разворачивание #33/#19/#57/#36/#42/#46 комков 18.06.2026)', () => { const r = loadRegistry(); - expect(r.nodes).toHaveLength(117); + expect(r.nodes).toHaveLength(123); 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); - // 117 nodes total; #1 historic, #17 dormant, #44/#50/#54/#67/#82/#83 deferred; - // развёрнуты комки: #33→2, #19→14, #57→7, #36→2, #42 pm→8 (active +1+13+6+1+7) → 109 active - expect(active).toHaveLength(109); + // 123 nodes total; #1 historic, #17 dormant, #44/#50/#54/#67/#82/#83 deferred; + // развёрнуты: #33→2, #19→14, #57→7, #36→2, #42→8, #46 design→7 (active +...+6) → 115 active + expect(active).toHaveLength(115); 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');