@ryuxdsgn/design-intelligence 2.11.0 → 2.12.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.
- package/dist/intelligence/content.js +31 -5
- package/dist/intelligence/guides.js +24 -6
- package/dist/render.js +1 -1
- package/package.json +1 -1
|
@@ -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",
|
|
@@ -719,7 +732,7 @@ export const RULES = [
|
|
|
719
732
|
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.",
|
|
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
|
|
735
|
+
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 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
|
{
|
|
@@ -1196,7 +1222,7 @@ export const RULES = [
|
|
|
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
|
},
|
|
@@ -36,7 +36,7 @@ Keep the capabilities apart; do not collapse them into one generic "design" answ
|
|
|
36
36
|
| Design | What should we do, and why? | "Keep 24px: it matches the existing layout system." |
|
|
37
37
|
| Critique | Is this decision right? | "24px leaves the table too sparse at 1440 for daily use." |
|
|
38
38
|
| QA | Does the build match the intent? | "The build uses 16px where the design says 24px." |`;
|
|
39
|
-
export const CORE_PRINCIPLE = `
|
|
39
|
+
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
40
|
accessibility, and intentional decisions. Understand the context before deciding; separate observed
|
|
41
41
|
facts from assumptions; prefer evidence over aesthetic preference; do not invent requirements;
|
|
42
42
|
explain meaningful decisions with their trade-off; validate before claiming.`;
|
|
@@ -127,18 +127,32 @@ export const DESIGN_BODY = `# RYUX Design
|
|
|
127
127
|
RX-AS-10 (accent hues, grey families, radii, display sizes, icon sets, emoji, invented marks, gradients, labels
|
|
128
128
|
per intent) and report them in the gate. Run the four hierarchy
|
|
129
129
|
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.
|
|
130
|
+
twice, grouped by what the user checks together), fix what fails, render again, and check each fix.
|
|
131
|
+
Weight ranking: list the screen's blocks in order of visual weight (size × contrast × surface) and
|
|
132
|
+
compare it with the priority order from step 4. If two blocks of different priority render with the
|
|
133
|
+
same heading style and container, change one. On a checkout or order screen, the choice that sets
|
|
134
|
+
the price and the total rank first and second. A width check is a test, not a deliverable: list
|
|
135
|
+
what broke at each width (wrap, truncation, overflow), fix it or record why it is acceptable, and
|
|
136
|
+
render again; RESPONSIVE PASS names the findings and their fixes. List where
|
|
131
137
|
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
138
|
put each prominent or decorative element through the purpose gate (RX-AS-05: purpose,
|
|
133
139
|
contribution, necessity); on calm task UI, deliberate restraint is a valid answer. Then judge the main state as a
|
|
134
140
|
reviewer would, not as a checklist: rate Clarity, Hierarchy, and Specificity from the Design Read
|
|
135
141
|
(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.
|
|
142
|
+
Adequate, or Weak with one reason each, and fix anything Weak before the gate. Reference check:
|
|
143
|
+
put the main state beside two or three reference apps (named in the brief, from the Reference Read,
|
|
144
|
+
or comparable screens from the ryux MCP) and write, per reference, what holds up and what reads
|
|
145
|
+
weaker or more generic in yours (surface, hierarchy, brand layer, assets); no score. Fix what reads
|
|
146
|
+
weaker for the task, and say so when no reference was available. Generated images and illustrations arrive
|
|
137
147
|
asynchronously: wait until each one has landed and render again before exporting or closing the
|
|
138
148
|
gate. Never finish with an asset still pending.
|
|
139
149
|
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)
|
|
141
|
-
|
|
150
|
+
integrations, platforms, pages, numbers) against the brief or the repo (RX-PR-02). Canvas copy is
|
|
151
|
+
for the team, not for RYUX: annotations, state captions, and labels on the canvas use plain
|
|
152
|
+
language ("Shown while prices load; button disabled"); rule IDs, gate results, and Decision
|
|
153
|
+
Receipts go in the Design Direction or the final message, never in frames meant for review or
|
|
154
|
+
handoff. A handoff frame annotates, in plain language, the interaction behaviour, the truncation
|
|
155
|
+
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
156
|
wrote DESIGN.md, say so in the final message: which file and which fields.
|
|
143
157
|
|
|
144
158
|
${UNTRUSTED_CONTENT}
|
|
@@ -272,7 +286,7 @@ Optional sources (the ryux MCP, Figma, a browser, screenshots, other reference l
|
|
|
272
286
|
evidence when connected; none is required.`;
|
|
273
287
|
export const CORE_HONESTY = `Report what was checked, how, and what was not available. Do not claim "pixel perfect",
|
|
274
288
|
"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.`;
|
|
289
|
+
"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
290
|
export const CORE_DECISION_RECORD = `For consequential choices (RX-PR-09) and deviations, write **Decision**, **Options** compared, **Evidence**,
|
|
277
291
|
**Trade-off**, and **Choice**. Evidence is Strong (2+ comparable screen_ids), Thin (one, or another context),
|
|
278
292
|
or None (no screen_id: a judgment call). With None on a consequential choice, show options or ask (RX-PR-10).`;
|
|
@@ -729,6 +743,10 @@ run the purpose gate; keep it when the answer is real, as in the last column.
|
|
|
729
743
|
| 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
744
|
| 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
745
|
| 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 |
|
|
746
|
+
| 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 |
|
|
747
|
+
| 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 |
|
|
748
|
+
| 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 |
|
|
749
|
+
| 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
750
|
| 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
751
|
| 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
752
|
| 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,7 +37,7 @@ 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.padEnd(width)}PASS | FAIL | NOT VERIFIED | N/A · one-line reason`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ryuxdsgn/design-intelligence",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.12.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": {
|