feat: разворачивание комка design-plugin — 7 навыков (роутер-реестр)
Эпик роутер-реестр, спека v2 §2, этап 1. Зонтик design-plugin развёрнут в 7 карточек-навыков + 7 под-узлов #46a..#46g. Контракт раньше описывал лишь 3 из 7 реальных навыков — теперь покрыты все. - 7 карточек: accessibility-review, design-critique, design-handoff, design-system, research-synthesis, user-research, ux-copy - nodes.yaml: узел #46 → #46a..#46g; триггеры (дизайн-критика→critique, ux-копирайт→ux-copy, research synthesis→research-synthesis) - зонтик убран; registry-load.test: 123 узла / 115 active Регрессия (без 5 pre-existing node:test файлов): 4365 passed, exit 0. (askuser-cosmetic-escape-exempt флакает под параллелизмом — изолированно зелёный, не связан.) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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": "" }
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
@@ -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) | ⬜ | |
|
||||
|
||||
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user