@ryuxdsgn/design-intelligence 2.6.2 → 2.6.4

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/cli/index.js CHANGED
@@ -358,6 +358,7 @@ const CONTEXT_FIELDS = [
358
358
  ] },
359
359
  },
360
360
  { label: "Brand and design system", hint: "" },
361
+ { label: "Product docs", hint: "paths RYUX reads for product facts, for example docs/prd.md:" },
361
362
  { label: "Evidence sources", hint: `RYUX MCP (hosted server not live yet; local: ${MCP_LOCAL_ADD_CMD}), Figma files, reference URLs:` },
362
363
  {
363
364
  label: "Constraints", hint: "platforms, accessibility target (for example WCAG 2.2 AA), what must not change:",
@@ -47,13 +47,14 @@ function skill(id, rules) {
47
47
  const RUN = "ryux run 2026-10-02";
48
48
  // Rules that cover a pattern another MIT ruleset also names; the text and numbering are RYUX's own.
49
49
  const AS = "anti-slop (MIT)";
50
+ const EK = "emilkowalski/skills (MIT)";
50
51
  export const RULES = [
51
52
  ...skill("product", [
52
53
  {
53
54
  num: 1,
54
55
  title: "State the context first",
55
56
  level: "required",
56
- do: "Before designing, write down the user, their task, the business goal, the design intent (what the user must understand, feel, and do), the information that matters, the primary action, the constraints, and what success looks like. Take what the prompt and DESIGN.md already give; ask only when a missing answer would change a major decision, at most three questions in one message (none when the context is complete), and write the rest as assumptions.",
57
+ do: "Before designing, write down the user, their task, the business goal, the design intent (what the user must understand, feel, and do), the information that matters, the primary action, the constraints, and what success looks like. Take what the prompt and DESIGN.md already give; ask only when a missing answer materially affects the user flow, what the product can do, or whether the content is correct, or when neither the prompt nor DESIGN.md sets the UI or motion direction, at most three questions in one message, most consequential first (none when the context is complete). Otherwise make the smallest reasonable assumption, write it down, and continue.",
57
58
  dont: "Start from a generic template with no stated user or task, or ask questions the prompt or DESIGN.md already answers.",
58
59
  why: "Without a task, design and review drift into taste.",
59
60
  basis: "ryux-critique playbook; NNGroup task-based evaluation",
@@ -64,10 +65,11 @@ export const RULES = [
64
65
  title: "Unknowns stay assumptions",
65
66
  level: "required",
66
67
  gate: "hard",
67
- do: "List what you do not know as assumptions, and mark the matching UI with [REAL DATA] or a question. Product facts (feature and tool names, commands, integrations, supported platforms, page names) come only from the brief, the repo, or the product's own docs.",
68
- dont: "Invent business rules, metrics, user data, permissions, pricing, requirements, or API behavior, or name a tool, command, integration, platform, or page the product does not have.",
69
- why: "Invented facts turn into promises and bugs that someone has to unwind.",
70
- basis: `${RUN}: an unconstrained agent invented a 30-day trial and user counts`,
68
+ do: "Sort what the brief does not say into three kinds. Design assumptions (low-risk visual or structural choices such as a merchant category icon or grouping by date): decide them from the context. Unconfirmed capabilities (an action or feature the category usually has, such as sharing a receipt): convention is not proof, so ask when it materially changes the flow or scope; otherwise you may propose it, listed as unconfirmed, never as a requirement. Facts, claims, and policies: take them only from the brief, the repo, or the product's own docs (feature and tool names, commands, integrations, platforms, pages, fees, timings, guarantees).",
69
+ dont: "Invent business rules, policies, guarantees, metrics, user data, permissions, pricing, requirements, or API behavior, or name a tool, command, integration, platform, or page the product does not have. Do not present an unconfirmed capability as a confirmed one.",
70
+ 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.",
71
+ 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.",
72
+ 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`,
71
73
  check: "review",
72
74
  },
73
75
  {
@@ -644,10 +646,10 @@ export const RULES = [
644
646
  title: "Motion earns its level",
645
647
  level: "contextual",
646
648
  when: "the design adds motion or transitions",
647
- do: "Classify each motion: L1 state feedback, L2 component transition, L3 page transition, L4 storytelling, L5 decorative. The higher the level, the stronger the reason it needs. Take timing and easing from one motion personality, define them once as motion tokens, animate transform and opacity rather than layout properties, and honor reduced motion (RX-A11Y-08).",
648
- dont: "Animate everything, use one generic duration and easing (transition: all 0.3s) everywhere, or let decorative motion delay content or input.",
649
+ do: "Classify each motion: L1 state feedback, L2 component transition, L3 page transition, L4 storytelling, L5 decorative. The higher the level, the stronger the reason it needs. Then weigh how often people see it: a surface opened many times a day (command palette, shortcut, core navigation, list selection) appears and closes without movement, at most a fade too short to notice; standard transitions belong to occasional surfaces (modal, drawer, toast), and expression to rare or first-time moments. Take timing and easing from one motion personality, define them once as motion tokens, animate transform and opacity rather than layout properties, and honor reduced motion (RX-A11Y-08).",
650
+ dont: "Animate everything, give a surface people open many times a day an entrance they must sit through, use one generic duration and easing (transition: all 0.3s) everywhere, or let decorative motion delay content or input.",
649
651
  why: "Motion directs attention; unearned motion steals it from the task and can make some people unwell.",
650
- basis: "NNGroup animation and usability guidance; WCAG 2.3.3 animation from interactions",
652
+ basis: `NNGroup animation and usability guidance; WCAG 2.3.3 animation from interactions; frequency check: pattern also in ${EK} find-animation-opportunities, written for RYUX`,
651
653
  notWhen: "L1 feedback on standard controls that follows the platform defaults",
652
654
  tradeoff: "fewer flourishes on marketing pages",
653
655
  check: "review; reduced-motion test",
@@ -1039,13 +1041,13 @@ export const RULES = [
1039
1041
  },
1040
1042
  {
1041
1043
  num: 3,
1042
- title: "Placeholders look like placeholders",
1044
+ title: "Sample data is realistic and labeled; placeholders only for what is missing",
1043
1045
  level: "required",
1044
1046
  gate: "hard",
1045
- do: "Mark temporary content clearly: [REAL DATA], [LOGO], \"Contoh data\".",
1046
- dont: "Ship placeholder copy or data disguised as final.",
1047
- why: "Disguised placeholders ship by accident.",
1048
- basis: "ryux anti-slop principle",
1047
+ do: "Fill mockups with realistic sample content consistent with the brief (names, merchants, amounts in the brief's currency, dates) and list it as sample data in the output. Keep a visible placeholder only for an asset that does not exist yet, such as [LOGO].",
1048
+ dont: "Put [REAL DATA], XXX, or lorem text on the canvas where sample data would do, or ship sample data or placeholder copy as final. A sample-data label does not turn a fee, policy, or claim into a fact (RX-PR-02).",
1049
+ why: "Bracketed values read as unfinished and hide the layout's real behavior; unlabeled sample data ships by accident.",
1050
+ basis: "ryux anti-slop principle; ryux visual benchmark 2.5, 2026-10-09: [Brand] and XXX read as unfinished",
1049
1051
  check: "audit_copy C-01",
1050
1052
  formerly: ["RX-C-05"],
1051
1053
  },
@@ -40,9 +40,9 @@ accessibility, and intentional decisions. Understand the context before deciding
40
40
  facts from assumptions; prefer evidence over aesthetic preference; do not invent requirements;
41
41
  explain meaningful decisions with their trade-off; validate before claiming.`;
42
42
  export const CORE_WORKFLOW = `1. **Understand the request**: who, what task, which product and market (RX-PR-01). Read the
43
- RYUX project context in DESIGN.md first when it exists; do not guess what it leaves blank. Ask
44
- only when the answer would change a major decision (at most three, usually none), and assume
45
- the rest visibly. DESIGN.md answers are direction, not evidence of what users need.
43
+ RYUX project context in DESIGN.md, then the product docs (Product docs paths, else PRD.md,
44
+ docs/prd*, docs/product*, README), and name what you read. Ask and record direction as in
45
+ capabilities/design.md, step 1; assume the rest visibly. DESIGN.md is direction, not evidence.
46
46
  2. **Pick the entry point** and read its file.
47
47
  3. **Select knowledge**: read the modules the task table lists, and no others.
48
48
  4. **Gather evidence**: reference screens through the ryux MCP when connected; otherwise say so.
@@ -61,9 +61,22 @@ export const DESIGN_BODY = `# RYUX Design
61
61
 
62
62
  1. **Context.** Who, what task, which product and market, and the design intent
63
63
  (knowledge/product.md). Take it from the prompt, then DESIGN.md, then knowledge and evidence.
64
- Ask only when a missing answer would change a major decision: those questions alone, at most
65
- three, in one message, before designing. Complete context means no questions. Never ask what
66
- the prompt or DESIGN.md already answers; write the rest down as assumptions (RX-PR-01).
64
+ Read the product docs first (the router, step 1). Ask only when a missing answer materially
65
+ affects the user flow, what the product can do, or whether the content is correct, those
66
+ questions alone, most consequential first, at most three, in one message, before designing.
67
+ **Direction is the user's call:** when neither the prompt nor DESIGN.md sets the UI direction
68
+ (character, or brand colour and type) or the motion direction, ask for it in that message (it
69
+ counts toward the three) instead of choosing it yourself. **No DESIGN.md and no product docs is the
70
+ case where these questions matter most, never a reason to skip them:** ask, then wait for the
71
+ answer before designing. Complete context means no questions. Never ask what the prompt, DESIGN.md, or the
72
+ product docs already answer. For the rest, make the smallest reasonable assumption, write it
73
+ down, and continue (RX-PR-01, RX-PR-02).
74
+ **Record direction answers.** When the user answers a UI or motion direction question, write the
75
+ answer into the UI direction or Motion direction field of the RYUX project context in DESIGN.md:
76
+ between \`<!-- ryux-context:start -->\` and \`<!-- ryux-context:end -->\`, one line per field
77
+ (\`- **UI direction**: Calm, trustworthy\`). If DESIGN.md or the block does not exist, create it
78
+ with those two fields. Change only those field lines; leave every other line as it is. Your own
79
+ assumptions do not go into DESIGN.md.
67
80
  2. **Understand what exists.** When there is a screen, product, or design system already, read its
68
81
  analysis or run Analyze first (capabilities/analyze.md). Understand before you design.
69
82
  3. **Decide with evidence.** For consequential choices, compare two or three patterns, using
@@ -83,7 +96,8 @@ export const DESIGN_BODY = `# RYUX Design
83
96
  gate. Never finish with an asset still pending.
84
97
  8. **Fact check, then the gate.** Check every product fact on the canvas (tool and command names,
85
98
  integrations, platforms, pages, numbers) against the brief or the repo (RX-PR-02), then close
86
- with the Delivery Gate, saying what was not designed, such as other widths or states.
99
+ with the Delivery Gate, saying what was not designed, such as other widths or states. If you
100
+ wrote DESIGN.md, say so in the final message: which file and which fields.
87
101
 
88
102
  Do not edit frames you were not asked to change. Do not hand off a design as "final" with
89
103
  placeholder or invented content.
@@ -120,7 +134,11 @@ Asset direction per asset: purpose, source, style, composition, context, consist
120
134
  avoid, provenance (observed, sourced, illustrative, generated, inferred)
121
135
  Responsive what changes, stays, disappears, or stacks at each width
122
136
 
123
- Assumptions everything guessed, visible
137
+ Assumptions kept apart, all visible:
138
+ design assumptions (low-risk choices made from context);
139
+ unconfirmed capabilities (actions or features on the canvas the brief did not
140
+ confirm; proposed, not requirements); sample data (realistic mockup content,
141
+ never a fact, RX-AS-03)
124
142
  Decisions one Decision Receipt per major decision (below)
125
143
  \`\`\`
126
144
 
@@ -161,7 +179,9 @@ export const BUILD_BODY = `# RYUX Build
161
179
  approved mockup; it is the spec. If there is none, run Design first (capabilities/design.md)
162
180
  instead of inventing one in code.
163
181
  3. **Read the modules the task needs** from the task table: for example accessibility, responsive,
164
- and edge-cases for any UI, and forms and content for a form.
182
+ and edge-cases for any UI, and forms and content for a form. When the build adds motion or
183
+ transitions, read knowledge/ui.md (RX-UI-11) before writing any: how often the surface is seen
184
+ decides how much it moves.
165
185
  4. **Implement faithfully.** Use semantic elements, existing components, and real data paths.
166
186
  Build must not invent business rules, prices, or limits; API behavior or response shapes; or
167
187
  data presented as real (RX-FE-02, RX-PR-02). It must not silently change a design decision: a
@@ -223,10 +243,13 @@ export const GUIDES = {
223
243
  5. **Primary action**: the one thing this screen exists for.
224
244
  6. **Constraints**: platform, data that exists, technical or legal limits.
225
245
  7. **Success**: how would you know the screen works?
226
- 8. **Assumptions**: everything you had to guess. Keep them visible.
246
+ 8. **Assumptions**: everything you had to guess, kept visible and sorted into design assumptions,
247
+ unconfirmed capabilities, and sample data.
227
248
 
228
- Unknown facts stay assumptions. Do not invent business rules, metrics, user data, permissions,
229
- pricing, requirements, or API behavior; mark them [REAL DATA] or ask.
249
+ Unknown facts stay assumptions. Do not invent business rules, policies, metrics, user data,
250
+ permissions, pricing, requirements, or API behavior; ask when one materially affects the flow or
251
+ correctness, otherwise leave it out. Mockup content is realistic sample data, labeled (RX-PR-02,
252
+ RX-AS-03).
230
253
 
231
254
  Find evidence with the ryux MCP (\`search_screens\`, \`get_flow\`, \`get_local_pattern\`) and cite the
232
255
  \`screen_id\`, or call the decision a judgment call.
@@ -403,6 +426,9 @@ If not, the surface has no point of view yet. Stay honest while being bold: a st
403
426
  needs invented numbers, people, or logos.
404
427
 
405
428
  **3. Motion.** Start from purpose: what the motion communicates; with no purpose, no motion.
429
+ Then ask how often someone will see it. The more often, the less of it they should notice: what
430
+ people open many times a day (a command palette, a shortcut, core navigation) appears at once, and
431
+ expression is kept for occasional or first-time moments. A purpose does not outweigh frequency.
406
432
  Every motion follows one lifecycle: before, trigger, transition, new state, feedback.
407
433
  The states themselves (waiting, result, recovery) are defined in ryux-interaction (RX-IX-01,
408
434
  RX-IX-02); motion only makes them visible, and it never compensates for weak UX. Decide the trigger,
package/dist/render.js CHANGED
@@ -134,7 +134,8 @@ ${GUIDES[s.id]}${extra}
134
134
  ${s.evidence} Without the ryux MCP, say the evidence comes from the design and standards alone.
135
135
 
136
136
  > Hard Gates always apply, whichever skills are loaded: no invented numbers, people, urgency, business
137
- > rules, or terms; no placeholder shipped as final; no missing critical states. See \`ryux-core\`.
137
+ > rules, or terms; no placeholder shipped as final; no missing critical states. Labeled sample data is
138
+ > not an invented number; an unconfirmed capability is never presented as confirmed. See \`ryux-core\`.
138
139
 
139
140
  ## Rules
140
141
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuxdsgn/design-intelligence",
3
- "version": "2.6.2",
3
+ "version": "2.6.4",
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": {