@ryuxdsgn/design-intelligence 2.19.0 → 2.19.2

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.
@@ -281,8 +281,12 @@ workflow (SKILL.md); Frame, Explore, and Evaluate happen in Design.
281
281
  used (where components, state, pure logic, and data access live), and the test runner
282
282
  (knowledge/frontend.md, knowledge/design-system.md). Reuse before creating.
283
283
  2. **Find the design source**: the Design Direction, a Figma or pen.dev design, a DESIGN.md, or an
284
- approved mockup; it is the spec. If there is none, run Design's Frame, Explore, and Evaluate
285
- first (capabilities/design.md, stages 2-4) instead of inventing one in code.
284
+ approved mockup; it is the spec. If there is none, run Design's stages 1-4 first
285
+ (capabilities/design.md) instead of inventing one in code. Stage 1's questions come first even
286
+ when the request is a quick build or a working prototype: ask the ones whose answers change what
287
+ gets built (a product rule such as fees, refunds, or what happens on failure; the market; the
288
+ data), at most three, in one message, and wait. A prototype may skip only the choice between
289
+ directions: build the recommended one and name the alternatives you did not build.
286
290
  A screenshot or another product's page is a reference, not the spec, unless the user asks to
287
291
  recreate it ("recreate", "match this", "samakan"). Then match it, let QA compare at the same
288
292
  viewport, and still leave out another product's brand, logo, and content (RX-AS-11). With no word
package/dist/scan.js CHANGED
@@ -2,6 +2,8 @@
2
2
  // contents, returns findings, no LLM and no network. Each detector names the RX rule it checks; the
3
3
  // rule text stays in intelligence/content.ts. "fail" is for a pattern that is wrong wherever it
4
4
  // appears; "warn" is for a signal a person or agent should look at.
5
+ const INDONESIAN = /\blang=["']id\b|\bid-ID\b|\blocale\s*[:=]\s*["'`]id\b|\bRp\.?\s?\d|\b(?:yang|untuk|tidak|silakan|pesanan|belum)\b/;
6
+ const TEST_FILE = /(?:^|\/)(?:tests?|__tests__)\/|\.(?:test|spec)\.[cm]?[jt]sx?$/;
5
7
  /** What `ryux scan <url>` measures on the rendered page (cli/page-probe.ts), for --list-rules and the
6
8
  * rule text. */
7
9
  export const RENDER_CHECKS = [
@@ -92,9 +94,9 @@ export const DETECTORS = [
92
94
  {
93
95
  rule: "RX-CD-09",
94
96
  level: "warn",
95
- looksFor: "dates as 10/02/2026 and times as 2:30 PM in copy",
97
+ looksFor: "dates as 10/02/2026 and times as 2:30 PM in Indonesian copy (lang id, id-ID, Rupiah, or Indonesian words in the folder); test files are skipped",
96
98
  exts: CODE,
97
- find: ({ text }) => matches(text, [
99
+ find: ({ path, text }, ctx) => TEST_FILE.test(path) || !(ctx.indonesian ?? INDONESIAN.test(text)) ? [] : matches(text, [
98
100
  [/(?<![\d/])\d{1,2}\/\d{1,2}\/\d{4}(?![\d/])/, (m) => `"${m[0]}": in Indonesian copy write 2 Okt 2026 (other markets follow their locale)`],
99
101
  [/\b\d{1,2}[:.]\d{2}\s?(?:AM|PM|am|pm)\b/, (m) => `"${m[0]}": in Indonesian copy write 14.30 in 24-hour form (other markets follow their locale)`],
100
102
  ]),
@@ -318,7 +320,10 @@ function lineCol(raw, index) {
318
320
  /** Run every detector over the sources. Findings are ordered by file, then line. */
319
321
  export function scanSources(sources, opts) {
320
322
  const ctx = opts.folder
321
- ? { reducedMotion: sources.some((s) => /prefers-reduced-motion|motion-(?:reduce|safe):|useReducedMotion|reducedMotion/.test(s.text)) }
323
+ ? {
324
+ reducedMotion: sources.some((s) => /prefers-reduced-motion|motion-(?:reduce|safe):|useReducedMotion|reducedMotion/.test(s.text)),
325
+ indonesian: sources.some((s) => !TEST_FILE.test(s.path) && INDONESIAN.test(s.text)),
326
+ }
322
327
  : {};
323
328
  const findings = [];
324
329
  for (const src of sources) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuxdsgn/design-intelligence",
3
- "version": "2.19.0",
3
+ "version": "2.19.2",
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": {