@rookcom/monarch-conformance 0.0.0-stage → 0.3.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.
Files changed (51) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +4 -2
  3. package/dist/check.d.ts +81 -0
  4. package/dist/check.d.ts.map +1 -0
  5. package/dist/check.js +350 -0
  6. package/dist/check.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +175 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/glob.d.ts +3 -0
  12. package/dist/glob.d.ts.map +1 -0
  13. package/dist/glob.js +70 -0
  14. package/dist/glob.js.map +1 -0
  15. package/dist/index.d.ts +9 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +8 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/monarch-components.d.ts +122 -0
  20. package/dist/monarch-components.d.ts.map +1 -0
  21. package/dist/monarch-components.js +47 -0
  22. package/dist/monarch-components.js.map +1 -0
  23. package/dist/registry.d.ts +77 -0
  24. package/dist/registry.d.ts.map +1 -0
  25. package/dist/registry.js +259 -0
  26. package/dist/registry.js.map +1 -0
  27. package/dist/report.d.ts +8 -0
  28. package/dist/report.d.ts.map +1 -0
  29. package/dist/report.js +122 -0
  30. package/dist/report.js.map +1 -0
  31. package/dist/rules.d.ts +155 -0
  32. package/dist/rules.d.ts.map +1 -0
  33. package/dist/rules.js +685 -0
  34. package/dist/rules.js.map +1 -0
  35. package/dist/schema.d.ts +24 -0
  36. package/dist/schema.d.ts.map +1 -0
  37. package/dist/schema.js +91 -0
  38. package/dist/schema.js.map +1 -0
  39. package/dist/semver.d.ts +27 -0
  40. package/dist/semver.d.ts.map +1 -0
  41. package/dist/semver.js +235 -0
  42. package/dist/semver.js.map +1 -0
  43. package/dist/types.d.ts +54 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +2 -0
  46. package/dist/types.js.map +1 -0
  47. package/dist/version.d.ts +3 -0
  48. package/dist/version.d.ts.map +1 -0
  49. package/dist/version.js +10 -0
  50. package/dist/version.js.map +1 -0
  51. package/package.json +48 -4
