scip-query 0.19.5 → 0.19.8

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 (421) hide show
  1. package/CHANGELOG.md +85 -1
  2. package/README.md +259 -53
  3. package/dist/augment-vue-worker.js +1 -1
  4. package/dist/chunk-2465DLHK.js +3 -0
  5. package/dist/{chunk-7GXM52MI.js → chunk-24GTWJ3N.js} +2 -2
  6. package/dist/{chunk-NH5ALKPW.js → chunk-2SNGN6U4.js} +2 -2
  7. package/dist/{chunk-3SVWW4PN.js → chunk-2U3OLUNJ.js} +2 -2
  8. package/dist/{chunk-XLTP42QA.js → chunk-33KUO7CG.js} +2 -2
  9. package/dist/{chunk-54HA4ZXH.js → chunk-33XTHFKR.js} +2 -2
  10. package/dist/{chunk-ZGZUZ7XE.js → chunk-3EDFLQ6A.js} +2 -2
  11. package/dist/chunk-3ZSJ3PWF.js +16 -0
  12. package/dist/{chunk-F6O7AAC3.js → chunk-43KC6EQZ.js} +2 -2
  13. package/dist/{chunk-I5RJM53C.js → chunk-464PLI5O.js} +2 -2
  14. package/dist/chunk-46XGSFNI.js +2 -0
  15. package/dist/{chunk-M7AIS73L.js → chunk-47BU5Z4T.js} +2 -2
  16. package/dist/chunk-4BV4QAZJ.js +5 -0
  17. package/dist/chunk-4YTUWQ6M.js +18 -0
  18. package/dist/{chunk-RV2FQIX3.js → chunk-5ML2BNRH.js} +2 -2
  19. package/dist/{chunk-6NSFJYRC.js → chunk-5YLUDDAF.js} +2 -2
  20. package/dist/chunk-67QRR5YC.js +6 -0
  21. package/dist/{chunk-GPBBJ5Y4.js → chunk-6GXYN7YA.js} +3 -3
  22. package/dist/{chunk-4333ETTV.js → chunk-6M7RONVB.js} +2 -2
  23. package/dist/chunk-6YTSKJJ3.js +2 -0
  24. package/dist/{chunk-QDV6RDCP.js → chunk-7FT5Y65S.js} +2 -2
  25. package/dist/{chunk-XTX6QHOF.js → chunk-7KYNAMMH.js} +2 -2
  26. package/dist/{chunk-DZ74OMG6.js → chunk-7LSVMFX7.js} +2 -2
  27. package/dist/{chunk-VTKGCT3V.js → chunk-7QHY3H7P.js} +2 -2
  28. package/dist/{chunk-MITTUCEH.js → chunk-7RAG65VK.js} +2 -2
  29. package/dist/{chunk-25LPM4DG.js → chunk-7SWJEWJF.js} +2 -2
  30. package/dist/{chunk-52ZYCAEO.js → chunk-7VCOXZH3.js} +2 -2
  31. package/dist/chunk-A2TNXAXO.js +8 -0
  32. package/dist/{chunk-IUFDSKGG.js → chunk-A3QXWFBK.js} +2 -2
  33. package/dist/{chunk-4T3LTWUS.js → chunk-AA4UWRNL.js} +2 -2
  34. package/dist/{chunk-4SALD7RU.js → chunk-ACAM6O5R.js} +2 -2
  35. package/dist/chunk-APMMR5Y2.js +2 -0
  36. package/dist/chunk-AQOFWNQJ.js +1 -0
  37. package/dist/chunk-AZFUMCQB.js +2 -0
  38. package/dist/{chunk-M7MTH5NR.js → chunk-BDOIKGDI.js} +2 -2
  39. package/dist/{chunk-BTEE5NZQ.js → chunk-BNXICU42.js} +2 -2
  40. package/dist/chunk-C5Q44Q5D.js +3 -0
  41. package/dist/{chunk-EOOJGLDU.js → chunk-CTF2GDEX.js} +2 -2
  42. package/dist/chunk-DHEQMPLW.js +2 -0
  43. package/dist/{chunk-IZKFSVBV.js → chunk-DQBCO2UY.js} +2 -2
  44. package/dist/{chunk-7B3UPBVA.js → chunk-DQGSM7RZ.js} +2 -2
  45. package/dist/chunk-E2LAW7SL.js +30 -0
  46. package/dist/chunk-E3HYEQO7.js +2 -0
  47. package/dist/chunk-E4NFOAD4.js +6 -0
  48. package/dist/chunk-E5HNT4X2.js +3 -0
  49. package/dist/{chunk-J77UIT3I.js → chunk-ELLMY7XJ.js} +2 -2
  50. package/dist/chunk-FD3HFKXR.js +5 -0
  51. package/dist/{chunk-SOAT6NLA.js → chunk-FIJCV235.js} +2 -2
  52. package/dist/{chunk-H7UKLTWJ.js → chunk-FJ5UDTQF.js} +2 -2
  53. package/dist/{chunk-HEXVUYFQ.js → chunk-GHKEJTCE.js} +2 -2
  54. package/dist/{chunk-LBMJEAEW.js → chunk-GLZTVKAB.js} +3 -3
  55. package/dist/{chunk-FWUUZTIO.js → chunk-GNC4JVAN.js} +2 -2
  56. package/dist/chunk-HIB452NU.js +949 -0
  57. package/dist/{chunk-NRCXJDHL.js → chunk-HZYDQPNY.js} +2 -2
  58. package/dist/chunk-IF6FP6B2.js +66 -0
  59. package/dist/{chunk-4RSI5EMG.js → chunk-JAY7YWS3.js} +2 -2
  60. package/dist/{chunk-STOL2BTL.js → chunk-JHF3E4YM.js} +2 -2
  61. package/dist/chunk-JORHF5AL.js +108 -0
  62. package/dist/{chunk-A2EZV2UM.js → chunk-K2WO7XY7.js} +2 -2
  63. package/dist/chunk-KFZNKUNT.js +2 -0
  64. package/dist/{chunk-YVVCVR2L.js → chunk-KJ2IIBZN.js} +2 -2
  65. package/dist/{chunk-QGXBRIM5.js → chunk-KKME5ZAI.js} +2 -2
  66. package/dist/chunk-KSGTULOS.js +9 -0
  67. package/dist/{chunk-UOAV44HR.js → chunk-KXDJAG4N.js} +3 -3
  68. package/dist/{chunk-UKZBVX4U.js → chunk-L4S2A7BV.js} +2 -2
  69. package/dist/chunk-LP3ARJKF.js +8 -0
  70. package/dist/chunk-LSOR3LQG.js +3 -0
  71. package/dist/{chunk-Q4IIEGXJ.js → chunk-MLFZP76A.js} +2 -2
  72. package/dist/{chunk-WQTAC523.js → chunk-MNSTUIDD.js} +2 -2
  73. package/dist/{chunk-VXQNNXJE.js → chunk-MSBDMFER.js} +2 -2
  74. package/dist/{chunk-X6D5IC6I.js → chunk-MZZBAITE.js} +5 -5
  75. package/dist/{chunk-I5AWSI2G.js → chunk-NE3TZUCI.js} +2 -2
  76. package/dist/{chunk-6E7UTQY7.js → chunk-NTUMF2X3.js} +2 -2
  77. package/dist/{chunk-S44IULR6.js → chunk-O23I56NA.js} +2 -2
  78. package/dist/{chunk-CFMXJPHH.js → chunk-O3O4XXO6.js} +2 -2
  79. package/dist/{chunk-IG7N5ZIK.js → chunk-OUBAF226.js} +2 -2
  80. package/dist/chunk-P3UO3EH3.js +2 -0
  81. package/dist/{chunk-YNRNA5LK.js → chunk-QGGLL3UH.js} +2 -2
  82. package/dist/chunk-QIQ63BHW.js +16 -0
  83. package/dist/{chunk-VGRICIQI.js → chunk-QJIVBYEK.js} +2 -2
  84. package/dist/chunk-QOXBSI6G.js +20 -0
  85. package/dist/chunk-QXK6UUSM.js +2 -0
  86. package/dist/{chunk-XYADIZHU.js → chunk-RA3AYNWP.js} +2 -2
  87. package/dist/chunk-RJMDJR3A.js +2 -0
  88. package/dist/{chunk-NSS46APD.js → chunk-RLH5VUMG.js} +2 -2
  89. package/dist/{chunk-GBQ5NYPR.js → chunk-S4S2WOIX.js} +6 -6
  90. package/dist/{chunk-YIJ7ZAA4.js → chunk-SERUIGV5.js} +2 -2
  91. package/dist/{chunk-FECYOO5O.js → chunk-SMQWE25B.js} +2 -2
  92. package/dist/{chunk-R4FQGQ4X.js → chunk-TAVELHYR.js} +2 -2
  93. package/dist/{chunk-U6WNH5GC.js → chunk-TWMJ3Y3G.js} +2 -2
  94. package/dist/chunk-VAXNI5NE.js +146 -0
  95. package/dist/chunk-VVY2G5ET.js +2 -0
  96. package/dist/{chunk-WER3B7MI.js → chunk-W3DBTGL4.js} +2 -2
  97. package/dist/{chunk-CNKAGUPL.js → chunk-WANA4KAQ.js} +2 -2
  98. package/dist/chunk-WJL2L6MV.js +60 -0
  99. package/dist/chunk-WUW7YUAH.js +11 -0
  100. package/dist/{chunk-QVWS2VWZ.js → chunk-WWKWUPSU.js} +2 -2
  101. package/dist/{chunk-ABMYA4TN.js → chunk-WY45BHKQ.js} +2 -2
  102. package/dist/chunk-X4FR5BZF.js +9 -0
  103. package/dist/chunk-X6RKPDY7.js +2 -0
  104. package/dist/{chunk-ZXJYMGD3.js → chunk-YLFORA5G.js} +2 -2
  105. package/dist/{chunk-KP6XRY5Z.js → chunk-YTVWB7YJ.js} +2 -2
  106. package/dist/{chunk-4XTA5OMB.js → chunk-ZCEJ63SP.js} +2 -2
  107. package/dist/{chunk-HKEHS2AS.js → chunk-ZJ5CBXK3.js} +2 -2
  108. package/dist/chunk-ZL2OGDCD.js +2 -0
  109. package/dist/cli.js +8 -3
  110. package/dist/command-descriptors-ZW5J4ZEM.js +631 -0
  111. package/dist/{config-types-D20KuvvZ.d.ts → config-types-B6MEoRNy.d.ts} +8 -0
  112. package/dist/{db-G_II8yXU.d.ts → db-DYLKr9Wn.d.ts} +18 -1
  113. package/dist/direct-navigation-42YHQPOI.js +3 -0
  114. package/dist/{health-oblXYgkF.d.ts → health-DgxIDXJC.d.ts} +1 -1
  115. package/dist/index.d.ts +2 -2
  116. package/dist/index.js +1 -1
  117. package/dist/postinstall.js +1 -1
  118. package/dist/queries/affected.d.ts +2 -2
  119. package/dist/queries/affected.js +1 -1
  120. package/dist/queries/architecture.d.ts +2 -2
  121. package/dist/queries/architecture.js +1 -1
  122. package/dist/queries/bottlenecks.d.ts +2 -2
  123. package/dist/queries/bottlenecks.js +1 -1
  124. package/dist/queries/by-kind.d.ts +2 -2
  125. package/dist/queries/by-kind.js +1 -1
  126. package/dist/queries/call-graph.d.ts +2 -2
  127. package/dist/queries/call-graph.js +1 -1
  128. package/dist/queries/change-surface.d.ts +2 -2
  129. package/dist/queries/change-surface.js +1 -1
  130. package/dist/queries/cleanup-plan.d.ts +2 -2
  131. package/dist/queries/cleanup-plan.js +1 -1
  132. package/dist/queries/co-change.d.ts +2 -2
  133. package/dist/queries/co-change.js +1 -1
  134. package/dist/queries/code.d.ts +2 -2
  135. package/dist/queries/code.js +1 -1
  136. package/dist/queries/complexity-hotspots.d.ts +2 -2
  137. package/dist/queries/complexity-hotspots.js +1 -1
  138. package/dist/queries/complexity.d.ts +2 -2
  139. package/dist/queries/complexity.js +1 -1
  140. package/dist/queries/convergence.d.ts +2 -2
  141. package/dist/queries/convergence.js +1 -1
  142. package/dist/queries/coupling.d.ts +2 -2
  143. package/dist/queries/coupling.js +1 -1
  144. package/dist/queries/cycles.d.ts +2 -2
  145. package/dist/queries/cycles.js +1 -1
  146. package/dist/queries/dataflow.d.ts +2 -2
  147. package/dist/queries/dataflow.js +1 -1
  148. package/dist/queries/dead.d.ts +2 -2
  149. package/dist/queries/dead.js +1 -1
  150. package/dist/queries/decorative-checkers.d.ts +3 -3
  151. package/dist/queries/decorative-checkers.js +1 -1
  152. package/dist/queries/deep-chains.d.ts +2 -2
  153. package/dist/queries/deep-chains.js +1 -1
  154. package/dist/queries/deps.d.ts +2 -2
  155. package/dist/queries/deps.js +1 -1
  156. package/dist/queries/diff-gate.d.ts +30 -2
  157. package/dist/queries/diff-gate.js +1 -1
  158. package/dist/queries/diff-impact.d.ts +2 -2
  159. package/dist/queries/diff-impact.js +1 -1
  160. package/dist/queries/doc-drift.d.ts +2 -2
  161. package/dist/queries/doc-drift.js +1 -1
  162. package/dist/queries/drift.d.ts +2 -2
  163. package/dist/queries/drift.js +1 -1
  164. package/dist/queries/duplicate-bodies.d.ts +2 -2
  165. package/dist/queries/duplicate-bodies.js +1 -1
  166. package/dist/queries/extract-candidates.d.ts +2 -2
  167. package/dist/queries/extract-candidates.js +1 -1
  168. package/dist/queries/fan.d.ts +2 -2
  169. package/dist/queries/fan.js +1 -1
  170. package/dist/queries/files.d.ts +2 -2
  171. package/dist/queries/health.d.ts +3 -3
  172. package/dist/queries/health.js +1 -1
  173. package/dist/queries/hierarchy.d.ts +2 -2
  174. package/dist/queries/hierarchy.js +1 -1
  175. package/dist/queries/hotspots.d.ts +2 -2
  176. package/dist/queries/hotspots.js +1 -1
  177. package/dist/queries/imports.d.ts +2 -2
  178. package/dist/queries/imports.js +1 -1
  179. package/dist/queries/incomplete-migration.d.ts +2 -2
  180. package/dist/queries/incomplete-migration.js +1 -1
  181. package/dist/queries/index.d.ts +17 -3
  182. package/dist/queries/index.js +1 -1
  183. package/dist/queries/isolated.d.ts +2 -2
  184. package/dist/queries/isolated.js +1 -1
  185. package/dist/queries/locality-candidates.d.ts +2 -2
  186. package/dist/queries/locality-candidates.js +1 -1
  187. package/dist/queries/members.d.ts +2 -2
  188. package/dist/queries/members.js +1 -1
  189. package/dist/queries/methods.d.ts +2 -2
  190. package/dist/queries/methods.js +1 -1
  191. package/dist/queries/not-implemented.d.ts +3 -3
  192. package/dist/queries/not-implemented.js +1 -1
  193. package/dist/queries/outline.d.ts +2 -2
  194. package/dist/queries/outline.js +1 -1
  195. package/dist/queries/passthrough-candidates.d.ts +2 -2
  196. package/dist/queries/passthrough-candidates.js +1 -1
  197. package/dist/queries/plan-context.d.ts +2 -2
  198. package/dist/queries/plan-context.js +1 -1
  199. package/dist/queries/react-component-duplicates.d.ts +2 -2
  200. package/dist/queries/react-component-duplicates.js +1 -1
  201. package/dist/queries/react-hook-candidates.d.ts +2 -2
  202. package/dist/queries/react-hook-candidates.js +1 -1
  203. package/dist/queries/react-large-component-pressure.d.ts +2 -2
  204. package/dist/queries/react-large-component-pressure.js +1 -1
  205. package/dist/queries/recent-duplicates.d.ts +2 -2
  206. package/dist/queries/recent-duplicates.js +1 -1
  207. package/dist/queries/redundant-reexports.d.ts +2 -2
  208. package/dist/queries/redundant-reexports.js +1 -1
  209. package/dist/queries/refs.d.ts +2 -2
  210. package/dist/queries/refs.js +1 -1
  211. package/dist/queries/self-audit.d.ts +2 -2
  212. package/dist/queries/self-audit.js +1 -1
  213. package/dist/queries/similar-chains.d.ts +2 -2
  214. package/dist/queries/similar-chains.js +1 -1
  215. package/dist/queries/similar-files.d.ts +2 -2
  216. package/dist/queries/similar-files.js +1 -1
  217. package/dist/queries/similar-signatures.d.ts +2 -2
  218. package/dist/queries/similar-signatures.js +1 -1
  219. package/dist/queries/similar.d.ts +2 -2
  220. package/dist/queries/similar.js +1 -1
  221. package/dist/queries/slice.d.ts +2 -2
  222. package/dist/queries/slice.js +1 -1
  223. package/dist/queries/stale-abstractions.d.ts +2 -2
  224. package/dist/queries/stale-abstractions.js +1 -1
  225. package/dist/queries/stats.d.ts +2 -2
  226. package/dist/queries/stats.js +1 -1
  227. package/dist/queries/surface.d.ts +2 -2
  228. package/dist/queries/surface.js +1 -1
  229. package/dist/queries/symbols.d.ts +2 -2
  230. package/dist/queries/symbols.js +1 -1
  231. package/dist/queries/system.d.ts +2 -2
  232. package/dist/queries/system.js +1 -1
  233. package/dist/queries/test-quality.d.ts +2 -2
  234. package/dist/queries/test-quality.js +1 -1
  235. package/dist/queries/trace.d.ts +2 -2
  236. package/dist/queries/trace.js +1 -1
  237. package/dist/queries/twin-ab.d.ts +3 -3
  238. package/dist/queries/twin-ab.js +1 -1
  239. package/dist/queries/twin-drift.d.ts +2 -2
  240. package/dist/queries/twin-drift.js +1 -1
  241. package/dist/queries/unused-imports.d.ts +2 -2
  242. package/dist/queries/unused-imports.js +1 -1
  243. package/dist/queries/unused-params.d.ts +2 -2
  244. package/dist/queries/unused-params.js +1 -1
  245. package/dist/queries/vue-component-duplicates.d.ts +2 -2
  246. package/dist/queries/vue-component-duplicates.js +1 -1
  247. package/dist/queries/vue-composable-candidates.d.ts +2 -2
  248. package/dist/queries/vue-composable-candidates.js +1 -1
  249. package/dist/queries/vue-large-view-pressure.d.ts +2 -2
  250. package/dist/queries/vue-large-view-pressure.js +1 -1
  251. package/dist/queries/wrapper-candidates.d.ts +2 -2
  252. package/dist/queries/wrapper-candidates.js +1 -1
  253. package/dist/reindex-worker.js +26 -26
  254. package/dist/reindex.d.ts +14 -4
  255. package/dist/reindex.js +34 -38
  256. package/dist/runtime.d.ts +167 -18
  257. package/dist/runtime.js +3 -2
  258. package/dist/rust-semantic-session-server.js +1 -1
  259. package/dist/rust-semantic-session-worker.js +1 -1
  260. package/dist/rust-semantic-worker.js +1 -1
  261. package/dist/{scip-cli-kRpaexVJ.d.ts → scip-cli-Cc6c00-a.d.ts} +6 -2
  262. package/dist/watch-server.js +5 -5
  263. package/docs/AGENT_GUIDE.md +20 -4
  264. package/docs/AI_FAILURE_MODES.md +17 -17
  265. package/docs/API_EVOLUTION.md +71 -0
  266. package/docs/CLI_JSON_OUTPUT.md +168 -0
  267. package/docs/COMMAND_REFERENCE.md +10 -6
  268. package/docs/COMMITTED_RECORD_COMPATIBILITY.md +117 -0
  269. package/docs/CONFIGURATION_WRITE_SAFETY.md +130 -0
  270. package/docs/DETECTOR_GUIDE.md +46 -46
  271. package/docs/DURABILITY.md +103 -0
  272. package/docs/INDEX_GENERATIONS.md +121 -0
  273. package/docs/LOCK_PROTOCOL.md +133 -0
  274. package/docs/MAILBOX_LIFECYCLE.md +197 -0
  275. package/docs/REINDEX_METADATA_COMPATIBILITY.md +84 -0
  276. package/docs/RUST_DURABLE_SESSION_PROTOCOL.md +126 -0
  277. package/docs/SECURITY_MODEL.md +129 -0
  278. package/docs/TELEMETRY_RETENTION.md +77 -0
  279. package/docs/TIME_SEMANTICS.md +77 -0
  280. package/docs/WATCH_REFRESH_REQUESTS.md +110 -0
  281. package/docs/WINDOWS_SIDECAR_RELEASE.md +298 -0
  282. package/docs/analyzer-validation-ledger.md +24 -23
  283. package/docs/schemas/cli-json-envelope.schema.json +53 -0
  284. package/docs/schemas/cli-output-page.schema.json +104 -0
  285. package/docs/schemas/npm-release-state.schema.json +146 -0
  286. package/docs/schemas/outcome-event-record.schema.json +39 -0
  287. package/docs/schemas/project-config.schema.json +247 -0
  288. package/docs/schemas/suppression-record.schema.json +31 -0
  289. package/docs/schemas/windows-sidecar-provenance.schema.json +137 -0
  290. package/package.json +21 -10
  291. package/scripts/build-scip-windows.mjs +180 -61
  292. package/scripts/scip-windows-provenance.mjs +364 -0
  293. package/scripts/verify-scip-windows.mjs +29 -0
  294. package/skills/_shared/SKILL.md +90 -229
  295. package/skills/_shared/agents/openai.yaml +1 -1
  296. package/skills/_shared/references/agent-contract-catalog.md +105 -0
  297. package/skills/_shared/references/command-catalog.md +118 -0
  298. package/skills/_shared/references/detector-precision-and-diffgate.md +59 -0
  299. package/skills/_shared/references/evidence-and-dead-code.md +25 -0
  300. package/skills/scip-audit/SKILL.md +77 -0
  301. package/skills/scip-audit/agents/openai.yaml +4 -0
  302. package/skills/scip-audit/references/claims.md +98 -0
  303. package/skills/scip-audit/references/cleanup.md +101 -0
  304. package/skills/scip-audit/references/directory.md +222 -0
  305. package/skills/scip-audit/references/frontend.md +130 -0
  306. package/skills/scip-audit/references/integrity.md +154 -0
  307. package/skills/scip-audit/references/maintainability.md +162 -0
  308. package/skills/scip-audit/references/twin-drift.md +104 -0
  309. package/skills/scip-diagnose/SKILL.md +52 -0
  310. package/skills/scip-diagnose/agents/openai.yaml +4 -0
  311. package/skills/scip-diagnose/references/debug.md +117 -0
  312. package/skills/{scip-probe-reachability/SKILL.md → scip-diagnose/references/probe-reachability.md} +11 -27
  313. package/skills/scip-diagnose/references/root-cause.md +145 -0
  314. package/skills/scip-diagnose/references/triage.md +119 -0
  315. package/skills/scip-explore/SKILL.md +54 -85
  316. package/skills/scip-explore/agents/openai.yaml +2 -2
  317. package/skills/scip-explore/references/diagrams.md +40 -0
  318. package/skills/scip-explore/references/language-playbook.md +49 -0
  319. package/skills/scip-improve/SKILL.md +56 -0
  320. package/skills/scip-improve/agents/openai.yaml +4 -0
  321. package/skills/scip-improve/references/cleanup-batches.md +53 -0
  322. package/skills/scip-improve/references/directory-moves.md +53 -0
  323. package/skills/scip-improve/references/doc-reconcile.md +30 -0
  324. package/skills/scip-improve/references/frontend-extraction.md +39 -0
  325. package/skills/scip-improve/references/maintainability-mechanism.md +43 -0
  326. package/skills/scip-improve/references/twin-drift.md +35 -0
  327. package/skills/scip-plan/SKILL.md +68 -0
  328. package/skills/scip-plan/agents/openai.yaml +4 -0
  329. package/skills/scip-plan/references/api-impact.md +19 -0
  330. package/skills/scip-plan/references/conductor.md +41 -0
  331. package/skills/scip-plan/references/high-assurance.md +43 -0
  332. package/skills/scip-plan/references/hyper-optimization.md +50 -0
  333. package/skills/scip-plan/references/tla-model.md +88 -0
  334. package/skills/scip-query/SKILL.md +53 -98
  335. package/skills/scip-query/agents/openai.yaml +2 -2
  336. package/skills/scip-setup/SKILL.md +69 -181
  337. package/skills/scip-setup/agents/openai.yaml +3 -3
  338. package/skills/scip-setup/references/bootstrap-workflow.md +120 -0
  339. package/skills/scip-setup/references/language-verification.md +61 -0
  340. package/skills/scip-setup/references/lifecycle-commands.md +119 -0
  341. package/skills/scip-setup/references/per-repo-triage.md +24 -0
  342. package/skills/scip-verify/SKILL.md +126 -84
  343. package/skills/scip-verify/agents/openai.yaml +2 -2
  344. package/skills/scip-verify/references/calibrate-detectors.md +170 -0
  345. package/dist/chunk-2CTX5CMX.js +0 -4
  346. package/dist/chunk-2Y373BDD.js +0 -2
  347. package/dist/chunk-2YU7I3QO.js +0 -2
  348. package/dist/chunk-3MJ5YA4Y.js +0 -16
  349. package/dist/chunk-64RFXJT5.js +0 -16
  350. package/dist/chunk-7UY7SD7D.js +0 -927
  351. package/dist/chunk-B5NLK2B3.js +0 -6
  352. package/dist/chunk-C2QSK7E7.js +0 -2
  353. package/dist/chunk-C7NIYIQ4.js +0 -67
  354. package/dist/chunk-D4U5Q3FT.js +0 -7
  355. package/dist/chunk-DGAGY7RJ.js +0 -60
  356. package/dist/chunk-DLWR3NUU.js +0 -5
  357. package/dist/chunk-K2ERX4UT.js +0 -3
  358. package/dist/chunk-KHE7J5ZN.js +0 -3
  359. package/dist/chunk-L7SPDE73.js +0 -84
  360. package/dist/chunk-LHMNRHGV.js +0 -3
  361. package/dist/chunk-LM72NQ7T.js +0 -3
  362. package/dist/chunk-MSWVMDAH.js +0 -122
  363. package/dist/chunk-NH7WNNQC.js +0 -20
  364. package/dist/chunk-NPKYOIFM.js +0 -18
  365. package/dist/chunk-NZL2DBT7.js +0 -2
  366. package/dist/chunk-OMPZHGHO.js +0 -2
  367. package/dist/chunk-P2PC2WGR.js +0 -2
  368. package/dist/chunk-Q3AFUTGB.js +0 -8
  369. package/dist/chunk-QRGV2F7L.js +0 -2
  370. package/dist/chunk-TW4OG5FC.js +0 -4
  371. package/dist/chunk-U7DSEKOM.js +0 -30
  372. package/dist/chunk-V27BEQJN.js +0 -7
  373. package/dist/chunk-XAGAZSFE.js +0 -6
  374. package/dist/chunk-XBN5VO53.js +0 -2
  375. package/dist/chunk-YGAGTIDK.js +0 -11
  376. package/dist/command-descriptors-N2TL4XM2.js +0 -613
  377. package/dist/direct-navigation-DUCZCTOE.js +0 -3
  378. package/skills/scip-api-impact/SKILL.md +0 -140
  379. package/skills/scip-api-impact/agents/openai.yaml +0 -4
  380. package/skills/scip-calibrate/SKILL.md +0 -131
  381. package/skills/scip-calibrate/agents/openai.yaml +0 -4
  382. package/skills/scip-claim-audit/SKILL.md +0 -107
  383. package/skills/scip-claim-audit/agents/openai.yaml +0 -4
  384. package/skills/scip-cleanup-audit/SKILL.md +0 -130
  385. package/skills/scip-cleanup-audit/agents/openai.yaml +0 -4
  386. package/skills/scip-cleanup-improve/SKILL.md +0 -85
  387. package/skills/scip-cleanup-improve/agents/openai.yaml +0 -4
  388. package/skills/scip-concrete-plan/HIGH_ASSURANCE.md +0 -317
  389. package/skills/scip-concrete-plan/SKILL.md +0 -105
  390. package/skills/scip-concrete-plan/agents/openai.yaml +0 -4
  391. package/skills/scip-conductor/SKILL.md +0 -133
  392. package/skills/scip-conductor/agents/openai.yaml +0 -4
  393. package/skills/scip-debug/SKILL.md +0 -130
  394. package/skills/scip-debug/agents/openai.yaml +0 -4
  395. package/skills/scip-diagram/SKILL.md +0 -110
  396. package/skills/scip-diagram/agents/openai.yaml +0 -4
  397. package/skills/scip-directory-architecture/SKILL.md +0 -266
  398. package/skills/scip-directory-architecture/agents/openai.yaml +0 -4
  399. package/skills/scip-doc-reconcile/SKILL.md +0 -89
  400. package/skills/scip-doc-reconcile/agents/openai.yaml +0 -4
  401. package/skills/scip-hyper-optimization/SKILL.md +0 -156
  402. package/skills/scip-hyper-optimization/agents/openai.yaml +0 -4
  403. package/skills/scip-integrity-audit/SKILL.md +0 -152
  404. package/skills/scip-integrity-audit/agents/openai.yaml +0 -4
  405. package/skills/scip-language-playbook/SKILL.md +0 -106
  406. package/skills/scip-language-playbook/agents/openai.yaml +0 -4
  407. package/skills/scip-maintainability/SKILL.md +0 -158
  408. package/skills/scip-maintainability/agents/openai.yaml +0 -4
  409. package/skills/scip-probe-reachability/agents/openai.yaml +0 -4
  410. package/skills/scip-react-maintainability/SKILL.md +0 -101
  411. package/skills/scip-react-maintainability/agents/openai.yaml +0 -4
  412. package/skills/scip-root-cause/SKILL.md +0 -151
  413. package/skills/scip-root-cause/agents/openai.yaml +0 -4
  414. package/skills/scip-tla-model-system/SKILL.md +0 -148
  415. package/skills/scip-tla-model-system/agents/openai.yaml +0 -4
  416. package/skills/scip-triage-issue/SKILL.md +0 -133
  417. package/skills/scip-triage-issue/agents/openai.yaml +0 -4
  418. package/skills/scip-twin-drift/SKILL.md +0 -109
  419. package/skills/scip-twin-drift/agents/openai.yaml +0 -4
  420. package/skills/scip-vue-maintainability/SKILL.md +0 -107
  421. package/skills/scip-vue-maintainability/agents/openai.yaml +0 -4
