scip-query 0.19.4 → 0.19.6

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 (400) hide show
  1. package/CHANGELOG.md +75 -1
  2. package/README.md +242 -49
  3. package/dist/augment-vue-worker.js +1 -1
  4. package/dist/{chunk-2YU7I3QO.js → chunk-24QNP7MN.js} +2 -2
  5. package/dist/{chunk-CNKAGUPL.js → chunk-26X7KCJR.js} +2 -2
  6. package/dist/{chunk-GPBBJ5Y4.js → chunk-273W2U4Y.js} +3 -3
  7. package/dist/{chunk-7GXM52MI.js → chunk-2CVXCGL4.js} +2 -2
  8. package/dist/{chunk-ABMYA4TN.js → chunk-2EZSOTSY.js} +2 -2
  9. package/dist/{chunk-HKEHS2AS.js → chunk-2GSQR6YA.js} +2 -2
  10. package/dist/{chunk-FECYOO5O.js → chunk-2OXVAGGT.js} +2 -2
  11. package/dist/chunk-2ZOCHAL2.js +8 -0
  12. package/dist/{chunk-QGXBRIM5.js → chunk-336DC5NJ.js} +2 -2
  13. package/dist/chunk-35SQLYCQ.js +2 -0
  14. package/dist/{chunk-VXQNNXJE.js → chunk-3OIKRYU5.js} +2 -2
  15. package/dist/{chunk-52ZYCAEO.js → chunk-47X75ZKH.js} +2 -2
  16. package/dist/{chunk-NPKYOIFM.js → chunk-4CGVLUDP.js} +2 -2
  17. package/dist/chunk-4RI4BJGT.js +8 -0
  18. package/dist/{chunk-P2PC2WGR.js → chunk-52HQTTPB.js} +2 -2
  19. package/dist/{chunk-YNRNA5LK.js → chunk-5OC3HWP5.js} +2 -2
  20. package/dist/{chunk-STOL2BTL.js → chunk-6XFC7PQ5.js} +2 -2
  21. package/dist/{chunk-J77UIT3I.js → chunk-6XHTISLI.js} +2 -2
  22. package/dist/chunk-6YTSKJJ3.js +2 -0
  23. package/dist/{chunk-BTEE5NZQ.js → chunk-7E3TH5ZN.js} +2 -2
  24. package/dist/{chunk-X6D5IC6I.js → chunk-7LABSJSR.js} +2 -2
  25. package/dist/chunk-7Q6VYYCH.js +2 -0
  26. package/dist/{chunk-FWUUZTIO.js → chunk-A43URCQ3.js} +2 -2
  27. package/dist/chunk-A63U2W3P.js +3 -0
  28. package/dist/{chunk-3MJ5YA4Y.js → chunk-ADFSIJP2.js} +2 -2
  29. package/dist/chunk-AOLE4DYM.js +6 -0
  30. package/dist/chunk-APMMR5Y2.js +2 -0
  31. package/dist/chunk-B5MHCHP3.js +107 -0
  32. package/dist/{chunk-4RSI5EMG.js → chunk-CSTYYXKC.js} +2 -2
  33. package/dist/{chunk-25LPM4DG.js → chunk-CYJM7CYF.js} +2 -2
  34. package/dist/{chunk-S44IULR6.js → chunk-DD5BOU5I.js} +2 -2
  35. package/dist/{chunk-YGAGTIDK.js → chunk-DGMCFMPG.js} +7 -7
  36. package/dist/{chunk-UOAV44HR.js → chunk-E2ZXPB7J.js} +2 -2
  37. package/dist/{chunk-IZKFSVBV.js → chunk-EVOC5I5I.js} +2 -2
  38. package/dist/{chunk-XTX6QHOF.js → chunk-F42A3AKG.js} +2 -2
  39. package/dist/{chunk-Q4IIEGXJ.js → chunk-FHCTEANE.js} +2 -2
  40. package/dist/{chunk-3SVWW4PN.js → chunk-FKGN4A4E.js} +2 -2
  41. package/dist/{chunk-IG7N5ZIK.js → chunk-FQTPPXNA.js} +2 -2
  42. package/dist/{chunk-F6O7AAC3.js → chunk-G4UQL4CP.js} +2 -2
  43. package/dist/chunk-GA64UPMI.js +6 -0
  44. package/dist/{chunk-ZXJYMGD3.js → chunk-GK3GRUJX.js} +2 -2
  45. package/dist/chunk-HEBAY673.js +2 -0
  46. package/dist/chunk-HELS7KFF.js +2 -0
  47. package/dist/{chunk-B5NLK2B3.js → chunk-IPDCSB6N.js} +2 -2
  48. package/dist/{chunk-M7MTH5NR.js → chunk-IYAOX36F.js} +2 -2
  49. package/dist/{chunk-YVVCVR2L.js → chunk-J7VT2CRB.js} +2 -2
  50. package/dist/{chunk-4333ETTV.js → chunk-JELJLXEE.js} +2 -2
  51. package/dist/{chunk-LBMJEAEW.js → chunk-JERWGHQT.js} +2 -2
  52. package/dist/chunk-JJJCO4QC.js +945 -0
  53. package/dist/{chunk-6E7UTQY7.js → chunk-JZNLMHWY.js} +2 -2
  54. package/dist/{chunk-R4FQGQ4X.js → chunk-K42M2KWT.js} +2 -2
  55. package/dist/{chunk-H7UKLTWJ.js → chunk-KLVJABXA.js} +2 -2
  56. package/dist/chunk-KP4KBDVF.js +3 -0
  57. package/dist/{chunk-RV2FQIX3.js → chunk-LMFVTUW2.js} +2 -2
  58. package/dist/chunk-LRTP3DKL.js +3 -0
  59. package/dist/{chunk-U6WNH5GC.js → chunk-MGBJHRFB.js} +2 -2
  60. package/dist/{chunk-QDV6RDCP.js → chunk-MLGTCX56.js} +2 -2
  61. package/dist/{chunk-54HA4ZXH.js → chunk-N3SE646F.js} +2 -2
  62. package/dist/{chunk-KP6XRY5Z.js → chunk-NBRUH7OE.js} +2 -2
  63. package/dist/{chunk-M7AIS73L.js → chunk-NN4ZIRPK.js} +2 -2
  64. package/dist/{chunk-I5RJM53C.js → chunk-NQLSSVOB.js} +2 -2
  65. package/dist/{chunk-4SALD7RU.js → chunk-OBKDTVZ3.js} +2 -2
  66. package/dist/{chunk-GBQ5NYPR.js → chunk-OHWZKLVA.js} +6 -6
  67. package/dist/{chunk-6NSFJYRC.js → chunk-OP3MTFJR.js} +2 -2
  68. package/dist/{chunk-EOOJGLDU.js → chunk-OQ2A4G2G.js} +2 -2
  69. package/dist/{chunk-DLWR3NUU.js → chunk-P6HBYNBE.js} +2 -2
  70. package/dist/{chunk-QVWS2VWZ.js → chunk-PC44K7RF.js} +2 -2
  71. package/dist/{chunk-A2EZV2UM.js → chunk-QBYYWGAT.js} +2 -2
  72. package/dist/{chunk-QRGV2F7L.js → chunk-QHKUY4FW.js} +2 -2
  73. package/dist/chunk-QHRL4LKM.js +2 -0
  74. package/dist/{chunk-I5AWSI2G.js → chunk-QQWOFXNW.js} +2 -2
  75. package/dist/{chunk-WQTAC523.js → chunk-RBFFD4V2.js} +2 -2
  76. package/dist/{chunk-SOAT6NLA.js → chunk-RJHCPSZ7.js} +2 -2
  77. package/dist/{chunk-VGRICIQI.js → chunk-RWRLUZ6U.js} +2 -2
  78. package/dist/{chunk-4T3LTWUS.js → chunk-S2GP3CU3.js} +2 -2
  79. package/dist/{chunk-HEXVUYFQ.js → chunk-SHKZ7OVJ.js} +2 -2
  80. package/dist/{chunk-NSS46APD.js → chunk-TFUU5MQQ.js} +2 -2
  81. package/dist/{chunk-IUFDSKGG.js → chunk-TYQ76QHQ.js} +2 -2
  82. package/dist/{chunk-NRCXJDHL.js → chunk-U5CNPPTZ.js} +2 -2
  83. package/dist/{chunk-MITTUCEH.js → chunk-UQK5CRUK.js} +2 -2
  84. package/dist/{chunk-XLTP42QA.js → chunk-UUJBLG6J.js} +2 -2
  85. package/dist/chunk-UXP636P5.js +144 -0
  86. package/dist/{chunk-64RFXJT5.js → chunk-VEVBIAOJ.js} +6 -6
  87. package/dist/chunk-VKRQDBW5.js +9 -0
  88. package/dist/{chunk-C7NIYIQ4.js → chunk-VOQFGC2W.js} +4 -4
  89. package/dist/{chunk-DZ74OMG6.js → chunk-VP542C25.js} +2 -2
  90. package/dist/{chunk-Q3AFUTGB.js → chunk-WMXRRBII.js} +2 -2
  91. package/dist/{chunk-ZGZUZ7XE.js → chunk-WXAAURU7.js} +2 -2
  92. package/dist/chunk-X3NLZHPA.js +20 -0
  93. package/dist/{chunk-WER3B7MI.js → chunk-XF3KLXN3.js} +2 -2
  94. package/dist/{chunk-NH5ALKPW.js → chunk-XVJ3V7LM.js} +2 -2
  95. package/dist/{chunk-4XTA5OMB.js → chunk-YGQN3XGZ.js} +2 -2
  96. package/dist/{chunk-CFMXJPHH.js → chunk-YHXBD52M.js} +2 -2
  97. package/dist/{chunk-7B3UPBVA.js → chunk-YLVE3SXZ.js} +2 -2
  98. package/dist/{chunk-YIJ7ZAA4.js → chunk-YTUD45PU.js} +2 -2
  99. package/dist/{chunk-VTKGCT3V.js → chunk-YWB2EBNB.js} +2 -2
  100. package/dist/{chunk-UKZBVX4U.js → chunk-Z2LHPIOM.js} +2 -2
  101. package/dist/chunk-Z5QQPJ3U.js +30 -0
  102. package/dist/{chunk-NZL2DBT7.js → chunk-ZLJLE6LK.js} +2 -2
  103. package/dist/{chunk-XYADIZHU.js → chunk-ZTTISZ7J.js} +2 -2
  104. package/dist/cli.js +3 -3
  105. package/dist/command-descriptors-SJDZ7QGR.js +617 -0
  106. package/dist/{config-types-D20KuvvZ.d.ts → config-types-BWQ5xPGI.d.ts} +4 -0
  107. package/dist/{db-G_II8yXU.d.ts → db-B0r1o7Vt.d.ts} +18 -1
  108. package/dist/direct-navigation-HTKOZEOM.js +3 -0
  109. package/dist/{health-oblXYgkF.d.ts → health-CFnlCiTz.d.ts} +1 -1
  110. package/dist/index.d.ts +2 -2
  111. package/dist/index.js +1 -1
  112. package/dist/postinstall.js +1 -1
  113. package/dist/queries/affected.d.ts +2 -2
  114. package/dist/queries/affected.js +1 -1
  115. package/dist/queries/architecture.d.ts +2 -2
  116. package/dist/queries/architecture.js +1 -1
  117. package/dist/queries/bottlenecks.d.ts +2 -2
  118. package/dist/queries/bottlenecks.js +1 -1
  119. package/dist/queries/by-kind.d.ts +2 -2
  120. package/dist/queries/by-kind.js +1 -1
  121. package/dist/queries/call-graph.d.ts +2 -2
  122. package/dist/queries/call-graph.js +1 -1
  123. package/dist/queries/change-surface.d.ts +2 -2
  124. package/dist/queries/change-surface.js +1 -1
  125. package/dist/queries/cleanup-plan.d.ts +2 -2
  126. package/dist/queries/cleanup-plan.js +1 -1
  127. package/dist/queries/co-change.d.ts +2 -2
  128. package/dist/queries/co-change.js +1 -1
  129. package/dist/queries/code.d.ts +2 -2
  130. package/dist/queries/code.js +1 -1
  131. package/dist/queries/complexity-hotspots.d.ts +2 -2
  132. package/dist/queries/complexity-hotspots.js +1 -1
  133. package/dist/queries/complexity.d.ts +2 -2
  134. package/dist/queries/complexity.js +1 -1
  135. package/dist/queries/convergence.d.ts +2 -2
  136. package/dist/queries/convergence.js +1 -1
  137. package/dist/queries/coupling.d.ts +2 -2
  138. package/dist/queries/coupling.js +1 -1
  139. package/dist/queries/cycles.d.ts +2 -2
  140. package/dist/queries/cycles.js +1 -1
  141. package/dist/queries/dataflow.d.ts +2 -2
  142. package/dist/queries/dataflow.js +1 -1
  143. package/dist/queries/dead.d.ts +2 -2
  144. package/dist/queries/dead.js +1 -1
  145. package/dist/queries/decorative-checkers.d.ts +3 -3
  146. package/dist/queries/decorative-checkers.js +1 -1
  147. package/dist/queries/deep-chains.d.ts +2 -2
  148. package/dist/queries/deep-chains.js +1 -1
  149. package/dist/queries/deps.d.ts +2 -2
  150. package/dist/queries/deps.js +1 -1
  151. package/dist/queries/diff-gate.d.ts +30 -2
  152. package/dist/queries/diff-gate.js +1 -1
  153. package/dist/queries/diff-impact.d.ts +2 -2
  154. package/dist/queries/diff-impact.js +1 -1
  155. package/dist/queries/doc-drift.d.ts +2 -2
  156. package/dist/queries/doc-drift.js +1 -1
  157. package/dist/queries/drift.d.ts +2 -2
  158. package/dist/queries/drift.js +1 -1
  159. package/dist/queries/duplicate-bodies.d.ts +2 -2
  160. package/dist/queries/duplicate-bodies.js +1 -1
  161. package/dist/queries/extract-candidates.d.ts +2 -2
  162. package/dist/queries/extract-candidates.js +1 -1
  163. package/dist/queries/fan.d.ts +2 -2
  164. package/dist/queries/fan.js +1 -1
  165. package/dist/queries/files.d.ts +2 -2
  166. package/dist/queries/health.d.ts +3 -3
  167. package/dist/queries/health.js +1 -1
  168. package/dist/queries/hierarchy.d.ts +2 -2
  169. package/dist/queries/hierarchy.js +1 -1
  170. package/dist/queries/hotspots.d.ts +2 -2
  171. package/dist/queries/hotspots.js +1 -1
  172. package/dist/queries/imports.d.ts +2 -2
  173. package/dist/queries/imports.js +1 -1
  174. package/dist/queries/incomplete-migration.d.ts +2 -2
  175. package/dist/queries/incomplete-migration.js +1 -1
  176. package/dist/queries/index.d.ts +17 -3
  177. package/dist/queries/index.js +1 -1
  178. package/dist/queries/isolated.d.ts +2 -2
  179. package/dist/queries/isolated.js +1 -1
  180. package/dist/queries/locality-candidates.d.ts +2 -2
  181. package/dist/queries/locality-candidates.js +1 -1
  182. package/dist/queries/members.d.ts +2 -2
  183. package/dist/queries/members.js +1 -1
  184. package/dist/queries/methods.d.ts +2 -2
  185. package/dist/queries/methods.js +1 -1
  186. package/dist/queries/not-implemented.d.ts +3 -3
  187. package/dist/queries/not-implemented.js +1 -1
  188. package/dist/queries/outline.d.ts +2 -2
  189. package/dist/queries/outline.js +1 -1
  190. package/dist/queries/passthrough-candidates.d.ts +2 -2
  191. package/dist/queries/passthrough-candidates.js +1 -1
  192. package/dist/queries/plan-context.d.ts +2 -2
  193. package/dist/queries/plan-context.js +1 -1
  194. package/dist/queries/react-component-duplicates.d.ts +2 -2
  195. package/dist/queries/react-component-duplicates.js +1 -1
  196. package/dist/queries/react-hook-candidates.d.ts +2 -2
  197. package/dist/queries/react-hook-candidates.js +1 -1
  198. package/dist/queries/react-large-component-pressure.d.ts +2 -2
  199. package/dist/queries/react-large-component-pressure.js +1 -1
  200. package/dist/queries/recent-duplicates.d.ts +2 -2
  201. package/dist/queries/recent-duplicates.js +1 -1
  202. package/dist/queries/redundant-reexports.d.ts +2 -2
  203. package/dist/queries/redundant-reexports.js +1 -1
  204. package/dist/queries/refs.d.ts +2 -2
  205. package/dist/queries/refs.js +1 -1
  206. package/dist/queries/self-audit.d.ts +2 -2
  207. package/dist/queries/self-audit.js +1 -1
  208. package/dist/queries/similar-chains.d.ts +2 -2
  209. package/dist/queries/similar-chains.js +1 -1
  210. package/dist/queries/similar-files.d.ts +2 -2
  211. package/dist/queries/similar-files.js +1 -1
  212. package/dist/queries/similar-signatures.d.ts +2 -2
  213. package/dist/queries/similar-signatures.js +1 -1
  214. package/dist/queries/similar.d.ts +2 -2
  215. package/dist/queries/similar.js +1 -1
  216. package/dist/queries/slice.d.ts +2 -2
  217. package/dist/queries/slice.js +1 -1
  218. package/dist/queries/stale-abstractions.d.ts +2 -2
  219. package/dist/queries/stale-abstractions.js +1 -1
  220. package/dist/queries/stats.d.ts +2 -2
  221. package/dist/queries/stats.js +1 -1
  222. package/dist/queries/surface.d.ts +2 -2
  223. package/dist/queries/surface.js +1 -1
  224. package/dist/queries/symbols.d.ts +2 -2
  225. package/dist/queries/symbols.js +1 -1
  226. package/dist/queries/system.d.ts +2 -2
  227. package/dist/queries/system.js +1 -1
  228. package/dist/queries/test-quality.d.ts +2 -2
  229. package/dist/queries/test-quality.js +1 -1
  230. package/dist/queries/trace.d.ts +2 -2
  231. package/dist/queries/trace.js +1 -1
  232. package/dist/queries/twin-ab.d.ts +3 -3
  233. package/dist/queries/twin-ab.js +1 -1
  234. package/dist/queries/twin-drift.d.ts +2 -2
  235. package/dist/queries/twin-drift.js +1 -1
  236. package/dist/queries/unused-imports.d.ts +2 -2
  237. package/dist/queries/unused-imports.js +1 -1
  238. package/dist/queries/unused-params.d.ts +2 -2
  239. package/dist/queries/unused-params.js +1 -1
  240. package/dist/queries/vue-component-duplicates.d.ts +2 -2
  241. package/dist/queries/vue-component-duplicates.js +1 -1
  242. package/dist/queries/vue-composable-candidates.d.ts +2 -2
  243. package/dist/queries/vue-composable-candidates.js +1 -1
  244. package/dist/queries/vue-large-view-pressure.d.ts +2 -2
  245. package/dist/queries/vue-large-view-pressure.js +1 -1
  246. package/dist/queries/wrapper-candidates.d.ts +2 -2
  247. package/dist/queries/wrapper-candidates.js +1 -1
  248. package/dist/reindex-worker.js +23 -24
  249. package/dist/reindex.d.ts +10 -4
  250. package/dist/reindex.js +33 -38
  251. package/dist/runtime.d.ts +167 -11
  252. package/dist/runtime.js +3 -2
  253. package/dist/rust-semantic-session-server.js +1 -1
  254. package/dist/rust-semantic-session-worker.js +1 -1
  255. package/dist/rust-semantic-worker.js +1 -1
  256. package/dist/{scip-cli-kRpaexVJ.d.ts → scip-cli-DCvnlZCu.d.ts} +5 -1
  257. package/dist/watch-server.js +5 -5
  258. package/docs/AGENT_GUIDE.md +1 -1
  259. package/docs/AI_FAILURE_MODES.md +18 -18
  260. package/docs/API_EVOLUTION.md +71 -0
  261. package/docs/CLI_JSON_OUTPUT.md +83 -0
  262. package/docs/COMMAND_REFERENCE.md +10 -8
  263. package/docs/COMMITTED_RECORD_COMPATIBILITY.md +117 -0
  264. package/docs/CONFIGURATION_WRITE_SAFETY.md +130 -0
  265. package/docs/DETECTOR_GUIDE.md +47 -47
  266. package/docs/DURABILITY.md +103 -0
  267. package/docs/INDEX_GENERATIONS.md +121 -0
  268. package/docs/LOCK_PROTOCOL.md +133 -0
  269. package/docs/MAILBOX_LIFECYCLE.md +197 -0
  270. package/docs/REINDEX_METADATA_COMPATIBILITY.md +84 -0
  271. package/docs/RUST_DURABLE_SESSION_PROTOCOL.md +126 -0
  272. package/docs/TELEMETRY_RETENTION.md +72 -0
  273. package/docs/TIME_SEMANTICS.md +77 -0
  274. package/docs/WATCH_REFRESH_REQUESTS.md +110 -0
  275. package/docs/WINDOWS_SIDECAR_RELEASE.md +298 -0
  276. package/docs/analyzer-validation-ledger.md +24 -23
  277. package/docs/schemas/cli-json-envelope.schema.json +53 -0
  278. package/docs/schemas/npm-release-state.schema.json +146 -0
  279. package/docs/schemas/outcome-event-record.schema.json +39 -0
  280. package/docs/schemas/project-config.schema.json +247 -0
  281. package/docs/schemas/suppression-record.schema.json +31 -0
  282. package/docs/schemas/windows-sidecar-provenance.schema.json +137 -0
  283. package/package.json +15 -5
  284. package/scripts/build-scip-windows.mjs +180 -61
  285. package/scripts/scip-windows-provenance.mjs +364 -0
  286. package/scripts/verify-scip-windows.mjs +29 -0
  287. package/skills/_shared/SKILL.md +91 -242
  288. package/skills/_shared/agents/openai.yaml +1 -1
  289. package/skills/_shared/references/agent-contract-catalog.md +105 -0
  290. package/skills/_shared/references/command-catalog.md +118 -0
  291. package/skills/_shared/references/detector-precision-and-diffgate.md +59 -0
  292. package/skills/_shared/references/evidence-and-dead-code.md +25 -0
  293. package/skills/scip-audit/SKILL.md +76 -0
  294. package/skills/scip-audit/agents/openai.yaml +4 -0
  295. package/skills/scip-audit/references/claims.md +98 -0
  296. package/skills/scip-audit/references/cleanup.md +101 -0
  297. package/skills/scip-audit/references/directory.md +222 -0
  298. package/skills/scip-audit/references/frontend.md +130 -0
  299. package/skills/scip-audit/references/integrity.md +154 -0
  300. package/skills/scip-audit/references/maintainability.md +162 -0
  301. package/skills/scip-audit/references/twin-drift.md +104 -0
  302. package/skills/scip-diagnose/SKILL.md +52 -0
  303. package/skills/scip-diagnose/agents/openai.yaml +4 -0
  304. package/skills/scip-diagnose/references/debug.md +117 -0
  305. package/skills/{scip-probe-reachability/SKILL.md → scip-diagnose/references/probe-reachability.md} +12 -27
  306. package/skills/scip-diagnose/references/root-cause.md +145 -0
  307. package/skills/scip-diagnose/references/triage.md +119 -0
  308. package/skills/scip-explore/SKILL.md +53 -84
  309. package/skills/scip-explore/agents/openai.yaml +2 -2
  310. package/skills/scip-explore/references/diagrams.md +40 -0
  311. package/skills/scip-explore/references/language-playbook.md +49 -0
  312. package/skills/scip-improve/SKILL.md +56 -0
  313. package/skills/scip-improve/agents/openai.yaml +4 -0
  314. package/skills/scip-improve/references/cleanup-batches.md +53 -0
  315. package/skills/scip-improve/references/directory-moves.md +53 -0
  316. package/skills/scip-improve/references/doc-reconcile.md +30 -0
  317. package/skills/scip-improve/references/frontend-extraction.md +39 -0
  318. package/skills/scip-improve/references/maintainability-mechanism.md +43 -0
  319. package/skills/scip-improve/references/twin-drift.md +35 -0
  320. package/skills/scip-plan/SKILL.md +68 -0
  321. package/skills/scip-plan/agents/openai.yaml +4 -0
  322. package/skills/scip-plan/references/api-impact.md +19 -0
  323. package/skills/scip-plan/references/conductor.md +41 -0
  324. package/skills/scip-plan/references/high-assurance.md +43 -0
  325. package/skills/scip-plan/references/hyper-optimization.md +50 -0
  326. package/skills/scip-plan/references/tla-model.md +88 -0
  327. package/skills/scip-query/SKILL.md +52 -97
  328. package/skills/scip-query/agents/openai.yaml +2 -2
  329. package/skills/scip-setup/SKILL.md +65 -176
  330. package/skills/scip-setup/agents/openai.yaml +3 -3
  331. package/skills/scip-setup/references/bootstrap-workflow.md +120 -0
  332. package/skills/scip-setup/references/language-verification.md +61 -0
  333. package/skills/scip-setup/references/lifecycle-commands.md +119 -0
  334. package/skills/scip-setup/references/per-repo-triage.md +24 -0
  335. package/skills/scip-verify/SKILL.md +123 -70
  336. package/skills/scip-verify/agents/openai.yaml +2 -2
  337. package/skills/scip-verify/references/calibrate-detectors.md +170 -0
  338. package/dist/chunk-2CTX5CMX.js +0 -4
  339. package/dist/chunk-2Y373BDD.js +0 -2
  340. package/dist/chunk-C2QSK7E7.js +0 -2
  341. package/dist/chunk-D4U5Q3FT.js +0 -7
  342. package/dist/chunk-K2ERX4UT.js +0 -3
  343. package/dist/chunk-KHE7J5ZN.js +0 -3
  344. package/dist/chunk-L7SPDE73.js +0 -84
  345. package/dist/chunk-LHMNRHGV.js +0 -3
  346. package/dist/chunk-LM72NQ7T.js +0 -3
  347. package/dist/chunk-MSWVMDAH.js +0 -122
  348. package/dist/chunk-NH7WNNQC.js +0 -20
  349. package/dist/chunk-OMPZHGHO.js +0 -2
  350. package/dist/chunk-SVLTAG5O.js +0 -927
  351. package/dist/chunk-U7DSEKOM.js +0 -30
  352. package/dist/chunk-V27BEQJN.js +0 -7
  353. package/dist/chunk-VMNZB6WI.js +0 -4
  354. package/dist/chunk-XBN5VO53.js +0 -2
  355. package/dist/chunk-ZAIILQNP.js +0 -5
  356. package/dist/command-descriptors-MFU4BCJ7.js +0 -612
  357. package/dist/direct-navigation-MRMQFIRB.js +0 -3
  358. package/skills/scip-api-impact/SKILL.md +0 -139
  359. package/skills/scip-api-impact/agents/openai.yaml +0 -4
  360. package/skills/scip-calibrate/SKILL.md +0 -131
  361. package/skills/scip-calibrate/agents/openai.yaml +0 -4
  362. package/skills/scip-claim-audit/SKILL.md +0 -106
  363. package/skills/scip-claim-audit/agents/openai.yaml +0 -4
  364. package/skills/scip-cleanup-audit/SKILL.md +0 -126
  365. package/skills/scip-cleanup-audit/agents/openai.yaml +0 -4
  366. package/skills/scip-cleanup-improve/SKILL.md +0 -84
  367. package/skills/scip-cleanup-improve/agents/openai.yaml +0 -4
  368. package/skills/scip-concrete-plan/SKILL.md +0 -262
  369. package/skills/scip-concrete-plan/agents/openai.yaml +0 -4
  370. package/skills/scip-conductor/SKILL.md +0 -133
  371. package/skills/scip-conductor/agents/openai.yaml +0 -4
  372. package/skills/scip-debug/SKILL.md +0 -130
  373. package/skills/scip-debug/agents/openai.yaml +0 -4
  374. package/skills/scip-diagram/SKILL.md +0 -110
  375. package/skills/scip-diagram/agents/openai.yaml +0 -4
  376. package/skills/scip-directory-architecture/SKILL.md +0 -254
  377. package/skills/scip-directory-architecture/agents/openai.yaml +0 -4
  378. package/skills/scip-doc-reconcile/SKILL.md +0 -89
  379. package/skills/scip-doc-reconcile/agents/openai.yaml +0 -4
  380. package/skills/scip-hyper-optimization/SKILL.md +0 -156
  381. package/skills/scip-hyper-optimization/agents/openai.yaml +0 -4
  382. package/skills/scip-integrity-audit/SKILL.md +0 -152
  383. package/skills/scip-integrity-audit/agents/openai.yaml +0 -4
  384. package/skills/scip-language-playbook/SKILL.md +0 -106
  385. package/skills/scip-language-playbook/agents/openai.yaml +0 -4
  386. package/skills/scip-maintainability/SKILL.md +0 -158
  387. package/skills/scip-maintainability/agents/openai.yaml +0 -4
  388. package/skills/scip-probe-reachability/agents/openai.yaml +0 -4
  389. package/skills/scip-react-maintainability/SKILL.md +0 -101
  390. package/skills/scip-react-maintainability/agents/openai.yaml +0 -4
  391. package/skills/scip-root-cause/SKILL.md +0 -150
  392. package/skills/scip-root-cause/agents/openai.yaml +0 -4
  393. package/skills/scip-tla-model-system/SKILL.md +0 -148
  394. package/skills/scip-tla-model-system/agents/openai.yaml +0 -4
  395. package/skills/scip-triage-issue/SKILL.md +0 -126
  396. package/skills/scip-triage-issue/agents/openai.yaml +0 -4
  397. package/skills/scip-twin-drift/SKILL.md +0 -107
  398. package/skills/scip-twin-drift/agents/openai.yaml +0 -4
  399. package/skills/scip-vue-maintainability/SKILL.md +0 -107
  400. package/skills/scip-vue-maintainability/agents/openai.yaml +0 -4
