scip-query 0.19.4 → 0.19.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/CHANGELOG.md +75 -1
  2. package/README.md +242 -49
  3. package/dist/augment-vue-worker.js +1 -1
  4. package/dist/{chunk-2YU7I3QO.js → chunk-24QNP7MN.js} +2 -2
  5. package/dist/{chunk-CNKAGUPL.js → chunk-26X7KCJR.js} +2 -2
  6. package/dist/{chunk-GPBBJ5Y4.js → chunk-273W2U4Y.js} +3 -3
  7. package/dist/{chunk-7GXM52MI.js → chunk-2CVXCGL4.js} +2 -2
  8. package/dist/{chunk-ABMYA4TN.js → chunk-2EZSOTSY.js} +2 -2
  9. package/dist/{chunk-HKEHS2AS.js → chunk-2GSQR6YA.js} +2 -2
  10. package/dist/{chunk-FECYOO5O.js → chunk-2OXVAGGT.js} +2 -2
  11. package/dist/chunk-2ZOCHAL2.js +8 -0
  12. package/dist/{chunk-QGXBRIM5.js → chunk-336DC5NJ.js} +2 -2
  13. package/dist/chunk-35SQLYCQ.js +2 -0
  14. package/dist/{chunk-VXQNNXJE.js → chunk-3OIKRYU5.js} +2 -2
  15. package/dist/{chunk-52ZYCAEO.js → chunk-47X75ZKH.js} +2 -2
  16. package/dist/{chunk-NPKYOIFM.js → chunk-4CGVLUDP.js} +2 -2
  17. package/dist/chunk-4RI4BJGT.js +8 -0
  18. package/dist/{chunk-P2PC2WGR.js → chunk-52HQTTPB.js} +2 -2
  19. package/dist/{chunk-YNRNA5LK.js → chunk-5OC3HWP5.js} +2 -2
  20. package/dist/{chunk-STOL2BTL.js → chunk-6XFC7PQ5.js} +2 -2
  21. package/dist/{chunk-J77UIT3I.js → chunk-6XHTISLI.js} +2 -2
  22. package/dist/chunk-6YTSKJJ3.js +2 -0
  23. package/dist/{chunk-BTEE5NZQ.js → chunk-7E3TH5ZN.js} +2 -2
  24. package/dist/{chunk-X6D5IC6I.js → chunk-7LABSJSR.js} +2 -2
  25. package/dist/chunk-7Q6VYYCH.js +2 -0
  26. package/dist/{chunk-FWUUZTIO.js → chunk-A43URCQ3.js} +2 -2
  27. package/dist/chunk-A63U2W3P.js +3 -0
  28. package/dist/{chunk-3MJ5YA4Y.js → chunk-ADFSIJP2.js} +2 -2
  29. package/dist/chunk-AOLE4DYM.js +6 -0
  30. package/dist/chunk-APMMR5Y2.js +2 -0
  31. package/dist/chunk-B5MHCHP3.js +107 -0
  32. package/dist/{chunk-4RSI5EMG.js → chunk-CSTYYXKC.js} +2 -2
  33. package/dist/{chunk-25LPM4DG.js → chunk-CYJM7CYF.js} +2 -2
  34. package/dist/{chunk-S44IULR6.js → chunk-DD5BOU5I.js} +2 -2
  35. package/dist/{chunk-YGAGTIDK.js → chunk-DGMCFMPG.js} +7 -7
  36. package/dist/{chunk-UOAV44HR.js → chunk-E2ZXPB7J.js} +2 -2
  37. package/dist/{chunk-IZKFSVBV.js → chunk-EVOC5I5I.js} +2 -2
  38. package/dist/{chunk-XTX6QHOF.js → chunk-F42A3AKG.js} +2 -2
  39. package/dist/{chunk-Q4IIEGXJ.js → chunk-FHCTEANE.js} +2 -2
  40. package/dist/{chunk-3SVWW4PN.js → chunk-FKGN4A4E.js} +2 -2
  41. package/dist/{chunk-IG7N5ZIK.js → chunk-FQTPPXNA.js} +2 -2
  42. package/dist/{chunk-F6O7AAC3.js → chunk-G4UQL4CP.js} +2 -2
  43. package/dist/chunk-GA64UPMI.js +6 -0
  44. package/dist/{chunk-ZXJYMGD3.js → chunk-GK3GRUJX.js} +2 -2
  45. package/dist/chunk-HEBAY673.js +2 -0
  46. package/dist/chunk-HELS7KFF.js +2 -0
  47. package/dist/{chunk-B5NLK2B3.js → chunk-IPDCSB6N.js} +2 -2
  48. package/dist/{chunk-M7MTH5NR.js → chunk-IYAOX36F.js} +2 -2
  49. package/dist/{chunk-YVVCVR2L.js → chunk-J7VT2CRB.js} +2 -2
  50. package/dist/{chunk-4333ETTV.js → chunk-JELJLXEE.js} +2 -2
  51. package/dist/{chunk-LBMJEAEW.js → chunk-JERWGHQT.js} +2 -2
  52. package/dist/chunk-JJJCO4QC.js +945 -0
  53. package/dist/{chunk-6E7UTQY7.js → chunk-JZNLMHWY.js} +2 -2
  54. package/dist/{chunk-R4FQGQ4X.js → chunk-K42M2KWT.js} +2 -2
  55. package/dist/{chunk-H7UKLTWJ.js → chunk-KLVJABXA.js} +2 -2
  56. package/dist/chunk-KP4KBDVF.js +3 -0
  57. package/dist/{chunk-RV2FQIX3.js → chunk-LMFVTUW2.js} +2 -2
  58. package/dist/chunk-LRTP3DKL.js +3 -0
  59. package/dist/{chunk-U6WNH5GC.js → chunk-MGBJHRFB.js} +2 -2
  60. package/dist/{chunk-QDV6RDCP.js → chunk-MLGTCX56.js} +2 -2
  61. package/dist/{chunk-54HA4ZXH.js → chunk-N3SE646F.js} +2 -2
  62. package/dist/{chunk-KP6XRY5Z.js → chunk-NBRUH7OE.js} +2 -2
  63. package/dist/{chunk-M7AIS73L.js → chunk-NN4ZIRPK.js} +2 -2
  64. package/dist/{chunk-I5RJM53C.js → chunk-NQLSSVOB.js} +2 -2
  65. package/dist/{chunk-4SALD7RU.js → chunk-OBKDTVZ3.js} +2 -2
  66. package/dist/{chunk-GBQ5NYPR.js → chunk-OHWZKLVA.js} +6 -6
  67. package/dist/{chunk-6NSFJYRC.js → chunk-OP3MTFJR.js} +2 -2
  68. package/dist/{chunk-EOOJGLDU.js → chunk-OQ2A4G2G.js} +2 -2
  69. package/dist/{chunk-DLWR3NUU.js → chunk-P6HBYNBE.js} +2 -2
  70. package/dist/{chunk-QVWS2VWZ.js → chunk-PC44K7RF.js} +2 -2
  71. package/dist/{chunk-A2EZV2UM.js → chunk-QBYYWGAT.js} +2 -2
  72. package/dist/{chunk-QRGV2F7L.js → chunk-QHKUY4FW.js} +2 -2
  73. package/dist/chunk-QHRL4LKM.js +2 -0
  74. package/dist/{chunk-I5AWSI2G.js → chunk-QQWOFXNW.js} +2 -2
  75. package/dist/{chunk-WQTAC523.js → chunk-RBFFD4V2.js} +2 -2
  76. package/dist/{chunk-SOAT6NLA.js → chunk-RJHCPSZ7.js} +2 -2
  77. package/dist/{chunk-VGRICIQI.js → chunk-RWRLUZ6U.js} +2 -2
  78. package/dist/{chunk-4T3LTWUS.js → chunk-S2GP3CU3.js} +2 -2
  79. package/dist/{chunk-HEXVUYFQ.js → chunk-SHKZ7OVJ.js} +2 -2
  80. package/dist/{chunk-NSS46APD.js → chunk-TFUU5MQQ.js} +2 -2
  81. package/dist/{chunk-IUFDSKGG.js → chunk-TYQ76QHQ.js} +2 -2
  82. package/dist/{chunk-NRCXJDHL.js → chunk-U5CNPPTZ.js} +2 -2
  83. package/dist/{chunk-MITTUCEH.js → chunk-UQK5CRUK.js} +2 -2
  84. package/dist/{chunk-XLTP42QA.js → chunk-UUJBLG6J.js} +2 -2
  85. package/dist/chunk-UXP636P5.js +144 -0
  86. package/dist/{chunk-64RFXJT5.js → chunk-VEVBIAOJ.js} +6 -6
  87. package/dist/chunk-VKRQDBW5.js +9 -0
  88. package/dist/{chunk-C7NIYIQ4.js → chunk-VOQFGC2W.js} +4 -4
  89. package/dist/{chunk-DZ74OMG6.js → chunk-VP542C25.js} +2 -2
  90. package/dist/{chunk-Q3AFUTGB.js → chunk-WMXRRBII.js} +2 -2
  91. package/dist/{chunk-ZGZUZ7XE.js → chunk-WXAAURU7.js} +2 -2
  92. package/dist/chunk-X3NLZHPA.js +20 -0
  93. package/dist/{chunk-WER3B7MI.js → chunk-XF3KLXN3.js} +2 -2
  94. package/dist/{chunk-NH5ALKPW.js → chunk-XVJ3V7LM.js} +2 -2
  95. package/dist/{chunk-4XTA5OMB.js → chunk-YGQN3XGZ.js} +2 -2
  96. package/dist/{chunk-CFMXJPHH.js → chunk-YHXBD52M.js} +2 -2
  97. package/dist/{chunk-7B3UPBVA.js → chunk-YLVE3SXZ.js} +2 -2
  98. package/dist/{chunk-YIJ7ZAA4.js → chunk-YTUD45PU.js} +2 -2
  99. package/dist/{chunk-VTKGCT3V.js → chunk-YWB2EBNB.js} +2 -2
  100. package/dist/{chunk-UKZBVX4U.js → chunk-Z2LHPIOM.js} +2 -2
  101. package/dist/chunk-Z5QQPJ3U.js +30 -0
  102. package/dist/{chunk-NZL2DBT7.js → chunk-ZLJLE6LK.js} +2 -2
  103. package/dist/{chunk-XYADIZHU.js → chunk-ZTTISZ7J.js} +2 -2
  104. package/dist/cli.js +3 -3
  105. package/dist/command-descriptors-SJDZ7QGR.js +617 -0
  106. package/dist/{config-types-D20KuvvZ.d.ts → config-types-BWQ5xPGI.d.ts} +4 -0
  107. package/dist/{db-G_II8yXU.d.ts → db-B0r1o7Vt.d.ts} +18 -1
  108. package/dist/direct-navigation-HTKOZEOM.js +3 -0
  109. package/dist/{health-oblXYgkF.d.ts → health-CFnlCiTz.d.ts} +1 -1
  110. package/dist/index.d.ts +2 -2
  111. package/dist/index.js +1 -1
  112. package/dist/postinstall.js +1 -1
  113. package/dist/queries/affected.d.ts +2 -2
  114. package/dist/queries/affected.js +1 -1
  115. package/dist/queries/architecture.d.ts +2 -2
  116. package/dist/queries/architecture.js +1 -1
  117. package/dist/queries/bottlenecks.d.ts +2 -2
  118. package/dist/queries/bottlenecks.js +1 -1
  119. package/dist/queries/by-kind.d.ts +2 -2
  120. package/dist/queries/by-kind.js +1 -1
  121. package/dist/queries/call-graph.d.ts +2 -2
  122. package/dist/queries/call-graph.js +1 -1
  123. package/dist/queries/change-surface.d.ts +2 -2
  124. package/dist/queries/change-surface.js +1 -1
  125. package/dist/queries/cleanup-plan.d.ts +2 -2
  126. package/dist/queries/cleanup-plan.js +1 -1
  127. package/dist/queries/co-change.d.ts +2 -2
  128. package/dist/queries/co-change.js +1 -1
  129. package/dist/queries/code.d.ts +2 -2
  130. package/dist/queries/code.js +1 -1
  131. package/dist/queries/complexity-hotspots.d.ts +2 -2
  132. package/dist/queries/complexity-hotspots.js +1 -1
  133. package/dist/queries/complexity.d.ts +2 -2
  134. package/dist/queries/complexity.js +1 -1
  135. package/dist/queries/convergence.d.ts +2 -2
  136. package/dist/queries/convergence.js +1 -1
  137. package/dist/queries/coupling.d.ts +2 -2
  138. package/dist/queries/coupling.js +1 -1
  139. package/dist/queries/cycles.d.ts +2 -2
  140. package/dist/queries/cycles.js +1 -1
  141. package/dist/queries/dataflow.d.ts +2 -2
  142. package/dist/queries/dataflow.js +1 -1
  143. package/dist/queries/dead.d.ts +2 -2
  144. package/dist/queries/dead.js +1 -1
  145. package/dist/queries/decorative-checkers.d.ts +3 -3
  146. package/dist/queries/decorative-checkers.js +1 -1
  147. package/dist/queries/deep-chains.d.ts +2 -2
  148. package/dist/queries/deep-chains.js +1 -1
  149. package/dist/queries/deps.d.ts +2 -2
  150. package/dist/queries/deps.js +1 -1
  151. package/dist/queries/diff-gate.d.ts +30 -2
  152. package/dist/queries/diff-gate.js +1 -1
  153. package/dist/queries/diff-impact.d.ts +2 -2
  154. package/dist/queries/diff-impact.js +1 -1
  155. package/dist/queries/doc-drift.d.ts +2 -2
  156. package/dist/queries/doc-drift.js +1 -1
  157. package/dist/queries/drift.d.ts +2 -2
  158. package/dist/queries/drift.js +1 -1
  159. package/dist/queries/duplicate-bodies.d.ts +2 -2
  160. package/dist/queries/duplicate-bodies.js +1 -1
  161. package/dist/queries/extract-candidates.d.ts +2 -2
  162. package/dist/queries/extract-candidates.js +1 -1
  163. package/dist/queries/fan.d.ts +2 -2
  164. package/dist/queries/fan.js +1 -1
  165. package/dist/queries/files.d.ts +2 -2
  166. package/dist/queries/health.d.ts +3 -3
  167. package/dist/queries/health.js +1 -1
  168. package/dist/queries/hierarchy.d.ts +2 -2
  169. package/dist/queries/hierarchy.js +1 -1
  170. package/dist/queries/hotspots.d.ts +2 -2
  171. package/dist/queries/hotspots.js +1 -1
  172. package/dist/queries/imports.d.ts +2 -2
  173. package/dist/queries/imports.js +1 -1
  174. package/dist/queries/incomplete-migration.d.ts +2 -2
  175. package/dist/queries/incomplete-migration.js +1 -1
  176. package/dist/queries/index.d.ts +17 -3
  177. package/dist/queries/index.js +1 -1
  178. package/dist/queries/isolated.d.ts +2 -2
  179. package/dist/queries/isolated.js +1 -1
  180. package/dist/queries/locality-candidates.d.ts +2 -2
  181. package/dist/queries/locality-candidates.js +1 -1
  182. package/dist/queries/members.d.ts +2 -2
  183. package/dist/queries/members.js +1 -1
  184. package/dist/queries/methods.d.ts +2 -2
  185. package/dist/queries/methods.js +1 -1
  186. package/dist/queries/not-implemented.d.ts +3 -3
  187. package/dist/queries/not-implemented.js +1 -1
  188. package/dist/queries/outline.d.ts +2 -2
  189. package/dist/queries/outline.js +1 -1
  190. package/dist/queries/passthrough-candidates.d.ts +2 -2
  191. package/dist/queries/passthrough-candidates.js +1 -1
  192. package/dist/queries/plan-context.d.ts +2 -2
  193. package/dist/queries/plan-context.js +1 -1
  194. package/dist/queries/react-component-duplicates.d.ts +2 -2
  195. package/dist/queries/react-component-duplicates.js +1 -1
  196. package/dist/queries/react-hook-candidates.d.ts +2 -2
  197. package/dist/queries/react-hook-candidates.js +1 -1
  198. package/dist/queries/react-large-component-pressure.d.ts +2 -2
  199. package/dist/queries/react-large-component-pressure.js +1 -1
  200. package/dist/queries/recent-duplicates.d.ts +2 -2
  201. package/dist/queries/recent-duplicates.js +1 -1
  202. package/dist/queries/redundant-reexports.d.ts +2 -2
  203. package/dist/queries/redundant-reexports.js +1 -1
  204. package/dist/queries/refs.d.ts +2 -2
  205. package/dist/queries/refs.js +1 -1
  206. package/dist/queries/self-audit.d.ts +2 -2
  207. package/dist/queries/self-audit.js +1 -1
  208. package/dist/queries/similar-chains.d.ts +2 -2
  209. package/dist/queries/similar-chains.js +1 -1
  210. package/dist/queries/similar-files.d.ts +2 -2
  211. package/dist/queries/similar-files.js +1 -1
  212. package/dist/queries/similar-signatures.d.ts +2 -2
  213. package/dist/queries/similar-signatures.js +1 -1
  214. package/dist/queries/similar.d.ts +2 -2
  215. package/dist/queries/similar.js +1 -1
  216. package/dist/queries/slice.d.ts +2 -2
  217. package/dist/queries/slice.js +1 -1
  218. package/dist/queries/stale-abstractions.d.ts +2 -2
  219. package/dist/queries/stale-abstractions.js +1 -1
  220. package/dist/queries/stats.d.ts +2 -2
  221. package/dist/queries/stats.js +1 -1
  222. package/dist/queries/surface.d.ts +2 -2
  223. package/dist/queries/surface.js +1 -1
  224. package/dist/queries/symbols.d.ts +2 -2
  225. package/dist/queries/symbols.js +1 -1
  226. package/dist/queries/system.d.ts +2 -2
  227. package/dist/queries/system.js +1 -1
  228. package/dist/queries/test-quality.d.ts +2 -2
  229. package/dist/queries/test-quality.js +1 -1
  230. package/dist/queries/trace.d.ts +2 -2
  231. package/dist/queries/trace.js +1 -1
  232. package/dist/queries/twin-ab.d.ts +3 -3
  233. package/dist/queries/twin-ab.js +1 -1
  234. package/dist/queries/twin-drift.d.ts +2 -2
  235. package/dist/queries/twin-drift.js +1 -1
  236. package/dist/queries/unused-imports.d.ts +2 -2
  237. package/dist/queries/unused-imports.js +1 -1
  238. package/dist/queries/unused-params.d.ts +2 -2
  239. package/dist/queries/unused-params.js +1 -1
  240. package/dist/queries/vue-component-duplicates.d.ts +2 -2
  241. package/dist/queries/vue-component-duplicates.js +1 -1
  242. package/dist/queries/vue-composable-candidates.d.ts +2 -2
  243. package/dist/queries/vue-composable-candidates.js +1 -1
  244. package/dist/queries/vue-large-view-pressure.d.ts +2 -2
  245. package/dist/queries/vue-large-view-pressure.js +1 -1
  246. package/dist/queries/wrapper-candidates.d.ts +2 -2
  247. package/dist/queries/wrapper-candidates.js +1 -1
  248. package/dist/reindex-worker.js +23 -24
  249. package/dist/reindex.d.ts +10 -4
  250. package/dist/reindex.js +33 -38
  251. package/dist/runtime.d.ts +167 -11
  252. package/dist/runtime.js +3 -2
  253. package/dist/rust-semantic-session-server.js +1 -1
  254. package/dist/rust-semantic-session-worker.js +1 -1
  255. package/dist/rust-semantic-worker.js +1 -1
  256. package/dist/{scip-cli-kRpaexVJ.d.ts → scip-cli-DCvnlZCu.d.ts} +5 -1
  257. package/dist/watch-server.js +5 -5
  258. package/docs/AGENT_GUIDE.md +1 -1
  259. package/docs/AI_FAILURE_MODES.md +18 -18
  260. package/docs/API_EVOLUTION.md +71 -0
  261. package/docs/CLI_JSON_OUTPUT.md +83 -0
  262. package/docs/COMMAND_REFERENCE.md +10 -8
  263. package/docs/COMMITTED_RECORD_COMPATIBILITY.md +117 -0
  264. package/docs/CONFIGURATION_WRITE_SAFETY.md +130 -0
  265. package/docs/DETECTOR_GUIDE.md +47 -47
  266. package/docs/DURABILITY.md +103 -0
  267. package/docs/INDEX_GENERATIONS.md +121 -0
  268. package/docs/LOCK_PROTOCOL.md +133 -0
  269. package/docs/MAILBOX_LIFECYCLE.md +197 -0
  270. package/docs/REINDEX_METADATA_COMPATIBILITY.md +84 -0
  271. package/docs/RUST_DURABLE_SESSION_PROTOCOL.md +126 -0
  272. package/docs/TELEMETRY_RETENTION.md +72 -0
  273. package/docs/TIME_SEMANTICS.md +77 -0
  274. package/docs/WATCH_REFRESH_REQUESTS.md +110 -0
  275. package/docs/WINDOWS_SIDECAR_RELEASE.md +298 -0
  276. package/docs/analyzer-validation-ledger.md +24 -23
  277. package/docs/schemas/cli-json-envelope.schema.json +53 -0
  278. package/docs/schemas/npm-release-state.schema.json +146 -0
  279. package/docs/schemas/outcome-event-record.schema.json +39 -0
  280. package/docs/schemas/project-config.schema.json +247 -0
  281. package/docs/schemas/suppression-record.schema.json +31 -0
  282. package/docs/schemas/windows-sidecar-provenance.schema.json +137 -0
  283. package/package.json +15 -5
  284. package/scripts/build-scip-windows.mjs +180 -61
  285. package/scripts/scip-windows-provenance.mjs +364 -0
  286. package/scripts/verify-scip-windows.mjs +29 -0
  287. package/skills/_shared/SKILL.md +91 -242
  288. package/skills/_shared/agents/openai.yaml +1 -1
  289. package/skills/_shared/references/agent-contract-catalog.md +105 -0
  290. package/skills/_shared/references/command-catalog.md +118 -0
  291. package/skills/_shared/references/detector-precision-and-diffgate.md +59 -0
  292. package/skills/_shared/references/evidence-and-dead-code.md +25 -0
  293. package/skills/scip-audit/SKILL.md +76 -0
  294. package/skills/scip-audit/agents/openai.yaml +4 -0
  295. package/skills/scip-audit/references/claims.md +98 -0
  296. package/skills/scip-audit/references/cleanup.md +101 -0
  297. package/skills/scip-audit/references/directory.md +222 -0
  298. package/skills/scip-audit/references/frontend.md +130 -0
  299. package/skills/scip-audit/references/integrity.md +154 -0
  300. package/skills/scip-audit/references/maintainability.md +162 -0
  301. package/skills/scip-audit/references/twin-drift.md +104 -0
  302. package/skills/scip-diagnose/SKILL.md +52 -0
  303. package/skills/scip-diagnose/agents/openai.yaml +4 -0
  304. package/skills/scip-diagnose/references/debug.md +117 -0
  305. package/skills/{scip-probe-reachability/SKILL.md → scip-diagnose/references/probe-reachability.md} +12 -27
  306. package/skills/scip-diagnose/references/root-cause.md +145 -0
  307. package/skills/scip-diagnose/references/triage.md +119 -0
  308. package/skills/scip-explore/SKILL.md +53 -84
  309. package/skills/scip-explore/agents/openai.yaml +2 -2
  310. package/skills/scip-explore/references/diagrams.md +40 -0
  311. package/skills/scip-explore/references/language-playbook.md +49 -0
  312. package/skills/scip-improve/SKILL.md +56 -0
  313. package/skills/scip-improve/agents/openai.yaml +4 -0
  314. package/skills/scip-improve/references/cleanup-batches.md +53 -0
  315. package/skills/scip-improve/references/directory-moves.md +53 -0
  316. package/skills/scip-improve/references/doc-reconcile.md +30 -0
  317. package/skills/scip-improve/references/frontend-extraction.md +39 -0
  318. package/skills/scip-improve/references/maintainability-mechanism.md +43 -0
  319. package/skills/scip-improve/references/twin-drift.md +35 -0
  320. package/skills/scip-plan/SKILL.md +68 -0
  321. package/skills/scip-plan/agents/openai.yaml +4 -0
  322. package/skills/scip-plan/references/api-impact.md +19 -0
  323. package/skills/scip-plan/references/conductor.md +41 -0
  324. package/skills/scip-plan/references/high-assurance.md +43 -0
  325. package/skills/scip-plan/references/hyper-optimization.md +50 -0
  326. package/skills/scip-plan/references/tla-model.md +88 -0
  327. package/skills/scip-query/SKILL.md +52 -97
  328. package/skills/scip-query/agents/openai.yaml +2 -2
  329. package/skills/scip-setup/SKILL.md +65 -176
  330. package/skills/scip-setup/agents/openai.yaml +3 -3
  331. package/skills/scip-setup/references/bootstrap-workflow.md +120 -0
  332. package/skills/scip-setup/references/language-verification.md +61 -0
  333. package/skills/scip-setup/references/lifecycle-commands.md +119 -0
  334. package/skills/scip-setup/references/per-repo-triage.md +24 -0
  335. package/skills/scip-verify/SKILL.md +123 -70
  336. package/skills/scip-verify/agents/openai.yaml +2 -2
  337. package/skills/scip-verify/references/calibrate-detectors.md +170 -0
  338. package/dist/chunk-2CTX5CMX.js +0 -4
  339. package/dist/chunk-2Y373BDD.js +0 -2
  340. package/dist/chunk-C2QSK7E7.js +0 -2
  341. package/dist/chunk-D4U5Q3FT.js +0 -7
  342. package/dist/chunk-K2ERX4UT.js +0 -3
  343. package/dist/chunk-KHE7J5ZN.js +0 -3
  344. package/dist/chunk-L7SPDE73.js +0 -84
  345. package/dist/chunk-LHMNRHGV.js +0 -3
  346. package/dist/chunk-LM72NQ7T.js +0 -3
  347. package/dist/chunk-MSWVMDAH.js +0 -122
  348. package/dist/chunk-NH7WNNQC.js +0 -20
  349. package/dist/chunk-OMPZHGHO.js +0 -2
  350. package/dist/chunk-SVLTAG5O.js +0 -927
  351. package/dist/chunk-U7DSEKOM.js +0 -30
  352. package/dist/chunk-V27BEQJN.js +0 -7
  353. package/dist/chunk-VMNZB6WI.js +0 -4
  354. package/dist/chunk-XBN5VO53.js +0 -2
  355. package/dist/chunk-ZAIILQNP.js +0 -5
  356. package/dist/command-descriptors-MFU4BCJ7.js +0 -612
  357. package/dist/direct-navigation-MRMQFIRB.js +0 -3
  358. package/skills/scip-api-impact/SKILL.md +0 -139
  359. package/skills/scip-api-impact/agents/openai.yaml +0 -4
  360. package/skills/scip-calibrate/SKILL.md +0 -131
  361. package/skills/scip-calibrate/agents/openai.yaml +0 -4
  362. package/skills/scip-claim-audit/SKILL.md +0 -106
  363. package/skills/scip-claim-audit/agents/openai.yaml +0 -4
  364. package/skills/scip-cleanup-audit/SKILL.md +0 -126
  365. package/skills/scip-cleanup-audit/agents/openai.yaml +0 -4
  366. package/skills/scip-cleanup-improve/SKILL.md +0 -84
  367. package/skills/scip-cleanup-improve/agents/openai.yaml +0 -4
  368. package/skills/scip-concrete-plan/SKILL.md +0 -262
  369. package/skills/scip-concrete-plan/agents/openai.yaml +0 -4
  370. package/skills/scip-conductor/SKILL.md +0 -133
  371. package/skills/scip-conductor/agents/openai.yaml +0 -4
  372. package/skills/scip-debug/SKILL.md +0 -130
  373. package/skills/scip-debug/agents/openai.yaml +0 -4
  374. package/skills/scip-diagram/SKILL.md +0 -110
  375. package/skills/scip-diagram/agents/openai.yaml +0 -4
  376. package/skills/scip-directory-architecture/SKILL.md +0 -254
  377. package/skills/scip-directory-architecture/agents/openai.yaml +0 -4
  378. package/skills/scip-doc-reconcile/SKILL.md +0 -89
  379. package/skills/scip-doc-reconcile/agents/openai.yaml +0 -4
  380. package/skills/scip-hyper-optimization/SKILL.md +0 -156
  381. package/skills/scip-hyper-optimization/agents/openai.yaml +0 -4
  382. package/skills/scip-integrity-audit/SKILL.md +0 -152
  383. package/skills/scip-integrity-audit/agents/openai.yaml +0 -4
  384. package/skills/scip-language-playbook/SKILL.md +0 -106
  385. package/skills/scip-language-playbook/agents/openai.yaml +0 -4
  386. package/skills/scip-maintainability/SKILL.md +0 -158
  387. package/skills/scip-maintainability/agents/openai.yaml +0 -4
  388. package/skills/scip-probe-reachability/agents/openai.yaml +0 -4
  389. package/skills/scip-react-maintainability/SKILL.md +0 -101
  390. package/skills/scip-react-maintainability/agents/openai.yaml +0 -4
  391. package/skills/scip-root-cause/SKILL.md +0 -150
  392. package/skills/scip-root-cause/agents/openai.yaml +0 -4
  393. package/skills/scip-tla-model-system/SKILL.md +0 -148
  394. package/skills/scip-tla-model-system/agents/openai.yaml +0 -4
  395. package/skills/scip-triage-issue/SKILL.md +0 -126
  396. package/skills/scip-triage-issue/agents/openai.yaml +0 -4
  397. package/skills/scip-twin-drift/SKILL.md +0 -107
  398. package/skills/scip-twin-drift/agents/openai.yaml +0 -4
  399. package/skills/scip-vue-maintainability/SKILL.md +0 -107
  400. package/skills/scip-vue-maintainability/agents/openai.yaml +0 -4
