scip-query 0.19.6 → 0.19.10

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 (377) hide show
  1. package/CHANGELOG.md +116 -0
  2. package/README.md +156 -44
  3. package/dist/augment-vue-worker.js +1 -1
  4. package/dist/chunk-26QA6FAI.js +8 -0
  5. package/dist/{chunk-J7VT2CRB.js → chunk-2HPVVXM5.js} +2 -2
  6. package/dist/chunk-2KAZEZ6M.js +2 -0
  7. package/dist/chunk-32LVLCLN.js +40 -0
  8. package/dist/{chunk-2CVXCGL4.js → chunk-3CLX5EOX.js} +2 -2
  9. package/dist/{chunk-5OC3HWP5.js → chunk-3G66UZBH.js} +2 -2
  10. package/dist/{chunk-S2GP3CU3.js → chunk-3ORVDL3H.js} +2 -2
  11. package/dist/chunk-46XGSFNI.js +2 -0
  12. package/dist/chunk-4MAK2HOY.js +6 -0
  13. package/dist/chunk-4TURLRL5.js +16 -0
  14. package/dist/chunk-4UQVNCQE.js +2 -0
  15. package/dist/chunk-55Q3WLZX.js +2 -0
  16. package/dist/{chunk-OQ2A4G2G.js → chunk-5E4WNAVD.js} +2 -2
  17. package/dist/{chunk-YGQN3XGZ.js → chunk-5I5G2QOX.js} +2 -2
  18. package/dist/chunk-6LDJQXAH.js +2 -0
  19. package/dist/{chunk-WXAAURU7.js → chunk-6O5TICIZ.js} +2 -2
  20. package/dist/{chunk-OBKDTVZ3.js → chunk-6SHPK5ZE.js} +2 -2
  21. package/dist/chunk-7BAVHKMJ.js +49 -0
  22. package/dist/chunk-7O5IKBTZ.js +16 -0
  23. package/dist/chunk-7PIO7NKH.js +60 -0
  24. package/dist/chunk-7S5E7KWT.js +2 -0
  25. package/dist/{chunk-GK3GRUJX.js → chunk-7SQQWSY3.js} +2 -2
  26. package/dist/chunk-7WPLAODU.js +5 -0
  27. package/dist/chunk-A73XVBCR.js +20 -0
  28. package/dist/chunk-AFHORGLH.js +42 -0
  29. package/dist/chunk-AIE7TFJW.js +9 -0
  30. package/dist/chunk-AQOFWNQJ.js +1 -0
  31. package/dist/{chunk-MGBJHRFB.js → chunk-AZJQQKDD.js} +2 -2
  32. package/dist/{chunk-IYAOX36F.js → chunk-B2PX5I6M.js} +2 -2
  33. package/dist/{chunk-EVOC5I5I.js → chunk-B7PBSLZN.js} +2 -2
  34. package/dist/{chunk-ZLJLE6LK.js → chunk-BBW6JFHN.js} +2 -2
  35. package/dist/{chunk-NBRUH7OE.js → chunk-BDCC2NPY.js} +2 -2
  36. package/dist/{chunk-DD5BOU5I.js → chunk-BNXCIFVY.js} +2 -2
  37. package/dist/{chunk-FHCTEANE.js → chunk-BPAPWKP6.js} +2 -2
  38. package/dist/chunk-BS2NMXQZ.js +4 -0
  39. package/dist/chunk-C3KV2II6.js +2 -0
  40. package/dist/chunk-C43RDDP4.js +20 -0
  41. package/dist/{chunk-QBYYWGAT.js → chunk-CJST5ETY.js} +2 -2
  42. package/dist/chunk-DAFAHMNB.js +42 -0
  43. package/dist/chunk-DHEQMPLW.js +2 -0
  44. package/dist/{chunk-336DC5NJ.js → chunk-DQGFVPUV.js} +2 -2
  45. package/dist/chunk-DQLPXMH6.js +8 -0
  46. package/dist/chunk-EKZTZXHZ.js +117 -0
  47. package/dist/{chunk-KLVJABXA.js → chunk-EN3O7VJA.js} +2 -2
  48. package/dist/{chunk-U5CNPPTZ.js → chunk-EW2NTSFA.js} +2 -2
  49. package/dist/chunk-F3Z4OUDS.js +8 -0
  50. package/dist/chunk-FJH2NW7J.js +66 -0
  51. package/dist/{chunk-3OIKRYU5.js → chunk-FKSELJQF.js} +2 -2
  52. package/dist/chunk-FTFP6O3L.js +11 -0
  53. package/dist/chunk-FYLK2DEJ.js +2 -0
  54. package/dist/chunk-GH74ASD6.js +11 -0
  55. package/dist/{chunk-NQLSSVOB.js → chunk-GMXWZP2B.js} +2 -2
  56. package/dist/chunk-GOUBFH5O.js +3 -0
  57. package/dist/{chunk-RJHCPSZ7.js → chunk-HLF2TX6R.js} +2 -2
  58. package/dist/{chunk-PC44K7RF.js → chunk-HX4GQPZP.js} +2 -2
  59. package/dist/chunk-HX7M4BDI.js +30 -0
  60. package/dist/chunk-HZ72SESS.js +128 -0
  61. package/dist/{chunk-YTUD45PU.js → chunk-IB2N4FIY.js} +2 -2
  62. package/dist/chunk-ILMHV3KM.js +2 -0
  63. package/dist/chunk-IZYYAFN5.js +2 -0
  64. package/dist/{chunk-A43URCQ3.js → chunk-JAYYFEQY.js} +2 -2
  65. package/dist/{chunk-RWRLUZ6U.js → chunk-JDOEX4E6.js} +2 -2
  66. package/dist/chunk-JFGGXWQF.js +947 -0
  67. package/dist/chunk-JN4NMBEX.js +8 -0
  68. package/dist/{chunk-JELJLXEE.js → chunk-JVYA47YU.js} +2 -2
  69. package/dist/{chunk-F42A3AKG.js → chunk-JW56N3KI.js} +2 -2
  70. package/dist/{chunk-FQTPPXNA.js → chunk-JZ2OXNWB.js} +2 -2
  71. package/dist/chunk-KFZNKUNT.js +2 -0
  72. package/dist/chunk-KMKTIO2G.js +8 -0
  73. package/dist/chunk-L5GJNV2T.js +8 -0
  74. package/dist/{chunk-RBFFD4V2.js → chunk-L7AW2QB5.js} +2 -2
  75. package/dist/chunk-L7JDSCDF.js +4 -0
  76. package/dist/chunk-LU47HG23.js +14 -0
  77. package/dist/chunk-LVY7NPF7.js +2 -0
  78. package/dist/chunk-LY4WC4AD.js +74 -0
  79. package/dist/{chunk-MLGTCX56.js → chunk-MKCDWWGV.js} +2 -2
  80. package/dist/chunk-MNE7YG56.js +2 -0
  81. package/dist/{chunk-YWB2EBNB.js → chunk-MRXBEXSY.js} +2 -2
  82. package/dist/chunk-MV7OWDUX.js +2 -0
  83. package/dist/{chunk-2GSQR6YA.js → chunk-N5W4YZMK.js} +2 -2
  84. package/dist/chunk-NGEXCJJW.js +11 -0
  85. package/dist/{chunk-CYJM7CYF.js → chunk-NIW6JDC5.js} +2 -2
  86. package/dist/{chunk-YHXBD52M.js → chunk-O64IZ6UX.js} +2 -2
  87. package/dist/chunk-PBUQFCNB.js +16 -0
  88. package/dist/{chunk-UQK5CRUK.js → chunk-POAVPHH7.js} +2 -2
  89. package/dist/{chunk-TYQ76QHQ.js → chunk-PQCI4SQX.js} +2 -2
  90. package/dist/chunk-PXY7F6Y4.js +5 -0
  91. package/dist/chunk-RDO52JGY.js +2 -0
  92. package/dist/chunk-RJT3TUUZ.js +2 -0
  93. package/dist/{chunk-OHWZKLVA.js → chunk-RUJURYSV.js} +2 -2
  94. package/dist/{chunk-CSTYYXKC.js → chunk-RVLDN63O.js} +2 -2
  95. package/dist/chunk-RXOXSKY3.js +2 -0
  96. package/dist/chunk-S7OYBOCK.js +2 -0
  97. package/dist/chunk-SMNXQT5Z.js +3 -0
  98. package/dist/{chunk-QQWOFXNW.js → chunk-SRAFT254.js} +2 -2
  99. package/dist/{chunk-6XHTISLI.js → chunk-SXP2MBJH.js} +2 -2
  100. package/dist/chunk-T7YQSHPQ.js +3 -0
  101. package/dist/{chunk-2EZSOTSY.js → chunk-TFRAYKN6.js} +2 -2
  102. package/dist/{chunk-XVJ3V7LM.js → chunk-UJCOIXDY.js} +2 -2
  103. package/dist/{chunk-7LABSJSR.js → chunk-UJPRPGCO.js} +5 -5
  104. package/dist/chunk-W4ETQAXM.js +2 -0
  105. package/dist/chunk-WCCFZ7V7.js +113 -0
  106. package/dist/chunk-WUPW3UN3.js +3 -0
  107. package/dist/{chunk-VP542C25.js → chunk-WXZLAAWK.js} +2 -2
  108. package/dist/{chunk-LMFVTUW2.js → chunk-X54AGLVX.js} +2 -2
  109. package/dist/chunk-XKWKXZKW.js +20 -0
  110. package/dist/{chunk-OP3MTFJR.js → chunk-XSRF6Q77.js} +2 -2
  111. package/dist/chunk-Y2MVPNKY.js +5 -0
  112. package/dist/{chunk-6XFC7PQ5.js → chunk-YKUU5AIC.js} +2 -2
  113. package/dist/chunk-YLCJLTPL.js +2 -0
  114. package/dist/{chunk-47X75ZKH.js → chunk-YTQVETEO.js} +2 -2
  115. package/dist/chunk-Z4N3MZYA.js +38 -0
  116. package/dist/chunk-ZHXX42OH.js +18 -0
  117. package/dist/chunk-ZJOOT3BG.js +2 -0
  118. package/dist/chunk-ZK26BAQL.js +2 -0
  119. package/dist/{chunk-UUJBLG6J.js → chunk-ZTETIQ35.js} +2 -2
  120. package/dist/cli.js +3 -3
  121. package/dist/command-descriptors-4A4HWV4F.js +642 -0
  122. package/dist/{config-types-BWQ5xPGI.d.ts → config-types-jVM3D7MA.d.ts} +72 -2
  123. package/dist/{db-B0r1o7Vt.d.ts → db-B5PM5yNk.d.ts} +20 -2
  124. package/dist/{diff-gate-types-C9BoYwYD.d.ts → diff-gate-types-B0QYpDv1.d.ts} +2 -1
  125. package/dist/direct-navigation-6YHV6IB5.js +3 -0
  126. package/dist/{health-CFnlCiTz.d.ts → health-Do5TKSJI.d.ts} +1 -1
  127. package/dist/index.d.ts +3 -3
  128. package/dist/index.js +1 -1
  129. package/dist/postinstall.js +1 -1
  130. package/dist/queries/affected.d.ts +2 -2
  131. package/dist/queries/affected.js +1 -1
  132. package/dist/queries/architecture.d.ts +2 -2
  133. package/dist/queries/architecture.js +1 -1
  134. package/dist/queries/bottlenecks.d.ts +2 -2
  135. package/dist/queries/bottlenecks.js +1 -1
  136. package/dist/queries/by-kind.d.ts +2 -2
  137. package/dist/queries/by-kind.js +1 -1
  138. package/dist/queries/call-graph.d.ts +2 -2
  139. package/dist/queries/call-graph.js +1 -1
  140. package/dist/queries/change-surface.d.ts +22 -3
  141. package/dist/queries/change-surface.js +1 -1
  142. package/dist/queries/cleanup-plan.d.ts +2 -2
  143. package/dist/queries/cleanup-plan.js +1 -1
  144. package/dist/queries/co-change.d.ts +2 -2
  145. package/dist/queries/co-change.js +1 -1
  146. package/dist/queries/code.d.ts +2 -2
  147. package/dist/queries/code.js +1 -1
  148. package/dist/queries/complexity-hotspots.d.ts +3 -3
  149. package/dist/queries/complexity-hotspots.js +1 -1
  150. package/dist/queries/complexity.d.ts +3 -3
  151. package/dist/queries/complexity.js +1 -1
  152. package/dist/queries/convergence.d.ts +2 -2
  153. package/dist/queries/convergence.js +1 -1
  154. package/dist/queries/coupling.d.ts +2 -2
  155. package/dist/queries/coupling.js +1 -1
  156. package/dist/queries/cycles.d.ts +2 -2
  157. package/dist/queries/cycles.js +1 -1
  158. package/dist/queries/dataflow.d.ts +2 -2
  159. package/dist/queries/dataflow.js +1 -1
  160. package/dist/queries/dead.d.ts +2 -2
  161. package/dist/queries/dead.js +1 -1
  162. package/dist/queries/decorative-checkers.d.ts +2 -2
  163. package/dist/queries/decorative-checkers.js +1 -1
  164. package/dist/queries/deep-chains.d.ts +2 -2
  165. package/dist/queries/deep-chains.js +1 -1
  166. package/dist/queries/deps.d.ts +2 -2
  167. package/dist/queries/deps.js +1 -1
  168. package/dist/queries/diff-gate.d.ts +40 -7
  169. package/dist/queries/diff-gate.js +1 -1
  170. package/dist/queries/diff-impact.d.ts +84 -6
  171. package/dist/queries/diff-impact.js +1 -1
  172. package/dist/queries/doc-drift.d.ts +3 -3
  173. package/dist/queries/doc-drift.js +1 -1
  174. package/dist/queries/drift.d.ts +2 -2
  175. package/dist/queries/drift.js +1 -1
  176. package/dist/queries/duplicate-bodies.d.ts +3 -3
  177. package/dist/queries/duplicate-bodies.js +1 -1
  178. package/dist/queries/extract-candidates.d.ts +2 -2
  179. package/dist/queries/extract-candidates.js +1 -1
  180. package/dist/queries/fan.d.ts +2 -2
  181. package/dist/queries/fan.js +1 -1
  182. package/dist/queries/files.d.ts +12 -3
  183. package/dist/queries/files.js +1 -1
  184. package/dist/queries/health.d.ts +3 -3
  185. package/dist/queries/health.js +1 -1
  186. package/dist/queries/hierarchy.d.ts +2 -2
  187. package/dist/queries/hierarchy.js +1 -1
  188. package/dist/queries/hotspots.d.ts +2 -2
  189. package/dist/queries/hotspots.js +1 -1
  190. package/dist/queries/imports.d.ts +2 -2
  191. package/dist/queries/imports.js +1 -1
  192. package/dist/queries/incomplete-migration.d.ts +8 -6
  193. package/dist/queries/incomplete-migration.js +1 -1
  194. package/dist/queries/index.d.ts +141 -10
  195. package/dist/queries/index.js +1 -1
  196. package/dist/queries/isolated.d.ts +2 -2
  197. package/dist/queries/isolated.js +1 -1
  198. package/dist/queries/locality-candidates.d.ts +2 -2
  199. package/dist/queries/locality-candidates.js +1 -1
  200. package/dist/queries/members.d.ts +2 -2
  201. package/dist/queries/members.js +1 -1
  202. package/dist/queries/methods.d.ts +34 -3
  203. package/dist/queries/methods.js +1 -1
  204. package/dist/queries/not-implemented.d.ts +2 -2
  205. package/dist/queries/not-implemented.js +1 -1
  206. package/dist/queries/outline.d.ts +2 -2
  207. package/dist/queries/outline.js +1 -1
  208. package/dist/queries/passthrough-candidates.d.ts +3 -3
  209. package/dist/queries/passthrough-candidates.js +1 -1
  210. package/dist/queries/plan-context.d.ts +3 -3
  211. package/dist/queries/plan-context.js +1 -1
  212. package/dist/queries/react-component-duplicates.d.ts +2 -2
  213. package/dist/queries/react-component-duplicates.js +1 -1
  214. package/dist/queries/react-hook-candidates.d.ts +2 -2
  215. package/dist/queries/react-hook-candidates.js +1 -1
  216. package/dist/queries/react-large-component-pressure.d.ts +2 -2
  217. package/dist/queries/react-large-component-pressure.js +1 -1
  218. package/dist/queries/recent-duplicates.d.ts +2 -2
  219. package/dist/queries/recent-duplicates.js +1 -1
  220. package/dist/queries/redundant-reexports.d.ts +2 -2
  221. package/dist/queries/redundant-reexports.js +1 -1
  222. package/dist/queries/refs.d.ts +2 -2
  223. package/dist/queries/refs.js +1 -1
  224. package/dist/queries/self-audit.d.ts +2 -2
  225. package/dist/queries/self-audit.js +1 -1
  226. package/dist/queries/similar-chains.d.ts +2 -2
  227. package/dist/queries/similar-chains.js +1 -1
  228. package/dist/queries/similar-files.d.ts +2 -2
  229. package/dist/queries/similar-files.js +1 -1
  230. package/dist/queries/similar-signatures.d.ts +2 -2
  231. package/dist/queries/similar-signatures.js +1 -1
  232. package/dist/queries/similar.d.ts +2 -2
  233. package/dist/queries/similar.js +1 -1
  234. package/dist/queries/slice.d.ts +2 -2
  235. package/dist/queries/slice.js +1 -1
  236. package/dist/queries/stale-abstractions.d.ts +2 -2
  237. package/dist/queries/stale-abstractions.js +1 -1
  238. package/dist/queries/stats.d.ts +2 -2
  239. package/dist/queries/surface.d.ts +2 -2
  240. package/dist/queries/surface.js +1 -1
  241. package/dist/queries/symbols.d.ts +2 -2
  242. package/dist/queries/symbols.js +1 -1
  243. package/dist/queries/system.d.ts +2 -2
  244. package/dist/queries/system.js +1 -1
  245. package/dist/queries/test-quality.d.ts +2 -2
  246. package/dist/queries/test-quality.js +1 -1
  247. package/dist/queries/trace.d.ts +2 -2
  248. package/dist/queries/trace.js +1 -1
  249. package/dist/queries/twin-ab.d.ts +14 -3
  250. package/dist/queries/twin-ab.js +1 -1
  251. package/dist/queries/twin-drift.d.ts +2 -2
  252. package/dist/queries/twin-drift.js +1 -1
  253. package/dist/queries/unused-imports.d.ts +2 -2
  254. package/dist/queries/unused-imports.js +1 -1
  255. package/dist/queries/unused-params.d.ts +2 -2
  256. package/dist/queries/unused-params.js +1 -1
  257. package/dist/queries/vue-component-duplicates.d.ts +2 -2
  258. package/dist/queries/vue-component-duplicates.js +1 -1
  259. package/dist/queries/vue-composable-candidates.d.ts +2 -2
  260. package/dist/queries/vue-composable-candidates.js +1 -1
  261. package/dist/queries/vue-large-view-pressure.d.ts +2 -2
  262. package/dist/queries/vue-large-view-pressure.js +1 -1
  263. package/dist/queries/wrapper-candidates.d.ts +2 -2
  264. package/dist/queries/wrapper-candidates.js +1 -1
  265. package/dist/reindex-worker.js +26 -25
  266. package/dist/reindex.d.ts +7 -3
  267. package/dist/reindex.js +34 -33
  268. package/dist/runtime.d.ts +5 -10
  269. package/dist/runtime.js +3 -3
  270. package/dist/rust-semantic-session-server.js +1 -1
  271. package/dist/rust-semantic-session-worker.js +1 -1
  272. package/dist/rust-semantic-worker.js +1 -1
  273. package/dist/{scip-cli-DCvnlZCu.d.ts → scip-cli-BnEwZRLJ.d.ts} +2 -2
  274. package/dist/{symbol-types-BgWU6lhL.d.ts → symbol-types-BIQwfoAx.d.ts} +7 -1
  275. package/dist/typescript-mailbox-worker.js +2 -0
  276. package/dist/watch-server.js +2 -42
  277. package/docs/AGENT_GUIDE.md +28 -5
  278. package/docs/CLI_JSON_OUTPUT.md +176 -3
  279. package/docs/COMMAND_REFERENCE.md +89 -87
  280. package/docs/COMMITTED_RECORD_COMPATIBILITY.md +55 -18
  281. package/docs/DURABILITY.md +88 -38
  282. package/docs/INDEX_GENERATIONS.md +65 -19
  283. package/docs/MAILBOX_LIFECYCLE.md +28 -1
  284. package/docs/REINDEX_METADATA_COMPATIBILITY.md +18 -8
  285. package/docs/SECURITY_MODEL.md +146 -0
  286. package/docs/TELEMETRY_RETENTION.md +16 -4
  287. package/docs/WATCH_REFRESH_REQUESTS.md +34 -21
  288. package/docs/WINDOWS_SIDECAR_RELEASE.md +9 -4
  289. package/docs/analyzer-inventory.md +31 -22
  290. package/docs/analyzer-validation-ledger.md +8 -0
  291. package/docs/schemas/cli-output-page.schema.json +104 -0
  292. package/docs/schemas/outcome-event-record.schema.json +57 -1
  293. package/docs/schemas/project-config.schema.json +82 -1
  294. package/docs/schemas/suppression-record.schema.json +84 -3
  295. package/package.json +9 -8
  296. package/skills/_shared/SKILL.md +5 -3
  297. package/skills/_shared/references/agent-contract-catalog.md +1 -1
  298. package/skills/_shared/references/detector-precision-and-diffgate.md +1 -1
  299. package/skills/scip-audit/SKILL.md +9 -8
  300. package/skills/scip-audit/references/claims.md +1 -1
  301. package/skills/scip-audit/references/cleanup.md +19 -20
  302. package/skills/scip-audit/references/directory.md +4 -4
  303. package/skills/scip-audit/references/frontend.md +10 -10
  304. package/skills/scip-audit/references/twin-drift.md +2 -2
  305. package/skills/scip-diagnose/references/debug.md +8 -8
  306. package/skills/scip-diagnose/references/root-cause.md +3 -3
  307. package/skills/scip-diagnose/references/triage.md +10 -10
  308. package/skills/scip-explore/SKILL.md +4 -4
  309. package/skills/scip-improve/SKILL.md +10 -10
  310. package/skills/scip-improve/references/cleanup-batches.md +3 -3
  311. package/skills/scip-improve/references/directory-moves.md +3 -3
  312. package/skills/scip-improve/references/doc-reconcile.md +1 -1
  313. package/skills/scip-improve/references/frontend-extraction.md +2 -2
  314. package/skills/scip-improve/references/twin-drift.md +3 -3
  315. package/skills/scip-plan/SKILL.md +3 -3
  316. package/skills/scip-plan/references/api-impact.md +5 -5
  317. package/skills/scip-plan/references/conductor.md +2 -2
  318. package/skills/scip-plan/references/hyper-optimization.md +1 -1
  319. package/skills/scip-query/SKILL.md +15 -5
  320. package/skills/scip-setup/references/bootstrap-workflow.md +7 -8
  321. package/skills/scip-setup/references/language-verification.md +2 -2
  322. package/skills/scip-setup/references/per-repo-triage.md +1 -1
  323. package/skills/scip-verify/SKILL.md +16 -11
  324. package/skills/scip-verify/references/calibrate-detectors.md +7 -7
  325. package/dist/chunk-24QNP7MN.js +0 -2
  326. package/dist/chunk-26X7KCJR.js +0 -5
  327. package/dist/chunk-273W2U4Y.js +0 -40
  328. package/dist/chunk-2OXVAGGT.js +0 -3
  329. package/dist/chunk-2ZOCHAL2.js +0 -8
  330. package/dist/chunk-35SQLYCQ.js +0 -2
  331. package/dist/chunk-4CGVLUDP.js +0 -18
  332. package/dist/chunk-4RI4BJGT.js +0 -8
  333. package/dist/chunk-52HQTTPB.js +0 -2
  334. package/dist/chunk-64MNV6AB.js +0 -8
  335. package/dist/chunk-7E3TH5ZN.js +0 -33
  336. package/dist/chunk-7Q6VYYCH.js +0 -2
  337. package/dist/chunk-A63U2W3P.js +0 -3
  338. package/dist/chunk-ADFSIJP2.js +0 -16
  339. package/dist/chunk-AOLE4DYM.js +0 -6
  340. package/dist/chunk-APMMR5Y2.js +0 -2
  341. package/dist/chunk-B5MHCHP3.js +0 -107
  342. package/dist/chunk-DGAGY7RJ.js +0 -60
  343. package/dist/chunk-DGMCFMPG.js +0 -11
  344. package/dist/chunk-E2ZXPB7J.js +0 -38
  345. package/dist/chunk-FKGN4A4E.js +0 -61
  346. package/dist/chunk-G4UQL4CP.js +0 -2
  347. package/dist/chunk-GA64UPMI.js +0 -6
  348. package/dist/chunk-HEBAY673.js +0 -2
  349. package/dist/chunk-HELS7KFF.js +0 -2
  350. package/dist/chunk-IPDCSB6N.js +0 -6
  351. package/dist/chunk-JERWGHQT.js +0 -16
  352. package/dist/chunk-JJJCO4QC.js +0 -945
  353. package/dist/chunk-JZNLMHWY.js +0 -56
  354. package/dist/chunk-K42M2KWT.js +0 -2
  355. package/dist/chunk-KP4KBDVF.js +0 -3
  356. package/dist/chunk-LRTP3DKL.js +0 -3
  357. package/dist/chunk-N3SE646F.js +0 -2
  358. package/dist/chunk-NN4ZIRPK.js +0 -8
  359. package/dist/chunk-P6HBYNBE.js +0 -5
  360. package/dist/chunk-QHKUY4FW.js +0 -2
  361. package/dist/chunk-QHRL4LKM.js +0 -2
  362. package/dist/chunk-SHKZ7OVJ.js +0 -35
  363. package/dist/chunk-TFUU5MQQ.js +0 -2
  364. package/dist/chunk-UXP636P5.js +0 -144
  365. package/dist/chunk-VEVBIAOJ.js +0 -16
  366. package/dist/chunk-VKRQDBW5.js +0 -9
  367. package/dist/chunk-VOQFGC2W.js +0 -67
  368. package/dist/chunk-WMXRRBII.js +0 -8
  369. package/dist/chunk-X3NLZHPA.js +0 -20
  370. package/dist/chunk-XF3KLXN3.js +0 -11
  371. package/dist/chunk-YCPASUCX.js +0 -2
  372. package/dist/chunk-YLVE3SXZ.js +0 -20
  373. package/dist/chunk-Z2LHPIOM.js +0 -2
  374. package/dist/chunk-Z5QQPJ3U.js +0 -30
  375. package/dist/chunk-ZTTISZ7J.js +0 -112
  376. package/dist/command-descriptors-SJDZ7QGR.js +0 -617
  377. package/dist/direct-navigation-HTKOZEOM.js +0 -3
