scip-query 0.19.8 → 0.20.0

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 (366) hide show
  1. package/CHANGELOG.md +97 -0
  2. package/README.md +158 -48
  3. package/dist/augment-vue-worker.js +1 -1
  4. package/dist/chunk-26QA6FAI.js +8 -0
  5. package/dist/{chunk-KJ2IIBZN.js → chunk-2HPVVXM5.js} +2 -2
  6. package/dist/chunk-2KAZEZ6M.js +2 -0
  7. package/dist/chunk-32LVLCLN.js +40 -0
  8. package/dist/{chunk-24GTWJ3N.js → chunk-3CLX5EOX.js} +2 -2
  9. package/dist/{chunk-QGGLL3UH.js → chunk-3G66UZBH.js} +2 -2
  10. package/dist/{chunk-AA4UWRNL.js → chunk-3ORVDL3H.js} +2 -2
  11. package/dist/chunk-4MAK2HOY.js +6 -0
  12. package/dist/{chunk-QIQ63BHW.js → chunk-4TURLRL5.js} +2 -2
  13. package/dist/chunk-4UQVNCQE.js +2 -0
  14. package/dist/chunk-55Q3WLZX.js +2 -0
  15. package/dist/{chunk-CTF2GDEX.js → chunk-5E4WNAVD.js} +2 -2
  16. package/dist/{chunk-ZCEJ63SP.js → chunk-5I5G2QOX.js} +2 -2
  17. package/dist/chunk-6LDJQXAH.js +2 -0
  18. package/dist/{chunk-3EDFLQ6A.js → chunk-6O5TICIZ.js} +2 -2
  19. package/dist/{chunk-ACAM6O5R.js → chunk-6SHPK5ZE.js} +2 -2
  20. package/dist/chunk-7BAVHKMJ.js +49 -0
  21. package/dist/chunk-7O5IKBTZ.js +16 -0
  22. package/dist/{chunk-WJL2L6MV.js → chunk-7PIO7NKH.js} +2 -2
  23. package/dist/chunk-7S5E7KWT.js +2 -0
  24. package/dist/{chunk-YLFORA5G.js → chunk-7SQQWSY3.js} +2 -2
  25. package/dist/chunk-7WPLAODU.js +5 -0
  26. package/dist/chunk-A73XVBCR.js +20 -0
  27. package/dist/chunk-AFHORGLH.js +42 -0
  28. package/dist/chunk-AIE7TFJW.js +9 -0
  29. package/dist/{chunk-TWMJ3Y3G.js → chunk-AZJQQKDD.js} +2 -2
  30. package/dist/{chunk-BDOIKGDI.js → chunk-B2PX5I6M.js} +2 -2
  31. package/dist/{chunk-DQBCO2UY.js → chunk-B7PBSLZN.js} +2 -2
  32. package/dist/chunk-BBW6JFHN.js +2 -0
  33. package/dist/{chunk-YTVWB7YJ.js → chunk-BDCC2NPY.js} +2 -2
  34. package/dist/{chunk-O23I56NA.js → chunk-BNXCIFVY.js} +2 -2
  35. package/dist/{chunk-MLFZP76A.js → chunk-BPAPWKP6.js} +2 -2
  36. package/dist/chunk-BS2NMXQZ.js +4 -0
  37. package/dist/chunk-C3KV2II6.js +2 -0
  38. package/dist/chunk-C43RDDP4.js +20 -0
  39. package/dist/{chunk-K2WO7XY7.js → chunk-CJST5ETY.js} +2 -2
  40. package/dist/chunk-DAFAHMNB.js +42 -0
  41. package/dist/{chunk-KKME5ZAI.js → chunk-DQGFVPUV.js} +2 -2
  42. package/dist/chunk-DQLPXMH6.js +8 -0
  43. package/dist/chunk-EKZTZXHZ.js +117 -0
  44. package/dist/{chunk-FJ5UDTQF.js → chunk-EN3O7VJA.js} +2 -2
  45. package/dist/{chunk-HZYDQPNY.js → chunk-EW2NTSFA.js} +2 -2
  46. package/dist/chunk-F3Z4OUDS.js +8 -0
  47. package/dist/chunk-FJH2NW7J.js +66 -0
  48. package/dist/{chunk-MSBDMFER.js → chunk-FKSELJQF.js} +2 -2
  49. package/dist/chunk-FTFP6O3L.js +11 -0
  50. package/dist/chunk-FYLK2DEJ.js +2 -0
  51. package/dist/{chunk-WUW7YUAH.js → chunk-GH74ASD6.js} +2 -2
  52. package/dist/{chunk-464PLI5O.js → chunk-GMXWZP2B.js} +2 -2
  53. package/dist/chunk-GOUBFH5O.js +3 -0
  54. package/dist/{chunk-FIJCV235.js → chunk-HLF2TX6R.js} +2 -2
  55. package/dist/{chunk-WWKWUPSU.js → chunk-HX4GQPZP.js} +2 -2
  56. package/dist/chunk-HX7M4BDI.js +30 -0
  57. package/dist/chunk-HZ72SESS.js +128 -0
  58. package/dist/{chunk-SERUIGV5.js → chunk-IB2N4FIY.js} +2 -2
  59. package/dist/chunk-ILMHV3KM.js +2 -0
  60. package/dist/chunk-IZYYAFN5.js +2 -0
  61. package/dist/{chunk-GNC4JVAN.js → chunk-JAYYFEQY.js} +2 -2
  62. package/dist/{chunk-QJIVBYEK.js → chunk-JDOEX4E6.js} +2 -2
  63. package/dist/chunk-JFGGXWQF.js +947 -0
  64. package/dist/chunk-JN4NMBEX.js +8 -0
  65. package/dist/{chunk-6M7RONVB.js → chunk-JVYA47YU.js} +2 -2
  66. package/dist/{chunk-7KYNAMMH.js → chunk-JW56N3KI.js} +2 -2
  67. package/dist/{chunk-OUBAF226.js → chunk-JZ2OXNWB.js} +2 -2
  68. package/dist/chunk-KMKTIO2G.js +8 -0
  69. package/dist/chunk-L5GJNV2T.js +8 -0
  70. package/dist/{chunk-MNSTUIDD.js → chunk-L7AW2QB5.js} +2 -2
  71. package/dist/chunk-L7JDSCDF.js +4 -0
  72. package/dist/chunk-LU47HG23.js +14 -0
  73. package/dist/chunk-LVY7NPF7.js +2 -0
  74. package/dist/chunk-LY4WC4AD.js +74 -0
  75. package/dist/{chunk-7FT5Y65S.js → chunk-MKCDWWGV.js} +2 -2
  76. package/dist/chunk-MNE7YG56.js +2 -0
  77. package/dist/{chunk-7QHY3H7P.js → chunk-MRXBEXSY.js} +2 -2
  78. package/dist/chunk-MV7OWDUX.js +2 -0
  79. package/dist/{chunk-ZJ5CBXK3.js → chunk-N5W4YZMK.js} +2 -2
  80. package/dist/chunk-NGEXCJJW.js +11 -0
  81. package/dist/{chunk-7SWJEWJF.js → chunk-NIW6JDC5.js} +2 -2
  82. package/dist/{chunk-O3O4XXO6.js → chunk-O64IZ6UX.js} +2 -2
  83. package/dist/{chunk-3ZSJ3PWF.js → chunk-PBUQFCNB.js} +2 -2
  84. package/dist/{chunk-7RAG65VK.js → chunk-POAVPHH7.js} +2 -2
  85. package/dist/{chunk-A3QXWFBK.js → chunk-PQCI4SQX.js} +2 -2
  86. package/dist/{chunk-4BV4QAZJ.js → chunk-PXY7F6Y4.js} +2 -2
  87. package/dist/chunk-RDO52JGY.js +2 -0
  88. package/dist/chunk-RJT3TUUZ.js +2 -0
  89. package/dist/{chunk-S4S2WOIX.js → chunk-RUJURYSV.js} +2 -2
  90. package/dist/{chunk-JAY7YWS3.js → chunk-RVLDN63O.js} +2 -2
  91. package/dist/chunk-RXOXSKY3.js +2 -0
  92. package/dist/chunk-S7OYBOCK.js +2 -0
  93. package/dist/chunk-SMNXQT5Z.js +3 -0
  94. package/dist/{chunk-NE3TZUCI.js → chunk-SRAFT254.js} +2 -2
  95. package/dist/{chunk-ELLMY7XJ.js → chunk-SXP2MBJH.js} +2 -2
  96. package/dist/chunk-T7YQSHPQ.js +3 -0
  97. package/dist/{chunk-WY45BHKQ.js → chunk-TFRAYKN6.js} +2 -2
  98. package/dist/{chunk-2SNGN6U4.js → chunk-UJCOIXDY.js} +2 -2
  99. package/dist/{chunk-MZZBAITE.js → chunk-UJPRPGCO.js} +2 -2
  100. package/dist/chunk-W4ETQAXM.js +2 -0
  101. package/dist/chunk-WCCFZ7V7.js +113 -0
  102. package/dist/chunk-WUPW3UN3.js +3 -0
  103. package/dist/{chunk-7LSVMFX7.js → chunk-WXZLAAWK.js} +2 -2
  104. package/dist/{chunk-5ML2BNRH.js → chunk-X54AGLVX.js} +2 -2
  105. package/dist/chunk-XKWKXZKW.js +20 -0
  106. package/dist/{chunk-5YLUDDAF.js → chunk-XSRF6Q77.js} +2 -2
  107. package/dist/chunk-Y2MVPNKY.js +5 -0
  108. package/dist/{chunk-JHF3E4YM.js → chunk-YKUU5AIC.js} +2 -2
  109. package/dist/{chunk-E3HYEQO7.js → chunk-YLCJLTPL.js} +2 -2
  110. package/dist/{chunk-7VCOXZH3.js → chunk-YTQVETEO.js} +2 -2
  111. package/dist/chunk-Z4N3MZYA.js +38 -0
  112. package/dist/chunk-ZHXX42OH.js +18 -0
  113. package/dist/chunk-ZJOOT3BG.js +2 -0
  114. package/dist/{chunk-P3UO3EH3.js → chunk-ZK26BAQL.js} +2 -2
  115. package/dist/{chunk-33KUO7CG.js → chunk-ZTETIQ35.js} +2 -2
  116. package/dist/cli.js +3 -8
  117. package/dist/command-descriptors-DSS46KXI.js +642 -0
  118. package/dist/{config-types-B6MEoRNy.d.ts → config-types-jVM3D7MA.d.ts} +68 -2
  119. package/dist/{db-DYLKr9Wn.d.ts → db-B5PM5yNk.d.ts} +20 -2
  120. package/dist/{diff-gate-types-C9BoYwYD.d.ts → diff-gate-types-B0QYpDv1.d.ts} +2 -1
  121. package/dist/direct-navigation-6YHV6IB5.js +3 -0
  122. package/dist/{health-DgxIDXJC.d.ts → health-Do5TKSJI.d.ts} +1 -1
  123. package/dist/index.d.ts +3 -3
  124. package/dist/index.js +1 -1
  125. package/dist/postinstall.js +1 -1
  126. package/dist/queries/affected.d.ts +2 -2
  127. package/dist/queries/affected.js +1 -1
  128. package/dist/queries/architecture.d.ts +2 -2
  129. package/dist/queries/architecture.js +1 -1
  130. package/dist/queries/bottlenecks.d.ts +2 -2
  131. package/dist/queries/bottlenecks.js +1 -1
  132. package/dist/queries/by-kind.d.ts +2 -2
  133. package/dist/queries/by-kind.js +1 -1
  134. package/dist/queries/call-graph.d.ts +2 -2
  135. package/dist/queries/call-graph.js +1 -1
  136. package/dist/queries/change-surface.d.ts +22 -3
  137. package/dist/queries/change-surface.js +1 -1
  138. package/dist/queries/cleanup-plan.d.ts +2 -2
  139. package/dist/queries/cleanup-plan.js +1 -1
  140. package/dist/queries/co-change.d.ts +2 -2
  141. package/dist/queries/co-change.js +1 -1
  142. package/dist/queries/code.d.ts +2 -2
  143. package/dist/queries/code.js +1 -1
  144. package/dist/queries/complexity-hotspots.d.ts +3 -3
  145. package/dist/queries/complexity-hotspots.js +1 -1
  146. package/dist/queries/complexity.d.ts +3 -3
  147. package/dist/queries/complexity.js +1 -1
  148. package/dist/queries/convergence.d.ts +2 -2
  149. package/dist/queries/convergence.js +1 -1
  150. package/dist/queries/coupling.d.ts +2 -2
  151. package/dist/queries/coupling.js +1 -1
  152. package/dist/queries/cycles.d.ts +2 -2
  153. package/dist/queries/cycles.js +1 -1
  154. package/dist/queries/dataflow.d.ts +2 -2
  155. package/dist/queries/dataflow.js +1 -1
  156. package/dist/queries/dead.d.ts +2 -2
  157. package/dist/queries/dead.js +1 -1
  158. package/dist/queries/decorative-checkers.d.ts +2 -2
  159. package/dist/queries/decorative-checkers.js +1 -1
  160. package/dist/queries/deep-chains.d.ts +2 -2
  161. package/dist/queries/deep-chains.js +1 -1
  162. package/dist/queries/deps.d.ts +2 -2
  163. package/dist/queries/deps.js +1 -1
  164. package/dist/queries/diff-gate.d.ts +40 -7
  165. package/dist/queries/diff-gate.js +1 -1
  166. package/dist/queries/diff-impact.d.ts +84 -6
  167. package/dist/queries/diff-impact.js +1 -1
  168. package/dist/queries/doc-drift.d.ts +3 -3
  169. package/dist/queries/doc-drift.js +1 -1
  170. package/dist/queries/drift.d.ts +2 -2
  171. package/dist/queries/drift.js +1 -1
  172. package/dist/queries/duplicate-bodies.d.ts +3 -3
  173. package/dist/queries/duplicate-bodies.js +1 -1
  174. package/dist/queries/extract-candidates.d.ts +2 -2
  175. package/dist/queries/extract-candidates.js +1 -1
  176. package/dist/queries/fan.d.ts +2 -2
  177. package/dist/queries/fan.js +1 -1
  178. package/dist/queries/files.d.ts +12 -3
  179. package/dist/queries/files.js +1 -1
  180. package/dist/queries/health.d.ts +3 -3
  181. package/dist/queries/health.js +1 -1
  182. package/dist/queries/hierarchy.d.ts +2 -2
  183. package/dist/queries/hierarchy.js +1 -1
  184. package/dist/queries/hotspots.d.ts +2 -2
  185. package/dist/queries/hotspots.js +1 -1
  186. package/dist/queries/imports.d.ts +2 -2
  187. package/dist/queries/imports.js +1 -1
  188. package/dist/queries/incomplete-migration.d.ts +8 -6
  189. package/dist/queries/incomplete-migration.js +1 -1
  190. package/dist/queries/index.d.ts +141 -10
  191. package/dist/queries/index.js +1 -1
  192. package/dist/queries/isolated.d.ts +2 -2
  193. package/dist/queries/isolated.js +1 -1
  194. package/dist/queries/locality-candidates.d.ts +2 -2
  195. package/dist/queries/locality-candidates.js +1 -1
  196. package/dist/queries/members.d.ts +2 -2
  197. package/dist/queries/members.js +1 -1
  198. package/dist/queries/methods.d.ts +34 -3
  199. package/dist/queries/methods.js +1 -1
  200. package/dist/queries/not-implemented.d.ts +2 -2
  201. package/dist/queries/not-implemented.js +1 -1
  202. package/dist/queries/outline.d.ts +2 -2
  203. package/dist/queries/outline.js +1 -1
  204. package/dist/queries/passthrough-candidates.d.ts +3 -3
  205. package/dist/queries/passthrough-candidates.js +1 -1
  206. package/dist/queries/plan-context.d.ts +3 -3
  207. package/dist/queries/plan-context.js +1 -1
  208. package/dist/queries/react-component-duplicates.d.ts +2 -2
  209. package/dist/queries/react-component-duplicates.js +1 -1
  210. package/dist/queries/react-hook-candidates.d.ts +2 -2
  211. package/dist/queries/react-hook-candidates.js +1 -1
  212. package/dist/queries/react-large-component-pressure.d.ts +2 -2
  213. package/dist/queries/react-large-component-pressure.js +1 -1
  214. package/dist/queries/recent-duplicates.d.ts +2 -2
  215. package/dist/queries/recent-duplicates.js +1 -1
  216. package/dist/queries/redundant-reexports.d.ts +2 -2
  217. package/dist/queries/redundant-reexports.js +1 -1
  218. package/dist/queries/refs.d.ts +2 -2
  219. package/dist/queries/refs.js +1 -1
  220. package/dist/queries/self-audit.d.ts +2 -2
  221. package/dist/queries/self-audit.js +1 -1
  222. package/dist/queries/similar-chains.d.ts +2 -2
  223. package/dist/queries/similar-chains.js +1 -1
  224. package/dist/queries/similar-files.d.ts +2 -2
  225. package/dist/queries/similar-files.js +1 -1
  226. package/dist/queries/similar-signatures.d.ts +2 -2
  227. package/dist/queries/similar-signatures.js +1 -1
  228. package/dist/queries/similar.d.ts +2 -2
  229. package/dist/queries/similar.js +1 -1
  230. package/dist/queries/slice.d.ts +2 -2
  231. package/dist/queries/slice.js +1 -1
  232. package/dist/queries/stale-abstractions.d.ts +2 -2
  233. package/dist/queries/stale-abstractions.js +1 -1
  234. package/dist/queries/stats.d.ts +2 -2
  235. package/dist/queries/surface.d.ts +2 -2
  236. package/dist/queries/surface.js +1 -1
  237. package/dist/queries/symbols.d.ts +2 -2
  238. package/dist/queries/symbols.js +1 -1
  239. package/dist/queries/system.d.ts +2 -2
  240. package/dist/queries/system.js +1 -1
  241. package/dist/queries/test-quality.d.ts +2 -2
  242. package/dist/queries/test-quality.js +1 -1
  243. package/dist/queries/trace.d.ts +2 -2
  244. package/dist/queries/trace.js +1 -1
  245. package/dist/queries/twin-ab.d.ts +14 -3
  246. package/dist/queries/twin-ab.js +1 -1
  247. package/dist/queries/twin-drift.d.ts +2 -2
  248. package/dist/queries/twin-drift.js +1 -1
  249. package/dist/queries/unused-imports.d.ts +2 -2
  250. package/dist/queries/unused-imports.js +1 -1
  251. package/dist/queries/unused-params.d.ts +2 -2
  252. package/dist/queries/unused-params.js +1 -1
  253. package/dist/queries/vue-component-duplicates.d.ts +2 -2
  254. package/dist/queries/vue-component-duplicates.js +1 -1
  255. package/dist/queries/vue-composable-candidates.d.ts +2 -2
  256. package/dist/queries/vue-composable-candidates.js +1 -1
  257. package/dist/queries/vue-large-view-pressure.d.ts +2 -2
  258. package/dist/queries/vue-large-view-pressure.js +1 -1
  259. package/dist/queries/wrapper-candidates.d.ts +2 -2
  260. package/dist/queries/wrapper-candidates.js +1 -1
  261. package/dist/reindex-worker.js +21 -21
  262. package/dist/reindex.d.ts +3 -3
  263. package/dist/reindex.js +33 -33
  264. package/dist/runtime.d.ts +5 -3
  265. package/dist/runtime.js +3 -3
  266. package/dist/rust-semantic-session-server.js +1 -1
  267. package/dist/rust-semantic-session-worker.js +1 -1
  268. package/dist/rust-semantic-worker.js +1 -1
  269. package/dist/{scip-cli-Cc6c00-a.d.ts → scip-cli-BnEwZRLJ.d.ts} +1 -1
  270. package/dist/{symbol-types-BgWU6lhL.d.ts → symbol-types-BIQwfoAx.d.ts} +7 -1
  271. package/dist/typescript-mailbox-worker.js +2 -0
  272. package/dist/watch-server.js +2 -42
  273. package/docs/AGENT_GUIDE.md +13 -6
  274. package/docs/CLI_JSON_OUTPUT.md +110 -22
  275. package/docs/COMMAND_REFERENCE.md +88 -88
  276. package/docs/COMMITTED_RECORD_COMPATIBILITY.md +55 -18
  277. package/docs/DURABILITY.md +88 -38
  278. package/docs/INDEX_GENERATIONS.md +65 -19
  279. package/docs/MAILBOX_LIFECYCLE.md +28 -1
  280. package/docs/REINDEX_METADATA_COMPATIBILITY.md +18 -8
  281. package/docs/SECURITY_MODEL.md +31 -14
  282. package/docs/TELEMETRY_RETENTION.md +11 -4
  283. package/docs/WATCH_REFRESH_REQUESTS.md +34 -21
  284. package/docs/WINDOWS_SIDECAR_RELEASE.md +9 -4
  285. package/docs/analyzer-inventory.md +31 -22
  286. package/docs/analyzer-validation-ledger.md +8 -0
  287. package/docs/schemas/outcome-event-record.schema.json +57 -1
  288. package/docs/schemas/project-config.schema.json +82 -1
  289. package/docs/schemas/suppression-record.schema.json +84 -3
  290. package/package.json +5 -5
  291. package/skills/_shared/SKILL.md +2 -2
  292. package/skills/_shared/references/agent-contract-catalog.md +1 -1
  293. package/skills/_shared/references/detector-precision-and-diffgate.md +1 -1
  294. package/skills/scip-audit/SKILL.md +6 -6
  295. package/skills/scip-audit/references/claims.md +1 -1
  296. package/skills/scip-audit/references/cleanup.md +19 -20
  297. package/skills/scip-audit/references/directory.md +4 -4
  298. package/skills/scip-audit/references/frontend.md +10 -10
  299. package/skills/scip-audit/references/twin-drift.md +2 -2
  300. package/skills/scip-diagnose/references/debug.md +8 -8
  301. package/skills/scip-diagnose/references/root-cause.md +3 -3
  302. package/skills/scip-diagnose/references/triage.md +10 -10
  303. package/skills/scip-explore/SKILL.md +3 -3
  304. package/skills/scip-improve/SKILL.md +10 -10
  305. package/skills/scip-improve/references/cleanup-batches.md +3 -3
  306. package/skills/scip-improve/references/directory-moves.md +3 -3
  307. package/skills/scip-improve/references/doc-reconcile.md +1 -1
  308. package/skills/scip-improve/references/frontend-extraction.md +2 -2
  309. package/skills/scip-improve/references/twin-drift.md +3 -3
  310. package/skills/scip-plan/SKILL.md +2 -2
  311. package/skills/scip-plan/references/api-impact.md +5 -5
  312. package/skills/scip-plan/references/conductor.md +2 -2
  313. package/skills/scip-plan/references/hyper-optimization.md +1 -1
  314. package/skills/scip-query/SKILL.md +15 -5
  315. package/skills/scip-setup/references/bootstrap-workflow.md +7 -8
  316. package/skills/scip-setup/references/language-verification.md +2 -2
  317. package/skills/scip-setup/references/per-repo-triage.md +1 -1
  318. package/skills/scip-verify/SKILL.md +10 -10
  319. package/skills/scip-verify/references/calibrate-detectors.md +7 -7
  320. package/dist/chunk-2465DLHK.js +0 -3
  321. package/dist/chunk-2U3OLUNJ.js +0 -61
  322. package/dist/chunk-33XTHFKR.js +0 -2
  323. package/dist/chunk-43KC6EQZ.js +0 -2
  324. package/dist/chunk-47BU5Z4T.js +0 -8
  325. package/dist/chunk-4YTUWQ6M.js +0 -18
  326. package/dist/chunk-64MNV6AB.js +0 -8
  327. package/dist/chunk-67QRR5YC.js +0 -6
  328. package/dist/chunk-6GXYN7YA.js +0 -40
  329. package/dist/chunk-A2TNXAXO.js +0 -8
  330. package/dist/chunk-APMMR5Y2.js +0 -2
  331. package/dist/chunk-AZFUMCQB.js +0 -2
  332. package/dist/chunk-BNXICU42.js +0 -33
  333. package/dist/chunk-C5Q44Q5D.js +0 -3
  334. package/dist/chunk-DQGSM7RZ.js +0 -20
  335. package/dist/chunk-E2LAW7SL.js +0 -30
  336. package/dist/chunk-E4NFOAD4.js +0 -6
  337. package/dist/chunk-E5HNT4X2.js +0 -3
  338. package/dist/chunk-FD3HFKXR.js +0 -5
  339. package/dist/chunk-GHKEJTCE.js +0 -35
  340. package/dist/chunk-GLZTVKAB.js +0 -16
  341. package/dist/chunk-HIB452NU.js +0 -949
  342. package/dist/chunk-IF6FP6B2.js +0 -66
  343. package/dist/chunk-JORHF5AL.js +0 -108
  344. package/dist/chunk-KSGTULOS.js +0 -9
  345. package/dist/chunk-KXDJAG4N.js +0 -38
  346. package/dist/chunk-L4S2A7BV.js +0 -2
  347. package/dist/chunk-LP3ARJKF.js +0 -8
  348. package/dist/chunk-LSOR3LQG.js +0 -3
  349. package/dist/chunk-NTUMF2X3.js +0 -56
  350. package/dist/chunk-QOXBSI6G.js +0 -20
  351. package/dist/chunk-QXK6UUSM.js +0 -2
  352. package/dist/chunk-RA3AYNWP.js +0 -112
  353. package/dist/chunk-RJMDJR3A.js +0 -2
  354. package/dist/chunk-RLH5VUMG.js +0 -2
  355. package/dist/chunk-SMQWE25B.js +0 -3
  356. package/dist/chunk-TAVELHYR.js +0 -2
  357. package/dist/chunk-VAXNI5NE.js +0 -146
  358. package/dist/chunk-VVY2G5ET.js +0 -2
  359. package/dist/chunk-W3DBTGL4.js +0 -11
  360. package/dist/chunk-WANA4KAQ.js +0 -5
  361. package/dist/chunk-X4FR5BZF.js +0 -9
  362. package/dist/chunk-X6RKPDY7.js +0 -2
  363. package/dist/chunk-YCPASUCX.js +0 -2
  364. package/dist/chunk-ZL2OGDCD.js +0 -2
  365. package/dist/command-descriptors-ZW5J4ZEM.js +0 -631
  366. package/dist/direct-navigation-42YHQPOI.js +0 -3
