scip-query 0.10.12 → 0.11.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 (353) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/{vendor/scip/LICENSE.scip → LICENSE} +1 -0
  3. package/README.md +141 -49
  4. package/dist/augment-vue-worker.js +1 -1
  5. package/dist/chunk-2VSDXOG5.js +2 -0
  6. package/dist/chunk-343O6EVV.js +2 -0
  7. package/dist/{chunk-RUV5IY25.js → chunk-3KDUITBE.js} +2 -2
  8. package/dist/chunk-3T2FNHIU.js +2 -0
  9. package/dist/{chunk-EOLGSSDR.js → chunk-3V6JQQM5.js} +2 -2
  10. package/dist/chunk-5AAAEZ2Z.js +2 -0
  11. package/dist/chunk-6Q6OFLFQ.js +8 -0
  12. package/dist/chunk-6XA4LDHY.js +2 -0
  13. package/dist/chunk-75X52JTA.js +2 -0
  14. package/dist/{chunk-LEHVP4DY.js → chunk-7HB3CZFD.js} +2 -2
  15. package/dist/chunk-7JZRFDCU.js +2 -0
  16. package/dist/{chunk-SQNHOOJ5.js → chunk-7XL7J7PT.js} +2 -2
  17. package/dist/{chunk-GKB4JJDU.js → chunk-ALHNAPS2.js} +2 -2
  18. package/dist/{chunk-TBCHRDAC.js → chunk-BDRBPG7Y.js} +2 -2
  19. package/dist/chunk-BN5SXXQS.js +40 -0
  20. package/dist/chunk-C4ICAIJ4.js +3 -0
  21. package/dist/{chunk-2GLNBCHB.js → chunk-CMHYBXJB.js} +2 -2
  22. package/dist/{chunk-S2MRVIJ5.js → chunk-DRPAQAFM.js} +6 -6
  23. package/dist/chunk-FERAXG6Y.js +72 -0
  24. package/dist/chunk-FLJJLSGB.js +2 -0
  25. package/dist/chunk-FXG3PHVW.js +9 -0
  26. package/dist/{chunk-JS6B76AQ.js → chunk-GCN2P4EJ.js} +2 -2
  27. package/dist/chunk-GHXRVCIY.js +21 -0
  28. package/dist/chunk-GNG622H3.js +3 -0
  29. package/dist/chunk-H4LUPLEJ.js +2 -0
  30. package/dist/{chunk-XUCZ3RQ5.js → chunk-H56MGERE.js} +4 -4
  31. package/dist/chunk-H7NSJ7L2.js +5 -0
  32. package/dist/chunk-HINMXZ6J.js +2 -0
  33. package/dist/chunk-HXXMPYEF.js +2 -0
  34. package/dist/{chunk-A4UTLKHU.js → chunk-HZKMEXA3.js} +2 -2
  35. package/dist/{chunk-T3AEVJBG.js → chunk-IFSX6YVU.js} +2 -2
  36. package/dist/chunk-ISLWJ4PY.js +10 -0
  37. package/dist/chunk-J5WVNZ6O.js +2 -0
  38. package/dist/chunk-K2HYR5A7.js +3 -0
  39. package/dist/{chunk-UVPY3RUZ.js → chunk-K6UI6EBZ.js} +2 -2
  40. package/dist/{chunk-MNCQPMCH.js → chunk-KJCDEDQW.js} +2 -2
  41. package/dist/{chunk-KZ4MG5NY.js → chunk-KKMOB3OJ.js} +2 -2
  42. package/dist/{chunk-ELC77ZDE.js → chunk-KMVGRIO2.js} +2 -2
  43. package/dist/chunk-LWOOTRHC.js +2 -0
  44. package/dist/{chunk-DQ6433ZG.js → chunk-LZNLRE4X.js} +17 -8
  45. package/dist/{chunk-7C6JBBE4.js → chunk-M2YXL62V.js} +2 -2
  46. package/dist/chunk-MNEJYEHW.js +3 -0
  47. package/dist/chunk-MTDBHTSF.js +2 -0
  48. package/dist/{chunk-VB2EZZPA.js → chunk-N2Z3CU7X.js} +2 -2
  49. package/dist/{chunk-2UVCH7CQ.js → chunk-N7PNFLGY.js} +2 -2
  50. package/dist/chunk-NAH5EAZS.js +6 -0
  51. package/dist/{chunk-XHMVZFA6.js → chunk-NBXK32I6.js} +2 -2
  52. package/dist/chunk-NJJ7AS4F.js +2 -0
  53. package/dist/{chunk-ANUEY5WV.js → chunk-NLMRJ7SI.js} +2 -2
  54. package/dist/chunk-ODVITBYU.js +26 -0
  55. package/dist/chunk-ORBRX2QJ.js +2 -0
  56. package/dist/{chunk-NTSR6SRP.js → chunk-P36UR5II.js} +2 -2
  57. package/dist/chunk-PYZZBIEU.js +3 -0
  58. package/dist/chunk-PZS6J5YG.js +16 -0
  59. package/dist/{chunk-3XSNW5XB.js → chunk-QARYU7R3.js} +2 -2
  60. package/dist/chunk-QJ3FK4TB.js +38 -0
  61. package/dist/{chunk-4ISHQ7UW.js → chunk-QXGTGE2C.js} +4 -4
  62. package/dist/chunk-QZ4JVECJ.js +2 -0
  63. package/dist/{chunk-63CI3IXR.js → chunk-R3JY4EZ4.js} +10 -10
  64. package/dist/{chunk-FX6ULETZ.js → chunk-R5336VHZ.js} +2 -2
  65. package/dist/chunk-RJMXSHKM.js +2 -0
  66. package/dist/chunk-STBXCPKY.js +5 -0
  67. package/dist/chunk-T2FQ4GHD.js +9 -0
  68. package/dist/chunk-TFWDJDGO.js +2 -0
  69. package/dist/chunk-TG7QSYCJ.js +2 -0
  70. package/dist/{chunk-ZUUNREKS.js → chunk-TTS75UF2.js} +5 -5
  71. package/dist/{chunk-DDQONX6B.js → chunk-U7I373V4.js} +2 -2
  72. package/dist/chunk-UIKLA3F5.js +2 -0
  73. package/dist/{chunk-6BN3EHQE.js → chunk-UMPNL7T6.js} +2 -2
  74. package/dist/chunk-URSSPS5H.js +2 -0
  75. package/dist/chunk-VGMUFW3J.js +2 -0
  76. package/dist/chunk-VXTNADIW.js +18 -0
  77. package/dist/{chunk-PWAK75BU.js → chunk-VYF5HA76.js} +2 -2
  78. package/dist/chunk-WFGOH2UI.js +43 -0
  79. package/dist/chunk-WGA5BBTA.js +4 -0
  80. package/dist/chunk-WIBFXSYB.js +6 -0
  81. package/dist/chunk-WPSS37EW.js +2 -0
  82. package/dist/chunk-WQHWIVA7.js +3 -0
  83. package/dist/chunk-WS3Z6W3M.js +65 -0
  84. package/dist/chunk-WXVGNFAO.js +2 -0
  85. package/dist/{chunk-RXINFVBN.js → chunk-WZLPXFZU.js} +2 -2
  86. package/dist/chunk-X4O6K47U.js +2 -0
  87. package/dist/chunk-X6OGDTQH.js +2 -0
  88. package/dist/chunk-XEMQUN3Z.js +20 -0
  89. package/dist/{chunk-OFXN2BCT.js → chunk-XHWLNQVZ.js} +2 -2
  90. package/dist/chunk-XMR747CP.js +2 -0
  91. package/dist/{chunk-JJ5SAWBT.js → chunk-Y6L4LXPG.js} +2 -2
  92. package/dist/chunk-YCPASUCX.js +2 -0
  93. package/dist/chunk-YZXV3CU3.js +60 -0
  94. package/dist/{chunk-XRUGSM76.js → chunk-ZEKBR4OK.js} +2 -2
  95. package/dist/chunk-ZMGBWSFZ.js +2 -0
  96. package/dist/cli.js +446 -280
  97. package/dist/{config-types-dvHOz0zU.d.ts → config-types-BrHl3Bge.d.ts} +57 -0
  98. package/dist/{db-rMZO5JFK.d.ts → db-_Bdx0E1W.d.ts} +1 -1
  99. package/dist/diff-gate-types-CG2YQ_ei.d.ts +4 -0
  100. package/dist/{frontend-behavior-evidence-BxKpKWUu.d.ts → frontend-behavior-evidence-EfM4_9bc.d.ts} +1 -1
  101. package/dist/{health-CtTIGh6H.d.ts → health-BEZ1Rt0S.d.ts} +54 -2
  102. package/dist/index.d.ts +4 -68
  103. package/dist/index.js +1 -1
  104. package/dist/postinstall.js +1 -4
  105. package/dist/queries/affected.d.ts +2 -2
  106. package/dist/queries/affected.js +1 -1
  107. package/dist/queries/bottlenecks.d.ts +2 -2
  108. package/dist/queries/bottlenecks.js +1 -1
  109. package/dist/queries/by-kind.d.ts +2 -2
  110. package/dist/queries/by-kind.js +1 -1
  111. package/dist/queries/call-graph.d.ts +2 -2
  112. package/dist/queries/call-graph.js +1 -1
  113. package/dist/queries/change-surface.d.ts +2 -2
  114. package/dist/queries/change-surface.js +1 -1
  115. package/dist/queries/cleanup-plan.d.ts +2 -2
  116. package/dist/queries/cleanup-plan.js +1 -1
  117. package/dist/queries/co-change.d.ts +12 -2
  118. package/dist/queries/co-change.js +1 -1
  119. package/dist/queries/code.d.ts +2 -2
  120. package/dist/queries/code.js +1 -1
  121. package/dist/queries/complexity-hotspots.d.ts +7 -3
  122. package/dist/queries/complexity-hotspots.js +1 -1
  123. package/dist/queries/complexity.d.ts +42 -4
  124. package/dist/queries/complexity.js +1 -1
  125. package/dist/queries/convergence.d.ts +2 -2
  126. package/dist/queries/convergence.js +1 -1
  127. package/dist/queries/coupling.d.ts +2 -2
  128. package/dist/queries/coupling.js +1 -1
  129. package/dist/queries/cycles.d.ts +12 -3
  130. package/dist/queries/cycles.js +1 -1
  131. package/dist/queries/dataflow.d.ts +2 -2
  132. package/dist/queries/dataflow.js +1 -1
  133. package/dist/queries/dead.d.ts +3 -3
  134. package/dist/queries/dead.js +1 -1
  135. package/dist/queries/deep-chains.d.ts +2 -2
  136. package/dist/queries/deep-chains.js +1 -1
  137. package/dist/queries/deps.d.ts +2 -2
  138. package/dist/queries/deps.js +1 -1
  139. package/dist/queries/diff-gate.d.ts +65 -8
  140. package/dist/queries/diff-gate.js +1 -1
  141. package/dist/queries/diff-impact.d.ts +21 -3
  142. package/dist/queries/diff-impact.js +1 -1
  143. package/dist/queries/doc-drift.d.ts +29 -2
  144. package/dist/queries/doc-drift.js +1 -1
  145. package/dist/queries/drift.d.ts +15 -3
  146. package/dist/queries/drift.js +1 -1
  147. package/dist/queries/duplicate-bodies.d.ts +55 -0
  148. package/dist/queries/duplicate-bodies.js +2 -0
  149. package/dist/queries/extract-candidates.d.ts +2 -2
  150. package/dist/queries/extract-candidates.js +1 -1
  151. package/dist/queries/fan.d.ts +2 -2
  152. package/dist/queries/fan.js +1 -1
  153. package/dist/queries/files.d.ts +4 -3
  154. package/dist/queries/files.js +1 -1
  155. package/dist/queries/health.d.ts +3 -3
  156. package/dist/queries/health.js +1 -1
  157. package/dist/queries/hierarchy.d.ts +2 -2
  158. package/dist/queries/hierarchy.js +1 -1
  159. package/dist/queries/hotspots.d.ts +2 -2
  160. package/dist/queries/hotspots.js +1 -1
  161. package/dist/queries/imports.d.ts +2 -2
  162. package/dist/queries/imports.js +1 -1
  163. package/dist/queries/incomplete-migration.d.ts +3 -2
  164. package/dist/queries/incomplete-migration.js +1 -1
  165. package/dist/queries/index.d.ts +12 -7
  166. package/dist/queries/index.js +1 -1
  167. package/dist/queries/isolated.d.ts +2 -2
  168. package/dist/queries/isolated.js +1 -1
  169. package/dist/queries/locality-candidates.d.ts +2 -2
  170. package/dist/queries/locality-candidates.js +1 -1
  171. package/dist/queries/members.d.ts +2 -2
  172. package/dist/queries/members.js +1 -1
  173. package/dist/queries/methods.d.ts +2 -2
  174. package/dist/queries/methods.js +1 -1
  175. package/dist/queries/outline.d.ts +2 -2
  176. package/dist/queries/outline.js +1 -1
  177. package/dist/queries/passthrough-candidates.d.ts +11 -3
  178. package/dist/queries/passthrough-candidates.js +1 -1
  179. package/dist/queries/plan-context.d.ts +3 -2
  180. package/dist/queries/plan-context.js +1 -1
  181. package/dist/queries/react-component-duplicates.d.ts +7 -2
  182. package/dist/queries/react-component-duplicates.js +1 -1
  183. package/dist/queries/react-hook-candidates.d.ts +3 -3
  184. package/dist/queries/react-hook-candidates.js +1 -1
  185. package/dist/queries/react-large-component-pressure.d.ts +2 -2
  186. package/dist/queries/react-large-component-pressure.js +1 -1
  187. package/dist/queries/recent-duplicates.d.ts +2 -2
  188. package/dist/queries/recent-duplicates.js +1 -1
  189. package/dist/queries/redundant-reexports.d.ts +2 -2
  190. package/dist/queries/redundant-reexports.js +1 -1
  191. package/dist/queries/refs.d.ts +2 -2
  192. package/dist/queries/refs.js +1 -1
  193. package/dist/queries/self-audit.d.ts +4 -2
  194. package/dist/queries/self-audit.js +1 -1
  195. package/dist/queries/similar-chains.d.ts +2 -2
  196. package/dist/queries/similar-chains.js +1 -1
  197. package/dist/queries/similar-files.d.ts +2 -2
  198. package/dist/queries/similar-files.js +1 -1
  199. package/dist/queries/similar-signatures.d.ts +17 -10
  200. package/dist/queries/similar-signatures.js +1 -1
  201. package/dist/queries/similar.d.ts +42 -3
  202. package/dist/queries/similar.js +1 -1
  203. package/dist/queries/slice.d.ts +2 -2
  204. package/dist/queries/slice.js +1 -1
  205. package/dist/queries/stale-abstractions.d.ts +2 -2
  206. package/dist/queries/stale-abstractions.js +1 -1
  207. package/dist/queries/stats.d.ts +2 -2
  208. package/dist/queries/surface.d.ts +2 -2
  209. package/dist/queries/surface.js +1 -1
  210. package/dist/queries/symbols.d.ts +2 -2
  211. package/dist/queries/symbols.js +1 -1
  212. package/dist/queries/system.d.ts +2 -2
  213. package/dist/queries/system.js +1 -1
  214. package/dist/queries/trace.d.ts +2 -2
  215. package/dist/queries/trace.js +1 -1
  216. package/dist/queries/twin-ab.d.ts +55 -0
  217. package/dist/queries/twin-ab.js +2 -0
  218. package/dist/queries/twin-drift.d.ts +97 -0
  219. package/dist/queries/twin-drift.js +2 -0
  220. package/dist/queries/unused-imports.d.ts +2 -2
  221. package/dist/queries/unused-imports.js +1 -1
  222. package/dist/queries/unused-params.d.ts +2 -2
  223. package/dist/queries/unused-params.js +1 -1
  224. package/dist/queries/vue-component-duplicates.d.ts +7 -2
  225. package/dist/queries/vue-component-duplicates.js +1 -1
  226. package/dist/queries/vue-composable-candidates.d.ts +3 -3
  227. package/dist/queries/vue-composable-candidates.js +1 -1
  228. package/dist/queries/vue-large-view-pressure.d.ts +6 -2
  229. package/dist/queries/vue-large-view-pressure.js +1 -1
  230. package/dist/queries/wrapper-candidates.d.ts +2 -2
  231. package/dist/queries/wrapper-candidates.js +1 -1
  232. package/dist/reindex-worker.js +9 -9
  233. package/dist/reindex.d.ts +3 -3
  234. package/dist/reindex.js +19 -19
  235. package/dist/runtime.d.ts +11 -6
  236. package/dist/runtime.js +2 -2
  237. package/dist/{scip-cli-trnNvymv.d.ts → scip-cli-C7cg4ZHR.d.ts} +1 -1
  238. package/dist/symbol-types-DaoeXKUt.d.ts +66 -0
  239. package/docs/AGENT_GUIDE.md +20 -18
  240. package/docs/AI_FAILURE_MODES.md +36 -13
  241. package/docs/API.md +1 -1
  242. package/docs/COMMAND_REFERENCE.md +56 -13
  243. package/docs/DETECTOR_GUIDE.md +20 -3
  244. package/docs/REGEX_POLICY.md +34 -0
  245. package/docs/analyzer-inventory.md +40 -3
  246. package/docs/analyzer-validation-ledger.md +34 -6
  247. package/package.json +21 -7
  248. package/scripts/build-scip-windows.mjs +10 -7
  249. package/skills/_shared/SKILL.md +243 -0
  250. package/skills/_shared/agents/openai.yaml +4 -0
  251. package/skills/scip-api-impact/SKILL.md +55 -71
  252. package/skills/scip-claim-audit/SKILL.md +105 -0
  253. package/skills/scip-claim-audit/agents/openai.yaml +4 -0
  254. package/skills/scip-cleanup-audit/SKILL.md +122 -0
  255. package/skills/scip-cleanup-audit/agents/openai.yaml +4 -0
  256. package/skills/scip-cleanup-improve/SKILL.md +84 -0
  257. package/skills/scip-cleanup-improve/agents/openai.yaml +4 -0
  258. package/skills/scip-concrete-plan/SKILL.md +181 -0
  259. package/skills/scip-concrete-plan/agents/openai.yaml +4 -0
  260. package/skills/scip-conductor/SKILL.md +133 -0
  261. package/skills/scip-conductor/agents/openai.yaml +4 -0
  262. package/skills/scip-debug/SKILL.md +60 -58
  263. package/skills/scip-diagram/SKILL.md +64 -94
  264. package/skills/scip-directory-architecture/SKILL.md +65 -107
  265. package/skills/scip-doc-reconcile/SKILL.md +56 -67
  266. package/skills/scip-explore/SKILL.md +78 -210
  267. package/skills/scip-hyper-optimization/SKILL.md +124 -198
  268. package/skills/scip-integrity-audit/SKILL.md +103 -0
  269. package/skills/scip-integrity-audit/agents/openai.yaml +4 -0
  270. package/skills/scip-language-playbook/SKILL.md +56 -326
  271. package/skills/scip-maintainability/SKILL.md +80 -219
  272. package/skills/scip-probe-reachability/SKILL.md +92 -0
  273. package/skills/scip-probe-reachability/agents/openai.yaml +4 -0
  274. package/skills/scip-query/SKILL.md +108 -124
  275. package/skills/scip-react-maintainability/SKILL.md +64 -82
  276. package/skills/scip-setup/SKILL.md +121 -0
  277. package/skills/scip-setup/agents/openai.yaml +4 -0
  278. package/skills/scip-tla-model-system/SKILL.md +138 -0
  279. package/skills/scip-tla-model-system/agents/openai.yaml +4 -0
  280. package/skills/scip-triage-issue/SKILL.md +53 -41
  281. package/skills/scip-twin-drift/SKILL.md +107 -0
  282. package/skills/scip-twin-drift/agents/openai.yaml +4 -0
  283. package/skills/scip-verify/SKILL.md +70 -88
  284. package/skills/scip-vue-maintainability/SKILL.md +67 -94
  285. package/dist/chunk-2DOW7QCA.js +0 -71
  286. package/dist/chunk-2FMFF4RI.js +0 -2
  287. package/dist/chunk-5GXTUANY.js +0 -2
  288. package/dist/chunk-5JHEN5VN.js +0 -25
  289. package/dist/chunk-62ULXMQ7.js +0 -18
  290. package/dist/chunk-7EK7OSWS.js +0 -2
  291. package/dist/chunk-7IWIMNHI.js +0 -2
  292. package/dist/chunk-7XTO4YXB.js +0 -8
  293. package/dist/chunk-AOWFUGDL.js +0 -2
  294. package/dist/chunk-AREANYIA.js +0 -3
  295. package/dist/chunk-AZBELWZQ.js +0 -7
  296. package/dist/chunk-B32FX5KB.js +0 -2
  297. package/dist/chunk-B6MJ5VQV.js +0 -2
  298. package/dist/chunk-CXWCLVYL.js +0 -2
  299. package/dist/chunk-CYHIKTJN.js +0 -3
  300. package/dist/chunk-DFSEARAU.js +0 -2
  301. package/dist/chunk-DVFP6PZI.js +0 -2
  302. package/dist/chunk-E3ADDB43.js +0 -2
  303. package/dist/chunk-F6IXELII.js +0 -20
  304. package/dist/chunk-FMGVZBS2.js +0 -2
  305. package/dist/chunk-GG5LHT27.js +0 -2
  306. package/dist/chunk-H7JF2CKK.js +0 -2
  307. package/dist/chunk-HHOMJCP5.js +0 -4
  308. package/dist/chunk-HRDSU5FN.js +0 -9
  309. package/dist/chunk-HWVYTJOV.js +0 -2
  310. package/dist/chunk-JNMLBL36.js +0 -2
  311. package/dist/chunk-L446VQYQ.js +0 -2
  312. package/dist/chunk-LDJUB7XW.js +0 -2
  313. package/dist/chunk-MYTUWXHK.js +0 -4
  314. package/dist/chunk-N25HPUOK.js +0 -2
  315. package/dist/chunk-NABVR6B7.js +0 -2
  316. package/dist/chunk-NBNEVLRC.js +0 -3
  317. package/dist/chunk-ONPCQ2PM.js +0 -6
  318. package/dist/chunk-Q5P7NOVM.js +0 -2
  319. package/dist/chunk-RGKRYO22.js +0 -4
  320. package/dist/chunk-RM2WQ75T.js +0 -2
  321. package/dist/chunk-ROGZXWN2.js +0 -2
  322. package/dist/chunk-RSSXKJ6J.js +0 -38
  323. package/dist/chunk-RVGEZYMQ.js +0 -2
  324. package/dist/chunk-SA3DPTHT.js +0 -7
  325. package/dist/chunk-SGTKURU6.js +0 -52
  326. package/dist/chunk-T4N2ZRVY.js +0 -21
  327. package/dist/chunk-THB6AM3V.js +0 -11
  328. package/dist/chunk-ULHLDOD6.js +0 -4
  329. package/dist/chunk-UQ73QF5D.js +0 -43
  330. package/dist/chunk-UUBMFL3F.js +0 -59
  331. package/dist/chunk-V5FGK3DZ.js +0 -2
  332. package/dist/chunk-WTY5FERW.js +0 -2
  333. package/dist/chunk-WUOB4DHH.js +0 -6
  334. package/dist/chunk-YFQIKYOP.js +0 -2
  335. package/dist/chunk-Z2LDWIJV.js +0 -5
  336. package/dist/chunk-ZNWWVYQL.js +0 -3
  337. package/skills/concrete-plan/SKILL.md +0 -372
  338. package/skills/concrete-plan/agents/openai.yaml +0 -4
  339. package/skills/scip-adoption/SKILL.md +0 -122
  340. package/skills/scip-adoption/agents/openai.yaml +0 -4
  341. package/skills/scip-ai-cleanup/SKILL.md +0 -153
  342. package/skills/scip-ai-cleanup/agents/openai.yaml +0 -4
  343. package/skills/scip-debloat/SKILL.md +0 -439
  344. package/skills/scip-debloat/agents/openai.yaml +0 -4
  345. package/skills/scip-health-audit/SKILL.md +0 -162
  346. package/skills/scip-health-audit/agents/openai.yaml +0 -4
  347. package/skills/scip-health-improve/SKILL.md +0 -155
  348. package/skills/scip-health-improve/agents/openai.yaml +0 -4
  349. package/skills/scip-query-setup/SKILL.md +0 -170
  350. package/skills/scip-query-setup/agents/openai.yaml +0 -3
  351. package/vendor/scip/README.md +0 -6
  352. package/vendor/scip/win32-arm64/scip.exe +0 -0
  353. package/vendor/scip/win32-x64/scip.exe +0 -0
