roast-my-design-system 9.2.5 → 9.2.6
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/README.md
CHANGED
|
@@ -142,11 +142,11 @@ Eleven reports, hosted exactly as the tool writes them. Every number determinist
|
|
|
142
142
|
|
|
143
143
|
The full report for vercel/ai-chatbot. The verdict answers what the agent will learn here, the gap section comes first, then "What the repo teaches the agent", Claude's read of the scan:
|
|
144
144
|
|
|
145
|
-

|
|
146
146
|
|
|
147
147
|
The same report in light mode (one file, built-in toggle):
|
|
148
148
|
|
|
149
|
-

|
|
150
150
|
|
|
151
151
|
## Why the numbers hold
|
|
152
152
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "roast-my-design-system",
|
|
3
|
-
"version": "9.2.
|
|
3
|
+
"version": "9.2.6",
|
|
4
4
|
"mcpName": "io.github.gregkozakiewicz/roast-my-design-system",
|
|
5
5
|
"description": "Your AI can write the UI. This makes sure it writes your UI. A deterministic scanner scores your design system 0-100 against 112 public repos, reads React and web components (Stencil, Lit), hands you a copy-paste fix prompt for each top finding, writes rules for Claude, Cursor, Copilot and Windsurf with --apply, and runs as a local MCP server with --mcp.",
|
|
6
6
|
"keywords": [
|
|
@@ -1534,7 +1534,7 @@ function skippedLine() {
|
|
|
1534
1534
|
const parts = [];
|
|
1535
1535
|
if (skippedDirs.length) {
|
|
1536
1536
|
const list = skippedDirs.slice(0, 6).map((e) => `<span class="mono">${esc(e.dir)}/</span> (${n(e.files)} UI file${e.files === 1 ? '' : 's'})`).join(', ');
|
|
1537
|
-
parts.push(`<div class="excl">Left out by design: ${list}${skippedDirs.length > 6 ? ` and ${n(skippedDirs.length - 6)} more` : ''}. A docs site, a demo, an examples folder
|
|
1537
|
+
parts.push(`<div class="excl">Left out by design: ${list}${skippedDirs.length > 6 ? ` and ${n(skippedDirs.length - 6)} more` : ''}. A docs site, a demo, an examples folder, a replaced app or the templates a project generator copies out carries its own styling, which is not the product's design language.</div>`);
|
|
1538
1538
|
}
|
|
1539
1539
|
const ra = h.files?.readAnyway;
|
|
1540
1540
|
if (ra) parts.push(`<div class="excl"><span class="mono">${esc(ra.dir)}/</span> is normally left out, but it holds ${n(ra.files)} UI files, more than the rest of the repo, so it was read as the product.</div>`);
|
|
@@ -36,7 +36,7 @@ const SKIP_DIRS = new Set([
|
|
|
36
36
|
'examples', 'example', 'demos', 'demo', 'playground', 'fixtures',
|
|
37
37
|
// Test/fixture surfaces are not the product's design language — counting a
|
|
38
38
|
// story's `export const Default` 36× would poison the diagnosis numbers.
|
|
39
|
-
'__tests__', '__mocks__', '__fixtures__', '__snapshots__',
|
|
39
|
+
'__tests__', '__mocks__', '__fixtures__', '__testfixtures__', '__snapshots__',
|
|
40
40
|
'cypress', 'e2e', 'playwright', 'test', 'tests', '.storybook',
|
|
41
41
|
]);
|
|
42
42
|
|
|
@@ -78,6 +78,15 @@ const STYLE_EXTS = new Set(['.css', '.scss', '.sass', '.less']);
|
|
|
78
78
|
// (2026-09-17). Named in the report like any other skipped folder.
|
|
79
79
|
const LEGACY_DIR_RE = /^(?:old|legacy|deprecated|archive|archived)$|[-_](?:old|legacy|deprecated)$|^(?:old|legacy)[-_]/i;
|
|
80
80
|
|
|
81
|
+
// Scaffolding: the code a project generator copies into someone else's new
|
|
82
|
+
// repo, not the product. A starters/ folder, or a templates folder kept by a
|
|
83
|
+
// generator (create-app, a cli), a script or a dev tool: backstage's
|
|
84
|
+
// create-app/templates, the dashboard starter's scripts/cleanup-templates,
|
|
85
|
+
// BuilderIO's starters (133 duplicate copies). The name alone is not enough:
|
|
86
|
+
// backstage's scaffolder form templates, OpenCTI's case templates and
|
|
87
|
+
// nocobase's block templates are screens of the product (2026-09-30).
|
|
88
|
+
const SCAFFOLD_DIR_RE = /(^|\/)starters$|(^|\/)(?:create-[\w-]+|cli|scripts|dev|generators?)\/(?:[^/]+\/)*[\w-]*templates?$/i;
|
|
89
|
+
|
|
81
90
|
export function walkRepo(root, maxDepth = 14, exclusions = null, readAnyway = new Set()) {
|
|
82
91
|
const files = { code: [], styles: [], other: [] };
|
|
83
92
|
const excluded = exclusions?.match ?? (() => null);
|
|
@@ -135,6 +144,7 @@ export function walkRepo(root, maxDepth = 14, exclusions = null, readAnyway = ne
|
|
|
135
144
|
const p = join(dir, e.name);
|
|
136
145
|
if (e.name === 'public' && e.isDirectory() && !hasComponentSource(p)) continue;
|
|
137
146
|
const rel = relative(root, p).replaceAll('\\', '/');
|
|
147
|
+
if (e.isDirectory() && SCAFFOLD_DIR_RE.test(rel)) { countSkipped(p, rel); continue; }
|
|
138
148
|
const hit = excluded(rel);
|
|
139
149
|
if (hit) {
|
|
140
150
|
if (e.isDirectory()) countExcluded(p, depth + 1, hit);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Single version constant for the engine — imported by diagnose (report
|
|
2
2
|
// footer) and rules (generated-by line). This is the bump spot that used to
|
|
3
3
|
// live as a const inside diagnose/index.mjs.
|
|
4
|
-
export const VERSION = '9.2.
|
|
4
|
+
export const VERSION = '9.2.6';
|
|
5
5
|
// The shape of harvest.json and summary.json. Bumped only when a field is
|
|
6
6
|
// renamed, removed or changes meaning; a new field is not a new schema. A
|
|
7
7
|
// tool comparing two scans compares like with like by this number, not by VERSION.
|