@ryuxdsgn/design-intelligence 2.13.6 → 2.13.8
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 +45 -7
- package/dist/intelligence/content.js +68 -2
- package/dist/intelligence/guides.js +34 -13
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -167,16 +167,22 @@ async function runInstall(flags) {
|
|
|
167
167
|
}
|
|
168
168
|
if (nonInteractive)
|
|
169
169
|
return;
|
|
170
|
+
let answers = {};
|
|
170
171
|
if (!scope.global) {
|
|
171
172
|
const s = await p.confirm({ message: "Set up project context now? Every question can be skipped.", initialValue: true });
|
|
172
173
|
if (p.isCancel(s))
|
|
173
174
|
return cancel();
|
|
174
|
-
if (s
|
|
175
|
-
|
|
176
|
-
|
|
175
|
+
if (s) {
|
|
176
|
+
const a = await setupInteractive(scope.root);
|
|
177
|
+
if (!a)
|
|
178
|
+
return cancel();
|
|
179
|
+
answers = a;
|
|
180
|
+
}
|
|
181
|
+
else
|
|
177
182
|
p.log.info(`Set it up later with: ${CLI_CMD} setup`);
|
|
178
183
|
}
|
|
179
|
-
p.
|
|
184
|
+
p.note(suggestionsText(answers), "Try");
|
|
185
|
+
p.outro("RYUX is ready.");
|
|
180
186
|
}
|
|
181
187
|
async function runUpdate(flags) {
|
|
182
188
|
const scope = scopeOf(flags);
|
|
@@ -578,11 +584,40 @@ async function setupInteractive(root) {
|
|
|
578
584
|
p.log.info("Teach RYUX about this project. Every question can be skipped: blanks stay unknown, and RYUX asks when they matter.");
|
|
579
585
|
const answers = await askContext(root);
|
|
580
586
|
if (!answers)
|
|
581
|
-
return
|
|
587
|
+
return null;
|
|
582
588
|
const body = await writeContext(root, answers);
|
|
583
589
|
p.log.success(`${CONTEXT_FILE} updated · ${filledCount(body)} of ${ASKED_FIELDS.length} setup fields filled`);
|
|
584
|
-
return
|
|
590
|
+
return answers;
|
|
591
|
+
}
|
|
592
|
+
/** Curated, per product kind (setup's Product answer): a typical screen and flow to name in example prompts. */
|
|
593
|
+
const SUGGESTED = {
|
|
594
|
+
"Online store": { screen: "the checkout page", flow: "our checkout flow" },
|
|
595
|
+
"Payments or finance": { screen: "the transaction detail screen", flow: "our send-money flow" },
|
|
596
|
+
"Marketplace": { screen: "the seller's new listing form", flow: "our listing flow" },
|
|
597
|
+
"Booking or scheduling": { screen: "the date and time slot picker", flow: "our booking flow" },
|
|
598
|
+
"SaaS or dashboard": { screen: "the billing settings page", flow: "our onboarding flow" },
|
|
599
|
+
"Content or media": { screen: "the article reading page", flow: "our sign-up flow" },
|
|
600
|
+
"Internal tool": { screen: "the orders table with filters", flow: "our approval flow" },
|
|
601
|
+
};
|
|
602
|
+
/** Three concrete prompts, one per entry point, from the setup answers; the README examples when there are none. */
|
|
603
|
+
function promptSuggestions(answers) {
|
|
604
|
+
const kind = Object.keys(SUGGESTED).find((k) => (answers["Product"] ?? "").startsWith(k));
|
|
605
|
+
if (!kind) {
|
|
606
|
+
return [
|
|
607
|
+
"Design the transaction detail screen for our wallet, in pen.dev.",
|
|
608
|
+
"Critique our pricing page at https://example.com/pricing.",
|
|
609
|
+
"Analyze this checkout screen (screenshot attached).",
|
|
610
|
+
];
|
|
611
|
+
}
|
|
612
|
+
const { screen, flow } = SUGGESTED[kind];
|
|
613
|
+
const changing = /existing flow|redesign/i.test(answers["Current work"] ?? "");
|
|
614
|
+
return [
|
|
615
|
+
`Design ${screen} for our app.`,
|
|
616
|
+
`Critique ${flow} and tell us what to fix first.`,
|
|
617
|
+
changing ? `Analyze ${flow} before we change it (screenshots attached).` : `QA the build of ${screen} against the design.`,
|
|
618
|
+
];
|
|
585
619
|
}
|
|
620
|
+
const suggestionsText = (answers) => [...promptSuggestions(answers).map((s) => `"${s}"`), "", "RYUX may ask up to three questions first."].join("\n");
|
|
586
621
|
async function runSetup(flags) {
|
|
587
622
|
if (flags.global) {
|
|
588
623
|
console.error(`setup is per project. Run it inside the project folder: ${CLI_CMD} setup`);
|
|
@@ -599,6 +634,7 @@ async function runSetup(flags) {
|
|
|
599
634
|
if (Object.keys(fromFlags).length) {
|
|
600
635
|
const body = await writeContext(root, fromFlags);
|
|
601
636
|
console.log(`${pc.green("✓ ")}${CONTEXT_FILE} updated · ${filledCount(body)} of ${ASKED_FIELDS.length} setup fields filled`);
|
|
637
|
+
console.log(`\nTry:\n${suggestionsText(fromFlags).split("\n").map((l) => (l ? ` ${l}` : "")).join("\n")}`);
|
|
602
638
|
return;
|
|
603
639
|
}
|
|
604
640
|
if (!process.stdin.isTTY) {
|
|
@@ -609,8 +645,10 @@ async function runSetup(flags) {
|
|
|
609
645
|
}
|
|
610
646
|
p.intro(pc.bgCyan(pc.black(" RYUX setup ")));
|
|
611
647
|
p.log.message(KEY_LEGEND);
|
|
612
|
-
|
|
648
|
+
const answers = await setupInteractive(root);
|
|
649
|
+
if (!answers)
|
|
613
650
|
return cancel();
|
|
651
|
+
p.note(suggestionsText(answers), "Try");
|
|
614
652
|
p.outro(`RYUX is ready. Next: ${CLI_CMD} check`);
|
|
615
653
|
}
|
|
616
654
|
async function runInit(flags) {
|
|
@@ -130,6 +130,19 @@ export const RULES = [
|
|
|
130
130
|
basis: "ryux evidence principle",
|
|
131
131
|
check: "review",
|
|
132
132
|
},
|
|
133
|
+
{
|
|
134
|
+
num: 11,
|
|
135
|
+
title: "An AI feature has a written standard for its output",
|
|
136
|
+
level: "contextual",
|
|
137
|
+
when: "the product shows content generated by AI: an answer, a summary, a draft, a recommendation",
|
|
138
|
+
do: "Before designing it, write what good and bad output look like, per kind of response:\n - Sort the responses the feature gives (a short answer, an open explanation, a list, a draft, a refusal) and write pass criteria for each kind, concrete enough for a reviewer to check: \"answers the question in the first sentence; at most two related details\", not \"not too verbose\".\n - Design the states generated output brings: a long and a short answer, no answer or a refusal, an answer that is wrong, slow generation, and a failed request (RX-EC-01).\n - Hand the criteria to the team as the feature's test: real inputs checked against them before launch, and again after every model or prompt change.",
|
|
139
|
+
dont: "Design an AI feature around one ideal sample answer, judge its output by feel, or leave out the states where the output is wrong, empty, or slow.",
|
|
140
|
+
why: "Generated output cannot be specified exactly, so the design is only as good as its definition of good; a screen built around one perfect answer breaks on the next one.",
|
|
141
|
+
basis: "NNGroup design critique in the AI era (criteria per response type; judge, evaluate, iterate; watch for regressions); RX-EC-01",
|
|
142
|
+
notWhen: "AI that works behind the scenes and shows users no generated content",
|
|
143
|
+
tradeoff: "criteria per response type take time before the first screen and need real inputs to write well",
|
|
144
|
+
check: "review: a criteria list per response type, and the wrong, empty, slow, and failed states in the design",
|
|
145
|
+
},
|
|
133
146
|
]),
|
|
134
147
|
...skill("ux", [
|
|
135
148
|
{
|
|
@@ -884,6 +897,58 @@ export const RULES = [
|
|
|
884
897
|
tradeoff: "the reflective layer needs knowledge of what users value, which may need research",
|
|
885
898
|
check: "review; Critique Design Read",
|
|
886
899
|
},
|
|
900
|
+
{
|
|
901
|
+
num: 17,
|
|
902
|
+
title: "Illustration follows a written style",
|
|
903
|
+
level: "contextual",
|
|
904
|
+
when: "the design adds or makes illustration (spot, empty state, onboarding, hero) and the brand has no illustration system",
|
|
905
|
+
do: "Before the first drawing, write the style in five lines (six with characters) in DESIGN.md or the Assumptions:\n - line: stroke weight and cap, or no stroke\n - shape: geometric or hand-drawn, and the corner radius\n - colour: 2 to 4 tokens from the palette, one accent\n - depth and detail: flat, one shadow tone, or 3D; how much detail\n - subject: objects from the product, people, or abstract\n - characters, when the style has people or a mascot: proportions, face detail, the range of people shown, and a short set of poses and expressions; one character system across the product\n - Derive each line from the visual language (RX-UI-10): the stroke from the icon set, the radius from the components, the colour from the tokens. Functional icons stay in the icon set (RX-UI-13), not in the illustration style.\n - Record the style as a Decision Receipt: evidence from a brand guide, references, or the brief; Evidence None when it is derived from the visual language alone.",
|
|
906
|
+
dont: "Draw in the generator's default style (flat people with oversized limbs, gradient blobs, isometric 3D), or mix line and filled illustration in one product.",
|
|
907
|
+
why: "Without a written style, illustration drifts toward the generator's default and away from the UI around it.",
|
|
908
|
+
basis: "Art direction practice (a written illustration style); RX-UI-10 chosen visual language; anti-slop tell (generic illustration); owner review 2026-10-22: request for illustration guidance",
|
|
909
|
+
notWhen: "the brand already has an illustration system; follow it (RX-UI-13)",
|
|
910
|
+
tradeoff: "one more step before the first drawing, and less variety",
|
|
911
|
+
check: "review",
|
|
912
|
+
},
|
|
913
|
+
{
|
|
914
|
+
num: 18,
|
|
915
|
+
title: "A set reads as one family",
|
|
916
|
+
level: "contextual",
|
|
917
|
+
when: "the product uses more than one illustration (empty states, onboarding steps, errors)",
|
|
918
|
+
do: "Make the set together: same canvas and framing, same stroke and palette, same subject scale, viewpoint, and level of detail.\n - Tie each subject to the screen's job: an empty state shows what will appear there, not a mascot shrugging.\n - Put the set side by side before handoff and fix the one that stands out.",
|
|
919
|
+
dont: "Make each illustration in a separate prompt and hand them off without comparing them, or give one more detail or colour than the rest.",
|
|
920
|
+
why: "Users read a mismatched set as a mistake or a different product, and a generator drifts in style from prompt to prompt.",
|
|
921
|
+
basis: "Design-system practice (one illustration family); RX-DS-02 consistency; owner review 2026-10-22: request for illustration guidance",
|
|
922
|
+
notWhen: "a single illustration",
|
|
923
|
+
tradeoff: "the whole set is redone when the style changes",
|
|
924
|
+
check: "render, side by side",
|
|
925
|
+
},
|
|
926
|
+
{
|
|
927
|
+
num: 19,
|
|
928
|
+
title: "Illustration ships as a themed, accessible asset",
|
|
929
|
+
level: "contextual",
|
|
930
|
+
when: "illustration goes into a build, or into a design file that will be built",
|
|
931
|
+
do: "Flat and line art as SVG: colours from tokens (currentColor or CSS variables) so dark mode follows (RX-DS-05), a viewBox with no fixed size, no embedded raster, no text inside the art; text stays in the HTML so it can be translated and scaled.\n - Raster art (generated or 3D) at 2x the displayed size, compressed, with width and height set so the layout does not jump.\n - Decorative art gets aria-hidden or an empty alt; art that carries meaning gets alt text that says the meaning, not the drawing (RX-A11Y-04).",
|
|
932
|
+
dont: "Hard-code colours that vanish on dark, bake words into the image, ship an export with editor metadata, or write alt text that describes the picture (\"a woman holding a box\") instead of what it means.",
|
|
933
|
+
why: "Art that ignores tokens breaks in other themes, text inside an image cannot be read, translated, or zoomed, and alt text that only describes the drawing says nothing.",
|
|
934
|
+
basis: "WCAG 2.2 SC 1.1.1 (non-text content); RX-DS-03; RX-DS-05; RX-A11Y-04; owner review 2026-10-22: request for illustration guidance",
|
|
935
|
+
notWhen: "a concept frame that will not be built",
|
|
936
|
+
tradeoff: "SVG built from tokens takes longer than one export",
|
|
937
|
+
check: "render in every theme; read the SVG source",
|
|
938
|
+
},
|
|
939
|
+
{
|
|
940
|
+
num: 20,
|
|
941
|
+
title: "An icon means one thing, and says it",
|
|
942
|
+
level: "preferred",
|
|
943
|
+
when: "the design uses icons for actions, navigation, or status",
|
|
944
|
+
do: "Pick each icon for the action or concept it stands for, not for its look.\n - One icon, one meaning across the product: no icon for two actions, no two icons for one action.\n - Pair the icon with a text label unless it is one of the few users know without one in this context (search, close, back, menu, home). Keep the label in a tab bar, on uncommon actions, and on destructive ones.\n - Tell look-alikes apart by what they do: back leaves the screen, close dismisses a sheet or modal; delete removes, cancel stops.\n - Use the platform's icon for platform actions (share differs on iOS and Android).",
|
|
945
|
+
dont: "Choose an icon because it looks good, reuse one icon for two meanings, or ship an icon-only control whose meaning users have to guess.",
|
|
946
|
+
why: "Few icons are recognised without a label; an ambiguous icon costs more than a word, and an icon whose meaning changes breaks what users learned.",
|
|
947
|
+
basis: "NNGroup icon usability; Nielsen heuristic 4 (consistency and standards); Apple HIG and Material iconography",
|
|
948
|
+
notWhen: "a dense expert tool whose users learn the set; then a tooltip plus an accessible name",
|
|
949
|
+
tradeoff: "labels take space, especially in toolbars and tab bars",
|
|
950
|
+
check: "review: list each icon with its meaning and flag duplicates; heuristic_eval H-04",
|
|
951
|
+
},
|
|
887
952
|
]),
|
|
888
953
|
...skill("design-system", [
|
|
889
954
|
{
|
|
@@ -963,7 +1028,7 @@ export const RULES = [
|
|
|
963
1028
|
title: "Readable text, reachable targets",
|
|
964
1029
|
level: "required",
|
|
965
1030
|
gate: "hard",
|
|
966
|
-
do: "Keep body text around 14 to 16px on mobile, and touch targets at least 24×24px, preferably 44×44px.",
|
|
1031
|
+
do: "Keep body text around 14 to 16px on mobile, and touch targets at least 24×24px, preferably 44×44px. The target is the hit area, not the glyph: a 20 to 24px icon sits inside a 44×44 button.",
|
|
967
1032
|
dont: "Shrink body text or crowd small targets together.",
|
|
968
1033
|
why: "Small text and targets cause misreads and mis-taps.",
|
|
969
1034
|
basis: "WCAG 2.2 SC 2.5.8 (24px minimum); Apple HIG 44pt; Material 48dp; Fitts's law (Fitts 1954): bigger and nearer targets are faster to hit",
|
|
@@ -987,7 +1052,7 @@ export const RULES = [
|
|
|
987
1052
|
title: "Semantic structure, native controls, and names",
|
|
988
1053
|
level: "required",
|
|
989
1054
|
gate: "hard",
|
|
990
|
-
do: "Use real headings, landmarks, lists, buttons, links, and the right input types before custom elements, and give icon-only buttons and meaningful images an accessible name or alt text.",
|
|
1055
|
+
do: "Use real headings, landmarks, lists, buttons, links, and the right input types before custom elements, and give icon-only buttons and meaningful images an accessible name or alt text. Hide decorative icons and images from assistive technology (aria-hidden, or an empty alt).",
|
|
991
1056
|
dont: "Build structure or controls from styled divs, or ship unlabeled icon buttons.",
|
|
992
1057
|
why: "Assistive technology navigates by semantics and announces unlabeled buttons as just \"button\"; native controls bring keyboard and platform behavior for free.",
|
|
993
1058
|
basis: "WCAG 2.2 SC 1.1.1, 1.3.1, and 4.1.2",
|
|
@@ -1456,6 +1521,7 @@ export const ACTIVATION = [
|
|
|
1456
1521
|
{ task: "Checkout or payment", skills: ["product", "interaction", "forms", "content", "edge-cases", "ui", "anti-slop"] },
|
|
1457
1522
|
{ task: "Data-heavy view (list, table, dashboard)", skills: ["ux", "edge-cases", "responsive", "design-system", "frontend", "ui", "anti-slop"] },
|
|
1458
1523
|
{ task: "Frontend logic or utilities (formatting, state, data shown to users)", skills: ["frontend", "content", "edge-cases"] },
|
|
1524
|
+
{ task: "AI feature (generated answers, summaries, drafts)", skills: ["product", "ux", "content", "edge-cases", "anti-slop"] },
|
|
1459
1525
|
{ task: "Copy only (UI text, chat, announcements)", skills: ["content", "anti-slop"] },
|
|
1460
1526
|
{ task: "Visual refinement", skills: ["ui", "design-system", "visual-qa", "anti-slop"] },
|
|
1461
1527
|
];
|
|
@@ -11,8 +11,8 @@ generator, an anti-slop framework, a design system, or a prompt library.
|
|
|
11
11
|
\`\`\`
|
|
12
12
|
Understand → Frame → Explore → Evaluate and select → Build and critique → Verify and deliver → done
|
|
13
13
|
\`\`\``;
|
|
14
|
-
export const CORE_CAPABILITIES = `Tell RYUX what you are doing; RYUX decides what it needs to know
|
|
15
|
-
file, then only the knowledge modules the task needs (task table below); paths are relative to this skill's folder.
|
|
14
|
+
export const CORE_CAPABILITIES = `Tell RYUX what you are doing; RYUX decides what it needs to know (no task named: offer three concrete tasks for this project as choices,
|
|
15
|
+
from DESIGN.md and the repo's screens). Pick the entry point, read its file, then only the knowledge modules the task needs (task table below); paths are relative to this skill's folder.
|
|
16
16
|
|
|
17
17
|
| Entry point | When | Read |
|
|
18
18
|
| --- | --- | --- |
|
|
@@ -25,9 +25,8 @@ file, then only the knowledge modules the task needs (task table below); paths a
|
|
|
25
25
|
Knowledge modules (\`knowledge/\`): product, ux, interaction, forms, edge-cases, content, ui,
|
|
26
26
|
design-system, accessibility, responsive, frontend, and anti-slop. Evidence comes from the brief, the
|
|
27
27
|
project, product data, standards, and the ryux MCP when connected; none is required. Every entry point ends at the quality gates: the Hard
|
|
28
|
-
Gates below and the Delivery Gate, with anti-slop as the last check, never the starting point.
|
|
29
|
-
|
|
30
|
-
Keep them apart: Analyze says what exists, Design what to do, Critique if it is right, QA if it matches.`;
|
|
28
|
+
Gates below and the Delivery Gate, with anti-slop as the last check, never the starting point. Keep them apart:
|
|
29
|
+
Analyze says what exists, Design what to do, Critique if it is right, QA if it matches.`;
|
|
31
30
|
export const CORE_PRINCIPLE = `Novelty is not a goal; a recognisable brand layer is: familiar structure, distinct surface.
|
|
32
31
|
Optimize for clarity, usability, consistency, product fit, accessibility, and intentional decisions.
|
|
33
32
|
Understand the context first; keep observed facts apart from assumptions; prefer evidence over
|
|
@@ -44,7 +43,7 @@ export const CORE_WORKFLOW = `One workflow, six stages; each entry point runs th
|
|
|
44
43
|
3. **Explore**: on a new or complex surface, two or three alternatives that differ in hypothesis and
|
|
45
44
|
structure, not paint; reference screens through the ryux MCP when connected. A small change skips it.
|
|
46
45
|
4. **Evaluate and select**: rate the alternatives against the Frame criteria with evidence
|
|
47
|
-
(RX-PR-09, RX-PR-10); the user picks; write the Decision Receipt.
|
|
46
|
+
(RX-PR-09, RX-PR-10); the user picks from options (capabilities/design.md); write the Decision Receipt.
|
|
48
47
|
5. **Build and critique**: design or implement the choice, render, inspect, and fix; Reconsider an
|
|
49
48
|
unchosen alternative when a finding contradicts the choice, and say why.
|
|
50
49
|
6. **Verify and deliver**: Hard Gates, the Delivery Gate, honest claims, and a user test plan (RX-UX-12).
|
|
@@ -73,7 +72,11 @@ The six stages of the core workflow (SKILL.md), as Design runs them.
|
|
|
73
72
|
(character, or brand colour and type) or the motion direction, ask for it in that message (it
|
|
74
73
|
counts toward the three) instead of choosing it yourself. **No DESIGN.md and no product docs is the
|
|
75
74
|
case where these questions matter most, never a reason to skip them:** ask, then wait for the
|
|
76
|
-
answer before designing. Complete context means no questions.
|
|
75
|
+
answer before designing. Complete context means no questions.
|
|
76
|
+
**Ask as choices.** When you ask, or the user picks (stage 4, Reconsider), use the agent's
|
|
77
|
+
question or choice tool if it has one: two to four options per question, the recommended one
|
|
78
|
+
first and labeled, and room for the user's own answer. Without such a tool, write numbered
|
|
79
|
+
options with the recommendation first, so the user can answer with a number. Never ask what the prompt, DESIGN.md, or the
|
|
77
80
|
product docs already answer. For the rest, make the smallest reasonable assumption, write it
|
|
78
81
|
down, and continue (RX-PR-01, RX-PR-02).
|
|
79
82
|
**Record direction answers.** When the user answers a UI or motion direction question, write the
|
|
@@ -85,7 +88,8 @@ The six stages of the core workflow (SKILL.md), as Design runs them.
|
|
|
85
88
|
**What exists.** When there is a screen, product, or design system already, read its
|
|
86
89
|
analysis or run Analyze first (capabilities/analyze.md). Existing screens, components, and any
|
|
87
90
|
screenshot or reference provided are your examples: read them before choosing patterns, take
|
|
88
|
-
their principles, and never copy their facts.
|
|
91
|
+
their principles, and never copy their facts. A request to copy a screenshot as it is goes to
|
|
92
|
+
Build as a recreate (capabilities/build.md, step 2). Understand before you design. When the task
|
|
89
93
|
redesigns or improves what exists, list what works and keep it; change only what has a named
|
|
90
94
|
problem (RX-UX-10).
|
|
91
95
|
**Modules.** Read the modules the task needs from the task table before deciding anything, for example ux,
|
|
@@ -115,7 +119,8 @@ The six stages of the core workflow (SKILL.md), as Design runs them.
|
|
|
115
119
|
- A small change, or a screen inside a fixed design system, skips Explore: say so and continue.
|
|
116
120
|
4. **Evaluate and select.** Rate each alternative against the Frame criteria, Strong, Adequate, or
|
|
117
121
|
Weak with one reason each, rate the evidence (RX-PR-10), and recommend one with a Decision Receipt.
|
|
118
|
-
"It looks better" is not a reason. Then stop and let the user choose
|
|
122
|
+
"It looks better" is not a reason. Then stop and let the user choose, with the alternatives as
|
|
123
|
+
options and your recommendation first (stage 1, "Ask as choices"). Build only the chosen one
|
|
119
124
|
into the full design (states, widths, Visual Brief, RX-UI-10), write the Design Direction
|
|
120
125
|
below, and mark the others on the canvas as not chosen. When the user has already said to pick for
|
|
121
126
|
them, continue with the recommendation and say so.
|
|
@@ -130,7 +135,8 @@ The six stages of the core workflow (SKILL.md), as Design runs them.
|
|
|
130
135
|
roles, spacing, radius, and type sizes and families before the first frame, and components for
|
|
131
136
|
repeated elements (RX-DS-03). Building the system does not replace the states: design every
|
|
132
137
|
state that matters (empty, loading, error, including content that fails to load) and every width
|
|
133
|
-
you claim, and source assets on purpose (RX-UI-13)
|
|
138
|
+
you claim, and source assets on purpose (RX-UI-13); illustration follows a written style and is
|
|
139
|
+
made as one set (RX-UI-17, RX-UI-18).
|
|
134
140
|
**Render and inspect.** Screenshot what you made, check it against the direction and the rules,
|
|
135
141
|
fix, and render again (capabilities/qa.md). Then, on the render:
|
|
136
142
|
- Literal values: turn each into a variable or name the exception (RX-DS-03).
|
|
@@ -244,7 +250,7 @@ Dissent evidence only one source holds, or the case for an option not chose
|
|
|
244
250
|
Evidence names its count and never generalizes past it. "Evidence None, Confidence Low, Why:
|
|
245
251
|
business priority was not provided" is a valid receipt; keep it visible instead of upgrading it.
|
|
246
252
|
|
|
247
|
-
Visual, motion, and asset rules and tables live in knowledge/ui.md (RX-UI-07 to RX-UI-
|
|
253
|
+
Visual, motion, and asset rules and tables live in knowledge/ui.md (RX-UI-07 to RX-UI-19); this
|
|
248
254
|
direction only records the choices made with them.`;
|
|
249
255
|
export const BUILD_BODY = `# RYUX Build
|
|
250
256
|
|
|
@@ -259,10 +265,15 @@ workflow (SKILL.md); Frame, Explore, and Evaluate happen in Design.
|
|
|
259
265
|
2. **Find the design source**: the Design Direction, a Figma or pen.dev design, a DESIGN.md, or an
|
|
260
266
|
approved mockup; it is the spec. If there is none, run Design's Frame, Explore, and Evaluate
|
|
261
267
|
first (capabilities/design.md, stages 2-4) instead of inventing one in code.
|
|
268
|
+
A screenshot or another product's page is a reference, not the spec, unless the user asks to
|
|
269
|
+
recreate it ("recreate", "match this", "samakan"). Then match it, let QA compare at the same
|
|
270
|
+
viewport, and still leave out another product's brand, logo, and content (RX-AS-11). With no word
|
|
271
|
+
either way, design from its principles and write "reference, not recreate" in Assumptions.
|
|
262
272
|
3. **Read the modules the task needs** from the task table: for example accessibility, responsive,
|
|
263
273
|
and edge-cases for any UI, and forms and content for a form. When the build adds motion or
|
|
264
274
|
transitions, read knowledge/ui.md (RX-UI-11) before writing any: how often the surface is seen
|
|
265
|
-
decides how much it moves.
|
|
275
|
+
decides how much it moves. When it adds illustration, read RX-UI-19: SVG coloured from tokens,
|
|
276
|
+
no text inside, alt text that says the meaning.
|
|
266
277
|
4. **Implement faithfully.** Use semantic elements, existing components, and real data paths.
|
|
267
278
|
Build must not invent business rules, prices, or limits; API behavior or response shapes; or
|
|
268
279
|
data presented as real (RX-FE-02, RX-PR-02). It must not silently change a design decision: a
|
|
@@ -493,7 +504,7 @@ gates in ryux-anti-slop). It works in four layers.
|
|
|
493
504
|
4. **Density**: compact for repeat work, roomier for first-time or high-stakes decisions.
|
|
494
505
|
5. **Color**: roles first (surface, text, accent for the primary action, status); contrast checked.
|
|
495
506
|
6. **Containers**: use a container only when it groups or separates something.
|
|
496
|
-
7. **Icons**: next to labels, from one set, at consistent sizes.
|
|
507
|
+
7. **Icons**: next to labels, from one set, at consistent sizes, one meaning each (RX-UI-20).
|
|
497
508
|
|
|
498
509
|
**Justify values.** Every value comes from the scale and has a reason you can say in one line:
|
|
499
510
|
"12px between these two fields because they belong together; 24px before the next group because it
|
|
@@ -617,6 +628,11 @@ Sources: reference screen_ids or the analysis it came from
|
|
|
617
628
|
A generated image is illustrative art; never present it as a real customer or a real product
|
|
618
629
|
screen (RX-UI-07).
|
|
619
630
|
|
|
631
|
+
**Illustration.** With no brand system to follow, write the style in five lines before the first
|
|
632
|
+
drawing, plus a character system when it has people or a mascot, and record it as a Decision
|
|
633
|
+
Receipt (RX-UI-17); make a set together and compare it side by side (RX-UI-18), and ship it as SVG
|
|
634
|
+
coloured from tokens, with no text inside and alt text that says the meaning (RX-UI-19).
|
|
635
|
+
|
|
620
636
|
Does not cover: component reuse and tokens (see ryux-design-system).`,
|
|
621
637
|
"design-system": `Prioritize the existing system. Before creating anything:
|
|
622
638
|
|
|
@@ -708,6 +724,11 @@ Card radius | 16px | 8px | half the radius | minor
|
|
|
708
724
|
|
|
709
725
|
**Without a reference**, check the build against its own intent and the rules below.
|
|
710
726
|
|
|
727
|
+
**Illustration** (when the build has any): it matches the written style (RX-UI-17), a set reads as one
|
|
728
|
+
family side by side (RX-UI-18), it reads at its real displayed size including the smallest width, it
|
|
729
|
+
works in every theme, and nothing the user needs exists only in the image (RX-UI-19). Without a
|
|
730
|
+
render, report these as NOT VERIFIED.
|
|
731
|
+
|
|
711
732
|
**Loop**: implement → render → compare → fix → render again.
|
|
712
733
|
|
|
713
734
|
**Render with what is available**, in this order: the project's own preview or test setup;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ryuxdsgn/design-intelligence",
|
|
3
|
-
"version": "2.13.
|
|
3
|
+
"version": "2.13.8",
|
|
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": {
|