@ryuxdsgn/design-intelligence 2.9.3 → 2.10.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.
@@ -71,7 +71,7 @@ export const RULES = [
71
71
  notWhen: "This rule is not a reason to drop content the brief implies or to leave a screen looking unfinished: sample content is RX-AS-03, design assumptions are yours to make.",
72
72
  why: "Invented facts turn into promises and bugs that someone has to unwind; a screen trimmed to the brief's literal words reads unfinished and hides what still needs confirming.",
73
73
  basis: `${RUN}: an unconstrained agent invented a 30-day trial and user counts; ryux visual benchmark 2.6 human rater, 2026-10-13: RYUX screens lost on a missing receipt action`,
74
- check: "review",
74
+ check: "compare every product fact on the screen (features, prices, fees, policies, names, integrations) with the brief, DESIGN.md, docs, or repo; each is sourced or labelled as an assumption; fails on one shown as fact without a source",
75
75
  },
76
76
  {
77
77
  num: 3,
@@ -83,7 +83,7 @@ export const RULES = [
83
83
  notWhen: "Monitoring and configuration screens (dashboards, settings) need a clear goal but not a single dominant action; do not invent one to satisfy this rule.",
84
84
  why: "A single clear path shortens the decision and the task.",
85
85
  basis: "Hick's law (Hick 1952; Hyman 1953): more options, longer decisions; NNGroup visual hierarchy",
86
- check: "review",
86
+ check: "name the screen's goal and its primary action, then count the controls styled as primary in the main state; fails when two compete at the same weight",
87
87
  },
88
88
  {
89
89
  num: 4,
@@ -209,7 +209,7 @@ export const RULES = [
209
209
  dont: "Ship an action whose in-progress, result, or failure behavior is undefined.",
210
210
  why: "Undefined behavior becomes inconsistent behavior once it is implemented.",
211
211
  basis: "Nielsen heuristics 1 and 9; peak-end rule (Kahneman et al. 1993): people judge an experience largely by its most intense moment and its end; ryux interaction model",
212
- check: "review",
212
+ check: "for each async action, point to its before, during, result, and recovery states in the render or the design file; fails on any that is missing",
213
213
  },
214
214
  {
215
215
  num: 2,
@@ -717,7 +717,7 @@ export const RULES = [
717
717
  level: "contextual",
718
718
  when: "the design needs photos, illustration, 3D, icons, logos, or video",
719
719
  do: "Pick each asset's source in this order: real product screens or the brand's own assets; a licensed library (one icon set, photos whose license you can name); a custom or generated asset made from the Visual Brief and labeled illustrative; otherwise a placeholder that looks like one (RX-AS-03). Record where each asset came from.",
720
- dont: "Draw or imitate another company's logo, mix icon sets, use a photo you cannot license, or fill a gap with a generic stock scene.",
720
+ dont: "Draw or imitate another company's logo, invent the product's own mark (RX-AS-11), mix icon sets, use a photo you cannot license, or fill a gap with a generic stock scene.",
721
721
  why: "Assets carry claims about the product and its users; an unsourced or borrowed asset is a claim nobody can back.",
722
722
  basis: "licensing and trademark practice; RX-UI-07; RX-AS-02",
723
723
  notWhen: "a wireframe or internal prototype where placeholders are expected",
@@ -759,7 +759,7 @@ export const RULES = [
759
759
  dont: "Create a near-duplicate component or pattern for one screen.",
760
760
  why: "Duplicates drift apart, multiply maintenance, and break consistency.",
761
761
  basis: "Design-system practice",
762
- check: "review",
762
+ check: "for each new component or token, name the existing ones searched and why none fits; fails on a new one that duplicates an existing one",
763
763
  },
764
764
  {
765
765
  num: 2,
@@ -830,7 +830,7 @@ export const RULES = [
830
830
  dont: "Build pointer-only actions, or remove focus outlines without an accessible replacement.",
831
831
  why: "Keyboard and switch users navigate and act by focus.",
832
832
  basis: "WCAG 2.2 SC 2.1.1, 2.4.3, and 2.4.7; WAI-ARIA APG dialog pattern",
833
- check: "review",
833
+ check: "tab through the render from the top: every control is reached in reading order and shows a visible focus indicator (3:1 against its background); fails on a skipped control, a focus trap, or an invisible focus",
834
834
  formerly: ["RX-H-13"],
835
835
  },
836
836
  {
@@ -842,7 +842,7 @@ export const RULES = [
842
842
  dont: "Build structure or controls from styled divs, or ship unlabeled icon buttons.",
843
843
  why: "Assistive technology navigates by semantics and announces unlabeled buttons as just \"button\"; native controls bring keyboard and platform behavior for free.",
844
844
  basis: "WCAG 2.2 SC 1.1.1, 1.3.1, and 4.1.2",
845
- check: "review",
845
+ check: "read the accessibility tree (a Playwright accessibility snapshot, or the design file's layer types): every control is a native element or has a role, and every one has a name; headings are in order; fails on an unnamed control or a div acting as a button",
846
846
  },
847
847
  {
848
848
  num: 6,
@@ -962,7 +962,7 @@ export const RULES = [
962
962
  dont: "Hard-code business rules or API behavior nobody specified.",
963
963
  why: "Invented logic ships as real behavior.",
964
964
  basis: "ryux product principle (see RX-PR-02)",
965
- check: "review",
965
+ check: "list each rule the UI code computes (fees, limits, eligibility, rounding, dates) and its source (API, spec, brief); fails on any computed from a guess",
966
966
  },
967
967
  {
968
968
  num: 5,
@@ -1092,7 +1092,7 @@ export const RULES = [
1092
1092
  dont: "Invent \"48.000+ users\", \"4,8★\", or \"+12%\".",
1093
1093
  why: "Invented numbers are false claims, however polished the page.",
1094
1094
  basis: `${RUN}: pen.dev landing without ryux`,
1095
- check: "review",
1095
+ check: "list every number on the screen with its source (brief, docs, data, or a sample label); fails on any number without one",
1096
1096
  formerly: ["RX-C-03"],
1097
1097
  },
1098
1098
  {
@@ -1104,7 +1104,7 @@ export const RULES = [
1104
1104
  dont: "Make up testimonials, reviewers, or customer photos.",
1105
1105
  why: "Fake people are fake endorsements.",
1106
1106
  basis: "ryux anti-slop principle",
1107
- check: "review",
1107
+ check: "list every person, quote, review, and customer logo on the screen with its source or its sample label; fails on any shown as real without a source",
1108
1108
  formerly: ["RX-C-04"],
1109
1109
  },
1110
1110
  {
@@ -1128,7 +1128,7 @@ export const RULES = [
1128
1128
  dont: "Write \"only 2 left\", \"offer ends tonight\", or fake countdowns with nothing behind them.",
1129
1129
  why: "Manufactured pressure erodes trust once users notice.",
1130
1130
  basis: `NNGroup credibility research; ${RUN}: WhatsApp promo`,
1131
- check: "review",
1131
+ check: "find every timer, deadline, stock count, and 'only N left'; each comes from the brief or real data; fails on any without a source",
1132
1132
  formerly: ["RX-N-09", "RX-C-10"],
1133
1133
  },
1134
1134
  {
@@ -1151,7 +1151,7 @@ export const RULES = [
1151
1151
  dont: "Add settings, sections, abstractions, or packages \"for later\", or features because similar products have them.",
1152
1152
  why: "Unneeded complexity costs every user and every future change.",
1153
1153
  basis: "Nielsen heuristic 8; Tesler's law of conserved complexity (Tesler, 1980s): some complexity cannot be removed, only moved; clean-code practice",
1154
- check: "review",
1154
+ check: "list each element, option, state, and dependency the work added and the need it serves; fails on any without one",
1155
1155
  formerly: ["RX-K-05"],
1156
1156
  },
1157
1157
  {
@@ -1193,12 +1193,24 @@ export const RULES = [
1193
1193
  title: "Count before handoff",
1194
1194
  level: "required",
1195
1195
  gate: "lock",
1196
- do: "Before handing off, count on the render or in the design file's variables, and report the counts: accent hues 1 (status colors, and secondary colors the brand defines, are named and excluded); grey families 1; corner radii only from the scale, matching the shape lock; display sizes per screen 1; icon sets 1, in the chosen icon style; emoji in interface chrome 0; gradients without a brand reason 0; labels for the same intent 1. A count over its limit fails unless the brief or DESIGN.md gives the reason.",
1196
+ do: "Before handing off, count on the render or in the design file's variables, and report the counts: accent hues 1 (status colors, and secondary colors the brand defines, are named and excluded); grey families 1; corner radii only from the scale, matching the shape lock; display sizes per screen 1; icon sets 1, in the chosen icon style; emoji in interface chrome 0; invented logos or app icons 0 (RX-AS-11); gradients without a brand reason 0; labels for the same intent 1. A count over its limit fails unless the brief or DESIGN.md gives the reason.",
1197
1197
  dont: "Judge consistency by eye only, or hand off a screen with five accent hues, mixed icon sets, or two labels for one action because it looks fine.",
1198
1198
  why: "Counts are harder to talk past than impressions; a design that passed a by-eye review still shipped five hues and the wrong tab icons.",
1199
1199
  basis: `isolation effect (von Restorff 1933): several accents cancel each other out; pattern also in ${AP}, anti-slop counts; written for RYUX; owner review 2026-10-17: withryux.pen passed RYUX with 5+ hues and wrong tab icons`,
1200
1200
  check: "count on the render or the design file's variables; report in the Delivery Gate",
1201
1201
  },
1202
+ {
1203
+ num: 11,
1204
+ title: "The product's own mark",
1205
+ level: "required",
1206
+ gate: "hard",
1207
+ when: "the design has a logo, wordmark, app icon, or favicon",
1208
+ do: "Use the brand's own file wherever the product's mark appears: look in the repo (public/, assets/, the app icon and favicon), DESIGN.md, the design file's components, and what the user attached, and name the file you used. With no file, set the product name in plain text in the brand's type, or leave a visible [LOGO] placeholder, and list the mark as missing in the handoff.",
1209
+ dont: "Stand in for the mark with initials in a circle, an emoji, a generic shape, an invented SVG, a letter cut into a tile, or the name typeset to look like a logo; generate a favicon or app icon the user did not ask for; or redraw the brand's mark instead of using its file. Designing a mark is its own task, done only when the user asks for it.",
1210
+ why: "An invented mark looks finished and is the first thing a team has to throw away; it also passes for a decision nobody made.",
1211
+ basis: `pattern also in superdesign-skill (MIT), logo invariant; RX-UI-13 asset provenance; ryux owner review 2026-10-18 (the logo and favicon are the owner's to make); written for RYUX`,
1212
+ check: "list every mark slot and the file it uses, or the placeholder; fails on a slot filled by an invented mark",
1213
+ },
1202
1214
  ]),
1203
1215
  ];
1204
1216
  // Rules retired in rules 1.3: merged into another rule, or moved into a skill's guide as guidance.
@@ -1290,10 +1302,10 @@ export const QUALITY_LOCKS = [
1290
1302
  // Contextual activation: load only what the task needs (core is always loaded).
1291
1303
  export const ACTIVATION = [
1292
1304
  { task: "UI implementation", skills: ["product", "ux", "ui", "design-system", "frontend", "visual-qa", "anti-slop"] },
1293
- { task: "Form implementation", skills: ["product", "ux", "forms", "interaction", "accessibility", "edge-cases", "content"] },
1305
+ { task: "Form implementation", skills: ["product", "ux", "forms", "interaction", "accessibility", "edge-cases", "content", "ui", "anti-slop"] },
1294
1306
  { task: "Mobile UI", skills: ["ux", "ui", "responsive", "accessibility", "anti-slop"] },
1295
- { task: "Checkout or payment", skills: ["product", "interaction", "forms", "content", "edge-cases"] },
1296
- { task: "Data-heavy view (list, table, dashboard)", skills: ["ux", "edge-cases", "responsive", "design-system", "frontend"] },
1307
+ { task: "Checkout or payment", skills: ["product", "interaction", "forms", "content", "edge-cases", "ui", "anti-slop"] },
1308
+ { task: "Data-heavy view (list, table, dashboard)", skills: ["ux", "edge-cases", "responsive", "design-system", "frontend", "ui", "anti-slop"] },
1297
1309
  { task: "Frontend logic or utilities (formatting, state, data shown to users)", skills: ["frontend", "content", "edge-cases"] },
1298
1310
  { task: "Copy only (UI text, chat, announcements)", skills: ["content", "anti-slop"] },
1299
1311
  { task: "Visual refinement", skills: ["ui", "design-system", "visual-qa", "anti-slop"] },
@@ -85,12 +85,16 @@ export const DESIGN_BODY = `# RYUX Design
85
85
  analysis or run Analyze first (capabilities/analyze.md). Existing screens, components, and any
86
86
  screenshot or reference provided are your examples: read them before choosing patterns, take
87
87
  their principles, and never copy their facts. Understand before you design.
88
- 3. **Decide with evidence.** For consequential choices, compare two or three patterns, using
88
+ 3. **Read the modules the task needs** from the task table before deciding anything, for example ux,
89
+ interaction, forms, and content for a form, or ui and responsive for a layout; for any surface
90
+ with a visual direction, ui and anti-slop as well. The rules shape the first idea, not only the
91
+ review of it.
92
+ 4. **Decide with evidence.** For consequential choices, compare two or three patterns, using
89
93
  reference screens when the ryux MCP is connected (RX-PR-09), and rate the evidence (RX-PR-10).
90
94
  On a complex or ambiguous surface (a new flow, a dashboard, a multi-step form), name the primary
91
95
  task, the one thing that must be seen first, and two or three UX approaches (structure and
92
96
  interaction model) before any visual work, and choose by the task; a small change skips this.
93
- 4. **Direction.** Write the Design Direction below. On task UI, follow conventions and the design
97
+ 5. **Direction.** Write the Design Direction below. On task UI, follow conventions and the design
94
98
  system. On an expressive surface (hero, landing, onboarding, empty state, brand moment), or when
95
99
  the brief asks for a new look or more personality, explore on the canvas before choosing (RX-UI-12):
96
100
  - Render three directions as frames side by side: the main state only, the same content and
@@ -106,8 +110,6 @@ export const DESIGN_BODY = `# RYUX Design
106
110
  - Then stop and let the user choose. Build only the chosen one into the full design (states,
107
111
  widths, Visual Direction, RX-UI-10) and mark the others on the canvas as not chosen. When the
108
112
  user has already said to pick for them, continue with the recommendation and say so.
109
- 5. **Read the modules the task needs** from the task table, for example ux, interaction, forms, and
110
- content for a form, or ui and responsive for a layout.
111
113
  6. **Design in the tool.** Use the Figma MCP or the pen.dev MCP. System first: look for the design
112
114
  system that exists (DESIGN.md, a tokens or theme file in the repo, the design file's variables and
113
115
  components, a linked library) and build from it. Create only what is missing: variables for color
@@ -118,7 +120,7 @@ export const DESIGN_BODY = `# RYUX Design
118
120
  7. **Render and inspect.** Screenshot what you made, check it against the direction and the rules,
119
121
  fix, and render again (capabilities/qa.md). Count the values still literal (color, spacing,
120
122
  radius, type size) and turn each into a variable or name the exception, then run the counts of
121
- RX-AS-10 (accent hues, grey families, radii, display sizes, icon sets, emoji, gradients, labels
123
+ RX-AS-10 (accent hues, grey families, radii, display sizes, icon sets, emoji, invented marks, gradients, labels
122
124
  per intent) and report them in the gate. Run the four hierarchy
123
125
  checks from Critique (control beside its data, primary action that reads as an action, not a tab, no fact
124
126
  twice, grouped by what the user checks together), fix what fails, render again, and check each fix. List where
@@ -539,7 +541,7 @@ or a cut (RX-A11Y-08).
539
541
  | Photography | the brand's own shoot | a licensed library you can name | a stranger presented as a customer |
540
542
  | Illustration and 3D | the brand's system | custom or generated from the brief, labeled | a generic character or blob unrelated to the product |
541
543
  | Icons | the project's set | one set that matches the chosen icon style (for example Tabler, Iconoir, Phosphor, or Material Symbols), or a custom set drawn to that style | mixed sets, or one-off icons outside the style |
542
- | Logos | official files from each owner | the name in plain text | a redrawn or imitated logo |
544
+ | Logos | official files from each owner; the product's own file (RX-AS-11) | the name in plain text, or [LOGO] | a redrawn, imitated, or invented logo; initials or an emoji as a mark; a generated favicon or app icon |
543
545
  | Video | real product footage | a screen recording of the real product | stock footage implying use |
544
546
  | Missing | a placeholder that looks like one (RX-AS-03) | | an invented stand-in |
545
547
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuxdsgn/design-intelligence",
3
- "version": "2.9.3",
3
+ "version": "2.10.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": {