package/CHANGELOG.md CHANGED
@@ -4,6 +4,90 @@ 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.8]
8
+
9
+ ### Complete agent evidence
10
+
11
+ - Every descriptor-backed command now supports resumable output pages backed
12
+ by one immutable private snapshot. Pages report exact character totals,
13
+ bind cursors to the original invocation and content hash, and emit the exact
14
+ continuation command without rerunning a nondeterministic query.
15
+ - Incomplete machine-readable and human pages identify themselves as
16
+ incomplete evidence. Generated project guidance requires agents to retrieve
17
+ every page before drawing a conclusion, changing evidence commands, or
18
+ reporting completion.
19
+
20
+ ### Diff-gate containment
21
+
22
+ - CLI and Stop-hook gates now share a per-project single-flight lease, so
23
+ overlapping agents report the live owner instead of multiplying detector
24
+ work.
25
+ - Gate evaluation runs in an owned child with a finite 60-second deadline, or
26
+ 180 seconds with `--full`. Timeout terminates and reaps the child and fails
27
+ closed.
28
+ - Historical finding reconciliation replays at most one comparison base per
29
+ foreground gate, runs only the detectors needed for that base, and leaves
30
+ deferred findings open with exact counts.
31
+
32
+ ### Security and operational hardening
33
+
34
+ - Repository-controlled paths, tools, regular expressions, persisted records,
35
+ subprocesses, and output now cross explicit containment, size, time, and
36
+ trust boundaries. Terminal text is rendered inert, and destructive cache
37
+ operations require verified ownership.
38
+ - Watchers and semantic mailboxes back off while idle, suppress redundant
39
+ refreshes, and preserve one canonical source identity across filesystem
40
+ aliases.
41
+ - Production dependency audit and release preflight now reject high-severity
42
+ production advisories; the shipped production dependency tree is clean.
43
+
44
+ ## [0.19.6]
45
+
46
+ ### State and process resilience
47
+
48
+ - Index publication now binds SQLite, SCIP, metadata, cursors, semantic
49
+ sessions, and retained generations to one immutable generation identity.
50
+ Shared-cache hydration and lease updates preserve current ownership across
51
+ concurrent writers and crash recovery.
52
+ - Watch/reindex locks, refresh requests, TypeScript and Rust mailboxes,
53
+ evidence counters, suppressions, and outcome records now use explicit
54
+ operation identities, bounded queues, durable publication, conservative
55
+ owner reclamation, retry-safe transitions, and versioned compatibility
56
+ readers.
57
+ - Child processes, workers, verified downloads, and Rust LSP framing have
58
+ finite time, byte, output, and shutdown budgets with typed timeout,
59
+ overflow, cancellation, and recovery outcomes.
60
+
61
+ ### Public and durable contracts
62
+
63
+ - CLI JSON, project configuration, reindex metadata, committed suppression and
64
+ outcome files, and Rust durable-session messages have explicit current,
65
+ legacy, malformed, and future-version policies. Incomplete history and
66
+ partial metadata disclose their reduced capabilities instead of silently
67
+ acting current.
68
+ - The published TypeScript declaration surface is checked across all 72
69
+ export paths and 871 declarations, including transitive declaration chunks
70
+ and a downstream consumer compile fixture.
71
+
72
+ ### Windows sidecar and npm release
73
+
74
+ - The Windows sidecar carries a versioned provenance manifest binding its
75
+ immutable SCIP source commit, pinned Go toolchain, build contract, PE
76
+ machines, sizes, and SHA-256 hashes. Build, sidecar pack, and release all
77
+ reject stale, partial, swapped, or unverifiable binaries.
78
+ - Existing npm versions are accepted only after local pack reports, registry
79
+ metadata, downloaded tarball hashes, package coordinates, and provenance
80
+ bytes agree. Only an explicit npm `E404` authorizes first publication;
81
+ ambiguity and concurrent different-content winners fail closed.
82
+ - `npm run release:npm` owns the complete two-package workflow: test/build/API
83
+ preflight and both packs from one clean, unchanged Git revision precede
84
+ registry mutation, the sidecar publishes and verifies first, the main
85
+ package publishes and verifies last, and a durable schema-versioned local
86
+ state record binds the canonical HTTPS registry, source revision, and exact
87
+ artifacts so every partial state is observable and safely retryable. Direct
88
+ `npm publish` is guarded because it cannot provide that cross-package
89
+ recovery contract.
90
+
7
91
  ## [0.19.5]