package/CHANGELOG.md CHANGED
@@ -4,6 +4,80 @@ All notable changes to `scip-query` are documented here. This file starts at 0.1
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.19.6]
8
+
9
+ ### State and process resilience
10
+
11
+ - Index publication now binds SQLite, SCIP, metadata, cursors, semantic
12
+ sessions, and retained generations to one immutable generation identity.
13
+ Shared-cache hydration and lease updates preserve current ownership across
14
+ concurrent writers and crash recovery.
15
+ - Watch/reindex locks, refresh requests, TypeScript and Rust mailboxes,
16
+ evidence counters, suppressions, and outcome records now use explicit
17
+ operation identities, bounded queues, durable publication, conservative
18
+ owner reclamation, retry-safe transitions, and versioned compatibility
19
+ readers.
20
+ - Child processes, workers, verified downloads, and Rust LSP framing have
21
+ finite time, byte, output, and shutdown budgets with typed timeout,
22
+ overflow, cancellation, and recovery outcomes.
23
+
24
+ ### Public and durable contracts
25
+
26
+ - CLI JSON, project configuration, reindex metadata, committed suppression and
27
+ outcome files, and Rust durable-session messages have explicit current,
28
+ legacy, malformed, and future-version policies. Incomplete history and
29
+ partial metadata disclose their reduced capabilities instead of silently
30
+ acting current.
31
+ - The published TypeScript declaration surface is checked across all 72
32
+ export paths and 871 declarations, including transitive declaration chunks
33
+ and a downstream consumer compile fixture.
34
+
35
+ ### Windows sidecar and npm release
36
+
37
+ - The Windows sidecar carries a versioned provenance manifest binding its
38
+ immutable SCIP source commit, pinned Go toolchain, build contract, PE
39
+ machines, sizes, and SHA-256 hashes. Build, sidecar pack, and release all
40
+ reject stale, partial, swapped, or unverifiable binaries.
41
+ - Existing npm versions are accepted only after local pack reports, registry
42
+ metadata, downloaded tarball hashes, package coordinates, and provenance
43
+ bytes agree. Only an explicit npm `E404` authorizes first publication;
44
+ ambiguity and concurrent different-content winners fail closed.
45
+ - `npm run release:npm` owns the complete two-package workflow: test/build/API
46
+ preflight and both packs from one clean, unchanged Git revision precede
47
+ registry mutation, the sidecar publishes and verifies first, the main
48
+ package publishes and verifies last, and a durable schema-versioned local
49
+ state record binds the canonical HTTPS registry, source revision, and exact
50
+ artifacts so every partial state is observable and safely retryable. Direct
51
+ `npm publish` is guarded because it cannot provide that cross-package
52
+ recovery contract.
53
+
54
+ ## [0.19.5]
55
+
56
+ ### Agent evidence and workflows
57
+
58
+ - Every public command now declares an agent-facing contract describing its
59
+ inputs, returned units, evidence class, and default coverage. JSON envelopes
60
+ report whether results are complete, bounded, sampled, or unknown; compact
61
+ summaries preserve the identities agents need without blind line clipping.
62
+ - `refs` supports stable, index-generation-bound pagination with explicit
63
+ totals and continuation cursors. Heavy navigation, planning, and diff-gate
64
+ commands expose compact machine-readable output and concise agent summaries.
65
+ - Claude Code hooks reject unsafe `head`, `tail`, and line-range truncation when
66
+ a compact or paginated alternative exists, and provide one context-window
67
+ reminder to reconsider native text search for relationship and completeness
68
+ questions. Shared guidance is expressed as moment-based evidence gates.
69
+ - The bundled planning workflow now has a short ordinary path and a separate
70
+ high-assurance certificate. Skill descriptions use problem-language trigger
71
+ phrases, and native file reads remain available for literal source facts.
72
+
73
+ ### Architecture and release operations
74
+
75
+ - Architecture enforcement distinguishes production ownership from tests,
76
+ preserves boundary-specific file ceilings, and detects additional coarse
77
+ cycles without weakening the repository's declared layer policy.
78
+ - The main npm publish lifecycle invokes the Windows sidecar publisher directly
79
+ while keeping dry runs and validation paths registry-safe.
80
+
7
81
  ## [0.19.3]
