llm-mock-server 1.0.4 → 1.0.5

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 (106) hide show
  1. package/.desloppify/query.json +1162 -62
  2. package/.desloppify/review_packet_blind.json +18 -18
  3. package/.desloppify/review_packets/holistic_packet_20260315_185401.json +1407 -0
  4. package/.desloppify/review_packets/holistic_packet_20260315_185613.json +1407 -0
  5. package/.desloppify/state-typescript.json +2530 -645
  6. package/.desloppify/state-typescript.json.bak +2494 -582
  7. package/.desloppify/subagents/runs/20260315_185401/logs/batch-1.log +384 -0
  8. package/.desloppify/subagents/runs/20260315_185401/logs/batch-10.log +484 -0
  9. package/.desloppify/subagents/runs/20260315_185401/logs/batch-2.log +408 -0
  10. package/.desloppify/subagents/runs/20260315_185401/logs/batch-3.log +416 -0
  11. package/.desloppify/subagents/runs/20260315_185401/logs/batch-4.log +360 -0
  12. package/.desloppify/subagents/runs/20260315_185401/logs/batch-5.log +360 -0
  13. package/.desloppify/subagents/runs/20260315_185401/logs/batch-6.log +364 -0
  14. package/.desloppify/subagents/runs/20260315_185401/logs/batch-7.log +428 -0
  15. package/.desloppify/subagents/runs/20260315_185401/logs/batch-8.log +388 -0
  16. package/.desloppify/subagents/runs/20260315_185401/logs/batch-9.log +500 -0
  17. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-1.md +83 -0
  18. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-10.md +108 -0
  19. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-2.md +89 -0
  20. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-3.md +91 -0
  21. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-4.md +77 -0
  22. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-5.md +77 -0
  23. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-6.md +78 -0
  24. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-7.md +94 -0
  25. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-8.md +84 -0
  26. package/.desloppify/subagents/runs/20260315_185401/prompts/batch-9.md +112 -0
  27. package/.desloppify/subagents/runs/20260315_185401/results/batch-1.raw.txt +0 -0
  28. package/.desloppify/subagents/runs/20260315_185401/results/batch-10.raw.txt +0 -0
  29. package/.desloppify/subagents/runs/20260315_185401/results/batch-2.raw.txt +0 -0
  30. package/.desloppify/subagents/runs/20260315_185401/results/batch-3.raw.txt +0 -0
  31. package/.desloppify/subagents/runs/20260315_185401/results/batch-4.raw.txt +0 -0
  32. package/.desloppify/subagents/runs/20260315_185401/results/batch-5.raw.txt +0 -0
  33. package/.desloppify/subagents/runs/20260315_185401/results/batch-6.raw.txt +0 -0
  34. package/.desloppify/subagents/runs/20260315_185401/results/batch-7.raw.txt +0 -0
  35. package/.desloppify/subagents/runs/20260315_185401/results/batch-8.raw.txt +0 -0
  36. package/.desloppify/subagents/runs/20260315_185401/results/batch-9.raw.txt +0 -0
  37. package/.desloppify/subagents/runs/20260315_185401/run.log +36 -0
  38. package/.desloppify/subagents/runs/20260315_185401/run_summary.json +156 -0
  39. package/.desloppify/subagents/runs/20260315_185613/holistic_findings_merged.json +741 -0
  40. package/.desloppify/subagents/runs/20260315_185613/logs/batch-1.log +579 -0
  41. package/.desloppify/subagents/runs/20260315_185613/logs/batch-10.log +1537 -0
  42. package/.desloppify/subagents/runs/20260315_185613/logs/batch-2.log +829 -0
  43. package/.desloppify/subagents/runs/20260315_185613/logs/batch-3.log +927 -0
  44. package/.desloppify/subagents/runs/20260315_185613/logs/batch-4.log +429 -0
  45. package/.desloppify/subagents/runs/20260315_185613/logs/batch-5.log +276 -0
  46. package/.desloppify/subagents/runs/20260315_185613/logs/batch-6.log +450 -0
  47. package/.desloppify/subagents/runs/20260315_185613/logs/batch-7.log +730 -0
  48. package/.desloppify/subagents/runs/20260315_185613/logs/batch-8.log +698 -0
  49. package/.desloppify/subagents/runs/20260315_185613/logs/batch-9.log +938 -0
  50. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-1.md +83 -0
  51. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-10.md +108 -0
  52. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-2.md +89 -0
  53. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-3.md +91 -0
  54. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-4.md +77 -0
  55. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-5.md +77 -0
  56. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-6.md +78 -0
  57. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-7.md +94 -0
  58. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-8.md +84 -0
  59. package/.desloppify/subagents/runs/20260315_185613/prompts/batch-9.md +112 -0
  60. package/.desloppify/subagents/runs/20260315_185613/results/batch-1.raw.txt +78 -0
  61. package/.desloppify/subagents/runs/20260315_185613/results/batch-10.raw.txt +242 -0
  62. package/.desloppify/subagents/runs/20260315_185613/results/batch-2.raw.txt +102 -0
  63. package/.desloppify/subagents/runs/20260315_185613/results/batch-3.raw.txt +94 -0
  64. package/.desloppify/subagents/runs/20260315_185613/results/batch-4.raw.txt +86 -0
  65. package/.desloppify/subagents/runs/20260315_185613/results/batch-5.raw.txt +1 -0
  66. package/.desloppify/subagents/runs/20260315_185613/results/batch-6.raw.txt +87 -0
  67. package/.desloppify/subagents/runs/20260315_185613/results/batch-7.raw.txt +1 -0
  68. package/.desloppify/subagents/runs/20260315_185613/results/batch-8.raw.txt +107 -0
  69. package/.desloppify/subagents/runs/20260315_185613/results/batch-9.raw.txt +67 -0
  70. package/.desloppify/subagents/runs/20260315_185613/run.log +96 -0
  71. package/.desloppify/subagents/runs/20260315_185613/run_summary.json +156 -0
  72. package/.github/workflows/docs.yml +46 -0
  73. package/.github/workflows/test.yml +3 -0
  74. package/README.md +7 -3
  75. package/docs/ARCHITECTURE.md +11 -11
  76. package/package.json +8 -4
  77. package/scorecard.png +0 -0
  78. package/src/{cli.ts → cli/cli.ts} +6 -11
  79. package/src/{cli-validators.ts → cli/validators.ts} +10 -9
  80. package/src/formats/anthropic/parse.ts +1 -1
  81. package/src/formats/anthropic/serialize.ts +1 -1
  82. package/src/formats/openai/{index.ts → chat-completions/index.ts} +3 -3
  83. package/src/formats/openai/{parse.ts → chat-completions/parse.ts} +2 -2
  84. package/src/formats/openai/{serialize.ts → chat-completions/serialize.ts} +3 -3
  85. package/src/formats/{responses → openai/responses}/index.ts +2 -2
  86. package/src/formats/{responses → openai/responses}/parse.ts +2 -2
  87. package/src/formats/{responses → openai/responses}/serialize.ts +7 -3
  88. package/src/formats/request-helpers.ts +6 -1
  89. package/src/formats/serialize-helpers.ts +9 -4
  90. package/src/formats/types.ts +2 -6
  91. package/src/history.ts +6 -2
  92. package/src/loader.ts +2 -1
  93. package/src/mock-server.ts +55 -106
  94. package/src/route-handler.ts +7 -11
  95. package/src/rule-builder.ts +73 -0
  96. package/src/rule-engine.ts +3 -10
  97. package/src/sse-writer.ts +1 -1
  98. package/src/types/reply.ts +51 -8
  99. package/src/types/request.ts +21 -6
  100. package/src/types/rule.ts +65 -7
  101. package/test/cli-validators.test.ts +13 -5
  102. package/test/formats/openai.test.ts +40 -28
  103. package/test/formats/responses.test.ts +2 -2
  104. package/typedoc.json +9 -0
  105. /package/src/formats/openai/{schema.ts → chat-completions/schema.ts} +0 -0
  106. /package/src/formats/{responses → openai/responses}/schema.ts +0 -0
