scip-query 0.19.4 → 0.19.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/CHANGELOG.md +75 -1
  2. package/README.md +242 -49
  3. package/dist/augment-vue-worker.js +1 -1
  4. package/dist/{chunk-2YU7I3QO.js → chunk-24QNP7MN.js} +2 -2
  5. package/dist/{chunk-CNKAGUPL.js → chunk-26X7KCJR.js} +2 -2
  6. package/dist/{chunk-GPBBJ5Y4.js → chunk-273W2U4Y.js} +3 -3
  7. package/dist/{chunk-7GXM52MI.js → chunk-2CVXCGL4.js} +2 -2
  8. package/dist/{chunk-ABMYA4TN.js → chunk-2EZSOTSY.js} +2 -2
  9. package/dist/{chunk-HKEHS2AS.js → chunk-2GSQR6YA.js} +2 -2
  10. package/dist/{chunk-FECYOO5O.js → chunk-2OXVAGGT.js} +2 -2
  11. package/dist/chunk-2ZOCHAL2.js +8 -0
  12. package/dist/{chunk-QGXBRIM5.js → chunk-336DC5NJ.js} +2 -2
  13. package/dist/chunk-35SQLYCQ.js +2 -0
  14. package/dist/{chunk-VXQNNXJE.js → chunk-3OIKRYU5.js} +2 -2
  15. package/dist/{chunk-52ZYCAEO.js → chunk-47X75ZKH.js} +2 -2
  16. package/dist/{chunk-NPKYOIFM.js → chunk-4CGVLUDP.js} +2 -2
  17. package/dist/chunk-4RI4BJGT.js +8 -0
  18. package/dist/{chunk-P2PC2WGR.js → chunk-52HQTTPB.js} +2 -2
  19. package/dist/{chunk-YNRNA5LK.js → chunk-5OC3HWP5.js} +2 -2
  20. package/dist/{chunk-STOL2BTL.js → chunk-6XFC7PQ5.js} +2 -2
  21. package/dist/{chunk-J77UIT3I.js → chunk-6XHTISLI.js} +2 -2
  22. package/dist/chunk-6YTSKJJ3.js +2 -0
  23. package/dist/{chunk-BTEE5NZQ.js → chunk-7E3TH5ZN.js} +2 -2
  24. package/dist/{chunk-X6D5IC6I.js → chunk-7LABSJSR.js} +2 -2
  25. package/dist/chunk-7Q6VYYCH.js +2 -0
  26. package/dist/{chunk-FWUUZTIO.js → chunk-A43URCQ3.js} +2 -2
  27. package/dist/chunk-A63U2W3P.js +3 -0
  28. package/dist/{chunk-3MJ5YA4Y.js → chunk-ADFSIJP2.js} +2 -2
  29. package/dist/chunk-AOLE4DYM.js +6 -0
  30. package/dist/chunk-APMMR5Y2.js +2 -0
  31. package/dist/chunk-B5MHCHP3.js +107 -0
  32. package/dist/{chunk-4RSI5EMG.js → chunk-CSTYYXKC.js} +2 -2
  33. package/dist/{chunk-25LPM4DG.js → chunk-CYJM7CYF.js} +2 -2
  34. package/dist/{chunk-S44IULR6.js → chunk-DD5BOU5I.js} +2 -2
  35. package/dist/{chunk-YGAGTIDK.js → chunk-DGMCFMPG.js} +7 -7
  36. package/dist/{chunk-UOAV44HR.js → chunk-E2ZXPB7J.js} +2 -2
  37. package/dist/{chunk-IZKFSVBV.js → chunk-EVOC5I5I.js} +2 -2
  38. package/dist/{chunk-XTX6QHOF.js → chunk-F42A3AKG.js} +2 -2
  39. package/dist/{chunk-Q4IIEGXJ.js → chunk-FHCTEANE.js} +2 -2
  40. package/dist/{chunk-3SVWW4PN.js → chunk-FKGN4A4E.js} +2 -2
  41. package/dist/{chunk-IG7N5ZIK.js → chunk-FQTPPXNA.js} +2 -2
  42. package/dist/{chunk-F6O7AAC3.js → chunk-G4UQL4CP.js} +2 -2
  43. package/dist/chunk-GA64UPMI.js +6 -0
  44. package/dist/{chunk-ZXJYMGD3.js → chunk-GK3GRUJX.js} +2 -2
  45. package/dist/chunk-HEBAY673.js +2 -0
  46. package/dist/chunk-HELS7KFF.js +2 -0
  47. package/dist/{chunk-B5NLK2B3.js → chunk-IPDCSB6N.js} +2 -2
  48. package/dist/{chunk-M7MTH5NR.js → chunk-IYAOX36F.js} +2 -2
  49. package/dist/{chunk-YVVCVR2L.js → chunk-J7VT2CRB.js} +2 -2
  50. package/dist/{chunk-4333ETTV.js → chunk-JELJLXEE.js} +2 -2
  51. package/dist/{chunk-LBMJEAEW.js → chunk-JERWGHQT.js} +2 -2
  52. package/dist/chunk-JJJCO4QC.js +945 -0
  53. package/dist/{chunk-6E7UTQY7.js → chunk-JZNLMHWY.js} +2 -2
  54. package/dist/{chunk-R4FQGQ4X.js → chunk-K42M2KWT.js} +2 -2
  55. package/dist/{chunk-H7UKLTWJ.js → chunk-KLVJABXA.js} +2 -2
  56. package/dist/chunk-KP4KBDVF.js +3 -0
  57. package/dist/{chunk-RV2FQIX3.js → chunk-LMFVTUW2.js} +2 -2
  58. package/dist/chunk-LRTP3DKL.js +3 -0
  59. package/dist/{chunk-U6WNH5GC.js → chunk-MGBJHRFB.js} +2 -2
  60. package/dist/{chunk-QDV6RDCP.js → chunk-MLGTCX56.js} +2 -2
  61. package/dist/{chunk-54HA4ZXH.js → chunk-N3SE646F.js} +2 -2
  62. package/dist/{chunk-KP6XRY5Z.js → chunk-NBRUH7OE.js} +2 -2
  63. package/dist/{chunk-M7AIS73L.js → chunk-NN4ZIRPK.js} +2 -2
  64. package/dist/{chunk-I5RJM53C.js → chunk-NQLSSVOB.js} +2 -2
  65. package/dist/{chunk-4SALD7RU.js → chunk-OBKDTVZ3.js} +2 -2
  66. package/dist/{chunk-GBQ5NYPR.js → chunk-OHWZKLVA.js} +6 -6
  67. package/dist/{chunk-6NSFJYRC.js → chunk-OP3MTFJR.js} +2 -2
  68. package/dist/{chunk-EOOJGLDU.js → chunk-OQ2A4G2G.js} +2 -2
  69. package/dist/{chunk-DLWR3NUU.js → chunk-P6HBYNBE.js} +2 -2
  70. package/dist/{chunk-QVWS2VWZ.js → chunk-PC44K7RF.js} +2 -2
  71. package/dist/{chunk-A2EZV2UM.js → chunk-QBYYWGAT.js} +2 -2
  72. package/dist/{chunk-QRGV2F7L.js → chunk-QHKUY4FW.js} +2 -2
  73. package/dist/chunk-QHRL4LKM.js +2 -0
  74. package/dist/{chunk-I5AWSI2G.js → chunk-QQWOFXNW.js} +2 -2
  75. package/dist/{chunk-WQTAC523.js → chunk-RBFFD4V2.js} +2 -2
  76. package/dist/{chunk-SOAT6NLA.js → chunk-RJHCPSZ7.js} +2 -2
  77. package/dist/{chunk-VGRICIQI.js → chunk-RWRLUZ6U.js} +2 -2
  78. package/dist/{chunk-4T3LTWUS.js → chunk-S2GP3CU3.js} +2 -2
  79. package/dist/{chunk-HEXVUYFQ.js → chunk-SHKZ7OVJ.js} +2 -2
  80. package/dist/{chunk-NSS46APD.js → chunk-TFUU5MQQ.js} +2 -2
  81. package/dist/{chunk-IUFDSKGG.js → chunk-TYQ76QHQ.js} +2 -2
  82. package/dist/{chunk-NRCXJDHL.js → chunk-U5CNPPTZ.js} +2 -2
  83. package/dist/{chunk-MITTUCEH.js → chunk-UQK5CRUK.js} +2 -2
  84. package/dist/{chunk-XLTP42QA.js → chunk-UUJBLG6J.js} +2 -2
  85. package/dist/chunk-UXP636P5.js +144 -0
  86. package/dist/{chunk-64RFXJT5.js → chunk-VEVBIAOJ.js} +6 -6
  87. package/dist/chunk-VKRQDBW5.js +9 -0
  88. package/dist/{chunk-C7NIYIQ4.js → chunk-VOQFGC2W.js} +4 -4
  89. package/dist/{chunk-DZ74OMG6.js → chunk-VP542C25.js} +2 -2
  90. package/dist/{chunk-Q3AFUTGB.js → chunk-WMXRRBII.js} +2 -2
  91. package/dist/{chunk-ZGZUZ7XE.js → chunk-WXAAURU7.js} +2 -2
  92. package/dist/chunk-X3NLZHPA.js +20 -0
  93. package/dist/{chunk-WER3B7MI.js → chunk-XF3KLXN3.js} +2 -2
  94. package/dist/{chunk-NH5ALKPW.js → chunk-XVJ3V7LM.js} +2 -2
  95. package/dist/{chunk-4XTA5OMB.js → chunk-YGQN3XGZ.js} +2 -2
  96. package/dist/{chunk-CFMXJPHH.js → chunk-YHXBD52M.js} +2 -2
  97. package/dist/{chunk-7B3UPBVA.js → chunk-YLVE3SXZ.js} +2 -2
  98. package/dist/{chunk-YIJ7ZAA4.js → chunk-YTUD45PU.js} +2 -2
  99. package/dist/{chunk-VTKGCT3V.js → chunk-YWB2EBNB.js} +2 -2
  100. package/dist/{chunk-UKZBVX4U.js → chunk-Z2LHPIOM.js} +2 -2
  101. package/dist/chunk-Z5QQPJ3U.js +30 -0
  102. package/dist/{chunk-NZL2DBT7.js → chunk-ZLJLE6LK.js} +2 -2
  103. package/dist/{chunk-XYADIZHU.js → chunk-ZTTISZ7J.js} +2 -2
  104. package/dist/cli.js +3 -3
  105. package/dist/command-descriptors-SJDZ7QGR.js +617 -0
  106. package/dist/{config-types-D20KuvvZ.d.ts → config-types-BWQ5xPGI.d.ts} +4 -0
  107. package/dist/{db-G_II8yXU.d.ts → db-B0r1o7Vt.d.ts} +18 -1
  108. package/dist/direct-navigation-HTKOZEOM.js +3 -0
  109. package/dist/{health-oblXYgkF.d.ts → health-CFnlCiTz.d.ts} +1 -1
  110. package/dist/index.d.ts +2 -2
  111. package/dist/index.js +1 -1
  112. package/dist/postinstall.js +1 -1
  113. package/dist/queries/affected.d.ts +2 -2
  114. package/dist/queries/affected.js +1 -1
  115. package/dist/queries/architecture.d.ts +2 -2
  116. package/dist/queries/architecture.js +1 -1
  117. package/dist/queries/bottlenecks.d.ts +2 -2
  118. package/dist/queries/bottlenecks.js +1 -1
  119. package/dist/queries/by-kind.d.ts +2 -2
  120. package/dist/queries/by-kind.js +1 -1
  121. package/dist/queries/call-graph.d.ts +2 -2
  122. package/dist/queries/call-graph.js +1 -1
  123. package/dist/queries/change-surface.d.ts +2 -2
  124. package/dist/queries/change-surface.js +1 -1
  125. package/dist/queries/cleanup-plan.d.ts +2 -2
  126. package/dist/queries/cleanup-plan.js +1 -1
  127. package/dist/queries/co-change.d.ts +2 -2
  128. package/dist/queries/co-change.js +1 -1
  129. package/dist/queries/code.d.ts +2 -2
  130. package/dist/queries/code.js +1 -1
  131. package/dist/queries/complexity-hotspots.d.ts +2 -2
  132. package/dist/queries/complexity-hotspots.js +1 -1
  133. package/dist/queries/complexity.d.ts +2 -2
  134. package/dist/queries/complexity.js +1 -1
  135. package/dist/queries/convergence.d.ts +2 -2
  136. package/dist/queries/convergence.js +1 -1
  137. package/dist/queries/coupling.d.ts +2 -2
  138. package/dist/queries/coupling.js +1 -1
  139. package/dist/queries/cycles.d.ts +2 -2
  140. package/dist/queries/cycles.js +1 -1
  141. package/dist/queries/dataflow.d.ts +2 -2
  142. package/dist/queries/dataflow.js +1 -1
  143. package/dist/queries/dead.d.ts +2 -2
  144. package/dist/queries/dead.js +1 -1
  145. package/dist/queries/decorative-checkers.d.ts +3 -3
  146. package/dist/queries/decorative-checkers.js +1 -1
  147. package/dist/queries/deep-chains.d.ts +2 -2
  148. package/dist/queries/deep-chains.js +1 -1
  149. package/dist/queries/deps.d.ts +2 -2
  150. package/dist/queries/deps.js +1 -1
  151. package/dist/queries/diff-gate.d.ts +30 -2
  152. package/dist/queries/diff-gate.js +1 -1
  153. package/dist/queries/diff-impact.d.ts +2 -2
  154. package/dist/queries/diff-impact.js +1 -1
  155. package/dist/queries/doc-drift.d.ts +2 -2
  156. package/dist/queries/doc-drift.js +1 -1
  157. package/dist/queries/drift.d.ts +2 -2
  158. package/dist/queries/drift.js +1 -1
  159. package/dist/queries/duplicate-bodies.d.ts +2 -2
  160. package/dist/queries/duplicate-bodies.js +1 -1
  161. package/dist/queries/extract-candidates.d.ts +2 -2
  162. package/dist/queries/extract-candidates.js +1 -1
  163. package/dist/queries/fan.d.ts +2 -2
  164. package/dist/queries/fan.js +1 -1
  165. package/dist/queries/files.d.ts +2 -2
  166. package/dist/queries/health.d.ts +3 -3
  167. package/dist/queries/health.js +1 -1
  168. package/dist/queries/hierarchy.d.ts +2 -2
  169. package/dist/queries/hierarchy.js +1 -1
  170. package/dist/queries/hotspots.d.ts +2 -2
  171. package/dist/queries/hotspots.js +1 -1
  172. package/dist/queries/imports.d.ts +2 -2
  173. package/dist/queries/imports.js +1 -1
  174. package/dist/queries/incomplete-migration.d.ts +2 -2
  175. package/dist/queries/incomplete-migration.js +1 -1
  176. package/dist/queries/index.d.ts +17 -3
  177. package/dist/queries/index.js +1 -1
  178. package/dist/queries/isolated.d.ts +2 -2
  179. package/dist/queries/isolated.js +1 -1
  180. package/dist/queries/locality-candidates.d.ts +2 -2
  181. package/dist/queries/locality-candidates.js +1 -1
  182. package/dist/queries/members.d.ts +2 -2
  183. package/dist/queries/members.js +1 -1
  184. package/dist/queries/methods.d.ts +2 -2
  185. package/dist/queries/methods.js +1 -1
  186. package/dist/queries/not-implemented.d.ts +3 -3
  187. package/dist/queries/not-implemented.js +1 -1
  188. package/dist/queries/outline.d.ts +2 -2
  189. package/dist/queries/outline.js +1 -1
  190. package/dist/queries/passthrough-candidates.d.ts +2 -2
  191. package/dist/queries/passthrough-candidates.js +1 -1
  192. package/dist/queries/plan-context.d.ts +2 -2
  193. package/dist/queries/plan-context.js +1 -1
  194. package/dist/queries/react-component-duplicates.d.ts +2 -2
  195. package/dist/queries/react-component-duplicates.js +1 -1
  196. package/dist/queries/react-hook-candidates.d.ts +2 -2
  197. package/dist/queries/react-hook-candidates.js +1 -1
  198. package/dist/queries/react-large-component-pressure.d.ts +2 -2
  199. package/dist/queries/react-large-component-pressure.js +1 -1
  200. package/dist/queries/recent-duplicates.d.ts +2 -2
  201. package/dist/queries/recent-duplicates.js +1 -1
  202. package/dist/queries/redundant-reexports.d.ts +2 -2
  203. package/dist/queries/redundant-reexports.js +1 -1
  204. package/dist/queries/refs.d.ts +2 -2
  205. package/dist/queries/refs.js +1 -1
  206. package/dist/queries/self-audit.d.ts +2 -2
  207. package/dist/queries/self-audit.js +1 -1
  208. package/dist/queries/similar-chains.d.ts +2 -2
  209. package/dist/queries/similar-chains.js +1 -1
  210. package/dist/queries/similar-files.d.ts +2 -2
  211. package/dist/queries/similar-files.js +1 -1
  212. package/dist/queries/similar-signatures.d.ts +2 -2
  213. package/dist/queries/similar-signatures.js +1 -1
  214. package/dist/queries/similar.d.ts +2 -2
  215. package/dist/queries/similar.js +1 -1
  216. package/dist/queries/slice.d.ts +2 -2
  217. package/dist/queries/slice.js +1 -1
  218. package/dist/queries/stale-abstractions.d.ts +2 -2
  219. package/dist/queries/stale-abstractions.js +1 -1
  220. package/dist/queries/stats.d.ts +2 -2
  221. package/dist/queries/stats.js +1 -1
  222. package/dist/queries/surface.d.ts +2 -2
  223. package/dist/queries/surface.js +1 -1
  224. package/dist/queries/symbols.d.ts +2 -2
  225. package/dist/queries/symbols.js +1 -1
  226. package/dist/queries/system.d.ts +2 -2
  227. package/dist/queries/system.js +1 -1
  228. package/dist/queries/test-quality.d.ts +2 -2
  229. package/dist/queries/test-quality.js +1 -1
  230. package/dist/queries/trace.d.ts +2 -2
  231. package/dist/queries/trace.js +1 -1
  232. package/dist/queries/twin-ab.d.ts +3 -3
  233. package/dist/queries/twin-ab.js +1 -1
  234. package/dist/queries/twin-drift.d.ts +2 -2
  235. package/dist/queries/twin-drift.js +1 -1
  236. package/dist/queries/unused-imports.d.ts +2 -2
  237. package/dist/queries/unused-imports.js +1 -1
  238. package/dist/queries/unused-params.d.ts +2 -2
  239. package/dist/queries/unused-params.js +1 -1
  240. package/dist/queries/vue-component-duplicates.d.ts +2 -2
  241. package/dist/queries/vue-component-duplicates.js +1 -1
  242. package/dist/queries/vue-composable-candidates.d.ts +2 -2
  243. package/dist/queries/vue-composable-candidates.js +1 -1
  244. package/dist/queries/vue-large-view-pressure.d.ts +2 -2
  245. package/dist/queries/vue-large-view-pressure.js +1 -1
  246. package/dist/queries/wrapper-candidates.d.ts +2 -2
  247. package/dist/queries/wrapper-candidates.js +1 -1
  248. package/dist/reindex-worker.js +23 -24
  249. package/dist/reindex.d.ts +10 -4
  250. package/dist/reindex.js +33 -38
  251. package/dist/runtime.d.ts +167 -11
  252. package/dist/runtime.js +3 -2
  253. package/dist/rust-semantic-session-server.js +1 -1
  254. package/dist/rust-semantic-session-worker.js +1 -1
  255. package/dist/rust-semantic-worker.js +1 -1
  256. package/dist/{scip-cli-kRpaexVJ.d.ts → scip-cli-DCvnlZCu.d.ts} +5 -1
  257. package/dist/watch-server.js +5 -5
  258. package/docs/AGENT_GUIDE.md +1 -1
  259. package/docs/AI_FAILURE_MODES.md +18 -18
  260. package/docs/API_EVOLUTION.md +71 -0
  261. package/docs/CLI_JSON_OUTPUT.md +83 -0
  262. package/docs/COMMAND_REFERENCE.md +10 -8
  263. package/docs/COMMITTED_RECORD_COMPATIBILITY.md +117 -0
  264. package/docs/CONFIGURATION_WRITE_SAFETY.md +130 -0
  265. package/docs/DETECTOR_GUIDE.md +47 -47
  266. package/docs/DURABILITY.md +103 -0
  267. package/docs/INDEX_GENERATIONS.md +121 -0
  268. package/docs/LOCK_PROTOCOL.md +133 -0
  269. package/docs/MAILBOX_LIFECYCLE.md +197 -0
  270. package/docs/REINDEX_METADATA_COMPATIBILITY.md +84 -0
  271. package/docs/RUST_DURABLE_SESSION_PROTOCOL.md +126 -0
  272. package/docs/TELEMETRY_RETENTION.md +72 -0
  273. package/docs/TIME_SEMANTICS.md +77 -0
  274. package/docs/WATCH_REFRESH_REQUESTS.md +110 -0
  275. package/docs/WINDOWS_SIDECAR_RELEASE.md +298 -0
  276. package/docs/analyzer-validation-ledger.md +24 -23
  277. package/docs/schemas/cli-json-envelope.schema.json +53 -0
  278. package/docs/schemas/npm-release-state.schema.json +146 -0
  279. package/docs/schemas/outcome-event-record.schema.json +39 -0
  280. package/docs/schemas/project-config.schema.json +247 -0
  281. package/docs/schemas/suppression-record.schema.json +31 -0
  282. package/docs/schemas/windows-sidecar-provenance.schema.json +137 -0
  283. package/package.json +15 -5
  284. package/scripts/build-scip-windows.mjs +180 -61
  285. package/scripts/scip-windows-provenance.mjs +364 -0
  286. package/scripts/verify-scip-windows.mjs +29 -0
  287. package/skills/_shared/SKILL.md +91 -242
  288. package/skills/_shared/agents/openai.yaml +1 -1
  289. package/skills/_shared/references/agent-contract-catalog.md +105 -0
  290. package/skills/_shared/references/command-catalog.md +118 -0
  291. package/skills/_shared/references/detector-precision-and-diffgate.md +59 -0
  292. package/skills/_shared/references/evidence-and-dead-code.md +25 -0
  293. package/skills/scip-audit/SKILL.md +76 -0
  294. package/skills/scip-audit/agents/openai.yaml +4 -0
  295. package/skills/scip-audit/references/claims.md +98 -0
  296. package/skills/scip-audit/references/cleanup.md +101 -0
  297. package/skills/scip-audit/references/directory.md +222 -0
  298. package/skills/scip-audit/references/frontend.md +130 -0
  299. package/skills/scip-audit/references/integrity.md +154 -0
  300. package/skills/scip-audit/references/maintainability.md +162 -0
  301. package/skills/scip-audit/references/twin-drift.md +104 -0
  302. package/skills/scip-diagnose/SKILL.md +52 -0
  303. package/skills/scip-diagnose/agents/openai.yaml +4 -0
  304. package/skills/scip-diagnose/references/debug.md +117 -0
  305. package/skills/{scip-probe-reachability/SKILL.md → scip-diagnose/references/probe-reachability.md} +12 -27
  306. package/skills/scip-diagnose/references/root-cause.md +145 -0
  307. package/skills/scip-diagnose/references/triage.md +119 -0
  308. package/skills/scip-explore/SKILL.md +53 -84
  309. package/skills/scip-explore/agents/openai.yaml +2 -2
  310. package/skills/scip-explore/references/diagrams.md +40 -0
  311. package/skills/scip-explore/references/language-playbook.md +49 -0
  312. package/skills/scip-improve/SKILL.md +56 -0
  313. package/skills/scip-improve/agents/openai.yaml +4 -0
  314. package/skills/scip-improve/references/cleanup-batches.md +53 -0
  315. package/skills/scip-improve/references/directory-moves.md +53 -0
  316. package/skills/scip-improve/references/doc-reconcile.md +30 -0
  317. package/skills/scip-improve/references/frontend-extraction.md +39 -0
  318. package/skills/scip-improve/references/maintainability-mechanism.md +43 -0
  319. package/skills/scip-improve/references/twin-drift.md +35 -0
  320. package/skills/scip-plan/SKILL.md +68 -0
  321. package/skills/scip-plan/agents/openai.yaml +4 -0
  322. package/skills/scip-plan/references/api-impact.md +19 -0
  323. package/skills/scip-plan/references/conductor.md +41 -0
  324. package/skills/scip-plan/references/high-assurance.md +43 -0
  325. package/skills/scip-plan/references/hyper-optimization.md +50 -0
  326. package/skills/scip-plan/references/tla-model.md +88 -0
  327. package/skills/scip-query/SKILL.md +52 -97
  328. package/skills/scip-query/agents/openai.yaml +2 -2
  329. package/skills/scip-setup/SKILL.md +65 -176
  330. package/skills/scip-setup/agents/openai.yaml +3 -3
  331. package/skills/scip-setup/references/bootstrap-workflow.md +120 -0
  332. package/skills/scip-setup/references/language-verification.md +61 -0
  333. package/skills/scip-setup/references/lifecycle-commands.md +119 -0
  334. package/skills/scip-setup/references/per-repo-triage.md +24 -0
  335. package/skills/scip-verify/SKILL.md +123 -70
  336. package/skills/scip-verify/agents/openai.yaml +2 -2
  337. package/skills/scip-verify/references/calibrate-detectors.md +170 -0
  338. package/dist/chunk-2CTX5CMX.js +0 -4
  339. package/dist/chunk-2Y373BDD.js +0 -2
  340. package/dist/chunk-C2QSK7E7.js +0 -2
  341. package/dist/chunk-D4U5Q3FT.js +0 -7
  342. package/dist/chunk-K2ERX4UT.js +0 -3
  343. package/dist/chunk-KHE7J5ZN.js +0 -3
  344. package/dist/chunk-L7SPDE73.js +0 -84
  345. package/dist/chunk-LHMNRHGV.js +0 -3
  346. package/dist/chunk-LM72NQ7T.js +0 -3
  347. package/dist/chunk-MSWVMDAH.js +0 -122
  348. package/dist/chunk-NH7WNNQC.js +0 -20
  349. package/dist/chunk-OMPZHGHO.js +0 -2
  350. package/dist/chunk-SVLTAG5O.js +0 -927
  351. package/dist/chunk-U7DSEKOM.js +0 -30
  352. package/dist/chunk-V27BEQJN.js +0 -7
  353. package/dist/chunk-VMNZB6WI.js +0 -4
  354. package/dist/chunk-XBN5VO53.js +0 -2
  355. package/dist/chunk-ZAIILQNP.js +0 -5
  356. package/dist/command-descriptors-MFU4BCJ7.js +0 -612
  357. package/dist/direct-navigation-MRMQFIRB.js +0 -3
  358. package/skills/scip-api-impact/SKILL.md +0 -139
  359. package/skills/scip-api-impact/agents/openai.yaml +0 -4
  360. package/skills/scip-calibrate/SKILL.md +0 -131
  361. package/skills/scip-calibrate/agents/openai.yaml +0 -4
  362. package/skills/scip-claim-audit/SKILL.md +0 -106
  363. package/skills/scip-claim-audit/agents/openai.yaml +0 -4
  364. package/skills/scip-cleanup-audit/SKILL.md +0 -126
  365. package/skills/scip-cleanup-audit/agents/openai.yaml +0 -4
  366. package/skills/scip-cleanup-improve/SKILL.md +0 -84
  367. package/skills/scip-cleanup-improve/agents/openai.yaml +0 -4
  368. package/skills/scip-concrete-plan/SKILL.md +0 -262
  369. package/skills/scip-concrete-plan/agents/openai.yaml +0 -4
  370. package/skills/scip-conductor/SKILL.md +0 -133
  371. package/skills/scip-conductor/agents/openai.yaml +0 -4
  372. package/skills/scip-debug/SKILL.md +0 -130
  373. package/skills/scip-debug/agents/openai.yaml +0 -4
  374. package/skills/scip-diagram/SKILL.md +0 -110
  375. package/skills/scip-diagram/agents/openai.yaml +0 -4
  376. package/skills/scip-directory-architecture/SKILL.md +0 -254
  377. package/skills/scip-directory-architecture/agents/openai.yaml +0 -4
  378. package/skills/scip-doc-reconcile/SKILL.md +0 -89
  379. package/skills/scip-doc-reconcile/agents/openai.yaml +0 -4
  380. package/skills/scip-hyper-optimization/SKILL.md +0 -156
  381. package/skills/scip-hyper-optimization/agents/openai.yaml +0 -4
  382. package/skills/scip-integrity-audit/SKILL.md +0 -152
  383. package/skills/scip-integrity-audit/agents/openai.yaml +0 -4
  384. package/skills/scip-language-playbook/SKILL.md +0 -106
  385. package/skills/scip-language-playbook/agents/openai.yaml +0 -4
  386. package/skills/scip-maintainability/SKILL.md +0 -158
  387. package/skills/scip-maintainability/agents/openai.yaml +0 -4
  388. package/skills/scip-probe-reachability/agents/openai.yaml +0 -4
  389. package/skills/scip-react-maintainability/SKILL.md +0 -101
  390. package/skills/scip-react-maintainability/agents/openai.yaml +0 -4
  391. package/skills/scip-root-cause/SKILL.md +0 -150
  392. package/skills/scip-root-cause/agents/openai.yaml +0 -4
  393. package/skills/scip-tla-model-system/SKILL.md +0 -148
  394. package/skills/scip-tla-model-system/agents/openai.yaml +0 -4
  395. package/skills/scip-triage-issue/SKILL.md +0 -126
  396. package/skills/scip-triage-issue/agents/openai.yaml +0 -4
  397. package/skills/scip-twin-drift/SKILL.md +0 -107
  398. package/skills/scip-twin-drift/agents/openai.yaml +0 -4
  399. package/skills/scip-vue-maintainability/SKILL.md +0 -107
  400. package/skills/scip-vue-maintainability/agents/openai.yaml +0 -4