8
92
 
9
93
  ### Agent evidence and workflows
@@ -201,7 +285,7 @@ All notable changes to `scip-query` are documented here. This file starts at 0.1
201
285
 
202
286
  ### Fixes (accuracy / false-positive)
203
287
 
204
- - **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`.
288
+ - **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`.
205
289
  - **`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.
206
290
  - **`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."
207
291
  - **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
@@ -104,8 +119,9 @@ scip-query similar <closest-symbol>
104
119
  # After an extraction or migration: find sites that still contain old logic
105
120
  scip-query incomplete-migration
106
121
 
107
- # Before declaring the work complete: refresh the index and gate the diff
108
- scip-query reindex && scip-query diff-gate --json
122
+ # Before declaring the work complete: gate the diff. Reindex only when status
123
+ # reports stale and no live watcher or hook refresh is already responsible.
124
+ scip-query diff-gate --json
109
125
  ```
110
126
 
111
127
  For a repository-wide cleanup pass:
@@ -243,7 +259,34 @@ scip-query suppress SQABC123DEF456 --check echo --reason "intentional compatibil
243
259
 
244
260
  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
261
 
246
- **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:
262
+ The first suppression for an identity is created exclusively. Repeating the
263
+ same decision is idempotent, but a different reason, expiry, check, or file is
264
+ a policy change and never silently overwrites the existing file. The command
265
+ reports the existing SHA-256 revision:
266
+
267
+ ```text
268
+ error: A different suppression decision already exists at ...
269
+ Current revision: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef.
270
+ ```
271
+
272
+ After reviewing the committed decision, replace exactly that revision:
273
+
274
+ ```bash
275
+ scip-query suppress SQABC123DEF456 --check echo \
276
+ --reason "superseded by a narrower compatibility exception" \
277
+ --replace 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
278
+ ```
279
+
280
+ If another writer changes the record first, the stale replacement is rejected
281
+ and the newer bytes remain intact. New records declare their schema version,
282
+ record kind, stable suppression identity, and writer version. Older
283
+ unversioned and pre-discriminator v1 records remain readable and are upgraded
284
+ only by an explicit replacement. If a malformed or future record cannot be
285
+ used, `diff-gate` reports exact incomplete-coverage counts and keeps findings
286
+ conservatively unsuppressed. The wire schemas and merge rules are documented
287
+ in [`docs/COMMITTED_RECORD_COMPATIBILITY.md`](docs/COMMITTED_RECORD_COMPATIBILITY.md).
288
+
289
+ **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. Historical reconciliation is deliberately incremental: one run replays at most one stored comparison base, reports the exact deferred base and finding counts, and leaves every deferred finding open for a later gate. A suppressed finding was noise or an accepted trade-off:
247
290
 
248
291
  ```bash
