@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. It is not screenshot-to-code, and it does not judge quality; that is
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 three 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.",
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: skip the three directions and keep structure and interaction conventional. A new product's brand layer may still carry one signature from the product's own domain (a mark, the type voice, or one brand moment in the flow), never a layout change and never decoration without a job (RX-AS-05)",
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 stays familiar; on a new product, ask the swap question of the brand layer only (RX-UI-12)",
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
- Analyze → Design → Build → Critique → QA → Anti-Slop (final gate) → done
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; do not collapse them into one generic "design" answer:
32
-
33
- | Capability | Answers | Example |
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 = `1. **Understand the request**: who, what task, which product and market (RX-PR-01). Read the
44
- RYUX project context in DESIGN.md, then the product docs (Product docs paths, else PRD.md,
45
- docs/prd*, docs/product*, README), and name what you read. Ask and record direction as in
46
- capabilities/design.md, step 1; assume the rest visibly. DESIGN.md is direction, not evidence.
47
- 2. **Pick the entry point** and read its file.
48
- 3. **Select knowledge**: read the modules the task table lists, and no others.
49
- 4. **Gather evidence**: reference screens through the ryux MCP when connected; otherwise say so.
50
- 5. **Reason**: decide with evidence (RX-PR-09, RX-PR-10); on expressive surfaces, set a point of
51
- view first (RX-UI-12).
52
- 6. **Produce**, then render and inspect what you made.
53
- 7. **Run the gates**: Hard Gates and the Delivery Gate, with honest claims.
54
-
55
- Skip steps that do not apply, but never go from "generate" straight to "done".`;
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
- 1. **Context.** Who, what task, which product and market, and the design intent
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
- 2. **Understand what exists.** When there is a screen, product, or design system already, read its
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
- 3. **Read the modules the task needs** from the task table before deciding anything, for example ux,
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
- 4. **Decide with evidence.** For consequential choices, compare two or three patterns, using
96
- reference screens when the ryux MCP is connected (RX-PR-09), and rate the evidence (RX-PR-10).
97
- On a complex or ambiguous surface (a new flow, a dashboard, a multi-step form), name the primary
98
- task, the one thing that must be seen first, and two or three UX approaches (structure and
99
- interaction model) before any visual work, and choose by the task; a small change skips this.
100
- 5. **Direction.** Write the Design Direction below. On task UI, follow conventions and the design
101
- system; a new product's brand layer may carry one signature from its own domain, never a layout
102
- change (RX-UI-12, Not when). On an expressive surface (hero, landing, onboarding, empty state, brand moment), or when
103
- the brief asks for a new look or more personality, explore on the canvas before choosing (RX-UI-12):
104
- - Render three directions as frames side by side: the main state only, the same content and
105
- sample data in each, each labelled with a name and a one-line concept.
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 (what comes first), layout model, interaction model (where the main action
108
- lives), type class, and colour temperature. The same layout in new colours is the same
109
- direction; replace it.
110
- - Judge them against the brief, not taste: take three to five criteria from the context (the
111
- user's main task, what must be seen first, the brief's character words, conventions that must
112
- hold), rate each direction Strong, Adequate, or Weak with one reason each, and recommend one
113
- with a Decision Receipt. "It looks better" is not a reason.
114
- - Then stop and let the user choose. Build only the chosen one into the full design (states,
115
- widths, Visual Direction, RX-UI-10) and mark the others on the canvas as not chosen. When the
116
- user has already said to pick for them, continue with the recommendation and say so.
117
- 6. **Design in the tool.** Use the Figma MCP or the pen.dev MCP. System first: look for the design
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
- 7. **Render and inspect.** Screenshot what you made, check it against the direction and the rules,
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. List where
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. Generated images and illustrations arrive
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
- 8. **Fact check, then the gate.** Check every product fact on the canvas (tool and command names,
140
- integrations, platforms, pages, numbers) against the brief or the repo (RX-PR-02), then close
141
- with the Delivery Gate, saying what was not designed, such as other widths or states. If you
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 first (capabilities/design.md)
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. Mark every assumption in the code. Give
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 last, after design, build, critique, and QA; it is the final quality gate, never the
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
- : `${a.padEnd(width)}PASS | FAIL | NOT VERIFIED | N/A · one-line reason`);
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.11.0",
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": {