8
82
 
9
83
  ### Performance and operations
@@ -174,7 +248,7 @@ All notable changes to `scip-query` are documented here. This file starts at 0.1
174
248
 
175
249
  ### Fixes (accuracy / false-positive)
176
250
 
177
- - **Three false-dead archetypes fixed.** Symbols consumed only via `import type` across a `tsconfig` path alias are no longer reported dead. pnpm-workspace cross-package consumers are now resolved via a new workspace-package resolver (this also fixed a real bug — `fanInBySymbolId.get(id) === 0` treated an *absent* symbol the same as a zero-reference one, suppressing semantic enrichment broadly, not just for the workspace case). Vue `<script setup>` composable consumers were verified already correct and gained a regression fixture. Where the remaining gap couldn't be closed this release (an ambiguous leaf name across an unresolved barrel re-export hop), the finding is now labeled `unconfirmed` instead of asserted `dead`.
251
+ - **Three false-dead archetypes fixed.** Symbols consumed only via `import type` across a `tsconfig` path alias are no longer reported dead. pnpm-workspace cross-package consumers are now resolved via a new workspace-package resolver (this also fixed a real bug — `fanInBySymbolId.get(id) === 0` treated an _absent_ symbol the same as a zero-reference one, suppressing semantic enrichment broadly, not just for the workspace case). Vue `<script setup>` composable consumers were verified already correct and gained a regression fixture. Where the remaining gap couldn't be closed this release (an ambiguous leaf name across an unresolved barrel re-export hop), the finding is now labeled `unconfirmed` instead of asserted `dead`.
178
252
  - **`diff-gate` fails closed.** A git-diff-unavailable condition (diff too large for the exec buffer, a bad `--base`, or a git error) now exits nonzero having run zero checks, instead of silently passing.