package/CHANGELOG.md ADDED
@@ -0,0 +1,21 @@
1
+ # @rookcom/monarch-conformance
2
+
3
+ ## 0.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - New rule `icons/no-sparkles` (error): Rook does not use sparkle icons. Flags `Sparkles`, `Sparkle`, `WandSparkles` and its old name `Wand2` imported from lucide-react, Radix icons, react-icons or Heroicons (aliases included). Use `Bot` for AI features.
8
+
9
+ ## 0.2.0
10
+
11
+ ### Minor Changes
12
+
13
+ - a2d52a3: Tokens: contrast is now measured on 8-bit colour as browsers paint it, so no pair passes in maths and fails on screen (Rook Blue `info` was 4.48:1 in the browser).
14
+
15
+ Conformance: recognises the new components and patterns as Monarch primitives; `monarch-ignore-next-line` skips comment-only lines so it can sit next to `eslint-disable-next-line`; 4-digit numbers like `Order #1042` are no longer reported as colours.
16
+
17
+ - Packages move to the public npm registry as `@rookcom/monarch-*` (were `@rookhq/monarch-*` on GitHub Packages). Apps install with plain `npm ci`; no registry token is needed. Releases are published from CI with npm trusted publishing and provenance.
18
+
19
+ ### Patch Changes
20
+
21
+ - 6918d34: Fewer false positives in two accessibility rules. `a11y/click-without-key` no longer flags option, menuitem, tab, treeitem and gridcell items in files that use `aria-activedescendant`, where the focused container handles the keys. `a11y/outline-none-without-ring` accepts a `focus-within` ring, outline, border or shadow on a wrapper up to 15 lines above. Across the 20 registered apps this removes 12 and 21 findings respectively, all checked by hand.
package/README.md CHANGED
@@ -1,3 +1,5 @@
1
- # Temporary Holding Version
1
+ # @rookcom/monarch-conformance
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ `monarch check | registry validate | registry verify | registry report`.
4
+ Text, JSON and SARIF output; baseline ratchet; registry exceptions. No
5
+ runtime dependencies. Docs: ../../docs/guides/conformance.md
@@ -0,0 +1,81 @@
1
+ import type { Compatibility, Deprecation, Finding, MonarchConfig, ProductException, RuleSetting, Severity } from './types.js';
2
+ export declare const SCANNED_EXTENSIONS: Set<string>;
3
+ export declare const SKIPPED_DIRS: Set<string>;
4
+ /** Tests and stories legitimately contain colour literals and odd markup. */
5
+ export declare const DEFAULT_EXCLUDE: string[];
6
+ export interface CheckOptions {
7
+ readonly root: string;
8
+ readonly include?: readonly string[];
9
+ readonly exclude?: readonly string[];
10
+ readonly rules?: Readonly<Record<string, RuleSetting>>;
11
+ readonly exceptions?: readonly ProductException[];
12
+ readonly compatibility?: Compatibility;
13
+ readonly deprecations?: readonly Deprecation[];
14
+ readonly baseline?: Baseline;
15
+ readonly product?: string;
16
+ /** Injectable clock so expiry tests are deterministic. */
17
+ readonly today?: string;
18
+ }
19
+ export interface Baseline {
20
+ readonly version: 1;
21
+ readonly tool: string;
22
+ readonly createdAt: string;
23
+ /** file → rule → count */
24
+ readonly counts: Readonly<Record<string, Readonly<Record<string, number>>>>;
25
+ }
26
+ export interface ExceptionReport extends ProductException {
27
+ readonly status: 'active' | 'expired';
28
+ readonly suppressed: number;
29
+ }
30
+ export interface CheckResult {
31
+ readonly tool: {
32
+ readonly name: string;
33
+ readonly version: string;
34
+ };
35
+ readonly generatedAt: string;
36
+ readonly root: string;
37
+ readonly product: string | null;
38
+ readonly git: {
39
+ readonly commit: string | null;
40
+ readonly dirty: boolean | null;
41
+ };
42
+ readonly filesScanned: number;
43
+ readonly linesScanned: number;
44
+ readonly findings: readonly Finding[];
45
+ readonly counts: {
46
+ readonly byRule: Readonly<Record<string, number>>;
47
+ readonly bySeverity: Readonly<Record<Severity, number>>;
48
+ /** Findings not covered by the baseline. */
49
+ readonly new: Readonly<Record<Severity, number>>;
50
+ };
51
+ /** Findings per 1,000 scanned lines, by rule. A density, not a score. */
52
+ readonly densityPer1kLines: Readonly<Record<string, number>>;
53
+ readonly suppressed: {
54
+ readonly inline: number;
55
+ readonly exceptions: number;
56
+ };
57
+ readonly exceptions: readonly ExceptionReport[];
58
+ readonly baseline: null | {
59
+ readonly createdAt: string;
60
+ readonly covered: number;
61
+ /** (file, rule) groups now below their baseline count: the baseline can be tightened. */
62
+ readonly improved: number;
63
+ };
64
+ /** Paths that import Monarch CSS (used by registry verify). */
65
+ readonly monarchCssImports: readonly string[];
66
+ readonly exitCode: 0 | 1;
67
+ }
68
+ export declare function walk(root: string, include: readonly string[], exclude: readonly string[]): string[];
69
+ export declare function gitState(root: string): {
70
+ commit: string | null;
71
+ dirty: boolean | null;
72
+ };
73
+ export declare function readJson<T>(path: string): T;
74
+ export declare function loadConfig(path: string): MonarchConfig | null;
75
+ export declare function monarchDependencies(root: string): Record<string, {
76
+ spec: string;
77
+ installed: string | null;
78
+ }>;
79
+ export declare function check(opts: CheckOptions): CheckResult;
80
+ export declare function makeBaseline(result: CheckResult): Baseline;
81
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"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"}
package/dist/check.js ADDED
@@ -0,0 +1,350 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
3
+ import { extname, join, relative, sep } from 'node:path';
4
+ import { matchesAny } from './glob.js';
5
+ import { RULES, readSuppressions, ruleMatches, scanFile, } from './rules.js';
6
+ import { compare, format, minVersion, parseVersion, satisfies } from './semver.js';
7
+ import { TOOL_NAME, VERSION } from './version.js';
8
+ export const SCANNED_EXTENSIONS = new Set([
9
+ '.ts',
10
+ '.tsx',
11
+ '.js',
12
+ '.jsx',
13
+ '.mjs',
14
+ '.cjs',
15
+ '.css',
16
+ '.scss',
17
+ ]);
18
+ export const SKIPPED_DIRS = new Set([
19
+ 'node_modules',
20
+ '.next',
21
+ '.git',
22
+ 'dist',
23
+ 'build',
24
+ 'out',
25
+ 'coverage',
26
+ '.turbo',
27
+ '.vercel',
28
+ '.open-next',
29
+ '.wrangler',
30
+ 'storybook-static',
31
+ 'generated',
32
+ '__generated__',
33
+ ]);
34
+ const GENERATED_FILE = /(?:\.d\.ts|\.min\.(?:js|css)|\.generated\.[a-z]+|\.gen\.[a-z]+)$/;
35
+ const MAX_FILE_BYTES = 1_000_000;
36
+ /** Tests and stories legitimately contain colour literals and odd markup. */
37
+ export const DEFAULT_EXCLUDE = [
38
+ '**/*.test.*',
39
+ '**/*.spec.*',
40
+ '**/__tests__/**',
41
+ '**/*.stories.*',
42
+ '**/__mocks__/**',
43
+ ];
44
+ function toPosix(p) {
45
+ return p.split(sep).join('/');
46
+ }
47
+ export function walk(root, include, exclude) {
48
+ const files = [];
49
+ const visit = (abs) => {
50
+ let st;
51
+ try {
52
+ st = statSync(abs);
53
+ }
54
+ catch {
55
+ return;
56
+ }
57
+ const rel = toPosix(relative(root, abs));
58
+ if (rel && matchesAny(rel, exclude))
59
+ return;
60
+ if (st.isDirectory()) {
61
+ for (const name of readdirSync(abs).sort()) {
62
+ if (SKIPPED_DIRS.has(name))
63
+ continue;
64
+ visit(join(abs, name));
65
+ }
66
+ }
67
+ else if (st.isFile()) {
68
+ if (!SCANNED_EXTENSIONS.has(extname(abs)))
69
+ return;
70
+ if (GENERATED_FILE.test(abs) || st.size > MAX_FILE_BYTES)
71
+ return;
72
+ files.push(rel);
73
+ }
74
+ };
75
+ for (const inc of include.length ? include : ['.'])
76
+ visit(join(root, inc));
77
+ return [...new Set(files)].sort();
78
+ }
79
+ export function gitState(root) {
80
+ try {
81
+ const commit = execFileSync('git', ['-C', root, 'rev-parse', 'HEAD'], {
82
+ encoding: 'utf8',
83
+ stdio: ['ignore', 'pipe', 'ignore'],
84
+ }).trim();
85
+ const status = execFileSync('git', ['-C', root, 'status', '--porcelain', '--untracked-files=no'], {
86
+ encoding: 'utf8',
87
+ stdio: ['ignore', 'pipe', 'ignore'],
88
+ maxBuffer: 64 * 1024 * 1024,
89
+ });
90
+ return { commit, dirty: status.trim().length > 0 };
91
+ }
92
+ catch {
93
+ return { commit: null, dirty: null };
94
+ }
95
+ }
96
+ export function readJson(path) {
97
+ return JSON.parse(readFileSync(path, 'utf8'));
98
+ }
99
+ export function loadConfig(path) {
100
+ return existsSync(path) ? readJson(path) : null;
101
+ }
102
+ export function monarchDependencies(root) {
103
+ const pkgPath = join(root, 'package.json');
104
+ if (!existsSync(pkgPath))
105
+ return {};
106
+ const pkg = readJson(pkgPath);
107
+ const out = {};
108
+ for (const [name, spec] of Object.entries({ ...pkg.devDependencies, ...pkg.dependencies })) {
109
+ if (!name.startsWith('@rookcom/monarch-'))
110
+ continue;
111
+ let installed = null;
112
+ const installedPkg = join(root, 'node_modules', name, 'package.json');
113
+ if (existsSync(installedPkg))
114
+ installed = readJson(installedPkg).version ?? null;
115
+ out[name] = { spec, installed };
116
+ }
117
+ return out;
118
+ }
119
+ function lineOf(text, needle) {
120
+ const idx = text.indexOf(needle);
121
+ return idx === -1 ? 1 : text.slice(0, idx).split('\n').length;
122
+ }
123
+ /** deps/monarch-version: one finding per Monarch dependency (or one "not adopted"). */
124
+ function scanDependencies(root, compat) {
125
+ const pkgPath = join(root, 'package.json');
126
+ if (!existsSync(pkgPath))
127
+ return [];
128
+ const text = readFileSync(pkgPath, 'utf8');
129
+ const deps = monarchDependencies(root);
130
+ const rule = 'deps/monarch-version';
131
+ const mk = (severity, line, message) => ({
132
+ rule,
133
+ severity,
134
+ file: 'package.json',
135
+ line,
136
+ column: 1,
137
+ message,
138
+ snippet: text.split('\n')[line - 1]?.trim() ?? '',
139
+ });
140
+ const names = Object.keys(deps);
141
+ if (names.length === 0)
142
+ return [mk('info', 1, 'No @rookcom/monarch-* dependency: product has not adopted Monarch')];
143
+ const out = [];
144
+ for (const name of names) {
145
+ const { spec, installed } = deps[name];
146
+ const line = lineOf(text, `"${name}"`);
147
+ const resolved = installed ? parseVersion(installed) : minVersion(spec);
148
+ const entry = compat?.packages[name];
149
+ if (!compat)
150
+ continue;
151
+ if (!entry) {
152
+ out.push(mk('error', line, `${name} is not a known Monarch package`));
153
+ continue;
154
+ }
155
+ if (!resolved) {
156
+ out.push(mk('warn', line, `${name}@${spec}: cannot determine version (pin an exact semver release)`));
157
+ continue;
158
+ }
159
+ const ver = format(resolved);
160
+ if (!satisfies(resolved, entry.supported)) {
161
+ out.push(mk('error', line, `${name}@${ver} is outside the supported range ${entry.supported}`));
162
+ continue;
163
+ }
164
+ const dep = entry.deprecated?.find((d) => satisfies(resolved, d.range));
165
+ if (dep) {
166
+ out.push(mk('warn', line, `${name}@${ver} is deprecated: ${dep.message}`));
167
+ continue;
168
+ }
169
+ const current = parseVersion(entry.current);
170
+ if (current && compare(resolved, current) < 0) {
171
+ out.push(mk('info', line, `${name}@${ver} is supported; ${entry.current} is available`));
172
+ }
173
+ }
174
+ return out;
175
+ }
176
+ const MONARCH_CSS_IMPORT = /@rookcom\/monarch-tokens\/(?:css|dist\/css)/;
177
+ export function check(opts) {
178
+ const root = opts.root;
179
+ const today = opts.today ?? new Date().toISOString().slice(0, 10);
180
+ const settings = opts.rules ?? {};
181
+ const deprecations = opts.deprecations ?? [];
182
+ const files = walk(root, opts.include ?? ['.'], [...DEFAULT_EXCLUDE, ...(opts.exclude ?? [])]);
183
+ let linesScanned = 0;
184
+ const findings = [];
185
+ let inlineSuppressed = 0;
186
+ const monarchCssImports = [];
187
+ const severityFor = (rule, raw) => {
188
+ const s = settings[rule];
189
+ if (s === 'off')
190
+ return null;
191
+ if (s)
192
+ return s;
193
+ return raw ?? RULES[rule]?.severity ?? 'warn';
194
+ };
195
+ for (const file of files) {
196
+ const text = readFileSync(join(root, file), 'utf8');
197
+ const lines = text.split(/\r?\n/);
198
+ linesScanned += lines.length;
199
+ if (MONARCH_CSS_IMPORT.test(text))
200
+ monarchCssImports.push(file);
201
+ const raw = scanFile({ file, ext: extname(file), text, lines, deprecations });
202
+ const suppressions = readSuppressions(lines);
203
+ for (const s of suppressions) {
204
+ if (!s.reason || s.rules.length === 0) {
205
+ const sev = severityFor('governance/suppression-without-reason', undefined);
206
+ if (sev)
207
+ findings.push({
208
+ rule: 'governance/suppression-without-reason',
209
+ severity: sev,
210
+ file,
211
+ line: s.line,
212
+ column: s.column,
213
+ message: s.rules.length === 0
214
+ ? 'Suppression names no rule'
215
+ : 'Suppression has no `-- reason`; it is ignored',
216
+ snippet: (lines[s.line - 1] ?? '').trim().slice(0, 200),
217
+ });
218
+ }
219
+ }
220
+ for (const r of raw) {
221
+ const sev = severityFor(r.rule, r.severity);
222
+ if (!sev)
223
+ continue;
224
+ const sup = suppressions.find((s) => s.target === r.line && s.reason && s.rules.some((p) => ruleMatches(p, r.rule)));
225
+ if (sup) {
226
+ inlineSuppressed++;
227
+ continue;
228
+ }
229
+ findings.push({
230
+ rule: r.rule,
231
+ severity: sev,
232
+ file,
233
+ line: r.line,
234
+ column: r.column,
235
+ message: r.message,
236
+ snippet: (lines[r.line - 1] ?? '').trim().slice(0, 200),
237
+ });
238
+ }
239
+ }
240
+ for (const f of scanDependencies(root, opts.compatibility)) {
241
+ const sev = severityFor(f.rule, f.severity);
242
+ if (sev)
243
+ findings.push({ ...f, severity: sev });
244
+ }
245
+ // Registry exceptions: active ones suppress, expired ones are findings.
246
+ const exceptionReports = [];
247
+ let exceptionSuppressed = 0;
248
+ let kept = findings;
249
+ for (const ex of opts.exceptions ?? []) {
250
+ const expired = ex.expires < today;
251
+ let suppressed = 0;
252
+ if (!expired) {
253
+ kept = kept.filter((f) => {
254
+ const hit = ruleMatches(ex.rule, f.rule) && matchesAny(f.file, ex.paths);
255
+ if (hit)
256
+ suppressed++;
257
+ return !hit;
258
+ });
259
+ exceptionSuppressed += suppressed;
260
+ }
261
+ else {
262
+ const sev = severityFor('governance/expired-exception', undefined);
263
+ if (sev)
264
+ kept.push({
265
+ rule: 'governance/expired-exception',
266
+ severity: sev,
267
+ file: 'monarch-registry',
268
+ line: 1,
269
+ column: 1,
270
+ message: `Exception for ${ex.rule} on ${ex.paths.join(', ')} (owner ${ex.owner}) expired ${ex.expires}`,
271
+ snippet: ex.reason,
272
+ });
273
+ }
274
+ exceptionReports.push({ ...ex, status: expired ? 'expired' : 'active', suppressed });
275
+ }
276
+ // Baseline ratchet: the first N findings of each (file, rule) group are known.
277
+ let covered = 0;
278
+ let improved = 0;
279
+ if (opts.baseline) {
280
+ const groups = new Map();
281
+ for (const f of kept) {
282
+ const k = `${f.file}\u0000${f.rule}`;
283
+ const list = groups.get(k) ?? [];
284
+ list.push(f);
285
+ groups.set(k, list);
286
+ }
287
+ for (const [k, list] of groups) {
288
+ const [file, rule] = k.split('\u0000');
289
+ const allowed = opts.baseline.counts[file]?.[rule] ?? 0;
290
+ list.sort((a, b) => a.line - b.line || a.column - b.column);
291
+ list.forEach((f, i) => {
292
+ if (i < allowed) {
293
+ f.baselined = true;
294
+ covered++;
295
+ }
296
+ });
297
+ }
298
+ for (const [file, rules] of Object.entries(opts.baseline.counts)) {
299
+ for (const [rule, n] of Object.entries(rules)) {
300
+ if ((groups.get(`${file}\u0000${rule}`)?.length ?? 0) < n)
301
+ improved++;
302
+ }
303
+ }
304
+ }
305
+ kept.sort((a, b) => a.file.localeCompare(b.file) ||
306
+ a.line - b.line ||
307
+ a.column - b.column ||
308
+ a.rule.localeCompare(b.rule));
309
+ const byRule = {};
310
+ const bySeverity = { error: 0, warn: 0, info: 0 };
311
+ const fresh = { error: 0, warn: 0, info: 0 };
312
+ for (const f of kept) {
313
+ byRule[f.rule] = (byRule[f.rule] ?? 0) + 1;
314
+ bySeverity[f.severity]++;
315
+ if (!f.baselined)
316
+ fresh[f.severity]++;
317
+ }
318
+ const density = {};
319
+ for (const [r, c] of Object.entries(byRule)) {
320
+ density[r] = linesScanned ? Math.round((c / linesScanned) * 1000 * 100) / 100 : 0;
321
+ }
322
+ return {
323
+ tool: { name: TOOL_NAME, version: VERSION },
324
+ generatedAt: new Date().toISOString(),
325
+ root,
326
+ product: opts.product ?? null,
327
+ git: gitState(root),
328
+ filesScanned: files.length,
329
+ linesScanned,
330
+ findings: kept,
331
+ counts: { byRule, bySeverity, new: fresh },
332
+ densityPer1kLines: density,
333
+ suppressed: { inline: inlineSuppressed, exceptions: exceptionSuppressed },
334
+ exceptions: exceptionReports,
335
+ baseline: opts.baseline ? { createdAt: opts.baseline.createdAt, covered, improved } : null,
336
+ monarchCssImports,
337
+ exitCode: fresh.error > 0 ? 1 : 0,
338
+ };
339
+ }
340
+ export function makeBaseline(result) {
341
+ const counts = {};
342
+ for (const f of result.findings) {
343
+ if (f.severity === 'info')
344
+ continue;
345
+ const byRule = (counts[f.file] ??= {});
346
+ byRule[f.rule] = (byRule[f.rule] ?? 0) + 1;
347
+ }
348
+ return { version: 1, tool: `${TOOL_NAME}@${VERSION}`, createdAt: result.generatedAt, counts };
349
+ }
350
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export declare function main(argv: string[]): number;
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA4JA,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAsB3C"}