roast-my-design-system 3.9.0 → 3.10.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
@@ -25,11 +25,11 @@ Your AI agent (Claude, Cursor, Copilot) builds UI by imitating what's already in
25
25
 
26
26
  The full report for vercel/ai-chatbot, top to bottom:
27
27
 
28
- ![The full diagnosis report for vercel/ai-chatbot in dark mode: health score, three-yardstick tiles, palette forensics, spacing receipts, typography, offenders, duplicates, and the where-to-start close](https://raw.githubusercontent.com/pencilrebel/roast-my-design-system/main/assets/report-full-dark.png?v=3.9.0)
28
+ ![The full diagnosis report for vercel/ai-chatbot in dark mode: health score, three-yardstick tiles, palette forensics, spacing receipts, typography, offenders, duplicates, and the where-to-start close](https://raw.githubusercontent.com/pencilrebel/roast-my-design-system/main/assets/report-full-dark.png?v=3.10.0)
29
29
 
30
30
  The same report in light mode (one file, built-in toggle):
31
31
 
32
- ![The diagnosis report in light mode](https://raw.githubusercontent.com/pencilrebel/roast-my-design-system/main/assets/report-light-hero.png?v=3.9.0)
32
+ ![The diagnosis report in light mode](https://raw.githubusercontent.com/pencilrebel/roast-my-design-system/main/assets/report-light-hero.png?v=3.10.0)
33
33
 
34
34
  ## What makes the numbers trustworthy
35
35
 
@@ -38,7 +38,7 @@ The same report in light mode (one file, built-in toggle):
38
38
  - **No network, no telemetry.** Everything runs locally. Nothing about your code leaves your machine.
39
39
  - **Honest exclusions.** Test files, Storybook stories, docs sites, example apps, SVG artwork, and email templates (which *must* inline styles) are excluded, so you can't discredit the numbers on a technicality.
40
40
  - **Intent-aware counting (v3).** Runtime-computed inline styles, compound-component APIs and wrapper components are not crimes and are not counted as ones. Token-led repos are judged on their hardcoded strays, not their token architecture. Repeated arbitrary values are read as decisions without names, not drift.
41
- - **A real benchmark.** The "Avg Design System" yardstick comes from scanning 30 public React repos (cal.com, excalidraw, outline, twenty, dub, langfuse…). Median: 96 colours, 14 greys, 14 duplicated components, 42 inline style blocks, 91 arbitrary Tailwind values.
41
+ - **A real benchmark.** The "Avg Design System" yardstick comes from scanning 30 public React repos (cal.com, excalidraw, outline, twenty, dub, langfuse…). Median: 96 colours, 14 greys, 14 duplicated components, 45 inline style blocks, 91 arbitrary Tailwind values.
42
42
  - **A second yardstick: reputable systems.** Curated, scoped scans of 10 well-known design systems (shadcn/ui, Primer, Polaris, Carbon, Material UI, Chakra, Ant Design, GOV.UK, Spectrum, Cloudscape) show what disciplined looks like at scale.
43
43
 
44
44
  ## Install
@@ -119,9 +119,9 @@ Three real roasts of public repos, hosted as-is (the same self-contained HTML th
119
119
  | Typefaces | 2–3 | 2 | 1 |
120
120
  | Border radii | up to 10 | 12 | 2 |
121
121
  | Duplicated components | 0 | 14 | 10 |
122
- | Inline style blocks | 0 | 42 | 12 |
122
+ | Inline style blocks | 0 | 45 | 12 |
123
123
  | Arbitrary Tailwind values | ~20 | 91 | 0 |
124
- | Near-identical colour pairs | 0 | 2 | 1 |
124
+ | Near-identical colour pairs | 0 | 3 | 1 |
125
125
  | !important declarations | 0 | 5 | 3 |
126
126
  | Components never imported | 0 | 0 | 0 |
127
127
 
@@ -133,4 +133,4 @@ MIT. The code is yours to fork, modify and redistribute; the copyright notice tr
133
133
 
134
134
  **roast-my-design-system**™ and the GK mark are trademarks of Greg Kozakiewicz. Forking is welcome, republishing under this name is not: see [brand and attribution](https://pencilrebel.github.io/roast-my-design-system/brand.html).
135
135
 
136
- Built and designed by <a href="https://gregkozakiewicz.com"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/pencilrebel/roast-my-design-system/main/assets/gk-mark-dark.png?v=3.9.0"><img src="https://raw.githubusercontent.com/pencilrebel/roast-my-design-system/main/assets/gk-mark.png?v=3.9.0" height="15" alt="GK mark"></picture> Greg Kozakiewicz</a>.
136
+ Built and designed by <a href="https://gregkozakiewicz.com"><picture><source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/pencilrebel/roast-my-design-system/main/assets/gk-mark-dark.png?v=3.10.0"><img src="https://raw.githubusercontent.com/pencilrebel/roast-my-design-system/main/assets/gk-mark.png?v=3.10.0" height="15" alt="GK mark"></picture> Greg Kozakiewicz</a>.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "roast-my-design-system",
3
- "version": "3.9.0",
3
+ "version": "3.10.0",
4
4
  "description": "Roast your design system with real data. A deterministic, zero-dependency scanner that counts everything that betrays a design system, from colours and their near-identical twins to greys, spacing values, typefaces, duplicated and never-imported components, inline styles, !important and arbitrary Tailwind values, scores it 0-100 against Ideal Design System norms and a 30-repo benchmark, generates a shareable HTML diagnosis, and with --rules writes the agent rules file (CLAUDE.md, .cursor/rules) that stops the mess coming back.",
5
5
  "keywords": [
6
6
  "design-system",
@@ -1,5 +1,5 @@
1
1
  {
2
- "builtAt": "2026-08-03T16:33:32.652Z",
2
+ "builtAt": "2026-08-03T22:23:05.232Z",
3
3
  "repoCount": 30,
4
4
  "ideal2026": {
5
5
  "colors": {
@@ -103,12 +103,12 @@
103
103
  50,
104
104
  61,
105
105
  69,
106
- 78,
106
+ 87,
107
107
  89,
108
- 102,
108
+ 103,
109
109
  112,
110
110
  137,
111
- 142,
111
+ 145,
112
112
  154,
113
113
  169,
114
114
  169,
@@ -119,7 +119,7 @@
119
119
  303,
120
120
  385,
121
121
  403,
122
- 1645
122
+ 1649
123
123
  ],
124
124
  "p25": 38,
125
125
  "median": 96,
@@ -133,10 +133,10 @@
133
133
  0,
134
134
  0,
135
135
  2,
136
- 2,
137
136
  3,
138
137
  4,
139
138
  4,
139
+ 4,
140
140
  5,
141
141
  8,
142
142
  8,
@@ -186,12 +186,12 @@
186
186
  34,
187
187
  37,
188
188
  50,
189
- 51,
190
- 54,
189
+ 52,
191
190
  55,
191
+ 58,
192
192
  59,
193
193
  61,
194
- 64,
194
+ 70,
195
195
  78,
196
196
  82,
197
197
  84,
@@ -199,7 +199,7 @@
199
199
  ],
200
200
  "p25": 9,
201
201
  "median": 27,
202
- "p75": 55,
202
+ "p75": 57,
203
203
  "p90": 78
204
204
  },
205
205
  "typefaces": {
@@ -268,7 +268,7 @@
268
268
  28,
269
269
  33,
270
270
  35,
271
- 37,
271
+ 39,
272
272
  39,
273
273
  49,
274
274
  61
@@ -276,7 +276,7 @@
276
276
  "p25": 8,
277
277
  "median": 16,
278
278
  "p75": 27,
279
- "p90": 37
279
+ "p90": 39
280
280
  },
281
281
  "radii": {
282
282
  "values": [
@@ -303,8 +303,8 @@
303
303
  20,
304
304
  20,
305
305
  21,
306
- 22,
307
- 24,
306
+ 25,
307
+ 25,
308
308
  25,
309
309
  26,
310
310
  26,
@@ -372,25 +372,25 @@
372
372
  8,
373
373
  10,
374
374
  17,
375
- 17,
376
375
  19,
377
376
  20,
378
377
  21,
379
- 22,
380
378
  23,
379
+ 23,
380
+ 30,
381
381
  38,
382
- 45,
383
- 59,
382
+ 61,
383
+ 65,
384
384
  92,
385
- 95,
385
+ 99,
386
386
  103,
387
387
  115,
388
- 189
388
+ 208
389
389
  ],
390
390
  "p25": 1,
391
391
  "median": 14,
392
- "p75": 34,
393
- "p90": 96
392
+ "p75": 36,
393
+ "p90": 99
394
394
  },
395
395
  "inlineStyles": {
396
396
  "values": [
@@ -403,16 +403,16 @@
403
403
  5,
404
404
  7,
405
405
  11,
406
- 18,
407
- 22,
406
+ 20,
408
407
  23,
409
408
  23,
410
- 37,
409
+ 26,
411
410
  41,
412
411
  43,
413
412
  46,
414
- 47,
413
+ 48,
415
414
  51,
415
+ 57,
416
416
  69,
417
417
  71,
418
418
  76,
@@ -420,15 +420,15 @@
420
420
  82,
421
421
  117,
422
422
  119,
423
- 122,
423
+ 168,
424
424
  173,
425
425
  1178,
426
- 2923
426
+ 3033
427
427
  ],
428
428
  "p25": 8,
429
- "median": 42,
429
+ "median": 45,
430
430
  "p75": 78,
431
- "p90": 127
431
+ "p90": 169
432
432
  },
433
433
  "arbitrary": {
434
434
  "values": [
@@ -444,29 +444,29 @@
444
444
  4,
445
445
  16,
446
446
  26,
447
- 27,
447
+ 28,
448
448
  60,
449
449
  78,
450
450
  103,
451
451
  125,
452
452
  148,
453
- 164,
454
- 164,
453
+ 175,
454
+ 196,
455
455
  234,
456
456
  271,
457
457
  321,
458
458
  380,
459
459
  407,
460
- 468,
461
- 470,
462
460
  492,
463
- 561,
464
- 1751
461
+ 574,
462
+ 621,
463
+ 642,
464
+ 1753
465
465
  ],
466
466
  "p25": 0,
467
467
  "median": 91,
468
468
  "p75": 309,
469
- "p90": 472
469
+ "p90": 579
470
470
  },
471
471
  "nearPairs": {
472
472
  "values": [
@@ -480,16 +480,16 @@
480
480
  0,
481
481
  0,
482
482
  0,
483
- 0,
484
483
  1,
485
484
  1,
486
485
  2,
487
486
  2,
488
487
  2,
488
+ 4,
489
489
  9,
490
490
  12,
491
491
  13,
492
- 13,
492
+ 14,
493
493
  15,
494
494
  16,
495
495
  23,
@@ -499,10 +499,10 @@
499
499
  47,
500
500
  49,
501
501
  70,
502
- 146
502
+ 152
503
503
  ],
504
504
  "p25": 0,
505
- "median": 2,
505
+ "median": 3,
506
506
  "p75": 21,
507
507
  "p90": 47
508
508
  },
@@ -567,9 +567,9 @@
567
567
  5,
568
568
  7,
569
569
  10,
570
+ 11,
570
571
  13,
571
- 22,
572
- 22,
572
+ 16,
573
573
  26,
574
574
  36,
575
575
  39,
@@ -579,7 +579,7 @@
579
579
  ],
580
580
  "p25": 0,
581
581
  "median": 0,
582
- "p75": 20,
582
+ "p75": 13,
583
583
  "p90": 40
584
584
  },
585
585
  "components": {
@@ -597,35 +597,35 @@
597
597
  342,
598
598
  350,
599
599
  417,
600
- 555,
600
+ 606,
601
601
  637,
602
602
  777,
603
603
  796,
604
604
  836,
605
605
  936,
606
- 940,
607
606
  962,
608
607
  970,
608
+ 1046,
609
609
  1052,
610
610
  1081,
611
- 1216,
612
- 1379,
613
611
  1414,
614
- 1619,
615
- 2134,
616
- 2566
612
+ 1456,
613
+ 1551,
614
+ 1708,
615
+ 2530,
616
+ 2669
617
617
  ],
618
618
  "p25": 233,
619
619
  "median": 707,
620
- "p75": 1032,
621
- "p90": 1435
620
+ "p75": 1051,
621
+ "p90": 1567
622
622
  }
623
623
  },
624
624
  "repos": [
625
625
  {
626
626
  "repo": "calcom/cal.com",
627
627
  "designSystem": "custom",
628
- "codeFiles": 4341,
628
+ "codeFiles": 4389,
629
629
  "metrics": {
630
630
  "colors": 385,
631
631
  "greys": 77,
@@ -877,52 +877,52 @@
877
877
  {
878
878
  "repo": "dubinc/dub",
879
879
  "designSystem": "custom",
880
- "codeFiles": 3526,
880
+ "codeFiles": 3974,
881
881
  "metrics": {
882
- "colors": 102,
882
+ "colors": 103,
883
883
  "greys": 14,
884
- "spacing": 54,
884
+ "spacing": 58,
885
885
  "typefaces": 3,
886
- "fontSizes": 37,
887
- "radii": 22,
886
+ "fontSizes": 39,
887
+ "radii": 25,
888
888
  "shadows": 0,
889
- "exactDuplicates": 17,
890
- "inlineStyles": 47,
891
- "arbitrary": 470,
892
- "nearPairs": 13,
889
+ "exactDuplicates": 23,
890
+ "inlineStyles": 48,
891
+ "arbitrary": 621,
892
+ "nearPairs": 14,
893
893
  "important": 1,
894
- "neverImported": 22,
895
- "components": 1379
894
+ "neverImported": 16,
895
+ "components": 1551
896
896
  }
897
897
  },
898
898
  {
899
899
  "repo": "formbricks/formbricks",
900
900
  "designSystem": "custom",
901
- "codeFiles": 2051,
901
+ "codeFiles": 2336,
902
902
  "metrics": {
903
- "colors": 142,
903
+ "colors": 145,
904
904
  "greys": 18,
905
- "spacing": 51,
905
+ "spacing": 52,
906
906
  "typefaces": 2,
907
907
  "fontSizes": 28,
908
908
  "radii": 25,
909
909
  "shadows": 6,
910
- "exactDuplicates": 59,
911
- "inlineStyles": 18,
912
- "arbitrary": 164,
910
+ "exactDuplicates": 61,
911
+ "inlineStyles": 20,
912
+ "arbitrary": 196,
913
913
  "nearPairs": 13,
914
914
  "important": 83,
915
915
  "neverImported": 0,
916
- "components": 940
916
+ "components": 1046
917
917
  }
918
918
  },
919
919
  {
920
920
  "repo": "openstatusHQ/openstatus",
921
921
  "designSystem": "custom",
922
- "codeFiles": 1916,
922
+ "codeFiles": 1948,
923
923
  "metrics": {
924
- "colors": 78,
925
- "greys": 2,
924
+ "colors": 87,
925
+ "greys": 4,
926
926
  "spacing": 9,
927
927
  "typefaces": 3,
928
928
  "fontSizes": 14,
@@ -930,8 +930,8 @@
930
930
  "shadows": 0,
931
931
  "exactDuplicates": 92,
932
932
  "inlineStyles": 119,
933
- "arbitrary": 164,
934
- "nearPairs": 0,
933
+ "arbitrary": 175,
934
+ "nearPairs": 4,
935
935
  "important": 0,
936
936
  "neverImported": 5,
937
937
  "components": 1081
@@ -940,7 +940,7 @@
940
940
  {
941
941
  "repo": "lukevella/rallly",
942
942
  "designSystem": "custom",
943
- "codeFiles": 692,
943
+ "codeFiles": 734,
944
944
  "metrics": {
945
945
  "colors": 26,
946
946
  "greys": 4,
@@ -951,17 +951,17 @@
951
951
  "shadows": 0,
952
952
  "exactDuplicates": 10,
953
953
  "inlineStyles": 23,
954
- "arbitrary": 27,
954
+ "arbitrary": 28,
955
955
  "nearPairs": 2,
956
956
  "important": 0,
957
- "neverImported": 22,
958
- "components": 555
957
+ "neverImported": 11,
958
+ "components": 606
959
959
  }
960
960
  },
961
961
  {
962
962
  "repo": "mfts/papermark",
963
963
  "designSystem": "shadcn",
964
- "codeFiles": 1354,
964
+ "codeFiles": 1365,
965
965
  "metrics": {
966
966
  "colors": 42,
967
967
  "greys": 9,
@@ -982,7 +982,7 @@
982
982
  {
983
983
  "repo": "elie222/inbox-zero",
984
984
  "designSystem": "custom",
985
- "codeFiles": 1821,
985
+ "codeFiles": 1822,
986
986
  "metrics": {
987
987
  "colors": 154,
988
988
  "greys": 24,
@@ -1045,28 +1045,28 @@
1045
1045
  {
1046
1046
  "repo": "twentyhq/twenty",
1047
1047
  "designSystem": "library",
1048
- "codeFiles": 15132,
1048
+ "codeFiles": 17131,
1049
1049
  "metrics": {
1050
- "colors": 1645,
1050
+ "colors": 1649,
1051
1051
  "greys": 100,
1052
1052
  "spacing": 24,
1053
1053
  "typefaces": 7,
1054
1054
  "fontSizes": 20,
1055
1055
  "radii": 26,
1056
1056
  "shadows": 19,
1057
- "exactDuplicates": 22,
1058
- "inlineStyles": 122,
1057
+ "exactDuplicates": 30,
1058
+ "inlineStyles": 168,
1059
1059
  "arbitrary": 0,
1060
- "nearPairs": 146,
1060
+ "nearPairs": 152,
1061
1061
  "important": 9,
1062
1062
  "neverImported": 0,
1063
- "components": 2134
1063
+ "components": 2530
1064
1064
  }
1065
1065
  },
1066
1066
  {
1067
1067
  "repo": "langfuse/langfuse",
1068
1068
  "designSystem": "custom",
1069
- "codeFiles": 2774,
1069
+ "codeFiles": 2780,
1070
1070
  "metrics": {
1071
1071
  "colors": 170,
1072
1072
  "greys": 4,
@@ -1087,28 +1087,28 @@
1087
1087
  {
1088
1088
  "repo": "teableio/teable",
1089
1089
  "designSystem": "custom",
1090
- "codeFiles": 4742,
1090
+ "codeFiles": 5100,
1091
1091
  "metrics": {
1092
1092
  "colors": 246,
1093
1093
  "greys": 34,
1094
- "spacing": 64,
1094
+ "spacing": 70,
1095
1095
  "typefaces": 3,
1096
1096
  "fontSizes": 35,
1097
- "radii": 24,
1097
+ "radii": 25,
1098
1098
  "shadows": 10,
1099
- "exactDuplicates": 45,
1100
- "inlineStyles": 37,
1101
- "arbitrary": 468,
1099
+ "exactDuplicates": 65,
1100
+ "inlineStyles": 57,
1101
+ "arbitrary": 642,
1102
1102
  "nearPairs": 70,
1103
1103
  "important": 42,
1104
1104
  "neverImported": 0,
1105
- "components": 1216
1105
+ "components": 1456
1106
1106
  }
1107
1107
  },
1108
1108
  {
1109
1109
  "repo": "makeplane/plane",
1110
1110
  "designSystem": "custom",
1111
- "codeFiles": 3086,
1111
+ "codeFiles": 3271,
1112
1112
  "metrics": {
1113
1113
  "colors": 403,
1114
1114
  "greys": 32,
@@ -1117,13 +1117,13 @@
1117
1117
  "fontSizes": 24,
1118
1118
  "radii": 21,
1119
1119
  "shadows": 4,
1120
- "exactDuplicates": 95,
1121
- "inlineStyles": 22,
1122
- "arbitrary": 561,
1120
+ "exactDuplicates": 99,
1121
+ "inlineStyles": 26,
1122
+ "arbitrary": 574,
1123
1123
  "nearPairs": 16,
1124
1124
  "important": 74,
1125
1125
  "neverImported": 7,
1126
- "components": 1619
1126
+ "components": 1708
1127
1127
  }
1128
1128
  },
1129
1129
  {
@@ -1150,7 +1150,7 @@
1150
1150
  {
1151
1151
  "repo": "lobehub/lobe-chat",
1152
1152
  "designSystem": "library",
1153
- "codeFiles": 8344,
1153
+ "codeFiles": 8458,
1154
1154
  "metrics": {
1155
1155
  "colors": 303,
1156
1156
  "greys": 37,
@@ -1159,13 +1159,13 @@
1159
1159
  "fontSizes": 2,
1160
1160
  "radii": 1,
1161
1161
  "shadows": 0,
1162
- "exactDuplicates": 189,
1163
- "inlineStyles": 2923,
1162
+ "exactDuplicates": 208,
1163
+ "inlineStyles": 3033,
1164
1164
  "arbitrary": 0,
1165
1165
  "nearPairs": 9,
1166
1166
  "important": 0,
1167
1167
  "neverImported": 0,
1168
- "components": 2566
1168
+ "components": 2669
1169
1169
  }
1170
1170
  },
1171
1171
  {
@@ -1192,7 +1192,7 @@
1192
1192
  {
1193
1193
  "repo": "midday-ai/midday",
1194
1194
  "designSystem": "custom",
1195
- "codeFiles": 1762,
1195
+ "codeFiles": 1775,
1196
1196
  "metrics": {
1197
1197
  "colors": 169,
1198
1198
  "greys": 31,
@@ -1203,7 +1203,7 @@
1203
1203
  "shadows": 2,
1204
1204
  "exactDuplicates": 103,
1205
1205
  "inlineStyles": 117,
1206
- "arbitrary": 1751,
1206
+ "arbitrary": 1753,
1207
1207
  "nearPairs": 12,
1208
1208
  "important": 0,
1209
1209
  "neverImported": 26,
@@ -1213,7 +1213,7 @@
1213
1213
  {
1214
1214
  "repo": "triggerdotdev/trigger.dev",
1215
1215
  "designSystem": "custom",
1216
- "codeFiles": 2366,
1216
+ "codeFiles": 2369,
1217
1217
  "metrics": {
1218
1218
  "colors": 137,
1219
1219
  "greys": 18,
@@ -1254,7 +1254,7 @@
1254
1254
  }
1255
1255
  ],
1256
1256
  "referenceSystems": {
1257
- "builtAt": "2026-08-03T16:33:34.617Z",
1257
+ "builtAt": "2026-08-03T22:23:19.377Z",
1258
1258
  "count": 10,
1259
1259
  "note": "Curated scoped scans of reputable public design systems. Not comparable head-to-head with product repos: see per-system notes.",
1260
1260
  "stats": {
@@ -36,7 +36,7 @@ const GK_MASK = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqa
36
36
  const GK_MARK = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAACXBIWXMAAAAAAAAAAQCEeRdzAAACPklEQVR4nOVWTYh5URR/PlJYEKV8LKwkZalsmI2dZmMnK8pKmaZ87JSanexEkayUhSxsZyfJNBQ7UYqVhSShfM+v/6mXmtU81+p/Frfze+/d3++ce88993Hcf2cikehZ1GazWafTPUVDLBZjLBQKnU6HMTVvcrl8Op3ebrdsNgsokUiYUVP4Pp/v9s96vd79cwZGK95sNkkgGAwC2u12lhrY3u12C/b1ei2TyV5eXjabjV6vZ6BBa51MJin8arUKWKlU4H99fSkUCo5JUQ2HQxJwuVzIYLVawcdIVSs8CQoNpMQ+Go0Aw+EwwXw+D+h2u4Vr0LRSqUSMqVQKsN1uE3Q4HEql8ng8BgIBTnDhqlSqxWIBuvP5bDAYLBbL5XIBHAwGeBuJRODvdjun0/nnPOjraDRK8TYaDcBMJkMwFosBfn9/E0wkEn9OgjYgnU6fTidQwAGcTCbw9/u9VqvFUYB/vV5RskajkRNcTiaTKR6PI9j5fE7xlstlPM/lcgTr9ToneJ/5oOB4PB70O8Tb7/f9fv9sNqPkXl9fhQsQ9f1ktVqNvUVCxA6ZRxsf5pMAxnsuVBSOwvv7+6Phk0PsBNn0OOLC9haLReqdvBL/wUNKNPnt7Q0LjeVutVqhUEij0TwU9W8BVA4JUEUul8tarcZGhpbIarWiSeA0HQ4Hkvn4+GB56VMvov6DA+z1eplR89btdsE+Ho9tNhv3jOv+8/MTFz06M3ypVMqMnTfcwPhn4djG/tue+Mf4RGom9gMt6lAx16huIwAAAABJRU5ErkJggg==';
37
37
 
38
38
  // Shown in the report footer; keep in step with plugin.json when releasing.
39
- const VERSION = '3.9.0';
39
+ const VERSION = '3.10.0';
40
40
 
41
41
  // Report identity. The scan id is a stable digest of this scan's shape, salted
42
42
  // with the report namespace, so the same repo scanned twice reads the same and
@@ -29,8 +29,17 @@ const TEST_FILE_RE = /\.(test|spec|stories|story|cy)\.[cm]?[jt]sx?$/;
29
29
  const CODE_EXTS = new Set(['.tsx', '.jsx', '.ts', '.js', '.mjs', '.cjs']);
30
30
  const STYLE_EXTS = new Set(['.css', '.scss', '.sass', '.less']);
31
31
 
32
- /** Walk the repo, returning relative paths bucketed by role. Depth-capped. */
33
- export function walkRepo(root, maxDepth = 8) {
32
+ /**
33
+ * Walk the repo, returning relative paths bucketed by role.
34
+ *
35
+ * Depth-capped as a guard against pathological trees, not as a scoping choice.
36
+ * The cap has to clear a monorepo's own overhead: two levels are spent reaching
37
+ * apps/web before the app's routes even begin, and a Next.js route can nest six
38
+ * deep on its own. At 8 that silently dropped 11-12% of the files in dub,
39
+ * twenty and formbricks. Measured across the fleet, file counts stop growing at
40
+ * 12; 14 leaves headroom. Single-package repos are unaffected either way.
41
+ */
42
+ export function walkRepo(root, maxDepth = 14) {
34
43
  const files = { code: [], styles: [], other: [] };
35
44
  const recurse = (dir, depth) => {
36
45
  if (depth > maxDepth) return;