@@ -23,6 +23,10 @@ The worktree cache keeps this internal layout:
23
23
  meta.json compatibility mirror
24
24
  .scipquery-generations/
25
25
  state.json atomic current-generation pointer
26
+ gc.json last bounded-collection observation
27
+ gc.lock collection/reader-admission coordinator
28
+ readers/
29
+ <pid>-<token>.json live process-generation leases
26
30
  <generation-sha256>/
27
31
  manifest.json
28
32
  index.db
@@ -30,11 +34,19 @@ The worktree cache keeps this internal layout:
30
34
  meta.json
31
35
  ```
32
36
 
33
- The files inside a named generation directory are immutable. The SHA-256
37
+ The files inside a named generation directory are immutable. Their final
38
+ read-only mode is applied before their final file synchronization, so the
39
+ persisted inode contains both the accepted bytes and the protection metadata.
40
+ The SHA-256
34
41
  identity incorporates the database bytes, SCIP bytes when present, and the
35
42
  generation-bearing metadata fields. `manifest.json` records the exact size and
36
43
  digest of each stored artifact. `state.json` names the accepted directory and
37
44
  is the only publication decision read by internal database consumers.
45
+ Opening a named generation authenticates the database, SCIP, and metadata
46
+ bytes against those digests; matching size alone is never sufficient. A
47
+ bounded process-local validation cache is keyed by manifest identity plus
48
+ stable device, inode, size, modification-time, and change-time evidence, so a
49
+ same-size mutation invalidates the cached proof and is rehashed.
38
50
 
39
51
  The top-level files remain for the SCIP CLI, indexers, older scip-query
40
52
  versions, and external inspection. They are derived mirrors, not the internal
@@ -48,18 +60,26 @@ Publication proceeds in this order:
48
60
 
49
61
  1. Retain the previously published stable artifacts as an immutable
50
62
  generation when upgrading a legacy cache.
51
- 2. Copy-on-write clone or copy every accepted candidate artifact into a
52
- private staging directory.
53
- 3. Flush the artifact files and manifest, rename the complete staging
54
- directory into its content-derived identity, and flush the generation
63
+ 2. Durably establish `.scipquery-generations/` from its nearest existing
64
+ ancestor when this is the cache's first generation.
65
+ 3. Copy-on-write clone or copy every accepted candidate artifact into a
66
+ private staging directory, apply its final read-only mode, and flush the
67
+ resulting inode.
68
+ 4. Flush the manifest and staging namespace, rename the complete staging
69
+ directory into its content-derived identity, and flush the generation-root
55
70
  directory entry.
56
- 4. Durably replace `state.json` so new internal readers select the complete
71
+ 5. Establish the versioned query layout after augmentation: add the
72
+ definition-only covering index, remove known redundant indexes only when
73
+ schema inspection proves a retained equivalent, and run `ANALYZE` so the
74
+ planner sees the final row distribution. Query-plan tests hold those
75
+ proofs.
76
+ 6. Durably replace `state.json` so new internal readers select the complete
57
77
  new directory.
58
- 5. Replace the three compatibility mirrors and durably record their file
78
+ 7. Replace the three compatibility mirrors and durably record their file
59
79
  identities for drift diagnostics.
60
80
 
61
- A crash before step 4 leaves the prior pointer authoritative. A crash after
62
- step 4 leaves the new immutable generation authoritative even if one or more
81
+ A crash before step 6 leaves the prior pointer authoritative. A crash after
82
+ the pointer step leaves the new immutable generation authoritative even if one or more
63
83
  compatibility mirrors are old. `scip-query status` and freshness inspection
64
84
  report that mirror drift and a later refresh repairs it; database-backed
65
85
  queries remain generation-consistent throughout.
@@ -70,6 +90,14 @@ and TypeScript semantic mailbox requests carry the handle identity, so a
70
90
  continuation or numeric symbol identifier from an older generation is rejected
71
91
  when a service has moved to a newer one.
72
92
 
93
+ Current metadata also records `sqliteLayoutVersion`. A current-version
94
+ metadata record that predates this field remains readable and can reuse its
95
+ language SCIP shards, but it cannot take the whole-SQLite unchanged fast path.
96
+ The next refresh applies query-layout maintenance to the stable mirror,
97
+ publishes a new immutable generation and current layout metadata, and does not
98
+ rerun unchanged language indexers. Later unchanged refreshes resume the
99
+ ordinary whole-generation reuse path.
100
+
73
101
  Mailbox protocol version 3 additionally binds that generation identity into a
74
102
  content-derived logical-operation key. The deterministic request ID lets a
75
103
  retry join an already pending, inflight, or retained completed operation,
@@ -86,18 +114,36 @@ generation implementation, which did not name an immutable artifact set, also
86
114
  uses this compatibility path. New publications upgrade either layout without
87
115
  deleting the stable files.
88
116
 
89
- Published local generation directories are retained conservatively. Automatic
90
- collection is intentionally disabled until a cross-process reader lease can
91
- prove that no surviving handle can later need the retained SCIP companion.
92
- This can temporarily consume more cache space, but it preserves the stronger
93
- rule that storage reclamation may never change or remove evidence owned by a
94
- live query.
117
+ Published local generation directories are retained by a bounded,
118
+ reader-aware collector. Opening an immutable `ScipDatabase` first acquires the
119
+ generation GC lock, resolves the current pointer, and visibility-atomically
120
+ publishes a lease containing its random token, generation identity, PID, and
121
+ operating-system process-start identity when available. Closing the database
122
+ removes that exact lease idempotently.
123
+
124
+ Publication and collection use the same token-owned process lock. Collection
125
+ always protects the current generation, the named recovery generation, and
126
+ every live reader generation. It removes only oldest unprotected generations
127
+ until both default limits hold: at most eight retained generations and at most
128
+ 2 GiB of logical artifact bytes. A lease whose recorded process instance is
129
+ provably dead is reclaimed. A malformed lease protects every generation and
130
+ defers deletion; uncertainty cannot authorize reclamation.
131
+
132
+ `gc.json` is a visibility-atomic diagnostic containing retained counts, logical
133
+ bytes, protected/readers counts, removed counts, limits, state, time, and any
134
+ reason. `scip-query status` reports that observation together with the current
135
+ retained set and oldest generation age. Collection failure does not invalidate
136
+ the accepted index; it remains explicit bounded-storage debt for the operator.
95
137
 
96
138
  The repository-wide shared generation store is a separate cache layer. It
97
- warms a worktree by copying a complete generation into the worktree's private
98
- cache; the local publisher then creates the local immutable directory and
99
- pointer described here. Later worktree writes cannot mutate either the shared
100
- source or a retained local reader.
139
+ warms a worktree from a complete content-addressed generation. Publication
140
+ flushes each final read-only artifact, the manifest, the staging namespace, the
141
+ rename into `generations/<identity>`, and `generations/` itself before
142
+ returning `directory-durable` on supported hosts. On a host without directory
143
+ sync, it returns `file-flushed`; readers still rehash every artifact and reject
144
+ an incomplete generation. The local publisher then creates the private
145
+ immutable directory and pointer described here. Later worktree writes cannot
146
+ mutate either the shared source or a retained local reader.
101
147
 
102
148
  ## Shared worktree lease invariant
103
149
 
@@ -122,7 +122,12 @@ boundaries.
122
122
  A claim is a time-bounded service ownership record made real by renaming one
123
123
  pending file into an owner-specific inflight directory. Rename is the
124
124
  ownership compare-and-set: only the process whose rename succeeds owns that
125
- file. The directory's owner record binds the random owner ID to a PID and,
125
+ file. Before a first claim can remove the pending name, the service durably
126
+ establishes the fixed mailbox skeleton, creates the owner directory, and
127
+ flushes `inflight/` so the complete destination path survives. It then writes
128
+ the owner record, renames the request, flushes the source directory, and
129
+ flushes the owner directory in that order. The directory's owner record binds
130
+ the random owner ID to a PID and,
126
131
  when the operating system exposes it, a process-start identity. A process-start
127
132
  identity is the operating-system fact that distinguishes successive
128
133
  executions occupying the same numeric PID slot.
@@ -147,6 +152,14 @@ answer-affecting operations are read-only or rebuildable, the response
147
152
  identity is stable, and exclusive completion remains a final defense against
148
153
  two observable answers.
149
154
 
155
+ Accepted admission and successful claims expose the achieved directory-sync
156
+ result. On POSIX hosts that complete every directory flush this is
157
+ `directory-durable`. When Node reports directory handles unsupported on
158
+ Windows, it is `file-flushed`: complete file bytes and process-crash recovery
159
+ remain, but the protocol does not upgrade that bounded result into a
160
+ machine-crash namespace claim. Any other directory synchronization error
161
+ throws instead of acknowledging the transition.
162
+
150
163
  ## Fairness and maintenance
151
164
 
152
165
  Pending work is ordered by `enqueuedAtMs`, then stable request identity.
@@ -158,6 +171,19 @@ at most 64 removals or reclaims. Those caps are what let the watch and Rust
158
171
  server loops regain control to update heartbeats, observe stop signals, and
159
172
  run unrelated maintenance even when a mailbox was flooded.
160
173
 
174
+ The TypeScript watch service initializes its two mailbox layouts once after
175
+ acquiring service ownership. An empty poll reads the already-established
176
+ directories; it does not recreate or chmod the full layout. Consecutive empty
177
+ polls back off from 50 ms through 100 ms and 200 ms to a 250 ms ceiling. A poll
178
+ that processes work returns to a 10 ms drain interval. The Rust service uses
179
+ the same 10–250 ms adaptive range.
180
+
181
+ Deadline authority is re-evaluated per claimed request. A service reads its
182
+ clock immediately before starting each handler and again after the handler
183
+ returns. Therefore a request that expires while an earlier request runs is
184
+ rejected before execution, and an answer completed after its authoritative
185
+ deadline is not published as success.
186
+
161
187
  Maintenance:
162
188
 
163
189
  - reclaims expired inflight ownership only after the recorded process instance
@@ -190,6 +216,7 @@ window. Clock-domain rules for these records are documented in
190
216
  Focused contract coverage lives in:
191
217
 
192
218
  - `tests/storage/bounded-mailbox.test.ts`;
219
+ - `tests/storage/atomic-file-crash.test.ts`;
193
220
  - `tests/semantic/typescript/typescript-session-mailbox.test.ts`;
194
221
  - `tests/reindex/typescript-index-mailbox.test.ts`;
195
222
  - `tests/semantic/rust/durable-session-protocol.test.ts`;
@@ -7,7 +7,7 @@ record rather than an authority by itself: a consumer still verifies the
7
7
  database, SCIP companion, immutable-generation state, or current source
8
8
  fingerprint required by its operation.
9
9
 
10
- `src/domain/reindex-metadata.ts` is the dependency-free decoding boundary. It
10
+ `src/domain/reindex-metadata.ts` is the domain decoding boundary. It
11
11
  classifies an input as:
12
12
 
13
13
  - `legacy`: a structurally valid version 2 record;
@@ -38,12 +38,20 @@ Future records are never rewritten.
38
38
 
39
39
  Recognized versions validate `status`, optional timestamp,
40
40
  requested/indexed language sets, skipped-language rows, SCIP companion state,
41
- and v3 shard maps. A fingerprint is an opaque JSON identity for evidence and
42
- stable-generation compatibility, preserving the pre-decoder v2/v3 contract;
43
- freshness and publication additionally require it to be an object. Language
44
- lists contain unique names from the same
41
+ the optional positive `sqliteLayoutVersion`, and v3 shard maps. A fingerprint
42
+ is an opaque JSON identity for evidence and stable-generation compatibility,
43
+ preserving the pre-decoder v2/v3 contract; freshness and publication
44
+ additionally require it to be an object. Language lists contain unique names
45
+ from the same
45
46
  `SUPPORTED_LANGUAGES` catalog used by configuration.
46
47
 
48
+ The SQLite layout field is an additive v3 upgrade boundary rather than a wire
49
+ version migration. A v3 record without it remains queryable, evidence-usable,
50
+ and eligible for language-shard reuse. It is not eligible for whole-SQLite
51
+ unchanged reuse. The next refresh can therefore reuse unchanged language SCIP
52
+ shards, establish the current post-conversion indexes and planner statistics,
53
+ and publish a new generation without rerunning those indexers.
54
+
47
55
  ## Capability matrix
48
56
 
49
57
  A capability is a named permission to interpret a decoded record for one
@@ -62,14 +70,16 @@ the same version while intentionally requiring different completeness.
62
70
  Consumer-specific comparisons happen only after this matrix accepts the
63
71
  record:
64
72
 
65
- - freshness and unchanged-index reuse compare a publishable fingerprint and
66
- sorted indexed languages with current inputs;
73
+ - freshness compares a publishable fingerprint and sorted indexed languages
74
+ with current inputs; whole-SQLite unchanged reuse additionally requires the
75
+ current `sqliteLayoutVersion`;
67
76
  - shared-generation publication additionally verifies the immutable artifact
68
77
  set, project root, and database integrity;
69
78
  - evidence and TypeScript semantic cache keys accept complete or partial
70
79
  records and include status, so partial and complete results cannot collide;
71
80
  - SQLite and TypeScript service generation identities use the same canonical
72
- projection and reject records without stable-identity capability;
81
+ projection, including `sqliteLayoutVersion` when present, and reject records
82
+ without stable-identity capability;
73
83
  - per-language and per-project reuse compare the decoded v3 shard
74
84
  fingerprints with current fingerprints and require the corresponding shard
75
85
  file to exist.
@@ -76,20 +76,28 @@ Every command accepts:
76
76
  ```