@@ -1,70 +1,76 @@
1
1
  ---
2
2
  name: scip-verify
3
- description: Post-implementation verification using scip-query's modern gate model. Use after making code, docs, config, refactor, cleanup, or setup changes; before committing; when the user asks whether a change is wired correctly, safe, verified, regression-free, or ready to ship.
3
+ description: Verify finished code, docs, config, refactor, cleanup, setup, React, Vue, or API changes with scip-query. Use before committing or when the user asks whether a change is wired, safe, regression-free, or ready.
4
+ commands:
5
+ - template: "scip-query doctor"
6
+ when: "Prove the workspace: index freshness and dependency readiness."
7
+ - template: "scip-query status --capabilities"
8
+ when: "Prove the workspace: which evidence and verification capabilities are available."
9
+ - template: "scip-query diff-impact --json"
10
+ when: "Assess the diff: changed symbols and downstream consumers."
11
+ - template: "scip-query diff-gate --json"
12
+ when: "Run the gate: the primary blocker for diff-specific risk."
13
+ - template: "scip-query health --baseline"
14
+ when: "Check health: compare findings against the committed baseline."
15
+ - template: "scip-query doc-drift --json --full"
16
+ when: "Check docs: run when docs, AGENTS.md, or command surfaces changed."
4
17
  ---