249
292
  scip-query effectiveness --since 30d
@@ -255,7 +298,28 @@ echo 14 10 2 1 0 1 83% 0.8
255
298
  new-dead 6 5 0 1 0 0 100% 0.3
256
299
  ```
257
300
 
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.
301
+ `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 clean post-commit runs advance through stored bases incrementally. 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.
302
+
303
+ `diff-gate` is also single-flight per project: a second CLI or Stop-hook gate
304
+ returns the live owner's PID and start time instead of duplicating the same
305
+ CPU-heavy work. The gate runs in an owned child process with a 60-second
306
+ deadline, or 180 seconds with `--full`; timeout terminates and reaps that child
307
+ and fails the gate explicitly. Operators may set
308
+ `SCIP_QUERY_DIFF_GATE_TIMEOUT_MS` to a positive millisecond value, capped at
309
+ 10 minutes.
310
+
311
+ The health report also keeps a worktree-local repeat counter in `evidence.db`.
312
+ A logical observation is one completed detector evaluation named by an
313
+ observation ID; unlike a process attempt, a retry of that evaluation reuses the
314
+ same ID. SQLite serializes these observations before deriving their
315
+ transitions. Two different IDs that report the same finding therefore add two
316
+ to `timesShown`, while an exact retry with the same ID and evidence adds
317
+ nothing. Reusing an ID for different evidence is rejected and reported. A
318
+ writer-lock timeout skips the local counter update rather than delaying or
319
+ changing the gate decision, and the next distinct run may try again. The
320
+ dedupe records live as long as that rebuildable `evidence.db`; deleting the
321
+ database resets both the counters and their retry memory. These local counters
322
+ feed detector-precision hints, not the committed `effectiveness` totals above.
259
323
 