@@ -1,4 +1,30 @@
1
- # CLI JSON output contract
1
+ # CLI output modes
2
+
3
+ Human output is the default for people and agents. It is the command-owned
4
+ presentation: reports retain sections and whitespace, and `code` retains a
5
+ path/range header, source indentation, and one-based line numbers. It omits
6
+ transport metadata that does not help answer the command's question.
7
+
8
+ Public commands that support structured output share the same three options:
9
+
10
+ ```text
11
+ --json Emit the stable versioned CLI envelope.
12
+ --result-only With --json, emit only the command-owned result.
13
+ --compact With --json, minify the selected JSON form for a program.
14
+ ```
15
+
16
+ Use plain `--json` for an integration that depends on producer, schema,
17
+ coverage, evidence, arguments, or invocation options. Use `--json
18
+ --result-only` for a program that needs just the result. Agents should run the
19
+ ordinary command instead; pretty JSON remains structurally noisier than the
20
+ human renderer. Both modifiers are rejected without `--json`.
21
+
22
+ For example, `scip-query code <symbol>` prints source directly. Its result-only
23
+ form contains only `file`, resolved `symbol`, `language`, a one-based `range`,
24
+ and ordered `{ line, text }` rows. Resolution alternatives are added only when
25
+ the requested symbol is ambiguous.
26
+
27
+ ## Stable JSON envelope
2
28
 
