llm-mock-server 1.0.6 → 1.0.7

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 (250) hide show
  1. package/dist/cli/cli.d.ts +3 -0
  2. package/dist/cli/cli.d.ts.map +1 -0
  3. package/dist/cli/cli.js +103 -0
  4. package/dist/cli/cli.js.map +1 -0
  5. package/dist/cli/validators.d.ts +7 -0
  6. package/dist/cli/validators.d.ts.map +1 -0
  7. package/dist/cli/validators.js +53 -0
  8. package/dist/cli/validators.js.map +1 -0
  9. package/dist/formats/anthropic/index.d.ts +1 -1
  10. package/dist/formats/anthropic/index.d.ts.map +1 -1
  11. package/dist/formats/anthropic/index.js +1 -1
  12. package/dist/formats/anthropic/index.js.map +1 -1
  13. package/dist/formats/anthropic/parse.d.ts +2 -2
  14. package/dist/formats/anthropic/parse.d.ts.map +1 -1
  15. package/dist/formats/anthropic/parse.js +4 -2
  16. package/dist/formats/anthropic/parse.js.map +1 -1
  17. package/dist/formats/anthropic/schema.d.ts +1 -1
  18. package/dist/formats/anthropic/schema.d.ts.map +1 -1
  19. package/dist/formats/anthropic/schema.js +9 -4
  20. package/dist/formats/anthropic/schema.js.map +1 -1
  21. package/dist/formats/anthropic/serialize.d.ts +2 -2
  22. package/dist/formats/anthropic/serialize.d.ts.map +1 -1
  23. package/dist/formats/anthropic/serialize.js +76 -19
  24. package/dist/formats/anthropic/serialize.js.map +1 -1
  25. package/dist/formats/openai/chat-completions/index.d.ts +3 -0
  26. package/dist/formats/openai/chat-completions/index.d.ts.map +1 -0
  27. package/dist/formats/openai/chat-completions/index.js +13 -0
  28. package/dist/formats/openai/chat-completions/index.js.map +1 -0
  29. package/dist/formats/openai/chat-completions/parse.d.ts +4 -0
  30. package/dist/formats/openai/chat-completions/parse.d.ts.map +1 -0
  31. package/dist/formats/openai/chat-completions/parse.js +33 -0
  32. package/dist/formats/openai/chat-completions/parse.js.map +1 -0
  33. package/dist/formats/openai/chat-completions/schema.d.ts +93 -0
  34. package/dist/formats/openai/chat-completions/schema.d.ts.map +1 -0
  35. package/dist/formats/openai/chat-completions/schema.js +74 -0
  36. package/dist/formats/openai/chat-completions/schema.js.map +1 -0
  37. package/dist/formats/openai/chat-completions/serialize.d.ts +10 -0
  38. package/dist/formats/openai/chat-completions/serialize.d.ts.map +1 -0
  39. package/dist/formats/openai/chat-completions/serialize.js +99 -0
  40. package/dist/formats/openai/chat-completions/serialize.js.map +1 -0
  41. package/dist/formats/openai/responses/index.d.ts +3 -0
  42. package/dist/formats/openai/responses/index.d.ts.map +1 -0
  43. package/dist/formats/openai/responses/index.js +13 -0
  44. package/dist/formats/openai/responses/index.js.map +1 -0
  45. package/dist/formats/openai/responses/parse.d.ts +4 -0
  46. package/dist/formats/openai/responses/parse.d.ts.map +1 -0
  47. package/dist/formats/openai/responses/parse.js +51 -0
  48. package/dist/formats/openai/responses/parse.js.map +1 -0
  49. package/dist/formats/openai/responses/schema.d.ts +103 -0
  50. package/dist/formats/openai/responses/schema.d.ts.map +1 -0
  51. package/dist/formats/openai/responses/schema.js +71 -0
  52. package/dist/formats/openai/responses/schema.js.map +1 -0
  53. package/dist/formats/openai/responses/serialize.d.ts +10 -0
  54. package/dist/formats/openai/responses/serialize.d.ts.map +1 -0
  55. package/dist/formats/openai/responses/serialize.js +273 -0
  56. package/dist/formats/openai/responses/serialize.js.map +1 -0
  57. package/dist/formats/request-helpers.d.ts +1 -1
  58. package/dist/formats/request-helpers.d.ts.map +1 -1
  59. package/dist/formats/request-helpers.js.map +1 -1
  60. package/dist/formats/serialize-helpers.d.ts +1 -1
  61. package/dist/formats/serialize-helpers.d.ts.map +1 -1
  62. package/dist/formats/serialize-helpers.js +6 -3
  63. package/dist/formats/serialize-helpers.js.map +1 -1
  64. package/dist/formats/types.d.ts +2 -1
  65. package/dist/formats/types.d.ts.map +1 -1
  66. package/dist/history.d.ts +6 -2
  67. package/dist/history.d.ts.map +1 -1
  68. package/dist/history.js +2 -0
  69. package/dist/history.js.map +1 -1
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/loader.d.ts +1 -1
  73. package/dist/loader.d.ts.map +1 -1
  74. package/dist/loader.js +26 -9
  75. package/dist/loader.js.map +1 -1
  76. package/dist/logger.d.ts.map +1 -1
  77. package/dist/logger.js +12 -4
  78. package/dist/logger.js.map +1 -1
  79. package/dist/mock-server.d.ts +44 -48
  80. package/dist/mock-server.d.ts.map +1 -1
  81. package/dist/mock-server.js +37 -85
  82. package/dist/mock-server.js.map +1 -1
  83. package/dist/route-handler.d.ts +1 -1
  84. package/dist/route-handler.d.ts.map +1 -1
  85. package/dist/route-handler.js +19 -7
  86. package/dist/route-handler.js.map +1 -1
  87. package/dist/rule-builder.d.ts +21 -0
  88. package/dist/rule-builder.d.ts.map +1 -0
  89. package/dist/rule-builder.js +58 -0
  90. package/dist/rule-builder.js.map +1 -0
  91. package/dist/rule-engine.d.ts +3 -1
  92. package/dist/rule-engine.d.ts.map +1 -1
  93. package/dist/rule-engine.js +7 -2
  94. package/dist/rule-engine.js.map +1 -1
  95. package/dist/sse-writer.d.ts +1 -1
  96. package/dist/sse-writer.d.ts.map +1 -1
  97. package/dist/types/reply.d.ts +51 -8
  98. package/dist/types/reply.d.ts.map +1 -1
  99. package/dist/types/request.d.ts +21 -6
  100. package/dist/types/request.d.ts.map +1 -1
  101. package/dist/types/rule.d.ts +65 -7
  102. package/dist/types/rule.d.ts.map +1 -1
  103. package/dist/types.d.ts +3 -3
  104. package/dist/types.d.ts.map +1 -1
  105. package/package.json +15 -9
  106. package/.claude/skills/desloppify/SKILL.md +0 -308
  107. package/.desloppify/external_review_sessions/ext_20260315_000339_a6cdc3e6/canonical_import_20260315_000801.json +0 -242
  108. package/.desloppify/external_review_sessions/ext_20260315_000339_a6cdc3e6/canonical_import_20260315_000905.json +0 -248
  109. package/.desloppify/external_review_sessions/ext_20260315_000339_a6cdc3e6/canonical_import_20260315_000917.json +0 -248
  110. package/.desloppify/external_review_sessions/ext_20260315_000339_a6cdc3e6/canonical_import_20260315_000950.json +0 -311
  111. package/.desloppify/external_review_sessions/ext_20260315_000339_a6cdc3e6/claude_launch_prompt.md +0 -17
  112. package/.desloppify/external_review_sessions/ext_20260315_000339_a6cdc3e6/review_result.json +0 -255
  113. package/.desloppify/external_review_sessions/ext_20260315_000339_a6cdc3e6/review_result.template.json +0 -22
  114. package/.desloppify/external_review_sessions/ext_20260315_000339_a6cdc3e6/reviewer_instructions.md +0 -20
  115. package/.desloppify/external_review_sessions/ext_20260315_000339_a6cdc3e6/session.json +0 -20
  116. package/.desloppify/external_review_sessions/ext_20260315_045546_0587ea3b/canonical_import_20260315_050000.json +0 -286
  117. package/.desloppify/external_review_sessions/ext_20260315_045546_0587ea3b/canonical_import_20260315_050028.json +0 -303
  118. package/.desloppify/external_review_sessions/ext_20260315_045546_0587ea3b/claude_launch_prompt.md +0 -17
  119. package/.desloppify/external_review_sessions/ext_20260315_045546_0587ea3b/review_result.json +0 -297
  120. package/.desloppify/external_review_sessions/ext_20260315_045546_0587ea3b/review_result.template.json +0 -22
  121. package/.desloppify/external_review_sessions/ext_20260315_045546_0587ea3b/reviewer_instructions.md +0 -20
  122. package/.desloppify/external_review_sessions/ext_20260315_045546_0587ea3b/session.json +0 -20
  123. package/.desloppify/query.json +0 -1312
  124. package/.desloppify/review_packet_blind.json +0 -1249
  125. package/.desloppify/review_packets/holistic_packet_20260315_000339.json +0 -1471
  126. package/.desloppify/review_packets/holistic_packet_20260315_045546.json +0 -1480
  127. package/.desloppify/review_packets/holistic_packet_20260315_185401.json +0 -1407
  128. package/.desloppify/review_packets/holistic_packet_20260315_185613.json +0 -1407
  129. package/.desloppify/state-typescript.json +0 -8438
  130. package/.desloppify/state-typescript.json.bak +0 -8432
  131. package/.desloppify/subagents/runs/20260315_185401/logs/batch-1.log +0 -384
  132. package/.desloppify/subagents/runs/20260315_185401/logs/batch-10.log +0 -484
  133. package/.desloppify/subagents/runs/20260315_185401/logs/batch-2.log +0 -408
  134. package/.desloppify/subagents/runs/20260315_185401/logs/batch-3.log +0 -416
  135. package/.desloppify/subagents/runs/20260315_185401/logs/batch-4.log +0 -360
  136. package/.desloppify/subagents/runs/20260315_185401/logs/batch-5.log +0 -360
  137. package/.desloppify/subagents/runs/20260315_185401/logs/batch-6.log +0 -364
  138. package/.desloppify/subagents/runs/20260315_185401/logs/batch-7.log +0 -428
  139. package/.desloppify/subagents/runs/20260315_185401/logs/batch-8.log +0 -388
  140. package/.desloppify/subagents/runs/20260315_185401/logs/batch-9.log +0 -500
  141. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-1.md +0 -83
  142. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-10.md +0 -108
  143. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-2.md +0 -89
  144. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-3.md +0 -91
  145. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-4.md +0 -77
  146. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-5.md +0 -77
  147. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-6.md +0 -78
  148. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-7.md +0 -94
  149. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-8.md +0 -84
  150. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-9.md +0 -112
  151. package/.desloppify/subagents/runs/20260315_185401/results/batch-1.raw.txt +0 -0
  152. package/.desloppify/subagents/runs/20260315_185401/results/batch-10.raw.txt +0 -0
  153. package/.desloppify/subagents/runs/20260315_185401/results/batch-2.raw.txt +0 -0
  154. package/.desloppify/subagents/runs/20260315_185401/results/batch-3.raw.txt +0 -0
  155. package/.desloppify/subagents/runs/20260315_185401/results/batch-4.raw.txt +0 -0
  156. package/.desloppify/subagents/runs/20260315_185401/results/batch-5.raw.txt +0 -0
  157. package/.desloppify/subagents/runs/20260315_185401/results/batch-6.raw.txt +0 -0
  158. package/.desloppify/subagents/runs/20260315_185401/results/batch-7.raw.txt +0 -0
  159. package/.desloppify/subagents/runs/20260315_185401/results/batch-8.raw.txt +0 -0
  160. package/.desloppify/subagents/runs/20260315_185401/results/batch-9.raw.txt +0 -0
  161. package/.desloppify/subagents/runs/20260315_185401/run.log +0 -36
  162. package/.desloppify/subagents/runs/20260315_185401/run_summary.json +0 -156
  163. package/.desloppify/subagents/runs/20260315_185613/holistic_findings_merged.json +0 -741
  164. package/.desloppify/subagents/runs/20260315_185613/logs/batch-1.log +0 -579
  165. package/.desloppify/subagents/runs/20260315_185613/logs/batch-10.log +0 -1537
  166. package/.desloppify/subagents/runs/20260315_185613/logs/batch-2.log +0 -829
  167. package/.desloppify/subagents/runs/20260315_185613/logs/batch-3.log +0 -927
  168. package/.desloppify/subagents/runs/20260315_185613/logs/batch-4.log +0 -429
  169. package/.desloppify/subagents/runs/20260315_185613/logs/batch-5.log +0 -276
  170. package/.desloppify/subagents/runs/20260315_185613/logs/batch-6.log +0 -450
  171. package/.desloppify/subagents/runs/20260315_185613/logs/batch-7.log +0 -730
  172. package/.desloppify/subagents/runs/20260315_185613/logs/batch-8.log +0 -698
  173. package/.desloppify/subagents/runs/20260315_185613/logs/batch-9.log +0 -938
  174. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-1.md +0 -83
  175. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-10.md +0 -108
  176. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-2.md +0 -89
  177. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-3.md +0 -91
  178. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-4.md +0 -77
  179. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-5.md +0 -77
  180. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-6.md +0 -78
  181. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-7.md +0 -94
  182. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-8.md +0 -84
  183. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-9.md +0 -112
  184. package/.desloppify/subagents/runs/20260315_185613/results/batch-1.raw.txt +0 -78
  185. package/.desloppify/subagents/runs/20260315_185613/results/batch-10.raw.txt +0 -242
  186. package/.desloppify/subagents/runs/20260315_185613/results/batch-2.raw.txt +0 -102
  187. package/.desloppify/subagents/runs/20260315_185613/results/batch-3.raw.txt +0 -94
  188. package/.desloppify/subagents/runs/20260315_185613/results/batch-4.raw.txt +0 -86
  189. package/.desloppify/subagents/runs/20260315_185613/results/batch-5.raw.txt +0 -1
  190. package/.desloppify/subagents/runs/20260315_185613/results/batch-6.raw.txt +0 -87
  191. package/.desloppify/subagents/runs/20260315_185613/results/batch-7.raw.txt +0 -1
  192. package/.desloppify/subagents/runs/20260315_185613/results/batch-8.raw.txt +0 -107
  193. package/.desloppify/subagents/runs/20260315_185613/results/batch-9.raw.txt +0 -67
  194. package/.desloppify/subagents/runs/20260315_185613/run.log +0 -96
  195. package/.desloppify/subagents/runs/20260315_185613/run_summary.json +0 -156
  196. package/.editorconfig +0 -12
  197. package/.github/dependabot.yml +0 -11
  198. package/.github/workflows/docs.yml +0 -46
  199. package/.github/workflows/test.yml +0 -40
  200. package/.markdownlint.jsonc +0 -11
  201. package/.node-version +0 -1
  202. package/.oxfmtrc.json +0 -9
  203. package/.oxlintrc.json +0 -35
  204. package/docs/ARCHITECTURE.md +0 -125
  205. package/scorecard.png +0 -0
  206. package/src/cli/cli.ts +0 -141
  207. package/src/cli/validators.ts +0 -68
  208. package/src/formats/anthropic/index.ts +0 -14
  209. package/src/formats/anthropic/parse.ts +0 -70
  210. package/src/formats/anthropic/schema.ts +0 -74
  211. package/src/formats/anthropic/serialize.ts +0 -179
  212. package/src/formats/openai/chat-completions/index.ts +0 -14
  213. package/src/formats/openai/chat-completions/parse.ts +0 -47
  214. package/src/formats/openai/chat-completions/schema.ts +0 -92
  215. package/src/formats/openai/chat-completions/serialize.ts +0 -146
  216. package/src/formats/openai/responses/index.ts +0 -14
  217. package/src/formats/openai/responses/parse.ts +0 -73
  218. package/src/formats/openai/responses/schema.ts +0 -86
  219. package/src/formats/openai/responses/serialize.ts +0 -328
  220. package/src/formats/request-helpers.ts +0 -56
  221. package/src/formats/serialize-helpers.ts +0 -43
  222. package/src/formats/types.ts +0 -26
  223. package/src/history.ts +0 -70
  224. package/src/index.ts +0 -46
  225. package/src/loader.ts +0 -246
  226. package/src/logger.ts +0 -70
  227. package/src/mock-server.ts +0 -203
  228. package/src/route-handler.ts +0 -144
  229. package/src/rule-builder.ts +0 -73
  230. package/src/rule-engine.ts +0 -165
  231. package/src/sse-writer.ts +0 -35
  232. package/src/types/reply.ts +0 -92
  233. package/src/types/request.ts +0 -56
  234. package/src/types/rule.ts +0 -125
  235. package/src/types.ts +0 -24
  236. package/test/cli-validators.test.ts +0 -151
  237. package/test/formats/anthropic.test.ts +0 -336
  238. package/test/formats/openai.test.ts +0 -316
  239. package/test/formats/parse-helpers.test.ts +0 -315
  240. package/test/formats/responses.test.ts +0 -380
  241. package/test/helpers/make-req.ts +0 -18
  242. package/test/history.test.ts +0 -361
  243. package/test/loader.test.ts +0 -333
  244. package/test/logger.test.ts +0 -344
  245. package/test/mock-server.test.ts +0 -619
  246. package/test/rule-engine.test.ts +0 -229
  247. package/tsconfig.json +0 -24
  248. package/tsconfig.test.json +0 -11
  249. package/typedoc.json +0 -9
  250. package/vitest.config.ts +0 -18