5
18
 
6
- # Post-Implementation Verification with scip-query
19
+ # scip-verify
7
20
 
8
- Verify the actual diff, not your intention. A verification pass proves that the current workspace has a runnable scip-query environment, a current index, expected blast radius, no diff-gate findings, and no relevant health or config regression.
21
+ Use this skill to verify the actual diff. Verification is the evidence pass that proves the workspace can answer, the index is current, the changed symbols and files match intent, routed postchecks ran, and diff-gate findings are resolved.
9
22
 
10
- ## Hard Rules
23
+ Load shared mechanics from [`../_shared/SKILL.md`](../_shared/SKILL.md).
11
24
 
12
- 1. Run environment checks before trusting graph facts.
13
- 2. Check index freshness before final verification. Reindex only when freshness is `stale`, `missing`, or `unknown`, unless a just-finished command already refreshed the index and no files changed afterward.
14
- 3. Treat `scip-query diff-gate --json` as the primary blocker for diff-specific risk. Manual checks are drill-down evidence, not a replacement.
15
- 4. Run the postchecks that match the actual change type.
16
- 5. Prefer fixing findings. Use `scip-query suppress <id> --reason "<specific reason>"` only for intentional design, compatibility shims, framework entry points, or accepted false positives with durable evidence.
17
- 6. If `.scipquery.json` or suppressions changed, run `scip-query config-validate`.
25
+ <!-- BEGIN GENERATED SKILL COMMANDS -->
26
+ ## Commands for this skill
18
27
 
19
- ## Default Verification Flow
28
+ | Command | Purpose | When |
29
+ | --- | --- | --- |
30
+ | `scip-query doctor` | Diagnose config, index freshness, dependency readiness, and project capabilities | Prove the workspace: index freshness and dependency readiness. |
31
+ | `scip-query status --capabilities` | Show index status for this project | Prove the workspace: which evidence and verification capabilities are available. |
32
+ | `scip-query diff-impact --json` | Compute changed symbols and downstream consumers from current git diff | Assess the diff: changed symbols and downstream consumers. |
33
+ | `scip-query diff-gate --json` | Gate the current diff: echo candidates, incomplete migrations, missing co-change partners, unedited twin partners (advisory), uncited doc updates, unused params, new dead symbols; exit 1 on blocking findings | Run the gate: the primary blocker for diff-specific risk. |
34
+ | `scip-query health --baseline` | Composite codebase health report with prioritized action list | Check health: compare findings against the committed baseline. |
35
+ | `scip-query doc-drift --json --full` | Stale-doc candidates: code the doc references or co-changed with kept changing after the doc stopped | Check docs: run when docs, AGENTS.md, or command surfaces changed. |
20
36
 
21
- ### 1. Prove the workspace can answer
37
+ Use this shortlist first. Open [`../_shared/SKILL.md`](../_shared/SKILL.md) only when it is insufficient.
38
+ <!-- END GENERATED SKILL COMMANDS -->
39
+
40
+ ## Rules
41
+
42
+ 1. Verify environment and index freshness before trusting graph facts.
43
+ 2. Treat `scip-query diff-gate --json` as the primary blocker for diff-specific risk.
44
+ 3. Run every postcheck that matches the actual edit, not only the check you expected to need.
45
+ 4. If `.scipquery.json` or suppressions changed, run `scip-query config-validate`.
46
+ 5. Prefer fixing findings. Suppress only intentional design, compatibility shims, framework entry points, or accepted false positives with a specific reason.
47
+
48
+ ## Flow
49
+
50
+ ### 1. Prove the workspace
22
51
 
23
52
  ```bash
24
53
  scip-query doctor
25
54
  scip-query status --capabilities
26
55
  ```
27
56
 
28
- If either command reports missing indexers, stale indexes, invalid config, or unavailable capabilities relevant to the change, resolve that first or report it as a blocker. Unavailable is not clean; it means that signal class was not proven.
57
+ This step is complete only when missing indexers, invalid config, stale indexes, or unavailable relevant capabilities are fixed or reported as blockers.
29
58
 
30
- ### 2. Refresh and assess the diff
59
+ ### 2. Assess the diff
31
60
 
32
61
  ```bash
33
- scip-query status --capabilities
34
- # If freshness is stale, missing, or unknown:
35
- # scip-query reindex
36
62
  scip-query diff-impact --json
37
63
  ```
38
64
 
39
- Use `diff-impact` to check whether the changed files, changed symbols, and downstream consumers match the work you intended to do. Unexpected symbols or a much wider blast radius are findings even if `diff-gate` later passes.
40
-
41
- ### 3. Run routed postchecks
65
+ Compare changed files, changed symbols, and downstream consumers with the intended work. Unexpected blast radius is a finding even if later gates pass.
42
66
 
43
- Run every row that applies to the work just performed.
67
+ This step is complete only when the diff shape is understood.
44
68
 
45
- | Change type | Required checks |
46
- |---|---|
47
- | Extracted a helper or created an abstraction | `scip-query incomplete-migration --json --full` |
48
- | Added a new helper, module, component, or adapter | `scip-query similar <symbol> --json --full` and `scip-query recent-duplicates --json --full` |
49
- | Added parameters, options, or config flags | `scip-query unused-params --json --full` |
50
- | Added a forwarding or wrapper layer | `scip-query wrapper-candidates --json --full` and `scip-query passthrough-candidates --json --full` |
51
- | Added an interface, base class, adapter contract, or type alias | `scip-query stale-abstractions --json --full` |
52
- | Changed schema, config, generated artifacts, or public contracts | `scip-query co-change <file> --json --full` |
53
- | Changed code described by docs or changed docs that cite code | `scip-query doc-drift --json --full` |
54
- | Deleted code | `scip-query cleanup-plan --verify --json` |
55
- | Changed React components or hooks | `scip-query react-component-duplicates --json --full`, `scip-query react-hook-candidates --json --full`, and `scip-query react-large-component-pressure --json --full` |
56
- | Changed Vue SFCs or composables | `scip-query vue-component-duplicates --json --full`, `scip-query vue-composable-candidates --json --full`, and `scip-query vue-large-view-pressure --json --full` |
69
+ ### 3. Run routed postchecks
57
70
 
58
- Use focused probes when a finding needs explanation:
71
+ Use the postcheck table in the shared reference. Run all rows that apply to the change type.
59
72
 
60
- ```bash
61
- scip-query code <symbol-or-file>
62
- scip-query refs <symbol>
63
- scip-query fan-in <symbol>
64
- scip-query fan-out <symbol>
65
- scip-query affected <symbol> --json
66
- scip-query change-surface <file> --json --full
67
- ```
73
+ This step is complete only when each applicable postcheck has a result and every actionable finding is fixed, accepted with evidence, or blocked by a named constraint.
68
74
 
69
75
  ### 4. Run the gate
70
76
 
@@ -72,89 +78,65 @@ scip-query change-surface <file> --json --full
72
78
  scip-query diff-gate --json
73
79
  ```
74
80
 
75
- On any finding, fix it or explicitly accept it with evidence. Do not ignore a nonzero gate. If a suppression is the right outcome, record the reason and validate config:
81
+ If it reports findings, fix them or record the acceptance reason. If a suppression is needed:
76
82
 
77
83
  ```bash
78
84
  scip-query suppress <id> --reason "<specific reason>"
79
85
  scip-query config-validate
80
86
  ```
81
87
 
82
- ### 5. Check baseline health when present
88
+ This step is complete only when `diff-gate` passes or every finding has a durable explanation.
83
89
 
84
- Run this when the repository has a committed scip-query baseline:
85
-
86
- ```bash
87
- scip-query health --baseline
88
- ```
90
+ ### 5. Check health, docs, and config when relevant
89
91
 
90
- If no baseline exists and the user asked for broad health verification, run:
92
+ Run:
91
93
 
92
94
  ```bash