3
29
  A CLI JSON envelope is the public transport record printed by a scip-query
4
30
  command when a caller selects `--json`. Its real-world units are the JSON
@@ -13,12 +39,12 @@ The current envelope is schema version 1:
13
39
  {
14
40
  "kind": "scip-query-result",
15
41
  "schemaVersion": 1,
16
- "producer": { "name": "scip-query", "version": "0.19.6" },
42
+ "producer": { "name": "scip-query", "version": "0.19.10" },
17
43
  "command": "refs",
18
44
  "resultSchemaVersion": 1,
19
45
  "evidence": "graph-fact",
20
46
  "args": ["login"],
21
- "options": { "json": true, "compact": true },
47
+ "options": { "json": true },
22
48
  "result": {},
23
49
  "coverage": {}
24
50
  }
@@ -37,6 +63,130 @@ The public `scip-query/runtime` export provides
37
63
  consumers that want the repository's compatibility policy rather than a
38
64
  hand-written field check.
39
65
 
66
+ ## Complete output for agents
67
+
68
+ An output page is one consecutive, bounded part of the characters a command
69
+ rendered. Its real-world units are the `scip-query-output-page` objects and
70
+ human page blocks returned after a result exceeds an agent transport's safe
71
+ size. It differs from a query limit because it divides already-produced
72
+ output without discarding any character: following each emitted continuation
73
+ command reconstructs the complete rendered stream.
74
+
75
+ Every command accepts these global options:
76
+
77
+ ```text
78
+ --output-page-size <characters>
79
+ --output-cursor <cursor>
80
+ ```
81
+
82
+ Run commands normally without choosing a page size. Human output larger than
83
+ 12,000 characters is paged automatically as ordinary multiline text, not as a
84
+ JSON object. Each incomplete page prints one exact continuation command after
85
+ its content. Agents must run that command unchanged until the output-complete
86
+ marker. Supplying `--output-page-size` changes the character budget; it does
87
+ not select JSON. The value counts rendered JavaScript string characters, not
88
+ rows, results, model tokens, or bytes. If the complete result fits, scip-query
89
+ returns it unchanged and removes the temporary snapshot; a page wrapper exists
90
+ only when more content remains. Partial human pages end at the last complete
91
+ line within that budget whenever one exists, so the next page begins with its
92
+ own heading or source line number; a single line longer than the budget is the
93
+ only case that requires a character-boundary split. Do not pipe scip-query
94
+ through `head`, `tail`, or a line-range `sed`; those programs discard output
95
+ without creating a resumable position.
96
+
97
+ Default `--json` output remains the ordinary, additively extensible
98
+ `scip-query-result` envelope. When that envelope exceeds
99
+ 12,000 characters, scip-query writes an early stderr warning containing the
100
+ exact command that opts into output pages. The paged command returns:
101
+
102
+ ```json
103
+ {
104
+ "kind": "scip-query-output-page",
105
+ "schemaVersion": 1,
106
+ "producer": { "name": "scip-query", "version": "0.19.10" },
107
+ "command": "architecture",
108
+ "contentType": "application/json",
109
+ "agentInstruction": "INCOMPLETE EVIDENCE: do not draw conclusions or report completion from this partial page. Run page.continuation.command exactly, then repeat until page.complete is true.",
110
+ "page": {
111
+ "offset": 0,
112
+ "returnedCharacters": 12000,
113
+ "totalCharacters": 48152,
114
+ "omittedCharacters": 36152,
115
+ "remainingCharacters": 36152,
116
+ "complete": false,
117
+ "outputHash": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
118
+ "continuation": {
119
+ "cursor": "<opaque cursor>",
120
+ "command": "scip-query architecture --json --output-page-size 12000 --output-cursor <opaque cursor>"
121
+ }
122
+ },
123
+ "content": "{\n \"kind\": \"scip-query-result\",\n ..."
124
+ }
125
+ ```
126
+
127
+ The cursor is bound to the executable or package-runner prefix, command,
128
+ working directory, complete non-pagination argument list, immutable page
129
+ number and size, private output snapshot, and SHA-256 of the complete rendered
130
+ output. The initial capture records that invocation identity plus each page's
131
+ UTF-8 byte range and hash. A continuation reads and verifies only that range,
132
+ so retrieving all pages performs linear snapshot I/O and never re-runs the
133
+ command. A changed executable identity, page, page size, missing snapshot, or
134
+ expired snapshot is rejected with the exact page-one restart command using the
135
+ same prefix that created it.
136
+
137
+ A genuinely partial JSON page must carry `content` as a string because an
138
+ arbitrary character boundary is not necessarily valid nested JSON. Run the
139
+ emitted continuation exactly until completion. Normal agent work should use
140
+ human output, where partial pages remain multiline text rather than a JSON
141
+ string.
142
+
143
+ One snapshot is bounded to 32 million characters, 64 MiB, and 32,768 pages.
144
+ The per-user pool is bounded to 32 snapshots and 256 MiB under atomic
145
+ reservation. Every incomplete machine-readable page carries a direct
146
+ `agentInstruction`; consumers must follow `page.continuation.command` until
147
+ `page.complete` is `true`.
148
+
149
+ Output pages and result coverage answer different questions:
150
+
151
+ - output pagination says whether every rendered character is retrievable;
152
+ - the result envelope's `coverage` says whether the command examined every
153
+ logical result unit.
154
+
155
+ A completely retrieved page can therefore still contain a bounded or sampled
156
+ analysis. Use the result envelope's stated `--full` remediation when present,
157
+ then follow output continuation commands until complete.
158
+
159
+ Invocation coverage counts the semantic result units declared by the command
160
+ descriptor. A list command counts top-level rows; a report counts one report;
161
+ and a command with a named result field counts only that field. Unrelated
162
+ diagnostic arrays do not inflate `returned`. Symbol-selecting commands also
163
+ report a separate `coverage.resolution` state—`exact`, `ambiguous`, or
164
+ `missing` with its candidate count—because resolving one requested identity
165
+ and enumerating that identity's result rows are different completeness
166
+ questions.
167
+
168
+ `refs --limit <n>` uses a generation-bound keyset cursor: each ordinary page
169
+ continues after the last returned `(relativePath, line)` and stops once it has
170
+ found the requested rows plus one continuation witness. The JSON result reports
171
+ `pagination.producer: "source-keyset"` for that bounded producer. Explicit
172
+ semantic enrichment (`--full`), Ruby supplemental evidence, and the coarse SCIP
173
+ chunk fallback cannot currently resume before complete materialization; those
174
+ pages preserve their evidence but report
175
+ `pagination.producer: "complete-only"` instead of implying that `--limit`
176
+ bounded the analysis work. Version-1 offset cursors remain readable and their
177
+ next continuation is upgraded to the version-2 keyset format. Every result
178
+ cursor is rejected after the index generation changes.
179
+
180
+ The machine-readable page schema is
181
+ [`schemas/cli-output-page.schema.json`](schemas/cli-output-page.schema.json).
182
+ Page sizes range from 256 through 100,000 characters and cursors are limited
183
+ to 4,096 characters. The first paged invocation streams the complete output
184
+ to a mode-`0600` snapshot beneath a current-user mode-`0700` temporary
185
+ directory while retaining only the requested page in memory. Snapshots expire
186
+ after one hour and are removed after the final page. Pagination imposes no
187
+ arbitrary total-output ceiling and does not silently discard later pages;
188
+ command-level result budgets still apply and report their own completeness.
189
+
40
190
  ## Compatibility policy
