roast-my-design-system 5.2.4 → 5.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.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # roast-my-design-system
2
2
 
3
- [![npm](https://img.shields.io/npm/v/roast-my-design-system?color=2dd4bf&label=npm)](https://www.npmjs.com/package/roast-my-design-system) [![downloads](https://img.shields.io/npm/dm/roast-my-design-system?color=2dd4bf&label=downloads)](https://www.npmjs.com/package/roast-my-design-system) [![Socket](https://badge.socket.dev/npm/package/roast-my-design-system)](https://socket.dev/npm/package/roast-my-design-system) [![license](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
3
+ [![npm](https://img.shields.io/npm/v/roast-my-design-system?color=2dd4bf&label=npm)](https://www.npmjs.com/package/roast-my-design-system) [![downloads](https://img.shields.io/npm/dm/roast-my-design-system?color=2dd4bf&label=downloads)](https://www.npmjs.com/package/roast-my-design-system) [![Socket](https://badge.socket.dev/npm/package/roast-my-design-system)](https://socket.dev/npm/package/roast-my-design-system) [![license](https://img.shields.io/badge/license-MIT-blue)](LICENSE) [![zero dependencies](https://img.shields.io/badge/dependencies-0-2dd4bf)](https://www.npmjs.com/package/roast-my-design-system?activeTab=dependencies) [![no telemetry](https://img.shields.io/badge/no-telemetry-2dd4bf)](https://github.com/gregkozakiewicz/roast-my-design-system#what-makes-the-numbers-trustworthy)
4
4
 
5
5
  ## Your AI can write the UI. This makes sure it writes *your* UI.
6
6
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "roast-my-design-system",
3
- "version": "5.2.4",
3
+ "version": "5.3.0",
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 34 public repos, writes rules for Claude, Cursor, Copilot and Windsurf with --apply, and runs as a local MCP server with --mcp.",
6
6
  "keywords": [
@@ -516,6 +516,28 @@ function spacingTrap() {
516
516
  }
517
517
  return '';
518
518
  }
519
+ function coloursTrap() {
520
+ if (nearPairs.length < 6) return '';
521
+ return trapBox(`This palette holds ${nearPairs.length} pairs of colours a screen can barely tell apart. An agent asked for the brand grey cannot see the difference either, so it copies whichever twin is nearest, and when unsure it invents a third between them. Twins breed triplets.`);
522
+ }
523
+ function inlineTrap() {
524
+ if (inline.count < 50) return '';
525
+ return trapBox(`${n(inline.count)} inline styles live where the system should. An agent learns a codebase by example, and every inline style is an example that says the system is optional. Each exception it copies becomes the precedent for the next one.`);
526
+ }
527
+ function importantTrap() {
528
+ if (important.count < 20) return '';
529
+ return trapBox(`${n(important.count)} !important declarations, and each one is a shouting match a previous developer decided to win by force. An agent whose style will not apply does what the repo taught it and shouts louder. The volume in this codebase only goes up.`);
530
+ }
531
+ function orphansTrap() {
532
+ if (neverImported.length < 10) return '';
533
+ return trapBox(`${neverImported.length} components are never imported anywhere. An agent searching for a Button finds the abandoned ones alongside the canonical one with nothing to tell them apart, so yesterday's dead end becomes today's example.`);
534
+ }
535
+ // At most three traps per report, in severity order: scarcity is what makes
536
+ // the marker readable as a warning rather than wallpaper.
537
+ function trapsBlock() {
538
+ return [dupesTrap(), spacingTrap(), coloursTrap(), inlineTrap(), importantTrap(), orphansTrap()]
539
+ .filter(Boolean).slice(0, 3).join('');
540
+ }
519
541
 
520
542
  function spacingBars() {
521
543
  const hasTw = twSpacing.length > 0;
@@ -1379,7 +1401,7 @@ ${whereToStartSection()}
1379
1401
 
1380
1402
  ${giftSection()}
1381
1403
 
1382
- ${dupesTrap()}${spacingTrap()}
1404
+ ${trapsBlock()}
1383
1405
 
1384
1406
  <div class="stats">${bigStats.map((s) => statTile(s)).join('')}</div>
1385
1407
 
@@ -1,4 +1,4 @@
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 = '5.2.4';
4
+ export const VERSION = '5.3.0';