@@ -1,45 +1,1167 @@
1
1
  {
2
- "command": "resolve",
3
- "patterns": [
4
- "boilerplate_duplication::src/formats/anthropic/serialize.ts::28e424affd5b1856"
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
+ }
5
646
  ],
6
- "status": "wontfix",
7
- "resolved": [
8
- "boilerplate_duplication::src/formats/anthropic/serialize.ts::28e424affd5b1856"
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
+ }
9
793
  ],
10
- "count": 1,
11
- "next_command": "desloppify scan",
12
- "overall_score": 93.6,
13
- "objective_score": 100.0,
14
- "strict_score": 87.7,
15
- "verified_strict_score": 85.4,
16
- "prev_overall_score": 93.5,
17
- "prev_objective_score": 99.9,
18
- "prev_strict_score": 87.7,
19
- "prev_verified_strict_score": 85.4,
20
- "attestation": "I have actually reviewed both serializeError functions and confirmed they produce different JSON structures and I am not gaming the score by resolving without fixing.",
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",
21
1143
  "narrative": {
22
- "phase": "refinement",
1144
+ "phase": "regression",
23
1145
  "headline": "All T1 and T2 items cleared!",
24
1146
  "dimensions": {
25
1147
  "lowest_dimensions": [
26
1148
  {
27
- "name": "Test health",
28
- "strict": 63.1,
29
- "issues": 0,
30
- "impact": 0.0
31
- },
32
- {
33
- "name": "Error consistency",
34
- "strict": 82.0,
1149
+ "name": "Structure nav",
1150
+ "strict": 61.6,
35
1151
  "issues": 0,
36
1152
  "impact": 0.0,
37
1153
  "subjective": true,
38
1154
  "impact_description": "re-review to improve"
39
1155
  },
40
1156
  {
41
- "name": "API coherence",
42
- "strict": 85.0,
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,
43
1165
  "issues": 0,
44
1166
  "impact": 0.0,
45
1167
  "subjective": true,
@@ -72,11 +1194,6 @@
72
1194
  "name": "Security",
73
1195
  "strict": 100.0,
74
1196
  "stuck_scans": 5
75
- },
76
- {
77
- "name": "Auth consistency",
78
- "strict": 100.0,
79
- "stuck_scans": 5
80
1197
  }
81
1198
  ]
82
1199
  },
@@ -84,9 +1201,9 @@
84
1201
  {
85
1202
  "type": "debt_review",
86
1203
  "detector": null,
87
- "description": "2.3 pts of wontfix debt \u2014 review stale decisions",
1204
+ "description": "2.4 pts of wontfix debt \u2014 review stale decisions",
88
1205
  "command": "desloppify show --status wontfix",
89
- "gap": 2.3,
1206
+ "gap": 2.4,
90
1207
  "priority": 1,
91
1208
  "lane": "debt_review"
92
1209
  }
@@ -133,8 +1250,8 @@
133
1250
  }