93
- scip-query health --json --full
95
+ scip-query health --baseline
94
96
  ```
95
97
 
96
- Health score changes are diagnostic, not the objective. A score drop matters when it corresponds to a real new signal; a score increase does not excuse unverified behavior.
97
-
98
- ### 6. Validate config and docs when touched
99
-
100
- If `.scipquery.json`, AGENTS.md, CLAUDE.md, command docs, or skill instructions changed, run the relevant check:
98
+ when a committed baseline exists. If docs, AGENTS.md, CLAUDE.md, command docs, generated docs, or skill instructions changed, run:
101
99
 
102
100
  ```bash
103
- scip-query config-validate
104
101
  scip-query doc-drift --json --full
105
102
  ```
106
103
 
107
- For generated command docs, also run the repo's descriptor or docs test if one exists.
108
-
109
- If you are maintaining scip-query analyzers or command descriptors inside the scip-query repository itself, add:
104
+ If the repository provides a self-audit command and the change touches generated command surfaces, analyzers, or evidence-labeling behavior, also run:
110
105
 
111
106
  ```bash
112
107
  scip-query self-audit
113
108
  ```
114
109
 
115
- This is a maintainer check for analyzer consistency, not a general app-developer verification step.
110
+ This step is complete only when changed documentation and config surfaces are checked or explicitly out of scope.
116
111
 
117
- ## Manual Drill-Down Checks
112
+ ## Report
118
113
 
119
- Use these when `diff-impact`, routed postchecks, or `diff-gate` point to a structural risk:
120
-
121
- ```bash
122
- scip-query cycles
123
- scip-query dead --json --full
124
- scip-query isolated --json --full
125
- scip-query coupling
126
- scip-query bottlenecks
127
- ```
128
-
129
- These commands are not a substitute for `diff-gate`; they explain or bound the finding.
130
-
131
- ## Verification Report
132
-
133
- End with a compact report:
114
+ End with:
134
115
 
135
116
  ```markdown
136
117
  Verification: PASS/FAIL
137
118
 
138
119
  Environment:
139
- - doctor: PASS/FAIL
140
- - status capabilities: PASS/FAIL or unavailable checks
120
+ - doctor:
121
+ - status:
141
122
 
142
123
  Diff:
143
- - changed files/symbols from `scip-query diff-impact --json`
144
- - unexpected blast radius, if any
124
+ - changed files/symbols:
125
+ - unexpected blast radius:
145
126
 
146
127
  Postchecks:
147
- - <command>: PASS/FAIL and finding count
128
+ - <command>: <result>
148
129
 
149
130
  Gate:
150
- - `scip-query diff-gate --json`: PASS/FAIL
131
+ - `scip-query diff-gate --json`: <result>
151
132
 
152
- Health/config:
153
- - baseline or health result
154
- - config validation result when applicable
133
+ Health/docs/config:
134
+ - <commands and results>
155
135
 
156
136
  Remaining risk:
157
- - accepted suppressions, blocked capabilities, or checks not run
137
+ - <accepted findings, unavailable capabilities, or checks not run>
158
138
  ```
159
139
 
160
- Do not claim "safe to commit" unless freshness is `fresh` after the final file edit and `scip-query diff-gate --json` passed.
140
+ Do not claim ready-to-ship unless freshness is `fresh` after the final edit and diff-gate is passed or fully explained.
141
+
142
+ - `dead`/`new-dead` correctly resolve `import type` consumers, tsconfig `paths` aliases, pnpm/npm/yarn workspace cross-package imports, and Vue `<script setup>` composables. The one residual gap is a same-named symbol reached only through a re-exporting barrel file in a workspace package; that shape self-labels `unconfirmed (cross-package ambiguous-name resolution gap)` in the finding — treat only that label as unconfirmed until `refs` agrees. See the Detector Reliability section in `../_shared/SKILL.md`.
@@ -1,134 +1,107 @@
1
1
  ---
2
2
  name: scip-vue-maintainability
3
- description: Vue frontend maintainability review using scip-query's Vue SFC, template-duplicate, composable-candidate, large-view, and health commands. Use when reviewing Vue or Nuxt codebases, investigating duplicated components or composables, checking frontend health score pressure, or asking whether agents are reusing Vue code correctly.
3
+ description: Review Vue maintainability with scip-query. Use for Vue, Nuxt, SFCs, duplicated templates, composable candidates, large views, frontend health pressure, or verifying Vue reuse after refactors.
4
+ commands:
5
+ - template: "scip-query augment-vue --project <path-to-tsconfig>"
6
+ when: "Bound and augment: add compiler-resolved Vue SFC references first."
7
+ - template: "scip-query vue-component-duplicates --scope <scope> --full --json"
8
+ when: "Scan: duplicated template structure candidates."
9
+ - template: "scip-query vue-composable-candidates --scope <scope> --full --json"
10
+ when: "Scan: shared state/lifecycle extraction candidates."
11
+ - template: "scip-query vue-large-view-pressure --scope <scope> --full --json"
12
+ when: "Scan: SFCs carrying several reasons to change."
13
+ - template: "scip-query recent-duplicates --scope <scope> --full --json"
14
+ when: "Scan: recent code re-implementing established components."
15
+ - template: "scip-query health --json"
16
+ when: "Scan: frontend health pressure baseline."
4
17
  ---
5
18
 
6
- # SCIP Vue Maintainability Review
19
+ # scip-vue-maintainability
7
20
 
8
- This skill reviews Vue frontends by treating `.vue` single-file components as first-class code units. It uses `scip-query` evidence to decide where templates, scripts, styles, external scripts, components, and composables are carrying duplicated concepts or too many reasons to change.
21
+ Use this skill to review Vue frontends as maintainable systems of single-file components, templates, scripts, styles, external scripts, components, and composables.
9
22
 
10
- A Vue component duplicate candidate is a pair or group of rendered interface structures that repeat the same user-facing arrangement, controls, states, or data-presentation shape enough that a shared component may reduce future divergence.
23
+ Load shared mechanics from [`../_shared/SKILL.md`](../_shared/SKILL.md).
11
24
 
12
- A Vue composable candidate is a pair or group of script behaviors that repeat the same state lifecycle, effects, requests, validation, persistence, or derived-data policy enough that a shared composable may make the behavior easier to preserve.
25
+ <!-- BEGIN GENERATED SKILL COMMANDS -->
26
+ ## Commands for this skill
13
27
 
14
- Large view pressure is a maintainability signal that one SFC or linked view file contains several kinds of knowledge that change for different reasons, such as layout structure, state management, data loading, styling, and feature policy.
28
+ | Command | Purpose | When |
29
+ | --- | --- | --- |
30
+ | `scip-query augment-vue --project <path-to-tsconfig>` | Add compiler-resolved Vue SFC references to the SQLite index using Volar | Bound and augment: add compiler-resolved Vue SFC references first. |
31
+ | `scip-query vue-component-duplicates --scope <scope> --full --json` | Find heuristic duplicated Vue component structure candidates from template tags, bindings, slots, and directives | Scan: duplicated template structure candidates. |
32
+ | `scip-query vue-composable-candidates --scope <scope> --full --json` | Find heuristic Vue composable extraction candidates from shared state, effects, requests, and template bindings | Scan: shared state/lifecycle extraction candidates. |
33
+ | `scip-query vue-large-view-pressure --scope <scope> --full --json` | Find heuristic large Vue view pressure candidates from template, script, style, and external script line counts | Scan: SFCs carrying several reasons to change. |
34
+ | `scip-query recent-duplicates --scope <scope> --full --json` | Directional duplicate candidates: recent code that re-implements established callable, React, or Vue code | Scan: recent code re-implementing established components. |
35
+ | `scip-query health --json` | Composite codebase health report with prioritized action list | Scan: frontend health pressure baseline. |
15
36
 
16
- Vue health is a repo-grounded frontend pressure map. It is useful for ranking review attention, but it is not proof that code is bad and not the goal of a refactor.
37
+ Use this shortlist first. Open [`../_shared/SKILL.md`](../_shared/SKILL.md) only when it is insufficient.
38
+ <!-- END GENERATED SKILL COMMANDS -->
17
39
 
18
- ## Quick Start
40
+ ## Terms
19
41
 
20
- Refresh the code intelligence before trusting graph facts:
42
+ A Vue component duplicate candidate is a pair or group of rendered structures that repeat the same user-facing arrangement, controls, states, or data-presentation shape enough that a shared component may reduce drift.
21
43
 
22
- ```bash
23
- scip-query status
24
- scip-query status --capabilities
25
- # If freshness is stale, missing, or unknown:
26
- # scip-query reindex
27
- ```
44
+ A Vue composable candidate is a pair or group of script behaviors that repeat the same state lifecycle, effects, requests, validation, persistence, or derived-data policy enough that a shared composable may preserve behavior better.
45
+
46
+ Large view pressure means one SFC or linked view file contains several kinds of knowledge that change for different reasons.
47
+
48
+ ## Workflow
49
+
50
+ ### 1. Bound and augment
28
51
 
29
- If Vue files need rich internals, find the relevant TypeScript project and augment the index:
52
+ Pick the narrowest Vue source root, feature area, or changed-file scope that still includes likely reuse partners. When component references, imported composables, script blocks, or linked external scripts matter, run:
30
53
 
31
54
  ```bash
32
- find . -name 'tsconfig*.json' -not -path '*/node_modules/*'
33
55
  scip-query augment-vue --project <path-to-tsconfig>
34
56
  ```
35
57
 
36
- Run the Vue review commands uncapped when doing a serious frontend pass. Do not combine `--full` with `--limit`.
58
+ This step is complete only when the review scope and augmentation decision are recorded.
59
+
60
+ ### 2. Scan
61
+
62
+ Run uncapped commands:
37
63
 
38
64
  ```bash
39
- scip-query vue-component-duplicates --scope <vue-source-scope> --full --json
40
- scip-query vue-composable-candidates --scope <vue-source-scope> --full --json
41
- scip-query vue-large-view-pressure --scope <vue-source-scope> --full --json
65
+ scip-query vue-component-duplicates --scope <scope> --full --json
66
+ scip-query vue-composable-candidates --scope <scope> --full --json
67
+ scip-query vue-large-view-pressure --scope <scope> --full --json
68
+ scip-query recent-duplicates --scope <scope> --full --json
42
69
  scip-query health --json
43
70
  ```
44
71
 
45
- ## Workflow
72
+ This step is complete only when command scope, counts, and uncapped/full status are recorded.
73
+
74
+ ### 3. Cross-check candidates
75
+
76
+ - Component duplicate only: inspect for shared presentational component or existing component reuse.
77
+ - Composable candidate only: inspect for shared lifecycle, request, validation, persistence, event, or derived-state policy.
78
+ - Both: inspect for a feature-level concept needing both component and composable boundaries.
79
+ - Large view only: split by reason to change, not by line count.
46
80
 
47
- 1. Bound the review to a Vue source root, feature area, or changed files. Prefer the narrowest scope that still includes likely reuse partners.
48
- 2. Run `augment-vue` when component references, imported composables, script blocks, or linked external scripts matter to the question.
49
- 3. Run the three Vue commands: component duplicates, composable candidates, and large view pressure.
50
- 4. Cross-check the result sets before recommending an extraction:
51
- - Component duplicate only: inspect for a shared presentational component or an existing component that callers should reuse.
52
- - Composable candidate only: inspect for a shared behavior, lifecycle, request pattern, validation rule, persistence rule, or derived-state policy.
53
- - Both component and composable candidate: inspect for a feature-level concept that may need both a component boundary and a composable boundary.
54
- - Large view only: split by reason to change, not by line count alone.
55
- 5. Open the source files for the top candidates. Similarity is evidence to inspect, not a verdict.
56
- 6. Check existing exports, imports, and call sites before proposing anything new:
81
+ Use:
57
82
 
58
83
  ```bash