77
77
 
78
78
  The opaque cursor binds the command, working directory, non-pagination
79
- arguments, next character offset, private output snapshot, and complete output
80
- hash. The first invocation streams the output to current-user temporary
81
- storage with private permissions while retaining only one page in memory.
82
- Continuations read that immutable snapshot instead of re-running a command
83
- whose timestamps or durations may change. Snapshots expire after one hour and
84
- are removed after the final page; an unavailable snapshot produces the exact
85
- page-one restart command.
86
-
87
- Continue until `page.complete` is `true`. Do not pipe output through `head`,
88
- `tail`, or a line-range `sed`; those programs discard data without creating a
89
- resumable position. Every incomplete JSON page repeats this obligation in
90
- `agentInstruction`; an incomplete page must not support a conclusion or
91
- completion claim. See [CLI JSON output](CLI_JSON_OUTPUT.md) and the
92
- [output-page schema](schemas/cli-output-page.schema.json).
79
+ arguments, immutable page number and size, private output snapshot, and
80
+ complete output hash. The first invocation records UTF-8 byte ranges and a
81
+ hash for each page while retaining only one page in memory. A continuation
82
+ reads and verifies only its own range instead of re-running the command or
83
+ rescanning the complete output.
84
+
85
+ One snapshot is limited to 32 million rendered characters, 64 MiB, and 32,768
86
+ pages. The current user's snapshot pool is limited to 32 snapshots and 256 MiB
87
+ under a process-identity-aware lock. Abandoned writers are reclaimed without
88
+ removing a live writer; complete snapshots expire after one hour and are
89
+ removed after their final page.
90
+
91
+ Run commands normally without selecting a page size. If human output is
92
+ oversized, the readable multiline page prints one `Continue exactly:` command;
93
+ run it unchanged until the transport-complete marker. That marker proves every
94
+ rendered character was retrieved; command coverage remains a separate claim.
95
+ Explicit paged `--json`
96
+ returns the versioned object envelope and must be followed until
97
+ `page.complete` is `true`. Do not pipe output through `head`, `tail`, or a
98
+ line-range `sed`; those programs discard data without creating a resumable
99
+ position. See [CLI JSON output](CLI_JSON_OUTPUT.md) and the [output-page
100
+ schema](schemas/cli-output-page.schema.json).
93
101
 