134
1251
  },
135
1252
  "debt": {
136
- "overall_gap": 2.3,
137
- "wontfix_count": 31,
1253
+ "overall_gap": 2.4,
1254
+ "wontfix_count": 52,
138
1255
  "worst_dimension": "Test health",
139
1256
  "worst_gap": 36.9,
140
1257
  "trend": "stable"
@@ -142,7 +1259,7 @@
142
1259
  "milestone": "All T1 and T2 items cleared!",
143
1260
  "primary_action": {
144
1261
  "command": "desloppify show --status wontfix",
145
- "description": "2.3 pts of wontfix debt \u2014 review stale decisions"
1262
+ "description": "2.4 pts of wontfix debt \u2014 review stale decisions"
146
1263
  },
147
1264
  "why_now": "Work through actions in priority order. Rescan after each fix to track progress.",
148
1265
  "verification_step": {
@@ -152,43 +1269,26 @@
152
1269
  "risk_flags": [
153
1270
  {
154
1271
  "type": "wontfix_gap",
155
- "severity": "medium",
156
- "message": "Strict/lenient gap is 2.3 pts with 31 wontfix findings"
1272
+ "severity": "high",
1273
+ "message": "Strict/lenient gap is 2.4 pts with 52 wontfix findings"
157
1274
  }
158
1275
  ],
159
1276
  "strict_target": {
160
1277
  "target": 95.0,
161
- "current": 87.7,
162
- "gap": 7.3,
1278
+ "current": 79.1,
1279
+ "gap": 15.9,
163
1280
  "state": "below",
164
1281
  "warning": null
165
1282
  },
166
- "reminders": [
167
- {
168
- "type": "rereview_needed",
169
- "message": "Subjective results may be stale after resolve. Re-run `desloppify review --prepare` to refresh, or reset with `desloppify scan --reset-subjective` before a clean rerun.",
170
- "command": "desloppify review --prepare",
171
- "priority": 1,
172
- "severity": "high"
173
- },
174
- {
175
- "type": "rescan_needed",
176
- "message": "Rescan to verify \u2014 cascading effects may create new findings.",
177
- "command": "desloppify scan",
178
- "priority": 1,
179
- "severity": "high"
180
- }
181
- ],
1283
+ "reminders": [],
182
1284
  "reminder_history": {
183
1285
  "zone_classification": 3,
184
- "report_scores": 8,
1286
+ "report_scores": 10,
185
1287
  "feedback_nudge": 3,
186
1288
  "review_findings_pending": 3,
187
1289
  "stagnant_nudge": 4,
188
1290
  "review_not_run": 3,
189
- "wontfix_growing": 1,
190
- "rereview_needed": 1,
191
- "rescan_needed": 1
1291
+ "wontfix_growing": 1
192
1292
  }
193
1293
  },
194
1294
  "config": {