59
84
  scip-query outline <file>
60
85
  scip-query deps <file>
61
86
  scip-query rdeps <file>
62
- scip-query similar-files --scope <vue-source-scope>
63
- scip-query recent-duplicates --scope <vue-source-scope> --full --json
87
+ scip-query similar-files --scope <scope>
88
+ scip-query recent-duplicates --scope <scope> --full --json
64
89
  ```
65
90
 
66
- ## Acting on Findings
91
+ This step is complete only when each top candidate is reuse, extract, split, skip, or blocked.
67
92
 
68
- Prefer reuse before extraction. If an existing component or composable already names the concept, migrate callers to it instead of creating another one.
93
+ ### 4. Act and verify
69
94
 
70
- When extracting:
95
+ Prefer reuse before extraction. Extract components for repeated template structure, props, slots, states, or design-system composition. Extract composables for repeated state, lifecycle, requests, validation, persistence, derived data, or event policy. Keep essential variation at the call site.
71
96
 
72
- - Extract a component when the repeated knowledge is rendered template structure, props, slots, empty/loading/error states, or design-system composition.
73
- - Extract a composable when the repeated knowledge is state, lifecycle, requests, validation, persistence, derived data, or shared event policy.
74
- - Split a large view by reason to change: data loading, permission/policy, layout shell, table/list rendering, form state, and action handling are different reasons.
75
- - Keep domain-specific variation at the call site when the variation is essential. Do not hide different product rules behind broad option objects.
97
+ Run routed postchecks from the shared reference, including Vue commands, `incomplete-migration`, `recent-duplicates`, `unused-params`, and wrapper/passthrough/stale checks, then invoke `scip-verify`.
76
98
 
77
- ## Post-Change Verification
78
-
79
- After implementing a component reuse, composable extraction, or large-view split, prove both sides of the work: the new abstraction exists and the old inline copies were migrated.
80
-
81
- Run the checks that match what changed:
82
-
83
- ```bash
84
- scip-query diff-impact --json
85
- scip-query vue-component-duplicates --scope <vue-source-scope> --full --json
86
- scip-query vue-composable-candidates --scope <vue-source-scope> --full --json
87
- scip-query vue-large-view-pressure --scope <vue-source-scope> --full --json
88
- scip-query recent-duplicates --scope <vue-source-scope> --full --json
89
- scip-query incomplete-migration
90
- scip-query unused-params
91
- scip-query wrapper-candidates --scope <vue-source-scope> --full --json
92
- scip-query passthrough-candidates --scope <vue-source-scope> --full --json
93
- scip-query stale-abstractions --scope <vue-source-scope> --include-low-confidence --full --json
94
- scip-query status --capabilities
95
- # If freshness is stale, missing, or unknown:
96
- # scip-query reindex
97
- scip-query diff-gate --json
98
- ```
99
-
100
- Use the results this way:
101
-
102
- - `incomplete-migration`: if a new composable/helper was created and wired somewhere, migrate every unchanged site that still contains the same logic or document why it is not the same behavior.
103
- - `recent-duplicates`: if the new component/composable is still an echo of established code, delete the echo or reuse the established concept.
104
- - Vue duplicate commands: the specific candidate pair you acted on should disappear, weaken materially, or be explicitly accepted as essential variation.
105
- - `unused-params`: remove speculative props/options introduced "for later."
106
- - wrapper/pass-through/stale checks: remove local wrapper components, composable aliases, or type abstractions that do not enforce a real policy.
107
- - `diff-gate`: treat every finding as unfinished work unless there is a written reason to accept it.
99
+ The work is complete only when acted-on candidate pairs disappear, weaken materially, or are explicitly accepted as essential variation.
108
100
 
109
101
  ## False Positive Checks
110
102
 
111
- - Shared design-system primitives, CSS utility classes, icons, labels, or test IDs are not enough to justify an extraction.
112
- - Similar templates with different domain lifecycles may justify a presentational component but not a composable.
113
- - Shared composable usage may mean the right concept is already extracted; look for drift around the shared call, not just another extraction.
114
- - A large style block creates review pressure, but it is not proof that behavior is duplicated.
115
- - A local wrapper is justified only when it names a real product concept, enforces a policy, or prevents drift across callers.
116
-
117
- ## Reporting Shape
118
-
119
- Report findings as a frontend maintainability register:
120
-
121
- - Executive read: whether the Vue code is consolidating or drifting.
122
- - Command evidence: exact commands, scope, counts, and whether results were uncapped.
123
- - Candidate groups: files, repeated UI structure, repeated behavior, and large-view pressure.
124
- - Recommended extractions: component, composable, view split, reuse existing API, or no action.
125
- - Post-change proof: commands rerun, candidate pairs resolved or accepted, migration completeness checked, and `diff-gate` result.
126
-
127
- ## Stable Management Calibration
103
+ Shared design-system primitives, CSS utilities, icons, labels, or test IDs are not enough. Similar templates with different domain lifecycles may justify a presentational component but not a composable. A large style block is pressure, not proof.
128
104
 
129
- When validating against Stable Management, use these known shapes as calibration examples, not hard-coded rules:
105
+ ## Report
130
106
 
131
- - `IncidentCategoriesPanel.vue` and `RecordLabelsPanel.vue` should read as both component and behavior pressure.
132
- - `CardActionMenu.vue` and `CardStatusMenu.vue` should read as behavior/composable pressure.
133
- - `HorseProfileFarrierVisitsSection.vue` and `HorseProfileVetRecordsSection.vue` should read as component pressure without forcing a composable.
134
- - `InventoryView.vue` and `FacilityBookingView.vue` should count linked external script pressure when measuring large views.
107
+ Report executive read, command evidence, candidate groups, recommended action, post-change proof, and remaining accepted variation.
@@ -1,71 +0,0 @@
1
- import Ue from"better-sqlite3";import{existsSync as zt}from"fs";import{dirname as Yt,join as Qt,resolve as $e}from"path";import oe from"better-sqlite3";import{execFileSync as ie}from"child_process";import{existsSync as se,readdirSync as ae,readFileSync as ue}from"fs";import{extname as m,join as D}from"path";import B from"ignore";import{readFileSync as J,existsSync as h}from"fs";import{dirname as b,isAbsolute as x,join as S,relative as z,resolve as q}from"path";function V(e){let t=B(),r=!1,n=Y(e);for(let i of n)try{let o=J(i,"utf-8");t.add(o),r=!0}catch{}return r||t.add(Q),{isIgnored:i=>C(t,e,i),filter:i=>i.filter(o=>!C(t,e,o))}}function Y(e){let t=[],r=S(e,".gitignore");h(r)&&t.push(r);let n=b(e),i=0;for(;n!==b(n)&&i<5;){let o=S(n,".gitignore");if(h(o)&&t.push(o),h(S(n,".git")))break;n=b(n),i++}return t}var Q=`
2
- # Dependencies
3
- node_modules/
4
- vendor/
5
- .bundle/
6
-
7
- # Build output
8
- dist/
9
- build/
10
- out/
11
- target/
12
- bin/
13
- obj/
14
-
15
- # Python
16
- __pycache__/
17
- *.pyc
18
- *.pyo
19
- .venv/
20
- venv/
21
- .env/
22
- env/
23
- *.egg-info/
24
-
25
- # Rust
26
- target/
27
-
28
- # Java / Kotlin / Scala
29
- *.class
30
- .gradle/
31
- .mvn/
32
-
33
- # C# / .NET
34
- bin/
35
- obj/
36
- packages/
37
-
38
- # Go
39
- vendor/
40
-
41
- # Dart
42
- .dart_tool/
43
- build/
44
-
45
- # PHP
46
- vendor/
47
-
48
- # IDE / OS
49
- .idea/
50
- .vscode/
51
- *.swp
52
- *.swo
53
- .DS_Store
54
- Thumbs.db
55
-
56
- # Type definitions (often noise in queries)
57
- *.d.ts
58
- `;function C(e,t,r){let n=Z(t,r);if(!n)return!1;try{return e.ignores(n)}catch{return!1}}function Z(e,t){if(!t||t===".")return null;if(!x(t)&&!t.startsWith(".."))return t.replaceAll("\\","/");let r=x(t)?t:q(e,t),n=z(e,r).replaceAll("\\","/");return!n||n==="."||n.startsWith("..")?null:n}import{readdirSync as it}from"fs";import{execFileSync as at}from"child_process";import{extname as ct,join as lt}from"path";var ee=[];function k(e){e.groups.length>0&&ee.push(e)}function te(){let e=new WeakMap;return{cache:e,ensure(t){let r=e.get(t);return r||(r=new Map,e.set(t,r)),r}}}function I(e,t){let{cache:r,ensure:n}=te(),i={get(o,s,a){let u=n(o);if(u.has(s))return u.get(s);let c=a();return u.set(s,c),c},invalidate(o,s){r.get(o)?.delete(s)},invalidateAll(o){r.delete(o)},size(o){return r.get(o)?.size??0}};return k({name:e,groups:t.clearGroups,clearAll:o=>i.invalidateAll(o),clearFile:(o,s)=>i.invalidate(o,s)}),i}var ne=[".ts",".tsx",".mts",".cts",".js",".jsx",".mjs",".cjs",".vue",".rs",".py",".pyi",".java",".kt",".kts",".scala",".sc",".clj",".cljs",".cljc",".rb",".c",".h",".cc",".cpp",".cxx",".hpp",".hh",".hxx",".cs",".vb",".php",".dart"],T=[".vue"],F=[".tsx",".jsx"],E=[".vue"],dt=[...F,...E],pt=new Set(F),ft=new Set(E),re=new Set(ne.map(e=>e.toLowerCase())),mt=[...re].sort().join(","),L=new Set(["node_modules",".git","target","dist","build",".next",".nuxt",".cache",".turbo",".nbb",".cpcache",".shadow-cljs","out","coverage",".scipquery-cache","__pycache__",".venv","venv",".idea",".vscode"]);var ht=I("source-files",{clearGroups:[]});function Vt(e={}){return{id:"auxiliary-documents",facts:["auxiliary-document"],run:t=>ce({projectRoot:t.projectRoot,dbPath:t.dbPath,extensions:e.extensions,onStatus:t.onStatus})}}function ce(e){let t=new Set((e.extensions??T).map(o=>o.toLowerCase()));if(t.size===0)return{scanned:0,inserted:0,existing:0};if(!se(e.dbPath))throw new Error(`SCIP SQLite database not found at ${e.dbPath}`);let r=V(e.projectRoot),n=le(e.projectRoot,t).filter(o=>!r.isIgnored(o)),i=new oe(e.dbPath);try{let o=de(i,n),s=i.prepare(`INSERT OR IGNORE INTO documents (language, relative_path, position_encoding, text)
59
- VALUES (?, ?, NULL, ?)`),u=i.transaction(l=>{let f=0;for(let g of l){if(o.has(g))continue;let d=ue(D(e.projectRoot,g),"utf-8"),X=s.run(pe(g),g,d);f+=Number(X.changes)}return f})(n),c={scanned:n.length,inserted:u,existing:n.length-u};return e.onStatus?.(`Augmented SQLite documents with ${u} auxiliary source file${u===1?"":"s"} (${c.existing} already present).`),c}finally{i.close()}}function le(e,t){let r=ge(e,t);if(r)return r;let n=[],i=o=>{let s=o?D(e,o):e,a;try{a=ae(s,{withFileTypes:!0})}catch{return}for(let u of a){if(L.has(u.name))continue;let c=o?`${o}/${u.name}`:u.name;if(u.isDirectory()){i(c);continue}t.has(m(u.name).toLowerCase())&&n.push(c)}};return i(""),n.sort()}function ge(e,t){try{return ie("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:26214400,stdio:["ignore","pipe","ignore"]}).split(`
60
- `).filter(n=>n&&t.has(m(n).toLowerCase())).sort()}catch{return null}}function de(e,t){let r=new Set,n=500;for(let i=0;i<t.length;i+=n){let o=t.slice(i,i+n),s=e.prepare(`SELECT relative_path FROM documents WHERE relative_path IN (${o.map(()=>"?").join(",")})`).all(...o);for(let a of s)r.add(a.relative_path)}return r}function pe(e){return m(e).toLowerCase()===".vue"?"vue":m(e).replace(/^\./,"").toLowerCase()||"source"}import{readFileSync as Tt,writeFileSync as Ft}from"fs";function Et(e,t){let r=Date.now(),n=e.run(t);return{stageId:e.id,facts:e.facts,durationMs:Date.now()-r,result:n}}import{execFileSync as fe}from"child_process";import{createHash as me}from"crypto";import{readdirSync as he,readFileSync as be}from"fs";import{join as O}from"path";function w(e){return(ye(e)??Re(e)).filter(t=>t&&!P(t)).sort()}function At(e,t={}){return(t.language?w(e).filter(n=>Se(n,t.language,t.markerFiles)):w(e)).map(n=>{let i=O(e,n);try{let o=be(i);return{path:n,size:o.byteLength,hash:me("sha256").update(o).digest("hex")}}catch{return{path:n,size:-1,hash:"unreadable"}}})}function Se(e,t,r){let n=e.split("/").at(-1)??e;if(r?.includes(e)||r?.includes(n)||xe.has(n))return!0;let i=e.includes(".")?`.${e.split(".").at(-1).toLowerCase()}`:"";return(Ce[t]??[]).includes(i)}function ye(e){try{return fe("git",["-C",e,"ls-files","-co","--exclude-standard","--","."],{encoding:"utf-8",maxBuffer:50*1024*1024,stdio:["ignore","pipe","ignore"]}).split(`
61
- `).filter(Boolean)}catch{return null}}function Re(e){let t=[],r=[""];for(;r.length>0;){let n=r.pop(),i=n?O(e,n):e,o;try{o=he(i,{withFileTypes:!0})}catch{continue}for(let s of o){let a=n?`${n}/${s.name}`:s.name;if(s.isDirectory()){P(a)||r.push(a);continue}t.push(a)}}return t}function P(e){let t=e.split("/");return e==="meta.json"||t.some(r=>ve.has(r))||e.endsWith(".db")||e.endsWith(".db-wal")||e.endsWith(".db-shm")||e.endsWith(".scip")}var ve=new Set([".git","node_modules",".scipquery-cache",".stryker-tmp","dist","build","coverage",".next",".nuxt","target"]),xe=new Set(["package.json","package-lock.json","pnpm-lock.yaml","yarn.lock","bun.lockb","tsconfig.json","tsconfig.base.json","pyproject.toml","setup.py","setup.cfg","Cargo.toml","Cargo.lock","go.mod","go.sum","pom.xml","build.gradle","build.gradle.kts","build.sbt","compile_commands.json","CMakeLists.txt","Makefile","Gemfile","Gemfile.lock","composer.json","composer.lock","pubspec.yaml","pubspec.lock","deps.edn","project.clj","bb.edn","shadow-cljs.edn"]),Ce={typescript:[".ts",".tsx",".mts",".cts"],javascript:[".js",".jsx",".mjs",".cjs"],java:[".java"],scala:[".scala"],kotlin:[".kt",".kts"],rust:[".rs"],python:[".py",".pyi"],ruby:[".rb"],go:[".go"],cpp:[".cc",".cpp",".cxx",".hpp",".hh",".hxx"],c:[".c",".h"],csharp:[".cs"],vb:[".vb"],dart:[".dart"],php:[".php"],clojure:[".clj",".cljs",".cljc"]};import{createRequire as Ve}from"module";import{existsSync as ke,readFileSync as R}from"fs";import{dirname as A,extname as Ie,join as j,relative as Te,resolve as Gt}from"path";import{pathToFileURL as Fe}from"url";function N(e,t){let{vueCore:r,ts:n,volarTs:i}=Ee(e),{parsed:o,vueOptions:s}=Le(r,n,t),a=A(t),u=r.createVueLanguagePlugin(n,o.options,s,d=>d),c=De(r,n,u),l=we(a,o),{languageServiceHost:f}=i.createLanguageServiceHost(n,n.sys,c,d=>d,l),g=n.createLanguageService(f);return{ts:n,language:c,languageService:g,fileNames:o.fileNames,configDir:a}}function Ee(e){let t=Ve(Fe(j(e,"package.json")).href);return{vueCore:y(t,"@vue/language-core",e),ts:y(t,"typescript",e),volarTs:y(t,"@volar/typescript",e)}}function Le(e,t,r){let n=t.readConfigFile(r,t.sys.readFile);if(n.error||!n.config)throw new Error(`Failed to read ${r}`);let o=e.createParsedCommandLine(t,t.sys,r).vueOptions;return typeof e.createGlobalTypesWriter=="function"&&(o.globalTypesPath=e.createGlobalTypesWriter(o,t.sys.writeFile)),{parsed:t.parseJsonConfigFileContent(n.config,t.sys,A(r),void 0,r,void 0,e.getAllExtensions(o).map(s=>({extension:s.slice(1),isMixedContent:!0,scriptKind:t.ScriptKind.Deferred}))),vueOptions:o}}function De(e,t,r){let n={},i=e.createLanguage([r],new Map,o=>{if(!ke(o))return;let s=R(o,"utf-8");n.current?.scripts.set(o,t.ScriptSnapshot.fromString(s),r.getLanguageId(o)??je(o))});return n.current=i,i}function we(e,t){return{getCurrentDirectory:()=>e,getCompilationSettings:()=>t.options,getScriptFileNames:()=>t.fileNames,getProjectReferences:()=>t.projectReferences,getProjectVersion:()=>"0"}}function y(e,t,r){try{return e(t)}catch(n){throw(typeof n=="object"&&n!==null&&"code"in n?n.code:null)==="MODULE_NOT_FOUND"?new Error(`Vue augmentation requires ${t} to be installed in ${r}. Install Vue/Volar dependencies for that project, then rerun augment-vue.`,{cause:n}):n}}function _(e,t,r){let n=Oe(e);return i=>{let o=p(t,i.fileName),s=r.get(i.fileName);if(!s)return null;let a=r.positionAt(s,i.textSpan.start),u=n.get(o);if(!u)return null;let c=u.containingByLine.get(a.line);return c!==void 0?c:Pe(u.starts,a.line,2)}}function Oe(e){let t=e.prepare(`
62
- SELECT
63
- d.relative_path AS relativePath,
64
- der.start_line AS startLine,
65
- der.end_line AS endLine,
66
- der.symbol_id AS symbolId
67
- FROM defn_enclosing_ranges der
68
- JOIN documents d ON d.id = der.document_id
69
- ORDER BY d.relative_path, (der.end_line - der.start_line) DESC
70
- `).all(),r=new Map;for(let n of t){let i=r.get(n.relativePath);i||(i={containingByLine:new Map,starts:[]},r.set(n.relativePath,i)),i.starts.push({line:n.startLine,symbolId:n.symbolId});for(let o=n.startLine;o<=n.endLine;o++)i.containingByLine.set(o,n.symbolId)}for(let n of r.values())n.starts.sort((i,o)=>i.line-o.line);return r}function Pe(e,t,r){let n=0,i=e.length-1;for(;n<=i;){let s=Math.floor((n+i)/2);e[s].line<t?n=s+1:i=s-1}let o=null;for(let s of[i,n]){let a=e[s];if(!a)continue;let u=Math.abs(a.line-t);u>r||(!o||u<o.distance)&&(o={distance:u,symbolId:a.symbolId})}return o?.symbolId??null}function M(e,t){let r=_e(t),n=e.prepare("SELECT id FROM global_symbols WHERE symbol = ?"),i=new Map;return{get(o){if(i.has(o))return i.get(o)??null;let s=Me(n,r,t,o);return i.set(o,s),s}}}function G(e,t,r,n,i){if(e.fileName.endsWith(".vue")){let o=n.language.scripts.get(e.fileName),s=o?.generated?.languagePlugin.typescript?.getServiceScript(o.generated.root)?.code;if(o&&s){let a=n.language.maps.get(s,o);if(v(a,e.textSpan.start)!==null)return r.get(e.fileName)}return e.fileName.startsWith(i)?r.get(e.fileName):null}return t(e)}function*U(e){let t=/\b[A-Za-z_$][A-Za-z0-9_$]*\b/g,r=new Set(["script","setup","template","style","lang","scoped","true","false","null","undefined","const","let","var","import","from","export","return","if","else","for","while","function","class","type","interface","as","await","async"]),n;for(;n=t.exec(e);){let i=n[0];r.has(i)||(yield{text:i,start:n.index,end:n.index+i.length})}}function $(e,t){for(let[r]of e.toGeneratedLocation(t,n=>!!n.navigation))return r;return null}function v(e,t){let r=e;for(let[n]of r.toSourceLocation(t,i=>!!i.navigation))return n;return null}function Ae(e,t){let r=0,n=e.lineStarts.length-1;for(;r<=n;){let o=Math.floor((r+n)/2);e.lineStarts[o]<=t?r=o+1:n=o-1}let i=Math.max(0,n);return{line:i,character:t-e.lineStarts[i]}}function W(e,t){return p(e,t).startsWith("node_modules/")}function p(e,t){return Te(e,t).replaceAll("\\","/")}function je(e){switch(Ie(e)){case".vue":return"vue";case".tsx":return"typescriptreact";case".ts":case".mts":case".cts":return"typescript";case".jsx":return"javascriptreact";case".js":case".mjs":case".cjs":return"javascript";case".json":return"json";default:return"typescript"}}function H(){let e=new Map;return{get(t){if(e.has(t))return e.get(t)??null;try{let r=R(t,"utf-8"),n={text:r,lineStarts:Ne(r)};return e.set(t,n),n}catch{return e.set(t,null),null}},positionAt:Ae}}function Ne(e){let t=[0];for(let r=0;r<e.length;r++)e.charCodeAt(r)===10&&t.push(r+1);return t}function _e(e){try{let t=JSON.parse(R(j(e,"package.json"),"utf-8"));return{name:t.name??"workspace",version:t.version??"0.0.0"}}catch{return{name:"workspace",version:"0.0.0"}}}function Me(e,t,r,n){let i=p(r,n),o=Ge(t.name,t.version,i);return e.get(o)?.id??null}function Ge(e,t,r){let n=r.split("/").map(i=>`\`${i.replaceAll("`","")}\``).join("/");return`scip-vue npm ${e} ${t} ${n}/default.`}function en(e){let t=$e(e.projectRoot,e.tsconfig),r=new Ue(e.dbPath,{readonly:!0});try{let n=We({db:r,projectRoot:e.projectRoot,configPath:t,vueSymbolLookup:M(r,e.projectRoot)});return He({vueFiles:e.vueFiles??[],tasks:e.tasks,...n})}finally{r.close()}}function We(e){let t=H();return{projectRoot:e.projectRoot,context:N(e.projectRoot,e.configPath),symbolLookup:_(e.db,e.projectRoot,t),vueSymbolLookup:e.vueSymbolLookup,sourceReader:t}}function He(e){let t=[],r=0,n=e.tasks??e.vueFiles.map(i=>({fileName:i,startOffset:0,endOffset:Number.POSITIVE_INFINITY,countFileSkip:!0}));for(let i of n){let o=Ke(e,i);t.push(...o.occurrences),r+=o.skippedReferences}return{occurrences:t,skippedReferences:r}}function Ke(e,t){let r=e.context.language.scripts.get(t.fileName),n=r?.generated?.languagePlugin.typescript?.getServiceScript(r.generated.root)?.code;if(!r||!n)return{occurrences:[],skippedReferences:t.countFileSkip?1:0};let i=e.sourceReader.get(t.fileName);if(!i)return{occurrences:[],skippedReferences:t.countFileSkip?1:0};let o=e.context.language.maps.get(n,r),s=p(e.projectRoot,t.fileName),a=[...U(i.text)],u={tokens:a.filter(c=>c.start>=t.startOffset&&c.start<t.endOffset),tokenByStart:new Map(a.map(c=>[c.start,c])),tokenTextCounts:Je(a),processedStarts:new Set};return Xe({...e,fileName:t.fileName,sourceInfo:i,sourceFile:s,map:o,tokenContext:u})}function Xe(e){let t=[],r=0;for(let n of e.tokenContext.tokens){if(e.tokenContext.processedStarts.has(n.start))continue;let i=$(e.map,n.start);if(i===null)continue;let s=(e.context.languageService.getDefinitionAtPosition(e.fileName,i+1)??[]).find(u=>!W(e.projectRoot,u.fileName));if(!s){r++;continue}let a=G(s,e.symbolLookup,e.vueSymbolLookup,e.context,e.projectRoot);if(a===null){r++;continue}K(t,e.sourceReader,e.sourceInfo,e.sourceFile,n,a),e.tokenContext.processedStarts.add(n.start),Be(t,e,n,i,a)}return{occurrences:t,skippedReferences:r}}function Be(e,t,r,n,i){if(!((t.tokenContext.tokenTextCounts.get(r.text)??0)<=1))for(let o of ze(t.context.languageService,t.fileName,n+1,t.map,r,t.tokenContext.tokenByStart)){if(t.tokenContext.processedStarts.has(o))continue;let s=t.tokenContext.tokenByStart.get(o);s&&(K(e,t.sourceReader,t.sourceInfo,t.sourceFile,s,i),t.tokenContext.processedStarts.add(o))}}function K(e,t,r,n,i,o){let s=t.positionAt(r,i.start);e.push({sourceFile:n,sourceLine:s.line,sourceStartChar:s.character,sourceEndChar:s.character+i.text.length,symbolId:o})}function Je(e){let t=new Map;for(let r of e)t.set(r.text,(t.get(r.text)??0)+1);return t}function ze(e,t,r,n,i,o){let s=e.getDocumentHighlights?.(t,r,[t])??[],a=[];for(let u of s)if(u.fileName===t)for(let c of u.highlightSpans){let l=qe(n,c.textSpan.start,o,i.text);l!==null&&a.push(l)}return a}function qe(e,t,r,n){let i=r.get(t);if(i?.text===n)return i.start;let o=v(e,t);if(o===null)return null;let s=r.get(o);return s?.text===n?s.start:null}export{Vt as a,Et as b,At as c,en as d};
71
- //# sourceMappingURL=chunk-2DOW7QCA.js.map
@@ -1,2 +0,0 @@
1
- import{e as D}from"./chunk-CYHIKTJN.js";import{b as v}from"./chunk-ULHLDOD6.js";import{a as f,e as F}from"./chunk-NABVR6B7.js";import{e as y}from"./chunk-SA3DPTHT.js";import{b as C,j as g}from"./chunk-SGTKURU6.js";import{c as d}from"./chunk-7S5E7KWT.js";var L=d("definition-consumer-file-usage",{clearGroups:["whole-project","source-file"]}),S=g({kind:"consumer-file-usage",serialize:U,deserialize:O});function $(n,e){return{forDefinitions(i,r){return E(n,e,i,r)}}}function B(n){let e=new Map;for(let[i,r]of n)e.set(i,new Set(r.files.map(t=>t.file)));return e}function J(n,e,i){return x(n,e,i).partition}function E(n,e,i,r){let t=b(i.length);return v("consumer-evidence.product",()=>{let s=M(n,e,i,r),o=new Map;t={...t,...s.counters};for(let a of i){let c=s.sources.get(a.symbolId)??new Map,l=x(n,a,[...c.keys()],c);t.realFiles+=l.partition.realConsumers.length,t.reexportOnlyFiles+=l.partition.barrelConsumers,t.importOnlyFiles+=l.partition.importOnlyConsumers,o.set(a.symbolId,{definition:a,files:l.files,...l.partition})}return o},()=>({...t}))}function b(n){return{definitions:n,indexedFiles:0,semanticFiles:0,fallbackFiles:0,totalFiles:0,realFiles:0,reexportOnlyFiles:0,importOnlyFiles:0}}function M(n,e,i,r){let t=b(i.length),s=new Map;return m(s,t,"indexed",e.crossFileCallerMap(i,{semantic:!1})),r.semantic&&m(s,t,"semantic",D(n,i)),r.sourceFallback!==!1&&m(s,t,"source-fallback",e.sourceFallbackCallerFiles(i)),t.totalFiles=[...s.values()].reduce((o,a)=>o+a.size,0),{sources:s,counters:t}}function m(n,e,i,r){let t=0;for(let[s,o]of r){let a=n.get(s);a||(a=new Map,n.set(s,a));for(let c of o){t++;let l=a.get(c)??new Set;l.add(i),a.set(c,l)}}i==="indexed"?e.indexedFiles+=t:i==="semantic"?e.semanticFiles+=t:e.fallbackFiles+=t}function x(n,e,i,r=new Map){let t=[],s=0,o=0,a=F(e.symbol),c=[];for(let l of i){let u;k(n,l,e.relativePath,a)?(s++,u="reexport-only"):w(n,l,a)?(o++,u="import-only"):(t.push(l),u="real"),c.push({file:l,sources:[...r.get(l)??[]],classification:u})}return{partition:{realConsumers:t,barrelConsumers:s,importOnlyConsumers:o},files:c}}function w(n,e,i){if(!i)return!1;let r=y(e);if(!r)return!1;let t=L.get(n,e,()=>h(n,e,r));return t.importedLeaves.has(i)&&!t.usedLeaves.has(i)}function h(n,e,i){let r=f(n).forFile(e,{text:!0,ast:!0}),t=r.text;if(!t)return I();let s=C(n,e,t),o=S.read(n,e,s);if(o)return o;let a=P(r.ast,i);return S.write(n,e,s,a),a}function P(n,e){let i=new Set,r=new Set;if(!n)return{importedLeaves:i,usedLeaves:r};let t=e==="rust"?new Set(["use_declaration"]):e==="python"?new Set(["import_statement","import_from_statement"]):new Set(["import_statement"]),s=(o,a)=>{let c=a||t.has(o.type);(o.type==="identifier"||o.type==="type_identifier"||o.type==="property_identifier"||o.type==="field_identifier")&&(c?i.add(o.text):r.add(o.text));for(let l of o.children)s(l,c)};return s(n.rootNode,!1),{importedLeaves:i,usedLeaves:r}}function I(){return{importedLeaves:new Set,usedLeaves:new Set}}function U(n){return JSON.stringify({importedLeaves:[...n.importedLeaves],usedLeaves:[...n.usedLeaves]})}function O(n){try{let e=JSON.parse(n);return!Array.isArray(e.importedLeaves)||!Array.isArray(e.usedLeaves)?null:{importedLeaves:new Set(e.importedLeaves.filter(i=>typeof i=="string")),usedLeaves:new Set(e.usedLeaves.filter(i=>typeof i=="string"))}}catch{return null}}function k(n,e,i,r){if(!r)return!1;let t=f(n).forFile(e,{lines:!0,reexports:!0}),s=t.lines??[];if(s.length===0)return!1;let o=t.reexports??[];if(o.length===0)return!1;let a=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c=new RegExp(`\\b${a}\\b`),l=0;for(let u=0;u<s.length;u++){if(!c.test(s[u]??""))continue;if(l++,!o.find(p=>p.startLine<=u&&u<=p.endLine))return!1}return l>0}export{$ as a,B as b,J as c,w as d};
2
- //# sourceMappingURL=chunk-2FMFF4RI.js.map
@@ -1,2 +0,0 @@
1
- import{c as m}from"./chunk-B75HZHUP.js";import{a as b}from"./chunk-L446VQYQ.js";import{a as g}from"./chunk-RSSXKJ6J.js";import{r as y}from"./chunk-UQ73QF5D.js";import{a as c}from"./chunk-NBNEVLRC.js";import{d as r}from"./chunk-NABVR6B7.js";function v(l,t,n={}){let o=c(l,t);if(!o)return null;let a=[{file:o.relativePath,line:o.startLine}],s=y(l,o,{semantic:n.semantic}).map(e=>({file:e.file,line:e.line,enclosingSymbol:e.enclosingSymbol??"(top-level)",enclosingShort:e.enclosingSymbol?r(e.enclosingSymbol):"(top-level)"})),{producers:f,consumers:i}=S(l,o,s,{semantic:n.semantic!==!1});return{symbol:o.symbol,shortName:r(o.symbol),relativePath:o.relativePath,definitionSites:a.filter(e=>!l.isIgnored(e.file)),usageSites:s,producers:f.filter(e=>!l.isIgnored(e.file)).map(e=>({symbol:e.symbol,shortName:r(e.symbol),file:e.file})),consumers:i.filter(e=>!l.isIgnored(e.file)).map(e=>({symbol:e.symbol,shortName:e.symbol===e.file?"(top-level)":r(e.symbol),file:e.file}))}}function S(l,t,n,o){let a=m(g(l,t,{limit:30,semantic:o.semantic}).map(i=>({symbol:i.symbol,file:i.file}))),s=m(b(l,t,{limit:30,semantic:o.semantic})),f=s.length>0?s:m(n.map(i=>({symbol:i.enclosingSymbol==="(top-level)"?i.file:i.enclosingSymbol,file:i.file})));return{producers:a,consumers:f}}export{v as a};
2
- //# sourceMappingURL=chunk-5GXTUANY.js.map
@@ -1,25 +0,0 @@
1
- import{a as d}from"./chunk-L446VQYQ.js";import{g as l}from"./chunk-63CI3IXR.js";import{d as r}from"./chunk-NABVR6B7.js";function b(o,t={}){let{limit:n=30,scope:e}=t,i=e?`AND def_d.relative_path LIKE '%${e}%'`:"",m=o.all(`SELECT
2
- gs.symbol,
3
- COUNT(*) AS ref_count,
4
- COUNT(DISTINCT ref_d.id) AS file_count,
5
- def_d.relative_path AS defined_in
6
- FROM mentions m
7
- JOIN chunks c ON m.chunk_id = c.id
8
- JOIN documents ref_d ON c.document_id = ref_d.id
9
- JOIN global_symbols gs ON m.symbol_id = gs.id
10
- JOIN (
11
- SELECT m2.symbol_id, c2.document_id
12
- FROM mentions m2
13
- JOIN chunks c2 ON m2.chunk_id = c2.id
14
- WHERE m2.role = 1
15
- GROUP BY m2.symbol_id
16
- ) sym_def ON sym_def.symbol_id = gs.id
17
- JOIN documents def_d ON sym_def.document_id = def_d.id
18
- WHERE m.role != 1
19
- ${o.pathExclusionsFor("def_d")}
20
- ${o.symbolNoiseFor("gs")}
21
- ${i}
22
- GROUP BY gs.id
23
- ORDER BY ref_count DESC
24
- LIMIT ?`,n).filter(s=>!o.isIgnored(s.defined_in)).map(s=>({symbol:s.symbol,shortName:r(s.symbol),refCount:s.ref_count,fileCount:s.file_count,definedIn:s.defined_in}));return m.length>0?m:f(o,e,n)}function f(o,t,n){return l(o,{scope:t}).filter(e=>!o.isIgnored(e.relativePath)).map(e=>u(o,e)).filter(e=>e.refCount>0).sort((e,i)=>i.refCount-e.refCount||i.fileCount-e.fileCount).slice(0,n)}function u(o,t){let n=d(o,t,{limit:500});return{symbol:t.symbol,shortName:r(t.symbol),refCount:n.length,fileCount:new Set(n.map(e=>e.file)).size,definedIn:t.relativePath}}export{b as a};
25
- //# sourceMappingURL=chunk-5JHEN5VN.js.map
@@ -1,18 +0,0 @@
1
- import{a as y}from"./chunk-RM2WQ75T.js";import{b}from"./chunk-WUOB4DHH.js";import{c as D}from"./chunk-CYHIKTJN.js";import{l as p}from"./chunk-THB6AM3V.js";import{a as h}from"./chunk-64MNV6AB.js";import g from"path";function d(e){let n=e.replace(/\\/g,"/").split("/").filter(Boolean);return n.length<=1?"(root)":n.length>=3&&["src","lib","app","server","client"].includes(n[0])?`${n[0]}/${n[1]}`:n[0]}function S(e,t){if(e===t)return"ok";let n=m(e),i=m(t);return n&&i?k(n,i)?"ok":"violation":x(e,t)}function v(e,t){let n=m(d(e)),i=m(d(t));return!!n&&!!i}function m(e){return/^src\/([^/]+)$/.exec(e)?.[1]??null}function k(e,t){return t==="instrumentation"||t==="domain"?!0:e==="domain"?!1:{analysis:new Set(["domain","source","storage","symbols"]),core:new Set(["analysis","domain","resolution","source","storage","symbols"]),"language-parsers":new Set(["domain","resolution","source","storage"]),queries:new Set(["analysis","core","domain","language-parsers","resolution","semantic","source","storage","symbols"]),reindex:new Set(["domain","language-parsers","resolution","runtime","semantic","source","storage","symbols"]),resolution:new Set(["domain","source","storage","symbols"]),runtime:new Set(["domain","queries","reindex","resolution","semantic","source","storage","symbols"]),semantic:new Set(["domain","resolution","storage","symbols"]),source:new Set(["domain","storage"]),storage:new Set(["domain","source"]),symbols:new Set(["analysis","domain","language-parsers","resolution","semantic","source","storage"])}[e]?.has(t)??!1}function x(e,t){if(t==="shared")return"ok";let n={app:new Set(["core","shared","ui"]),core:new Set(["shared"]),infra:new Set(["core","shared"]),ui:new Set(["core","shared"])};return n[e]?n[e].has(t)?"ok":"violation":null}function Z(e,t){let{scope:n,minDeviation:i=5}=t??{},r=t?.semantic!==!1,s=t?.includePatternDeviations!==!1,o=new y(e).fileDependencyGraph(n);return M([...$(e,o,{scope:n,semantic:r}),...P(o),...s?_(o,i):[]])}function $(e,t,n){let i=N(e,n.scope),r=[],s=new Set;for(let[o,a]of t){if(l(o))continue;let u=i.get(o)??new Set;for(let f of a)l(f)||u.has(f)||I(e,o,f,n)||(r.push({file:o,dep:f}),s.add(o))}s.size>0&&A(e,i,{paths:[...s]});let c=[];for(let{file:o,dep:a}of r)(i.get(o)??new Set).has(a)||c.push({file:o,kind:"unused-import",description:`Depends on ${a} but references none of its symbols`,dep:a,actionTier:"direct",evidenceReasons:[`dependency edge exists from ${o} to ${a}`,"no semantic, source, type-only, side-effect, or Vue-template usage survived the conservative skip gates"],recommendation:"Remove the unused import or dependency edge after running the project checks."});return c}function I(e,t,n,i){return V(e,t,n)||q(e,t,n)||j(n)||U(e,t,n)||J(n)?!0:i.semantic&&B(e,t,n)}function P(e){let t=[],n=L(e);for(let[i,r]of e){if(l(i))continue;let s=d(i);for(let c of r){if(l(c))continue;let o=d(c);if(s===o)continue;let a=S(s,o),u=a?"explicit":"inferred";if((a??n.get(`${s}->${o}`))==="violation"){let R=u==="explicit"?"direct":"signal";t.push({file:i,kind:"layer-violation",description:`Imports from ${o}/ (${c}) \u2014 may cross architectural boundary`,dep:c,detail:`${s}/ should not depend on ${o}/`,actionTier:R,policyBasis:u,evidenceReasons:[`dependency edge exists from ${i} to ${c}`,u==="explicit"?`explicit layer policy rejects ${s}/ -> ${o}/`:`rare cross-layer edge ${s}/ -> ${o}/ is inferred as a violation`],recommendation:u==="explicit"?"Move the dependency behind an allowed layer boundary or document a policy change.":"Review whether this is a real boundary break or an intentional exception before moving code."})}}}return t}function _(e,t){let n=[];for(let[i,r]of O(e)){let s=r.filter(o=>!l(o));if(s.length<t)continue;let c=E(e,s);for(let o of s)for(let a of e.get(o)??[])l(a)||(c.get(a)??0)===1&&g.dirname(a)!==i&&g.dirname(a)!==g.dirname(i)&&(v(o,a)||n.push({file:o,kind:"pattern-deviation",description:`Only file in ${i}/ that depends on ${a}`,dep:a,actionTier:"signal",evidenceReasons:[`${s.length} sibling file(s) in ${i}/ were compared`,`${o} is the only non-skipped sibling depending on ${a}`],recommendation:"Review sibling ownership before changing this import; unique dependency shape can be intentional specialization."}))}return n}function M(e){return{results:e,unusedImports:e.filter(t=>t.kind==="unused-import").length,layerViolations:e.filter(t=>t.kind==="layer-violation").length,patternDeviations:e.filter(t=>t.kind==="pattern-deviation").length}}function O(e){let t=new Map;for(let n of e.keys()){let i=g.dirname(n),r=t.get(i);r||(r=[],t.set(i,r)),r.push(n)}return t}function E(e,t){let n=new Map;for(let i of t)for(let r of e.get(i)??[])l(r)||n.set(r,(n.get(r)??0)+1);return n}function N(e,t){let n=new Map;return F(e,n,t),n}function F(e,t,n){for(let i of T(e,n))w(e,t,i.from_file,i.to_file)}function T(e,t){let n=t?`AND d1.relative_path LIKE '%${t}%'`:"";return e.all(`SELECT DISTINCT d1.relative_path AS from_file, d2.relative_path AS to_file
2
- FROM mentions m
3
- JOIN chunks c ON m.chunk_id = c.id
4
- JOIN documents d1 ON c.document_id = d1.id
5
- JOIN global_symbols gs ON m.symbol_id = gs.id
6
- JOIN (
7
- SELECT m2.symbol_id, c2.document_id
8
- FROM mentions m2
9
- JOIN chunks c2 ON m2.chunk_id = c2.id
10
- WHERE m2.role = 1
11
- GROUP BY m2.symbol_id
12
- ) sym_def ON sym_def.symbol_id = gs.id
13
- JOIN documents d2 ON sym_def.document_id = d2.id
14
- WHERE d1.id != d2.id
15
- AND m.role != 1
16
- ${e.pathExclusionsFor("d1","d2")}
17
- ${n}`)}function A(e,t,n={}){new y(e).scanSourceReferences({paths:n.paths??h(e,{includeIgnored:!1}),includeRustAttributeNames:!0,identifierResolution:"permissive"},r=>{r.target.relativePath!==r.sourceFile&&(e.isIgnored(r.target.relativePath)||w(e,t,r.sourceFile,r.target.relativePath))})}function w(e,t,n,i){if(e.isIgnored(n)||e.isIgnored(i))return;let r=t.get(n);r||(r=new Set,t.set(n,r)),r.add(i)}function L(e){let t=new Map;for(let[i,r]of e){if(l(i))continue;let s=d(i);for(let c of r){if(l(c))continue;let o=d(c);if(s===o||S(s,o))continue;let a=`${s}->${o}`;t.set(a,(t.get(a)??0)+1)}}let n=new Map;for(let[i,r]of t)n.set(i,r<=2?"violation":"ok");return n}function j(e){return e.includes("types")||e.endsWith(".d.ts")}function B(e,t,n){let i=D(e,t).filter(r=>r.sourcePath===n);return i.length>0&&i.some(r=>r.isUsed)}function V(e,t,n){let i=p(e,t).filter(r=>r.sourcePath===n);return i.length>0&&i.some(r=>r.used)}function q(e,t,n){let i=p(e,t).filter(r=>r.sourcePath===n);return i.length>0&&i.every(r=>r.isTypeOnly===!0)}function J(e){return e.endsWith(".vue")}function U(e,t,n){let i=p(e,t).filter(r=>r.sourcePath===n);return i.length===0?!1:i.every(r=>r.kind==="side-effect"||r.kind==="namespace"&&r.usedMembers.length===0&&!r.used)}function l(e){let t=b(e);return!!(t==="entry"||t==="barrel"||t==="test"||t==="worker"||z(g.basename(e)))}function z(e){return!!(e==="index.ts"||e==="index.js"||e==="cli.ts"||e==="main.ts"||e==="main.rs"||e.includes("worker.")||e.includes("postinstall.")||e==="health.ts"||e==="health.js")}export{Z as a};
18
- //# sourceMappingURL=chunk-62ULXMQ7.js.map