260
324
  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
325
 
@@ -312,40 +376,35 @@ Heuristic detectors carry guardrails learned from real codebases: published `pac
312
376
 
313
377
  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
378
 
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.
379
+ | Skill | Essential difference |
380
+ | --------------- | ------------------------------------------------------------------------------ |
381
+ | `scip-query` | Router: select the smallest workflow that answers the request. |
382
+ | `scip-explore` | Understand or diagram existing code without changing it. |
383
+ | `scip-plan` | Prove the blast radius and specify one change or a multi-phase program. |
384
+ | `scip-diagnose` | Trace a failure, recurring design flaw, issue, or unreachable branch to cause. |
385
+ | `scip-audit` | Classify integrity, maintainability, drift, framework, and cleanup evidence. |
386
+ | `scip-improve` | Act on confirmed audit or documentation findings and ratchet the result. |
387
+ | `scip-verify` | Test and challenge a finished change before declaring it complete. |
388
+ | `scip-setup` | Adopt or repair scip-query in a repository. |
389
+ | `_shared` | Manual-only command/evidence reference loaded by another workflow when needed. |
390
+
391
+ The important boundary is read-only versus mutating work: `scip-audit`
392
+ classifies current evidence, while `scip-improve` changes confirmed findings.
393
+ `scip-plan` is prospective evidence before implementation; `scip-verify`
394
+ challenges a concrete finished diff. `scip-explore` explains working behavior;
395
+ `scip-diagnose` starts from a failure or contradiction.
346
396
 
347
397
  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
398
 
399
+ Setup/configuration writers are conflict-aware. They reread the latest file
400
+ under a short token-owned lock, preserve unknown JSON fields and prose outside
401
+ owned Markdown markers, and publish complete bytes durably. An unrelated
402
+ intervening JSON edit is merged; a stale decision about the same project-config
403
+ field, malformed latest JSON, malformed managed markers, or an edit that wins
404
+ the final revision check produces an explicit conflict and leaves the latest
405
+ file untouched. Reload the file and rerun the command after resolving that
406
+ conflict. See [Configuration and setup write safety](docs/CONFIGURATION_WRITE_SAFETY.md).
407
+
349
408
  For a project, run `scip-query setup`. It enables demand-started automatic
350
409
  indexing unless the project already has an explicit `watch.enabled: false`,
351
410
  starts or reuses the project service, verifies its clean-idle deadline, and
@@ -353,7 +412,8 @@ reports Rust's final durable/worker semantic selection and lifecycle state.
353
412
  The status read is passive; the setup health audit may make a semantic request
354
413
  that wakes rust-analyzer, after which the helper exits on clean idle.
355
414
  It also installs/refreshes skills, configures project-local hooks unless
356
- skipped, checks indexer readiness, attempts configured indexer remediation,
415
+ skipped, checks indexer readiness, performs explicitly approved pinned indexer
416
+ remediation,
357
417
  refreshes the index, smoke-tests representative command families, writes
358
418
  `docs/scip-query/health-dossier.md` and `.json` when the optional health pass is
359
419
  selected, reports the health score and items needing attention, and seeds
@@ -361,10 +421,12 @@ AGENTS.md/CLAUDE.md guidance. Use
361
421
  the default terminal checklist to accept or decline the recommended automatic
362
422
  indexing action and other project-local changes (`--guided` reopens it
363
423
  explicitly). After setup,
364
- `scip-cleanup-audit` confirms raw signals and `scip-cleanup-improve` keeps
424
+ `scip-audit` confirms raw signals and `scip-improve` keeps
365
425
  fixing the worst confirmed items until no safe confirmed cleanup remains. Use
366
426
  `scip-query setup --git-hook` when you also want a local pre-commit diff gate.
367
- CI setup is intentionally separate.
427
+ Non-interactive setup and ordinary reindex report missing global tools without
428
+ installing them; pass `--install-missing` only when that operation may install
429
+ the reviewed immutable package versions. CI setup is intentionally separate.
368
430
 
369
431
  Setup classifies every change by where its facts belong:
370
432
 
@@ -386,7 +448,24 @@ scip-query tla trace-check specs/queue/Queue.tla --trace traces/run1.json # ch
386
448
  scip-query tla fetch-tools # download the pinned tla2tools.jar into the cache
387
449
  ```