@@ -0,0 +1,126 @@
1
+ # Durable Rust session protocol
2
+
3
+ The durable Rust session protocol is the versioned filesystem-message contract
4
+ between a synchronous scip-query process and the reusable process that owns
5
+ rust-analyzer. Its essential safety property is correlation: a result becomes
6
+ usable only after it proves that it belongs to the same logical operation,
7
+ mailbox namespace, and absolute processing interval that the caller admitted.
8
+
9
+ A mailbox-session identity is a SHA-256 value derived from the absolute
10
+ durable-session directory and protocol version. The directory is already
11
+ separated by canonical project root and helper-binary fingerprint; the
12
+ explicit identity makes that separation part of every message rather than an
13
+ assumption inherited from its pathname. A response copied from another
14
+ project or helper directory therefore cannot satisfy the reader.
15
+
16
+ An operation identity is the SHA-256 of the answer-affecting Rust request. It
17
+ is wider than one client attempt: an exact retry joins the same pending,
18
+ inflight, or retained completion. The authoritative deadline is the absolute
19
+ deadline on the first admitted copy of that operation. Later duplicate
20
+ attempts read that retained deadline instead of substituting a new one, which
21
+ keeps the response's time identity stable.
22
+
23
+ ## Current v3 request
24
+
25
+ Every newly written request contains:
26
+
27
+ - `mailboxVersion: 1`;
28
+ - `protocolVersion: 3`;
29
+ - `operationKey` and the derived `id: op-<operationKey>`;
30
+ - a non-empty `clientId`;
31
+ - finite `enqueuedAtMs` and `deadlineAtMs`, where their difference equals the
32
+ domain request's positive `timeoutMs`;
33
+ - `sessionIdentity`; and
34
+ - one strictly decoded `semantic` or `import-definitions` request.
35
+
36
+ The server recomputes the operation key after validating the domain request.
37
+ It validates all required definition or import-position fields and every
38
+ optional timeout, concurrency, boolean, and worker-environment field before
39
+ calling rust-analyzer. Unknown additive object members remain allowed; a
40
+ wrong discriminant or wrong field type does not.
41
+
42
+ The civil timestamps are shared-record facts, not wait-loop clocks. Before
43
+ work, the server requires `now <= deadlineAtMs`. After rust-analyzer returns,
44
+ it checks the absolute deadline again and publishes an `expired-request`
45
+ rejection instead of a success if work crossed it. Process-local waits and
46
+ readiness bounds continue to use monotonic time as documented in
47
+ [Time Semantics](TIME_SEMANTICS.md).
48
+
49
+ ## Current v3 response
50
+
51
+ The bounded mailbox supplies `mailboxVersion`, `operationKey`, `clientId`,
52
+ `completedAtMs`, `expiresAtMs`, and the authoritative `deadlineAtMs`. The Rust
53
+ server adds:
54
+
55
+ - `protocolVersion: 3`;
56
+ - the request `id`;
57
+ - the request's `sessionIdentity`;
58
+ - either `ok: true`, the session disposition, and the kind-specific response;
59
+ or
60
+ - `ok: false`, a typed `errorCode`, and a diagnostic message.
61
+
62
+ The client accepts a success or rejection only when protocol version, mailbox
63
+ version, request ID, operation key, session identity, and authoritative
64
+ deadline exactly match its admitted operation. It also requires both the
65
+ helper's completion time and the observation time to be no later than that
66
+ deadline. A semantic request cannot consume an import-definition response,
67
+ and the reverse is also rejected.
68
+
69
+ Typed rejection codes are:
70
+
71
+ | Code | Meaning |
72
+ | ---------------------- | ----------------------------------------------------------------------- |
73
+ | `unsupported-protocol` | The outer lifecycle was correlatable, but its domain protocol is newer. |
74
+ | `malformed-request` | Identity, lifecycle, kind, or domain payload validation failed. |
75
+ | `expired-request` | Work was already expired or crossed its deadline. |
76
+ | `handler-error` | A validated request reached the Rust host and the host failed. |
77
+
78
+ When malformed bytes do not contain enough trustworthy identity to correlate
79
+ a response, the server still retains the rejection and dead-letter evidence,
80
+ but a current client will not accept that uncorrelated file as the answer to a
81
+ request.
82
+
83
+ ## Compatibility matrix
84
+
85
+ | Writer or peer | Current reader/server behavior |
86
+ | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
87
+ | Unversioned v2 `{id, request}` client | Accepted during the bounded overlap window after strict request-kind validation. The server synthesizes lifecycle/session fields and writes an additive response. |
88
+ | Prior v3 client without session field | Accepted as `prior-v3` when every other v3 lifecycle field and the recomputed operation identity are valid. The server supplies and echoes the namespace identity. |
89
+ | Current v3 client | Fully correlated current path. |
90
+ | Future explicitly versioned client | Never treated as legacy. A safely correlated envelope receives `unsupported-protocol`; an uncorrelatable envelope receives a generic malformed rejection. |
91
+ | Prior v3 server response | Rejected by the current client as an incompatible uncorrelated response because it lacks session/deadline proof. |
92
+ | Current v3 server to prior v3 client | Additive: the prior reader's established root fields remain in place, and it ignores the new correlation/error metadata. |
93
+ | Future server response | Rejected before response data is exposed. |
94
+
95
+ The server executable's content fingerprint is part of the mailbox directory,
96
+ so normal upgrades select a new namespace rather than pairing a current client
97
+ with a prior helper. The explicit compatibility behavior still matters for
98
+ retained files, rollback, test fixtures, and manual recovery.
99
+
100
+ ## Replay, retry, and recovery
101
+
102
+ An exact retry keeps its operation key and request ID. The mailbox returns the
103
+ deadline of the authoritative pending, inflight, or completed record, so the
104
+ retry validates the original response rather than relabeling it with the new
105
+ attempt's deadline. A retained completion observed after that deadline is
106
+ rejected even if the retention window has not yet collected its bytes.
107
+
108
+ A response with the right request ID but a different operation key is a
109
+ different operation. A response with both identities but a different
110
+ mailbox-session identity is a cross-session replay. A response whose echoed
111
+ deadline differs is a different lifecycle. All three fail before payload
112
+ decoding.
113
+
114
+ If the current client reports an incompatible prior-server response, remove
115
+ only the specific durable session directory after confirming no current
116
+ scip-query process owns it, then retry so the content-addressed current helper
117
+ creates a fresh namespace. Do not delete a broad cache root.
118
+
119
+ Executable coverage lives in:
120
+
121
+ - `tests/semantic/rust/durable-session-protocol.test.ts`;
122
+ - `tests/semantic/rust/rust-durable-session.test.ts`; and
123
+ - `tests/storage/bounded-mailbox.test.ts`.
124
+
125
+ The shared pending/inflight/completion state machine remains documented in
126
+ [Filesystem mailbox lifecycle](MAILBOX_LIFECYCLE.md).
@@ -0,0 +1,72 @@
1
+ # Operational Telemetry Retention
2
+
3
+ Operational telemetry is observational history produced while scip-query
4
+ works. Its concrete referents here are `reindex-activity.jsonl`, which records
5
+ refresh frequency and estimated logical output, and `affected-shadow.jsonl`,
6
+ which records compact affected-set calibration outcomes. It differs from an
7
+ authoritative record because no index generation, policy decision, ownership
8
+ claim, or completed user operation is reconstructed from it.
9
+
10
+ ## Retained segment set
11
+
12
+ Each history has two ordered segments:
13
+
14
+ 1. `<history>.previous` is the older retained segment.
15
+ 2. `<history>` is the current append segment.
16
+
17
+ The reindex-activity limit is 1 MiB per segment. The affected-shadow limit is
18
+ 8 MiB per segment. A single JSON record larger than its configured limit
19
+ expands that segment's effective limit to the complete record size; a
20
+ successful append is never made immediately ineligible by its own size.
21
+ Rotation removes the former previous segment, renames the complete current
22
+ segment to previous, and then creates the new current segment. Readers scan
23
+ previous before current.
24
+
25
+ Retention deliberately permits deletion of records older than those two
26
+ segments. That bounded-history deletion is different from concurrency loss:
27
+ which segment is pruned is decided while the append/rotation lock excludes
28
+ other writers.
29
+
30
+ ## Serialization and crash recovery
31
+
32
+ The rotation lock is `<history>.rotation.lock`. It is a process-instance lock:
33
+ its record contains a PID, an operating-system process-start identity when
34
+ available, and a random token, and only that owner can release it. Lock
35
+ acquisition, incomplete-tail repair, retention pruning, rename, append, and
36
+ the default retained-set read all occur beneath that lock. Waits use a
37
+ process-local monotonic two-second budget.
38
+
39
+ Every append is one newline-terminated JSON value. If a process stops during
40
+ the append, the current segment can end in one incomplete tail. The next
41
+ writer truncates only the bytes after the last newline before it rotates or
42
+ appends. Readers ignore and count incomplete tail bytes. A stop after current
43
+ is renamed but before the new append leaves the old complete segment at
44
+ `.previous`; a later writer creates a new current segment.
45
+
46
+ These files are process-visible but not crash-durable. They are not fsynced,
47
+ so a kernel or power failure may lose the newest observation even after the
48
+ write call returned. That is acceptable only because the histories are
49
+ operational evidence. Authoritative index, lock, suppression, configuration,
50
+ mailbox-response, and release records use their own durable protocols.
51
+
52
+ ## Failure contract
53
+
54
+ Lock timeout and ownership-changed release are typed failures at the shared
55
+ helper boundary. The reindex-activity and affected-shadow production writers
56
+ remain best effort: they catch telemetry failure so an observation cannot
57
+ change the authoritative reindex result. Callers that invoke the shared helper
58
+ directly can distinguish lock timeout, count repaired tail bytes, and count
59
+ partial bytes ignored during reads.
60
+
61
+ The regression suite forces:
62
+
63
+ - a competing writer at tail repair, prior-segment pruning, current rotation,
64
+ and append;
65
+ - a stop after rotation and a partial append tail;
66
+ - bounded retention across three rotations;
67
+ - deterministic previous-then-current reads;
68
+ - partial legacy tails; and
69
+ - bounded live-owner contention.
70
+
71
+ The implementation is `src/reindex/rotating-jsonl.ts`; its direct contract
72
+ tests are `tests/reindex/rotating-jsonl.test.ts`.
@@ -0,0 +1,77 @@
1
+ # Time Semantics
2
+
3
+ scip-query separates shared timestamps from local elapsed-time control so a
4
+ system-clock correction cannot prolong a wait or impersonate ownership.
5
+
6
+ A **civil timestamp** is a calendar coordinate produced by the host's system
7
+ clock and written so different processes and later executions can compare
8
+ records. ISO dates, `enqueuedAtMs`, `deadlineAtMs`, heartbeat times, retention
9
+ times, and diagnostic start/completion times refer to this clock. Network time
10
+ synchronization, administrator changes, suspend/resume behavior, virtual
11
+ machine migration, and a reboot can move its observed value forward or
12
+ backward.
13
+
14
+ A **monotonic clock reading** is a process-local elapsed-time coordinate whose
15
+ ordering does not move backward while that process runs. `performance.now()`
16
+ is the JavaScript implementation used here. A monotonic reading is suitable
17
+ for durations and local deadlines because a civil-clock adjustment cannot add
18
+ time to or remove time from the measured interval. Its numeric value is not a
19
+ portable timestamp and is never persisted as cross-process evidence.
20
+
21
+ A **deadline** is the boundary that ends an operation when its resource budget
22
+ is consumed. Local request waits, lock waits, service startup and stop waits,
23
+ Rust readiness work, heartbeat throttles, activity polling, cache sweeps,
24
+ idle shutdown, and reported elapsed durations use monotonic readings. Timer
25
+ delivery can be late if the process is not scheduled, but moving the civil
26
+ clock cannot make the deadline later.
27
+
28
+ A **durable expiry hint** is a persisted civil timestamp that lets another
29
+ process classify old work for bounded cleanup or rejection. It is weaker than
30
+ ownership evidence because timestamp age cannot identify the process that
31
+ created a record. Mailbox request deadlines, response retention, dead-letter
32
+ retention, and heartbeat times remain durable hints. They may reject or clean
33
+ rebuildable retained data according to the documented retention contract, but
34
+ they do not alone authorize signaling a process, replacing a live service, or
35
+ reclaiming an inflight claim.
36
+
37
+ ## Decision table
38
+
39
+ | Decision | Clock/evidence used | Why |
40
+ | ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
41
+ | Stop waiting for a lock, response, startup, shutdown, or readiness phase | Process-local monotonic deadline | The wait remains bounded across forward and backward civil-clock jumps. |
42
+ | Report a duration | Difference between monotonic readings | A clock correction cannot create a negative or inflated elapsed duration. |
43
+ | Publish a heartbeat, start time, completion time, or request expiry | Civil timestamp | Other processes and later executions need an inspectable shared coordinate. |
44
+ | Accept a watch or mailbox service as the same owner | Protocol/project identity, live PID, and matching process-start identity when recorded | A timestamp cannot distinguish PID reuse or a different executable instance. |
45
+ | Replace or signal a watch service | Matching process-start identity plus the explicit stop/start protocol | An old heartbeat alone never grants process-signal authority. |
46
+ | Reclaim an inflight mailbox claim | Lease expired and recorded process instance is dead or replaced | The civil lease is a delay hint; process-instance loss supplies ownership evidence. |
47
+ | Reclaim a process lock | Dead recorded process or mismatched process-start identity, followed by a guarded unchanged recheck | Valid locks do not expire; malformed public locks fail closed. |
48
+
49
+ ## Cross-process handoff
50
+
51
+ Absolute monotonic readings are not sent between independent processes.
52
+ Portable mailbox requests carry relative timeout budgets and civil diagnostic
53
+ times. The receiving Rust service converts the relative budget into a new
54
+ deadline in its own monotonic clock domain before it hands work to its worker
55
+ thread. TypeScript and Rust clients likewise use their own monotonic deadline
56
+ while polling for a retained response.
57
+
58
+ Legacy state without a process-start identity remains readable. A live legacy
59
+ PID is treated conservatively: it can support availability where no process
60
+ mutation is attempted, but it cannot authorize a signal or deletion. An
61
+ unparseable public ownership record fails closed and requires operator review.
62
+
63
+ ## Verification
64
+
65
+ The clock contract is covered by injected-clock tests that independently move
66
+ civil time forward and backward, advance monotonic time, reuse a PID with a
67
+ different process-start identity, and hold a live owner beyond a civil lease.
68
+ Focused suites include:
69
+
70
+ - `tests/domain/time.test.ts`;
71
+ - `tests/platform/process-file-lock.test.ts`;
72
+ - `tests/runtime/repository-cache-lifecycle.test.ts`;
73
+ - `tests/runtime/revisioned-file.test.ts`;
74
+ - `tests/runtime/watch-service.test.ts`;
75
+ - `tests/storage/bounded-mailbox.test.ts`;
76
+ - the TypeScript semantic and index mailbox suites; and
77
+ - the durable Rust and rust-analyzer readiness suites.
@@ -0,0 +1,110 @@
1
+ # Watch Refresh Requests
2
+
3
+ ## Contract
4
+
5
+ A watch refresh request is a durable command-side intent to make one project's
6
+ index current. Its concrete referents are the records created when a command or
7
+ agent hook observes a stale index and asks the live watch service to reindex.
8
+ It is a request record distinguished from ordinary watch activity by remaining
9
+ authoritative until a corresponding refresh attempt completes or its declared
10
+ deadline expires.
11
+
12
+ Watch activity is a disposable observation that a command recently used the
13
+ service. Its concrete referent is `watch-activity.json`; it is a
14
+ last-writer-wins timestamp whose only effect is extending the daemon's idle
15
+ lifetime. It is not a queue and carries no current refresh authority.
16
+
17
+ An admission is the successful publication of one complete immutable request
18
+ under `watch-refresh-requests/requests/`. Its defining property is that the
19
+ stable request path exists before the caller is told the request was accepted.
20
+ A claim is an exclusive processing marker for that admitted request. A
21
+ completion is a durable receipt proving that the attempt associated with the
22
+ claim finished successfully, or that the request expired before execution.
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.
28
+
29
+ ## Layout
30
+
31
+ ```text
32
+ <project-cache>/
33
+ watch-activity.json
34
+ watch-refresh-requests/
35
+ requests/<request-id>.json
36
+ claims/<request-id>.json
37
+ completions/<request-id>.json
38
+ staging/
39
+ ```
40
+
41
+ - `requests/` is the immutable admission log.
42
+ - `claims/` contains exclusive, temporary ownership markers.
43
+ - `completions/` contains immutable acknowledgements.
44
+ - `staging/` contains same-filesystem temporary files used to publish a
45
+ complete record through an exclusive hard-link operation.
46
+
47
+ The request ID is random unless the caller supplies an idempotency key. An
48
+ idempotency key is a caller-chosen logical-operation identity whose hash
49
+ becomes the stable request ID; retries with that key observe the first admitted
50
+ request instead of appending another one. The first request's detail and
51
+ deadline remain authoritative.
52
+
53
+ ## Lifecycle
54
+
55
+ 1. The requester durably writes a complete staging record.
56
+ 2. It exclusively links that record into `requests/`. A collision is a
57
+ duplicate, not an overwrite.
58
+ 3. The watch server, while holding the project watch lock, claims pending,
59
+ unexpired requests through exclusive claim records.
60
+ 4. It deliberately coalesces one claimed batch into one `watch-demand`
61
+ refresh. Requests arriving while the watcher is busy remain pending.
62
+ 5. A successful corresponding reindex writes every completion receipt before
63
+ removing any claim.
64
+ 6. A failed reindex removes its claims without writing completion, making the
65
+ requests pending after a bounded retry delay.
66
+ 7. A successor watch server removes predecessor claims only after acquiring
67
+ the same exclusive watch lock. Completed requests remain completed; all
68
+ other claimed requests become pending.
69
+
70
+ The default request deadline is ten minutes. An expired request gets an
71
+ explicit `expired` completion rather than being silently deleted. Completed
72
+ and expired history is retained for seven days; pruning removes only a receipt
73
+ and its already-acknowledged request. Pending and claimed requests are never
74
+ history-pruned. Idempotency is therefore guaranteed for at least the history
75
+ retention window.
76
+
77
+ ## Crash and Concurrency Outcomes
78
+
79
+ | Boundary | Observable outcome |
80
+ | --- | --- |
81
+ | Crash before exclusive admission | No request was accepted; only staging may remain |
82
+ | 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 |
90
+
91
+ ## Compatibility and Diagnostics
92
+
93
+ Protocol version 5 writers use the request store. During the overlap release,
94
+ the watch server still recognizes the former
95
+ `refreshRequestedAt`/`refreshDetail` fields if an older client writes them. On
96
+ observation it converts that timestamp to a deduplicated durable request before
97
+ processing it. New activity writers never place refresh intent in the activity
98
+ file.
99
+
100
+ `scip-query watch --status` reports pending, claimed, completed, expired, and
101
+ invalid record counts. A nonzero invalid count means an on-disk record failed
102
+ strict validation; the store does not treat malformed bytes as an accepted
103
+ request or completion.
104
+
105
+ This protocol does not promise exactly-once reindex execution. Exactly-once
106
+ execution would require atomically committing the index generation and the
107
+ request receipt across separate storage authorities. Reindex is safe to
108
+ repeat, so the protocol chooses the stronger practical guarantee: accepted
109
+ intent is never silently lost, and successful acknowledgement is never
110
+ inferred from absence.