scip-query 0.10.0 → 0.10.2

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 (293) hide show
  1. package/README.md +115 -58
  2. package/dist/augment-vue-worker.js +1 -1
  3. package/dist/chunk-3KLLFNT4.js +2 -0
  4. package/dist/{chunk-UIWAZ2NT.js → chunk-3UVJJ6Z7.js} +1 -1
  5. package/dist/chunk-3UW7VM4H.js +62 -0
  6. package/dist/chunk-3ZYF3ELZ.js +2 -0
  7. package/dist/{chunk-MN75T4UB.js → chunk-47UA45TU.js} +2 -2
  8. package/dist/{chunk-NC4IUW25.js → chunk-4ZUJJRWT.js} +2 -2
  9. package/dist/chunk-5B53WB6E.js +4 -0
  10. package/dist/{chunk-2WEH5QHC.js → chunk-5FOPAXWY.js} +2 -2
  11. package/dist/{chunk-VZRILF2Z.js → chunk-5M4TYWVI.js} +2 -2
  12. package/dist/{chunk-QJWN6LA5.js → chunk-5QJXH6ZL.js} +5 -5
  13. package/dist/{chunk-NN3O7TPH.js → chunk-64MNV6AB.js} +1 -1
  14. package/dist/chunk-77YBOOYT.js +2 -0
  15. package/dist/chunk-7KCSELEV.js +2 -0
  16. package/dist/{chunk-ZZ2W5P3D.js → chunk-7OHWPJ5N.js} +2 -2
  17. package/dist/chunk-7S5E7KWT.js +2 -0
  18. package/dist/chunk-A3VNUGKJ.js +2 -0
  19. package/dist/{chunk-ISCKLDSS.js → chunk-A4L36SZS.js} +3 -3
  20. package/dist/{chunk-IVAIPXNO.js → chunk-AUVBR62P.js} +2 -2
  21. package/dist/chunk-AW4N6MGC.js +18 -0
  22. package/dist/{chunk-PG3ZI5IH.js → chunk-B6MJ5VQV.js} +2 -2
  23. package/dist/chunk-B75HZHUP.js +2 -0
  24. package/dist/chunk-BGBBVSH4.js +2 -0
  25. package/dist/chunk-BKDXBJDQ.js +2 -0
  26. package/dist/{chunk-AQYBOORI.js → chunk-C2QSK7E7.js} +1 -1
  27. package/dist/chunk-C3MZZ2ZN.js +2 -0
  28. package/dist/{chunk-AP5GTKSG.js → chunk-CAWSSEVM.js} +2 -2
  29. package/dist/chunk-CFL2CNIF.js +10 -0
  30. package/dist/{chunk-4HTJZC6G.js → chunk-CJJP64OC.js} +2 -2
  31. package/dist/chunk-CNTEQMHA.js +2 -0
  32. package/dist/{chunk-WEJYUS5O.js → chunk-CRU42NJU.js} +2 -2
  33. package/dist/chunk-CSWZFD46.js +2 -0
  34. package/dist/{chunk-ZOT3WUZW.js → chunk-CTCAF3YA.js} +2 -2
  35. package/dist/chunk-D322LMSA.js +5 -0
  36. package/dist/{chunk-772YYL6I.js → chunk-DAI74TJU.js} +2 -2
  37. package/dist/chunk-DE7MA6OD.js +3 -0
  38. package/dist/chunk-DJMK4DBL.js +2 -0
  39. package/dist/chunk-DRAZH77R.js +7 -0
  40. package/dist/{chunk-L2KFPRMA.js → chunk-E44ZMVNA.js} +2 -2
  41. package/dist/{chunk-BNW3Q24R.js → chunk-E7KERP7E.js} +2 -2
  42. package/dist/{chunk-QKO474FG.js → chunk-EOZIZWW4.js} +2 -2
  43. package/dist/chunk-ERHOS6AW.js +2 -0
  44. package/dist/{chunk-ADRYSISR.js → chunk-ESG4HBEF.js} +2 -2
  45. package/dist/chunk-EWC3UK4V.js +3 -0
  46. package/dist/chunk-FGCL6NDB.js +8 -0
  47. package/dist/chunk-FIB4JPEX.js +2 -0
  48. package/dist/chunk-FNRPGGVI.js +2 -0
  49. package/dist/chunk-FOQHUKNZ.js +4 -0
  50. package/dist/chunk-FPMVCDIJ.js +2 -0
  51. package/dist/chunk-FUPDW5AC.js +3 -0
  52. package/dist/chunk-G3WGZU5Q.js +2 -0
  53. package/dist/chunk-GS33KGAY.js +2 -0
  54. package/dist/chunk-GZCQTZLK.js +2 -0
  55. package/dist/{chunk-VGBSY6N7.js → chunk-HVTYSC26.js} +2 -2
  56. package/dist/{chunk-2BMFRBV6.js → chunk-ICXVNWMI.js} +2 -2
  57. package/dist/chunk-JM72FNGA.js +2 -0
  58. package/dist/chunk-KPHKX4LP.js +71 -0
  59. package/dist/{chunk-6DEX3XP6.js → chunk-LPLGJ4HO.js} +2 -2
  60. package/dist/chunk-MHK7Z53U.js +2 -0
  61. package/dist/chunk-MHTDOFV7.js +5 -0
  62. package/dist/chunk-MUULWXSJ.js +2 -0
  63. package/dist/chunk-MZ7APUFN.js +3 -0
  64. package/dist/chunk-NNDYO2DX.js +2 -0
  65. package/dist/chunk-NP5HYVLX.js +20 -0
  66. package/dist/{chunk-Y5H7TBVE.js → chunk-NVFERV4U.js} +2 -2
  67. package/dist/{chunk-LWYIGRHR.js → chunk-NXIAHE7F.js} +1 -1
  68. package/dist/chunk-O3OKSF6O.js +2 -0
  69. package/dist/chunk-O4L4AB3T.js +2 -0
  70. package/dist/chunk-OBBDKQAG.js +3 -0
  71. package/dist/chunk-OLD6PBU6.js +7 -0
  72. package/dist/{chunk-V76FCF5F.js → chunk-PFOCOG57.js} +2 -2
  73. package/dist/chunk-PVZMPG5I.js +2 -0
  74. package/dist/chunk-QLNGUWR7.js +2 -0
  75. package/dist/chunk-QSXQT3NE.js +2 -0
  76. package/dist/{chunk-OLCKSG3Y.js → chunk-QVCCLDZI.js} +2 -2
  77. package/dist/chunk-RHTJBYZ5.js +2 -0
  78. package/dist/chunk-SPE4YCOT.js +7 -0
  79. package/dist/{chunk-FVIKFWUL.js → chunk-TM6GVHA6.js} +2 -2
  80. package/dist/chunk-TO54DY4O.js +2 -0
  81. package/dist/chunk-UMNENNTX.js +2 -0
  82. package/dist/chunk-UNJG7P2I.js +2 -0
  83. package/dist/{chunk-TKDJQ2WD.js → chunk-UUBMFL3F.js} +1 -1
  84. package/dist/chunk-VAA5FFIW.js +2 -0
  85. package/dist/chunk-WDUTG2ZR.js +4 -0
  86. package/dist/chunk-X7ZY6FFF.js +4 -0
  87. package/dist/{chunk-BGRPMGTD.js → chunk-YQH353VA.js} +2 -2
  88. package/dist/chunk-YTR4CO5S.js +38 -0
  89. package/dist/chunk-YUOAAR24.js +2 -0
  90. package/dist/{chunk-YWZBKYLS.js → chunk-YYD245WG.js} +2 -2
  91. package/dist/{chunk-SCEMECW7.js → chunk-Z4VHYJ5U.js} +2 -2
  92. package/dist/chunk-ZFMPHDAT.js +4 -0
  93. package/dist/chunk-ZQLO2SCU.js +6 -0
  94. package/dist/chunk-ZSLT7NWQ.js +61 -0
  95. package/dist/cli.js +276 -271
  96. package/dist/{config-types-CGIeLEpY.d.ts → config-types-Bj4sh28g.d.ts} +37 -1
  97. package/dist/{db-DdTPetj5.d.ts → db-CTarohbZ.d.ts} +1 -1
  98. package/dist/git-history-Dao3_Pu9.d.ts +12 -0
  99. package/dist/{health-C6r2VgpA.d.ts → health-Bx0x1HAG.d.ts} +64 -4
  100. package/dist/index.d.ts +7 -6
  101. package/dist/index.js +1 -1
  102. package/dist/postinstall.js +2 -2
  103. package/dist/queries/affected.d.ts +2 -2
  104. package/dist/queries/affected.js +1 -1
  105. package/dist/queries/bottlenecks.d.ts +6 -2
  106. package/dist/queries/bottlenecks.js +1 -1
  107. package/dist/queries/by-kind.d.ts +2 -2
  108. package/dist/queries/by-kind.js +1 -1
  109. package/dist/queries/call-graph.d.ts +2 -2
  110. package/dist/queries/call-graph.js +1 -1
  111. package/dist/queries/change-surface.d.ts +2 -2
  112. package/dist/queries/change-surface.js +1 -1
  113. package/dist/queries/cleanup-plan.d.ts +2 -2
  114. package/dist/queries/cleanup-plan.js +1 -1
  115. package/dist/queries/co-change.d.ts +40 -5
  116. package/dist/queries/co-change.js +1 -1
  117. package/dist/queries/code.d.ts +2 -2
  118. package/dist/queries/code.js +1 -1
  119. package/dist/queries/complexity-hotspots.d.ts +2 -2
  120. package/dist/queries/complexity-hotspots.js +1 -1
  121. package/dist/queries/complexity.d.ts +2 -2
  122. package/dist/queries/complexity.js +1 -1
  123. package/dist/queries/convergence.d.ts +2 -2
  124. package/dist/queries/convergence.js +1 -1
  125. package/dist/queries/coupling.d.ts +6 -2
  126. package/dist/queries/coupling.js +1 -1
  127. package/dist/queries/cycles.d.ts +2 -2
  128. package/dist/queries/cycles.js +1 -1
  129. package/dist/queries/dataflow.d.ts +2 -2
  130. package/dist/queries/dataflow.js +1 -1
  131. package/dist/queries/dead.d.ts +10 -3
  132. package/dist/queries/dead.js +1 -1
  133. package/dist/queries/deep-chains.d.ts +6 -2
  134. package/dist/queries/deep-chains.js +1 -1
  135. package/dist/queries/deps.d.ts +2 -2
  136. package/dist/queries/deps.js +1 -1
  137. package/dist/queries/diff-gate.d.ts +66 -3
  138. package/dist/queries/diff-gate.js +1 -1
  139. package/dist/queries/diff-impact.d.ts +20 -4
  140. package/dist/queries/diff-impact.js +1 -1
  141. package/dist/queries/doc-drift.d.ts +20 -3
  142. package/dist/queries/doc-drift.js +1 -1
  143. package/dist/queries/drift.d.ts +10 -3
  144. package/dist/queries/drift.js +1 -1
  145. package/dist/queries/extract-candidates.d.ts +11 -3
  146. package/dist/queries/extract-candidates.js +1 -1
  147. package/dist/queries/fan.d.ts +2 -2
  148. package/dist/queries/fan.js +1 -1
  149. package/dist/queries/files.d.ts +2 -2
  150. package/dist/queries/files.js +1 -1
  151. package/dist/queries/health.d.ts +3 -3
  152. package/dist/queries/health.js +1 -1
  153. package/dist/queries/hierarchy.d.ts +2 -2
  154. package/dist/queries/hierarchy.js +1 -1
  155. package/dist/queries/hotspots.d.ts +2 -2
  156. package/dist/queries/hotspots.js +1 -1
  157. package/dist/queries/imports.d.ts +2 -2
  158. package/dist/queries/imports.js +1 -1
  159. package/dist/queries/incomplete-migration.d.ts +16 -3
  160. package/dist/queries/incomplete-migration.js +1 -1
  161. package/dist/queries/index.d.ts +20 -12
  162. package/dist/queries/index.js +1 -1
  163. package/dist/queries/isolated.d.ts +2 -2
  164. package/dist/queries/isolated.js +1 -1
  165. package/dist/queries/locality-candidates.d.ts +51 -0
  166. package/dist/queries/locality-candidates.js +2 -0
  167. package/dist/queries/members.d.ts +2 -2
  168. package/dist/queries/members.js +1 -1
  169. package/dist/queries/methods.d.ts +2 -2
  170. package/dist/queries/methods.js +1 -1
  171. package/dist/queries/outline.d.ts +2 -2
  172. package/dist/queries/outline.js +1 -1
  173. package/dist/queries/passthrough-candidates.d.ts +8 -3
  174. package/dist/queries/passthrough-candidates.js +1 -1
  175. package/dist/queries/plan-context.d.ts +4 -2
  176. package/dist/queries/plan-context.js +1 -1
  177. package/dist/queries/react-component-duplicates.d.ts +31 -0
  178. package/dist/queries/react-component-duplicates.js +2 -0
  179. package/dist/queries/react-hook-candidates.d.ts +40 -0
  180. package/dist/queries/react-hook-candidates.js +2 -0
  181. package/dist/queries/react-large-component-pressure.d.ts +34 -0
  182. package/dist/queries/react-large-component-pressure.js +2 -0
  183. package/dist/queries/recent-duplicates.d.ts +32 -3
  184. package/dist/queries/recent-duplicates.js +1 -1
  185. package/dist/queries/redundant-reexports.d.ts +7 -3
  186. package/dist/queries/redundant-reexports.js +1 -1
  187. package/dist/queries/refs.d.ts +2 -2
  188. package/dist/queries/refs.js +1 -1
  189. package/dist/queries/self-audit.d.ts +2 -2
  190. package/dist/queries/self-audit.js +1 -1
  191. package/dist/queries/similar-chains.d.ts +2 -2
  192. package/dist/queries/similar-chains.js +1 -1
  193. package/dist/queries/similar-files.d.ts +2 -2
  194. package/dist/queries/similar-files.js +1 -1
  195. package/dist/queries/similar-signatures.d.ts +2 -2
  196. package/dist/queries/similar-signatures.js +1 -1
  197. package/dist/queries/similar.d.ts +21 -3
  198. package/dist/queries/similar.js +1 -1
  199. package/dist/queries/slice.d.ts +2 -2
  200. package/dist/queries/slice.js +1 -1
  201. package/dist/queries/stale-abstractions.d.ts +10 -3
  202. package/dist/queries/stale-abstractions.js +1 -1
  203. package/dist/queries/stats.d.ts +2 -2
  204. package/dist/queries/stats.js +1 -1
  205. package/dist/queries/surface.d.ts +2 -2
  206. package/dist/queries/surface.js +1 -1
  207. package/dist/queries/symbols.d.ts +2 -2
  208. package/dist/queries/symbols.js +1 -1
  209. package/dist/queries/system.d.ts +2 -2
  210. package/dist/queries/system.js +1 -1
  211. package/dist/queries/trace.d.ts +2 -2
  212. package/dist/queries/trace.js +1 -1
  213. package/dist/queries/unused-imports.d.ts +4 -0
  214. package/dist/queries/unused-imports.js +2 -0
  215. package/dist/queries/unused-params.d.ts +2 -2
  216. package/dist/queries/unused-params.js +1 -1
  217. package/dist/queries/vue-component-duplicates.d.ts +35 -0
  218. package/dist/queries/vue-component-duplicates.js +2 -0
  219. package/dist/queries/vue-composable-candidates.d.ts +40 -0
  220. package/dist/queries/vue-composable-candidates.js +2 -0
  221. package/dist/queries/vue-large-view-pressure.d.ts +37 -0
  222. package/dist/queries/vue-large-view-pressure.js +2 -0
  223. package/dist/queries/wrapper-candidates.d.ts +6 -3
  224. package/dist/queries/wrapper-candidates.js +1 -1
  225. package/dist/reindex-worker.js +10 -10
  226. package/dist/reindex.d.ts +1 -1
  227. package/dist/reindex.js +22 -22
  228. package/dist/runtime.d.ts +1 -1
  229. package/dist/runtime.js +2 -2
  230. package/docs/AGENT_GUIDE.md +353 -0
  231. package/docs/AI_FAILURE_MODES.md +278 -0
  232. package/docs/API.md +40 -0
  233. package/docs/COMMAND_REFERENCE.md +131 -0
  234. package/docs/DETECTOR_GUIDE.md +119 -0
  235. package/docs/accuracy-hardening-goal.md +54 -0
  236. package/docs/analyzer-inventory.md +162 -0
  237. package/docs/analyzer-validation-ledger.md +262 -0
  238. package/docs/analyzer-validation-protocol.md +192 -0
  239. package/docs/assets/scip-query-logo-dark.svg +21 -0
  240. package/docs/assets/scip-query-logo.svg +24 -0
  241. package/docs/locality-analyzer-design.md +193 -0
  242. package/package.json +44 -5
  243. package/skills/scip-directory-architecture/SKILL.md +178 -0
  244. package/skills/scip-maintainability/SKILL.md +24 -3
  245. package/skills/scip-query/SKILL.md +4 -2
  246. package/skills/scip-query-setup/SKILL.md +118 -0
  247. package/skills/scip-react-maintainability/SKILL.md +114 -0
  248. package/skills/scip-vue-maintainability/SKILL.md +130 -0
  249. package/dist/chunk-4DAPXOWD.js +0 -2
  250. package/dist/chunk-4JQFTUKD.js +0 -2
  251. package/dist/chunk-4MHT7LKP.js +0 -3
  252. package/dist/chunk-5OHZEO3U.js +0 -3
  253. package/dist/chunk-5QJIEYFB.js +0 -34
  254. package/dist/chunk-6IGXZZQ4.js +0 -4
  255. package/dist/chunk-6K2JQ2VI.js +0 -61
  256. package/dist/chunk-6QVCPUK6.js +0 -2
  257. package/dist/chunk-6VL4AIEO.js +0 -8
  258. package/dist/chunk-A2VTV2QB.js +0 -7
  259. package/dist/chunk-AI2ECT7L.js +0 -2
  260. package/dist/chunk-BUAC4Q4G.js +0 -2
  261. package/dist/chunk-BZ6LCGE6.js +0 -2
  262. package/dist/chunk-CMXFASVD.js +0 -2
  263. package/dist/chunk-CO3AL7NZ.js +0 -2
  264. package/dist/chunk-FVVT7GV6.js +0 -4
  265. package/dist/chunk-HXXRN77A.js +0 -2
  266. package/dist/chunk-IC3RC3KJ.js +0 -4
  267. package/dist/chunk-ITHQJZTG.js +0 -2
  268. package/dist/chunk-IW7ASGVF.js +0 -2
  269. package/dist/chunk-JODYQDE4.js +0 -2
  270. package/dist/chunk-MCW36F2D.js +0 -2
  271. package/dist/chunk-MX6F756F.js +0 -2
  272. package/dist/chunk-NGI4V4AB.js +0 -18
  273. package/dist/chunk-O6KCZPJQ.js +0 -62
  274. package/dist/chunk-OAI5GEIN.js +0 -6
  275. package/dist/chunk-OH5HIAID.js +0 -4
  276. package/dist/chunk-OXKEUWMJ.js +0 -2
  277. package/dist/chunk-PBGTMPJ7.js +0 -2
  278. package/dist/chunk-PRVDXGSK.js +0 -2
  279. package/dist/chunk-QYKKTYBN.js +0 -6
  280. package/dist/chunk-R3G6ERW7.js +0 -7
  281. package/dist/chunk-R6XDPWJA.js +0 -10
  282. package/dist/chunk-SJR4SB7B.js +0 -2
  283. package/dist/chunk-SYKCO25G.js +0 -16
  284. package/dist/chunk-T22X7WT6.js +0 -2
  285. package/dist/chunk-TH4JVC34.js +0 -71
  286. package/dist/chunk-VDY4HYNK.js +0 -2
  287. package/dist/chunk-VDZIEDJB.js +0 -2
  288. package/dist/chunk-VDZL45XI.js +0 -2
  289. package/dist/chunk-WJIS6BNI.js +0 -3
  290. package/dist/chunk-WN5Z3UVT.js +0 -7
  291. package/dist/chunk-XCW7DYHM.js +0 -2
  292. package/dist/chunk-ZF6P2NAT.js +0 -63
  293. package/dist/chunk-ZGIK464P.js +0 -2
