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:
@@ -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": ""
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
@@ -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 (1–2) | ⏸ развилка владельцу | — |
|
||||
| ui-ux-pro-max (7, +правка PSR) | ⏸ развилка владельцу | — |
|
||||
| hookify (1–2) | ✅ оставлен одной карточкой (решение владельца 19.06 — slug hookify:hookify кривой) | — |
|
||||
| ui-ux-pro-max (7) | ✅ реестр DONE (master #31g держит конфликт-треугольник; PSR-правка отдельным шагом) | этот коммит |
|
||||
|
||||
### Доп-каскады, выявленные на superpowers (учесть для крупных комков)
|
||||
|
||||
|
||||
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user