41
191
 
42
192
  The decoder accepts:
@@ -59,6 +209,29 @@ The committed v0 and v1 fixtures in `tests/fixtures/` prove that the newest
59
209
  decoder reads both generations. The v1 fixture also contains an unknown
60
210
  additive field so tests prove tolerant reads rather than exact-key coupling.
61
211
 
212
+ ## Effectiveness telemetry authority
213
+
214
+ `effectiveness --json` reports both handling outcomes and the authority of the
215
+ observer that produced them. Repository-local agents and humans can edit the
216
+ same `.scipquery/events/` and suppression files being summarized, so their
217
+ rows use `authority: "local-writable-telemetry"` and expose
218
+ `resolutionVsSuppressionRate`. The legacy `precision` result field remains
219
+ present but is `null` for writable, mixed, or self-asserted populations. It is
220
+ numeric only when every event in that population is a `protected-ci`
221
+ observation with `protected-external` authority and the caller supplies its
222
+ gate-run ID through a separately controlled attestation set. The built-in
223
+ repository-history command supplies no such set, so writable JSON cannot
224
+ self-promote into an independent grade. External evaluators can call the
225
+ public `computeEffectiveness()` export from `scip-query/queries` with
226
+ `protectedGateRunIds` obtained from their separately controlled corpus.
227
+
228
+ The result also includes observer counts, distinct and missing gate-run
229
+ identities, and bounded anomaly samples. Those samples identify calibration
230
+ work without requiring a human to approve every ordinary automated
231
+ suppression. `recordCompatibility.outcomeEvents` remains the independent
232
+ statement about whether every event file was readable; neither compatibility
233
+ nor Git can prove that a writable event file was never deleted.
234
+
62
235
  ## Other JSON protocols
63
236
 
64
237
  The hidden `__health-phase` and `__diff-impact-batch` commands are
@@ -4,13 +4,15 @@
4
4
 
5
5
  This syntax summary is generated from the CLI command descriptors. Keep workflow guidance hand-authored, but keep command syntax, descriptions, and option flags descriptor-owned.
6
6
 
7
- Commands with `--json` emit the versioned public envelope documented in [CLI JSON output contract](CLI_JSON_OUTPUT.md).
7
+ Commands with `--json` share three structured modes: plain `--json` emits the stable public envelope, `--json --result-only` emits only the command payload, and `--json --compact` minifies either form for a program. Agents should prefer ordinary human output. See [CLI output modes](CLI_JSON_OUTPUT.md).
8
+
9
+ Every command accepts `--output-page-size <characters>` and `--output-cursor <cursor>`. Run normally without choosing a page size: oversized human output stays readable text and prints one exact continuation command; oversized JSON prints the exact command that opts into versioned JSON page envelopes.
8
10
 
9
11
  ### Indexing
10
12
 
11
13
  | Command | Description | Options |
12
14
  |---|---|---|
13
- | `reindex` | Index the codebase and convert to SQLite | `-l, --language <lang>`<br>`--pnpm-workspaces`<br>`--force`<br>`--allow-partial`<br>`--indexer-concurrency <n>`<br>`--json` |
15
+ | `reindex` | Index the codebase and convert to SQLite | `-l, --language <lang>`<br>`--pnpm-workspaces`<br>`--force`<br>`--allow-partial`<br>`--trust-project-tools`<br>`--install-missing`<br>`--indexer-concurrency <n>`<br>`--json`<br>`--result-only`<br>`--compact` |
14
16
  | `augment-sources` | Add source files skipped by upstream SCIP indexers to the SQLite documents table | - |
15
17
  | `augment-vue` | Add compiler-resolved Vue SFC references to the SQLite index using Volar | `--project <tsconfig>` |
16
18
 
