@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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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. **
|
|
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
|
-
|
|
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
|
|
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.
|
|
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": {
|