@@ -0,0 +1,222 @@
1
+ # Directory architecture: boundaries, locality, and safe moves
2
+
3
+ Evaluate, design, reorganize, or migrate folder structure, ownership
4
+ boundaries, locality config, messy repos, AI-generated layout, or safe
5
+ file-move slices.
6
+
7
+ Command shortlist: `system <scope>`, `locality-candidates --json --full`,
8
+ `similar-files --full --json`, `cycles`, `architecture --json`, `drift
9
+ --architecture`, `co-change --json --full`, `health --write-baseline`,
10
+ `diff-gate`, `config-validate --json`.
11
+
12
+ ## Definitions
13
+
14
+ - **Ownership boundary** — a folder, package, module, or convention that
15
+ groups code around one stable responsibility.
16
+ - **Dependency edge** — points from code that relies on something to the
17
+ code it relies on; for imports, A → B means A imports B.
18
+ - **Forbidden edge** — an actual cross-boundary dependency rejected by an
19
+ explicit project rule. Directory distance or an unusual import alone does
20
+ not make an edge forbidden.
21
+ - **Layer** — a responsibility ordered by dependency direction, such as
22
+ presentation depending on application.
23
+ - **Subsystem** — a responsibility that owns an end-to-end capability, such
24
+ as authentication or rendering.
25
+ - **Package** — a publication or build unit. **Service** — an independently
26
+ running unit. Do not force the layer, subsystem, package, and service
27
+ concepts all into one single layer hierarchy.
28
+ - **Reciprocal dependency** — dependency traffic in both directions between
29
+ two boundaries; it is a review signal because the boundaries exert mutual
30
+ change pressure, not proof that either import is wrong.
31
+ - **Architecture ratchet** — an enforcement rule that records existing
32
+ violations while preventing new ones, allowing a large codebase to improve
33
+ without a speculative rewrite.
34
+ - **Target structure** — a proposed future layout that expresses an
35
+ ownership model, not merely a prettier tree.
36
+ - **Migration slice** — the smallest set of file moves and import updates
37
+ that can be verified independently.
38
+ - **Slop codebase** — one whose files are arranged by accident, convenience,
39
+ or recent edits rather than stable ownership rules.
40
+
41
+ ## Operating principles
42
+
43
+ Start with evidence, not taste. Separate review from migration — do not move
44
+ files unless asked. Preserve broad boundaries when evidence shows they are
45
+ intentional; do not reward a generic "shared" boundary/directory unless the
46
+ shared concept has a name, owner, and cross-boundary consumers. For messy
47
+ repos, produce a discovery map and decisions instead of pretending the
48
+ target structure is obvious. Prefer small verified moves over large
49
+ speculative reorganizations. Configure descriptive boundaries before closing
50
+ (declaring) dependency rules. Treat graph shape (dependency structure) as
51
+ evidence about responsibilities, never as a substitute for identifying them.
52
+
53
+ ## Step 1 — Bound the question
54
+
55
+ Classify the request as review, target structure, locality config,
56
+ migration plan, or implementation.
57
+
58
+ **Complete when:** scope and deliverable are explicit.
59
+
60
+ ## Step 2 — Inventory evidence
61
+
62
+ Run `stats`, `system <scope>`, `files <pattern>`, `surface <scope>`, `deps
63
+ <file>`, `rdeps <file>`, `change-surface <file>`, `plan-context
64
+ <file-or-symbol>`, `locality-candidates --json --full`, `cycles`,
65
+ `architecture --json`, `drift --architecture`, `co-change`, `similar-files
66
+ --min-similarity 0.6 --min-deps 3`, `similar-chains --min-similarity 0.5`,
67
+ `recent-duplicates`, and `drift`.
68
+
69
+ - `system <scope>` returns module file paths, exported symbols with line
70
+ ranges, internal dependencies, and reverse dependencies.
71
+ - `locality-candidates --json --full` returns directory-locality and
72
+ ancestry candidates from consumer ownership — symbols, current homes,
73
+ consumer locality, and suggested homes.
74
+ - `similar-files --full --json` returns file pairs with similarity scores
75
+ and shared symbols (overlapping dependency profiles).
76
+ - `cycles` detects circular dependency chains between files.
77
+ - `architecture --json` measures configured boundaries, actual dependency
78
+ traffic, forbidden edges, reciprocal pairs, and boundary cycles.
79
+ - `drift --architecture` reviews direct drift findings together with
80
+ boundary coverage and architecture signals.
81
+ - `co-change --json --full` inventories hidden file-level coupling from git
82
+ history — files that change together without a dependency edge.
83
+
84
+ Also read durable project guidance that names architecture, modules,
85
+ ownership, routes, workflows, contracts, or domains.
86
+
87
+ **Complete when:** each folder under review has evidence for exports, entry
88
+ points, consumers, tests, co-change partners, and claimed ownership rules.
89
+
90
+ ## Step 3 — Classify boundary maturity
91
+
92
+ Classify each boundary candidate as:
93
+
94
+ - **Mature** — repeated, documented, and enforced by imports, tests,
95
+ routes, packages, standards, or review history.
96
+ - **Emerging** — meaningful and partly repeated but not consistent enough
97
+ to configure.
98
+ - **Accidental** — a convenience bucket, legacy pile, generated artifact,
99
+ recent edit cluster, or mixed reasons to change.
100
+
101
+ **Complete when:** mature, emerging, and accidental boundaries are
102
+ separated.
103
+
104
+ ## Step 4 — Build a descriptive architecture model
105
+
106
+ For a large existing codebase, before calling anything a "layer," inventory:
107
+ workspace packages/public exports; applications/services/deployable entry
108
+ points; domain capabilities/end-to-end subsystems;
109
+ persistence/network/rendering/compiler/other technical responsibilities;
110
+ tests/routes/contracts/ownership or architecture documentation; and
111
+ dependency/co-change evidence showing which files already move as a unit.
112
+
113
+ Add mature boundary path patterns to `.scipquery.json` under
114
+ `architecture.boundaries` WITHOUT `allowedDependencies` rows first:
115
+
116
+ ```json
117
+ {
118
+ "architecture": {
119
+ "boundaries": [
120
+ { "name": "domain", "paths": ["src/domain/**"] },
121
+ { "name": "runtime", "paths": ["src/runtime/**"] }
122
+ ]
123
+ }
124
+ }
125
+ ```
126
+
127
+ After adding boundaries, run `scip-query config-validate --json` then
128
+ `scip-query architecture --json` to check the new boundary configuration.
129
+ Use unmapped and ambiguous files to repair boundary membership, and use
130
+ actual boundary edges, reciprocal pairs, and strongly connected groups to
131
+ test whether boundary names describe real separation.
132
+
133
+ **Complete when:** every configured boundary has a stated responsibility and
134
+ the mapping gaps are understood.
135
+
136
+ ## Step 5 — Declare only supported dependency rules
137
+
138
+ An `allowedDependencies` row is closed: an outgoing target omitted from a
139
+ present row is forbidden, but a missing row makes no dependency claim at
140
+ all. Example closed config:
141
+
142
+ ```json
143
+ {
144
+ "architecture": {
145
+ "boundaries": [ ... ],
146
+ "allowedDependencies": {
147
+ "domain": [],
148
+ "runtime": ["domain"]
149
+ },
150
+ "requireAcyclic": true
151
+ }
152
+ }
153
+ ```
154
+
155
+ For each closed `allowedDependencies` row, record the evidence for its
156
+ intended direction. Do not copy the current dependency graph into the
157
+ allow-list merely to obtain zero findings. Leave emerging or disputed
158
+ dependency rules undeclared rather than closing the row prematurely.
159
+
160
+ **Complete when:** every forbidden edge is understood as either
161
+ implementation debt, a false boundary, or a policy mistake.
162
+
163
+ ## Step 6 — Propose structure or decisions
164
+
165
+ Structure a directory architecture review/proposal using this exact section
166
+ order:
167
+
168
+ 1. Scope
169
+ 2. Current Structure Map
170
+ 3. Boundary Maturity
171
+ 4. Descriptive Architecture Model
172
+ 5. Dependency Rules
173
+ 6. Forbidden-Edge Ledger
174
+ 7. Reciprocal and Cycle Review
175
+ 8. Target Structure
176
+ 9. Move Ledger
177
+ 10. Locality Config
178
+ 11. No-Move Decisions
179
+ 12. Deferred Decisions
180
+ 13. Migration Order
181
+
182
+ List a decision as No-Move when broad consumers, route/package/contract
183
+ surfaces, infrastructure roles, generic shared risk, or weak evidence make a
184
+ move harmful.
185
+
186
+ **Complete when:** every proposed move has a reason and a verification path.
187
+
188
+ ## Step 7 — Ratchet, then implement one slice (when asked)
189
+
190
+ For a large repository with existing violations, review the direct findings
191
+ with `scip-query drift --architecture` and write the shared health baseline
192
+ with `scip-query health --write-baseline`. The baseline records stable
193
+ architecture identities by boundary pair, not by whichever example file
194
+ happens to sort first.
195
+
196
+ The default `scip-query diff-gate` architecture check compares only
197
+ architecture identities and does not run every health detector; `diff-gate
198
+ --baseline` is the opt-in full health ratchet and does not duplicate
199
+ architecture findings. Commit `.scipquery-baseline.json` together with
200
+ `.scipquery.json`. A missing baseline causes the architecture gate to report
201
+ that enforcement is not enabled — it does NOT silently treat the current
202
+ dependency graph as accepted.
203
+
204
+ Prefer inspecting the least-broad edge inside a boundary cycle first, then
205
+ determine whether the repair is a move, dependency inversion, named shared
206
+ contract, boundary merge, or policy correction.
207
+
208
+ Before editing to implement a migration slice, state the files to move, the
209
+ imports/exports/tests/docs to update, the expected verification, and the
210
+ rollback risk.
211
+
212
+ After moving the smallest high-confidence slice, run `scip-query
213
+ incomplete-migration`, `scip-query recent-duplicates`, and `scip-query
214
+ co-change <moved-file-or-config>`. Also run the project's tests or typecheck
215
+ for the affected workspace.
216
+
217
+ If `.scipquery.json` locality changed, run `scip-query config-validate`,
218
+ `scip-query locality-candidates --json --full`, `scip-query architecture
219
+ --json`, `scip-query drift --architecture`, and `scip-query diff-gate`.
220
+
221
+ Then invoke `scip-verify`; the implementation is complete only when imports,
222
+ tests, locality signals, and verification are checked.
@@ -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.