@@ -0,0 +1,262 @@
1
+ # Analyzer Validation Ledger
2
+
3
+ This ledger records the analyzer evaluation work carried out after the analyzer inventory, validation protocol, and locality design. It is the operating document for keeping analyzer accuracy work traceable end to end.
4
+
5
+ The companion documents are:
6
+
7
+ - `docs/analyzer-inventory.md`: names the analyzers and their action tiers.
8
+ - `docs/analyzer-validation-protocol.md`: defines the review protocol and per-analyzer TP/FP/FN criteria.
9
+ - `docs/locality-analyzer-design.md`: defines the locality and organization analyzer behavior.
10
+
11
+ ## Source Anchors
12
+
13
+ The ledger is anchored to the current tool surface, not memory.
14
+
15
+ | Surface | Source | Why it anchors the ledger |
16
+ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------- |
17
+ | Repo-wide health analysis | `scip-query code health --json` reported `src/queries/health/health.ts:194`, where `health()` runs `runHealthAnalyses()` and `buildHealthReport()`. | Every repo-wide analyzer validation must eventually reconcile with health output and scoring. |
18
+ | Change-time gate analysis | `scip-query code diffGate --json` reported `src/queries/impact/diff-gate.ts:94`, where `diffGate()` runs `echo`, `incomplete-migration`, `co-change-partner`, `doc-reference`, `unused-params`, `new-dead`, and `baseline`. | Every diff-only analyzer needs a separate validation path from repo-wide health. |
19
+ | Public command registry | `scip-query trace queryCommandOrder --json` reported `src/runtime/commands/query-command-specs.ts:10`, where the public query command order starts. `scip-query code queryCommandDescriptor --json` reported `src/runtime/commands/query-command-specs.ts:94`, where command descriptors are resolved by id. | The ledger must not silently miss a public analyzer command. |
20
+ | Diff-gate check list | `scip-query trace DIFF_GATE_CHECKS --json` reported `src/queries/impact/diff-gate.ts:27`, where the canonical diff-gate check list is exported. | The ledger must cover every change-time check that can block a diff. |
21
+
22
+ ## Core Concepts
23
+
24
+ A validation ledger is a maintained record of analyzer evaluation work, including the claim being tested, the repositories used, the evidence captured, the verdict, and the next precision action. Its essential role is to keep validation from dissolving into scattered notes by making every analyzer claim traceable to a reviewed outcome.
25
+
26
+ A ledger item is one independently completable evaluation obligation. It may cover one analyzer, one analyzer family, one repository run, or one score-model decision; its essential characteristic is that it has a clear done signal and can move from ready to complete without needing the whole validation effort to finish.
27
+
28
+ A run batch is a bounded execution of analyzer commands against one repository and revision. It is the smallest repeatable field-test unit because it records the project, commit, commands, raw output, sample selection, and reviewer verdicts together.
29
+
30
+ A calibration decision is a documented change to detector confidence, action tier, score weight, threshold, wording, or evidence fields. It is not just a preference; it is a maintainer decision justified by reviewed true positives, false positives, false negatives, suppressions, or repair outcomes.
31
+
32
+ A repair outcome is the result of acting on an analyzer finding. It matters because an analyzer can be locally accurate while still causing bad repairs, churn, misplaced abstractions, or broader APIs when an agent follows it.
33
+
34
+ ## Status Values
35
+
36
+ | Status | Meaning |
37
+ | ---------- | ---------------------------------------------------------------------------------- |
38
+ | `ready` | The item has a defined scope, command set, corpus, and done signal. |
39
+ | `running` | Raw analyzer output or human review is currently being collected. |
40
+ | `blocked` | The item cannot be completed until tooling, indexing, or corpus access improves. |
41
+ | `complete` | The item has reviewed evidence, verdicts, and any next precision actions recorded. |
42
+ | `deferred` | The item is valid but intentionally lower priority than other ledger work. |
43
+
44
+ ## Active Ledger
45
+
46
+ Closeout status: all active ledger rows are complete as of 2026-06-22. Remaining future work is provider- or corpus-gated, not an unfinished validation slice: true co-change issue/PR label ingestion needs a repository metadata provider, and locality score integration needs stronger consumer-coverage plus repair-outcome evidence.
47
+
48
+ | ID | Item | Scope | Status | Next action | Done signal |
49
+ | ------- | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
50
+ | AVL-001 | Field evaluation baseline | Run the protocol on `scip-query`, `Stable_Management`, `Vega_2.0`, and `SynthRunnerRust`. | `complete` | Completed in `docs/validation/2026-06-21-second-repo-confirmation.md`. | A dated run summary exists for each repo with raw-output locations and sampling notes. |
51
+ | AVL-002 | Direct repair analyzer verdicts | `cleanup-plan`, `dead`, `new-dead`, `isolated`, `unused-params`, `unused-imports`, `redundant-reexports`, `passthrough-candidates`, `cycles`, broken `doc-drift`, and `doc-reference`. | `complete` | Completed in `docs/validation/2026-06-21-direct-deletion-family-closure-result.md`. | Each direct analyzer has TP/FP/FN counts, accepted-design examples, and precision actions. |
52
+ | AVL-003 | Contextual signal analyzer verdicts | Similarity, extraction, locality, wrapper, stale abstraction, frontend duplicate, hook/composable, co-change, bottleneck, coupling, drift, and deep-chain families. | `complete` | Completed in `docs/validation/2026-06-21-contextual-signal-closure-result.md`. | Each contextual family has a reviewed precision note and a score-weight recommendation. |
53
+ | AVL-004 | Support analysis accuracy | `affected`, `change-surface`, `plan-context`, navigation commands, graph metrics, and `self-audit`. | `complete` | Completed in `docs/validation/2026-06-21-support-analysis-accuracy-result.md`. | Support commands have referential-accuracy notes and known unsupported cases. |
54
+ | AVL-005 | Analyzer implementation parity | Confirm each public analyzer command's documented behavior matches implementation behavior. | `complete` | Completed in `docs/validation/2026-06-21-analyzer-implementation-parity-result.md`. | The inventory and protocol either match implementation or list required doc/code corrections. |
55
+ | AVL-006 | Score calibration | Evaluate direct findings, contextual signals, suppressions, validation ratio, and signal backlog pressure. | `complete` | Completed in `docs/validation/2026-06-21-score-calibration-finalization-result.md`. | A calibration memo states score-weight changes, accepted current weights, or blocked evidence gaps. |
56
+ | AVL-007 | Output and schema quality | Verify each analyzer emits enough structured evidence for users and agents to review the claim. | `complete` | Completed in `docs/validation/2026-06-21-output-schema-quality-finalization-result.md`. | Each analyzer family has an output-quality verdict and missing-field list. |
57
+ | AVL-008 | Performance and budget behavior | Check large-index behavior, `--full`, scan limits, git-history bounds, and graceful degradation. | `complete` | Completed in `docs/validation/2026-06-21-performance-budget-behavior-result.md`. | Budget behavior is documented with any timeout, cap, or misleading-empty-output issues. |
58
+ | AVL-009 | Suppression lifecycle | Evaluate whether suppressions are stale, justified, expired, or useful as detector precision feedback. | `complete` | Completed in `docs/validation/2026-06-21-suppression-lifecycle-result.md`. | Suppression categories have counts, stale examples, and trust-weight recommendations. |
59
+ | AVL-010 | Cross-language capability boundaries | Establish what works for TypeScript, React, Vue, Rust, and any unsupported language surfaces. | `complete` | Completed in `docs/validation/2026-06-21-cross-language-capability-boundaries-result.md`. | Capability notes distinguish "no findings" from "not supported by current evidence." |
60
+ | AVL-011 | Agent repair outcomes | Test whether acting on analyzer findings produces better code rather than churn or misplaced abstraction. | `complete` | Completed in `docs/validation/2026-06-21-agent-repair-outcomes-result.md`. | Each action tier has at least one reviewed repair outcome or an explicit reason it cannot be tested yet. |
61
+ | AVL-012 | Locality analyzer validation | Validate the proposed `locality-candidates` report and `scip-locality-review` skill workflow before implementation. | `complete` | Completed in `docs/validation/2026-06-21-locality-analyzer-validation-result.md`. | The locality design has TP/FP/FN-style examples and a go/no-go recommendation for implementation. |
62
+ | AVL-013 | Config and declared-coupling freshness | Check whether `.scipquery.json` declared couplings and suppressions still point at current paths. | `complete` | Completed in `docs/validation/2026-06-21-config-declared-coupling-freshness-result.md`. | Stale config paths are fixed, removed, or documented as intentionally retained. |
63
+ | AVL-014 | Public command surface coverage | Ensure every public analyzer command is present in the inventory, protocol, and ledger. | `complete` | Completed in `docs/validation/2026-06-21-public-command-surface-coverage-result.md`. | A coverage checklist shows no missing analyzer or marks non-analyzer support commands separately. |
64
+
65
+ ## Public Command Coverage Checklist
66
+
67
+ The canonical source is `src/runtime/commands/query-command-specs.ts:10-73`, where `queryCommandOrder` lists the public query command surface.
68
+
69
+ - Core and navigation support: `stats`, `files`, `methods`, `refs`, `trace`, `deps`, `rdeps`, `system`, `surface`, `imports`, `imported-by`, `outline`, `members`, `by-kind`, `kind-counts`, `hierarchy`, `call-graph`, `code`, `dataflow`, `slice`
70
+ - Direct cleanup and deletion analyzers: `dead`, `isolated`, `unused-imports`, `cleanup-plan`, `unused-params`, `passthrough-candidates`, `redundant-reexports`
71
+ - Similarity, reuse, extraction, and locality analyzers: `similar`, `similar-files`, `similar-chains`, `similar-signatures`, `recent-duplicates`, `extract-candidates`, `locality-candidates`, `wrapper-candidates`, `stale-abstractions`, `doc-drift`, `drift`, `convergence`
72
+ - Frontend analyzers: `react-component-duplicates`, `react-hook-candidates`, `react-large-component-pressure`, `vue-component-duplicates`, `vue-composable-candidates`, `vue-large-view-pressure`
73
+ - Graph, risk, and complexity analyzers: `hotspots`, `fan-in`, `fan-out`, `coupling`, `cycles`, `bottlenecks`, `deep-chains`, `complexity-hotspots`, `complexity`
74
+ - Diff, impact, and planning analyzers: `affected`, `change-surface`, `co-change`, `diff-gate`, `incomplete-migration`, `plan-context`
75
+ - Meta and action commands: `self-audit`, `cleanup-apply`
76
+
77
+ ## Completed Run Batches
78
+
79
+ The completed effort used this order so early runs created useful evidence for later calibration work.
80
+
81
+ Current pilot:
82
+
83
+ - Plan: `docs/plans/2026-06-21-analyzer-validation-pilot.md`
84
+ - Summary: `docs/validation/2026-06-21-analyzer-validation-pilot.md`
85
+ - Verdict review: `docs/validation/2026-06-21-analyzer-verdict-review.md`
86
+ - Calibration memo: `docs/validation/2026-06-21-analyzer-calibration-memo.md`
87
+ - Precision implementation plan: `docs/plans/2026-06-21-analyzer-precision-implementation.md`
88
+ - Precision implementation result: `docs/validation/2026-06-21-analyzer-precision-implementation-result.md`
89
+ - Stable_Management second confirmation: `docs/validation/2026-06-21-stable-management-second-confirmation.md`
90
+ - Echo tier refinement result: `docs/validation/2026-06-21-echo-tier-refinement-result.md`
91
+ - Wrapper boundary evidence result: `docs/validation/2026-06-21-wrapper-boundary-evidence-result.md`
92
+ - Passthrough boundary evidence result: `docs/validation/2026-06-22-passthrough-boundary-evidence-result.md`
93
+ - Passthrough public-facade caveats result: `docs/validation/2026-06-22-passthrough-public-facade-caveats-result.md`
94
+ - Public surface caveats result: `docs/validation/2026-06-22-public-surface-caveats-result.md`
95
+ - Doc cited-claim metadata result: `docs/validation/2026-06-22-doc-cited-claim-metadata-result.md`
96
+ - Root-cause grouping result: `docs/validation/2026-06-22-root-cause-grouping-result.md`
97
+ - Co-change partner labels result: `docs/validation/2026-06-22-co-change-partner-labels-result.md`
98
+ - Incomplete migration containment result: `docs/validation/2026-06-22-incomplete-migration-containment-result.md`
99
+ - Co-change recency and broad-sweep context result: `docs/validation/2026-06-22-co-change-recency-sweep-result.md`
100
+ - Doc drift historical intent result: `docs/validation/2026-06-22-doc-drift-historical-intent-result.md`
101
+ - Framework entry caveats result: `docs/validation/2026-06-22-framework-entry-caveats-result.md`
102
+ - Incomplete migration scope hints result: `docs/validation/2026-06-22-incomplete-migration-scope-hints-result.md`
103
+ - Doc reference citation parser result: `docs/validation/2026-06-22-doc-reference-citation-parser-result.md`
104
+ - Co-change subject context result: `docs/validation/2026-06-22-co-change-subject-context-result.md`
105
+ - Second-corpus score-weight confirmation result: `docs/validation/2026-06-22-second-corpus-score-weight-confirmation-result.md`
106
+ - Passthrough exported-facade second-corpus result: `docs/validation/2026-06-22-passthrough-exported-facade-second-corpus-result.md`
107
+ - Incomplete migration second-corpus scope result: `docs/validation/2026-06-22-incomplete-migration-second-corpus-scope-result.md`
108
+ - Doc parser second-corpus validation result: `docs/validation/2026-06-22-doc-parser-second-corpus-validation-result.md`
109
+ - Validation ledger closeout result: `docs/validation/2026-06-22-validation-ledger-closeout-result.md`
110
+ - Global install cross-verification result: `docs/validation/2026-06-22-global-install-cross-verification-result.md`
111
+ - Stable Management locality suggested-home review: `docs/validation/2026-06-22-stable-management-locality-suggested-home-review.md`
112
+ - Locality positive suggested-home result: `docs/validation/2026-06-22-locality-positive-suggested-home-result.md`
113
+ - Stable_Management wrapper confirmation: `docs/validation/2026-06-21-stable-management-wrapper-boundary-confirmation.md`
114
+ - Vue pressure-kind output result: `docs/validation/2026-06-21-vue-pressure-kind-output-result.md`
115
+ - Similarity evidence split result: `docs/validation/2026-06-21-similarity-evidence-split-result.md`
116
+ - Doc citation-kind output result: `docs/validation/2026-06-21-doc-citation-kind-output-result.md`
117
+ - Baseline metadata inheritance result: `docs/validation/2026-06-21-baseline-metadata-inheritance-result.md`
118
+ - Second-repo confirmation: `docs/validation/2026-06-21-second-repo-confirmation.md`
119
+ - Rust wrapper and React pressure review: `docs/validation/2026-06-21-rust-wrapper-react-pressure-review.md`
120
+ - React pressure-kind output result: `docs/validation/2026-06-21-react-pressure-kind-output-result.md`
121
+ - Rust wrapper boundary vocabulary result: `docs/validation/2026-06-21-rust-wrapper-boundary-vocabulary-result.md`
122
+ - Frontend behavior evidence classification result: `docs/validation/2026-06-21-frontend-behavior-evidence-classification-result.md`
123
+ - Extract candidate evidence classification result: `docs/validation/2026-06-21-extract-candidate-evidence-classification-result.md`
124
+ - Stale abstraction action-tier result: `docs/validation/2026-06-21-stale-abstraction-action-tier-result.md`
125
+ - Health score action-tier counts result: `docs/validation/2026-06-21-health-score-action-tier-counts-result.md`
126
+ - Graph-risk family result: `docs/validation/2026-06-21-graph-risk-family-result.md`
127
+ - Config declared-coupling freshness result: `docs/validation/2026-06-21-config-declared-coupling-freshness-result.md`
128
+ - Suppression lifecycle result: `docs/validation/2026-06-21-suppression-lifecycle-result.md`
129
+ - Support analysis accuracy result: `docs/validation/2026-06-21-support-analysis-accuracy-result.md`
130
+ - Cross-language capability boundaries result: `docs/validation/2026-06-21-cross-language-capability-boundaries-result.md`
131
+ - Public command surface coverage result: `docs/validation/2026-06-21-public-command-surface-coverage-result.md`
132
+ - Analyzer implementation parity result: `docs/validation/2026-06-21-analyzer-implementation-parity-result.md`
133
+ - Performance and budget behavior result: `docs/validation/2026-06-21-performance-budget-behavior-result.md`
134
+ - Agent repair outcomes result: `docs/validation/2026-06-21-agent-repair-outcomes-result.md`
135
+ - Locality analyzer validation result: `docs/validation/2026-06-21-locality-analyzer-validation-result.md`
136
+ - Direct small analyzer verdicts result: `docs/validation/2026-06-21-direct-small-analyzer-verdicts-result.md`
137
+ - Direct remaining verdicts result: `docs/validation/2026-06-21-direct-remaining-verdicts-result.md`
138
+ - Direct deletion-family closure result: `docs/validation/2026-06-21-direct-deletion-family-closure-result.md`
139
+ - Contextual signal closure result: `docs/validation/2026-06-21-contextual-signal-closure-result.md`
140
+ - Score calibration finalization result: `docs/validation/2026-06-21-score-calibration-finalization-result.md`
141
+ - Output/schema quality finalization result: `docs/validation/2026-06-21-output-schema-quality-finalization-result.md`
142
+ - Raw output root: `/tmp/scip-query-validation/2026-06-21-pilot`
143
+
144
+ ### Batch 1: Corpus Baseline
145
+
146
+ - Repositories: `scip-query`, `Stable_Management`, `Vega_2.0`, `SynthRunnerRust`.
147
+ - Commands:
148
+ - `git rev-parse HEAD`
149
+ - `scip-query reindex`
150
+ - `scip-query health --full --json`
151
+ - `scip-query diff-gate --json`
152
+ - `scip-query capability-matrix`
153
+ - Outputs:
154
+ - Raw JSON outside the repo unless intentionally promoted.
155
+ - Plain text output when a command does not expose `--json`.
156
+ - Summary in `docs/validation/YYYY-MM-DD-corpus-baseline.md`.
157
+
158
+ ### Batch 2: Direct Repair Families
159
+
160
+ - Commands:
161
+ - `scip-query cleanup-plan --json`
162
+ - `scip-query dead --only-dead --json`
163
+ - `scip-query isolated --json`
164
+ - `scip-query unused-params --json`
165
+ - `scip-query redundant-reexports`
166
+ - `scip-query passthrough-candidates --json`
167
+ - `scip-query cycles --json`
168
+ - `scip-query doc-drift --json`
169
+ - Review:
170
+ - Top 10 findings, 5 threshold-edge findings, and 5 false-negative probes where possible.
171
+ - Classify as `tp`, `fp`, `accepted_design`, `needs_judgment`, or `fn`.
172
+
173
+ ### Batch 3: Contextual Signal Families
174
+
175
+ - Commands:
176
+ - `scip-query similar --json`
177
+ - `scip-query similar-files --json`
178
+ - `scip-query similar-chains --json`
179
+ - `scip-query similar-signatures --json`
180
+ - `scip-query recent-duplicates --json`
181
+ - `scip-query extract-candidates --json`
182
+ - `scip-query wrapper-candidates --json`
183
+ - `scip-query stale-abstractions --json`
184
+ - `scip-query co-change --json`
185
+ - `scip-query bottlenecks --json`
186
+ - `scip-query coupling --json`
187
+ - `scip-query deep-chains --json`
188
+ - `scip-query drift --json`
189
+ - Review:
190
+ - Separate "true signal" from "direct repair."
191
+ - Record what product or architecture judgment was needed.
192
+
193
+ ### Batch 4: Frontend-Specific Families
194
+
195
+ - React corpus: `Vega_2.0`.
196
+ - Vue corpus: `Stable_Management`.
197
+ - Commands:
198
+ - `scip-query react-component-duplicates --full --json`
199
+ - `scip-query react-hook-candidates --full --json`
200
+ - `scip-query react-large-component-pressure --full --json`
201
+ - `scip-query vue-component-duplicates --full --json`
202
+ - `scip-query vue-composable-candidates --full --json`
203
+ - `scip-query vue-large-view-pressure --full --json`
204
+ - Review:
205
+ - Validate whether findings imply component extraction, hook/composable extraction, locality repair, or only investigation.
206
+
207
+ ### Batch 5: Evidence Providers and Agent Outcomes
208
+
209
+ - Commands:
210
+ - `scip-query plan-context <target> --full --json`
211
+ - `scip-query change-surface <file> --json`
212
+ - `scip-query affected <symbol> --json`
213
+ - `scip-query refs <symbol> --json`
214
+ - `scip-query imports <file> --json`
215
+ - `scip-query rdeps <file>`
216
+ - `scip-query self-audit --samples 100 --json`
217
+ - Review:
218
+ - Confirm reference accuracy.
219
+ - Pick a small number of analyzer findings and record whether an agent could repair them cleanly.
220
+
221
+ ## Verdict Record Template
222
+
223
+ ```json
224
+ {
225
+ "ledgerId": "AVL-002",
226
+ "repo": "scip-query",
227
+ "revision": "COMMIT",
228
+ "command": "dead --only-dead --json",
229
+ "findingId": "stable id or pasted summary",
230
+ "location": "src/path/file.ts:10",
231
+ "verdict": "tp | fp | accepted_design | needs_judgment | fn",
232
+ "actionTier": "direct | signal | support",
233
+ "evidence": ["facts that support the verdict"],
234
+ "counterevidence": ["facts that weaken the analyzer claim"],
235
+ "repairOutcome": "not_attempted | improved | churn | bad_abstraction | blocked",
236
+ "precisionAction": "none | parser | root_detection | threshold | score_weight | output_schema | docs | tests",
237
+ "notes": "short reviewer note"
238
+ }
239
+ ```
240
+
241
+ ## Update Rules
242
+
243
+ When a run batch completes:
244
+
245
+ 1. Update the relevant `AVL-*` rows from `ready` or `running` to `complete`, `blocked`, or `deferred`.
246
+ 2. Add a dated summary under `docs/validation/` when the result is worth retaining.
247
+ 3. Keep raw JSON out of the repo unless it is small and useful as a fixture.
248
+ 4. Turn precision actions into implementation issues or a concrete implementation plan.
249
+ 5. If a finding changes an action tier or score-weight recommendation, update `docs/analyzer-inventory.md` and `docs/analyzer-validation-protocol.md`.
250
+
251
+ ## Initial End-to-End Slice
252
+
253
+ The first concrete run was intentionally narrow:
254
+
255
+ 1. Run Batch 1 on `scip-query` and `Stable_Management`.
256
+ 2. Run Batch 2 only for `dead`, `unused-params`, `passthrough-candidates`, and `doc-drift`.
257
+ 3. Run Batch 3 only for `similar`, `wrapper-candidates`, and `co-change`.
258
+ 4. Run Batch 4 only for Vue on `Stable_Management`.
259
+ 5. Record at least 30 reviewed verdicts.
260
+ 6. Produce one calibration memo that says whether the current direct/signal/support split still holds.
261
+
262
+ That slice tested the ledger, the protocol, the review burden, and the score model before the later completion passes covered the remaining analyzer families.
@@ -0,0 +1,192 @@
1
+ # Analyzer Validation Protocol
2
+
3
+ This document answers the part of the analyzer review that the inventory does not: how to test whether each analyzer is right across real codebases, how to label false positives and false negatives, and how to turn those labels into programmatic precision work.
4
+
5
+ The companion inventory is `docs/analyzer-inventory.md`. The running work tracker is `docs/analyzer-validation-ledger.md`. The companion placement design is `docs/locality-analyzer-design.md`.
6
+
7
+ ## Core Concepts
8
+
9
+ A validation corpus is a deliberately chosen set of real repositories, revisions, and stack shapes used to test analyzer claims against maintained code. It is not just a pile of projects; its essential job is to expose each analyzer to the kinds of source layouts, framework idioms, build boundaries, and historical changes that determine whether the analyzer's claim would matter to a maintainer.
10
+
11
+ An analyzer verdict is a human-reviewed classification of one analyzer output or one known missed case. It ties the tool's structured claim back to source files, references, git history, and product structure so the claim can be counted as true, false, accepted-by-design, or still undecidable.
12
+
13
+ A true positive is an analyzer claim where the reported code location really does have the maintenance problem the analyzer names, and the next reasonable maintainer action matches the analyzer's suggested direction.
14
+
15
+ A false positive is an analyzer claim where the reported evidence exists but the inspected code shows that no repair is warranted. The usual cause is that the analyzer noticed a real structural pattern but missed ownership, framework convention, product meaning, or intentional API design.
16
+
17
+ A false negative is an existing maintenance problem that the analyzer's stated scope should have reported but did not. It matters more than an empty report because it shows a missing detector feature, missing language support, skipped source unit, or threshold that is too narrow.
18
+
19
+ An accepted design is a reported pattern that is real but intentionally kept. It should not be counted as a bug in the codebase; it is feedback that the analyzer needs either suppression support, a lower score weight, or a better explanation field.
20
+
21
+ Programmatic precision work is a code change to the analyzer, its evidence model, or its score model that makes future reports closer to maintainer judgment without hard-coding one repository. It is different from tuning a threshold until one known example disappears.
22
+
23
+ ## Validation Corpus
24
+
25
+ The first corpus should use local repositories that are already available and large enough to stress the current analyzer families.
26
+
27
+ | Repository | Stack shape | Source evidence seen locally | Analyzer coverage |
28
+ | ------------------------------------------------------- | -------------------------------------------------------------------- | ------------------------------------ | ---------------------------------------------------------------------------------------- |
29
+ | `/Users/aydansalois/Documents/GitHub/scip-query` | TypeScript CLI and analysis library | 290 `.ts`, 103 `.md` | Core graph, cleanup, health, docs, diff gate, score behavior |
30
+ | `/Users/aydansalois/Documents/GitHub/Stable_Management` | npm workspaces with Vue frontend, TypeScript backend, shared package | 1,168 `.ts`, 409 `.vue`, 380 `.md` | Vue analyzers, co-change, cross-workspace coupling, docs, large-index budget |
31
+ | `/Users/aydansalois/Documents/GitHub/Vega_2.0` | TypeScript monorepo with React web app, API app, shared packages | 1,567 `.ts`, 672 `.tsx`, 1,163 `.md` | React analyzers, monorepo locality, diff gate, shared-package coupling |
32
+ | `/Users/aydansalois/Documents/GitHub/SynthRunnerRust` | Rust project | 27 `.rs`, 36 `.md` | SCIP graph smoke coverage, non-TypeScript command behavior, docs and git-history signals |
33
+
34
+ The current best field-test evidence is Stable_Management. A previous run found 1,167 indexed files, 93k symbols, 491 commits analyzed, useful co-change clusters, a bounded `health` score of 91, and 155 baseline findings. It also reported an honest negative: candidate-style findings did not currently predict fix commits well, with validation ratios of 0.6x on Stable_Management and 0.36x on scip-query.
35
+
36
+ That negative is part of the protocol. It means candidate analyzers can be useful without being predictive enough to deserve the same score weight as direct repair analyzers.
37
+
38
+ ## Run Protocol
39
+
40
+ For each repository, record the exact revision first.
41
+
42
+ ```sh
43
+ git -C /path/to/repo rev-parse HEAD
44
+ ```
45
+
46
+ Then index and capture the broad report.
47
+
48
+ ```sh
49
+ cd /path/to/repo
50
+ scip-query reindex
51
+ scip-query health --full --json > /tmp/scip-query-validation/REPO/health.json
52
+ scip-query diff-gate --json > /tmp/scip-query-validation/REPO/diff-gate.json
53
+ ```
54
+
55
+ For each analyzer under review, capture three samples when possible.
56
+
57
+ | Sample | What to inspect | Why it exists |
58
+ | -------------------- | ------------------------------------------------------ | --------------------------------------------------------------- |
59
+ | Top findings | 10 highest-ranked findings | Tests whether ranking puts obvious work first |
60
+ | Threshold edge | 5 findings near the default threshold or last page | Tests whether cutoffs are calibrated |
61
+ | Expected-miss probes | 5 known cases from code search, history, or user notes | Tests false negatives instead of only checking emitted findings |
62
+
63
+ Every sampled finding should be reviewed with the same evidence bundle:
64
+
65
+ ```sh
66
+ scip-query plan-context <symbol-or-file> --full --json
67
+ scip-query refs <symbol> --json
68
+ scip-query code <symbol> --json
69
+ git log --oneline -- <file>
70
+ ```
71
+
72
+ For file-level or history-level analyzers, substitute the file tools:
73
+
74
+ ```sh
75
+ scip-query change-surface <file> --full --json
76
+ scip-query imports <file> --json
77
+ scip-query deps <file> --json
78
+ scip-query rdeps <file> --json
79
+ scip-query co-change <file> --full --json
80
+ ```
81
+
82
+ The validation record should be small enough to write for every sampled result.
83
+
84
+ ```json
85
+ {
86
+ "repo": "Stable_Management",
87
+ "revision": "COMMIT",
88
+ "command": "vue-composable-candidates",
89
+ "findingId": "stable identifier or pasted summary",
90
+ "location": "frontend/src/views/Example.vue",
91
+ "verdict": "tp | fp | accepted_design | needs_judgment | fn",
92
+ "actionTier": "direct | signal | support",
93
+ "evidence": ["source/reference/history facts that make the verdict reproducible"],
94
+ "counterevidence": ["facts that weaken the analyzer claim"],
95
+ "precisionWork": "threshold, parser, evidence field, skip rule, score weight, wording, or none"
96
+ }
97
+ ```
98
+
99
+ Do not accept a precision change unless it survives at least one second repository or one focused fixture. That is the guard against fitting the analyzer to whichever repo annoyed us today.
100
+
101
+ ## Analyzer Matrix
102
+
103
+ | Analyzer or family | True-positive standard | Likely false positives | False-negative probes | Programmatic precision work |
104
+ | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
105
+ | `cleanup-plan` | The batch deletes graph-unreferenced production code and `--verify` keeps the checker green. | Entry points, reflection, generated exports, CLI/plugin surfaces, unrecognized framework-discovered files. | Search for manually deleted dead code in recent history and compare with prior report. | Better root-surface detection, package export reading, framework-discovered route/page exports, and verification summaries are implemented; generated/reflection root coverage remains a future caveat. |
106
+ | `dead`, `new-dead`, `isolated` | The symbol has no real production consumers and is not an entry surface. | File-private helpers, test-only helpers, exported APIs consumed outside the index, generated or reflection entry points. | Known orphan functions found by `rg`, deleted symbols in git history, test fixtures with dynamic usage. | Separate "dead" from "file-internal", package/export metadata, and framework-discovered route/page roots are implemented; generated/reflection roots and external consumer evidence remain future caveats. |
107
+ | `unused-params` | A trailing simple parameter is unused in all relevant implementations and can be removed without API breakage. | Interface conformance, callback arity, overload compatibility, framework signatures, future public API shape. | Search for underscore-less trailing params in changed files and compare with command output. | Type-aware override/interface checks, callback convention allowlists, public API guards. |
108
+ | `unused-imports`, `drift` unused-import findings | The imported binding is never referenced in the file's executable or type surface. | Type-only imports hidden by parser limits, macro usage, framework compiler usage, generated symbols. | Compare against TypeScript/ESLint unused import diagnostics where available. | Compiler-oracle comparison, macro/framework allowlists, unused-import evidence in output. |
109
+ | `redundant-reexports` | A private barrel re-export has zero barrel consumers, zero direct consumers, and emits `actionTier: "direct"`. | Public package API, external consumers outside the repo, documentation examples, generated SDK boundaries. | Inspect barrels with no internal imports and compare against package exports/docs. | Package `exports`, directory index entrypoints, nested package manifests, action tier, surface evidence, and recommendations are now emitted; generated-surface caveats remain future precision work. |
110
+ | `passthrough-candidates` | The function only forwards arguments to one callee, adds no stable name, policy, boundary, public-facade role, or adaptation, and the emitted `actionTier` is `direct`. | Domain vocabulary wrappers, API adapters, test seams, telemetry/auth wrappers, public facade names, package-public exports, service/provider boundaries, capability modules, access-policy forwarding. | Search for tiny wrappers around known callees that command misses. | Action tier, runtime-boundary evidence, separate public-facade evidence, recommendation, and health score discount are now emitted; clean Vega second-corpus confirmation kept signal/direct counts stable. |
111
+ | `wrapper-candidates` | A small one-consumer wrapper adds no useful concept and can be inlined. | Boundary naming, dependency inversion, future API shape, test isolation, schema/contract modules. | Inspect one-consumer helpers in high-churn files. | Consumer-kind evidence, caller fan-in smoothing, naming/domain hints, suppression-informed weight reduction. |
112
+ | `stale-abstractions` | A type/class/helper has zero consumers or one accidental consumer and no boundary role, and the emitted staleness kind/action tier correctly separates unused cleanup from one-consumer ownership review. | Contract types, generated schema types, nominal domain names, low-consumer but intentionally public API. | Search for old low-consumer files, compare with command and suppressions. | Action tier, staleness kind, and recommendation are now emitted; one-consumer rows stay contextual/support in score calibration unless stronger public-surface evidence changes the claim. |
113
+ | `similar`, `similar-files`, `similar-chains`, `similar-signatures`, `convergence` | Two units share enough behavior or dependency shape that unification would reduce real duplication. | Coincidental same framework plumbing, shared type shape but different concepts, generated code, parallel product flows, or cross-language structural overlap without recognized semantic tokens. | Manually inspect known copy-paste pairs, recent duplicated commits, and repeated command handlers. | Domain-token reporting, framework-token downweighting, neutral `structural-overlap` evidence, changed-code directionality, grouped evidence rather than scalar similarity alone. |
114
+ | `recent-duplicates`, diff-gate `echo` | New or recently changed code re-implements older code with the same behavior. | Boilerplate repeated by framework convention, tests, intentionally forked product variants. | Scan recent commits for "copy", "duplicate", "refactor", or similar edits not reported. | Root-cause groups now separate review items from pairwise evidence; age windows, test/generated filters, behavior-token evidence, and established-owner links remain future precision candidates. |
115
+ | `extract-candidates` | A large callable contains a cohesive callee cluster, and the emitted extraction kind/recommendation correctly frames it as workflow orchestration, a broad helper cluster, or a cohesive helper cluster. | Incidental call clustering, readable local sequence, algorithm steps that should stay together, or helper groups without a stable concept name. | Inspect large functions with obvious sections and compare with report. | Extraction kind, action tier, reasons, and recommendation are now emitted; locality and score calibration are recorded, while placement decisions remain report-only through the locality workflow. |
116
+ | `incomplete-migration` | A new helper is used at some matching sites while other equivalent sites still contain the old inline pattern, and the old site passes both helper-containment and site-coverage checks. | Intentional partial rollout, tests documenting old behavior, helper only valid for one subtype, or broad orchestration sites where the helper pattern is only a small fragment. | Search diffs with new helpers and repeated old call clusters. | Two-sided containment, helper shape, site coverage, broad-site regression coverage, migration-scope hints, and second-corpus same-scope validation are now recorded. |
117
+ | `react-component-duplicates`, `vue-component-duplicates` | Two components repeat substantial render structure where a component extraction would preserve product meaning. | Design-system repetition, route-specific layouts, data-table boilerplate, static labels inflating similarity. | Inspect similar screenshots/templates not reported, especially after large component splits. | Framework-token downweighting, static text handling, shared component/import evidence, route/domain context. |
118
+ | `react-hook-candidates`, `vue-composable-candidates` | Components repeat state, effects, lifecycle, request, or handler behavior that can live in a hook/composable, and the row's evidence class points to domain or mixed behavior rather than only generic workflow. | Generic useState/useEffect/useQuery plumbing, unrelated screens using the same framework primitives, or existing shared abstractions that already own the workflow. | Search for repeated custom hook/composable calls and copied handler names. | Evidence class and action tier are now emitted; field validation and score calibration are recorded, and new non-empty corpora can extend calibration later. |
119
+ | `react-large-component-pressure`, `vue-large-view-pressure` | A component/view is large enough that unrelated reasons to change are forced through one file. | Generated views, story/demo files, intentionally monolithic route shells, style-heavy one-off pages. | Search largest React/Vue files and compare with command output. | Pressure-kind/context recommendations are validated; future locality recommendations remain report-only until consumer coverage improves. |
120
+ | `complexity`, `complexity-hotspots` | A symbol or file has enough branching, LOC, fan-in, or fan-out that local reasoning and change risk are objectively high. | Central orchestration code, parsers, reducers, generated code, tables expressed as code. | Compare against high-branch files from code search and known bug-fix hotspots. | Keep cyclomatic and graph-pressure scores separate, report branch evidence, combine with churn/fix density. |
121
+ | `cycles` | A real dependency cycle crosses source files in a way that makes layering or change order harder. | Barrel cycles, test cycles, module-hierarchy cycles, framework registration loops. | Compare file dependency SCCs with `deps`/`rdeps`, seed fixture cycles. | Keep existing cycle-kind split, score only real cycles, improve barrel/test classification. |
122
+ | `co-change`, diff-gate `co-change-partner` | Files repeatedly change together without a dependency edge, showing hidden coordination work; partner class, commit scope, recency, and commit-subject context now distinguish focused current pairs from broad, stale, unlabeled, fix-labeled, or docs-labeled history. | Same feature touched by broad commits, stale coupling that history no longer predicts, local commit subjects that do not reflect true tracker labels, or a partner class that is real but does not imply this diff needs the other side. | Inspect known schema/client, env/config, doc/code pairs and changed partner misses. | Partner-class evidence, declared-coupling suggestions, broad-sweep context, recency context, local subject labels, issue refs, external-label-unavailable status, and health score weighting are now emitted; continue only with future metadata-provider validation for true issue/PR labels. |
123
+ | `doc-drift`, diff-gate `doc-reference` | A doc cites code that moved, broke, or kept changing after the doc claim stopped changing, and the cited claim or doc intent indicates whether this is current guidance, support evidence, or a broken reference. | Exploratory docs, historical notes, configuration examples, docs intentionally describing old behavior. | Search docs with path references and compare broken/stale outputs. | Cited-claim metadata, citation-kind output, co-change-only historical-note intent, Markdown-local citation parsing, and second-corpus parser validation are now recorded. |
124
+ | `drift` layer and pattern findings | Imports violate an explicit or strongly inferred local architecture rule, and the row's action tier correctly separates explicit policy from inferred signal. | Inferred rules from too few siblings, migration states, intentionally exceptional bridge files. | Inspect known layer boundaries and sibling directories with unique imports. | Action tier, policy basis, evidence reasons, and recommendation are now emitted; inferred drift stays low-score/support unless stronger sibling support is available. |
125
+ | `hotspots`, `fan-in`, `fan-out`, `coupling`, `bottlenecks`, `deep-chains` | The graph facts correctly identify centrality, dependency breadth, shared symbols, hubs, or long chains, while output frames them as contextual signal or support rather than direct repair. | These are not smells by themselves; false positives are mostly product mistakes when score treats them as repair demands. | Compare with raw SCIP graph and known central modules. | Bottlenecks, coupling, and deep chains now emit action-tier metadata; deep chains de-duplicate strict suffix rows. Keep graph risk contextual except when combined with churn, cycles, or direct findings. |
126
+ | `affected`, `change-surface`, `plan-context` | The tool names real consumers, blast radius, references, calls, history, and risks for a target. | Missing index data, generated code, dynamic imports, language unsupported by current index. | Pick symbols with known callers and compare against `rg` plus compiler refs when available. | Index capability reporting, language-specific fallbacks, clearer "missing evidence" sections. |
127
+ | `self-audit` | Cheap evidence paths match the TypeScript compiler oracle on sampled symbols. | Sampling bias, non-TypeScript code, compiler config mismatch. | Repeat with scopes from different packages and compare disagreement classes. | Stratified sampling by package/file kind, persistent disagreement fixtures. |
128
+ | `health`, `health-phase`, `diff-gate` composite reports | The composite report explains its deductions and gates new direct findings without hiding signal pressure. | Treating contextual signal as direct debt, score staying perfect while signal backlog grows, baseline churn from history-derived findings. | Compare scalar changes against reviewed finding labels and suppression counts. | Action-tier identities, direct/signal score separation, suppression trust adjustments, and hidden-coupling score-count correction are recorded. |
129
+
130
+ The first TypeScript support-analysis review found accurate source-grounded output for `validateProjectConfig()` and fixed `status`/`doctor` config diagnostic parity. The Rust cross-language review confirmed that graph/source/checker-backed analyzers work on Rust, while TypeScript semantic self-audit is explicitly unavailable and frontend analyzers correctly return stack-specific empty results.
131
+
132
+ `cleanup-apply` is not an analyzer. It is an action command that should be validated through the `cleanup-plan --verify` path and normal project checks.
133
+
134
+ Navigation commands such as `stats`, `files`, `methods`, `refs`, `trace`, `deps`, `rdeps`, `system`, `surface`, `imports`, `imported-by`, `outline`, `members`, `by-kind`, `kind-counts`, `hierarchy`, `call-graph`, `code`, `dataflow`, and `slice` should be tested as evidence providers. Their success standard is referential accuracy, not whether they find a smell.
135
+
136
+ ## False-Negative Search
137
+
138
+ False negatives need active hunting because normal analyzer output cannot show what it missed.
139
+
140
+ Use these probes on each corpus:
141
+
142
+ 1. Search for large units:
143
+
144
+ ```sh
145
+ rg --files | rg '\.(ts|tsx|vue|rs)$' | xargs wc -l | sort -nr | head -30
146
+ ```
147
+
148
+ 2. Search for repeated names and local copy-paste clues:
149
+
150
+ ```sh
151
+ rg -n "TODO|copy|duplicate|refactor|extract|cleanup|unused|dead|stale"
152
+ ```
153
+
154
+ 3. Search history for repairs that should have been predicted:
155
+
156
+ ```sh
157
+ git log --oneline --grep='fix\\|bug\\|cleanup\\|refactor\\|remove\\|dead'
158
+ ```
159
+
160
+ 4. Inspect suppressions as precision labels:
161
+
162
+ ```sh
163
+ rg -n "scip-query: ignore-" src tests docs
164
+ ```
165
+
166
+ 5. For frontend repos, inspect large component split candidates by directory:
167
+
168
+ ```sh
169
+ rg --files | rg '\.(tsx|vue)$' | xargs wc -l | sort -nr | head -50
170
+ ```
171
+
172
+ The expected result of this phase is not "all analyzers are accurate." The expected result is a ranked list of detector improvements with evidence: parser gaps first, public-surface mistakes second, framework convention mistakes third, score-weight mistakes fourth.
173
+
174
+ ## Score Implications
175
+
176
+ The score model should encode reviewed action implication.
177
+
178
+ Direct findings are code or docs locations where the analyzer normally identifies a local repair. They should carry heavier deductions and should be eligible for diff-gate blocking.
179
+
180
+ Contextual signals are real patterns whose repair depends on product or architecture judgment. They should accumulate as backlog pressure, but a single signal should not be scored like dead code.
181
+
182
+ Support analyses are evidence maps. They should inform planning and other detectors, not reduce health by themselves.
183
+
184
+ Suppression counts and `self-audit` disagreement rates should modify analyzer trust. A detector with many accepted suppressions or poor compiler-oracle disagreement should still report, but its score weight should be lower until the false-positive cause is understood. Structured suppressions must keep a reason, an identity, a live expiration when temporary, and any file scope must still point at a current file.
185
+
186
+ ## Residual Future Work
187
+
188
+ No active validation ledger slice remains. Future production steps should stay small and falsifiable:
189
+
190
+ 1. Keep true co-change issue/PR labels blocked until a repository metadata provider is available; local commit-subject context is implemented.
191
+ 2. Keep locality report-only until exact consumer coverage and repair outcomes justify score integration.
192
+ 3. Keep `docs/analyzer-validation-ledger.md` current as each analyzer family receives a new implementation or corpus-confirmation result.
@@ -0,0 +1,21 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="560" height="136" viewBox="0 0 560 136" role="img" aria-labelledby="title desc">
2
+ <title id="title">scip-query</title>
3
+ <desc id="desc">A minimal scip-query wordmark with a bright blue underscore cursor for dark backgrounds.</desc>
4
+ <style>
5
+ .wordmark {
6
+ fill: #F8FAFC;
7
+ font-family: Helvetica, Arial, sans-serif;
8
+ font-size: 58px;
9
+ font-weight: 700;
10
+ letter-spacing: 0;
11
+ }
12
+ </style>
13
+ <text
14
+ class="wordmark"
15
+ x="38"
16
+ y="83"
17
+ textLength="372"
18
+ lengthAdjust="spacingAndGlyphs"
19
+ >scip-query</text>
20
+ <rect x="430" y="76" width="50" height="8" rx="4" fill="#60A5FA" />
21
+ </svg>
@@ -0,0 +1,24 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="560" height="136" viewBox="0 0 560 136" role="img" aria-labelledby="title desc">
2
+ <title id="title">scip-query</title>
3
+ <desc id="desc">A minimal scip-query wordmark with a blue underscore cursor.</desc>
4
+ <style>
5
+ .wordmark {
6
+ fill: #111827;
7
+ font-family: Helvetica, Arial, sans-serif;
8
+ font-size: 58px;
9
+ font-weight: 700;
10
+ letter-spacing: 0;
11
+ }
12
+ .cursor {
13
+ fill: #2563EB;
14
+ }
15
+ </style>
16
+ <text
17
+ class="wordmark"
18
+ x="38"
19
+ y="83"
20
+ textLength="372"
21
+ lengthAdjust="spacingAndGlyphs"
22
+ >scip-query</text>
23
+ <rect class="cursor" x="430" y="76" width="50" height="8" rx="4" />
24
+ </svg>