@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.
@@ -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 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: 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 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
  },
@@ -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 = `Do not optimize for visual novelty. Optimize for clarity, usability, consistency, product fit,
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. List where
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. Generated images and illustrations arrive
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), then close
141
- with the Delivery Gate, saying what was not designed, such as other widths or states. If you
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.11.0",
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": {