388
450
 
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.
451
+ `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.
452
+
453
+ `tla fetch-tools` allows five minutes and 256 MiB for the pinned download by
454
+ default. It streams bytes through the SHA-256 verifier instead of buffering the
455
+ response, rejects malformed or oversized `Content-Length`, and enforces the
456
+ same ceiling when the header is absent. Callers for one cache path serialize on
457
+ a token-owned lock and recheck the winner's checksum before fetching. Failed,
458
+ aborted, or competing operations remove only their random-token staging file;
459
+ the previously accepted cache remains available. Successful promotion flushes
460
+ the verified file and its containing directory before acknowledging the new
461
+ cache where the platform supports directory sync.
462
+
463
+ File-backed state uses an explicit visibility-versus-crash-durability
464
+ classification. See [Filesystem Publication and Durability](docs/DURABILITY.md)
465
+ for the guarantees, failure outcomes, Windows limitation, and call-site matrix.
466
+ Process coordination uses one versioned, token-owned format with conservative
467
+ malformed-file recovery; see
468
+ [Process Lock Ownership and Recovery](docs/LOCK_PROTOCOL.md).
390
469
 
391
470
  ## Quick Start
392
471
 
@@ -409,7 +488,18 @@ scip-query health --write-baseline # start the ratchet
409
488
  - `scip` CLI, from [Sourcegraph SCIP releases](https://github.com/sourcegraph/scip/releases)
410
489
  - A language-specific SCIP indexer for your project
411
490
 
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.
491
+ On Windows, the `scip` binary is installed automatically from npm:
492
+ `scip-query-scip-windows` is an OS-gated optional dependency (universal
493
+ package, x64 + ARM64) that only Windows installs fetch. Resolution order:
494
+ `scip` on PATH, then `SCIP_QUERY_SCIP_BIN`, then the sidecar package. Run
495
+ `scip-query check-deps` for platform-specific install instructions. The
496
+ [Windows sidecar release guide](docs/WINDOWS_SIDECAR_RELEASE.md) defines its
497
+ executable provenance, fail-closed build/pack checks, and registry identity
498
+ gate. Release operators can run `npm run verify:scip-windows-registry` for a
499
+ sidecar-only read, or `npm run release:npm:dry-run` for the complete
500
+ main-plus-sidecar preflight and registry reconciliation without publication.
501
+ The publishing command is `npm run release:npm`; direct `npm publish` refuses
502
+ to run because it cannot own the recoverable two-package ordering.
413
503
 
414
504
  | Language | Indexer | Install |
415
505
  | ----------------------------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------- |
@@ -429,6 +519,16 @@ For Python, the executable may be `scip-python`, `scip-python-plus`, or both. `s
429
519
 