94
102
  ## Diff-gate process containment
95
103
 
@@ -105,6 +113,15 @@ parent terminates and reaps that child before releasing the lease. An operator
105
113
  may set `SCIP_QUERY_DIFF_GATE_TIMEOUT_MS` to a positive millisecond value; the
106
114
  runtime caps it at 10 minutes.
107
115
 
116
+ The parent creates a unique, private progress path and one-run token while it
117
+ owns the lease. The child visibility-atomically records the current gate phase
118
+ and detector immediately before and after each detector. A timed-out parent
119
+ accepts only the record carrying its token, reports the active detector or
120
+ phase plus the last completed detector, and removes the record before releasing
121
+ the lease. The progress record is diagnostic evidence, not authority: failure
122
+ to write it cannot turn a passing gate into a failure, and a stale or malformed
123
+ record cannot alter the gate result.
124
+
108
125
  Outcome reconciliation rechecks at most one historical comparison base per
109
126
  gate. Deferred bases remain open and the result reports their exact base and
110
127
  finding counts, so accumulated event history cannot silently multiply one
@@ -58,10 +58,17 @@ mailbox-response, and release records use their own durable protocols.
58
58
 
59
59
  Lock timeout and ownership-changed release are typed failures at the shared
60
60
  helper boundary. The reindex-activity and affected-shadow production writers