179
253
  - **`doc-drift` epoch-0 timestamp bug fixed.** A doc whose only commit touched it as part of a >50-file bulk sweep now falls back to file mtime instead of being reported as "last changed at the Unix epoch."
180
254
  - **SANY XML export was silently dead code.** `-o <path>` on the SANY invocation meant "offline mode," not "output path" — the real-parser XML export path never actually ran. Fixed the invocation and rewrote the XML grammar parser against real `tla2tools` v1.8.0 output.
package/README.md CHANGED
@@ -34,16 +34,22 @@ Two layers, wired by `scip-query setup`:
34
34
 
35
35
  **Invoked** — the agent routes work through skills, each carrying its own short command list so it never navigates the full CLI:
36
36
 
37
- | Phase | Skill | Commands underneath (also usable directly) |
38
- | --------- | ---------------------------------------------------------------- | ---------------------------------------------------- |
39
- | Orient | `scip-explore` | `system`, `trace`, `plan-context`, `call-graph` |
40
- | Plan | `scip-concrete-plan` (one change) · `scip-conductor` (a program) | `plan-context`, `change-surface`, `co-change` |
41
- | Reuse | (taught in-loop by the planning skills) | `similar`, `duplicate-bodies`, `recent-duplicates` |
42
- | Implement | your agent + the post-change check for the change type | `incomplete-migration`, `unused-params`, `co-change` |
43
- | Verify | `scip-verify` (closeout) + the ambient diff gate | `diff-impact`, `diff-gate`, `health --baseline` |
44
- | Clean up | `scip-cleanup-audit` `scip-cleanup-improve` | `cleanup-plan --verify`, `dead`, `twin-drift` |
45
-
46
- Interrogation lenses go deeper on demand: `scip-integrity-audit` ("is this implementation real?"), `scip-twin-drift`, `scip-claim-audit`, `scip-probe-reachability`, and `scip-maintainability`. The full map with essential differences is in [Bundled skills](#bundled-skills); every command remains directly invocable for humans and scripts.
37
+ | Phase | Skill | Commands underneath (also usable directly) |
38
+ | -------- | ------------------------------------------------ | --------------------------------------------------- |
39
+ | Orient | `scip-explore` | `system`, `trace`, `affected`, `call-graph` |
40
+ | Plan | `scip-plan` | `plan-context`, `change-surface`, `co-change` |
41
+ | Diagnose | `scip-diagnose` | `files`, `trace`, `call-graph`, `outline` |
42
+ | Audit | `scip-audit` | `cleanup-plan --verify`, `dead`, `twin-drift` |
43
+ | Improve | `scip-improve` | `incomplete-migration`, `recent-duplicates` |
44
+ | Verify | `scip-verify` (closeout) + the ambient diff gate | `diff-impact`, `diff-gate`, `health --baseline` |
45
+ | Set up | `scip-setup` | `doctor`, `setup`, `setup-hooks`, `setup-agent` |
46
+
47
+ The consolidated skills retain the former specialist lenses as routed
48
+ scenarios: API impact and formal/performance planning live in `scip-plan`;
49
+ root cause and reachability probes live in `scip-diagnose`; integrity,
50
+ maintainability, claim, framework, directory, and twin-drift review live in
51
+ `scip-audit`; and cleanup or documentation repair lives in `scip-improve`.
52
+ Every command remains directly invocable for humans and scripts.
47
53
 
48
54
  React and Vue repositories get additional framework-aware checks for repeated component/template structure, hook/composable behavior, and large-component or large-view pressure. These extend the same reuse and completion workflow; the core graph, history, planning, cleanup, and diff-gate commands are not frontend-specific.
49
55
 
@@ -69,6 +75,15 @@ For automation, use `scip-query setup --yes` to accept recommended defaults or
69
75
  scope is intentionally managed elsewhere. Or run without a global install:
70
76
  `npx scip-query@latest setup`.
71
77
 
78
+ Every public `--json` response identifies its envelope schema, command result
79
+ schema, and producing package version. See the
80
+ [CLI JSON output contract](docs/CLI_JSON_OUTPUT.md) for the compatibility
81
+ policy, decoder API, and machine-readable schema.
82
+
83
+ Contributors changing exported TypeScript declarations should also follow the
84
+ [public API evolution workflow](docs/API_EVOLUTION.md). Its committed manifest
85
+ makes every package-subpath signature change explicit before release.
86
+
72
87
  ### If npm warns about install scripts
73
88
 
74
89
  On npm setups with script approval enabled (`allow-scripts`), the install prints warnings like
@@ -213,7 +228,7 @@ When verification _fails_, the errors name the exact references the static evide
213
228
  | `co-change-partner` | Historically coupled files that usually change together but are missing from this diff. | Default diff gate. |
214
229
  | `twin-partner` | A changed symbol has a same-(near-)name twin (identical or already-divergent) elsewhere that this diff left untouched. | Default diff gate. Advisory: findings print but never cause a nonzero exit by themselves. |
215
230
  | `coverage-contract` | A configured `coverageContracts` entry (.scipquery.json) drifted: its declared key set no longer matches its ground-truth source. | Default diff gate, only when either side of a configured contract changed. |
216
- | `architecture` | A declared architecture boundary rule has a violation absent from the committed health baseline. | Default diff gate when closed dependency rows, requireCompletePolicy, requireAcyclic, requireResolvedBoundaries, requireMinimalPolicy, maxBoundaryFanOut, global maxBoundaryFiles, per-boundary maxFiles, or testPaths are configured and a baseline exists. |
231
+ | `architecture` | A declared architecture boundary rule has a violation absent from the committed health baseline. | Default diff gate when closed dependency rows, requireCompletePolicy, requireAcyclic, requireResolvedBoundaries, requireMinimalPolicy, maxBoundaryFanOut/maxBoundaryFiles, or testPaths are configured and a baseline exists. |
217
232
  | `doc-reference` | Docs that cite changed files and may need a matching update. Dated snapshot docs (docs.snapshotPaths) are excluded by policy. | Default diff gate. Advisory (21.2) for bare file-mention citations; blocking when the citation has a line anchor or the cited file was deleted/renamed. |
218
233
  | `unused-params` | Fresh trailing parameters or options that no changed body uses. | Default diff gate. |
219
234
  | `new-dead` | Changed production symbols with zero indexed consumers. | Default diff gate. |
@@ -243,6 +258,33 @@ scip-query suppress SQABC123DEF456 --check echo --reason "intentional compatibil
243
258
 
244
259
  This writes one file per suppression under `.scipquery/suppressions/` — commit it with your change. One-file-per-suppression means two branches suppressing different findings merge without conflict; the legacy `suppressions[]` array in `.scipquery.json` is still honored (read-only). Every suppression requires a reason plus either a stable finding id or a `check` (optionally narrowed by `file`). Check+file suppressions are allowed but warn because they waive every matching finding in that file. `diff-gate --json` reports both active and suppressed findings.
245
260
 
261
+ The first suppression for an identity is created exclusively. Repeating the
262
+ same decision is idempotent, but a different reason, expiry, check, or file is
263
+ a policy change and never silently overwrites the existing file. The command
264
+ reports the existing SHA-256 revision:
265
+
266
+ ```text
267
+ error: A different suppression decision already exists at ...
268
+ Current revision: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef.
269
+ ```
270
+
271
+ After reviewing the committed decision, replace exactly that revision:
272
+
273
+ ```bash
274
+ scip-query suppress SQABC123DEF456 --check echo \
275
+ --reason "superseded by a narrower compatibility exception" \
276
+ --replace 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
277
+ ```
278
+
279
+ If another writer changes the record first, the stale replacement is rejected
280
+ and the newer bytes remain intact. New records declare their schema version,
281
+ record kind, stable suppression identity, and writer version. Older
282
+ unversioned and pre-discriminator v1 records remain readable and are upgraded
283
+ only by an explicit replacement. If a malformed or future record cannot be
284
+ used, `diff-gate` reports exact incomplete-coverage counts and keeps findings
285
+ conservatively unsuppressed. The wire schemas and merge rules are documented
286
+ in [`docs/COMMITTED_RECORD_COMPATIBILITY.md`](docs/COMMITTED_RECORD_COMPATIBILITY.md).
287
+
246
288
  **12. Measure whether the gate is earning its keep.** Every completed `diff-gate` run, including JSON and installed Stop-hook runs, writes each finding transition to its own committed `.scipquery/events/*.json` file. Independent branches add independent paths instead of editing one shared ledger file, so ordinary event writes do not create merge conflicts. Each event stores the immutable Git commit used as its comparison base. A finding is a verified fix when it disappears under that same comparison—either directly or after scip-query cleanly replays the original base against a newer committed `HEAD`. Merely committing the finding cannot clear it: if replay still finds it, the outcome stays open; if the worktree is dirty or Git cannot reproduce the base, verification waits. A suppressed finding was noise or an accepted trade-off:
247
289
 
248
290
  ```bash
@@ -255,7 +297,20 @@ echo 14 10 2 1 0 1 83% 0.8
255
297
  new-dead 6 5 0 1 0 0 100% 0.3
256
298
  ```
257
299
 
258
- `precision` is verified fixed ÷ (verified fixed + suppressed). `moved` separates rename churn, while `unverified` is reserved for legacy or otherwise non-comparable resolutions that lack replay proof. Run diff-gate once to record the finding and again after the repair; a pre-commit rerun uses the same base directly, while a clean post-commit run automatically replays the stored base. Filter with `--check <name>`, window with `--since 30d|12w|<ISO date>`, and get machine-readable output with `--json`. Because the event files are committed, the numbers survive re-clones and aggregate across every machine and agent working the repo. Legacy `.scipquery/ledger/events.jsonl` records remain readable and are migrated to individual files on the next gate write. Historical cross-`HEAD` events without stored comparison evidence remain unverified rather than being reclassified speculatively. Standalone health/cleanup commands are not yet outcome-tracked because they do not all expose a complete-scan contract.
300
+ `precision` is verified fixed ÷ (verified fixed + suppressed). `moved` separates rename churn, while `unverified` is reserved for legacy or otherwise non-comparable resolutions that lack replay proof. Run diff-gate once to record the finding and again after the repair; a pre-commit rerun uses the same base directly, while a clean post-commit run automatically replays the stored base. Filter with `--check <name>`, window with `--since 30d|12w|<ISO date>`, and get machine-readable output with `--json`. Because the event files are committed, the numbers survive re-clones and aggregate across every machine and agent working the repo. Current event files carry an additive v1 discriminator, stable semantic identity, and writer version; existing unversioned files remain readable. `effectiveness` reports accepted and omitted record counts when history is partial, and cross-HEAD verification defers fixes rather than trusting an incomplete lifecycle. Legacy `.scipquery/ledger/events.jsonl` records remain readable and are migrated to individual files on the next gate write only when every non-empty line is compatible; otherwise the source ledger is preserved. Historical cross-`HEAD` events without stored comparison evidence remain unverified rather than being reclassified speculatively. Standalone health/cleanup commands are not yet outcome-tracked because they do not all expose a complete-scan contract.
301
+
302
+ The health report also keeps a worktree-local repeat counter in `evidence.db`.
303
+ A logical observation is one completed detector evaluation named by an
304
+ observation ID; unlike a process attempt, a retry of that evaluation reuses the
305
+ same ID. SQLite serializes these observations before deriving their
306
+ transitions. Two different IDs that report the same finding therefore add two
307
+ to `timesShown`, while an exact retry with the same ID and evidence adds
308
+ nothing. Reusing an ID for different evidence is rejected and reported. A
309
+ writer-lock timeout skips the local counter update rather than delaying or
310
+ changing the gate decision, and the next distinct run may try again. The
311
+ dedupe records live as long as that rebuildable `evidence.db`; deleting the
312
+ database resets both the counters and their retry memory. These local counters
313
+ feed detector-precision hints, not the committed `effectiveness` totals above.
259
314
 
260
315
  Before any edit, `plan-context <target>` bundles the structural picture — definitions, references, call graph, blast radius — plus a HISTORY section: churn, fix-commit density, and the files that usually change together with the target ("editing this usually means editing these").
261
316
 
@@ -312,40 +367,35 @@ Heuristic detectors carry guardrails learned from real codebases: published `pac
312
367
 
313
368
  One-line "essential difference" per skill — read this table before the Routes table in `skills/scip-query/SKILL.md` if two names sound alike.
314
369
 
315
- | Skill | Essential difference |
316
- | ----------------------------- | -------------------------------------------------------------------------------------- |
317
- | `scip-query` | Router: dispatches codebase work to the specialist skill below. |
318
- | `scip-explore` | Understand before touching. |
319
- | `scip-concrete-plan` | Specify ONE change so an executor can't guess. |
320
- | `scip-conductor` | Run a multi-phase program (delegate, verify handoffs, pre-registered benchmarks). |
321
- | `scip-debug` | Root-cause a failure. |
322
- | `scip-root-cause` | Diagnose the design flaw behind a family of recurring bugs. |
323
- | `scip-triage-issue` | Package a report into an actionable issue+fix plan. |
324
- | `scip-verify` | Post-change closeout gate. |
325
- | `scip-cleanup-audit` | Rank findings, no edits. |
326
- | `scip-cleanup-improve` | Autonomously fix confirmed findings. |
327
- | `scip-maintainability` | Is this well-organized (scattered concepts, accidental variation)? |
328
- | `scip-integrity-audit` | Is this real (decorative checkers, faked implementations, dead fallback-hidden paths)? |
329
- | `scip-calibrate` | Measure detector precision on a repo before trusting scores or gating anyone. |
330
- | `scip-twin-drift` | Same-name implementations that drifted apart. |
331
- | `scip-claim-audit` | Status words derived vs asserted. |
332
- | `scip-probe-reachability` | Prove parser/AST branches actually fire. |
333
- | `scip-api-impact` | Blast radius before changing public surfaces. |
334
- | `scip-directory-architecture` | Folder/ownership layout. |
335
- | `scip-doc-reconcile` | Docs vs code drift. |
336
- | `scip-diagram` | Visual artifacts. |
337
- | `scip-react-maintainability` | Framework-specific reuse lens (React). |
338
- | `scip-vue-maintainability` | Framework-specific reuse lens (Vue). |
339
- | `scip-language-playbook` | Which commands per language. |
340
- | `scip-hyper-optimization` | Performance campaigns without output changes. |
341
- | `scip-tla-model-system` | Formal models tied to code evidence. |
342
- | `scip-setup` | Adopt or repair scip-query in a repo. |
343
- | `_shared` | Reference loaded by other skills, not user-invoked. |
344
-
345
- The confusable clusters, disambiguated: `scip-debug` (one failure, one minimal fix) vs `scip-root-cause` (a family of recurring bugs traced to a design flaw); `scip-concrete-plan` (one change) vs `scip-conductor` (a program of changes with delegation); `scip-cleanup-audit` (report only) vs `scip-cleanup-improve` (autonomous fixing loop); `scip-verify` (did this specific change land safely) vs `scip-integrity-audit` (does this code actually work at all) vs `scip-maintainability` (is this well organized) vs `scip-twin-drift` (one drifted same-name pair specifically); `scip-directory-architecture` (folder ownership) vs `scip-maintainability` (deeper structural compression). `skills/scip-query/SKILL.md`'s Tie-Breaks section has the full routing logic.
370
+ | Skill | Essential difference |
371
+ | --------------- | ------------------------------------------------------------------------------ |
372
+ | `scip-query` | Router: select the smallest workflow that answers the request. |
373
+ | `scip-explore` | Understand or diagram existing code without changing it. |
374
+ | `scip-plan` | Prove the blast radius and specify one change or a multi-phase program. |
375
+ | `scip-diagnose` | Trace a failure, recurring design flaw, issue, or unreachable branch to cause. |
376
+ | `scip-audit` | Classify integrity, maintainability, drift, framework, and cleanup evidence. |
377
+ | `scip-improve` | Act on confirmed audit or documentation findings and ratchet the result. |
378
+ | `scip-verify` | Test and challenge a finished change before declaring it complete. |
379
+ | `scip-setup` | Adopt or repair scip-query in a repository. |
380
+ | `_shared` | Manual-only command/evidence reference loaded by another workflow when needed. |
381
+
382
+ The important boundary is read-only versus mutating work: `scip-audit`
383
+ classifies current evidence, while `scip-improve` changes confirmed findings.
384
+ `scip-plan` is prospective evidence before implementation; `scip-verify`
385
+ challenges a concrete finished diff. `scip-explore` explains working behavior;
386
+ `scip-diagnose` starts from a failure or contradiction.
346
387
 
347
388
  Project setup writes reviewable checkout-local lifecycle hooks for Codex and Claude Code (`.codex/hooks.json` and `.claude/settings.local.json`). A checkout-local hook is an agent-tool preference whose defining trait is that it applies to one clone rather than expressing team policy. Setup adds both paths to that clone's `.git/info/exclude`, so they do not appear in commits, and refuses to rewrite either path if it is already tracked. `setup-hooks --shared` remains accepted only as a deprecated compatibility flag; it no longer writes `.claude/settings.json`. These hooks add scip-query context at session start, route prompts toward the right skill, and run an advisory Stop-hook wrapper around the diff gate only for that repository. The Stop hook sends feedback to the agent by default instead of blocking; set `SCIP_QUERY_STOP_HOOK_MODE=warn` for a warning-only hook response, or `SCIP_QUERY_STOP_HOOK_MODE=block` to enforce the gate. Set `SCIP_QUERY_SKIP_HOOK_INSTALL=1` or run `scip-query setup --no-hooks` to skip hook installation during setup, and run `scip-query setup-hooks --json` later to repair the current checkout's hooks.
348
389
 
390
+ Setup/configuration writers are conflict-aware. They reread the latest file
391
+ under a short token-owned lock, preserve unknown JSON fields and prose outside
392
+ owned Markdown markers, and publish complete bytes durably. An unrelated
393
+ intervening JSON edit is merged; a stale decision about the same project-config
394
+ field, malformed latest JSON, malformed managed markers, or an edit that wins
395
+ the final revision check produces an explicit conflict and leaves the latest
396
+ file untouched. Reload the file and rerun the command after resolving that
397
+ conflict. See [Configuration and setup write safety](docs/CONFIGURATION_WRITE_SAFETY.md).
398
+
349
399
  For a project, run `scip-query setup`. It enables demand-started automatic
350
400
  indexing unless the project already has an explicit `watch.enabled: false`,
351
401
  starts or reuses the project service, verifies its clean-idle deadline, and
@@ -361,7 +411,7 @@ AGENTS.md/CLAUDE.md guidance. Use
361
411
  the default terminal checklist to accept or decline the recommended automatic
362
412
  indexing action and other project-local changes (`--guided` reopens it
363
413
  explicitly). After setup,
364
- `scip-cleanup-audit` confirms raw signals and `scip-cleanup-improve` keeps
414
+ `scip-audit` confirms raw signals and `scip-improve` keeps
365
415
  fixing the worst confirmed items until no safe confirmed cleanup remains. Use
366
416
  `scip-query setup --git-hook` when you also want a local pre-commit diff gate.
367
417
  CI setup is intentionally separate.
@@ -386,7 +436,24 @@ scip-query tla trace-check specs/queue/Queue.tla --trace traces/run1.json # ch
386
436
  scip-query tla fetch-tools # download the pinned tla2tools.jar into the cache
387
437
  ```
388
438
 
389
- `tla verify` checks the mapping contract against the model text and the indexed code: variable and action referents must resolve to value-like symbols (not types), declared reads/writes are checked against a static scan, and every waiver requires a reason and is counted in the output. At scale, findings are grouped by `(category, modelElement)` with up to 3 exemplars per group by default — pass `--full` to print every finding ungrouped. The `scip-tla-model-system` skill (`scip-query install-skills`) walks the scaffold → verify → instrument → trace-check loop end to end.
439
+ `tla verify` checks the mapping contract against the model text and the indexed code: variable and action referents must resolve to value-like symbols (not types), declared reads/writes are checked against a static scan, and every waiver requires a reason and is counted in the output. At scale, findings are grouped by `(category, modelElement)` with up to 3 exemplars per group by default — pass `--full` to print every finding ungrouped. The `scip-plan` formal-model scenario (`scip-query install-skills`) walks the scaffold → verify → instrument → trace-check loop end to end.
440
+
441
+ `tla fetch-tools` allows five minutes and 256 MiB for the pinned download by
442
+ default. It streams bytes through the SHA-256 verifier instead of buffering the
443
+ response, rejects malformed or oversized `Content-Length`, and enforces the
444
+ same ceiling when the header is absent. Callers for one cache path serialize on
445
+ a token-owned lock and recheck the winner's checksum before fetching. Failed,
446
+ aborted, or competing operations remove only their random-token staging file;
447
+ the previously accepted cache remains available. Successful promotion flushes
448
+ the verified file and its containing directory before acknowledging the new
449
+ cache where the platform supports directory sync.
450
+
451
+ File-backed state uses an explicit visibility-versus-crash-durability
452
+ classification. See [Filesystem Publication and Durability](docs/DURABILITY.md)
453
+ for the guarantees, failure outcomes, Windows limitation, and call-site matrix.
454
+ Process coordination uses one versioned, token-owned format with conservative
455
+ malformed-file recovery; see
456
+ [Process Lock Ownership and Recovery](docs/LOCK_PROTOCOL.md).
390
457
 
391
458
  ## Quick Start
392
459
 
@@ -409,7 +476,18 @@ scip-query health --write-baseline # start the ratchet
409
476
  - `scip` CLI, from [Sourcegraph SCIP releases](https://github.com/sourcegraph/scip/releases)
410
477
  - A language-specific SCIP indexer for your project
411
478
 
412
- On Windows, the `scip` binary is installed automatically from npm: `scip-query-scip-windows` is an os-gated optional dependency (universal package, x64 + arm64) that only Windows installs fetch. Resolution order: `scip` on PATH, then `SCIP_QUERY_SCIP_BIN`, then the sidecar package. Run `scip-query check-deps` for platform-specific install instructions.
479
+ On Windows, the `scip` binary is installed automatically from npm:
480
+ `scip-query-scip-windows` is an OS-gated optional dependency (universal
481
+ package, x64 + ARM64) that only Windows installs fetch. Resolution order:
482
+ `scip` on PATH, then `SCIP_QUERY_SCIP_BIN`, then the sidecar package. Run
483
+ `scip-query check-deps` for platform-specific install instructions. The
484
+ [Windows sidecar release guide](docs/WINDOWS_SIDECAR_RELEASE.md) defines its
485
+ executable provenance, fail-closed build/pack checks, and registry identity
486
+ gate. Release operators can run `npm run verify:scip-windows-registry` for a
487
+ sidecar-only read, or `npm run release:npm:dry-run` for the complete
488
+ main-plus-sidecar preflight and registry reconciliation without publication.
489
+ The publishing command is `npm run release:npm`; direct `npm publish` refuses
490
+ to run because it cannot own the recoverable two-package ordering.
413
491
 
414
492
  | Language | Indexer | Install |
415
493
  | ----------------------------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------- |
@@ -429,6 +507,16 @@ For Python, the executable may be `scip-python`, `scip-python-plus`, or both. `s
429
507
 
430
508
  Vue single-file components are handled through the JavaScript/TypeScript indexer. `scip-query` also extracts the `<script>` or `<script setup>` block so symbol, reference, and import queries cover Vue components alongside regular `.ts` and `.js` files.
431
509
 
510
+ `augment-vue` uses one in-process Volar context by default. Calibrated projects
511
+ can opt into parallel computation with `SCIP_QUERY_AUGMENT_VUE_WORKERS=<count>`.
512
+ The CLI then owns every worker until exit: a timeout or peer failure terminates
513
+ and awaits all unfinished workers before removing their private result
514
+ directory. `SCIP_QUERY_AUGMENT_VUE_WORKER_TIMEOUT_MS` defaults to five minutes,
515
+ and `SCIP_QUERY_AUGMENT_VUE_WORKER_RESULT_MAX_BYTES` defaults to 64 MiB per
516
+ worker. Every result carries its run, worker, and task identities and is
517
+ size-checked before parsing, so a stale, partial, or mismatched result cannot
518
+ enter the deterministic worker-order merge.
519
+
432
520
  `scip-query capabilities` prints project-level readiness plus a per-language matrix for SCIP indexing, source fallback evidence, semantic provider support, cleanup detector support, and cleanup verification coverage. Use it when you need to know whether a finding is graph-backed, semantic, heuristic, or compiler-verified for the language in front of you.
433
521
 
434
522
  ## How It Works
@@ -439,6 +527,21 @@ Vue single-file components are handled through the JavaScript/TypeScript indexer
439
527
 
440
528
  By default, indexes live in `~/.cache/scip-query/projects/<hash>/`, keeping project directories clean. Override paths with `.scipquery.json` or `SCIP_QUERY_*` environment variables. Reindexing writes per-language SCIP shards next to the SQLite index, so a mixed-language repo can reuse unchanged language outputs and rerun only the languages whose source/config inputs changed.
441
529
 
530
+ Each accepted worktree-local index is also stored beneath an immutable
531
+ `.scipquery-generations/<identity>/` directory. An atomic `state.json` pointer
532
+ selects the database, SCIP companion, and metadata as one unit; every
533
+ `ScipDatabase` retains that unit for its lifetime. The familiar top-level
534
+ `index.db`, `index.scip`, and `meta.json` files remain compatibility mirrors,
535
+ but internal queries do not reread them after opening a generation. This keeps
536
+ cursor identities and semantic requests attached to the same rows even during
537
+ a concurrent reindex. The publication, crash, legacy-overlap, and retention
538
+ rules are documented in [Local Index Generations](docs/INDEX_GENERATIONS.md).
539
+
540
+ All `meta.json` consumers share one version decoder and an explicit capability
541
+ matrix. Version 2 remains readable, version 3 is current, and version 4 is a
542
+ reserved unsupported migration boundary. See
543
+ [Reindex Metadata Compatibility](docs/REINDEX_METADATA_COMPATIBILITY.md).
544
+
442
545
  Git worktrees in the same repository also share immutable generations under
443
546
  `~/.cache/scip-query/repositories/<repository-id>/`. A shared generation is a
444
547
  complete index for one exact committed tree, indexing configuration, artifact
@@ -450,6 +553,15 @@ copy-on-write cloning is used when available, with an ordinary copy fallback;
450
553
  hard links are never used. Dirty edits, watcher refreshes, locks, and local
451
554
  `evidence.db` state therefore remain private to the worktree.
452
555
 
556
+ Each worktree lease names the exact shared generation protected from
557
+ collection. Lease publication, liveness touches, and repository cleanup share
558
+ one repository-cache lock. A touch rereads the current lease only after
559
+ acquiring that lock, validates its ownership checksum and current local
560
+ generation, and changes only `lastSeenAt`. If a newer generation was attached,
561
+ the lease was deleted or recreated, or its ownership changed while the touch
562
+ waited, the touch preserves that current state instead of replaying its stale
563
+ observation.
564
+
453
565
  Automatic refresh follows the same boundary. When `watch.enabled` is true,
454
566
  the first watcher-eligible command in each worktree starts or reuses a daemon
455
567
  identified by that checkout's Git worktree ID. A Git worktree ID is a checkout
@@ -472,6 +584,16 @@ shared generation is only a warm starting snapshot; it never implies a shared
472
584
  watcher or shared later writes. A daemon that exits after its configured idle
473
585
  timeout starts warm again when that worktree is next used.
474
586
 
587
+ Command-triggered refresh intent is stored separately from disposable activity
588
+ timestamps. Each accepted demand is an immutable request with a deadline and
589
+ optional idempotency key; the daemon claims pending requests exclusively,
590
+ coalesces them deliberately, and acknowledges them only after the corresponding
591
+ reindex completes. A failed attempt returns its requests to pending, and a
592
+ successor daemon recovers claims left by a crashed owner. `watch --status`
593
+ reports pending, claimed, completed, and expired counts. The complete
594
+ at-least-once and retention contract is documented in
595
+ [Watch Refresh Requests](docs/WATCH_REFRESH_REQUESTS.md).
596
+
475
597
  The primary checkout is only a possible source of a generation, never an
476
598
  authority for a linked worktree. If its local cache already contains
477
599
  uncommitted changes that are absent from a new worktree's `HEAD`, the full
@@ -506,6 +628,26 @@ Historical shadow rows are compact calibration summaries. They rotate at
506
628
  project; the complete latest record remains available for status diagnostics.
507
629
  After acquiring a project's exclusive reindex lock, each reindex also removes
508
630
  staging directories abandoned by interrupted earlier reindexes.
631
+ Watch and watcher-triggered reindex ownership records include the operating
632
+ system process start identity as well as the PID. `watch stop`, daemon
633
+ replacement, and manual preemption verify both values before signaling. A
634
+ legacy record or a platform lookup failure therefore fails closed with an
635
+ explicit recovery error instead of treating a reused PID as the old
636
+ tool-owned process.
637
+
638
+ Finite subprocesses use explicit wall-time and output budgets. Quick binary
639
+ probes default to 10 seconds, Git operations to 30 seconds, isolated analysis
640
+ workers to 180 seconds, installers and index conversion to 300 seconds, and
641
+ language indexers to 600 seconds. Set `SCIP_QUERY_INDEXER_TIMEOUT_MS` to a
642
+ positive integer to override the indexer deadline. Command-specific checker,
643
+ TLA+, benchmark, and Rust semantic budgets continue to use their documented
644
+ options or environment settings. When an asynchronous finite child exceeds
645
+ its deadline or output budget, scip-query drains both streams, sends `TERM`,
646
+ escalates to `KILL` after a one-second grace period only while the recorded
647
+ process identity still matches, and reports completion only after the child
648
+ has closed. Detached watch and semantic services are deliberate exceptions:
649
+ their persisted identity, lease, request deadlines, and stop protocol own
650
+ their lifetime.
509
651
 
510
652
  TypeScript monorepos can opt into project sharding with `indexer.typescript.projectMode: "workspace"`. In that mode, `scip-query` discovers repo-local TypeScript project roots, runs one `scip-typescript` process per project with bounded concurrency, merges the shard protobufs, and still publishes one TypeScript language index. Set `indexer.typescript.projects` to an explicit list of project directories or tsconfig paths when automatic discovery is too broad. When `projects` is set to a non-empty list, it is authoritative: only the listed projects are indexed, automatic discovery does not run, and the repo root is not re-added alongside them (even if the root tsconfig covers subdirectories) — files that are only covered by an excluded root tsconfig (e.g. shared ambient `.d.ts` files) drop out of the index, so pick the list deliberately. An empty or absent `projects` falls back to full discovery, unchanged. Workspace mode also caches each project shard: reindexing after an edit reruns only the changed projects and their dependents (workspace `package.json` dependencies and tsconfig `paths`/`references` targets count as dependencies), serves untouched projects from `language-indexes/typescript-projects/`, and reports every reuse decision in `reindex --json` shard diagnostics. Set `indexerConcurrency` when a repo needs a persistent worker cap; CLI `--indexer-concurrency` and `SCIP_QUERY_INDEXER_CONCURRENCY` still override ad hoc runs.
511
653
  Use `indexer.typescript.pnpmWorkspaces` only with the default single-project mode; workspace mode passes explicit projects instead.
@@ -520,6 +662,8 @@ Clojure projects can pass a project-local `scip-clojure` config file through `.s
520
662
 
521
663
  ```json
522
664
  {
665
+ "$schema": "./node_modules/scip-query/docs/schemas/project-config.schema.json",
666
+ "schemaVersion": 2,
523
667
  "languages": ["clojure"],
524
668
  "indexer": {
525
669
  "clojure": {
@@ -547,6 +691,8 @@ It creates a minimal `.scipquery.json`:
547
691
 
548
692
  ```json
549
693
  {
694
+ "$schema": "./node_modules/scip-query/docs/schemas/project-config.schema.json",
695
+ "schemaVersion": 2,
550
696
  "languages": ["typescript"],
551
697
  "watch": {
552
698
  "enabled": true,
@@ -559,6 +705,17 @@ It creates a minimal `.scipquery.json`:
559
705
  }
560
706
  ```
561
707
 
708
+ `schemaVersion` identifies the meaning of the persisted fields. Version 2 is
709
+ the current format. The CLI reads both unversioned/explicit-v1 legacy files
710
+ and version 2. A setup command migrates a legacy file on its next authorized
711
+ config write, preserving fields it does not own. An unsupported future
712
+ version or malformed discriminator fails before any option is used and is
713
+ left byte-for-byte unchanged. `$schema` points editors at the JSON Schema
714
+ bundled with the installed package.
715
+
716
+ Creation is exclusive: if another process creates `.scipquery.json` first,
717
+ `init` preserves that complete file rather than replacing it.
718
+
562
719
  Add optional fields such as `indexerConcurrency`, `indexer`, `entryRoots`,
563
720
  `declaredCouplings`, and `suppressions` only when the project needs them.
564
721
 
@@ -571,18 +728,47 @@ background service. Relevant file/Git activity keeps it alive; it exits after
571
728
  timeout to `0` to keep it running. `scip-query watch` still provides foreground
572
729
  mode, while `watch --daemon`, `watch --status`, and `watch --stop` expose the
573
730
  background lifecycle. Both modes share one project lock, so only one can own an
574
- index cache.
731
+ index cache. Stopping is an asynchronous drain: the watcher first rejects new
732
+ refreshes, continuously consumes a bounded tail of the active worker's output,
733
+ closes every source subscription, and waits for the worker to exit after
734
+ `TERM`/`KILL` escalation before it removes service state or releases the lock.
735
+ `watch --status` reports `Stopping safely` while that work is in progress. If a
736
+ subscription cannot close or worker exit cannot be established, the service
737
+ keeps an explicit degraded draining record and its ownership files instead of
738
+ advertising a clean stop; the reported reason is the recovery evidence.
739
+ Elapsed waits and idle control use a process-local monotonic clock; shared
740
+ heartbeats remain civil-time diagnostics and never authorize replacement or a
741
+ process signal by age alone. See [Time Semantics](docs/TIME_SEMANTICS.md).
575
742
 
576
743
  The same demand-started service lazily owns TypeScript compiler Projects after
577
744
  the first command that needs ts-morph semantics. Separate CLI processes reuse
578
- that session through a repository-local atomic mailbox; source-only index
745
+ that session through a repository-local bounded mailbox; source-only index
579
746
  generations refresh the existing Projects, while configuration or uncertain
580
747
  changes replace them. `watch --status` reports Project/session/request counts.
748
+ Current TypeScript and durable Rust mailbox operations use stable
749
+ content-derived identities, pending/inflight/response states, atomic
750
+ owner-expiring claims, retained idempotent completions, FIFO enqueue ordering,
751
+ typed item/byte backpressure, bounded cleanup, and pressure telemetry. Client
752
+ timeout or exit no longer deletes shared work; a service crash before response
753
+ is reclaimable, while a response published before a crash prevents
754
+ re-execution. The precise state machine, default limits, legacy overlap, and
755
+ failure matrix are documented in
756
+ [`docs/MAILBOX_LIFECYCLE.md`](docs/MAILBOX_LIFECYCLE.md).
757
+ Rust v3 additionally binds every accepted response to its request ID,
758
+ operation ID, mailbox-session identity, and authoritative absolute deadline;
759
+ its old/current/future compatibility matrix is in
760
+ [`docs/RUST_DURABLE_SESSION_PROTOCOL.md`](docs/RUST_DURABLE_SESSION_PROTOCOL.md).
581
761
  It also reports a rolling 24-hour reindex activity summary: rebuilt, reused,
582
762
  failed, and freshness-proven suppressed refreshes plus estimated logical output
583
763
  bytes. The estimate counts scip-query artifacts emitted by rebuilt refreshes;
584
764
  it is not a measurement of physical SSD writes. The underlying
585
- `reindex-activity.jsonl` history uses two bounded 1 MiB segments.
765
+ `reindex-activity.jsonl` history uses two bounded 1 MiB segments. Append,
766
+ rotation, and retained-set reads share a process-instance lock; incomplete
767
+ crash tails are trimmed or ignored without deleting earlier complete lines.
768
+ These observations are process-visible rather than crash-durable. See
769
+ [`docs/TELEMETRY_RETENTION.md`](docs/TELEMETRY_RETENTION.md).
770
+ The refresh-request counters reported beside it describe durable demand
771
+ admission and processing state, not reindex frequency.
586
772
  If the service is stopped, incompatible, busy beyond its bound, or returns an
587
773
  invalid response, the command falls back to the existing in-process ts-morph
588
774
  provider.
@@ -592,6 +778,12 @@ session by default. It remains stopped until a Rust semantic request needs it,
592
778
  exits after its clean idle period, and automatically falls back to the
593
779
  per-command worker on helper/readiness/timeout/request failure. Set
594
780
  `SCIP_RUST_SEMANTIC_DURABLE_SESSION=0` for an explicit worker-only opt-out.
781
+ The LSP transport accepts at most a 16 KiB response header and a 64 MiB JSON
782
+ message by default, with a 64 KiB header ceiling and a 256 MiB combined
783
+ wire-buffer ceiling even for programmatic overrides. Missing, invalid,
784
+ duplicate, unsafe, or oversized `Content-Length` framing kills that transport
785
+ once, clears its retained bytes, and fails all outstanding semantic/readiness
786
+ work so the normal worker or graph/source fallback can take over.
595
787
 
596
788
  Use `declaredCouplings` for files that intentionally form one maintenance unit.
597
789
  These pairs are treated as structurally linked by `co-change` and health, while
@@ -639,6 +831,7 @@ Query results are filtered through the project's `.gitignore`. If none exists, c
639
831
  - [Detector Guide](docs/DETECTOR_GUIDE.md): what each detector measures, the differences between the confusable ones, and which check to run after which kind of change.
640
832
  - [Agent Guide](docs/AGENT_GUIDE.md): goal-oriented workflows for tracing, planning, cleanup, quality checks, and change verification.
641
833
  - [Command Reference](docs/COMMAND_REFERENCE.md): generated command syntax, descriptions, and options.
834
+ - [CLI JSON output contract](docs/CLI_JSON_OUTPUT.md): versioned envelopes, compatibility rules, and schema.
642
835
  - [Programmatic API](docs/API.md): using the query functions from TypeScript.
643
836
  - [Historical plans](https://github.com/PlunderStruck/scip-query/tree/main/docs/plans): implementation notes and completed cleanup plans.
644
837
 
@@ -1,2 +1,2 @@
1
- import{c as t}from"./chunk-64RFXJT5.js";import"./chunk-C7NIYIQ4.js";import{writeFileSync as o}from"fs";import{workerData as s}from"worker_threads";var e=s;try{let r=t({projectRoot:e.projectRoot,dbPath:e.dbPath,tsconfig:e.tsconfig,vueFiles:e.vueFiles,tasks:e.tasks});o(e.resultPath,JSON.stringify({ok:!0,result:r}))}catch(r){o(e.resultPath,JSON.stringify({ok:!1,error:r instanceof Error?r.message:String(r)}))}finally{let r=new Int32Array(e.sharedBuffer);Atomics.add(r,0,1),Atomics.notify(r,0)}
1
+ import{c as t}from"./chunk-VEVBIAOJ.js";import"./chunk-VOQFGC2W.js";import{writeFileSync as s}from"fs";import{workerData as o}from"worker_threads";var r=o;try{let e=t({projectRoot:r.projectRoot,dbPath:r.dbPath,tsconfig:r.tsconfig,vueFiles:r.vueFiles,tasks:r.tasks});s(r.resultPath,JSON.stringify({version:1,runId:r.runId,workerId:r.workerId,taskIds:r.taskIds,ok:!0,result:e}))}catch(e){s(r.resultPath,JSON.stringify({version:1,runId:r.runId,workerId:r.workerId,taskIds:r.taskIds,ok:!1,error:e instanceof Error?e.message:String(e)}))}
2
2
  //# sourceMappingURL=augment-vue-worker.js.map
@@ -1,2 +1,2 @@
1
- import{a as f,b as m}from"./chunk-QZ4JVECJ.js";import{a as u}from"./chunk-X6D5IC6I.js";import{B as g,E as d}from"./chunk-YGAGTIDK.js";import{y as l}from"./chunk-L7SPDE73.js";import{readFileSync as E,readdirSync as h}from"fs";import{basename as k,join as c}from"path";function S(t,e,r={}){let a=new Set(t),n=new Set(e),o=[...n].filter(i=>!a.has(i)).sort(),s=r.allowExtra?[]:[...a].filter(i=>!n.has(i)).sort();return{missing:o,extra:s}}function b(t,e){let r=N(t,e.file,e.keys);if(!r.ok)return{name:e.name,file:e.file,status:"unavailable",missing:[],extra:[],unavailableReason:r.reason};let a=L(t.config.projectRoot,e.mustEqual),n=S(r.keys,a,{allowExtra:e.allowExtra??!1}),o=n.missing.length>0||n.extra.length>0?"violated":"ok";return{name:e.name,file:e.file,status:o,missing:n.missing,extra:n.extra}}function O(t,e){return e.map(r=>b(t,r))}function G(t,e){if(e.has(t.file))return!0;let r=t.mustEqual;switch(r.type){case"top-level-dirs":return[...e].some(a=>a===r.path||a.startsWith(`${r.path}/`));case"file-glob":return[...e].some(a=>f(r.pattern,a));case"registered-commands":return e.has("docs/COMMAND_REFERENCE.md");case"builtin-skills":return[...e].some(a=>a.startsWith("skills/"))}}function I(t){if(t.status==="unavailable")return`[coverage-contract] ${t.name}: DISCLOSED \u2014 could not evaluate (${t.unavailableReason})`;let e=[];return t.missing.length>0&&e.push(`missing ${t.missing.join(", ")}`),t.extra.length>0&&e.push(`extra ${t.extra.join(", ")}`),`[coverage-contract] ${t.name}: ${e.join("; ")}`}function N(t,e,r){return r.type==="markdown-list"?T(t,e,r.marker):R(t,e,r)}function R(t,e,r){if(!l(t,e))return{ok:!1,reason:`file not found: ${e}`};let n=g(e);if(!n)return{ok:!1,reason:`unsupported file type for ${r.type} extraction: ${e}`};let o=d(t,e);if(!o)return{ok:!1,reason:`tree-sitter parser unavailable for ${n} (${e}) \u2014 contract skipped, not silently passed`,disclosedUnavailable:{language:n,reason:"parser-unavailable"}};let s=r.type==="object-literal-keys"?D(o,r.identifier):w(o,r.identifier);return s===null?{ok:!1,reason:`no ${r.type==="object-literal-keys"?"object literal":"string array"} named "${r.identifier}" found in ${e}`}:{ok:!0,keys:s}}function y(t){let e=t.childForFieldName("value");return e?e.type==="as_expression"||e.type==="satisfies_expression"?e.namedChild(0):e:null}function D(t,e){for(let r of t.rootNode.descendantsOfType("variable_declarator")){if(r.childForFieldName("name")?.text!==e)continue;let n=y(r);if(n?.type==="object")return $(n)}return null}function $(t){let e=new Set;for(let r of t.namedChildren)if(r.type==="pair"){let a=r.childForFieldName("key");a&&e.add(C(a.text))}else r.type==="shorthand_property_identifier"&&e.add(r.text);return[...e].sort()}function w(t,e){for(let r of t.rootNode.descendantsOfType("variable_declarator")){if(r.childForFieldName("name")?.text!==e)continue;let n=y(r);if(n?.type!=="array")continue;let o=new Set;for(let s of n.namedChildren)s.type==="string"&&o.add(C(s.text));return[...o].sort()}return null}function C(t){return t.length>=2&&(t[0]==="'"&&t.endsWith("'")||t[0]==='"'&&t.endsWith('"'))?t.slice(1,-1):t}function T(t,e,r){let a=l(t,e);if(!a)return{ok:!1,reason:`file not found: ${e}`};let n=v(a,r);return n===null?{ok:!1,reason:`no <!-- BEGIN GENERATED ${r} --> ... <!-- END GENERATED ${r} --> block in ${e}`}:{ok:!0,keys:x(n)}}function v(t,e){let r=u(e),n=new RegExp(`<!--\\s*BEGIN GENERATED ${r}\\s*-->([\\s\\S]*?)<!--\\s*END GENERATED ${r}\\s*-->`).exec(t);return n?n[1]:null}function x(t){let e=new Set;for(let r of t.matchAll(/`([a-z][a-z0-9-]*)`/g))e.add(r[1]);for(let r of t.matchAll(/\[([a-z][a-z0-9-]*)\]\([^)]*\)/g))e.add(r[1]);return[...e].sort()}function L(t,e){switch(e.type){case"top-level-dirs":return p(c(t,e.path));case"file-glob":return[...new Set(m(t,e.pattern).map(r=>k(r)))].sort();case"registered-commands":return A(t);case"builtin-skills":return p(c(t,"skills"))}}function p(t){let e;try{e=h(t,{withFileTypes:!0})}catch{return[]}return e.filter(r=>r.isDirectory()&&!r.name.startsWith(".")).map(r=>r.name).sort()}function A(t){let e;try{e=E(c(t,"docs/COMMAND_REFERENCE.md"),"utf-8")}catch{return[]}let r=v(e,"COMMAND REFERENCE");return r?x(r):[]}var z={dead:{minLoc:3,skipBarrels:!0,deadCodeOnly:!0},isolated:{minLoc:3},similar:{minSimilarity:.6,limit:50,minCallees:4},duplicateBodies:{maxLoc:15,limit:50},extract:{minLoc:15,minCallees:5,limit:50},wrappers:{maxLoc:15,limit:50},passthroughs:{maxLoc:15,limit:50},stale:{minLoc:3,limit:50},drift:{},twinDrift:{minSimilarity:.3}};export{b as a,O as b,G as c,I as d,z as e};
2
- //# sourceMappingURL=chunk-2YU7I3QO.js.map
1
+ import{a as f,b as m}from"./chunk-QZ4JVECJ.js";import{a as u}from"./chunk-7LABSJSR.js";import{B as g,E as d}from"./chunk-DGMCFMPG.js";import{H as l}from"./chunk-B5MHCHP3.js";import{readFileSync as E,readdirSync as h}from"fs";import{basename as k,join as c}from"path";function S(t,e,r={}){let a=new Set(t),n=new Set(e),o=[...n].filter(i=>!a.has(i)).sort(),s=r.allowExtra?[]:[...a].filter(i=>!n.has(i)).sort();return{missing:o,extra:s}}function b(t,e){let r=N(t,e.file,e.keys);if(!r.ok)return{name:e.name,file:e.file,status:"unavailable",missing:[],extra:[],unavailableReason:r.reason};let a=L(t.config.projectRoot,e.mustEqual),n=S(r.keys,a,{allowExtra:e.allowExtra??!1}),o=n.missing.length>0||n.extra.length>0?"violated":"ok";return{name:e.name,file:e.file,status:o,missing:n.missing,extra:n.extra}}function O(t,e){return e.map(r=>b(t,r))}function G(t,e){if(e.has(t.file))return!0;let r=t.mustEqual;switch(r.type){case"top-level-dirs":return[...e].some(a=>a===r.path||a.startsWith(`${r.path}/`));case"file-glob":return[...e].some(a=>f(r.pattern,a));case"registered-commands":return e.has("docs/COMMAND_REFERENCE.md");case"builtin-skills":return[...e].some(a=>a.startsWith("skills/"))}}function I(t){if(t.status==="unavailable")return`[coverage-contract] ${t.name}: DISCLOSED \u2014 could not evaluate (${t.unavailableReason})`;let e=[];return t.missing.length>0&&e.push(`missing ${t.missing.join(", ")}`),t.extra.length>0&&e.push(`extra ${t.extra.join(", ")}`),`[coverage-contract] ${t.name}: ${e.join("; ")}`}function N(t,e,r){return r.type==="markdown-list"?T(t,e,r.marker):R(t,e,r)}function R(t,e,r){if(!l(t,e))return{ok:!1,reason:`file not found: ${e}`};let n=g(e);if(!n)return{ok:!1,reason:`unsupported file type for ${r.type} extraction: ${e}`};let o=d(t,e);if(!o)return{ok:!1,reason:`tree-sitter parser unavailable for ${n} (${e}) \u2014 contract skipped, not silently passed`,disclosedUnavailable:{language:n,reason:"parser-unavailable"}};let s=r.type==="object-literal-keys"?D(o,r.identifier):w(o,r.identifier);return s===null?{ok:!1,reason:`no ${r.type==="object-literal-keys"?"object literal":"string array"} named "${r.identifier}" found in ${e}`}:{ok:!0,keys:s}}function y(t){let e=t.childForFieldName("value");return e?e.type==="as_expression"||e.type==="satisfies_expression"?e.namedChild(0):e:null}function D(t,e){for(let r of t.rootNode.descendantsOfType("variable_declarator")){if(r.childForFieldName("name")?.text!==e)continue;let n=y(r);if(n?.type==="object")return $(n)}return null}function $(t){let e=new Set;for(let r of t.namedChildren)if(r.type==="pair"){let a=r.childForFieldName("key");a&&e.add(C(a.text))}else r.type==="shorthand_property_identifier"&&e.add(r.text);return[...e].sort()}function w(t,e){for(let r of t.rootNode.descendantsOfType("variable_declarator")){if(r.childForFieldName("name")?.text!==e)continue;let n=y(r);if(n?.type!=="array")continue;let o=new Set;for(let s of n.namedChildren)s.type==="string"&&o.add(C(s.text));return[...o].sort()}return null}function C(t){return t.length>=2&&(t[0]==="'"&&t.endsWith("'")||t[0]==='"'&&t.endsWith('"'))?t.slice(1,-1):t}function T(t,e,r){let a=l(t,e);if(!a)return{ok:!1,reason:`file not found: ${e}`};let n=v(a,r);return n===null?{ok:!1,reason:`no <!-- BEGIN GENERATED ${r} --> ... <!-- END GENERATED ${r} --> block in ${e}`}:{ok:!0,keys:x(n)}}function v(t,e){let r=u(e),n=new RegExp(`<!--\\s*BEGIN GENERATED ${r}\\s*-->([\\s\\S]*?)<!--\\s*END GENERATED ${r}\\s*-->`).exec(t);return n?n[1]:null}function x(t){let e=new Set;for(let r of t.matchAll(/`([a-z][a-z0-9-]*)`/g))e.add(r[1]);for(let r of t.matchAll(/\[([a-z][a-z0-9-]*)\]\([^)]*\)/g))e.add(r[1]);return[...e].sort()}function L(t,e){switch(e.type){case"top-level-dirs":return p(c(t,e.path));case"file-glob":return[...new Set(m(t,e.pattern).map(r=>k(r)))].sort();case"registered-commands":return A(t);case"builtin-skills":return p(c(t,"skills"))}}function p(t){let e;try{e=h(t,{withFileTypes:!0})}catch{return[]}return e.filter(r=>r.isDirectory()&&!r.name.startsWith(".")).map(r=>r.name).sort()}function A(t){let e;try{e=E(c(t,"docs/COMMAND_REFERENCE.md"),"utf-8")}catch{return[]}let r=v(e,"COMMAND REFERENCE");return r?x(r):[]}var z={dead:{minLoc:3,skipBarrels:!0,deadCodeOnly:!0},isolated:{minLoc:3},similar:{minSimilarity:.6,limit:50,minCallees:4},duplicateBodies:{maxLoc:15,limit:50},extract:{minLoc:15,minCallees:5,limit:50},wrappers:{maxLoc:15,limit:50},passthroughs:{maxLoc:15,limit:50},stale:{minLoc:3,limit:50},drift:{},twinDrift:{minSimilarity:.3}};export{b as a,O as b,G as c,I as d,z as e};
2
+ //# sourceMappingURL=chunk-24QNP7MN.js.map