scip-query 0.19.5 → 0.19.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/CHANGELOG.md +85 -1
  2. package/README.md +259 -53
  3. package/dist/augment-vue-worker.js +1 -1
  4. package/dist/chunk-2465DLHK.js +3 -0
  5. package/dist/{chunk-7GXM52MI.js → chunk-24GTWJ3N.js} +2 -2
  6. package/dist/{chunk-NH5ALKPW.js → chunk-2SNGN6U4.js} +2 -2
  7. package/dist/{chunk-3SVWW4PN.js → chunk-2U3OLUNJ.js} +2 -2
  8. package/dist/{chunk-XLTP42QA.js → chunk-33KUO7CG.js} +2 -2
  9. package/dist/{chunk-54HA4ZXH.js → chunk-33XTHFKR.js} +2 -2
  10. package/dist/{chunk-ZGZUZ7XE.js → chunk-3EDFLQ6A.js} +2 -2
  11. package/dist/chunk-3ZSJ3PWF.js +16 -0
  12. package/dist/{chunk-F6O7AAC3.js → chunk-43KC6EQZ.js} +2 -2
  13. package/dist/{chunk-I5RJM53C.js → chunk-464PLI5O.js} +2 -2
  14. package/dist/chunk-46XGSFNI.js +2 -0
  15. package/dist/{chunk-M7AIS73L.js → chunk-47BU5Z4T.js} +2 -2
  16. package/dist/chunk-4BV4QAZJ.js +5 -0
  17. package/dist/chunk-4YTUWQ6M.js +18 -0
  18. package/dist/{chunk-RV2FQIX3.js → chunk-5ML2BNRH.js} +2 -2
  19. package/dist/{chunk-6NSFJYRC.js → chunk-5YLUDDAF.js} +2 -2
  20. package/dist/chunk-67QRR5YC.js +6 -0
  21. package/dist/{chunk-GPBBJ5Y4.js → chunk-6GXYN7YA.js} +3 -3
  22. package/dist/{chunk-4333ETTV.js → chunk-6M7RONVB.js} +2 -2
  23. package/dist/chunk-6YTSKJJ3.js +2 -0
  24. package/dist/{chunk-QDV6RDCP.js → chunk-7FT5Y65S.js} +2 -2
  25. package/dist/{chunk-XTX6QHOF.js → chunk-7KYNAMMH.js} +2 -2
  26. package/dist/{chunk-DZ74OMG6.js → chunk-7LSVMFX7.js} +2 -2
  27. package/dist/{chunk-VTKGCT3V.js → chunk-7QHY3H7P.js} +2 -2
  28. package/dist/{chunk-MITTUCEH.js → chunk-7RAG65VK.js} +2 -2
  29. package/dist/{chunk-25LPM4DG.js → chunk-7SWJEWJF.js} +2 -2
  30. package/dist/{chunk-52ZYCAEO.js → chunk-7VCOXZH3.js} +2 -2
  31. package/dist/chunk-A2TNXAXO.js +8 -0
  32. package/dist/{chunk-IUFDSKGG.js → chunk-A3QXWFBK.js} +2 -2
  33. package/dist/{chunk-4T3LTWUS.js → chunk-AA4UWRNL.js} +2 -2
  34. package/dist/{chunk-4SALD7RU.js → chunk-ACAM6O5R.js} +2 -2
  35. package/dist/chunk-APMMR5Y2.js +2 -0
  36. package/dist/chunk-AQOFWNQJ.js +1 -0
  37. package/dist/chunk-AZFUMCQB.js +2 -0
  38. package/dist/{chunk-M7MTH5NR.js → chunk-BDOIKGDI.js} +2 -2
  39. package/dist/{chunk-BTEE5NZQ.js → chunk-BNXICU42.js} +2 -2
  40. package/dist/chunk-C5Q44Q5D.js +3 -0
  41. package/dist/{chunk-EOOJGLDU.js → chunk-CTF2GDEX.js} +2 -2
  42. package/dist/chunk-DHEQMPLW.js +2 -0
  43. package/dist/{chunk-IZKFSVBV.js → chunk-DQBCO2UY.js} +2 -2
  44. package/dist/{chunk-7B3UPBVA.js → chunk-DQGSM7RZ.js} +2 -2
  45. package/dist/chunk-E2LAW7SL.js +30 -0
  46. package/dist/chunk-E3HYEQO7.js +2 -0
  47. package/dist/chunk-E4NFOAD4.js +6 -0
  48. package/dist/chunk-E5HNT4X2.js +3 -0
  49. package/dist/{chunk-J77UIT3I.js → chunk-ELLMY7XJ.js} +2 -2
  50. package/dist/chunk-FD3HFKXR.js +5 -0
  51. package/dist/{chunk-SOAT6NLA.js → chunk-FIJCV235.js} +2 -2
  52. package/dist/{chunk-H7UKLTWJ.js → chunk-FJ5UDTQF.js} +2 -2
  53. package/dist/{chunk-HEXVUYFQ.js → chunk-GHKEJTCE.js} +2 -2
  54. package/dist/{chunk-LBMJEAEW.js → chunk-GLZTVKAB.js} +3 -3
  55. package/dist/{chunk-FWUUZTIO.js → chunk-GNC4JVAN.js} +2 -2
  56. package/dist/chunk-HIB452NU.js +949 -0
  57. package/dist/{chunk-NRCXJDHL.js → chunk-HZYDQPNY.js} +2 -2
  58. package/dist/chunk-IF6FP6B2.js +66 -0
  59. package/dist/{chunk-4RSI5EMG.js → chunk-JAY7YWS3.js} +2 -2
  60. package/dist/{chunk-STOL2BTL.js → chunk-JHF3E4YM.js} +2 -2
  61. package/dist/chunk-JORHF5AL.js +108 -0
  62. package/dist/{chunk-A2EZV2UM.js → chunk-K2WO7XY7.js} +2 -2
  63. package/dist/chunk-KFZNKUNT.js +2 -0
  64. package/dist/{chunk-YVVCVR2L.js → chunk-KJ2IIBZN.js} +2 -2
  65. package/dist/{chunk-QGXBRIM5.js → chunk-KKME5ZAI.js} +2 -2
  66. package/dist/chunk-KSGTULOS.js +9 -0
  67. package/dist/{chunk-UOAV44HR.js → chunk-KXDJAG4N.js} +3 -3
  68. package/dist/{chunk-UKZBVX4U.js → chunk-L4S2A7BV.js} +2 -2
  69. package/dist/chunk-LP3ARJKF.js +8 -0
  70. package/dist/chunk-LSOR3LQG.js +3 -0
  71. package/dist/{chunk-Q4IIEGXJ.js → chunk-MLFZP76A.js} +2 -2
  72. package/dist/{chunk-WQTAC523.js → chunk-MNSTUIDD.js} +2 -2
  73. package/dist/{chunk-VXQNNXJE.js → chunk-MSBDMFER.js} +2 -2
  74. package/dist/{chunk-X6D5IC6I.js → chunk-MZZBAITE.js} +5 -5
  75. package/dist/{chunk-I5AWSI2G.js → chunk-NE3TZUCI.js} +2 -2
  76. package/dist/{chunk-6E7UTQY7.js → chunk-NTUMF2X3.js} +2 -2
  77. package/dist/{chunk-S44IULR6.js → chunk-O23I56NA.js} +2 -2
  78. package/dist/{chunk-CFMXJPHH.js → chunk-O3O4XXO6.js} +2 -2
  79. package/dist/{chunk-IG7N5ZIK.js → chunk-OUBAF226.js} +2 -2
  80. package/dist/chunk-P3UO3EH3.js +2 -0
  81. package/dist/{chunk-YNRNA5LK.js → chunk-QGGLL3UH.js} +2 -2
  82. package/dist/chunk-QIQ63BHW.js +16 -0
  83. package/dist/{chunk-VGRICIQI.js → chunk-QJIVBYEK.js} +2 -2
  84. package/dist/chunk-QOXBSI6G.js +20 -0
  85. package/dist/chunk-QXK6UUSM.js +2 -0
  86. package/dist/{chunk-XYADIZHU.js → chunk-RA3AYNWP.js} +2 -2
  87. package/dist/chunk-RJMDJR3A.js +2 -0
  88. package/dist/{chunk-NSS46APD.js → chunk-RLH5VUMG.js} +2 -2
  89. package/dist/{chunk-GBQ5NYPR.js → chunk-S4S2WOIX.js} +6 -6
  90. package/dist/{chunk-YIJ7ZAA4.js → chunk-SERUIGV5.js} +2 -2
  91. package/dist/{chunk-FECYOO5O.js → chunk-SMQWE25B.js} +2 -2
  92. package/dist/{chunk-R4FQGQ4X.js → chunk-TAVELHYR.js} +2 -2
  93. package/dist/{chunk-U6WNH5GC.js → chunk-TWMJ3Y3G.js} +2 -2
  94. package/dist/chunk-VAXNI5NE.js +146 -0
  95. package/dist/chunk-VVY2G5ET.js +2 -0
  96. package/dist/{chunk-WER3B7MI.js → chunk-W3DBTGL4.js} +2 -2
  97. package/dist/{chunk-CNKAGUPL.js → chunk-WANA4KAQ.js} +2 -2
  98. package/dist/chunk-WJL2L6MV.js +60 -0
  99. package/dist/chunk-WUW7YUAH.js +11 -0
  100. package/dist/{chunk-QVWS2VWZ.js → chunk-WWKWUPSU.js} +2 -2
  101. package/dist/{chunk-ABMYA4TN.js → chunk-WY45BHKQ.js} +2 -2
  102. package/dist/chunk-X4FR5BZF.js +9 -0
  103. package/dist/chunk-X6RKPDY7.js +2 -0
  104. package/dist/{chunk-ZXJYMGD3.js → chunk-YLFORA5G.js} +2 -2
  105. package/dist/{chunk-KP6XRY5Z.js → chunk-YTVWB7YJ.js} +2 -2
  106. package/dist/{chunk-4XTA5OMB.js → chunk-ZCEJ63SP.js} +2 -2
  107. package/dist/{chunk-HKEHS2AS.js → chunk-ZJ5CBXK3.js} +2 -2
  108. package/dist/chunk-ZL2OGDCD.js +2 -0
  109. package/dist/cli.js +8 -3
  110. package/dist/command-descriptors-ZW5J4ZEM.js +631 -0
  111. package/dist/{config-types-D20KuvvZ.d.ts → config-types-B6MEoRNy.d.ts} +8 -0
  112. package/dist/{db-G_II8yXU.d.ts → db-DYLKr9Wn.d.ts} +18 -1
  113. package/dist/direct-navigation-42YHQPOI.js +3 -0
  114. package/dist/{health-oblXYgkF.d.ts → health-DgxIDXJC.d.ts} +1 -1
  115. package/dist/index.d.ts +2 -2
  116. package/dist/index.js +1 -1
  117. package/dist/postinstall.js +1 -1
  118. package/dist/queries/affected.d.ts +2 -2
  119. package/dist/queries/affected.js +1 -1
  120. package/dist/queries/architecture.d.ts +2 -2
  121. package/dist/queries/architecture.js +1 -1
  122. package/dist/queries/bottlenecks.d.ts +2 -2
  123. package/dist/queries/bottlenecks.js +1 -1
  124. package/dist/queries/by-kind.d.ts +2 -2
  125. package/dist/queries/by-kind.js +1 -1
  126. package/dist/queries/call-graph.d.ts +2 -2
  127. package/dist/queries/call-graph.js +1 -1
  128. package/dist/queries/change-surface.d.ts +2 -2
  129. package/dist/queries/change-surface.js +1 -1
  130. package/dist/queries/cleanup-plan.d.ts +2 -2
  131. package/dist/queries/cleanup-plan.js +1 -1
  132. package/dist/queries/co-change.d.ts +2 -2
  133. package/dist/queries/co-change.js +1 -1
  134. package/dist/queries/code.d.ts +2 -2
  135. package/dist/queries/code.js +1 -1
  136. package/dist/queries/complexity-hotspots.d.ts +2 -2
  137. package/dist/queries/complexity-hotspots.js +1 -1
  138. package/dist/queries/complexity.d.ts +2 -2
  139. package/dist/queries/complexity.js +1 -1
  140. package/dist/queries/convergence.d.ts +2 -2
  141. package/dist/queries/convergence.js +1 -1
  142. package/dist/queries/coupling.d.ts +2 -2
  143. package/dist/queries/coupling.js +1 -1
  144. package/dist/queries/cycles.d.ts +2 -2
  145. package/dist/queries/cycles.js +1 -1
  146. package/dist/queries/dataflow.d.ts +2 -2
  147. package/dist/queries/dataflow.js +1 -1
  148. package/dist/queries/dead.d.ts +2 -2
  149. package/dist/queries/dead.js +1 -1
  150. package/dist/queries/decorative-checkers.d.ts +3 -3
  151. package/dist/queries/decorative-checkers.js +1 -1
  152. package/dist/queries/deep-chains.d.ts +2 -2
  153. package/dist/queries/deep-chains.js +1 -1
  154. package/dist/queries/deps.d.ts +2 -2
  155. package/dist/queries/deps.js +1 -1
  156. package/dist/queries/diff-gate.d.ts +30 -2
  157. package/dist/queries/diff-gate.js +1 -1
  158. package/dist/queries/diff-impact.d.ts +2 -2
  159. package/dist/queries/diff-impact.js +1 -1
  160. package/dist/queries/doc-drift.d.ts +2 -2
  161. package/dist/queries/doc-drift.js +1 -1
  162. package/dist/queries/drift.d.ts +2 -2
  163. package/dist/queries/drift.js +1 -1
  164. package/dist/queries/duplicate-bodies.d.ts +2 -2
  165. package/dist/queries/duplicate-bodies.js +1 -1
  166. package/dist/queries/extract-candidates.d.ts +2 -2
  167. package/dist/queries/extract-candidates.js +1 -1
  168. package/dist/queries/fan.d.ts +2 -2
  169. package/dist/queries/fan.js +1 -1
  170. package/dist/queries/files.d.ts +2 -2
  171. package/dist/queries/health.d.ts +3 -3
  172. package/dist/queries/health.js +1 -1
  173. package/dist/queries/hierarchy.d.ts +2 -2
  174. package/dist/queries/hierarchy.js +1 -1
  175. package/dist/queries/hotspots.d.ts +2 -2
  176. package/dist/queries/hotspots.js +1 -1
  177. package/dist/queries/imports.d.ts +2 -2
  178. package/dist/queries/imports.js +1 -1
  179. package/dist/queries/incomplete-migration.d.ts +2 -2
  180. package/dist/queries/incomplete-migration.js +1 -1
  181. package/dist/queries/index.d.ts +17 -3
  182. package/dist/queries/index.js +1 -1
  183. package/dist/queries/isolated.d.ts +2 -2
  184. package/dist/queries/isolated.js +1 -1
  185. package/dist/queries/locality-candidates.d.ts +2 -2
  186. package/dist/queries/locality-candidates.js +1 -1
  187. package/dist/queries/members.d.ts +2 -2
  188. package/dist/queries/members.js +1 -1
  189. package/dist/queries/methods.d.ts +2 -2
  190. package/dist/queries/methods.js +1 -1
  191. package/dist/queries/not-implemented.d.ts +3 -3
  192. package/dist/queries/not-implemented.js +1 -1
  193. package/dist/queries/outline.d.ts +2 -2
  194. package/dist/queries/outline.js +1 -1
  195. package/dist/queries/passthrough-candidates.d.ts +2 -2
  196. package/dist/queries/passthrough-candidates.js +1 -1
  197. package/dist/queries/plan-context.d.ts +2 -2
  198. package/dist/queries/plan-context.js +1 -1
  199. package/dist/queries/react-component-duplicates.d.ts +2 -2
  200. package/dist/queries/react-component-duplicates.js +1 -1
  201. package/dist/queries/react-hook-candidates.d.ts +2 -2
  202. package/dist/queries/react-hook-candidates.js +1 -1
  203. package/dist/queries/react-large-component-pressure.d.ts +2 -2
  204. package/dist/queries/react-large-component-pressure.js +1 -1
  205. package/dist/queries/recent-duplicates.d.ts +2 -2
  206. package/dist/queries/recent-duplicates.js +1 -1
  207. package/dist/queries/redundant-reexports.d.ts +2 -2
  208. package/dist/queries/redundant-reexports.js +1 -1
  209. package/dist/queries/refs.d.ts +2 -2
  210. package/dist/queries/refs.js +1 -1
  211. package/dist/queries/self-audit.d.ts +2 -2
  212. package/dist/queries/self-audit.js +1 -1
  213. package/dist/queries/similar-chains.d.ts +2 -2
  214. package/dist/queries/similar-chains.js +1 -1
  215. package/dist/queries/similar-files.d.ts +2 -2
  216. package/dist/queries/similar-files.js +1 -1
  217. package/dist/queries/similar-signatures.d.ts +2 -2
  218. package/dist/queries/similar-signatures.js +1 -1
  219. package/dist/queries/similar.d.ts +2 -2
  220. package/dist/queries/similar.js +1 -1
  221. package/dist/queries/slice.d.ts +2 -2
  222. package/dist/queries/slice.js +1 -1
  223. package/dist/queries/stale-abstractions.d.ts +2 -2
  224. package/dist/queries/stale-abstractions.js +1 -1
  225. package/dist/queries/stats.d.ts +2 -2
  226. package/dist/queries/stats.js +1 -1
  227. package/dist/queries/surface.d.ts +2 -2
  228. package/dist/queries/surface.js +1 -1
  229. package/dist/queries/symbols.d.ts +2 -2
  230. package/dist/queries/symbols.js +1 -1
  231. package/dist/queries/system.d.ts +2 -2
  232. package/dist/queries/system.js +1 -1
  233. package/dist/queries/test-quality.d.ts +2 -2
  234. package/dist/queries/test-quality.js +1 -1
  235. package/dist/queries/trace.d.ts +2 -2
  236. package/dist/queries/trace.js +1 -1
  237. package/dist/queries/twin-ab.d.ts +3 -3
  238. package/dist/queries/twin-ab.js +1 -1
  239. package/dist/queries/twin-drift.d.ts +2 -2
  240. package/dist/queries/twin-drift.js +1 -1
  241. package/dist/queries/unused-imports.d.ts +2 -2
  242. package/dist/queries/unused-imports.js +1 -1
  243. package/dist/queries/unused-params.d.ts +2 -2
  244. package/dist/queries/unused-params.js +1 -1
  245. package/dist/queries/vue-component-duplicates.d.ts +2 -2
  246. package/dist/queries/vue-component-duplicates.js +1 -1
  247. package/dist/queries/vue-composable-candidates.d.ts +2 -2
  248. package/dist/queries/vue-composable-candidates.js +1 -1
  249. package/dist/queries/vue-large-view-pressure.d.ts +2 -2
  250. package/dist/queries/vue-large-view-pressure.js +1 -1
  251. package/dist/queries/wrapper-candidates.d.ts +2 -2
  252. package/dist/queries/wrapper-candidates.js +1 -1
  253. package/dist/reindex-worker.js +26 -26
  254. package/dist/reindex.d.ts +14 -4
  255. package/dist/reindex.js +34 -38
  256. package/dist/runtime.d.ts +167 -18
  257. package/dist/runtime.js +3 -2
  258. package/dist/rust-semantic-session-server.js +1 -1
  259. package/dist/rust-semantic-session-worker.js +1 -1
  260. package/dist/rust-semantic-worker.js +1 -1
  261. package/dist/{scip-cli-kRpaexVJ.d.ts → scip-cli-Cc6c00-a.d.ts} +6 -2
  262. package/dist/watch-server.js +5 -5
  263. package/docs/AGENT_GUIDE.md +20 -4
  264. package/docs/AI_FAILURE_MODES.md +17 -17
  265. package/docs/API_EVOLUTION.md +71 -0
  266. package/docs/CLI_JSON_OUTPUT.md +168 -0
  267. package/docs/COMMAND_REFERENCE.md +10 -6
  268. package/docs/COMMITTED_RECORD_COMPATIBILITY.md +117 -0
  269. package/docs/CONFIGURATION_WRITE_SAFETY.md +130 -0
  270. package/docs/DETECTOR_GUIDE.md +46 -46
  271. package/docs/DURABILITY.md +103 -0
  272. package/docs/INDEX_GENERATIONS.md +121 -0
  273. package/docs/LOCK_PROTOCOL.md +133 -0
  274. package/docs/MAILBOX_LIFECYCLE.md +197 -0
  275. package/docs/REINDEX_METADATA_COMPATIBILITY.md +84 -0
  276. package/docs/RUST_DURABLE_SESSION_PROTOCOL.md +126 -0
  277. package/docs/SECURITY_MODEL.md +129 -0
  278. package/docs/TELEMETRY_RETENTION.md +77 -0
  279. package/docs/TIME_SEMANTICS.md +77 -0
  280. package/docs/WATCH_REFRESH_REQUESTS.md +110 -0
  281. package/docs/WINDOWS_SIDECAR_RELEASE.md +298 -0
  282. package/docs/analyzer-validation-ledger.md +24 -23
  283. package/docs/schemas/cli-json-envelope.schema.json +53 -0
  284. package/docs/schemas/cli-output-page.schema.json +104 -0
  285. package/docs/schemas/npm-release-state.schema.json +146 -0
  286. package/docs/schemas/outcome-event-record.schema.json +39 -0
  287. package/docs/schemas/project-config.schema.json +247 -0
  288. package/docs/schemas/suppression-record.schema.json +31 -0
  289. package/docs/schemas/windows-sidecar-provenance.schema.json +137 -0
  290. package/package.json +21 -10
  291. package/scripts/build-scip-windows.mjs +180 -61
  292. package/scripts/scip-windows-provenance.mjs +364 -0
  293. package/scripts/verify-scip-windows.mjs +29 -0
  294. package/skills/_shared/SKILL.md +90 -229
  295. package/skills/_shared/agents/openai.yaml +1 -1
  296. package/skills/_shared/references/agent-contract-catalog.md +105 -0
  297. package/skills/_shared/references/command-catalog.md +118 -0
  298. package/skills/_shared/references/detector-precision-and-diffgate.md +59 -0
  299. package/skills/_shared/references/evidence-and-dead-code.md +25 -0
  300. package/skills/scip-audit/SKILL.md +77 -0
  301. package/skills/scip-audit/agents/openai.yaml +4 -0
  302. package/skills/scip-audit/references/claims.md +98 -0
  303. package/skills/scip-audit/references/cleanup.md +101 -0
  304. package/skills/scip-audit/references/directory.md +222 -0
  305. package/skills/scip-audit/references/frontend.md +130 -0
  306. package/skills/scip-audit/references/integrity.md +154 -0
  307. package/skills/scip-audit/references/maintainability.md +162 -0
  308. package/skills/scip-audit/references/twin-drift.md +104 -0
  309. package/skills/scip-diagnose/SKILL.md +52 -0
  310. package/skills/scip-diagnose/agents/openai.yaml +4 -0
  311. package/skills/scip-diagnose/references/debug.md +117 -0
  312. package/skills/{scip-probe-reachability/SKILL.md → scip-diagnose/references/probe-reachability.md} +11 -27
  313. package/skills/scip-diagnose/references/root-cause.md +145 -0
  314. package/skills/scip-diagnose/references/triage.md +119 -0
  315. package/skills/scip-explore/SKILL.md +54 -85
  316. package/skills/scip-explore/agents/openai.yaml +2 -2
  317. package/skills/scip-explore/references/diagrams.md +40 -0
  318. package/skills/scip-explore/references/language-playbook.md +49 -0
  319. package/skills/scip-improve/SKILL.md +56 -0
  320. package/skills/scip-improve/agents/openai.yaml +4 -0
  321. package/skills/scip-improve/references/cleanup-batches.md +53 -0
  322. package/skills/scip-improve/references/directory-moves.md +53 -0
  323. package/skills/scip-improve/references/doc-reconcile.md +30 -0
  324. package/skills/scip-improve/references/frontend-extraction.md +39 -0
  325. package/skills/scip-improve/references/maintainability-mechanism.md +43 -0
  326. package/skills/scip-improve/references/twin-drift.md +35 -0
  327. package/skills/scip-plan/SKILL.md +68 -0
  328. package/skills/scip-plan/agents/openai.yaml +4 -0
  329. package/skills/scip-plan/references/api-impact.md +19 -0
  330. package/skills/scip-plan/references/conductor.md +41 -0
  331. package/skills/scip-plan/references/high-assurance.md +43 -0
  332. package/skills/scip-plan/references/hyper-optimization.md +50 -0
  333. package/skills/scip-plan/references/tla-model.md +88 -0
  334. package/skills/scip-query/SKILL.md +53 -98
  335. package/skills/scip-query/agents/openai.yaml +2 -2
  336. package/skills/scip-setup/SKILL.md +69 -181
  337. package/skills/scip-setup/agents/openai.yaml +3 -3
  338. package/skills/scip-setup/references/bootstrap-workflow.md +120 -0
  339. package/skills/scip-setup/references/language-verification.md +61 -0
  340. package/skills/scip-setup/references/lifecycle-commands.md +119 -0
  341. package/skills/scip-setup/references/per-repo-triage.md +24 -0
  342. package/skills/scip-verify/SKILL.md +126 -84
  343. package/skills/scip-verify/agents/openai.yaml +2 -2
  344. package/skills/scip-verify/references/calibrate-detectors.md +170 -0
  345. package/dist/chunk-2CTX5CMX.js +0 -4
  346. package/dist/chunk-2Y373BDD.js +0 -2
  347. package/dist/chunk-2YU7I3QO.js +0 -2
  348. package/dist/chunk-3MJ5YA4Y.js +0 -16
  349. package/dist/chunk-64RFXJT5.js +0 -16
  350. package/dist/chunk-7UY7SD7D.js +0 -927
  351. package/dist/chunk-B5NLK2B3.js +0 -6
  352. package/dist/chunk-C2QSK7E7.js +0 -2
  353. package/dist/chunk-C7NIYIQ4.js +0 -67
  354. package/dist/chunk-D4U5Q3FT.js +0 -7
  355. package/dist/chunk-DGAGY7RJ.js +0 -60
  356. package/dist/chunk-DLWR3NUU.js +0 -5
  357. package/dist/chunk-K2ERX4UT.js +0 -3
  358. package/dist/chunk-KHE7J5ZN.js +0 -3
  359. package/dist/chunk-L7SPDE73.js +0 -84
  360. package/dist/chunk-LHMNRHGV.js +0 -3
  361. package/dist/chunk-LM72NQ7T.js +0 -3
  362. package/dist/chunk-MSWVMDAH.js +0 -122
  363. package/dist/chunk-NH7WNNQC.js +0 -20
  364. package/dist/chunk-NPKYOIFM.js +0 -18
  365. package/dist/chunk-NZL2DBT7.js +0 -2
  366. package/dist/chunk-OMPZHGHO.js +0 -2
  367. package/dist/chunk-P2PC2WGR.js +0 -2
  368. package/dist/chunk-Q3AFUTGB.js +0 -8
  369. package/dist/chunk-QRGV2F7L.js +0 -2
  370. package/dist/chunk-TW4OG5FC.js +0 -4
  371. package/dist/chunk-U7DSEKOM.js +0 -30
  372. package/dist/chunk-V27BEQJN.js +0 -7
  373. package/dist/chunk-XAGAZSFE.js +0 -6
  374. package/dist/chunk-XBN5VO53.js +0 -2
  375. package/dist/chunk-YGAGTIDK.js +0 -11
  376. package/dist/command-descriptors-N2TL4XM2.js +0 -613
  377. package/dist/direct-navigation-DUCZCTOE.js +0 -3
  378. package/skills/scip-api-impact/SKILL.md +0 -140
  379. package/skills/scip-api-impact/agents/openai.yaml +0 -4
  380. package/skills/scip-calibrate/SKILL.md +0 -131
  381. package/skills/scip-calibrate/agents/openai.yaml +0 -4
  382. package/skills/scip-claim-audit/SKILL.md +0 -107
  383. package/skills/scip-claim-audit/agents/openai.yaml +0 -4
  384. package/skills/scip-cleanup-audit/SKILL.md +0 -130
  385. package/skills/scip-cleanup-audit/agents/openai.yaml +0 -4
  386. package/skills/scip-cleanup-improve/SKILL.md +0 -85
  387. package/skills/scip-cleanup-improve/agents/openai.yaml +0 -4
  388. package/skills/scip-concrete-plan/HIGH_ASSURANCE.md +0 -317
  389. package/skills/scip-concrete-plan/SKILL.md +0 -105
  390. package/skills/scip-concrete-plan/agents/openai.yaml +0 -4
  391. package/skills/scip-conductor/SKILL.md +0 -133
  392. package/skills/scip-conductor/agents/openai.yaml +0 -4
  393. package/skills/scip-debug/SKILL.md +0 -130
  394. package/skills/scip-debug/agents/openai.yaml +0 -4
  395. package/skills/scip-diagram/SKILL.md +0 -110
  396. package/skills/scip-diagram/agents/openai.yaml +0 -4
  397. package/skills/scip-directory-architecture/SKILL.md +0 -266
  398. package/skills/scip-directory-architecture/agents/openai.yaml +0 -4
  399. package/skills/scip-doc-reconcile/SKILL.md +0 -89
  400. package/skills/scip-doc-reconcile/agents/openai.yaml +0 -4
  401. package/skills/scip-hyper-optimization/SKILL.md +0 -156
  402. package/skills/scip-hyper-optimization/agents/openai.yaml +0 -4
  403. package/skills/scip-integrity-audit/SKILL.md +0 -152
  404. package/skills/scip-integrity-audit/agents/openai.yaml +0 -4
  405. package/skills/scip-language-playbook/SKILL.md +0 -106
  406. package/skills/scip-language-playbook/agents/openai.yaml +0 -4
  407. package/skills/scip-maintainability/SKILL.md +0 -158
  408. package/skills/scip-maintainability/agents/openai.yaml +0 -4
  409. package/skills/scip-probe-reachability/agents/openai.yaml +0 -4
  410. package/skills/scip-react-maintainability/SKILL.md +0 -101
  411. package/skills/scip-react-maintainability/agents/openai.yaml +0 -4
  412. package/skills/scip-root-cause/SKILL.md +0 -151
  413. package/skills/scip-root-cause/agents/openai.yaml +0 -4
  414. package/skills/scip-tla-model-system/SKILL.md +0 -148
  415. package/skills/scip-tla-model-system/agents/openai.yaml +0 -4
  416. package/skills/scip-triage-issue/SKILL.md +0 -133
  417. package/skills/scip-triage-issue/agents/openai.yaml +0 -4
  418. package/skills/scip-twin-drift/SKILL.md +0 -109
  419. package/skills/scip-twin-drift/agents/openai.yaml +0 -4
  420. package/skills/scip-vue-maintainability/SKILL.md +0 -107
  421. package/skills/scip-vue-maintainability/agents/openai.yaml +0 -4