@@ -18,136 +20,136 @@ Commands with `--json` emit the versioned public envelope documented in [CLI JSO
18
20
 
19
21
  | Command | Description | Options |
20
22
  |---|---|---|
21
- | `stats` | Show index statistics | `--json` |
23
+ | `stats` | Show index statistics | `--json`<br>`--result-only`<br>`--compact` |
22
24
 
23
25
  ### Navigation
24
26
 
25
27
  | Command | Description | Options |
26
28
  |---|---|---|
27
- | `files <pattern>` | Find files matching a pattern | `--json` |
28
- | `methods <className>` | List methods of a class (with line ranges) | `--json` |
29
- | `refs <symbol>` | Find all files referencing a symbol | `--full`<br>`-n, --limit <n>`<br>`--cursor <cursor>`<br>`--json`<br>`--compact` |
30
- | `trace <symbol>` | Trace a symbol: definition + all references | `--full`<br>`--compact`<br>`--json` |
31
- | `deps <file>` | Files this file depends on (internal) | `--json` |
32
- | `rdeps <file>` | Files that depend on this file/module | `--json` |
33
- | `system <module>` | Full module map: files, symbols, deps in/out | `--compact`<br>`--json` |
34
- | `surface <module>` | What symbols consumers actually use from this module | `--json` |
35
- | `imports <file>` | What symbols does this file import? | `--full`<br>`--json` |
36
- | `imported-by <symbol>` | Which files import this symbol? | `--json` |
37
- | `outline <file>` | Tree view of symbols in a file, with line ranges | `--signatures`<br>`--json` |
38
- | `members <symbol>` | All children of a symbol (methods, fields, nested types) | `--json` |
39
- | `by-kind <kind>` | Find symbols by SCIP kind (class, interface, enum, function, etc.) | `-s, --scope <path>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
40
- | `kind-counts` | Histogram of symbol kinds in the codebase | `-s, --scope <path>`<br>`--json` |
41
- | `hierarchy <symbol>` | Show a symbol's ancestry chain (method → class → module) | `--json` |
42
- | `code <symbol>` | Read the source code for a symbol (bounded to its definition range) | `-C, --context <n>`<br>`--json` |
43
- | `dataflow <symbol>` | Reference-level dataflow: definition sites, usage sites, producers, consumers | `--full`<br>`--json` |
44
- | `slice <symbol>` | Reference-level program slice: what affects this (backward) or what this affects (forward) | `--forward`<br>`--depth <n>`<br>`--full`<br>`--json` |
29
+ | `files <pattern>` | Find files matching a pattern | `--json`<br>`--result-only`<br>`--compact` |
30
+ | `methods <className>` | List methods of one exactly resolved class; ambiguity and missing targets fail explicitly | `--json`<br>`--result-only`<br>`--compact` |
31
+ | `refs <symbol>` | Find all files referencing a symbol | `--full`<br>`-n, --limit <n>`<br>`--cursor <cursor>`<br>`--json`<br>`--result-only`<br>`--compact` |
32
+ | `trace <symbol>` | Trace a symbol: definition + all references | `--full`<br>`--json`<br>`--result-only`<br>`--compact` |
33
+ | `deps <file>` | Files this file depends on (internal) | `--json`<br>`--result-only`<br>`--compact` |
34
+ | `rdeps <file>` | Files that depend on this file/module | `--json`<br>`--result-only`<br>`--compact` |
35
+ | `system <module>` | Full module map: files, symbols, deps in/out | `--json`<br>`--result-only`<br>`--compact` |
36
+ | `surface <module>` | What symbols consumers actually use from this module | `--json`<br>`--result-only`<br>`--compact` |
37
+ | `imports <file>` | What symbols does this file import? | `--full`<br>`--json`<br>`--result-only`<br>`--compact` |
38
+ | `imported-by <symbol>` | Which files import this symbol? | `--json`<br>`--result-only`<br>`--compact` |
39
+ | `outline <file>` | Tree view of symbols in a file, with line ranges | `--signatures`<br>`--json`<br>`--result-only`<br>`--compact` |
40
+ | `members <symbol>` | All children of a symbol (methods, fields, nested types) | `--json`<br>`--result-only`<br>`--compact` |
41
+ | `by-kind <kind>` | Find symbols by SCIP kind (class, interface, enum, function, etc.) | `-s, --scope <path>`<br>`-n, --limit <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
42
+ | `kind-counts` | Histogram of symbol kinds in the codebase | `-s, --scope <path>`<br>`--json`<br>`--result-only`<br>`--compact` |
43
+ | `hierarchy <symbol>` | Show a symbol's ancestry chain (method → class → module) | `--json`<br>`--result-only`<br>`--compact` |
44
+ | `code <symbol>` | Read the source code for a symbol (bounded to its definition range) | `-C, --context <n>`<br>`--json`<br>`--result-only`<br>`--compact` |
45
+ | `dataflow <symbol>` | Reference-level dataflow: definition sites, usage sites, producers, consumers | `--full`<br>`--json`<br>`--result-only`<br>`--compact` |
46
+ | `slice <symbol>` | Reference-level program slice: what affects this (backward) or what this affects (forward) | `--forward`<br>`--depth <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
45
47
 
46
48
  ### Cleanup
47
49
 
48
50
  | Command | Description | Options |
49
51
  |---|---|---|
50
- | `dead [scope]` | Find repository-dead code, file-internal symbols, and implicit-usage signals | `--min-loc <n>`<br>`--include-tests`<br>`--skip-barrels`<br>`--include-members`<br>`--only-dead`<br>`--only-internal`<br>`--full`<br>`--json` |
51
- | `unused-imports <file>` | Find imports not referenced in the same file | `--full`<br>`--json` |
52
- | `isolated` | Find completely orphaned symbols (no references at all) | `-s, --scope <path>`<br>`--min-loc <n>`<br>`--full`<br>`--json` |
53
- | `similar [symbol] [other]` | Find heuristic function similarity candidates from callee fingerprints | `--min-similarity <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--min-callees <n>`<br>`--cross-file-only`<br>`--plan`<br>`--full`<br>`--json` |
54
- | `similar-files [file]` | Find heuristic similar-file candidates from dependency profiles | `--min-similarity <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--min-deps <n>`<br>`--full`<br>`--json` |
55
- | `react-component-duplicates [file]` | Find heuristic duplicated React component structure candidates from JSX tags, props, events, and bindings | `--min-similarity <n>`<br>`--min-tokens <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json` |
56
- | `react-hook-candidates [file]` | Find heuristic React hook extraction candidates from shared state, effects, requests, and handlers | `--min-similarity <n>`<br>`--min-shared-behaviors <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json` |
57
- | `react-large-component-pressure [file]` | Find heuristic large React component pressure candidates from component lines, JSX structure, and hook behavior | `--min-component-lines <n>`<br>`--min-file-lines <n>`<br>`--min-jsx-tokens <n>`<br>`--min-behavior-tokens <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json` |
58
- | `vue-component-duplicates [file]` | Find heuristic duplicated Vue component structure candidates from template tags, bindings, slots, and directives | `--min-similarity <n>`<br>`--min-tokens <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json` |
59
- | `vue-composable-candidates [file]` | Find heuristic Vue composable extraction candidates from shared state, effects, requests, and template bindings | `--min-similarity <n>`<br>`--min-shared-behaviors <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json` |
60
- | `vue-large-view-pressure [file]` | Find heuristic large Vue view pressure candidates from template, script, style, and external script line counts | `--min-total-lines <n>`<br>`--min-template-lines <n>`<br>`--min-script-lines <n>`<br>`--min-style-lines <n>`<br>`--review-thresholds`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json` |
61
- | `similar-chains` | Find heuristic similar-chain candidates from dependency flows | `--min-similarity <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--min-length <n>`<br>`--max-length <n>`<br>`--full`<br>`--json` |
62
- | `extract-candidates` | Find heuristic extraction candidates from isolated callee clusters | `-s, --scope <path>`<br>`--min-loc <n>`<br>`--min-callees <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
63
- | `locality-candidates [symbol-or-file]` | Find directory-locality and ancestry candidates from consumer ownership | `-s, --scope <path>`<br>`--min-consumers <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
64
- | `cleanup-plan` | Ordered, batched deletion plan: graph-fact dead code plus the cascade candidates it unlocks | `-s, --scope <path>`<br>`--min-loc <n>`<br>`--max-depth <n>`<br>`--verify`<br>`--patch`<br>`--json`<br>`--full` |
65
- | `cleanup-apply` | Apply a compiler-verified cleanup-plan batch to the working tree | `-s, --scope <path>`<br>`--min-loc <n>`<br>`--max-depth <n>`<br>`--verified`<br>`--batch <n>`<br>`--all`<br>`--force-dirty`<br>`--full` |
66
- | `recent-duplicates` | Directional duplicate candidates: recent code that re-implements established callable, React, or Vue code | `--window <n>`<br>`--min-similarity <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json` |
67
- | `doc-drift [doc]` | Stale-doc candidates: code the doc references or co-changed with kept changing after the doc stopped | `-n, --limit <n>`<br>`--min-coupling <n>`<br>`--full`<br>`--json` |
68
- | `unused-params` | Speculative-generality candidates: trailing parameters no body ever uses (TS/JS) | `-s, --scope <path>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
69
- | `drift [module]` | Detect drift candidates: unused imports and declared architecture violations; pass --architecture for boundary context | `--min-deviation <n>`<br>`--patterns`<br>`--architecture`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
70
- | `wrapper-candidates` | Find heuristic wrapper candidates only called by one consumer (high false-positive rate on codebases with intentional layering/ambient types — treat as exploration, not findings) | `-s, --scope <path>`<br>`--max-loc <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
71
- | `passthrough-candidates` | Find heuristic passthrough candidates that forward to one callee | `-s, --scope <path>`<br>`--max-loc <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
72
- | `stale-abstractions` | Find heuristic stale abstraction candidates with 0-1 consumers (high false-positive rate on codebases with intentional layering/ambient types — treat as exploration, not findings) | `-s, --scope <path>`<br>`--min-loc <n>`<br>`-n, --limit <n>`<br>`--include-low-confidence`<br>`--full`<br>`--json` |
73
- | `complexity-hotspots` | Find heuristic complexity hotspot candidates from LOC x fan-in x fan-out | `-s, --scope <path>`<br>`--min-loc <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
74
- | `convergence <symbol1> <symbol2>` | Deprecated alias for similar <symbol1> <symbol2> --plan | `--full`<br>`--json` |
75
- | `redundant-reexports` | Find barrel re-exports that nobody imports through | `-s, --scope <path>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
76
- | `duplicate-bodies` | Find exact duplicate small-body candidates across files | `-s, --scope <path>`<br>`--max-loc <n>`<br>`--min-loc <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
77
- | `twin-drift` | Twin drift candidates: same-name (or near-name) functions across files with diverged bodies | `-s, --scope <path>`<br>`--min-similarity <n>`<br>`--include-homonyms`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
78
- | `twin-ab <symbolA> <symbolB>` | Generate a behavioral A/B scaffold comparing two same-concept twins (scip-audit integrity scenario) — a ready-to-fill vitest file, not an auto-executor | `--out <path>`<br>`--force`<br>`--json` |
79
- | `not-implemented` | Reachable placeholder stub candidates (throw-stub, TODO+return-default, empty body) — production callers can actually reach these; an unreachable stub is dead's job, not this one's | `-s, --scope <path>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
80
- | `decorative-checkers` | Decorative checker candidates: validate*/verify*/check*/assert*/is*/has* callables with no reachable failure exit anywhere in their body | `-s, --scope <path>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
81
- | `test-quality` | Test-quality candidates: assertion-free it/test bodies, a skipped-test ledger with git-blame age, and mock-echo tests that assert the same literal they stubbed into a mock | `-s, --scope <path>`<br>`-n, --limit <n>`<br>`--rot-days <n>`<br>`--full`<br>`--json` |
82
- | `similar-signatures` | Find functions with near-identical type signatures (same shape) | `-s, --scope <path>`<br>`--min-loc <n>`<br>`--max-shape-frequency <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
52
+ | `dead [scope]` | Find repository-dead code, file-internal symbols, and implicit-usage signals | `--min-loc <n>`<br>`--include-tests`<br>`--skip-barrels`<br>`--include-members`<br>`--only-dead`<br>`--only-internal`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
53
+ | `unused-imports <file>` | Find imports not referenced in the same file | `--full`<br>`--json`<br>`--result-only`<br>`--compact` |
54
+ | `isolated` | Find completely orphaned symbols (no references at all) | `-s, --scope <path>`<br>`--min-loc <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
55
+ | `similar [symbol] [other]` | Find heuristic function similarity candidates from callee fingerprints | `--min-similarity <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--min-callees <n>`<br>`--cross-file-only`<br>`--plan`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
56
+ | `similar-files [file]` | Find heuristic similar-file candidates from dependency profiles | `--min-similarity <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--min-deps <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
57
+ | `react-component-duplicates [file]` | Find heuristic duplicated React component structure candidates from JSX tags, props, events, and bindings | `--min-similarity <n>`<br>`--min-tokens <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
58
+ | `react-hook-candidates [file]` | Find heuristic React hook extraction candidates from shared state, effects, requests, and handlers | `--min-similarity <n>`<br>`--min-shared-behaviors <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
59
+ | `react-large-component-pressure [file]` | Find heuristic large React component pressure candidates from component lines, JSX structure, and hook behavior | `--min-component-lines <n>`<br>`--min-file-lines <n>`<br>`--min-jsx-tokens <n>`<br>`--min-behavior-tokens <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
60
+ | `vue-component-duplicates [file]` | Find heuristic duplicated Vue component structure candidates from template tags, bindings, slots, and directives | `--min-similarity <n>`<br>`--min-tokens <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
61
+ | `vue-composable-candidates [file]` | Find heuristic Vue composable extraction candidates from shared state, effects, requests, and template bindings | `--min-similarity <n>`<br>`--min-shared-behaviors <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
62
+ | `vue-large-view-pressure [file]` | Find heuristic large Vue view pressure candidates from template, script, style, and external script line counts | `--min-total-lines <n>`<br>`--min-template-lines <n>`<br>`--min-script-lines <n>`<br>`--min-style-lines <n>`<br>`--review-thresholds`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
63
+ | `similar-chains` | Find heuristic similar-chain candidates from dependency flows | `--min-similarity <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--min-length <n>`<br>`--max-length <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
64
+ | `extract-candidates` | Find heuristic extraction candidates from isolated callee clusters | `-s, --scope <path>`<br>`--min-loc <n>`<br>`--min-callees <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
65
+ | `locality-candidates [symbol-or-file]` | Find directory-locality and ancestry candidates from consumer ownership | `-s, --scope <path>`<br>`--min-consumers <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
66
+ | `cleanup-plan` | Ordered, batched deletion plan: graph-fact dead code plus the cascade candidates it unlocks | `-s, --scope <path>`<br>`--min-loc <n>`<br>`--max-depth <n>`<br>`--verify`<br>`--patch`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
67
+ | `cleanup-apply` | Apply a compiler-verified cleanup-plan batch to the working tree | `-s, --scope <path>`<br>`--min-loc <n>`<br>`--max-depth <n>`<br>`--verified`<br>`--batch <n>`<br>`--all`<br>`--dry-run`<br>`--force-dirty`<br>`--full` |
68
+ | `recent-duplicates` | Directional duplicate candidates: recent code that re-implements established callable, React, or Vue code | `--window <n>`<br>`--min-similarity <n>`<br>`-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
69
+ | `doc-drift [doc]` | Stale-doc candidates: code the doc references or co-changed with kept changing after the doc stopped | `-n, --limit <n>`<br>`--min-coupling <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
70
+ | `unused-params` | Speculative-generality candidates: trailing parameters no body ever uses (TS/JS) | `-s, --scope <path>`<br>`-n, --limit <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
71
+ | `drift [module]` | Detect drift candidates: unused imports and declared architecture violations; pass --architecture for boundary context | `--min-deviation <n>`<br>`--patterns`<br>`--architecture`<br>`-n, --limit <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
72
+ | `wrapper-candidates` | Find heuristic wrapper candidates only called by one consumer (high false-positive rate on codebases with intentional layering/ambient types — treat as exploration, not findings) | `-s, --scope <path>`<br>`--max-loc <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
73
+ | `passthrough-candidates` | Find heuristic passthrough candidates that forward to one callee | `-s, --scope <path>`<br>`--max-loc <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
74
+ | `stale-abstractions` | Find heuristic stale abstraction candidates with 0-1 consumers (high false-positive rate on codebases with intentional layering/ambient types — treat as exploration, not findings) | `-s, --scope <path>`<br>`--min-loc <n>`<br>`-n, --limit <n>`<br>`--include-low-confidence`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
75
+ | `complexity-hotspots` | Find heuristic complexity hotspot candidates from LOC x fan-in x fan-out | `-s, --scope <path>`<br>`--min-loc <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
76
+ | `convergence <symbol1> <symbol2>` | Deprecated alias for similar <symbol1> <symbol2> --plan | `--full`<br>`--json`<br>`--result-only`<br>`--compact` |
77
+ | `redundant-reexports` | Find barrel re-exports that nobody imports through | `-s, --scope <path>`<br>`-n, --limit <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
78
+ | `duplicate-bodies` | Find exact duplicate small-body candidates across files | `-s, --scope <path>`<br>`--max-loc <n>`<br>`--min-loc <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
79
+ | `twin-drift` | Twin drift candidates: same-name (or near-name) functions across files with diverged bodies | `-s, --scope <path>`<br>`--min-similarity <n>`<br>`--include-homonyms`<br>`-n, --limit <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
80
+ | `twin-ab <symbolA> <symbolB>` | Generate a behavioral A/B scaffold comparing two same-concept twins (scip-audit integrity scenario) — a ready-to-fill vitest file, not an auto-executor | `--out <path>`<br>`--force`<br>`--json`<br>`--result-only`<br>`--compact` |
81
+ | `not-implemented` | Reachable placeholder stub candidates (throw-stub, TODO+return-default, empty body) — production callers can actually reach these; an unreachable stub is dead's job, not this one's | `-s, --scope <path>`<br>`-n, --limit <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
82
+ | `decorative-checkers` | Decorative checker candidates: validate*/verify*/check*/assert*/is*/has* callables with no reachable failure exit anywhere in their body | `-s, --scope <path>`<br>`-n, --limit <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
83
+ | `test-quality` | Test-quality candidates: assertion-free it/test bodies, a skipped-test ledger with git-blame age, and mock-echo tests that assert the same literal they stubbed into a mock | `-s, --scope <path>`<br>`-n, --limit <n>`<br>`--rot-days <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
84
+ | `similar-signatures` | Find functions with near-identical type signatures (same shape) | `-s, --scope <path>`<br>`--min-loc <n>`<br>`--max-shape-frequency <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
83
85
 
84
86
  ### Graph
85
87
 
86
88
  | Command | Description | Options |
87
89
  |---|---|---|
88
- | `hotspots` | Most-referenced symbols in the codebase (choke points) | `-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json` |
89
- | `fan-in [symbol]` | Count files referencing an exact symbol; top JSON rows include exact symbol identity | `-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json` |
90
- | `fan-out [file]` | How many external symbols a file uses (or top fan-out across codebase) | `-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json` |
91
- | `coupling [file1] [file2]` | Coupling between two files, or top coupled pairs in codebase | `-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json` |
92
- | `cycles` | Detect circular dependency chains between files | `-s, --scope <path>`<br>`--max-depth <n>`<br>`--json` |
93
- | `architecture` | Evaluate project-owned architectural boundaries and dependency rules | `-s, --scope <path>`<br>`--json` |
94
- | `bottlenecks` | Find coupling hubs: high fan-in AND high fan-out | `-n, --limit <n>`<br>`-s, --scope <path>`<br>`--min-fan-in <n>`<br>`--min-fan-out <n>`<br>`--full`<br>`--json` |
95
- | `deep-chains` | Find the longest condensed dependency-component chains | `-n, --limit <n>`<br>`-s, --scope <path>`<br>`--min-depth <n>`<br>`--full`<br>`--json` |
96
- | `call-graph <symbol>` | Show incoming callers and outgoing callees for a symbol | `--full`<br>`--json` |
90
+ | `hotspots` | Most-referenced symbols in the codebase (choke points) | `-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
91
+ | `fan-in [symbol]` | Count files referencing an exact symbol; top JSON rows include exact symbol identity | `-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
92
+ | `fan-out [file]` | How many external symbols a file uses (or top fan-out across codebase) | `-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
93
+ | `coupling [file1] [file2]` | Coupling between two files, or top coupled pairs in codebase | `-n, --limit <n>`<br>`-s, --scope <path>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
94
+ | `cycles` | Detect circular dependency chains between files | `-s, --scope <path>`<br>`--max-depth <n>`<br>`--json`<br>`--result-only`<br>`--compact` |
95
+ | `architecture` | Evaluate project-owned architectural boundaries and dependency rules | `-s, --scope <path>`<br>`--json`<br>`--result-only`<br>`--compact` |
96
+ | `bottlenecks` | Find coupling hubs: high fan-in AND high fan-out | `-n, --limit <n>`<br>`-s, --scope <path>`<br>`--min-fan-in <n>`<br>`--min-fan-out <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
97
+ | `deep-chains` | Find the longest condensed dependency-component chains | `-n, --limit <n>`<br>`-s, --scope <path>`<br>`--min-depth <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
98
+ | `call-graph <symbol>` | Show incoming callers and outgoing callees for a symbol | `--full`<br>`--json`<br>`--result-only`<br>`--compact` |
97
99
 
98
100
  ### Impact
99
101
 
100
102
  | Command | Description | Options |
101
103
  |---|---|---|
102
- | `affected <symbol>` | Transitive closure of symbols that could break if this symbol changes | `--max-depth <n>`<br>`-s, --scope <path>`<br>`--json` |
103
- | `change-surface <file>` | Pre-change briefing: exports, consumers, and blast-radius risk | `--full`<br>`--json` |
104
- | `co-change [file]` | Files that change together in git history without a dependency edge — hidden coupling candidates | `--min-together <n>`<br>`-n, --limit <n>`<br>`--all`<br>`--full`<br>`--json` |
105
- | `diff-gate` | Gate the current diff: architecture regressions plus echo, migration, coordination, doc-drift, unused-param, and new-dead candidates; exit 1 on blocking findings | `--base <ref>`<br>`--min-together <n>`<br>`--max-echo-checks <n>`<br>`--max-helpers <n>`<br>`--baseline`<br>`--full`<br>`--skip <check>`<br>`--hook`<br>`--json`<br>`--compact` |
106
- | `incomplete-migration` | Partially-completed extraction candidates: new helpers in the diff wired into some sites while similar un-migrated sites remain | `--base <ref>`<br>`--min-containment <n>`<br>`--max-helpers <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
107
- | `diff-impact` | Compute changed symbols and downstream consumers from current git diff | `--base <ref>`<br>`--json` |
104
+ | `affected <symbol>` | Transitive closure of symbols that could break if this symbol changes | `--max-depth <n>`<br>`-s, --scope <path>`<br>`--json`<br>`--result-only`<br>`--compact` |
105
+ | `change-surface <file>` | Pre-change briefing: consumers, published API, operational roots, and explained change risk | `--full`<br>`--json`<br>`--result-only`<br>`--compact` |
106
+ | `co-change [file]` | Files that change together in git history without a dependency edge — hidden coupling candidates | `--min-together <n>`<br>`-n, --limit <n>`<br>`--all`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
107
+ | `diff-gate` | Runtime-bounded, single-flight gate for the current diff: architecture regressions plus echo, migration, coordination, doc-drift, unused-param, and new-dead candidates; exit 1 on blocking findings | `--base <ref>`<br>`--min-together <n>`<br>`--max-echo-checks <n>`<br>`--max-helpers <n>`<br>`--baseline`<br>`--full`<br>`--skip <check>`<br>`--hook`<br>`--json`<br>`--result-only`<br>`--compact` |
108
+ | `incomplete-migration` | Partially-completed extraction candidates: new helpers in the diff wired into some sites while similar un-migrated sites remain | `--base <ref>`<br>`--min-containment <n>`<br>`--max-helpers <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
109
+ | `diff-impact` | Compute changed symbols and downstream consumers from current git diff | `--base <ref>`<br>`--json`<br>`--result-only`<br>`--compact` |
108
110
 
109
111
  ### Formal Models
110
112
 
111
113
  | Command | Description | Options |
112
114
  |---|---|---|
113
- | `tla <operation> [spec]` | TLA+ model workflow: verify a model and mapping contract, scaffold a draft model from indexed code, generate a trace recorder, or check a recorded trace against the next-state relation | `--map <file>`<br>`--config <file>`<br>`--checker <mode>`<br>`--tla-tools <jar>`<br>`--apalache <binary>`<br>`--length <n>`<br>`--timeout-ms <n>`<br>`--trace <file>`<br>`--next <operator>`<br>`--coverage`<br>`--allow-unknown`<br>`--out <path>`<br>`--module-name <name>`<br>`--force`<br>`--full`<br>`--json` |
115
+ | `tla <operation> [spec]` | TLA+ model workflow: verify a model and mapping contract, scaffold a draft model from indexed code, generate a trace recorder, or check a recorded trace against the next-state relation | `--map <file>`<br>`--config <file>`<br>`--checker <mode>`<br>`--tla-tools <jar>`<br>`--apalache <binary>`<br>`--length <n>`<br>`--timeout-ms <n>`<br>`--trace <file>`<br>`--next <operator>`<br>`--coverage`<br>`--allow-unknown`<br>`--out <path>`<br>`--module-name <name>`<br>`--force`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
114
116
 
115
117
  ### Planning
116
118
 
117
119
  | Command | Description | Options |
118
120
  |---|---|---|
119
- | `plan-context <target>` | Pre-edit planning context for a symbol, file, or module | `--impact-depth <n>`<br>`--slice-depth <n>`<br>`-s, --scope <path>`<br>`-n, --limit <n>`<br>`--full`<br>`--json`<br>`--compact` |
121
+ | `plan-context <target>` | Pre-edit planning context for a symbol, file, or module | `--impact-depth <n>`<br>`--slice-depth <n>`<br>`-s, --scope <path>`<br>`-n, --limit <n>`<br>`--full`<br>`--json`<br>`--result-only`<br>`--compact` |
120
122
 
121
123
  ### Health
122
124
 
123
125
  | Command | Description | Options |
124
126
  |---|---|---|
125
- | `self-audit` | Score cheap evidence paths against the best available semantic/source oracle on sampled symbols | `--samples <n>`<br>`-s, --scope <path>`<br>`--json` |
126
- | `health` | Composite codebase health report with prioritized action list | `-s, --scope <path>`<br>`--full`<br>`--json`<br>`--baseline`<br>`--write-baseline` |
127
- | `complexity <symbol>` | Per-symbol complexity: branches, cyclomatic estimate, fan-in/out, callees | `--full`<br>`--json` |
127
+ | `self-audit` | Score cheap evidence paths against the best available semantic/source oracle on sampled symbols | `--samples <n>`<br>`-s, --scope <path>`<br>`--json`<br>`--result-only`<br>`--compact` |
128
+ | `health` | Composite codebase health report with prioritized action list | `-s, --scope <path>`<br>`--full`<br>`--baseline`<br>`--write-baseline`<br>`--json`<br>`--result-only`<br>`--compact` |
129
+ | `complexity <symbol>` | Per-symbol complexity: branches, cyclomatic estimate, fan-in/out, callees | `--full`<br>`--json`<br>`--result-only`<br>`--compact` |
128
130
 
129
131
  ### Maintenance
130
132
 
131
133
  | Command | Description | Options |
132
134
  |---|---|---|
133
- | `bench` | Benchmark indexing and command runtimes for this repository | `--json`<br>`--cold-index`<br>`--include-heavy`<br>`--command <cmd>`<br>`--timeout-ms <n>`<br>`--progress`<br>`--profile`<br>`--profile-out <path>` |
134
- | `work-audit <profile>` | Rank exact repeated computations in a profiling JSONL file by measured avoidable time | `--top <n>`<br>`--json` |
135
+ | `bench` | Benchmark indexing and command runtimes for this repository | `--cold-index`<br>`--include-heavy`<br>`--command <cmd>`<br>`--timeout-ms <n>`<br>`--progress`<br>`--profile`<br>`--profile-out <path>`<br>`--json`<br>`--result-only`<br>`--compact` |
136
+ | `work-audit <profile>` | Rank exact repeated computations in a profiling JSONL file by measured avoidable time | `--top <n>`<br>`--json`<br>`--result-only`<br>`--compact` |
135
137
  | `install-skills` | Install skills (_shared, scip-query, scip-setup, scip-explore, scip-plan, scip-diagnose, scip-audit, scip-improve, scip-verify) into Claude Code, Codex, and shared agent roots | - |
136
- | `setup-hooks` | Install or refresh project-local Codex and Claude Code lifecycle hooks | `--shared`<br>`--remove`<br>`--force`<br>`--json` |
138
+ | `setup-hooks` | Install or refresh project-local Codex and Claude Code lifecycle hooks | `--shared`<br>`--remove`<br>`--force`<br>`--dry-run`<br>`--json`<br>`--result-only`<br>`--compact` |
137
139
  | `check-deps` | Check whether scip-query and the detected language indexers are actually runnable | - |
138
- | `capabilities` | Report which evidence and verification capabilities are available in this project | `--matrix`<br>`--json` |
139
- | `capability-matrix` | Deprecated alias for capabilities --matrix | `--json` |
140
+ | `capabilities` | Report which evidence and verification capabilities are available in this project | `--matrix`<br>`--json`<br>`--result-only`<br>`--compact` |
141
+ | `capability-matrix` | Deprecated alias for capabilities --matrix | `--json`<br>`--result-only`<br>`--compact` |
140
142
  | `init` | Create a .scipquery.json config file for this project | - |
141
- | `config-validate` | Validate .scipquery.json, including structured suppressions and declared coupling groups | `--json` |
142
- | `suppress <id>` | Record an accepted finding as a file under .scipquery/suppressions/ with a required reason | `--reason <text>`<br>`--check <check>`<br>`--file <path>`<br>`--expires-at <iso>`<br>`--replace <revision>`<br>`--json` |
143
- | `effectiveness` | Per-check effectiveness from the committed outcome ledger: caught, comparison-verified fixes, suppressed, unverified disappearances, and precision | `--since <window>`<br>`--check <check>`<br>`--json` |
144
- | `doctor` | Diagnose config, index freshness, dependency readiness, and project capabilities | `--json` |
145
- | `setup` | Bootstrap this project: enable automatic indexing, install agent skills, refresh the index, verify capabilities, and report health | `--guided`<br>`--yes`<br>`--git-hook`<br>`--no-hooks`<br>`--no-skills`<br>`--no-parsers`<br>`--no-health`<br>`--dossier-dir <path>`<br>`--json` |
143
+ | `config-validate` | Validate .scipquery.json, including structured suppressions and declared coupling groups | `--json`<br>`--result-only`<br>`--compact` |
144
+ | `suppress <id>` | Record an accepted finding as a file under .scipquery/suppressions/ with a required reason | `--reason <text>`<br>`--reason-code <code>`<br>`--evidence <kind:referent>`<br>`--check <check>`<br>`--file <path>`<br>`--expires-at <iso>`<br>`--replace <revision>`<br>`--json`<br>`--result-only`<br>`--compact` |
145
+ | `effectiveness` | Per-check repository telemetry from the committed outcome ledger: verified fixes, suppressions, unresolved findings, observer authority, and anomalies | `--since <window>`<br>`--check <check>`<br>`--json`<br>`--result-only`<br>`--compact` |
146
+ | `doctor` | Diagnose config, index freshness, dependency readiness, and project capabilities | `--json`<br>`--result-only`<br>`--compact` |
147
+ | `setup` | Bootstrap this project: enable automatic indexing, install agent skills, refresh the index, verify capabilities, and report health | `--guided`<br>`--yes`<br>`--git-hook`<br>`--no-hooks`<br>`--no-skills`<br>`--no-parsers`<br>`--install-missing`<br>`--no-health`<br>`--dossier-dir <path>`<br>`--json`<br>`--result-only`<br>`--compact` |
146
148
  | `setup-agent` | Seed agent guidance for this project: AGENTS.md/CLAUDE.md block pointing agents at the scip-query skills and diff gate, plus an optional git pre-commit backstop | `--git-hook` |
147
149
  | `setup-ci` | Write a GitHub Actions workflow that runs scip-query reindex and diff-gate on pull requests | `--force`<br>`--dry-run` |
148
- | `uninstall` | Remove scip-query-owned skill links, project hooks, and managed agent setup blocks | `--global`<br>`--project`<br>`--dry-run`<br>`--json` |
149
- | `watch` | Watch in the foreground or manage the per-project background refresh service | `--daemon`<br>`--status`<br>`--stop`<br>`--debounce <ms>`<br>`--cooldown <ms>`<br>`--git-poll <ms>`<br>`--idle-timeout <ms>`<br>`--json` |
150
- | `status` | Show index status for this project | `--json`<br>`--capabilities` |
150
+ | `uninstall` | Remove selected scip-query-owned integrations; real removal requires exactly one of --global or --project | `--global`<br>`--project`<br>`--dry-run`<br>`--verbose`<br>`--json`<br>`--result-only`<br>`--compact` |
151
+ | `watch` | Watch in the foreground or manage the per-project background refresh service | `--daemon`<br>`--status`<br>`--stop`<br>`--debounce <ms>`<br>`--cooldown <ms>`<br>`--git-poll <ms>`<br>`--idle-timeout <ms>`<br>`--json`<br>`--result-only`<br>`--compact` |
152
+ | `status` | Show index status for this project | `--capabilities`<br>`--json`<br>`--result-only`<br>`--compact` |
151
153
 
152
154
  <!-- END GENERATED COMMAND REFERENCE -->
153
155
 
@@ -35,21 +35,31 @@ New records conform to
35
35
  They carry:
36
36
 
37
37
  - `kind: "scip-query-suppression"`;
38
- - `schemaVersion: 1`;
38
+ - `schemaVersion: 2`;
39
39
  - the stable `suppressionIdentity`;
40
40
  - producer name/version and creation/update timestamps;
41
- - the existing suppression target and reason fields.
42
-
43
- The discriminator is additive within suppression v1. Older v1 readers permit
44
- unknown properties, so they continue to read newly written records. Current
45
- readers also accept v1 records written before the discriminator was added and
46
- unversioned legacy records. The filename remains the conflict domain:
47
- different suppression identities merge as different paths, while policy
48
- changes to one identity require revision-aware replacement.
49
-
50
- If a future or malformed suppression is omitted, it cannot waive a finding.
51
- `diff-gate` keeps the matching finding unsuppressed and reports incomplete
52
- suppression coverage in JSON, human output, and Stop-hook feedback.
41
+ - the exact suppression target and explanatory reason;
42
+ - a controlled adjudication reason code;
43
+ - inspectable counterevidence, including content hashes for file referents;
44
+ - the policy version, decision provenance, and invalidation conditions.
45
+
46
+ Current readers accept v1 and unversioned records as legacy policy so history
47
+ is not lost. Legacy records do not have enough mechanically checkable evidence
48
+ to authorize automatic acceptance: matching findings remain visible as policy
49
+ escalations until the record is explicitly replaced with a v2 decision.
50
+ Earlier readers classify v2 as unsupported-future and therefore fail closed
51
+ instead of silently treating the new evidence fields as optional. The filename
52
+ remains the conflict domain: different suppression identities merge as
53
+ different paths, while policy changes to one identity require revision-aware
54
+ replacement.
55
+
56
+ If a legacy, future, malformed, expired, or content-invalidated suppression
57
+ cannot pass current policy, it cannot waive a finding. `diff-gate` keeps the
58
+ matching finding unsuppressed and reports incomplete coverage or the exact
59
+ policy-escalation reason in JSON, human output, and Stop-hook feedback. A
60
+ successful gate that did accept one or more v2 decisions reports
61
+ `pass-with-suppressions`, preserving the difference between an ordinary clean
62
+ pass and an adjudicated exception.
53
63
 
54
64
  ## Current outcome-event records
55
65
 
@@ -61,7 +71,12 @@ They retain all semantic event fields at the root and add:
61
71
  - `schemaVersion: 1`;
62
72
  - `eventIdentity`, the JSON tuple of check, finding ID, transition, and
63
73
  observed commit;
64
- - producer name/version.
74
+ - producer name/version;
75
+ - `gateRunId`, the logical diff-gate observation shared by retries;
76
+ - observer kind and whether its authority is repository-writable or protected
77
+ externally;
78
+ - the index/worktree observation receipt;
79
+ - the adjudication policy version on suppressed transitions.
65
80
 
66
81
  Keeping semantic fields at the root lets the immediately prior permissive
67
82
  reader consume new records. Current readers accept both these v1 records and
@@ -70,8 +85,17 @@ the existing unversioned event files.
70
85
  The immutable filename is still a timestamp plus a hash of the complete
71
86
  record bytes. Deduplication does not use that path or producer metadata; it
72
87
  uses the semantic `eventIdentity`. If legacy and current records describe the
73
- same fact, stronger comparison evidence wins and then the earliest timestamp
74
- wins, as before.
88
+ same fact, comparable-base proof wins first, then protected/provenance-bearing
89
+ evidence, and then the earliest timestamp.
90
+
91
+ Observer kind says who originated the record: `local-agent`, `local-human`,
92
+ or `protected-ci`. Observer authority says what conclusion the record can
93
+ support. Both local kinds remain `repository-writable`, because the observer
94
+ can edit the same event and suppression files being measured.
95
+ `protected-external` is accepted only with `protected-ci` records produced by
96
+ a separately controlled evaluator and a gate-run attestation delivered
97
+ outside the writable event directory; a record field cannot attest itself
98
+ and ordinary CLI environment settings cannot mint that authority.
75
99
 
76
100
  ## Partial history is conservative
77
101
 
@@ -80,6 +104,18 @@ wins, as before.
80
104
  coverage counts before any metrics. Metrics use only accepted records and are
81
105
  therefore explicitly partial when `complete` is false.
82
106
 
107
+ `effectiveness` calls the ordinary local ratio
108
+ `resolutionVsSuppressionRate`. It publishes `precision` only when every event
109
+ in the evaluated population claims protected external authority and its
110
+ gate-run ID appears in a separately supplied attestation set. Mixed,
111
+ unattested, repository-writable, and legacy populations remain telemetry and
112
+ carry a null precision field. Provenance gaps, unattested authority claims,
113
+ mixed authority, missing gate-run identity, and anomalous suppression rates
114
+ produce bounded sample reports, not a mandatory per-suppression human queue.
115
+ Git preserves history that is present; deleting an event file cannot be
116
+ detected from the remaining directory, so the command never describes
117
+ repository-local totals as an independent grade.
118
+
83
119
  Cross-HEAD repair verification needs complete committed history to establish
84
120
  the prior lifecycle anchor. If any event candidate is incompatible, scip-query
85
121
  retains every missing local-ledger finding and defers resolution. An omitted
@@ -113,5 +149,6 @@ removing the legacy ledger.
113
149
  - Independent event files should normally keep both sides of a merge.
114
150
  - Do not delete an unsupported record to make a warning disappear. Use a
115
151
  reader that supports it, or deliberately migrate it with verified tooling.
116
- - Rolling back to the immediately prior release remains safe because new
117
- metadata is additive and prior readers ignore unknown fields.
152
+ - Rolling back remains fail-closed: older readers reject v2 suppressions as
153
+ unsupported-future, so they cannot accidentally waive a finding using a
154
+ policy they do not understand.