430
520
  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
521
 
522
+ `augment-vue` uses one in-process Volar context by default. Calibrated projects
523
+ can opt into parallel computation with `SCIP_QUERY_AUGMENT_VUE_WORKERS=<count>`.
524
+ The CLI then owns every worker until exit: a timeout or peer failure terminates
525
+ and awaits all unfinished workers before removing their private result
526
+ directory. `SCIP_QUERY_AUGMENT_VUE_WORKER_TIMEOUT_MS` defaults to five minutes,
527
+ and `SCIP_QUERY_AUGMENT_VUE_WORKER_RESULT_MAX_BYTES` defaults to 64 MiB per
528
+ worker. Every result carries its run, worker, and task identities and is
529
+ size-checked before parsing, so a stale, partial, or mismatched result cannot
530
+ enter the deterministic worker-order merge.
531
+
432
532
  `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
533
 
434
534
  ## How It Works
@@ -439,6 +539,21 @@ Vue single-file components are handled through the JavaScript/TypeScript indexer
439
539
 
440
540
  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
541
 
542
+ Each accepted worktree-local index is also stored beneath an immutable
543
+ `.scipquery-generations/<identity>/` directory. An atomic `state.json` pointer
544
+ selects the database, SCIP companion, and metadata as one unit; every
545
+ `ScipDatabase` retains that unit for its lifetime. The familiar top-level
546
+ `index.db`, `index.scip`, and `meta.json` files remain compatibility mirrors,
547
+ but internal queries do not reread them after opening a generation. This keeps
548
+ cursor identities and semantic requests attached to the same rows even during
549
+ a concurrent reindex. The publication, crash, legacy-overlap, and retention
550
+ rules are documented in [Local Index Generations](docs/INDEX_GENERATIONS.md).
551
+
552
+ All `meta.json` consumers share one version decoder and an explicit capability
553
+ matrix. Version 2 remains readable, version 3 is current, and version 4 is a
554
+ reserved unsupported migration boundary. See
555
+ [Reindex Metadata Compatibility](docs/REINDEX_METADATA_COMPATIBILITY.md).
556
+
442
557
  Git worktrees in the same repository also share immutable generations under
443
558
  `~/.cache/scip-query/repositories/<repository-id>/`. A shared generation is a
444
559
  complete index for one exact committed tree, indexing configuration, artifact
@@ -450,6 +565,15 @@ copy-on-write cloning is used when available, with an ordinary copy fallback;
450
565
  hard links are never used. Dirty edits, watcher refreshes, locks, and local
451
566
  `evidence.db` state therefore remain private to the worktree.
452
567
 
568
+ Each worktree lease names the exact shared generation protected from
569
+ collection. Lease publication, liveness touches, and repository cleanup share
570
+ one repository-cache lock. A touch rereads the current lease only after
571
+ acquiring that lock, validates its ownership checksum and current local
572
+ generation, and changes only `lastSeenAt`. If a newer generation was attached,
573
+ the lease was deleted or recreated, or its ownership changed while the touch
574
+ waited, the touch preserves that current state instead of replaying its stale
575
+ observation.
576
+
453
577
  Automatic refresh follows the same boundary. When `watch.enabled` is true,
454
578
  the first watcher-eligible command in each worktree starts or reuses a daemon
455
579
  identified by that checkout's Git worktree ID. A Git worktree ID is a checkout
@@ -472,6 +596,16 @@ shared generation is only a warm starting snapshot; it never implies a shared
472
596
  watcher or shared later writes. A daemon that exits after its configured idle
473
597
  timeout starts warm again when that worktree is next used.
474
598
 
599
+ Command-triggered refresh intent is stored separately from disposable activity
600
+ timestamps. Each accepted demand is an immutable request with a deadline and
601
+ optional idempotency key; the daemon claims pending requests exclusively,
602
+ coalesces them deliberately, and acknowledges them only after the corresponding
603
+ reindex completes. A failed attempt returns its requests to pending, and a
604
+ successor daemon recovers claims left by a crashed owner. `watch --status`
605
+ reports pending, claimed, completed, and expired counts. The complete
606
+ at-least-once and retention contract is documented in
607
+ [Watch Refresh Requests](docs/WATCH_REFRESH_REQUESTS.md).
608
+
475
609
  The primary checkout is only a possible source of a generation, never an
476
610
  authority for a linked worktree. If its local cache already contains
477
611
  uncommitted changes that are absent from a new worktree's `HEAD`, the full
@@ -506,6 +640,26 @@ Historical shadow rows are compact calibration summaries. They rotate at
506
640
  project; the complete latest record remains available for status diagnostics.
507
641
  After acquiring a project's exclusive reindex lock, each reindex also removes
508
642
  staging directories abandoned by interrupted earlier reindexes.
643
+ Watch and watcher-triggered reindex ownership records include the operating
644
+ system process start identity as well as the PID. `watch stop`, daemon
645
+ replacement, and manual preemption verify both values before signaling. A
646
+ legacy record or a platform lookup failure therefore fails closed with an
647
+ explicit recovery error instead of treating a reused PID as the old
648
+ tool-owned process.
649
+
650
+ Finite subprocesses use explicit wall-time and output budgets. Quick binary
651
+ probes default to 10 seconds, Git operations to 30 seconds, isolated analysis
652
+ workers to 180 seconds, installers and index conversion to 300 seconds, and
653
+ language indexers to 600 seconds. Set `SCIP_QUERY_INDEXER_TIMEOUT_MS` to a
654
+ positive integer to override the indexer deadline. Command-specific checker,
655
+ TLA+, benchmark, and Rust semantic budgets continue to use their documented
656
+ options or environment settings. When an asynchronous finite child exceeds
657
+ its deadline or output budget, scip-query drains both streams, sends `TERM`,
658
+ escalates to `KILL` after a one-second grace period only while the recorded
659
+ process identity still matches, and reports completion only after the child
660
+ has closed. Detached watch and semantic services are deliberate exceptions:
661
+ their persisted identity, lease, request deadlines, and stop protocol own
662
+ their lifetime.
509
663
 
510
664
  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
665
  Use `indexer.typescript.pnpmWorkspaces` only with the default single-project mode; workspace mode passes explicit projects instead.
@@ -520,6 +674,8 @@ Clojure projects can pass a project-local `scip-clojure` config file through `.s
520
674
 
