@ryuxdsgn/design-intelligence 2.11.0 → 2.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -7,7 +7,8 @@ export const ANALYZE_BODY = `# RYUX Analyze
|
|
|
7
7
|
> What is actually in this interface?
|
|
8
8
|
|
|
9
9
|
Analyze answers "what exists?" and nothing more: it describes an existing design so that the next
|
|
10
|
-
decision (design, build, or critique) starts from facts
|
|
10
|
+
decision (design, build, or critique) starts from facts; it is the Understand stage of the core
|
|
11
|
+
workflow (SKILL.md) on its own. It is not screenshot-to-code, and it does not judge quality; that is
|
|
11
12
|
\`ryux-critique\`. When the ryux MCP is connected, comparable Indonesian screens back the patterns
|
|
12
13
|
you name (\`search_screens\`, \`get_local_pattern\`).
|
|
13
14
|
|
|
@@ -100,7 +100,7 @@ export const RULES = [
|
|
|
100
100
|
num: 5,
|
|
101
101
|
title: "The product's market first",
|
|
102
102
|
level: "required",
|
|
103
|
-
do: "Start from how users in the product's own market pay, sign in, write addresses, and read money and dates; check a pattern from another market before reusing it. Take the market from the brief or the codebase, and ask when it is unclear.",
|
|
103
|
+
do: "Start from how users in the product's own market pay, sign in, write addresses, and read money and dates; check a pattern from another market before reusing it. Take the market from the brief or the codebase, and ask when it is unclear. When the brief does not name payment methods (or another market-standard capability), show the market's standard set as unconfirmed capabilities, labeled as proposed in Assumptions, rather than leaving them out: a market's table stakes are not \"for later\" (RX-AS-06). Ask when the set would change the flow.",
|
|
104
104
|
dont: "Import one market's checkout, currency, language, or tax rules into a product built for another market.",
|
|
105
105
|
why: "Payment, address, and trust habits differ by market (local payment rails, address formats, messaging channels).",
|
|
106
106
|
basis: "ryux taxonomy of local patterns",
|
|
@@ -370,6 +370,19 @@ export const RULES = [
|
|
|
370
370
|
basis: `Apple HIG playing haptics; pattern also in ${AP}; written for RYUX`,
|
|
371
371
|
check: "review the interaction spec",
|
|
372
372
|
},
|
|
373
|
+
{
|
|
374
|
+
num: 17,
|
|
375
|
+
title: "Choices that change the price sit with the price",
|
|
376
|
+
level: "preferred",
|
|
377
|
+
when: "a screen shows a total that the user's choices change: payment method, insurance, delivery or service tier, add-ons",
|
|
378
|
+
do: "Show each price-changing choice with its current value and its cost inline on the screen that shows the total, so the user sees what they pay for before they confirm.",
|
|
379
|
+
dont: "Hide a choice that changes the price behind a list row or a later screen, or show the total without the choices that make it up.",
|
|
380
|
+
why: "People check a total against the choices behind it; a cost they cannot see next to the total reads as a surprise fee.",
|
|
381
|
+
basis: "ryux run: blind review of a delivery checkout 2026-10-20; NNGroup visual hierarchy; written for RYUX",
|
|
382
|
+
notWhen: "a single fixed price with no choices on the screen",
|
|
383
|
+
tradeoff: "a longer checkout screen; group the choices so the total stays visible",
|
|
384
|
+
check: "review the checkout render: every price-changing choice visible next to the total",
|
|
385
|
+
},
|
|
373
386
|
]),
|
|
374
387
|
...skill("forms", [
|
|
375
388
|
{
|
|
@@ -476,7 +489,7 @@ export const RULES = [
|
|
|
476
489
|
dont: "Ship only the filled, happy-path screen.",
|
|
477
490
|
why: "Users meet the other states often, and they are where trust is lost.",
|
|
478
491
|
basis: "Nielsen heuristics 1 and 9",
|
|
479
|
-
check: "audit_ui",
|
|
492
|
+
check: "write a matrix in the Delivery Gate: each data view or action × loading / empty / error / success → frame name, or \"cannot happen: reason\"; a blank cell is a FAIL; audit_ui when the ryux MCP is connected",
|
|
480
493
|
formerly: ["RX-H-14"],
|
|
481
494
|
},
|
|
482
495
|
{
|
|
@@ -689,7 +702,7 @@ export const RULES = [
|
|
|
689
702
|
num: 10,
|
|
690
703
|
title: "Visual language is chosen, not defaulted",
|
|
691
704
|
level: "preferred",
|
|
692
|
-
do: "Derive the art direction from the brand, the audience, the product context, and reference screens, and write it as a Visual Brief (objective, concept, composition, color, material, lighting, motion, avoid) before designing an expressive surface or generating images, 3D, or motion.",
|
|
705
|
+
do: "Derive the art direction from the brand, the audience, the product context, and reference screens, and write it as a Visual Brief (objective, concept, composition, color, material, lighting, motion, avoid) before designing an expressive surface or generating images, 3D, or motion. For a new product, decide the brand direction before the tokens, task UI included: palette, type, and shape follow from the product's character (fast, warm, trusted, and so on), not from the one accent that passes contrast.",
|
|
693
706
|
dont: "Reach for the category cliché (coins, money rain, floating dashboards, or gradient blobs for fintech; generic 3D characters for any app), or write an image prompt without a brief (role, concept, composition).",
|
|
694
707
|
why: "A default visual language makes the product interchangeable with its competitors.",
|
|
695
708
|
basis: "art direction practice; RX-AS-05 purpose gate",
|
|
@@ -714,12 +727,12 @@ export const RULES = [
|
|
|
714
727
|
num: 12,
|
|
715
728
|
title: "A point of view on expressive surfaces",
|
|
716
729
|
level: "contextual",
|
|
717
|
-
when: "the surface is expressive: a hero, landing page, onboarding, empty state, or brand moment, or the brief asks for a new look or more personality",
|
|
718
|
-
do: "Before designing, make three directions, each with a name, a concept taken from the product's own idea (for a tool about evidence: receipts, citations, marks of proof), and a signature element (type, composition, imagery, or motion). Render them as frames of the main state with the same content, different on at least two structural axes (information order, layout model, interaction model, type class, colour temperature), rate each against criteria taken from the brief, recommend one (RX-PR-09), and let the user choose; then make the rest of the design serve the chosen signature and put its concept in the Visual Brief. When the brief names reference products, read each one before it shapes the direction: the principle you borrow, what stays theirs (colours, mascot, signature features), and where you use it.",
|
|
719
|
-
dont: "Show
|
|
730
|
+
when: "the surface is expressive: a hero, landing page, onboarding, empty state, or brand moment, or the brief asks for a new look or more personality; on a new product's task UI, the brand layer only (see Not when)",
|
|
731
|
+
do: "Before designing, make two or three directions, each with a name, a concept taken from the product's own idea (for a tool about evidence: receipts, citations, marks of proof), and a signature element (type, composition, imagery, or motion). Render them as frames of the main state with the same content, different on at least two structural axes (information order, layout model, interaction model, type class, colour temperature), rate each against criteria taken from the brief, recommend one (RX-PR-09), and let the user choose; then make the rest of the design serve the chosen signature and put its concept in the Visual Brief. When the brief names reference products, read each one before it shapes the direction: the principle you borrow, what stays theirs (colours, mascot, signature features), and where you use it.",
|
|
732
|
+
dont: "Show directions that differ only in colour or copy, choose for the user without showing them, or let the signature be the category's default (for developer tools a terminal or agent-session panel; for SaaS a dashboard screenshot; copy on the left and product on the right), or relabel that default as a concept. A product screen can support the signature, not be it. Turn a named reference into adjectives (\"calm, white, soft\") or copy what belongs to its brand.",
|
|
720
733
|
why: "Users remember a product by its idea; a correct but generic surface is forgotten and could belong to any competitor.",
|
|
721
734
|
basis: "brand and art direction practice; RX-UI-05 layout from content; rendered variants on named axes, compared side by side, chosen by the user: pattern also in emilkowalski/skills (MIT) prototype; written for RYUX",
|
|
722
|
-
notWhen: "task UI such as forms, tables, settings, and checkout, where restraint and convention win:
|
|
735
|
+
notWhen: "task UI such as forms, tables, settings, and checkout, where restraint and convention win: the alternatives come from Explore (capabilities/design.md, step 3) as structure hypotheses, and the conventions that must hold stay fixed. A new product's brand layer must carry one signature from the product's own domain (a mark, the type voice, a colour temperature, or one brand moment in the flow), never a layout change and never decoration without a job (RX-AS-05). Record it in the Delivery Gate UI line",
|
|
723
736
|
tradeoff: "a strong idea takes a decision someone may disagree with; keep it honest and on brand",
|
|
724
737
|
check: "the swap test (RX-AS-09); review",
|
|
725
738
|
},
|
|
@@ -807,6 +820,19 @@ export const RULES = [
|
|
|
807
820
|
basis: `pattern also in ${AS} R-21, R-34; written for RYUX`,
|
|
808
821
|
check: "render each theme; contrast check",
|
|
809
822
|
},
|
|
823
|
+
{
|
|
824
|
+
num: 6,
|
|
825
|
+
title: "The component sheet is a spec",
|
|
826
|
+
level: "preferred",
|
|
827
|
+
gate: "lock",
|
|
828
|
+
do: "Lay out each component as a labeled grid: one row per property, one column per state (default, hover on web, pressed, disabled, loading, error), each cell labeled with its variant name, and one line of usage under each component; no overlapping or clipped variants. Render and inspect the sheet like a screen.",
|
|
829
|
+
dont: "Leave variants scattered, unlabeled, or cut off at the frame edge.",
|
|
830
|
+
why: "Developers build from the component sheet; a variant they cannot find or read gets rebuilt or guessed.",
|
|
831
|
+
basis: "ryux run: blind review of a delivery flow 2026-10-20; design-system practice; written for RYUX",
|
|
832
|
+
notWhen: "a single screen with no shared components",
|
|
833
|
+
tradeoff: "takes time to lay out; pays back at handoff",
|
|
834
|
+
check: "render the sheet; every variant visible and labeled",
|
|
835
|
+
},
|
|
810
836
|
]),
|
|
811
837
|
...skill("accessibility", [
|
|
812
838
|
{
|
|
@@ -1191,12 +1217,12 @@ export const RULES = [
|
|
|
1191
1217
|
num: 9,
|
|
1192
1218
|
title: "Clean is not the same as designed",
|
|
1193
1219
|
level: "contextual",
|
|
1194
|
-
when: "the surface is expressive: a hero, landing page, onboarding, empty state, or brand moment, or the brief asks for a new look or more personality",
|
|
1220
|
+
when: "the surface is expressive: a hero, landing page, onboarding, empty state, or brand moment, or the brief asks for a new look or more personality; on a new product's task UI, the brand layer only (see Not when)",
|
|
1195
1221
|
do: "Run the swap test honestly: replace the name and logo with a competitor's in the same category. If the layout, the visual, and the headline would still work for them, the surface has no point of view yet; give it one (RX-UI-12). Report the answer in the Delivery Gate.",
|
|
1196
1222
|
dont: "Treat a tidy, generic layout as done because it passes every other gate; generic restraint is slop too.",
|
|
1197
1223
|
why: "Removing slop is the floor, not the ceiling; interchangeable design makes the product forgettable.",
|
|
1198
1224
|
basis: "ryux delivery principle; Critique Design Read: specificity",
|
|
1199
|
-
notWhen: "task UI, where familiarity is the point: the structure
|
|
1225
|
+
notWhen: "task UI, where familiarity is the point: keep the structure familiar, but run the swap test on the brand layer (palette, type, surfaces, iconography, map styling) and report the answer. On a new product, \"only the logo would change\" is a FAIL (RX-UI-12)",
|
|
1200
1226
|
tradeoff: "takes a design decision, not only removals",
|
|
1201
1227
|
check: "swap test; review",
|
|
1202
1228
|
},
|
|
@@ -9,7 +9,9 @@ export const CRITIQUE_BODY = `# RYUX Critique
|
|
|
9
9
|
Critique answers "does this interface make sense, and what should change first?" It judges
|
|
10
10
|
decisions; it is not Analyze (what exists) or QA (does the build match its design). It is an
|
|
11
11
|
orchestrator, not a pile of rules: it analyzes the design, reasons with the RYUX knowledge modules,
|
|
12
|
-
pulls evidence from RYUX Knowledge, and reports findings someone can act on.
|
|
12
|
+
pulls evidence from RYUX Knowledge, and reports findings someone can act on. In the core workflow
|
|
13
|
+
(SKILL.md) it runs Understand and the critique half of Build and critique; a finding that
|
|
14
|
+
contradicts a chosen design is a reason to Reconsider it (capabilities/design.md, step 4).
|
|
13
15
|
|
|
14
16
|
\`\`\`
|
|
15
17
|
Critique
|
|
@@ -9,7 +9,7 @@ generator, an anti-slop framework, a design system, or a prompt library.
|
|
|
9
9
|
**Understand before you design. Don't design from imagination when evidence is available.**
|
|
10
10
|
|
|
11
11
|
\`\`\`
|
|
12
|
-
|
|
12
|
+
Understand → Frame → Explore → Evaluate and select → Build and critique → Verify and deliver → done
|
|
13
13
|
\`\`\``;
|
|
14
14
|
export const CORE_CAPABILITIES = `Tell RYUX what you are doing; RYUX decides what it needs to know. Pick the entry point, read its
|
|
15
15
|
file, then read only the knowledge modules the task needs (task table below). Paths are relative
|
|
@@ -28,31 +28,31 @@ design-system, accessibility, responsive, frontend, and anti-slop. Evidence come
|
|
|
28
28
|
project, product data, standards, and the ryux MCP when connected; none is required. Every entry point ends at the quality gates: the Hard
|
|
29
29
|
Gates below and the Delivery Gate, with anti-slop as the last check, never the starting point.
|
|
30
30
|
|
|
31
|
-
Keep the capabilities apart
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
| --- | --- | --- |
|
|
35
|
-
| Analyze | What exists? | "The screen uses a 24px horizontal container." (observed) |
|
|
36
|
-
| Design | What should we do, and why? | "Keep 24px: it matches the existing layout system." |
|
|
37
|
-
| Critique | Is this decision right? | "24px leaves the table too sparse at 1440 for daily use." |
|
|
38
|
-
| QA | Does the build match the intent? | "The build uses 16px where the design says 24px." |`;
|
|
39
|
-
export const CORE_PRINCIPLE = `Do not optimize for visual novelty. Optimize for clarity, usability, consistency, product fit,
|
|
31
|
+
Keep the capabilities apart, never one generic "design" answer: Analyze says what exists, Design what
|
|
32
|
+
to do and why, Critique whether a decision is right, QA whether the build matches the intent.`;
|
|
33
|
+
export const CORE_PRINCIPLE = `Novelty is not a goal; a recognisable brand layer is: familiar structure, distinct surface. Optimize for clarity, usability, consistency, product fit,
|
|
40
34
|
accessibility, and intentional decisions. Understand the context before deciding; separate observed
|
|
41
35
|
facts from assumptions; prefer evidence over aesthetic preference; do not invent requirements;
|
|
42
36
|
explain meaningful decisions with their trade-off; validate before claiming.`;
|
|
43
|
-
export const CORE_WORKFLOW = `
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
37
|
+
export const CORE_WORKFLOW = `One workflow, six stages; each entry point runs the stages it needs.
|
|
38
|
+
|
|
39
|
+
1. **Understand**: who, what task, which product and market (RX-PR-01). Read the RYUX project
|
|
40
|
+
context in DESIGN.md, then the product docs (Product docs paths, else PRD.md, docs/prd*,
|
|
41
|
+
docs/product*, README), and name what you read. Separate facts, assumptions, and unknowns
|
|
42
|
+
(RX-PR-02); ask and record direction as in capabilities/design.md, step 1. DESIGN.md is
|
|
43
|
+
direction, not evidence. Read the entry point's file and only the modules the task table lists.
|
|
44
|
+
2. **Frame**: the user's task, the flow, what must be seen first, the primary action, and three to
|
|
45
|
+
five success criteria from the brief, written before any alternative exists.
|
|
46
|
+
3. **Explore**: on a new or complex surface, two or three alternatives that differ in hypothesis and
|
|
47
|
+
structure, not paint; reference screens through the ryux MCP when connected. A small change skips it.
|
|
48
|
+
4. **Evaluate and select**: rate the alternatives against the Frame criteria with evidence
|
|
49
|
+
(RX-PR-09, RX-PR-10); the user picks; write the Decision Receipt.
|
|
50
|
+
5. **Build and critique**: design or implement the choice, render, inspect, and fix; Reconsider an
|
|
51
|
+
unchosen alternative when a finding contradicts the choice, and say why.
|
|
52
|
+
6. **Verify and deliver**: Hard Gates and the Delivery Gate, with honest claims.
|
|
53
|
+
|
|
54
|
+
Analyze runs 1. Design runs 1-6. Build runs 1, 5, and 6 (2-4 through Design when no design exists).
|
|
55
|
+
Critique runs 1 and the critique half of 5. QA runs 6. Never go from "generate" straight to "done".`;
|
|
56
56
|
export const DESIGN_BODY = `# RYUX Design
|
|
57
57
|
|
|
58
58
|
> What should we design, and why? Design is the bridge between Analyze and Build. It works without
|
|
@@ -60,7 +60,9 @@ export const DESIGN_BODY = `# RYUX Design
|
|
|
60
60
|
|
|
61
61
|
## Workflow
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
The six stages of the core workflow (SKILL.md), as Design runs them.
|
|
64
|
+
|
|
65
|
+
1. **Understand.** Who, what task, which product and market, and the design intent
|
|
64
66
|
(knowledge/product.md). Take it from the prompt, then DESIGN.md, then knowledge and evidence.
|
|
65
67
|
Read the product docs first (the router, step 1). Ask only when a missing answer materially
|
|
66
68
|
affects the user flow, what the product can do, or whether the content is correct, those
|
|
@@ -82,63 +84,85 @@ export const DESIGN_BODY = `# RYUX Design
|
|
|
82
84
|
(\`- **UI direction**: Calm, trustworthy\`). If DESIGN.md or the block does not exist, create it
|
|
83
85
|
with those two fields. Change only those field lines; leave every other line as it is. Your own
|
|
84
86
|
assumptions do not go into DESIGN.md.
|
|
85
|
-
|
|
87
|
+
**What exists.** When there is a screen, product, or design system already, read its
|
|
86
88
|
analysis or run Analyze first (capabilities/analyze.md). Existing screens, components, and any
|
|
87
89
|
screenshot or reference provided are your examples: read them before choosing patterns, take
|
|
88
90
|
their principles, and never copy their facts. Understand before you design. When the task
|
|
89
91
|
redesigns or improves what exists, list what works and keep it; change only what has a named
|
|
90
92
|
problem (RX-UX-10).
|
|
91
|
-
|
|
93
|
+
**Modules.** Read the modules the task needs from the task table before deciding anything, for example ux,
|
|
92
94
|
interaction, forms, and content for a form, or ui and responsive for a layout; for any surface
|
|
93
95
|
with a visual direction, ui and anti-slop as well. The rules shape the first idea, not only the
|
|
94
96
|
review of it.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
-
|
|
105
|
-
|
|
97
|
+
2. **Frame.** Name the primary task, the flow, the one thing that must be seen first, and the
|
|
98
|
+
primary action. Write three to five success criteria from the brief (the user's main task, what
|
|
99
|
+
must be seen first, the brief's character words, conventions that must hold) before any
|
|
100
|
+
alternative exists; Explore and Evaluate use these, and they do not change after you see the
|
|
101
|
+
alternatives. For consequential choices, list the two or three patterns to compare, using
|
|
102
|
+
reference screens when the ryux MCP is connected (RX-PR-09).
|
|
103
|
+
3. **Explore.** On a new screen or flow, a complex or ambiguous surface, or a brief that asks for a
|
|
104
|
+
new look, render two or three alternatives as frames side by side: the main state only, the same
|
|
105
|
+
content and sample data in each, each labelled with a name and a one-line hypothesis.
|
|
106
|
+
- Each alternative is a hypothesis about what this user needs, not a style: on task UI, for
|
|
107
|
+
example, task-first (status and the next action lead), editorial (type and composition carry
|
|
108
|
+
the hierarchy), or expressive-brand (the brand layer leads without slowing the task). Choose
|
|
109
|
+
hypotheses that fit this product; never force three.
|
|
106
110
|
- Make them differ in structure, not paint: every two of them differ on at least two of
|
|
107
|
-
information order
|
|
108
|
-
lives), type class,
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
111
|
+
hierarchy, information order, composition or layout model, navigation or interaction model
|
|
112
|
+
(where the main action lives), and brand expression (type class, colour temperature). The same
|
|
113
|
+
layout in new colours is the same alternative; replace it. Conventions that must hold stay fixed
|
|
114
|
+
in all of them (RX-UX-08).
|
|
115
|
+
- On task UI the brand layer carries one signature from the product's own domain, never a layout
|
|
116
|
+
change for its own sake (RX-UI-12); on an expressive surface the signature can lead.
|
|
117
|
+
- A small change, or a screen inside a fixed design system, skips Explore: say so and continue.
|
|
118
|
+
4. **Evaluate and select.** Rate each alternative against the Frame criteria, Strong, Adequate, or
|
|
119
|
+
Weak with one reason each, rate the evidence (RX-PR-10), and recommend one with a Decision Receipt.
|
|
120
|
+
"It looks better" is not a reason. Then stop and let the user choose. Build only the chosen one
|
|
121
|
+
into the full design (states, widths, Visual Direction, RX-UI-10), write the Design Direction
|
|
122
|
+
below, and mark the others on the canvas as not chosen. When the user has already said to pick for
|
|
123
|
+
them, continue with the recommendation and say so.
|
|
124
|
+
**Modes after the choice.** Refine improves the chosen alternative without losing its hypothesis.
|
|
125
|
+
Reconsider returns to an unchosen alternative when a later finding or new evidence contradicts the
|
|
126
|
+
choice: name the finding, show the alternative again, and let the user decide.
|
|
127
|
+
5. **Design in the tool, then critique it.** Use the Figma MCP or the pen.dev MCP. System first: look for the design
|
|
118
128
|
system that exists (DESIGN.md, a tokens or theme file in the repo, the design file's variables and
|
|
119
129
|
components, a linked library) and build from it. Create only what is missing: variables for color
|
|
120
130
|
roles, spacing, radius, and type sizes and families before the first frame, and components for
|
|
121
131
|
repeated elements (RX-DS-03). Building the system does not replace the states: design every
|
|
122
132
|
state that matters (empty, loading, error, including content that fails to load) and every width
|
|
123
133
|
you claim, and source assets on purpose (RX-UI-13).
|
|
124
|
-
|
|
134
|
+
**Render and inspect.** Screenshot what you made, check it against the direction and the rules,
|
|
125
135
|
fix, and render again (capabilities/qa.md). Count the values still literal (color, spacing,
|
|
126
136
|
radius, type size) and turn each into a variable or name the exception, then run the counts of
|
|
127
137
|
RX-AS-10 (accent hues, grey families, radii, display sizes, icon sets, emoji, invented marks, gradients, labels
|
|
128
138
|
per intent) and report them in the gate. Run the four hierarchy
|
|
129
139
|
checks from Critique (control beside its data, primary action that reads as an action, not a tab, no fact
|
|
130
|
-
twice, grouped by what the user checks together), fix what fails, render again, and check each fix.
|
|
140
|
+
twice, grouped by what the user checks together), fix what fails, render again, and check each fix.
|
|
141
|
+
Weight ranking: list the screen's blocks in order of visual weight (size × contrast × surface) and
|
|
142
|
+
compare it with the priority order from Frame (step 2). If two blocks of different priority render with the
|
|
143
|
+
same heading style and container, change one. On a checkout or order screen, the choice that sets
|
|
144
|
+
the price and the total rank first and second. A width check is a test, not a deliverable: list
|
|
145
|
+
what broke at each width (wrap, truncation, overflow), fix it or record why it is acceptable, and
|
|
146
|
+
render again; RESPONSIVE PASS names the findings and their fixes. List where
|
|
131
147
|
the render differs from the Design Direction (hierarchy, states, widths) and fix or record each one. Check the result against the Liveliness you set, and
|
|
132
148
|
put each prominent or decorative element through the purpose gate (RX-AS-05: purpose,
|
|
133
149
|
contribution, necessity); on calm task UI, deliberate restraint is a valid answer. Then judge the main state as a
|
|
134
150
|
reviewer would, not as a checklist: rate Clarity, Hierarchy, and Specificity from the Design Read
|
|
135
151
|
(capabilities/critique.md), plus Craft (type steps, spacing rhythm, alignment, detail), Strong,
|
|
136
|
-
Adequate, or Weak with one reason each, and fix anything Weak before the gate.
|
|
152
|
+
Adequate, or Weak with one reason each, and fix anything Weak before the gate. Reference check:
|
|
153
|
+
put the main state beside two or three reference apps (named in the brief, from the Reference Read,
|
|
154
|
+
or comparable screens from the ryux MCP) and write, per reference, what holds up and what reads
|
|
155
|
+
weaker or more generic in yours (surface, hierarchy, brand layer, assets); no score. Fix what reads
|
|
156
|
+
weaker for the task, and say so when no reference was available. Generated images and illustrations arrive
|
|
137
157
|
asynchronously: wait until each one has landed and render again before exporting or closing the
|
|
138
158
|
gate. Never finish with an asset still pending.
|
|
139
|
-
|
|
140
|
-
integrations, platforms, pages, numbers) against the brief or the repo (RX-PR-02)
|
|
141
|
-
|
|
159
|
+
6. **Verify and deliver.** Check every product fact on the canvas (tool and command names,
|
|
160
|
+
integrations, platforms, pages, numbers) against the brief or the repo (RX-PR-02). Canvas copy is
|
|
161
|
+
for the team, not for RYUX: annotations, state captions, and labels on the canvas use plain
|
|
162
|
+
language ("Shown while prices load; button disabled"); rule IDs, gate results, and Decision
|
|
163
|
+
Receipts go in the Design Direction or the final message, never in frames meant for review or
|
|
164
|
+
handoff. A handoff frame annotates, in plain language, the interaction behaviour, the truncation
|
|
165
|
+
rule for each text that can overflow, and each component's code name. Then close with the Delivery Gate, saying what was not designed, such as other widths or states. If you
|
|
142
166
|
wrote DESIGN.md, say so in the final message: which file and which fields.
|
|
143
167
|
|
|
144
168
|
${UNTRUSTED_CONTENT}
|
|
@@ -217,12 +241,15 @@ export const BUILD_BODY = `# RYUX Build
|
|
|
217
241
|
|
|
218
242
|
> Implement or change the interface in code, faithfully and in the repo's own stack.
|
|
219
243
|
|
|
244
|
+
Build runs Understand (steps 1-3), Build and critique (4-6), and Verify and deliver (7) of the core
|
|
245
|
+
workflow (SKILL.md); Frame, Explore, and Evaluate happen in Design.
|
|
246
|
+
|
|
220
247
|
1. **Read the repo first**: the stack, components, tokens, conventions, the architecture already
|
|
221
248
|
used (where components, state, pure logic, and data access live), and the test runner
|
|
222
249
|
(knowledge/frontend.md, knowledge/design-system.md). Reuse before creating.
|
|
223
250
|
2. **Find the design source**: the Design Direction, a Figma or pen.dev design, a DESIGN.md, or an
|
|
224
|
-
approved mockup; it is the spec. If there is none, run Design
|
|
225
|
-
instead of inventing one in code.
|
|
251
|
+
approved mockup; it is the spec. If there is none, run Design's Frame, Explore, and Evaluate
|
|
252
|
+
first (capabilities/design.md, steps 2-4) instead of inventing one in code.
|
|
226
253
|
3. **Read the modules the task needs** from the task table: for example accessibility, responsive,
|
|
227
254
|
and edge-cases for any UI, and forms and content for a form. When the build adds motion or
|
|
228
255
|
transitions, read knowledge/ui.md (RX-UI-11) before writing any: how often the surface is seen
|
|
@@ -230,7 +257,8 @@ export const BUILD_BODY = `# RYUX Build
|
|
|
230
257
|
4. **Implement faithfully.** Use semantic elements, existing components, and real data paths.
|
|
231
258
|
Build must not invent business rules, prices, or limits; API behavior or response shapes; or
|
|
232
259
|
data presented as real (RX-FE-02, RX-PR-02). It must not silently change a design decision: a
|
|
233
|
-
change goes back to Design as a new Decision Receipt
|
|
260
|
+
change goes back to Design as a new Decision Receipt, and when the code shows the chosen design
|
|
261
|
+
cannot work (data, platform, performance), say so and send it back to Reconsider. Mark every assumption in the code. Give
|
|
234
262
|
each piece of logic one home in the repo's existing layers, never a copy (RX-FE-13).
|
|
235
263
|
5. **Test what can break.** Unit tests for new or changed pure logic, edge cases included;
|
|
236
264
|
integration tests for critical flows such as checkout, payment, and form submit. Use the
|
|
@@ -272,7 +300,7 @@ Optional sources (the ryux MCP, Figma, a browser, screenshots, other reference l
|
|
|
272
300
|
evidence when connected; none is required.`;
|
|
273
301
|
export const CORE_HONESTY = `Report what was checked, how, and what was not available. Do not claim "pixel perfect",
|
|
274
302
|
"fully accessible", "production ready", "senior-level", or "UX optimized" without evidence. Say
|
|
275
|
-
"Keyboard and focus checked by hand; no automated accessibility test was available" instead.`;
|
|
303
|
+
"Keyboard and focus checked by hand; no automated accessibility test was available" instead. Rule IDs and gate results belong in your report, never on the design itself.`;
|
|
276
304
|
export const CORE_DECISION_RECORD = `For consequential choices (RX-PR-09) and deviations, write **Decision**, **Options** compared, **Evidence**,
|
|
277
305
|
**Trade-off**, and **Choice**. Evidence is Strong (2+ comparable screen_ids), Thin (one, or another context),
|
|
278
306
|
or None (no screen_id: a judgment call). With None on a consequential choice, show options or ask (RX-PR-10).`;
|
|
@@ -486,7 +514,7 @@ focal point, hierarchy, negative space, relation to the copy, and balance (RX-UI
|
|
|
486
514
|
**Expressive surfaces** (hero, landing, onboarding, empty states, brand moments). Restraint keeps
|
|
487
515
|
task UI usable; on expressive surfaces it is only the floor. Work concept, then signature, then
|
|
488
516
|
system:
|
|
489
|
-
1. **Concept**: write three directions first (name, concept, signature), then choose one. The idea
|
|
517
|
+
1. **Concept**: write two or three directions first (name, concept, signature), then choose one. The idea
|
|
490
518
|
comes from the product itself, not from the category: a tool about evidence might use receipts,
|
|
491
519
|
citations, and marks of proof; a calm finance app might use the ledger. The category default
|
|
492
520
|
(a terminal panel for developer tools, a dashboard screenshot for SaaS) is never the signature.
|
|
@@ -649,7 +677,7 @@ Check the stated viewport and the smallest supported width. No horizontal page s
|
|
|
649
677
|
in the repo's own runner. Run them before claiming the work is done.
|
|
650
678
|
|
|
651
679
|
Does not cover: visual decisions (see ryux-ui) or component reuse decisions (see ryux-design-system).`,
|
|
652
|
-
"visual-qa": `Visual QA asks one question: **did the implementation match the intended design?** Whether the
|
|
680
|
+
"visual-qa": `As an entry point, Visual QA is the Verify and deliver stage of the core workflow (SKILL.md) for a build; Design and Build also use its loop in Build and critique. It asks one question: **did the implementation match the intended design?** Whether the
|
|
653
681
|
design itself is good is Critique's question (ryux-critique).
|
|
654
682
|
|
|
655
683
|
**With a reference** (a Figma or pen.dev frame, DESIGN.md, or an approved screenshot):
|
|
@@ -694,7 +722,7 @@ widths) or NOT VERIFIED (why); motion read only from code is NOT VERIFIED.
|
|
|
694
722
|
|
|
695
723
|
**Rank issues by impact**: blocks the task, misleads (wrong numbers, unclear action), adds friction,
|
|
696
724
|
polish.`,
|
|
697
|
-
"anti-slop": `Anti-slop runs
|
|
725
|
+
"anti-slop": `Anti-slop runs in Verify and deliver, after design, build, critique, and QA; it is the final quality gate, never the
|
|
698
726
|
starting point. Anti-slop is the floor, not the ceiling: a tidy, generic surface still fails on expressive
|
|
699
727
|
surfaces (RX-AS-09), and the point of view comes from RX-UI-12. Anti-slop is not a list of banned
|
|
700
728
|
styles. It has three parts.
|
|
@@ -729,6 +757,10 @@ run the purpose gate; keep it when the answer is real, as in the last column.
|
|
|
729
757
|
| Glass, glow, and blur on every layer | decoration without a job that also lowers contrast | one surface treatment with a purpose (RX-AS-05, RX-A11Y-01) | one overlay needs to show what is behind it |
|
|
730
758
|
| Stock teamwork or handshake photos | borrowed people implying endorsement | real people with consent, or no people (RX-AS-02, RX-UI-13) | never as evidence of customers |
|
|
731
759
|
| Cards inside cards, surfaces on surfaces | every nesting level costs a border, a radius, and padding, and the grouping stops meaning anything | one container per real group; separate inside it with spacing or a divider (RX-UI-01) | the inner surface is a distinct object the user acts on, such as a selectable option |
|
|
760
|
+
| Every group boxed in the same white bordered card | the stack of equal boxes flattens priority and reads as a template | one container for the decision the user makes; other groups flat, with a heading and a divider (RX-UI-01) | each box is a selectable option the user compares |
|
|
761
|
+
| One "safe" accent on white with neutral grey everything | the default palette of generated UI; nothing in it is the brand's | colour temperature and surface tone chosen from the product's character (RX-UI-10) | the brand already defines it |
|
|
762
|
+
| A placeholder-grey illustrated map | reads as unfinished, and the map is the product's core visual | a styled map with streets, labels, and the route rendered in the brand palette | wireframe stage, labeled as such |
|
|
763
|
+
| Question headings by default ("Where to?", "What are you sending?") on every step | a generated voice once it repeats; the step's label says less than a plain noun would | a plain label for the field or step; a question only where it is clearest | it is the market's convention, with an observed screen (RX-PR-04) |
|
|
732
764
|
| One record split into a grid of cards | details that are read together (an order, a profile, a transaction) are scattered into equal boxes | one block with labeled rows or a table (RX-UI-05) | each card is a separate item the user compares or acts on |
|
|
733
765
|
| A dashboard of KPI tiles and charts that answer no question | decoration in place of the decision the screen supports | lead with what needs attention and the next action; dense tables where people scan (RX-UI-01, RX-UX-01) | each tile drives a decision and links to its detail |
|
|
734
766
|
| Display-size headings on task UI | a hero-sized title pushes the data and the action below the fold | a heading sized for its rank in the page (RX-UI-01, RX-UI-03) | it is the single message of a marketing or brand page |
|
package/dist/render.js
CHANGED
|
@@ -37,10 +37,12 @@ export function deliveryGateTemplate() {
|
|
|
37
37
|
const lines = [...GATE_AREAS, "FINAL"].map((a) => a === "FINAL"
|
|
38
38
|
? `${a.padEnd(width)}PASS | FAIL | NOT VERIFIED`
|
|
39
39
|
: a === "UI"
|
|
40
|
-
? `${a.padEnd(width)}PASS | FAIL | NOT VERIFIED | N/A · one-line reason · point of view: <concept> | task UI
|
|
40
|
+
? `${a.padEnd(width)}PASS | FAIL | NOT VERIFIED | N/A · one-line reason · point of view: <concept> | task UI, signature: <signature>`
|
|
41
41
|
: a === "PRODUCT"
|
|
42
42
|
? `${a.padEnd(width)}PASS | FAIL | NOT VERIFIED | N/A · one-line reason · evidence Strong | Thin | None`
|
|
43
|
-
:
|
|
43
|
+
: a === "EDGE CASES"
|
|
44
|
+
? `${a.padEnd(width)}PASS | FAIL | NOT VERIFIED | N/A · one-line reason · then the view × state matrix (RX-EC-01)`
|
|
45
|
+
: `${a.padEnd(width)}PASS | FAIL | NOT VERIFIED | N/A · one-line reason`);
|
|
44
46
|
return `\`\`\`\n${lines.join("\n")}\n\`\`\``;
|
|
45
47
|
}
|
|
46
48
|
function routerBody() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ryuxdsgn/design-intelligence",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.13.0",
|
|
4
4
|
"description": "RYUX: design intelligence for AI agents and designers. One skill, five entry points: Analyze, Design, Build, Critique, and QA, for Claude Code, Codex, Cursor, Gemini CLI, OpenCode, Cline, Copilot, and more.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|