@@ -0,0 +1,130 @@
1
+ # React and Vue maintainability
2
+
3
+ Reviews React and Vue frontends as maintainable systems: React as
4
+ components, hooks, JSX structure, and behavior lifecycles; Vue as single-file
5
+ components, templates, scripts, styles, external scripts, components, and
6
+ composables. Both follow the same four-step workflow below; framework-
7
+ specific commands and definitions are called out per step.
8
+
9
+ ## Definitions
10
+
11
+ - **Component duplicate candidate** (React or Vue) — a pair or group of
12
+ rendered structures that repeat the same user-facing arrangement,
13
+ controls, states, props, or data-presentation shape enough that a shared
14
+ component may reduce drift.
15
+ - **React hook candidate** — a pair or group of component behaviors that
16
+ repeat the same state lifecycle, effects, requests, validation,
17
+ persistence, callback policy, or derived-data rule enough that a shared
18
+ hook may preserve behavior better.
19
+ - **Vue composable candidate** — a pair or group of script behaviors that
20
+ repeat the same state lifecycle, effects, requests, validation,
21
+ persistence, or derived-data policy enough that a shared composable may
22
+ preserve behavior better.
23
+ - **Large component/view pressure** — one component, SFC, or linked view
24
+ file contains several kinds of knowledge that change for different
25
+ reasons. A large file is review pressure, not proof of duplication, by
26
+ itself.
27
+
28
+ ## Step 1 — Bound and scan
29
+
30
+ Pick the narrowest source root, feature area, or changed-file scope that
31
+ still includes likely reuse partners.
32
+
33
+ **Vue only:** if component references, imported composables, script blocks,
34
+ or linked external scripts matter, run `scip-query augment-vue --project
35
+ <path-to-tsconfig>` first — it adds compiler-resolved Vue SFC references to
36
+ the SQLite index using Volar (complete coverage) and must run before
37
+ scanning.
38
+
39
+ Then run, all uncapped with `--full --json`:
40
+
41
+ **React:**
42
+ ```
43
+ scip-query react-component-duplicates --scope <scope> --full --json
44
+ scip-query react-hook-candidates --scope <scope> --full --json
45
+ scip-query react-large-component-pressure --scope <scope> --full --json
46
+ scip-query recent-duplicates --scope <scope> --full --json
47
+ scip-query health --scope <scope> --json
48
+ ```
49
+
50
+ **Vue:**
51
+ ```
52
+ scip-query vue-component-duplicates --scope <scope> --full --json
53
+ scip-query vue-composable-candidates --scope <scope> --full --json
54
+ scip-query vue-large-view-pressure --scope <scope> --full --json
55
+ scip-query recent-duplicates --scope <scope> --full --json
56
+ scip-query health --json
57
+ ```
58
+
59
+ Every `*-duplicates`/`*-candidates`/`*-pressure` command has bounded
60
+ coverage — `--full` is required for the uncapped scan.
61
+ `react-component-duplicates`/`vue-component-duplicates` derive structural
62
+ similarity from tags, props, events, and bindings (React) or tags, bindings,
63
+ slots, and directives (Vue). `recent-duplicates` finds directional pairs:
64
+ recent code that re-implements established callable, React, or Vue code.
65
+ `health` gives a composite codebase health report (score, findings,
66
+ priorities, baselines, coverage notes) scoped to the frontend area.
67
+
68
+ **Complete when:** command scope, counts, and uncapped/full status are
69
+ recorded.
70
+
71
+ ## Step 2 — Cross-check candidates
72
+
73
+ - **Component-duplicate-only finding** — inspect for a shared presentational
74
+ component or existing component reuse.
75
+ - **Hook/composable-candidate-only finding** — inspect for shared behavior,
76
+ lifecycle, request, validation, persistence, event, or derived-state
77
+ policy.
78
+ - **Both overlap** — inspect for a feature-level concept that needs both a
79
+ component and a hook/composable boundary.
80
+ - **Large-component/view-only finding** — split by reason to change, not by
81
+ line count.
82
+
83
+ Use `scip-query outline <file>`, `deps <file>`, `rdeps <file>`,
84
+ `similar-files --scope <scope>`, and (React) `similar
85
+ <closest-existing-component-or-hook>` / (Vue) `recent-duplicates --scope
86
+ <scope> --full --json` to validate candidates.
87
+
88
+ **Complete when:** each top candidate is classified as reuse, extract,
89
+ split, skip, or blocked.
90
+
91
+ ## Step 3 — Act on findings
92
+
93
+ Prefer reuse over extraction.
94
+
95
+ - **React:** extract a component for repeated UI structure, states, props,
96
+ slots/children, or design-system composition; extract a hook for repeated
97
+ state, effects, requests, subscriptions, memoized derivations, callbacks,
98
+ or persistence.
99
+ - **Vue:** extract a component for repeated template structure, props,
100
+ slots, states, or design-system composition; extract a composable for
101
+ repeated state, lifecycle, requests, validation, persistence, derived
102
+ data, or event policy.
103
+
104
+ Keep domain-specific/essential variation at the call site rather than
105
+ abstracting it away.
106
+
107
+ Anti-patterns to avoid as a side effect of acting on a finding: do not
108
+ create boolean-soup APIs or wrapper components with no policy. Shared
109
+ design-system primitives, icons, labels, route names, test IDs, or CSS
110
+ utilities alone are not sufficient evidence to justify a duplicate/hook/
111
+ composable claim. Similar JSX/templates with different domain lifecycles may
112
+ justify a presentational component but does not justify a shared hook or
113
+ composable.
114
+
115
+ **Complete when:** the chosen action reduces future drift without creating
116
+ boolean-soup APIs or wrapper components with no policy.
117
+
118
+ ## Step 4 — Verify
119
+
120
+ Invoke `scip-verify` and use its authoritative postcheck table, including
121
+ the applicable React/Vue, extraction, duplicate, parameter, wrapper,
122
+ passthrough, and stale-abstraction checks.
123
+
124
+ **Complete when:** acted-on candidate pairs disappear, weaken materially, or
125
+ are explicitly accepted as essential variation.
126
+
127
+ ## Report
128
+
129
+ Executive read, command evidence, candidate groups, recommended action,
130
+ post-change proof, and remaining accepted variation.
@@ -0,0 +1,154 @@
1
+ # Integrity: is this real?
2
+
3
+ Structural review (`references/maintainability.md`) asks "is this well
4
+ organized?" This drill set asks **"is this real?"** — it hunts decorative
5
+ checkers, adapters written against imagined data, features that have
6
+ silently never run, and numbers nobody ever recomputed.
7
+
8
+ Command shortlist: `refs <symbol>`, `code <symbol>`, `trace <symbol>`,
9
+ `call-graph <symbol>`, `twin-drift -s <scope> --json`,
10
+ `twin-ab <symbolA> <symbolB>`, `outline <file> --signatures`,
11
+ `decorative-checkers -s <scope> --json`, `not-implemented -s <scope> --json`,
12
+ `test-quality -s <scope> --json`.
13
+
14
+ ## The stance
15
+
16
+ A green result you have never seen fail is unverified: every status word,
17
+ banner, and metric is testimony from the code, not evidence about the code,
18
+ so cross-examine the producer before believing it. The most dangerous code
19
+ is not broken code; it is code that reports success without doing the work.
20
+
21
+ ## Run all five drills over the chosen scope
22
+
23
+ ### Drill 1 — Falsify every checker
24
+
25
+ Inventory everything in scope that accepts/rejects, passes/fails, or
26
+ validates (checkers, gates, verifiers, validators) by finding producers with
27
+ `refs`/`call-graph` on the status words in their output.
28
+
29
+ For each one found, construct an input that MUST fail — a wrong binding, a
30
+ corrupt file, an impossible value — and run it. A checker that passes its
31
+ should-fail input is decorative and must be filed as a defect, not a note.
32
+
33
+ Before filing, attempt the defense: an accusation triggers a rewrite, so
34
+ search for the failure exit the drill may have missed — a config-gated
35
+ branch, an async rejection, or one-hop delegation (the calibration's known
36
+ noise archetypes). File the defect with the executed should-fail input
37
+ attached and the defense attempt noted; a defense that succeeds clears the
38
+ checker and stays in the record as its witness.
39
+
40
+ **Complete when:** every checker in scope has been witnessed rejecting a
41
+ constructed should-fail input, or is listed with a reason it cannot be.
42
+
43
+ Mechanized by `scip-query decorative-checkers`, which finds
44
+ `validate*`/`verify*`/`check*`/`assert*`/`is*`/`has*` callables with no
45
+ reachable failure exit anywhere in their body. Run it first to shortlist
46
+ candidates before hand-constructing should-fail inputs. It was calibrated
47
+ 2026-07-03 against two external repos, is standalone-only, and its noise
48
+ archetypes past one-hop delegation are documented in
49
+ `docs/validation/2026-07-03-integrity-detector-calibration.md`.
50
+
51
+ ### Drill 2 — Diff every adapter against captured reality
52
+
53
+ For each parser/adapter of an external format (tool output, XML/JSON
54
+ schemas, protocol messages), obtain ONE real sample from the actual source
55
+ and diff it against the code's assumptions and the tests' fixtures. Ask of
56
+ every fixture whether it was generated from reality or imagined. A parser
57
+ and a hand-written fixture can validate each other's shared hallucination
58
+ indefinitely, so fixture-vs-code agreement alone is not proof of
59
+ correctness.
60
+
61
+ **Complete when:** every adapter has been checked against at least one
62
+ captured-real sample.
63
+
64
+ ### Drill 3 — Autopsy every fallback
65
+
66
+ For every catch block, `??` fallback, and degraded mode in scope, produce an
67
+ execution witness (a test, a probe, a log) that the PRIMARY path runs —
68
+ because a primary path that has never worked looks identical to a healthy
69
+ fallback. Use the probe-reachability mode in `scip-diagnose` for parser/AST
70
+ branch reachability
71
+ when autopsying fallbacks. A fallback that always fires means the feature
72
+ above it is dead — "date of death: birth."
73
+
74
+ **Complete when:** every fallback's primary path has a witness or a filed
75
+ defect.
76
+
77
+ Mechanized by `scip-query not-implemented`, which finds reachable placeholder
78
+ stubs (`throw new Error('not implemented')`, TODO-comment + return-default,
79
+ empty bodies) that a real caller, entry surface, or package-surface export
80
+ can actually reach — distinguishing "primary path never built" from `dead`'s
81
+ "primary path built but unreferenced." Standalone-only (calibrated
82
+ 2026-07-03; 0 live findings on two external repos post-fix). A clean run
83
+ means "nothing this shape found," not proof that every fallback's primary
84
+ path is live.
85
+
86
+ ### Drill 4 — Hand-compute every metric twice
87
+
88
+ For each number the system reports (scores, counts, estimates), pick two
89
+ concrete instances, compute the expected value by hand from first
90
+ principles, and compare — off-by-a-factor errors (double counting, inflated
91
+ estimates) survive for years when nobody recomputes a single sample.
92
+
93
+ **Complete when:** every reported metric has two hand-verified samples.
94
+
95
+ ### Drill 5 — Cross-examine same-concept twins
96
+
97
+ Where one concept is computed in more than one place, feed both
98
+ implementations the same input and require the same answer. `twin-drift`
99
+ finds same-name cases mechanically; same-concept-different-name pairs must be
100
+ traced via `refs` and compared via `code` (see `references/twin-drift.md`
101
+ for the full drift-classification workflow once a pair is found).
102
+
103
+ Once a twin pair is identified, `scip-query twin-ab <symbolA> <symbolB>`
104
+ scaffolds a table-driven vitest file that imports both implementations and
105
+ asserts equal output — fill in the input table and run it. Disagreement
106
+ between twins means at least one is wrong — determine which before
107
+ consolidating them.
108
+
109
+ **Complete when:** every discovered twin pair has been compared on a shared
110
+ input.
111
+
112
+ ## Severity
113
+
114
+ Rank findings by what the failure does to a user who trusted the output: a
115
+ decorative checker or false "verified" banner outranks everything; a
116
+ dead-but-fallbacked feature outranks a wrong metric; a wrong metric outranks
117
+ structural mess. Route structural findings to `references/maintainability.md`
118
+ instead of reporting them here — they are real but they are not lies.
119
+
120
+ ## Reporting
121
+
122
+ File each finding with: the claim as displayed, the producer (file:line),
123
+ the drill that exposed it, the should-fail input or real sample used, and the
124
+ fix. The audit is complete only when every drill's exit criterion is met for
125
+ the scope, and every defect found has a regression artifact (a test,
126
+ fixture, or model) that fails on the pre-fix behavior.
127
+
128
+ End with a derived verdict, not an impression:
129
+
130
+ ```
131
+ Integrity: <scope> — <c> checkers witnessed failing, <a> adapters diffed
132
+ against reality, <f> fallback primaries witnessed live, <m> metrics
133
+ recomputed, <t> twins compared; <d> defects filed, <u> unverifiable (reasons)
134
+ ```
135
+
136
+ A suspect scope that produces zero defects is itself a claim: state what
137
+ made the suspicion wrong, or rerun the drill that should have caught it.
138
+
139
+ ## Your own regression artifacts are in scope too
140
+
141
+ A regression artifact that doesn't actually assert anything, or asserts the
142
+ same literal it stubbed into its own mock, is a fake witness — the same
143
+ "reports success without doing the work" failure mode this drill set hunts
144
+ in production code, just relocated to the test suite.
145
+
146
+ Run `scip-query test-quality -s <scope>` over the audit's own regression
147
+ artifacts (and periodically over the suite at large) to catch fake
148
+ witnesses. It catches assertion-free test bodies, a skipped-test ledger with
149
+ git-blame age (a skip with no fix date attached is a claim nobody is
150
+ checking), and mock-echo (a test that only proves its own stub).
151
+ Standalone-only with mixed precision by sub-check (calibrated 2026-07-03):
152
+ assertion-free and skipped are high-precision; mock-echo is intentionally
153
+ low-precision (syntactic same-literal matching, not dataflow) — treat its
154
+ output as a reviewed candidate list, not a verdict.
@@ -0,0 +1,162 @@
1
+ # Maintainability: hidden policy, scattered concepts, weak boundaries
2
+
3
+ Maintainability is the degree to which real code units let a maintainer
4
+ understand, verify, and change behavior without rediscovering hidden
5
+ knowledge. Use for hidden policies, scattered concepts, accidental
6
+ variation, weak boundaries, system compression, architecture smells, and
7
+ structural refactor opportunities beyond a health score.
8
+
9
+ Ground all claims in files, symbols, references, call graphs, dependencies,
10
+ surfaces, and blast radius rather than opinion. Do not chase health scores —
11
+ detector counts are clues, not objectives. Name concrete referents (specific
12
+ files/symbols) before naming a code smell. Only add an abstraction when it
13
+ removes hidden policy, names a lifecycle, enforces a rule, or reduces
14
+ concept count — never for its own sake; prefer deletion, inlining, merging,
15
+ generation, or enforcement of an existing mechanism before introducing a
16
+ broad new framework.
17
+
18
+ ## Vocabulary
19
+
20
+ - **Code smell** — an observable codebase fact that predicts avoidable
21
+ future mistakes because the same knowledge must be rediscovered,
22
+ synchronized, or defended in more than one place.
23
+ - **Concept boundary** — the line around code units that exist for one
24
+ reason to change.
25
+ - **Hidden policy** — a rule for choosing among several plausible behaviors
26
+ that lives in local branches, comments, conventions, or caller folklore
27
+ instead of a named mechanism.
28
+ - **Lifecycle** — a repeatable sequence of states or steps that makes a
29
+ result valid.
30
+ - **Accidental variation** — difference in code shape that does not
31
+ correspond to behavior, domain facts, runtime constraints, or external
32
+ contracts.
33
+ - **Essential variation** — difference that must remain because the real
34
+ units differ: language grammars, user-visible APIs, runtime environments,
35
+ or compatibility boundaries. Preserve it; do not remove it.
36
+ - **System compression** — replacing several mechanisms that perform the
37
+ same role, policy, lifecycle, or surface job with fewer named mechanisms
38
+ that preserve behavior.
39
+ - **Unifying definition** — the single essential trait that makes several
40
+ code sites one concept. Any scattered-concept or consolidation claim must
41
+ ship its unifying definition; if no such trait covers every cited site,
42
+ the variation is essential and the sites must not be consolidated. Failing
43
+ to state it proves the sites are not one concept — consolidating anyway
44
+ packages essential variation into a false abstraction.
45
+
46
+ ## Step 1 — Bound the review
47
+
48
+ Restate the review question as: "What future-maintenance mistakes does this
49
+ structure invite, and what smaller named mechanisms would prevent them
50
+ without hiding real variation?" Name the scope as one of: repo, module,
51
+ command family, query family, runtime surface, fixture set, or feature path.
52
+
53
+ **Complete when:** the review question and scope are both concrete.
54
+
55
+ ## Step 2 — Map evidence
56
+
57
+ Run, in sequence: `scip-query stats`, `system <scope>`, `surface <scope>`,
58
+ `files <pattern>`, `outline <file>`, `deps <file>`, `rdeps <file>`, `trace
59
+ <symbol>`, `call-graph <symbol>`, `affected <symbol>`, `change-surface
60
+ <file>`.
61
+
62
+ - `stats` maps repo-wide index size before bounding the review (complete
63
+ coverage).
64
+ - `system <scope>` gives the full module map — files, exported symbols with
65
+ line ranges, internal deps, reverse deps (complete coverage).
66
+ - `surface <scope>` shows which symbols consumers actually use — consumer
67
+ paths and consumed symbol identities (complete coverage).
68
+ - `change-surface <file>` gives a pre-change briefing of defined symbols,
69
+ external consumer counts, and risk levels (bounded coverage).
70
+ - `affected <symbol>` computes the transitive closure of symbols that could
71
+ break if a candidate symbol changes (bounded coverage).
72
+ - `drift --patterns --architecture` finds drift candidates — unused imports
73
+ plus declared architecture boundary violations (bounded coverage; opt-in
74
+ pattern hits are leads, not confirmed findings).
75
+
76
+ Use the cleanup-oriented commands `health`, `similar`, `similar-files`,
77
+ `similar-chains`, `extract-candidates`, `wrapper-candidates`,
78
+ `passthrough-candidates`, `stale-abstractions`, `drift`, and `cycles` as
79
+ evidence-gathering probes during this step, not as final verdicts.
80
+
81
+ **Complete when:** concrete units, consumers, tests, fallbacks, adapters,
82
+ generated artifacts, and compatibility constraints are all visible.
83
+
84
+ ## Step 3 — Build the role inventory
85
+
86
+ For each cluster, ask what one concept appears in several places and what
87
+ single essential trait makes them one concept — if the trait cannot be
88
+ stated, they are not one concept. Also ask: what policy is hidden, what
89
+ lifecycle is unnamed, which differences are essential, what must a
90
+ maintainer know that the local interface does not admit, and would a
91
+ smaller mechanism remove a reason to change, versus merely move code?
92
+
93
+ **Complete when:** every candidate smell names its referents and its
94
+ future-maintenance failure mode.
95
+
96
+ ## Step 4 — Rank pressure
97
+
98
+ Severity tiers, most to least severe:
99
+
100
+ 1. Hidden correctness or evidence policy spread across modules.
101
+ 2. A repeated lifecycle or pipeline with no owner.
102
+ 3. Public surface exposing accidental internals.
103
+ 4. A large module with unrelated reasons to change.
104
+ 5. Tests that encode incident history without contract vocabulary.
105
+ 6. Adapter families with repeated capability or fallback shapes.
106
+ 7. Suppression comments that document architecture decisions instead of
107
+ exceptions.
108
+ 8. Thin wrappers and passthroughs that do not buy clarity.
109
+
110
+ Reject and do not act on smells that are aesthetic, unverifiable, or false
111
+ compression.
112
+
113
+ **Complete when:** each target is ranked, skipped, or deferred with
114
+ evidence.
115
+
116
+ ## Step 5 — Choose a model
117
+
118
+ For substantial changes, compare at least two of three models:
119
+
120
+ - **Conservative** — delete or inline local bloat.
121
+ - **Shape-level** — introduce one small mechanism for a repeated role or
122
+ lifecycle.
123
+ - **Radical** — replace a scattered surface with metadata, generation, or
124
+ enforced policy.
125
+
126
+ Evaluate: behavior preserved, concept count removed, blast radius, deletion
127
+ potential, false-abstraction failure mode, migration path, and verification
128
+ cost.
129
+
130
+ **Complete when:** the chosen model removes a concept or policy duplication
131
+ rather than merely extracting a helper.
132
+
133
+ ## Step 6 — Produce a register or atlas
134
+
135
+ For a broad review, write a register under `docs/plans/` unless the user
136
+ asks not to edit files; for an implementation, write an atlas before
137
+ editing.
138
+
139
+ Dispositions: merge, delete, inline, extract, generate, enforce, supersede,
140
+ defer, skip.
141
+
142
+ Every merge, extract, or generate entry must carry its unifying definition
143
+ and its strongest dissenter (the cited site most likely to differ
144
+ essentially), plus evidence that the dissenter does not actually differ
145
+ essentially. If a dissenter survives review (it really does differ
146
+ essentially), the entry moves to disposition `skip` with reason "essential
147
+ variation" — but the dissenter stays recorded in the register either way.
148
+
149
+ **Complete when:** each opportunity has evidence, disposition, dependency
150
+ order, touch map, and validation plan recorded.
151
+
152
+ ## Step 7 — Implement and verify (when asked)
153
+
154
+ Implement the smallest named mechanism that matches the real concept, and
155
+ keep essential variation near the adapter or domain code that knows it.
156
+ After implementing, run focused tests and the routed postchecks from
157
+ `scip-verify`, then complete that verification skill.
158
+
159
+ ## Report
160
+
161
+ State the smell addressed, the mechanism introduced or removed, what was
162
+ deliberately not compressed, and verification results.
@@ -0,0 +1,104 @@
1
+ # Twin drift: same concept, silently diverged copies
2
+
3
+ Use when the same concept exists in more than one place under the same or a
4
+ near name and the bodies have silently diverged — same-name or near-name
5
+ functions across files with diverged bodies, drifted policy thresholds,
6
+ one-sided fixes, or consolidating a duplicated concept into one canonical
7
+ helper.
8
+
9
+ Command shortlist: `twin-drift --json --full` (detector), `duplicate-bodies
10
+ --json --full` (cross-check), `code <symbol>`, `refs <symbol>`, `diff-gate
11
+ --json`.
12
+
13
+ ## Definitions
14
+
15
+ A **twin drift group** is a same-leaf-name family of callables spanning at
16
+ least two files whose normalized-token bodies are neither identical (that's
17
+ `duplicate-bodies`' job) nor unrelated (a homonym like `render` or `parse`)
18
+ but partially overlapping — signaling a concept copied once and then edited
19
+ independently in only some of its copies.
20
+
21
+ **Near-name** means case-insensitive match, or edit-distance ≤ 2 for names of
22
+ 8 or more characters.
23
+
24
+ ## Detect
25
+
26
+ Run `scip-query twin-drift --json --full` to surface every DIVERGENT and
27
+ near-name group in scope; scope it to a module with `-s/--scope <path>` when
28
+ the review should be bounded. Record group count, member count, and
29
+ `maxDivergence` per group.
30
+
31
+ Cross-check results against `scip-query duplicate-bodies --json --full` —
32
+ IDENTICAL groups belong to `duplicate-bodies`, not here; do not re-report
33
+ them. Homonyms — groups with similarity below `--min-similarity` (default
34
+ 0.3) — are noise and should not be chased unless `--include-homonyms` was
35
+ explicitly requested.
36
+
37
+ **Complete when:** every group in scope is enumerated with its relationship
38
+ (divergent vs. suppressed homonym).
39
+
40
+ ## Classify each DIVERGENT group
41
+
42
+ Use `scip-query code <symbol>` to read every member's body; use the group's
43
+ `firstDivergentTokens` field as a starting point for locating where the
44
+ bodies diverge. Assign exactly one label:
45
+
46
+ - **Intentional variation** — the copies differ because the domains
47
+ genuinely differ (example: a React-specific vs. Vue-specific structural
48
+ comparator branching on framework-specific overlap checks). Essential
49
+ variation stays, and the reason must be recorded.
50
+ - **Drifted policy** — the copies encode what should be one policy (a
51
+ threshold, a normalization rule, an edge-case guard) that only some copies
52
+ received when it last changed. This is a bug: pick the correct value and
53
+ propagate it, or extract the policy into one named function/constant.
54
+ - **One-sided fix** — one copy was bugfixed or hardened and its twin(s)
55
+ were not. This is a bug: apply the same fix to every member, or
56
+ consolidate them.
57
+
58
+ **Complete when:** every DIVERGENT group in scope has one of the three
59
+ labels with a one-line reason.
60
+
61
+ ## Act
62
+
63
+ Prefer consolidating a twin-drift group into one exported helper over
64
+ leaving parallel copies; when consolidation is unsafe or premature, record
65
+ the intent gap explicitly (comment or waiver) rather than silently accepting
66
+ the drift.
67
+
68
+ For groups being consolidated, pick the canonical member by comparing
69
+ consumer counts via `scip-query refs <symbol-in-file-A>` and `scip-query
70
+ refs <symbol-in-file-B>` — prefer the member with the most consumers, or the
71
+ one in the more general/shared location when consumer counts tie.
72
+
73
+ To consolidate: extract or move the canonical body to one exported helper
74
+ and update the other members to call it, or delete them outright if they
75
+ were pure duplication with different names for caller convenience. Preserve
76
+ any classified-essential variation as a parameter or a thin caller-side
77
+ branch, not as a second copy of the whole body.
78
+
79
+ For groups marked intentional variation, do not force consolidation —
80
+ instead record the reason in a comment near one of the members so the next
81
+ `twin-drift` run and the next reader both see it was considered.
82
+
83
+ **Complete when:** every DIVERGENT group is either consolidated (old copies
84
+ gone or forwarding) or has a recorded reason it stays separate.
85
+
86
+ ## Verify
87
+
88
+ After acting, rerun `scip-query twin-drift` to confirm consolidated groups
89
+ no longer appear as DIVERGENT, and run the routed postchecks from
90
+ `scip-verify`.
91
+
92
+ The twin-partner check inside `scip-query diff-gate` is advisory and never
93
+ blocks the gate by itself, but a finding there on your own diff means you've
94
+ reproduced the exact defect class this workflow exists to catch — fix it or
95
+ explicitly accept it before finishing.
96
+
97
+ **Complete when:** `twin-drift` shows no unclassified DIVERGENT groups in
98
+ scope and any `diff-gate` findings are resolved or explained.
99
+
100
+ ## Report
101
+
102
+ List: scope; groups found (total/divergent/suppressed homonyms); each
103
+ divergent group with classification and action taken; and the verification
104
+ results of `twin-drift --json --full` and `diff-gate --json`.
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: scip-diagnose
3
+ description: Use in a scip-query-indexed repo when something is broken, crashing, failing a test, returning wrong data, or regressed — one bug, a recurring family pointing at one design flaw, or a raw issue/ticket needing a fix packet. Also use proactively to prove whether a parser/AST branch is reachable or dead, even with no reported failure. Distinct from the `debugging` skill: that one supplies the general method (reproduce on demand, observe rather than infer, one variable at a time); this one supplies SCIP evidence (trace, refs, dataflow) in an indexed repo. Use both together. Distinct from `incident-review`, which is postmortem methodology after an outage rather than finding a live cause.
4
+ commands:
5
+ - template: "scip-query files <feature-or-error-term>"
6
+ when: "Locate the files that can explain an unnormalized report or error."
7
+ - template: "scip-query trace <candidate-symbol>"
8
+ when: "Connect a candidate cause to its definition and references."
9
+ - template: "scip-query call-graph <entry-symbol>"
10
+ when: "Trace callers and callees around the observed failure path."
11
+ ---
12
+
13
+ # scip-diagnose
14
+
15
+ <!-- BEGIN GENERATED SKILL COMMANDS -->
16
+ ## Commands for this skill
17
+
18
+ | Command | Purpose | Returns | Coverage | When |
19
+ | --- | --- | --- | --- | --- |
20
+ | `scip-query files <feature-or-error-term>` | Find files matching a pattern | matching file paths | `complete` | Locate the files that can explain an unnormalized report or error. |
21
+ | `scip-query trace <candidate-symbol>` | Trace a symbol: definition + all references | definition sites with source and signature; referencing files with line numbers | `bounded` | Connect a candidate cause to its definition and references. |
22
+ | `scip-query call-graph <entry-symbol>` | Show incoming callers and outgoing callees for a symbol | caller and callee symbol identities with files | `bounded` | Trace callers and callees around the observed failure path. |
23
+
24
+ Use this shortlist first. Open [`../_shared/SKILL.md`](../_shared/SKILL.md) only when it is insufficient.
25
+ <!-- END GENERATED SKILL COMMANDS -->
26
+
27
+ ## Purpose
28
+
29
+ Move from a reported failure to a minimal verified fix. This skill covers four related but distinct situations — one bug, a recurring family of bugs pointing at one design flaw, a raw issue report that needs to become a fix packet, and an unverified parser/AST branch that needs to be proven reachable or dead — and routes each to its own evidence-gathering mode.
30
+
31
+ This skill has no commands of its own; every mode below draws on the shared `scip-query` vocabulary. Load [`../_shared/SKILL.md`](../_shared/SKILL.md) for freshness, lookup, postcheck, and subagent rules whenever a mode's shortlist is insufficient.
32
+
33
+ ## Pick the mode
34
+
35
+ | Situation | Mode | Reference |
36
+ | --- | --- | --- |
37
+ | One reported failure: broken, crashing, failing a test, wrong output, a regression — needs the smallest verified fix | **Debug** | [`references/debug.md`](references/debug.md) |
38
+ | The same kind of bug keeps recurring in one subsystem, patching hasn't worked, or the user lists several fixed/observed bugs and asks what is really wrong | **Root cause** | [`references/root-cause.md`](references/root-cause.md) |
39
+ | A raw bug report, GitHub issue, support ticket, TODO, or vague defect that has not yet been turned into evidence | **Triage** | [`references/triage.md`](references/triage.md) |
40
+ | A conditional branches on a parser/AST node's type, tag, or shape and nobody has checked it against the real parser — dead-branch or wrong-node-type suspicion, tree-sitter grammar mismatch, even with no reported failure | **Probe reachability** | [`references/probe-reachability.md`](references/probe-reachability.md) |
41
+
42
+ Pick exactly one mode before gathering evidence. Debug and triage both trace a single failing path, but debug assumes the failure is already pinned down enough to reproduce; triage exists because it isn't — normalize the report first. Root cause is not "debug but more bugs": it requires a falsifiable design-flaw hypothesis, killed rivals, retrodiction, and an executed latent-instance hunt, not just more patches. Probe reachability is the only mode that runs without a reported failure at all — it proves or disproves reachability of code nobody has verified against the real parser.
43
+
44
+ ## How the modes relate to each other and to other skills
45
+
46
+ - **Debug → Root cause escalation:** if a debug fix is the second or third patch to the same mechanism, stop and switch to root-cause mode instead of shipping another narrow patch.
47
+ - **Triage → Debug/Root cause handoff:** triage produces a fix packet with a suspected root cause and a failing-test plan; if the user also asked for the fix, implement from the packet using debug-mode discipline (smallest change, verify, `scip-verify`).
48
+ - **Root cause → scip-plan handoff:** root-cause mode diagnoses and hands off; it does not edit application code. The flaw and invariants become `scip-plan`'s current-flow and risk evidence, and the family table and hunt results constrain its slices.
49
+ - **vs. `debugging` skill:** that skill supplies the general method — reproduce on demand, observe rather than infer, change one variable at a time. This skill supplies the SCIP-specific evidence (trace, refs, dataflow, blast radius) that method needs in an indexed repo. Use both together; this skill does not replace that discipline.
50
+ - **vs. `incident-review`:** that skill is postmortem methodology applied after an outage has already been resolved. This skill finds a live, unresolved cause.
51
+ - **vs. `scip-audit`:** structural smells with no bug evidence go to the maintainability scenario in `scip-audit`. A recurring bug family with bug evidence goes to root-cause mode here.
52
+ - **Verification:** every mode that ends in a code change verifies with the narrowest repo test or smoke command, then invokes the `scip-verify` skill. Triage-only requests stop at the packet.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "SCIP Diagnose"
3
+ short_description: "Find the cause of a failure with SCIP evidence"
4
+ default_prompt: "Use $scip-diagnose to trace this failure to its cause and produce the minimal verified fix."