feat: разворачивание комка ui-ux-pro-max — 7 навыков (роутер-реестр)

Эпик роутер-реестр, спека v2 §2, этап 1. Решение владельца 19.06 (путь 2):
зонтик ui-ux-pro-max развёрнут в 7 карточек-навыков + 7 под-узлов #31a..#31g.
Роль сохранена в каждой карточке: материал/решение по UI → стек Vue+Vuetify
(R6.0), финальный код — Frontend Design #30.

- 7 карточек: banner-design, brand, design, design-system, slides, ui-styling,
  ui-ux-pro-max (master)
- nodes.yaml: узел #31 → #31a..#31g; мастер #31g держит конфликт-треугольник
  (frontend-design ↔ 21st-magic); обратные ссылки у #30/#32 перенаправлены на
  ui-ux-pro-max:ui-ux-pro-max → симметрия конфликтов сохранена (m3e зелёный)
- зонтик убран; registry-load.test: 153 узла / 145 active
- hookify оставлен одной карточкой (решение владельца)

Правка PSR (роль UPM: материал → решатель-с-ограничением) — отдельным шагом.

Регрессия (без 5 pre-existing node:test файлов): 4365 passed, exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-06-19 04:35:14 +03:00
parent 0541369e49
commit 524bcfd05f
11 changed files with 302 additions and 27 deletions
@@ -1,12 +0,0 @@
{
"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": "" }
}
@@ -0,0 +1,29 @@
{
"skill": "ui-ux-pro-max:banner-design",
"kind": "external",
"needs": [
"задача дизайна баннера"
],
"produces": [
"дизайн баннера (стек → Vue+Vuetify; код — Frontend Design)"
],
"constraints": [
"UI-навык пула ui-ux-pro-max",
"стек приводить к Vue 3 + Vuetify 3 (PSR R6.0); финальный код — Frontend Design #30; не параллельно с FD"
],
"preview-form": "outline",
"defaults": [
"banner-design — баннеры из пула UPM"
],
"key-decisions": [
"формат и стиль баннера"
],
"acceptance-criteria": [
"баннер согласован, стек приведён к Vue"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,29 @@
{
"skill": "ui-ux-pro-max:brand",
"kind": "external",
"needs": [
"задача бренд-системы UI"
],
"produces": [
"бренд-система: палитра, типографика (приводится к нашему стеку)"
],
"constraints": [
"UI-навык пула ui-ux-pro-max",
"стек приводить к Vue 3 + Vuetify 3 (PSR R6.0); финальный код — Frontend Design #30; не параллельно с FD"
],
"preview-form": "outline",
"defaults": [
"brand — бренд-система из пула UPM"
],
"key-decisions": [
"палитра и типографика"
],
"acceptance-criteria": [
"бренд-система согласована"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,29 @@
{
"skill": "ui-ux-pro-max:design-system",
"kind": "external",
"needs": [
"задача дизайн-системы (токены/компоненты)"
],
"produces": [
"токены и компоненты дизайн-системы (под Vue+Vuetify)"
],
"constraints": [
"UI-навык пула ui-ux-pro-max",
"стек приводить к Vue 3 + Vuetify 3 (PSR R6.0); финальный код — Frontend Design #30; не параллельно с FD"
],
"preview-form": "outline",
"defaults": [
"design-system — токены и компоненты из пула UPM"
],
"key-decisions": [
"токены и состав компонентов"
],
"acceptance-criteria": [
"дизайн-система под наш стек"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,29 @@
{
"skill": "ui-ux-pro-max:design",
"kind": "external",
"needs": [
"унифицированная UI-дизайн-задача"
],
"produces": [
"UI-дизайн (50+ стилей; стек → Vue+Vuetify; код — Frontend Design)"
],
"constraints": [
"UI-навык пула ui-ux-pro-max",
"стек приводить к Vue 3 + Vuetify 3 (PSR R6.0); финальный код — Frontend Design #30; не параллельно с FD"
],
"preview-form": "outline",
"defaults": [
"design — унифицированный дизайн из пула UPM"
],
"key-decisions": [
"стиль и продукт-тип"
],
"acceptance-criteria": [
"дизайн согласован, стек приведён к Vue"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,29 @@
{
"skill": "ui-ux-pro-max:slides",
"kind": "external",
"needs": [
"задача стратегической презентации"
],
"produces": [
"стратегические слайды/презентация"
],
"constraints": [
"UI-навык пула ui-ux-pro-max",
"стек приводить к Vue 3 + Vuetify 3 (PSR R6.0); финальный код — Frontend Design #30; не параллельно с FD"
],
"preview-form": "outline",
"defaults": [
"slides — презентации из пула UPM"
],
"key-decisions": [
"структура и нарратив слайдов"
],
"acceptance-criteria": [
"презентация согласована"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,29 @@
{
"skill": "ui-ux-pro-max:ui-styling",
"kind": "external",
"needs": [
"задача стилизации UI"
],
"produces": [
"стилизация UI (источник shadcn/Tailwind → ОБЯЗАТЕЛЬНО приводится к Vue+Vuetify)"
],
"constraints": [
"UI-навык пула ui-ux-pro-max",
"стек приводить к Vue 3 + Vuetify 3 (PSR R6.0); финальный код — Frontend Design #30; не параллельно с FD"
],
"preview-form": "outline",
"defaults": [
"ui-styling — стилизация из пула UPM, фильтр стека R6.0"
],
"key-decisions": [
"как срезать React/Tailwind в Vue+Vuetify"
],
"acceptance-criteria": [
"стилизация переведена в наш стек"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,29 @@
{
"skill": "ui-ux-pro-max:ui-ux-pro-max",
"kind": "external",
"needs": [
"широкая UI/UX-задача (выбор стиля/палитры/чарта)"
],
"produces": [
"UI/UX-решение: 50+ стилей, 161 палитра, 57 пар шрифтов, 25 типов чартов (стек → Vue+Vuetify)"
],
"constraints": [
"UI-навык пула ui-ux-pro-max",
"стек приводить к Vue 3 + Vuetify 3 (PSR R6.0); финальный код — Frontend Design #30; не параллельно с FD"
],
"preview-form": "outline",
"defaults": [
"ui-ux-pro-max — мастер-навык пула UPM"
],
"key-decisions": [
"какой стиль/палитра/чарт под задачу"
],
"acceptance-criteria": [
"решение согласовано, стек приведён к Vue, код — Frontend Design"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
+92 -8
View File
@@ -720,24 +720,108 @@ nodes:
attributes:
tooling_section: "§4.4 #30"
install: "enabledPlugins.frontend-design@anthropics-claude-plugins в ~/.claude/settings.json"
conflicts_with: ["ui-ux-pro-max", "21st-magic"]
conflicts_with: ["ui-ux-pro-max:ui-ux-pro-max", "21st-magic"]
- id: "#31"
name: "UI UX Pro Max"
slug: "ui-ux-pro-max"
- id: "#31a"
name: "uiux-banner-design"
slug: "ui-ux-pro-max:banner-design"
category: "off-phase"
subcategory: "UI-pool"
status: "active"
dormancy_reason: null
capabilities: "Резервная библиотека UI-материалов: стили, цветовые палитры, UX-гайдлайны, паттерны графиков и визуализаций; активируется только через PSR_v1 R14.3 pipeline как материал, не решатель."
capabilities: "Дизайн баннеров из пула UPM (стек → Vue+Vuetify; финальный код — Frontend Design)."
triggers: []
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.5 #31"
- id: "#31b"
name: "uiux-brand"
slug: "ui-ux-pro-max:brand"
category: "off-phase"
subcategory: "UI-pool"
status: "active"
dormancy_reason: null
capabilities: "Бренд-система UI: палитра, типографика (приводится к нашему стеку)."
triggers: []
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.5 #31"
- id: "#31c"
name: "uiux-design"
slug: "ui-ux-pro-max:design"
category: "off-phase"
subcategory: "UI-pool"
status: "active"
dormancy_reason: null
capabilities: "Унифицированный UI-дизайн (50+ стилей; стек → Vue+Vuetify; код — Frontend Design)."
triggers: []
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.5 #31"
- id: "#31d"
name: "uiux-design-system"
slug: "ui-ux-pro-max:design-system"
category: "off-phase"
subcategory: "UI-pool"
status: "active"
dormancy_reason: null
capabilities: "Токены и компоненты дизайн-системы (под Vue+Vuetify)."
triggers: []
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.5 #31"
- id: "#31e"
name: "uiux-slides"
slug: "ui-ux-pro-max:slides"
category: "off-phase"
subcategory: "UI-pool"
status: "active"
dormancy_reason: null
capabilities: "Стратегические презентации/слайды из пула UPM."
triggers: []
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.5 #31"
- id: "#31f"
name: "uiux-ui-styling"
slug: "ui-ux-pro-max:ui-styling"
category: "off-phase"
subcategory: "UI-pool"
status: "active"
dormancy_reason: null
capabilities: "Стилизация UI (источник shadcn/Tailwind ОБЯЗАТЕЛЬНО приводится к Vue+Vuetify, фильтр стека R6.0)."
triggers:
- {keyword: "стили", weight: 1.0}
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.5 #31"
- id: "#31g"
name: "ui-ux-pro-max-master"
slug: "ui-ux-pro-max:ui-ux-pro-max"
category: "off-phase"
subcategory: "UI-pool"
status: "active"
dormancy_reason: null
capabilities: "Мастер-навык пула UPM: 50+ стилей, 161 палитра, 57 пар шрифтов, 25 типов чартов; стек → Vue+Vuetify, финальный код — Frontend Design."
triggers:
- {keyword: "резерв ui", weight: 1.0}
- {keyword: "стили", weight: 1.0}
- {keyword: "палитры", weight: 1.0}
- {keyword: "графики", weight: 1.0}
- {keyword: "ux-гайдлайны", weight: 1.0}
boundaries:
- {relation: "PSR_v1 R14.3 pipeline"}
- {relation: "PSR_v1 R14.3 pipeline; стек R6.0; решатель кода — Frontend Design"}
chain_membership: []
attributes:
tooling_section: "§4.5 #31"
@@ -758,7 +842,7 @@ nodes:
chain_membership: []
attributes:
tooling_section: "§4.6 #32"
conflicts_with: ["frontend-design", "ui-ux-pro-max"]
conflicts_with: ["frontend-design", "ui-ux-pro-max:ui-ux-pro-max"]
- id: "#33a"
name: "claude-md-improver"
+2 -2
View File
@@ -121,8 +121,8 @@
| operations (9: +process-doc узел) | ✅ DONE | committed (push deferred) |
| finance-plugin (8, journal ×2 оставлены) | ✅ DONE | committed (push deferred) |
| brand-voice (3) | ✅ DONE | этот коммит (push deferred) |
| hookify (12) | ⏸ развилка владельцу | — |
| ui-ux-pro-max (7, +правка PSR) | ⏸ развилка владельцу | — |
| hookify (12) | ✅ оставлен одной карточкой (решение владельца 19.06 — slug hookify:hookify кривой) | — |
| ui-ux-pro-max (7) | ✅ реестр DONE (master #31g держит конфликт-треугольник; PSR-правка отдельным шагом) | этот коммит |
### Доп-каскады, выявленные на superpowers (учесть для крупных комков)
+5 -5
View File
@@ -5,9 +5,9 @@ import { loadRegistry, clearCache, findByClassification, findByKeyword, findActi
describe('registry-load', () => {
beforeEach(() => clearCache());
it('loads registry (147 nodes: разворачивание 9 комков #33/#19/#57/#36/#42/#46/#74/#51/#61/#76 18.06.2026)', () => {
it('loads registry (153 nodes: разворачивание 11 комков (+#31 ui-ux-pro-max) 18-19.06.2026)', () => {
const r = loadRegistry();
expect(r.nodes).toHaveLength(147);
expect(r.nodes).toHaveLength(153);
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);
// 147 nodes total; #1 historic, #17 dormant, #44/#50/#54/#67/#82/#83 deferred;
// развёрнуты: ...,#61→8,#76 brand-voice→3 (+2) → 139 active
expect(active).toHaveLength(139);
// 153 nodes total; #1 historic, #17 dormant, #44/#50/#54/#67/#82/#83 deferred;
// развёрнуты: ...,#76→3,#31 ui-ux-pro-max→7 (+6) → 145 active
expect(active).toHaveLength(145);
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');