61
- remain best effort: they catch telemetry failure so an observation cannot
62
- change the authoritative reindex result. Callers that invoke the shared helper
63
- directly can distinguish lock timeout, count repaired tail bytes, and count
64
- partial bytes ignored during reads.
61
+ remain best effort: telemetry failure cannot change the authoritative reindex
62
+ result. A reindex-activity writer returns either `recorded` or `failed` with a
63
+ reason; reindex, foreground watch, and daemon watch surface that failure as a
64
+ warning or watch-state error rather than silently losing the observation.
65
+
66
+ A retained-set summary carries an activity-confidence state. `complete` means
67
+ every selected non-empty record decoded; `partial` means a valid subset was
68
+ used while exact invalid/skipped/read-error or incomplete-tail counts are
69
+ reported; `unavailable` means no reliable summary could be formed. The summary
70
+ also exposes records read and ignored partial-tail bytes, so consumers can
71
+ distinguish zero activity from missing evidence.
65
72
 
66
73
  The regression suite forces:
67
74
 
@@ -21,10 +21,15 @@ A claim is an exclusive processing marker for that admitted request. A
21
21
  completion is a durable receipt proving that the attempt associated with the
22
22
  claim finished successfully, or that the request expired before execution.
23
23
 
24
- These records provide at-least-once execution for an accepted, unexpired
25
- request. At-least-once execution means a crash after reindex success but before
26
- the completion receipt may repeat the safe reindex operation; it never means an
27
- unacknowledged request can disappear.
24
+ On hosts that support directory synchronization, these records provide
25
+ at-least-once execution across process, operating-system, and machine failure
26
+ for an accepted, unexpired request. At-least-once execution means a crash after
27
+ reindex success but before the completion receipt may repeat the safe reindex
28
+ operation; it never means an acknowledged request can disappear. On Windows
29
+ hosts where Node cannot synchronize directory handles, admission reports
30
+ `achievedDurability: "file-flushed"` and `directorySync: "unsupported"`:
31
+ process-crash recovery remains intact, but the stronger machine-crash
32
+ namespace guarantee is not claimed.
28
33
 