@@ -1,1312 +0,0 @@
1
- {
2
- "command": "status",
3
- "overall_score": 84.9,
4
- "objective_score": 100.0,
5
- "strict_score": 79.1,
6
- "verified_strict_score": 85.5,
7
- "dimension_scores": {
8
- "File health": {
9
- "score": 100.0,
10
- "strict_score": 100.0,
11
- "verified_strict_score": 100.0,
12
- "checks": 29,
13
- "issues": 0,
14
- "tier": 3,
15
- "detectors": {
16
- "structural": {
17
- "potential": 29,
18
- "pass_rate": 1.0,
19
- "issues": 0,
20
- "weighted_failures": 0.0
21
- }
22
- },
23
- "strict": 100.0
24
- },
25
- "Code quality": {
26
- "score": 100.0,
27
- "strict_score": 96.4,
28
- "verified_strict_score": 96.4,
29
- "checks": 170,
30
- "issues": 0,
31
- "tier": 3,
32
- "detectors": {
33
- "unused": {
34
- "potential": 29,
35
- "pass_rate": 1.0,
36
- "issues": 0,
37
- "weighted_failures": 0.0
38
- },
39
- "logs": {
40
- "potential": 29,
41
- "pass_rate": 1.0,
42
- "issues": 0,
43
- "weighted_failures": 0.0
44
- },
45
- "props": {
46
- "potential": 1,
47
- "pass_rate": 1.0,
48
- "issues": 0,
49
- "weighted_failures": 0.0
50
- },
51
- "smells": {
52
- "potential": 32,
53
- "pass_rate": 1.0,
54
- "issues": 0,
55
- "weighted_failures": 0.0
56
- },
57
- "orphaned": {
58
- "potential": 29,
59
- "pass_rate": 1.0,
60
- "issues": 0,
61
- "weighted_failures": 0.0
62
- },
63
- "flat_dirs": {
64
- "potential": 10,
65
- "pass_rate": 1.0,
66
- "issues": 0,
67
- "weighted_failures": 0.0
68
- },
69
- "naming": {
70
- "potential": 10,
71
- "pass_rate": 1.0,
72
- "issues": 0,
73
- "weighted_failures": 0.0
74
- },
75
- "facade": {
76
- "potential": 29,
77
- "pass_rate": 1.0,
78
- "issues": 0,
79
- "weighted_failures": 0.0
80
- },
81
- "patterns": {
82
- "potential": 1,
83
- "pass_rate": 1.0,
84
- "issues": 0,
85
- "weighted_failures": 0.0
86
- }
87
- },
88
- "strict": 96.4
89
- },
90
- "Duplication": {
91
- "score": 100.0,
92
- "strict_score": 99.0,
93
- "verified_strict_score": 99.0,
94
- "checks": 69,
95
- "issues": 0,
96
- "tier": 3,
97
- "detectors": {
98
- "dupes": {
99
- "potential": 67,
100
- "pass_rate": 1.0,
101
- "issues": 0,
102
- "weighted_failures": 0.0
103
- },
104
- "boilerplate_duplication": {
105
- "potential": 2,
106
- "pass_rate": 1.0,
107
- "issues": 0,
108
- "weighted_failures": 0.0
109
- }
110
- },
111
- "strict": 99.0
112
- },
113
- "Test health": {
114
- "score": 100.0,
115
- "strict_score": 63.1,
116
- "verified_strict_score": 63.1,
117
- "checks": 263,
118
- "issues": 0,
119
- "tier": 4,
120
- "detectors": {
121
- "test_coverage": {
122
- "potential": 240,
123
- "pass_rate": 1.0,
124
- "issues": 0,
125
- "weighted_failures": 0.0
126
- },
127
- "subjective_review": {
128
- "potential": 23,
129
- "pass_rate": 1.0,
130
- "issues": 0,
131
- "weighted_failures": 0.0
132
- }
133
- },
134
- "strict": 63.1
135
- },
136
- "Security": {
137
- "score": 100.0,
138
- "strict_score": 100.0,
139
- "verified_strict_score": 100.0,
140
- "checks": 58,
141
- "issues": 0,
142
- "tier": 4,
143
- "detectors": {
144
- "security": {
145
- "potential": 29,
146
- "pass_rate": 1.0,
147
- "issues": 0,
148
- "weighted_failures": 0.0
149
- },
150
- "cycles": {
151
- "potential": 29,
152
- "pass_rate": 1.0,
153
- "issues": 0,
154
- "weighted_failures": 0.0
155
- }
156
- },
157
- "strict": 100.0
158
- },
159
- "Error consistency": {
160
- "score": 67.8,
161
- "strict_score": 67.8,
162
- "verified_strict_score": 67.8,
163
- "checks": 10,
164
- "issues": 0,
165
- "tier": 4,
166
- "detectors": {
167
- "subjective_assessment": {
168
- "potential": 10,
169
- "pass_rate": 0.678,
170
- "issues": 0,
171
- "weighted_failures": 3.22,
172
- "assessment_score": 67.8,
173
- "placeholder": false,
174
- "dimension_key": "error_consistency",
175
- "configured_weight": 3.0,
176
- "components": []
177
- }
178
- },
179
- "strict": 67.8
180
- },
181
- "Abstraction fit": {
182
- "score": 79.3,
183
- "strict_score": 79.3,
184
- "verified_strict_score": 79.3,
185
- "checks": 10,
186
- "issues": 0,
187
- "tier": 4,
188
- "detectors": {
189
- "subjective_assessment": {
190
- "potential": 10,
191
- "pass_rate": 0.793,
192
- "issues": 0,
193
- "weighted_failures": 2.07,
194
- "assessment_score": 79.3,
195
- "placeholder": false,
196
- "dimension_key": "abstraction_fitness",
197
- "configured_weight": 8.0,
198
- "components": [
199
- "Abstraction Leverage",
200
- "Indirection Cost",
201
- "Interface Honesty"
202
- ],
203
- "component_scores": {
204
- "Abstraction Leverage": 82.0,
205
- "Indirection Cost": 85.7,
206
- "Interface Honesty": 86.0
207
- }
208
- }
209
- },
210
- "strict": 79.3
211
- },
212
- "AI generated debt": {
213
- "score": 86.5,
214
- "strict_score": 86.5,
215
- "verified_strict_score": 86.5,
216
- "checks": 10,
217
- "issues": 0,
218
- "tier": 4,
219
- "detectors": {
220
- "subjective_assessment": {
221
- "potential": 10,
222
- "pass_rate": 0.865,
223
- "issues": 0,
224
- "weighted_failures": 1.35,
225
- "assessment_score": 86.5,
226
- "placeholder": false,
227
- "dimension_key": "ai_generated_debt",
228
- "configured_weight": 1.0,
229
- "components": []
230
- }
231
- },
232
- "strict": 86.5
233
- },
234
- "High elegance": {
235
- "score": 66.7,
236
- "strict_score": 66.7,
237
- "verified_strict_score": 66.7,
238
- "checks": 10,
239
- "issues": 0,
240
- "tier": 4,
241
- "detectors": {
242
- "subjective_assessment": {
243
- "potential": 10,
244
- "pass_rate": 0.667,
245
- "issues": 0,
246
- "weighted_failures": 3.33,
247
- "assessment_score": 66.7,
248
- "placeholder": false,
249
- "dimension_key": "high_level_elegance",
250
- "configured_weight": 22.0,
251
- "components": []
252
- }
253
- },
254
- "strict": 66.7
255
- },
256
- "Mid elegance": {
257
- "score": 82.3,
258
- "strict_score": 82.3,
259
- "verified_strict_score": 82.3,
260
- "checks": 10,
261
- "issues": 0,
262
- "tier": 4,
263
- "detectors": {
264
- "subjective_assessment": {
265
- "potential": 10,
266
- "pass_rate": 0.823,
267
- "issues": 0,
268
- "weighted_failures": 1.77,
269
- "assessment_score": 82.3,
270
- "placeholder": false,
271
- "dimension_key": "mid_level_elegance",
272
- "configured_weight": 22.0,
273
- "components": []
274
- }
275
- },
276
- "strict": 82.3
277
- },
278
- "Low elegance": {
279
- "score": 78.3,
280
- "strict_score": 78.3,
281
- "verified_strict_score": 78.3,
282
- "checks": 10,
283
- "issues": 0,
284
- "tier": 4,
285
- "detectors": {
286
- "subjective_assessment": {
287
- "potential": 10,
288
- "pass_rate": 0.783,
289
- "issues": 0,
290
- "weighted_failures": 2.17,
291
- "assessment_score": 78.3,
292
- "placeholder": false,
293
- "dimension_key": "low_level_elegance",
294
- "configured_weight": 12.0,
295
- "components": []
296
- }
297
- },
298
- "strict": 78.3
299
- },
300
- "Cross-module arch": {
301
- "score": 73.2,
302
- "strict_score": 73.2,
303
- "verified_strict_score": 73.2,
304
- "checks": 10,
305
- "issues": 0,
306
- "tier": 4,
307
- "detectors": {
308
- "subjective_assessment": {
309
- "potential": 10,
310
- "pass_rate": 0.732,
311
- "issues": 0,
312
- "weighted_failures": 2.68,
313
- "assessment_score": 73.2,
314
- "placeholder": false,
315
- "dimension_key": "cross_module_architecture",
316
- "configured_weight": 1.0,
317
- "components": []
318
- }
319
- },
320
- "strict": 73.2
321
- },
322
- "Convention drift": {
323
- "score": 78.8,
324
- "strict_score": 78.8,
325
- "verified_strict_score": 78.8,
326
- "checks": 10,
327
- "issues": 0,
328
- "tier": 4,
329
- "detectors": {
330
- "subjective_assessment": {
331
- "potential": 10,
332
- "pass_rate": 0.788,
333
- "issues": 0,
334
- "weighted_failures": 2.12,
335
- "assessment_score": 78.8,
336
- "placeholder": false,
337
- "dimension_key": "convention_outlier",
338
- "configured_weight": 1.0,
339
- "components": []
340
- }
341
- },
342
- "strict": 78.8
343
- },
344
- "API coherence": {
345
- "score": 67.3,
346
- "strict_score": 67.3,
347
- "verified_strict_score": 67.3,
348
- "checks": 10,
349
- "issues": 0,
350
- "tier": 4,
351
- "detectors": {
352
- "subjective_assessment": {
353
- "potential": 10,
354
- "pass_rate": 0.673,
355
- "issues": 0,
356
- "weighted_failures": 3.27,
357
- "assessment_score": 67.3,
358
- "placeholder": false,
359
- "dimension_key": "api_surface_coherence",
360
- "configured_weight": 1.0,
361
- "components": []
362
- }
363
- },
364
- "strict": 67.3
365
- },
366
- "Auth consistency": {
367
- "score": 92.8,
368
- "strict_score": 92.8,
369
- "verified_strict_score": 92.8,
370
- "checks": 10,
371
- "issues": 0,
372
- "tier": 4,
373
- "detectors": {
374
- "subjective_assessment": {
375
- "potential": 10,
376
- "pass_rate": 0.928,
377
- "issues": 0,
378
- "weighted_failures": 0.72,
379
- "assessment_score": 92.8,
380
- "placeholder": false,
381
- "dimension_key": "authorization_consistency",
382
- "configured_weight": 1.0,
383
- "components": []
384
- }
385
- },
386
- "strict": 92.8
387
- },
388
- "Stale migration": {
389
- "score": 95.7,
390
- "strict_score": 95.7,
391
- "verified_strict_score": 95.7,
392
- "checks": 10,
393
- "issues": 0,
394
- "tier": 4,
395
- "detectors": {
396
- "subjective_assessment": {
397
- "potential": 10,
398
- "pass_rate": 0.957,
399
- "issues": 0,
400
- "weighted_failures": 0.43,
401
- "assessment_score": 95.7,
402
- "placeholder": false,
403
- "dimension_key": "incomplete_migration",
404
- "configured_weight": 1.0,
405
- "components": []
406
- }
407
- },
408
- "strict": 95.7
409
- },
410
- "Structure nav": {
411
- "score": 61.6,
412
- "strict_score": 61.6,
413
- "verified_strict_score": 61.6,
414
- "checks": 10,
415
- "issues": 0,
416
- "tier": 4,
417
- "detectors": {
418
- "subjective_assessment": {
419
- "potential": 10,
420
- "pass_rate": 0.616,
421
- "issues": 0,
422
- "weighted_failures": 3.84,
423
- "assessment_score": 61.6,
424
- "placeholder": false,
425
- "dimension_key": "package_organization",
426
- "configured_weight": 5.0,
427
- "components": []
428
- }
429
- },
430
- "strict": 61.6
431
- },
432
- "Design coherence": {
433
- "score": 72.8,
434
- "strict_score": 72.8,
435
- "verified_strict_score": 72.8,
436
- "checks": 10,
437
- "issues": 0,
438
- "tier": 4,
439
- "detectors": {
440
- "subjective_assessment": {
441
- "potential": 10,
442
- "pass_rate": 0.728,
443
- "issues": 0,
444
- "weighted_failures": 2.72,
445
- "assessment_score": 72.8,
446
- "placeholder": false,
447
- "dimension_key": "design_coherence",
448
- "configured_weight": 10.0,
449
- "components": []
450
- }
451
- },
452
- "strict": 72.8
453
- }
454
- },
455
- "scorecard_dimensions": [
456
- {
457
- "name": "File health",
458
- "score": 100.0,
459
- "strict": 100.0,
460
- "checks": 29,
461
- "issues": 0,
462
- "tier": 3,
463
- "subjective": false
464
- },
465
- {
466
- "name": "AI generated debt",
467
- "score": 86.5,
468
- "strict": 86.5,
469
- "checks": 10,
470
- "issues": 0,
471
- "tier": 4,
472
- "subjective": true,
473
- "placeholder": false,
474
- "cli_keys": [
475
- "ai_generated_debt"
476
- ]
477
- },
478
- {
479
- "name": "API coherence",
480
- "score": 67.3,
481
- "strict": 67.3,
482
- "checks": 10,
483
- "issues": 0,
484
- "tier": 4,
485
- "subjective": true,
486
- "placeholder": false,
487
- "cli_keys": [
488
- "api_surface_coherence"
489
- ]
490
- },
491
- {
492
- "name": "Abstraction fit",
493
- "score": 79.3,
494
- "strict": 79.3,
495
- "checks": 10,
496
- "issues": 0,
497
- "tier": 4,
498
- "subjective": true,
499
- "placeholder": false,
500
- "cli_keys": [
501
- "abstraction_fitness"
502
- ]
503
- },
504
- {
505
- "name": "Auth consistency",
506
- "score": 92.8,
507
- "strict": 92.8,
508
- "checks": 10,
509
- "issues": 0,
510
- "tier": 4,
511
- "subjective": true,
512
- "placeholder": false,
513
- "cli_keys": [
514
- "authorization_consistency"
515
- ]
516
- },
517
- {
518
- "name": "Code quality",
519
- "score": 100.0,
520
- "strict": 96.4,
521
- "checks": 170,
522
- "issues": 0,
523
- "tier": 3,
524
- "subjective": false
525
- },
526
- {
527
- "name": "Convention drift",
528
- "score": 78.8,
529
- "strict": 78.8,
530
- "checks": 10,
531
- "issues": 0,
532
- "tier": 4,
533
- "subjective": true,
534
- "placeholder": false,
535
- "cli_keys": [
536
- "convention_outlier"
537
- ]
538
- },
539
- {
540
- "name": "Cross-module arch",
541
- "score": 73.2,
542
- "strict": 73.2,
543
- "checks": 10,
544
- "issues": 0,
545
- "tier": 4,
546
- "subjective": true,
547
- "placeholder": false,
548
- "cli_keys": [
549
- "cross_module_architecture"
550
- ]
551
- },
552
- {
553
- "name": "Design coherence",
554
- "score": 72.8,
555
- "strict": 72.8,
556
- "checks": 10,
557
- "issues": 0,
558
- "tier": 4,
559
- "subjective": true,
560
- "placeholder": false,
561
- "cli_keys": [
562
- "design_coherence"
563
- ]
564
- },
565
- {
566
- "name": "Duplication",
567
- "score": 100.0,
568
- "strict": 99.0,
569
- "checks": 69,
570
- "issues": 0,
571
- "tier": 3,
572
- "subjective": false
573
- },
574
- {
575
- "name": "Elegance",
576
- "score": 75.8,
577
- "strict": 75.8,
578
- "checks": 30,
579
- "issues": 0,
580
- "tier": 4,
581
- "subjective": true,
582
- "placeholder": false,
583
- "cli_keys": [
584
- "high_level_elegance",
585
- "mid_level_elegance",
586
- "low_level_elegance"
587
- ]
588
- },
589
- {
590
- "name": "Error consistency",
591
- "score": 67.8,
592
- "strict": 67.8,
593
- "checks": 10,
594
- "issues": 0,
595
- "tier": 4,
596
- "subjective": true,
597
- "placeholder": false,
598
- "cli_keys": [
599
- "error_consistency"
600
- ]
601
- },
602
- {
603
- "name": "Security",
604
- "score": 100.0,
605
- "strict": 100.0,
606
- "checks": 58,
607
- "issues": 0,
608
- "tier": 4,
609
- "subjective": false
610
- },
611
- {
612
- "name": "Stale migration",
613
- "score": 95.7,
614
- "strict": 95.7,
615
- "checks": 10,
616
- "issues": 0,
617
- "tier": 4,
618
- "subjective": true,
619
- "placeholder": false,
620
- "cli_keys": [
621
- "incomplete_migration"
622
- ]
623
- },
624
- {
625
- "name": "Structure nav",
626
- "score": 61.6,
627
- "strict": 61.6,
628
- "checks": 10,
629
- "issues": 0,
630
- "tier": 4,
631
- "subjective": true,
632
- "placeholder": false,
633
- "cli_keys": [
634
- "package_organization"
635
- ]
636
- },
637
- {
638
- "name": "Test health",
639
- "score": 100.0,
640
- "strict": 63.1,
641
- "checks": 263,
642
- "issues": 0,
643
- "tier": 4,
644
- "subjective": false
645
- }
646
- ],
647
- "subjective_measures": [
648
- {
649
- "name": "AI generated debt",
650
- "score": 86.5,
651
- "strict": 86.5,
652
- "checks": 10,
653
- "issues": 0,
654
- "tier": 4,
655
- "subjective": true,
656
- "placeholder": false,
657
- "cli_keys": [
658
- "ai_generated_debt"
659
- ]
660
- },
661
- {
662
- "name": "API coherence",
663
- "score": 67.3,
664
- "strict": 67.3,
665
- "checks": 10,
666
- "issues": 0,
667
- "tier": 4,
668
- "subjective": true,
669
- "placeholder": false,
670
- "cli_keys": [
671
- "api_surface_coherence"
672
- ]
673
- },
674
- {
675
- "name": "Abstraction fit",
676
- "score": 79.3,
677
- "strict": 79.3,
678
- "checks": 10,
679
- "issues": 0,
680
- "tier": 4,
681
- "subjective": true,
682
- "placeholder": false,
683
- "cli_keys": [
684
- "abstraction_fitness"
685
- ]
686
- },
687
- {
688
- "name": "Auth consistency",
689
- "score": 92.8,
690
- "strict": 92.8,
691
- "checks": 10,
692
- "issues": 0,
693
- "tier": 4,
694
- "subjective": true,
695
- "placeholder": false,
696
- "cli_keys": [
697
- "authorization_consistency"
698
- ]
699
- },
700
- {
701
- "name": "Convention drift",
702
- "score": 78.8,
703
- "strict": 78.8,
704
- "checks": 10,
705
- "issues": 0,
706
- "tier": 4,
707
- "subjective": true,
708
- "placeholder": false,
709
- "cli_keys": [
710
- "convention_outlier"
711
- ]
712
- },
713
- {
714
- "name": "Cross-module arch",
715
- "score": 73.2,
716
- "strict": 73.2,
717
- "checks": 10,
718
- "issues": 0,
719
- "tier": 4,
720
- "subjective": true,
721
- "placeholder": false,
722
- "cli_keys": [
723
- "cross_module_architecture"
724
- ]
725
- },
726
- {
727
- "name": "Design coherence",
728
- "score": 72.8,
729
- "strict": 72.8,
730
- "checks": 10,
731
- "issues": 0,
732
- "tier": 4,
733
- "subjective": true,
734
- "placeholder": false,
735
- "cli_keys": [
736
- "design_coherence"
737
- ]
738
- },
739
- {
740
- "name": "Elegance",
741
- "score": 75.8,
742
- "strict": 75.8,
743
- "checks": 30,
744
- "issues": 0,
745
- "tier": 4,
746
- "subjective": true,
747
- "placeholder": false,
748
- "cli_keys": [
749
- "high_level_elegance",
750
- "mid_level_elegance",
751
- "low_level_elegance"
752
- ]
753
- },
754
- {
755
- "name": "Error consistency",
756
- "score": 67.8,
757
- "strict": 67.8,
758
- "checks": 10,
759
- "issues": 0,
760
- "tier": 4,
761
- "subjective": true,
762
- "placeholder": false,
763
- "cli_keys": [
764
- "error_consistency"
765
- ]
766
- },
767
- {
768
- "name": "Stale migration",
769
- "score": 95.7,
770
- "strict": 95.7,
771
- "checks": 10,
772
- "issues": 0,
773
- "tier": 4,
774
- "subjective": true,
775
- "placeholder": false,
776
- "cli_keys": [
777
- "incomplete_migration"
778
- ]
779
- },
780
- {
781
- "name": "Structure nav",
782
- "score": 61.6,
783
- "strict": 61.6,
784
- "checks": 10,
785
- "issues": 0,
786
- "tier": 4,
787
- "subjective": true,
788
- "placeholder": false,
789
- "cli_keys": [
790
- "package_organization"
791
- ]
792
- }
793
- ],
794
- "stats": {
795
- "total": 137,
796
- "open": 0,
797
- "fixed": 2,
798
- "auto_resolved": 83,
799
- "wontfix": 52,
800
- "false_positive": 0,
801
- "by_tier": {
802
- "2": {
803
- "open": 0,
804
- "fixed": 0,
805
- "auto_resolved": 10,
806
- "wontfix": 0,
807
- "false_positive": 0
808
- },
809
- "3": {
810
- "open": 0,
811
- "fixed": 2,
812
- "auto_resolved": 50,
813
- "wontfix": 52,
814
- "false_positive": 0
815
- },
816
- "4": {
817
- "open": 0,
818
- "fixed": 0,
819
- "auto_resolved": 23,
820
- "wontfix": 0,
821
- "false_positive": 0
822
- }
823
- }
824
- },
825
- "scan_count": 13,
826
- "last_scan": "2026-03-15T19:12:32+00:00",
827
- "by_tier": {
828
- "2": {
829
- "open": 0,
830
- "fixed": 0,
831
- "auto_resolved": 10,
832
- "wontfix": 0,
833
- "false_positive": 0
834
- },
835
- "3": {
836
- "open": 0,
837
- "fixed": 2,
838
- "auto_resolved": 50,
839
- "wontfix": 52,
840
- "false_positive": 0
841
- },
842
- "4": {
843
- "open": 0,
844
- "fixed": 0,
845
- "auto_resolved": 23,
846
- "wontfix": 0,
847
- "false_positive": 0
848
- }
849
- },
850
- "ignores": [],
851
- "suppression": {
852
- "last_ignored": 0,
853
- "last_raw_findings": 31,
854
- "last_suppressed_pct": 0.0,
855
- "last_ignore_patterns": 0,
856
- "recent_scans": 5,
857
- "recent_ignored": 0,
858
- "recent_raw_findings": 145,
859
- "recent_suppressed_pct": 0.0
860
- },
861
- "potentials": {
862
- "typescript": {
863
- "logs": 29,
864
- "unused": 29,
865
- "exports": 0,
866
- "deprecated": 0,
867
- "structural": 29,
868
- "flat_dirs": 10,
869
- "props": 1,
870
- "single_use": 0,
871
- "coupling": 0,
872
- "cycles": 29,
873
- "orphaned": 29,
874
- "patterns": 1,
875
- "naming": 10,
876
- "facade": 29,
877
- "test_coverage": 240,
878
- "smells": 32,
879
- "react": 0,
880
- "security": 29,
881
- "subjective_review": 23,
882
- "boilerplate_duplication": 2,
883
- "dupes": 67,
884
- "stale_wontfix": 0
885
- }
886
- },
887
- "codebase_metrics": {
888
- "typescript": {
889
- "total_files": 41,
890
- "total_loc": 6077,
891
- "total_directories": 10
892
- }
893
- },
894
- "open_scope": {
895
- "in_scope": 0,
896
- "out_of_scope": 0,
897
- "global": 0
898
- },
899
- "score_breakdown": {
900
- "overall_score": 84.9,
901
- "mechanical_fraction": 0.4,
902
- "subjective_fraction": 0.6,
903
- "mechanical_avg": 100.0,
904
- "subjective_avg": 74.83749999999999,
905
- "entries": [
906
- {
907
- "name": "File health",
908
- "pool": "mechanical",
909
- "score": 100.0,
910
- "checks": 29.0,
911
- "sample_factor": 0.145,
912
- "configured_weight": 2.0,
913
- "effective_weight": 0.29,
914
- "pool_share": 0.1045045045045045,
915
- "overall_per_point": 0.041801801801801805,
916
- "overall_contribution": 4.18018018018018,
917
- "overall_drag": 0.0
918
- },
919
- {
920
- "name": "Code quality",
921
- "pool": "mechanical",
922
- "score": 100.0,
923
- "checks": 170.0,
924
- "sample_factor": 0.85,
925
- "configured_weight": 1.0,
926
- "effective_weight": 0.85,
927
- "pool_share": 0.3063063063063063,
928
- "overall_per_point": 0.12252252252252252,
929
- "overall_contribution": 12.252252252252251,
930
- "overall_drag": 0.0
931
- },
932
- {
933
- "name": "Duplication",
934
- "pool": "mechanical",
935
- "score": 100.0,
936
- "checks": 69.0,
937
- "sample_factor": 0.345,
938
- "configured_weight": 1.0,
939
- "effective_weight": 0.345,
940
- "pool_share": 0.12432432432432432,
941
- "overall_per_point": 0.04972972972972973,
942
- "overall_contribution": 4.972972972972973,
943
- "overall_drag": 0.0
944
- },
945
- {
946
- "name": "Test health",
947
- "pool": "mechanical",
948
- "score": 100.0,
949
- "checks": 263.0,
950
- "sample_factor": 1.0,
951
- "configured_weight": 1.0,
952
- "effective_weight": 1.0,
953
- "pool_share": 0.3603603603603604,
954
- "overall_per_point": 0.14414414414414417,
955
- "overall_contribution": 14.414414414414416,
956
- "overall_drag": 0.0
957
- },
958
- {
959
- "name": "Security",
960
- "pool": "mechanical",
961
- "score": 100.0,
962
- "checks": 58.0,
963
- "sample_factor": 0.29,
964
- "configured_weight": 1.0,
965
- "effective_weight": 0.29,
966
- "pool_share": 0.1045045045045045,
967
- "overall_per_point": 0.041801801801801805,
968
- "overall_contribution": 4.18018018018018,
969
- "overall_drag": 0.0
970
- },
971
- {
972
- "name": "Error consistency",
973
- "pool": "subjective",
974
- "score": 67.8,
975
- "checks": 0.0,
976
- "sample_factor": 1.0,
977
- "configured_weight": 3.0,
978
- "effective_weight": 3.0,
979
- "pool_share": 0.03409090909090909,
980
- "overall_per_point": 0.02045454545454545,
981
- "overall_contribution": 1.3868181818181815,
982
- "overall_drag": 0.6586363636363636
983
- },
984
- {
985
- "name": "Abstraction fit",
986
- "pool": "subjective",
987
- "score": 79.3,
988
- "checks": 0.0,
989
- "sample_factor": 1.0,
990
- "configured_weight": 8.0,
991
- "effective_weight": 8.0,
992
- "pool_share": 0.09090909090909091,
993
- "overall_per_point": 0.05454545454545454,
994
- "overall_contribution": 4.325454545454545,
995
- "overall_drag": 1.1290909090909091
996
- },
997
- {
998
- "name": "AI generated debt",
999
- "pool": "subjective",
1000
- "score": 86.5,
1001
- "checks": 0.0,
1002
- "sample_factor": 1.0,
1003
- "configured_weight": 1.0,
1004
- "effective_weight": 1.0,
1005
- "pool_share": 0.011363636363636364,
1006
- "overall_per_point": 0.006818181818181818,
1007
- "overall_contribution": 0.5897727272727272,
1008
- "overall_drag": 0.09204545454545454
1009
- },
1010
- {
1011
- "name": "High elegance",
1012
- "pool": "subjective",
1013
- "score": 66.7,
1014
- "checks": 0.0,
1015
- "sample_factor": 1.0,
1016
- "configured_weight": 22.0,
1017
- "effective_weight": 22.0,
1018
- "pool_share": 0.25,
1019
- "overall_per_point": 0.15,
1020
- "overall_contribution": 10.005,
1021
- "overall_drag": 4.994999999999999
1022
- },
1023
- {
1024
- "name": "Mid elegance",
1025
- "pool": "subjective",
1026
- "score": 82.3,
1027
- "checks": 0.0,
1028
- "sample_factor": 1.0,
1029
- "configured_weight": 22.0,
1030
- "effective_weight": 22.0,
1031
- "pool_share": 0.25,
1032
- "overall_per_point": 0.15,
1033
- "overall_contribution": 12.344999999999999,
1034
- "overall_drag": 2.6550000000000002
1035
- },
1036
- {
1037
- "name": "Low elegance",
1038
- "pool": "subjective",
1039
- "score": 78.3,
1040
- "checks": 0.0,
1041
- "sample_factor": 1.0,
1042
- "configured_weight": 12.0,
1043
- "effective_weight": 12.0,
1044
- "pool_share": 0.13636363636363635,
1045
- "overall_per_point": 0.0818181818181818,
1046
- "overall_contribution": 6.406363636363635,
1047
- "overall_drag": 1.7754545454545454
1048
- },
1049
- {
1050
- "name": "Cross-module arch",
1051
- "pool": "subjective",
1052
- "score": 73.2,
1053
- "checks": 0.0,
1054
- "sample_factor": 1.0,
1055
- "configured_weight": 1.0,
1056
- "effective_weight": 1.0,
1057
- "pool_share": 0.011363636363636364,
1058
- "overall_per_point": 0.006818181818181818,
1059
- "overall_contribution": 0.4990909090909091,
1060
- "overall_drag": 0.1827272727272727
1061
- },
1062
- {
1063
- "name": "Convention drift",
1064
- "pool": "subjective",
1065
- "score": 78.8,
1066
- "checks": 0.0,
1067
- "sample_factor": 1.0,
1068
- "configured_weight": 1.0,
1069
- "effective_weight": 1.0,
1070
- "pool_share": 0.011363636363636364,
1071
- "overall_per_point": 0.006818181818181818,
1072
- "overall_contribution": 0.5372727272727272,
1073
- "overall_drag": 0.14454545454545456
1074
- },
1075
- {
1076
- "name": "API coherence",
1077
- "pool": "subjective",
1078
- "score": 67.3,
1079
- "checks": 0.0,
1080
- "sample_factor": 1.0,
1081
- "configured_weight": 1.0,
1082
- "effective_weight": 1.0,
1083
- "pool_share": 0.011363636363636364,
1084
- "overall_per_point": 0.006818181818181818,
1085
- "overall_contribution": 0.4588636363636363,
1086
- "overall_drag": 0.22295454545454546
1087
- },
1088
- {
1089
- "name": "Auth consistency",
1090
- "pool": "subjective",
1091
- "score": 92.8,
1092
- "checks": 0.0,
1093
- "sample_factor": 1.0,
1094
- "configured_weight": 1.0,
1095
- "effective_weight": 1.0,
1096
- "pool_share": 0.011363636363636364,
1097
- "overall_per_point": 0.006818181818181818,
1098
- "overall_contribution": 0.6327272727272727,
1099
- "overall_drag": 0.04909090909090911
1100
- },
1101
- {
1102
- "name": "Stale migration",
1103
- "pool": "subjective",
1104
- "score": 95.7,
1105
- "checks": 0.0,
1106
- "sample_factor": 1.0,
1107
- "configured_weight": 1.0,
1108
- "effective_weight": 1.0,
1109
- "pool_share": 0.011363636363636364,
1110
- "overall_per_point": 0.006818181818181818,
1111
- "overall_contribution": 0.6525,
1112
- "overall_drag": 0.0293181818181818
1113
- },
1114
- {
1115
- "name": "Structure nav",
1116
- "pool": "subjective",
1117
- "score": 61.6,
1118
- "checks": 0.0,
1119
- "sample_factor": 1.0,
1120
- "configured_weight": 5.0,
1121
- "effective_weight": 5.0,
1122
- "pool_share": 0.056818181818181816,
1123
- "overall_per_point": 0.03409090909090909,
1124
- "overall_contribution": 2.1,
1125
- "overall_drag": 1.3090909090909089
1126
- },
1127
- {
1128
- "name": "Design coherence",
1129
- "pool": "subjective",
1130
- "score": 72.8,
1131
- "checks": 0.0,
1132
- "sample_factor": 1.0,
1133
- "configured_weight": 10.0,
1134
- "effective_weight": 10.0,
1135
- "pool_share": 0.11363636363636363,
1136
- "overall_per_point": 0.06818181818181818,
1137
- "overall_contribution": 4.963636363636363,
1138
- "overall_drag": 1.8545454545454545
1139
- }
1140
- ]
1141
- },
1142
- "next_command": "desloppify show --status wontfix",
1143
- "narrative": {
1144
- "phase": "regression",
1145
- "headline": "All T1 and T2 items cleared!",
1146
- "dimensions": {
1147
- "lowest_dimensions": [
1148
- {
1149
- "name": "Structure nav",
1150
- "strict": 61.6,
1151
- "issues": 0,
1152
- "impact": 0.0,
1153
- "subjective": true,
1154
- "impact_description": "re-review to improve"
1155
- },
1156
- {
1157
- "name": "Test health",
1158
- "strict": 63.1,
1159
- "issues": 0,
1160
- "impact": 0.0
1161
- },
1162
- {
1163
- "name": "High elegance",
1164
- "strict": 66.7,
1165
- "issues": 0,
1166
- "impact": 0.0,
1167
- "subjective": true,
1168
- "impact_description": "re-review to improve"
1169
- }
1170
- ],
1171
- "biggest_gap_dimensions": [
1172
- {
1173
- "name": "Test health",
1174
- "lenient": 100.0,
1175
- "strict": 63.1,
1176
- "gap": 36.9,
1177
- "wontfix_count": 9
1178
- },
1179
- {
1180
- "name": "Code quality",
1181
- "lenient": 100.0,
1182
- "strict": 96.4,
1183
- "gap": 3.6,
1184
- "wontfix_count": 20
1185
- }
1186
- ],
1187
- "stagnant_dimensions": [
1188
- {
1189
- "name": "File health",
1190
- "strict": 100.0,
1191
- "stuck_scans": 5
1192
- },
1193
- {
1194
- "name": "Security",
1195
- "strict": 100.0,
1196
- "stuck_scans": 5
1197
- }
1198
- ]
1199
- },
1200
- "actions": [
1201
- {
1202
- "type": "debt_review",
1203
- "detector": null,
1204
- "description": "2.4 pts of wontfix debt \u2014 review stale decisions",
1205
- "command": "desloppify show --status wontfix",
1206
- "gap": 2.4,
1207
- "priority": 1,
1208
- "lane": "debt_review"
1209
- }
1210
- ],
1211
- "strategy": {
1212
- "fixer_leverage": {
1213
- "auto_fixable_count": 0,
1214
- "total_count": 0,
1215
- "coverage": 0.0,
1216
- "impact_ratio": 0.0,
1217
- "recommendation": "none"
1218
- },
1219
- "lanes": {
1220
- "debt_review": {
1221
- "actions": [
1222
- 1
1223
- ],
1224
- "file_count": 0,
1225
- "total_impact": 0.0,
1226
- "automation": "manual",
1227
- "run_first": false
1228
- }
1229
- },
1230
- "can_parallelize": false,
1231
- "hint": "Work through actions in priority order. Rescan after each fix to track progress."
1232
- },
1233
- "tools": {
1234
- "fixers": [],
1235
- "move": {
1236
- "available": true,
1237
- "relevant": false,
1238
- "reason": null,
1239
- "usage": "desloppify move <source> <dest> [--dry-run]"
1240
- },
1241
- "plan": {
1242
- "command": "desloppify plan",
1243
- "description": "Generate prioritized markdown cleanup plan"
1244
- },
1245
- "badge": {
1246
- "generated": true,
1247
- "in_readme": false,
1248
- "path": "scorecard.png",
1249
- "recommendation": "Add to README: <img src=\"scorecard.png\" width=\"100%\">"
1250
- }
1251
- },
1252
- "debt": {
1253
- "overall_gap": 2.4,
1254
- "wontfix_count": 52,
1255
- "worst_dimension": "Test health",
1256
- "worst_gap": 36.9,
1257
- "trend": "stable"
1258
- },
1259
- "milestone": "All T1 and T2 items cleared!",
1260
- "primary_action": {
1261
- "command": "desloppify show --status wontfix",
1262
- "description": "2.4 pts of wontfix debt \u2014 review stale decisions"
1263
- },
1264
- "why_now": "Work through actions in priority order. Rescan after each fix to track progress.",
1265
- "verification_step": {
1266
- "command": "desloppify scan",
1267
- "reason": "revalidate after changes"
1268
- },
1269
- "risk_flags": [
1270
- {
1271
- "type": "wontfix_gap",
1272
- "severity": "high",
1273
- "message": "Strict/lenient gap is 2.4 pts with 52 wontfix findings"
1274
- }
1275
- ],
1276
- "strict_target": {
1277
- "target": 95.0,
1278
- "current": 79.1,
1279
- "gap": 15.9,
1280
- "state": "below",
1281
- "warning": null
1282
- },
1283
- "reminders": [],
1284
- "reminder_history": {
1285
- "zone_classification": 3,
1286
- "report_scores": 10,
1287
- "feedback_nudge": 3,
1288
- "review_findings_pending": 3,
1289
- "stagnant_nudge": 4,
1290
- "review_not_run": 3,
1291
- "wontfix_growing": 1
1292
- }
1293
- },
1294
- "config": {
1295
- "target_strict_score": 95,
1296
- "review_max_age_days": 30,
1297
- "review_batch_max_files": 80,
1298
- "holistic_max_age_days": 30,
1299
- "generate_scorecard": true,
1300
- "badge_path": "scorecard.png",
1301
- "exclude": [],
1302
- "ignore": [],
1303
- "ignore_metadata": {},
1304
- "zone_overrides": {},
1305
- "review_dimensions": [],
1306
- "large_files_threshold": 0,
1307
- "props_threshold": 0,
1308
- "finding_noise_budget": 10,
1309
- "finding_noise_global_budget": 0,
1310
- "languages": {}
1311
- }
1312
- }