521
675
  ```json
522
676
  {
677
+ "$schema": "./node_modules/scip-query/docs/schemas/project-config.schema.json",
678
+ "schemaVersion": 2,
523
679
  "languages": ["clojure"],
524
680
  "indexer": {
525
681
  "clojure": {
@@ -547,6 +703,8 @@ It creates a minimal `.scipquery.json`:
547
703
 
548
704
  ```json
549
705
  {
706
+ "$schema": "./node_modules/scip-query/docs/schemas/project-config.schema.json",
707
+ "schemaVersion": 2,
550
708
  "languages": ["typescript"],
551
709
  "watch": {
552
710
  "enabled": true,
@@ -559,6 +717,17 @@ It creates a minimal `.scipquery.json`:
559
717
  }
560
718
  ```
561
719
 
720
+ `schemaVersion` identifies the meaning of the persisted fields. Version 2 is
721
+ the current format. The CLI reads both unversioned/explicit-v1 legacy files
722
+ and version 2. A setup command migrates a legacy file on its next authorized
723
+ config write, preserving fields it does not own. An unsupported future
724
+ version or malformed discriminator fails before any option is used and is
725
+ left byte-for-byte unchanged. `$schema` points editors at the JSON Schema
726
+ bundled with the installed package.
727
+
728
+ Creation is exclusive: if another process creates `.scipquery.json` first,
729
+ `init` preserves that complete file rather than replacing it.
730
+
562
731
  Add optional fields such as `indexerConcurrency`, `indexer`, `entryRoots`,
563
732
  `declaredCouplings`, and `suppressions` only when the project needs them.
564
733
 
@@ -571,18 +740,47 @@ background service. Relevant file/Git activity keeps it alive; it exits after
571
740
  timeout to `0` to keep it running. `scip-query watch` still provides foreground
572
741
  mode, while `watch --daemon`, `watch --status`, and `watch --stop` expose the
573
742
  background lifecycle. Both modes share one project lock, so only one can own an
574
- index cache.
743
+ index cache. Stopping is an asynchronous drain: the watcher first rejects new
744
+ refreshes, continuously consumes a bounded tail of the active worker's output,
745
+ closes every source subscription, and waits for the worker to exit after
746
+ `TERM`/`KILL` escalation before it removes service state or releases the lock.
747
+ `watch --status` reports `Stopping safely` while that work is in progress. If a
748
+ subscription cannot close or worker exit cannot be established, the service
749
+ keeps an explicit degraded draining record and its ownership files instead of
750
+ advertising a clean stop; the reported reason is the recovery evidence.
751
+ Elapsed waits and idle control use a process-local monotonic clock; shared
752
+ heartbeats remain civil-time diagnostics and never authorize replacement or a
753
+ process signal by age alone. See [Time Semantics](docs/TIME_SEMANTICS.md).
575
754
 
576
755
  The same demand-started service lazily owns TypeScript compiler Projects after
577
756
  the first command that needs ts-morph semantics. Separate CLI processes reuse
578
- that session through a repository-local atomic mailbox; source-only index
757
+ that session through a repository-local bounded mailbox; source-only index
579
758
  generations refresh the existing Projects, while configuration or uncertain
580
759
  changes replace them. `watch --status` reports Project/session/request counts.
760
+ Current TypeScript and durable Rust mailbox operations use stable
761
+ content-derived identities, pending/inflight/response states, atomic
762
+ owner-expiring claims, retained idempotent completions, FIFO enqueue ordering,
763
+ typed item/byte backpressure, bounded cleanup, and pressure telemetry. Client
764
+ timeout or exit no longer deletes shared work; a service crash before response
765
+ is reclaimable, while a response published before a crash prevents
766
+ re-execution. The precise state machine, default limits, legacy overlap, and
767
+ failure matrix are documented in
768
+ [`docs/MAILBOX_LIFECYCLE.md`](docs/MAILBOX_LIFECYCLE.md).
769
+ Rust v3 additionally binds every accepted response to its request ID,
770
+ operation ID, mailbox-session identity, and authoritative absolute deadline;
771
+ its old/current/future compatibility matrix is in
772
+ [`docs/RUST_DURABLE_SESSION_PROTOCOL.md`](docs/RUST_DURABLE_SESSION_PROTOCOL.md).
581
773
  It also reports a rolling 24-hour reindex activity summary: rebuilt, reused,
582
774
  failed, and freshness-proven suppressed refreshes plus estimated logical output
583
775
  bytes. The estimate counts scip-query artifacts emitted by rebuilt refreshes;
584
776
  it is not a measurement of physical SSD writes. The underlying
585
- `reindex-activity.jsonl` history uses two bounded 1 MiB segments.
777
+ `reindex-activity.jsonl` history uses two bounded 1 MiB segments. Append,
778
+ rotation, and retained-set reads share a process-instance lock; incomplete
779
+ crash tails are trimmed or ignored without deleting earlier complete lines.
780
+ These observations are process-visible rather than crash-durable. See
781
+ [`docs/TELEMETRY_RETENTION.md`](docs/TELEMETRY_RETENTION.md).
782
+ The refresh-request counters reported beside it describe durable demand
783
+ admission and processing state, not reindex frequency.
586
784
  If the service is stopped, incompatible, busy beyond its bound, or returns an
587
785
  invalid response, the command falls back to the existing in-process ts-morph
588
786
  provider.
@@ -592,6 +790,12 @@ session by default. It remains stopped until a Rust semantic request needs it,
592
790
  exits after its clean idle period, and automatically falls back to the
593
791
  per-command worker on helper/readiness/timeout/request failure. Set
594
792
  `SCIP_RUST_SEMANTIC_DURABLE_SESSION=0` for an explicit worker-only opt-out.
793
+ The LSP transport accepts at most a 16 KiB response header and a 64 MiB JSON
794
+ message by default, with a 64 KiB header ceiling and a 256 MiB combined
795
+ wire-buffer ceiling even for programmatic overrides. Missing, invalid,
796
+ duplicate, unsafe, or oversized `Content-Length` framing kills that transport
797
+ once, clears its retained bytes, and fails all outstanding semantic/readiness
798
+ work so the normal worker or graph/source fallback can take over.
595
799
 
596
800
  Use `declaredCouplings` for files that intentionally form one maintenance unit.
597
801
  These pairs are treated as structurally linked by `co-change` and health, while
@@ -639,6 +843,8 @@ Query results are filtered through the project's `.gitignore`. If none exists, c
639
843
  - [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
844
  - [Agent Guide](docs/AGENT_GUIDE.md): goal-oriented workflows for tracing, planning, cleanup, quality checks, and change verification.
641
845
  - [Command Reference](docs/COMMAND_REFERENCE.md): generated command syntax, descriptions, and options.
846
+ - [CLI JSON output contract](docs/CLI_JSON_OUTPUT.md): versioned envelopes, compatibility rules, and schema.
847
+ - [Security model](docs/SECURITY_MODEL.md): untrusted-checkout boundaries, authority flags, input budgets, and complete-output pagination.
642
848
  - [Programmatic API](docs/API.md): using the query functions from TypeScript.
643
849
  - [Historical plans](https://github.com/PlunderStruck/scip-query/tree/main/docs/plans): implementation notes and completed cleanup plans.
644
850
 
@@ -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-3ZSJ3PWF.js";import"./chunk-IF6FP6B2.js";import"./chunk-C5Q44Q5D.js";import"./chunk-46XGSFNI.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