29
34
  ## Layout
30
35
 
@@ -52,18 +57,22 @@ deadline remain authoritative.
52
57
 
53
58
  ## Lifecycle
54
59
 
55
- 1. The requester durably writes a complete staging record.
56
- 2. It exclusively links that record into `requests/`. A collision is a
60
+ 1. The requester durably establishes the protocol root, `staging/`, and the
61
+ target record directory from the nearest existing ancestor.
62
+ 2. It writes and flushes a complete staging record.
63
+ 3. It exclusively links that record into `requests/`. A collision is a
57
64
  duplicate, not an overwrite.
58
- 3. The watch server, while holding the project watch lock, claims pending,
65
+ 4. It flushes `requests/` before returning accepted and reports the achieved
66
+ platform guarantee.
67
+ 5. The watch server, while holding the project watch lock, claims pending,
59
68
  unexpired requests through exclusive claim records.
60
- 4. It deliberately coalesces one claimed batch into one `watch-demand`
69
+ 6. It deliberately coalesces one claimed batch into one `watch-demand`
61
70
  refresh. Requests arriving while the watcher is busy remain pending.
62
- 5. A successful corresponding reindex writes every completion receipt before
71
+ 7. A successful corresponding reindex writes every completion receipt before
63
72
  removing any claim.
64
- 6. A failed reindex removes its claims without writing completion, making the
73
+ 8. A failed reindex removes its claims without writing completion, making the
65
74
  requests pending after a bounded retry delay.
66
- 7. A successor watch server removes predecessor claims only after acquiring
75
+ 9. A successor watch server removes predecessor claims only after acquiring
67
76
  the same exclusive watch lock. Completed requests remain completed; all
68
77
  other claimed requests become pending.
69
78
 
@@ -76,17 +85,21 @@ retention window.
76
85
 
77
86
  ## Crash and Concurrency Outcomes
78
87
 
79
- | Boundary | Observable outcome |
80
- | --- | --- |
81
- | Crash before exclusive admission | No request was accepted; only staging may remain |
88
+ | Boundary | Observable outcome |
89
+ | ------------------------------------------------ | --------------------------------------------------------------------------------------- |
90
+ | Crash before exclusive admission | No request was accepted; only staging may remain |
82
91
  | Crash after admission before caller sees success | Request remains pending; retrying the same idempotency key returns the admitted request |
83
- | Two callers use one idempotency key | Exactly one immutable request wins |
84
- | Two callers use distinct keys | Both requests remain independently visible and may be coalesced deliberately |
85
- | Crash after claim before reindex | Successor clears the stale claim and retries the request |
86
- | Reindex failure | Claim is released; request remains pending |
87
- | Crash after reindex before completion | Request may execute again; it is never lost |
88
- | Crash after completion before claim removal | Completion prevents replay; successor removes the obsolete claim |
89
- | Activity writer races any row above | Activity changes only `watch-activity.json` and cannot modify request state |
92
+ | Two callers use one idempotency key | Exactly one immutable request wins |
93
+ | Two callers use distinct keys | Both requests remain independently visible and may be coalesced deliberately |
94
+ | Crash after claim before reindex | Successor clears the stale claim and retries the request |
95
+ | Reindex failure | Claim is released; request remains pending |
96
+ | Crash after reindex before completion | Request may execute again; it is never lost |
97
+ | Crash after completion before claim removal | Completion prevents replay; successor removes the obsolete claim |
98
+ | Activity writer races any row above | Activity changes only `watch-activity.json` and cannot modify request state |
99
+
100
+ The first two rows are machine-crash claims only when admission returned
101
+ `directory-durable`. A `file-flushed` result is explicit evidence that the
102
+ host could not commit the complete namespace frontier.
90
103
 
91
104
  ## Compatibility and Diagnostics
92
105
 
@@ -234,10 +234,15 @@ both coordinates and repairs only the absent intended package.
234
234
  The path is stable for one pair of package coordinates. Repacking different
235
235
  bytes, using a different source revision, or selecting a different registry
236
236
  under those same versions therefore collides with the existing record and
237
- stops before registry work. The record is atomically replaced with directory
238
- durability while the release lock is owned. It is intentionally ignored by Git
239
- and omitted from the npm package: it is local recovery state, not portable
240
- release authority. The normative shape is
237
+ stops before registry work. The record is atomically replaced while the
238
+ release lock is owned. The coordinator reports `directory-durable` when the
239
+ host synchronizes the containing directory and
240
+ `file-flushed; directory sync unsupported` when Windows exposes only the
241
+ bounded file guarantee; a real synchronization failure aborts the run. It is
242
+ intentionally ignored by Git and omitted from the npm package: it is local
243
+ recovery state, not portable release authority. Fresh registry observation,
244
+ immutable npm versions, and exact package identity remain the external safety
245
+ authority regardless of the local result. The normative shape is
241
246
  `docs/schemas/npm-release-state.schema.json`.
242
247
 
243
248
  Current-schema additive fields are tolerated. Malformed JSON, a wrong
@@ -52,7 +52,7 @@ The declared-coupling config has been refreshed after the inventory surfaced old
52
52
  | `wrapper-candidates` | Small production callables with one real external caller, caller fan-in, and boundary-token evidence | Hygiene | Contextual signal, sometimes direct | Single-caller wrappers can be needless indirection, but may also be names, domain/lifecycle boundaries, test seams, or API shaping. Boundary evidence discounts those without hiding them. |
53
53
  | `passthrough-candidates` | Small production callables with exactly one callee, literal pass-through body, runtime-boundary evidence, public-facade evidence, action tier, recommendation, and score count | Hygiene, with `scoreCount` discount | Direct when no boundary or public-facade evidence is present; contextual signal when either exists | Body-shape gate is real. Boundary evidence distinguishes adapter, provider, public, capability, transport, lifecycle, access-policy, and facade-shaped forwarders; public-facade evidence separately identifies package-public or rooted exported passthroughs. |
54
54
  | `stale-abstractions` | Type-like definitions, real consumers, barrel consumers, transitive reachability, definer usage, confidence, staleness kind, action tier, and recommendation | Hygiene | Direct for unused abstractions; contextual signal for one-consumer ownership rows | `0 consumers` is direct repair. `1 consumer` is contextual, including high-confidence misplaced types, because the repair may be move, inline, keep, or document as public contract. |
55
- | `drift` | File dep graph, symbol ref graph, semantic/source import usage, project-owned architecture report, sibling patterns, action tier, policy basis, recommendation | Hygiene | Split by kind | `unused-import` and grouped `architecture-violation` rows are direct repair. `pattern-deviation` rows are contextual signals and remain excluded from health scoring. Undeclared boundary edges, reciprocity, and connected groups appear only in architecture context. |
55
+ | `drift` | File dep graph, symbol ref graph, semantic/source import usage, project-owned architecture report, sibling patterns, action tier, policy basis, recommendation | Hygiene | Split by kind | `unused-import` and grouped `architecture-violation` rows are direct repair. `pattern-deviation` rows are contextual signals and remain excluded from health scoring. Undeclared boundary edges, reciprocity, and connected groups appear only in architecture context. |
56
56
  | `complexity-hotspots` | Production callable LOC, fan-in, fan-out, callee count | Risk | Direct repair pressure | Complexity pressure usually means refactor, but the current score is structural, not cyclomatic. It should be separate from branch-count complexity. |
57
57
  | `co-change` / hidden coupling | Git co-change pairs, dependency edges, declared couplings, file noise filters, partner-class labels, declared-coupling suggestions, commit scope, recency context, commit-subject context, and score-weighted count | Risk, weighted by history strength | Contextual signal | Strong evidence that coordination may be missing, but not proof that extraction or unification is correct. Partner classes, history context, subject context, and score weighting now separate contract-like focused current pairs from broad, stale, or unlabeled history before suggesting declared coupling. |
58
58
  | Suppression inventory | `scip-query: ignore-*` comments in source, plus structured `.scipquery.json` suppressions | Evidence quality axis | Meta signal | Useful precision feedback. High suppressions should reduce trust or weight for that detector family. Structured file-scoped suppressions now validate path freshness. |
@@ -85,19 +85,19 @@ The declared-coupling config has been refreshed after the inventory surfaced old
85
85
 
86
86
  ## Graph, Risk, and Planning Analyzers
87
87
 
88
- | Analyzer | Evidence examined | Recommended role | Evaluation |
89
- | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
90
- | `affected` | Transitive symbol impact from a changed symbol | Support analysis | Blast-radius map, not smell. |
91
- | `change-surface` | Definitions in a file plus external consumer counts | Support/risk analysis | Pre-change risk briefing. Useful for planning and score context, not a repair. |
92
- | `plan-context` | Trace, references, call graph, dataflow, deps/rdeps, surface, affected, change-surface, complexity, history | Support analysis | Composite planning bundle. It should not contribute smell score directly. |
93
- | `bottlenecks` | Callable fan-in times fan-out, risk kind, action tier, evidence reasons, recommendation | Contextual signal | Good risk hotspot, not automatic refactor. Output now states `signal` and frames central code as coordination risk rather than repair proof. |
94
- | `hotspots` | Most referenced symbols | Support/contextual signal | Identifies choke points. Not a smell alone. |
95
- | `fan-in` / `fan-out` | Reference counts into symbols or out of files | Support analysis | Raw graph metrics. |
96
- | `coupling` | Shared symbols between two files or top coupled pairs, coupling kind, action tier, evidence reasons, recommendation | Contextual signal | May reveal boundary problems, but shared symbols can be intended. Output now makes the coordination-pressure interpretation explicit. |
97
- | `architecture` | Project-owned boundary paths and dependency rules applied to resolved import and re-export edges, with mapping coverage, policy-row coverage, edge breadth, reciprocity, and SCCs | Split by evidence | Forbidden edges, required-but-missing policy rows, cycles under `requireAcyclic`, and boundaries hiding an internal sub-directory cycle under `requireResolvedBoundaries` are direct policy findings. Unmapped files, reciprocity, and advisory cycles remain report-only signals. |
98
- | `deep-chains` | Longest dependency chains after SCC condensation, suffix de-duplication, chain kind, action tier, evidence reasons, recommendation | Contextual signal | Long chains imply propagation risk, but action depends on layers and ownership. Strict suffix duplicates are now removed from top results. |
99
- | `complexity` | Branch count, cyclomatic estimate, callee count, fan-in, fan-out for one symbol | Direct repair pressure | This is closer to the user-specified "cyclomatic complexity" analyzer than `complexity-hotspots`. Should score strongly when branches/cyclomatic exceed thresholds. |
100
- | `self-audit` | Cheap evidence paths checked against TypeScript compiler oracle | Meta analysis | Measures analyzer accuracy. Should guide trust/weight, not code health directly. |
88
+ | Analyzer | Evidence examined | Recommended role | Evaluation |
89
+ | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
90
+ | `affected` | Transitive symbol impact from a changed symbol | Support analysis | Blast-radius map, not smell. |
91
+ | `change-surface` | Definitions in a file plus external consumer counts | Support/risk analysis | Pre-change risk briefing. Useful for planning and score context, not a repair. |
92
+ | `plan-context` | Trace, references, call graph, dataflow, deps/rdeps, surface, affected, change-surface, complexity, history | Support analysis | Composite planning bundle. It should not contribute smell score directly. |
93
+ | `bottlenecks` | Callable fan-in times fan-out, risk kind, action tier, evidence reasons, recommendation | Contextual signal | Good risk hotspot, not automatic refactor. Output now states `signal` and frames central code as coordination risk rather than repair proof. |
94
+ | `hotspots` | Most referenced symbols | Support/contextual signal | Identifies choke points. Not a smell alone. |
95
+ | `fan-in` / `fan-out` | Reference counts into symbols or out of files | Support analysis | Raw graph metrics. |
96
+ | `coupling` | Shared symbols between two files or top coupled pairs, coupling kind, action tier, evidence reasons, recommendation | Contextual signal | May reveal boundary problems, but shared symbols can be intended. Output now makes the coordination-pressure interpretation explicit. |
97
+ | `architecture` | Project-owned boundary paths and dependency rules applied to resolved import and re-export edges, with mapping coverage, policy-row coverage, edge breadth, reciprocity, and SCCs | Split by evidence | Forbidden edges, required-but-missing policy rows, cycles under `requireAcyclic`, and boundaries hiding an internal sub-directory cycle under `requireResolvedBoundaries` are direct policy findings. Unmapped files, reciprocity, and advisory cycles remain report-only signals. |
98
+ | `deep-chains` | Longest dependency chains after SCC condensation, suffix de-duplication, chain kind, action tier, evidence reasons, recommendation | Contextual signal | Long chains imply propagation risk, but action depends on layers and ownership. Strict suffix duplicates are now removed from top results. |
99
+ | `complexity` | Branch count, cyclomatic estimate, callee count, fan-in, fan-out for one symbol | Direct repair pressure | This is closer to the user-specified "cyclomatic complexity" analyzer than `complexity-hotspots`. Should score strongly when branches/cyclomatic exceed thresholds. |
100
+ | `self-audit` | Cheap evidence paths checked against TypeScript compiler oracle | Meta analysis | Measures analyzer accuracy. Should guide trust/weight, not code health directly. |
101
101
 
102
102
  ## Navigation and Evidence Providers
103
103
 
@@ -123,14 +123,14 @@ The codebase already avoids some duplicate analysis by sharing kernels:
123
123
 
124
124
  The remaining conceptual overlap is mostly healthy, but needs product labels:
125
125
 
126
- | Overlap family | Members | Same analysis or distinct? | Recommendation |
127
- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
128
- | Deletability | `dead`, `isolated`, `cleanup-plan`, `redundant-reexports`, `new-dead` | Distinct evidence scopes over the same core question: can this be removed or must it be wired? | Model as one "deletability" action family with subtypes and confidence. |
129
- | Similarity and reuse | `similar`, `similar-files`, `similar-chains`, `similar-signatures`, `convergence`, React/Vue duplicates, `recent-duplicates`, `echo` | Distinct evidence bases. The risk is UX confusion, not implementation duplication. | Keep separate, but expose basis, action tier, and root-cause groups where pairwise rows repeat. |
130
- | Extraction pressure | `extract-candidates`, React/Vue behavior candidates, large component/view pressure, `incomplete-migration` | Different stages: discover seam, detect duplicated behavior, detect excessive size, catch unfinished migration. | Score unfinished migrations higher than discovery leads. |
131
- | Indirection | `wrapper-candidates`, `passthrough-candidates`, `stale-abstractions` | Related but not the same: single caller, literal forwarding, low-consumer types. | Passthrough and wrapper rows now split by boundary evidence; stale should split by confidence. |
132
- | Architecture/history drift | `architecture`, `drift`, `doc-drift`, `co-change`, `co-change-partner`, `doc-reference` | Same broad problem of things moving out of sync, but sources differ. | Explicit architecture rules are direct; co-change remains signal; doc-reference strength depends on citation kind. |
133
- | Graph risk | `architecture`, `fan-in`, `fan-out`, `hotspots`, `bottlenecks`, `coupling`, `deep-chains`, `change-surface`, `affected` | Mostly layered views of graph pressure. | Treat inferred graph shape as support/context; declared forbidden edges and acyclicity violations are direct policy disagreements. |
126
+ | Overlap family | Members | Same analysis or distinct? | Recommendation |
127
+ | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
128
+ | Deletability | `dead`, `isolated`, `cleanup-plan`, `redundant-reexports`, `new-dead` | Distinct evidence scopes over the same core question: can this be removed or must it be wired? | Model as one "deletability" action family with subtypes and confidence. |
129
+ | Similarity and reuse | `similar`, `similar-files`, `similar-chains`, `similar-signatures`, `convergence`, React/Vue duplicates, `recent-duplicates`, `echo` | Distinct evidence bases. The risk is UX confusion, not implementation duplication. | Keep separate, but expose basis, action tier, and root-cause groups where pairwise rows repeat. |
130
+ | Extraction pressure | `extract-candidates`, React/Vue behavior candidates, large component/view pressure, `incomplete-migration` | Different stages: discover seam, detect duplicated behavior, detect excessive size, catch unfinished migration. | Score unfinished migrations higher than discovery leads. |
131
+ | Indirection | `wrapper-candidates`, `passthrough-candidates`, `stale-abstractions` | Related but not the same: single caller, literal forwarding, low-consumer types. | Passthrough and wrapper rows now split by boundary evidence; stale should split by confidence. |
132
+ | Architecture/history drift | `architecture`, `drift`, `doc-drift`, `co-change`, `co-change-partner`, `doc-reference` | Same broad problem of things moving out of sync, but sources differ. | Explicit architecture rules are direct; co-change remains signal; doc-reference strength depends on citation kind. |
133
+ | Graph risk | `architecture`, `fan-in`, `fan-out`, `hotspots`, `bottlenecks`, `coupling`, `deep-chains`, `change-surface`, `affected` | Mostly layered views of graph pressure. | Treat inferred graph shape as support/context; declared forbidden edges and acyclicity violations are direct policy disagreements. |
134
134
 
135
135
  ## Score Model Implications
136
136
 
@@ -272,3 +272,12 @@ boundary paths and dependency rows to import-only file edges, retaining edge
272
272
  breadth and representative files. It is report-only in this slice: inferred
273
273
  reciprocity and strongly connected groups do not affect health or diff-gate,
274
274
  and an unconfigured repository receives no implicit source-layer policy.
275
+
276
+ ## 2026-07-26 Diff-Gate Progress Follow-Up
277
+
278
+ The `src/queries/impact/diff-gate.ts` citation remains accurate after bounded
279
+ progress reporting was added. `DIFF_GATE_CHECKS` is still the canonical public
280
+ check list and `diffGate()` still owns check execution; the check-name type and
281
+ process-local observer contract now live in `queries/internal`, while the
282
+ impact query emits start and completion notifications around each executed
283
+ check.
@@ -506,3 +506,11 @@ still overriding it with the content-aware version. And the report described a
506
506
  single-import edge as "incidental rather than load-bearing" — the graph
507
507
  establishes edge breadth, not importance, so it now reports the measurement and
508
508
  says explicitly that breadth alone settles nothing.
509
+
510
+ ## 2026-07-26 Diff-Gate Progress Follow-Up
511
+
512
+ The change-time gate and check-list citations remain accurate. Progress
513
+ instrumentation does not add, remove, or reorder any `DIFF_GATE_CHECKS` entry:
514
+ `diffGate()` emits process-local start and completion notifications around
515
+ each check, while isolated CLI execution turns those notifications into
516
+ diagnostic progress and active-detector timeout evidence.