scip-query 0.22.0 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +500 -0
- package/README.md +13 -0
- package/dist/augment-vue-worker.js +1 -1
- package/dist/by-kind-H3P6BR5G.js +2 -0
- package/dist/call-graph-VTG2CUOQ.js +2 -0
- package/dist/call-graph-evidence-BociKRpF.d.ts +19 -0
- package/dist/chunk-2BMSSRBH.js +2 -0
- package/dist/{chunk-TAYD3AE7.js → chunk-2GJSD5GY.js} +2 -2
- package/dist/{chunk-TUQIPUDS.js → chunk-2M2LSIMY.js} +3 -3
- package/dist/{chunk-GIQ6CSL4.js → chunk-2N6WBNDC.js} +2 -2
- package/dist/{chunk-JHH5SCZ3.js → chunk-2OOY75BW.js} +2 -2
- package/dist/{chunk-EELPBR7E.js → chunk-2USA3S3P.js} +2 -2
- package/dist/chunk-2VAHDDLM.js +133 -0
- package/dist/chunk-2XWIUW5Z.js +455 -0
- package/dist/{chunk-57N6LN2A.js → chunk-3AF4TUFK.js} +2 -2
- package/dist/chunk-3D4BOXW6.js +20 -0
- package/dist/{chunk-FFJQZG6J.js → chunk-3LO4FST5.js} +2 -2
- package/dist/{chunk-HXOU4XNH.js → chunk-3WTY4LP2.js} +2 -2
- package/dist/{chunk-DPWKKNKI.js → chunk-3Z5AMSK6.js} +2 -2
- package/dist/{chunk-F24G5NBE.js → chunk-44IETFOU.js} +2 -2
- package/dist/chunk-4FR6GQIT.js +2 -0
- package/dist/chunk-4KBTHJLP.js +2 -0
- package/dist/chunk-5BIKR67W.js +2 -0
- package/dist/{chunk-DJAO2OZJ.js → chunk-5PROPLHI.js} +2 -2
- package/dist/chunk-5V7EPTII.js +2 -0
- package/dist/{chunk-VZ7NXSHV.js → chunk-62LPZCBQ.js} +2 -2
- package/dist/{chunk-LXQUF2RP.js → chunk-64O2JHQA.js} +2 -2
- package/dist/chunk-6D4F5VWG.js +10 -0
- package/dist/{chunk-NEIQPFBI.js → chunk-6ERFBC3X.js} +2 -2
- package/dist/{chunk-4HE7MVWD.js → chunk-6ILKOOGH.js} +2 -2
- package/dist/chunk-6MFXCMZC.js +2 -0
- package/dist/chunk-6O7FACKB.js +2 -0
- package/dist/{chunk-R6M456QG.js → chunk-6TS3KOXR.js} +2 -2
- package/dist/{chunk-7U2YQSDE.js → chunk-76QOU4PK.js} +2 -2
- package/dist/{chunk-25GWKRUZ.js → chunk-7DUI77BN.js} +2 -2
- package/dist/chunk-7F45LJKI.js +2 -0
- package/dist/{chunk-DEAB5TGT.js → chunk-7F7T6DCR.js} +2 -2
- package/dist/chunk-7H6VHWWJ.js +2 -0
- package/dist/chunk-7HXT6YLU.js +5 -0
- package/dist/{chunk-KZYID5KV.js → chunk-7R4V5ES6.js} +4 -4
- package/dist/chunk-7RIRIADH.js +7 -0
- package/dist/chunk-7ZLWLOGT.js +2 -0
- package/dist/{chunk-WHADK6OS.js → chunk-A4WEAK35.js} +2 -2
- package/dist/chunk-AADQLOQ4.js +38 -0
- package/dist/{chunk-XFMVKFSF.js → chunk-AN76MGUE.js} +2 -2
- package/dist/chunk-ANLNLY66.js +2 -0
- package/dist/chunk-ATXPTSEI.js +81 -0
- package/dist/{chunk-EELG7D3Q.js → chunk-AX7IDVFT.js} +2 -2
- package/dist/chunk-B3PYOSCX.js +2 -0
- package/dist/chunk-B7MPDEAK.js +3 -0
- package/dist/chunk-BBB5FBX4.js +2 -0
- package/dist/{chunk-Y2VM4CJC.js → chunk-BHKK5RJY.js} +2 -2
- package/dist/chunk-BJWFVAA5.js +2 -0
- package/dist/chunk-BKVWUP7Y.js +2 -0
- package/dist/{chunk-7XA3OM44.js → chunk-BKZYTLGE.js} +2 -2
- package/dist/chunk-BL6DCHQP.js +2 -0
- package/dist/chunk-BOW7SSQH.js +43 -0
- package/dist/{chunk-KQHJEU6V.js → chunk-C4RHHCKL.js} +2 -2
- package/dist/chunk-C7C6AKAT.js +117 -0
- package/dist/chunk-CD6M6LS2.js +16 -0
- package/dist/chunk-CFE6PSG6.js +2 -0
- package/dist/{chunk-GPGRZJ3R.js → chunk-CFNIGQMT.js} +2 -2
- package/dist/{chunk-K3XFWJI2.js → chunk-CKBUBRYD.js} +2 -2
- package/dist/chunk-CZW5MZ5B.js +2 -0
- package/dist/chunk-DBBZ63ZX.js +2 -0
- package/dist/chunk-DBN7DMJB.js +18 -0
- package/dist/{chunk-CKRWA452.js → chunk-DUULLZHZ.js} +2 -2
- package/dist/{chunk-6HRZQLOI.js → chunk-DV5Y5NOS.js} +2 -2
- package/dist/chunk-DZOIKCTM.js +3 -0
- package/dist/chunk-E4PKTOL3.js +2 -0
- package/dist/{chunk-GVOMSPGL.js → chunk-E65ELFKU.js} +2 -2
- package/dist/{chunk-VXJJTQYE.js → chunk-E7QR35ST.js} +2 -2
- package/dist/{chunk-2RE5OCHZ.js → chunk-EFSXAINW.js} +2 -2
- package/dist/{chunk-GY7CCCEZ.js → chunk-EHVEIEQN.js} +2 -2
- package/dist/{chunk-BVFYEEBH.js → chunk-EHYDXE3Z.js} +2 -2
- package/dist/{chunk-HISEUIL2.js → chunk-EP63Y6LD.js} +2 -2
- package/dist/chunk-EPX6NQN6.js +4 -0
- package/dist/chunk-ETC674NS.js +5 -0
- package/dist/{chunk-5H5WTJSD.js → chunk-F5GSBHC6.js} +2 -2
- package/dist/chunk-FH3DGXC6.js +2 -0
- package/dist/{chunk-2XCGSDIT.js → chunk-FI7VGOR4.js} +2 -2
- package/dist/chunk-FJF6VO2P.js +2 -0
- package/dist/{chunk-FELGD32K.js → chunk-FLMTCX5R.js} +2 -2
- package/dist/chunk-FVFDOIM3.js +2 -0
- package/dist/{chunk-AQ2PORIO.js → chunk-G2HU5WRN.js} +2 -2
- package/dist/{chunk-7YQOCABQ.js → chunk-G4ALYS4J.js} +2 -2
- package/dist/{chunk-SWK4XPUS.js → chunk-G56I7K4W.js} +2 -2
- package/dist/{chunk-JFQBRL3J.js → chunk-GC4DG2V5.js} +2 -2
- package/dist/chunk-GG45PK4S.js +4 -0
- package/dist/{chunk-XN22RGSR.js → chunk-GHNPACNP.js} +2 -2
- package/dist/{chunk-XU75YQN4.js → chunk-GINH3YQU.js} +2 -2
- package/dist/chunk-GTZZVLKJ.js +2 -0
- package/dist/chunk-GXXW5ZHH.js +2 -0
- package/dist/{chunk-RNKPYYYE.js → chunk-HAXXKRTD.js} +2 -2
- package/dist/chunk-HEZWBAZY.js +2 -0
- package/dist/chunk-HMEWLMML.js +2 -0
- package/dist/{chunk-2KVU55CW.js → chunk-HOBOVYPO.js} +2 -2
- package/dist/{chunk-2YC7YNKT.js → chunk-HRFQ6GW5.js} +2 -2
- package/dist/{chunk-RYOYJMGF.js → chunk-HX4X7KG3.js} +2 -2
- package/dist/{chunk-AZS7YPCB.js → chunk-HYT2R7LX.js} +2 -2
- package/dist/chunk-IKQVBVQL.js +40 -0
- package/dist/chunk-J6GLBBRK.js +4 -0
- package/dist/{chunk-TNG2FYS5.js → chunk-J7A4PWFX.js} +2 -2
- package/dist/chunk-JCSAZ35V.js +2 -0
- package/dist/{chunk-EWWY2ZFL.js → chunk-JDU2IV3A.js} +2 -2
- package/dist/{chunk-SB25YMEQ.js → chunk-JFMEXGFE.js} +2 -2
- package/dist/chunk-JFMI5SGB.js +4 -0
- package/dist/chunk-JJP37RGX.js +57 -0
- package/dist/chunk-JZ2A7LDM.js +5 -0
- package/dist/chunk-KNLQGXVH.js +80 -0
- package/dist/chunk-KVQCECPR.js +2 -0
- package/dist/{chunk-F24QUEQP.js → chunk-KXXORBZ2.js} +2 -2
- package/dist/{chunk-IKVNEGTW.js → chunk-L5KYH6U3.js} +2 -2
- package/dist/chunk-L6XHYJPZ.js +21 -0
- package/dist/chunk-L7KTFEAV.js +43 -0
- package/dist/{chunk-UAQ4T73O.js → chunk-LDXHR5EL.js} +2 -2
- package/dist/chunk-LEECKFCJ.js +2 -0
- package/dist/{chunk-LO5JSW2C.js → chunk-MHGDSBFX.js} +2 -2
- package/dist/{chunk-JUN5DOAK.js → chunk-MLQVVDG3.js} +2 -2
- package/dist/chunk-MOKUWRHO.js +3 -0
- package/dist/{chunk-44T4DUAA.js → chunk-MPYAPMNE.js} +2 -2
- package/dist/{chunk-ARVO6TTW.js → chunk-MV6SPXCR.js} +2 -2
- package/dist/{chunk-NRBNAECH.js → chunk-MWN53KRN.js} +2 -2
- package/dist/{chunk-TH6IC56G.js → chunk-MZPXPSUJ.js} +2 -2
- package/dist/{chunk-FBCVASUG.js → chunk-N55KIE46.js} +2 -2
- package/dist/{chunk-VMWUV6WB.js → chunk-NB4D3BNM.js} +2 -2
- package/dist/{chunk-JAT6C3VX.js → chunk-NGKBOT6G.js} +2 -2
- package/dist/{chunk-Q6T2CAJL.js → chunk-NJGKXKQF.js} +2 -2
- package/dist/chunk-NJQISBL4.js +8 -0
- package/dist/chunk-NJT3ZEKY.js +16 -0
- package/dist/{chunk-KFVSJX25.js → chunk-NKMKZP6A.js} +2 -2
- package/dist/chunk-NODFZ6ED.js +2 -0
- package/dist/{chunk-ERCYGVAM.js → chunk-NSM5IEVW.js} +2 -2
- package/dist/{chunk-YAGYMBEX.js → chunk-NTGUVNR2.js} +2 -2
- package/dist/{chunk-N7FP5H5U.js → chunk-NU3KFF2O.js} +8 -8
- package/dist/chunk-NWLVNU66.js +557 -0
- package/dist/{chunk-Q55NF3ZG.js → chunk-NYKZMCRC.js} +2 -2
- package/dist/{chunk-I6UTXNHU.js → chunk-O6BUXZEH.js} +2 -2
- package/dist/chunk-ODPDP7A4.js +3 -0
- package/dist/{chunk-ZAZGGSM3.js → chunk-OHIV323X.js} +2 -2
- package/dist/chunk-OIAPEKMT.js +3 -0
- package/dist/chunk-OIOC5EHF.js +3 -0
- package/dist/{chunk-YIHNPKWD.js → chunk-ONPPQM4G.js} +2 -2
- package/dist/{chunk-RHHCLWQ6.js → chunk-OUHEZBYI.js} +2 -2
- package/dist/{chunk-MSR2QRUE.js → chunk-OVGYW7UD.js} +2 -2
- package/dist/{chunk-OPSAW5DT.js → chunk-OYKU4B3Y.js} +2 -2
- package/dist/{chunk-5YRQIE2B.js → chunk-POBJ6FR2.js} +2 -2
- package/dist/{chunk-ZGW4HLPD.js → chunk-PSZPMMWN.js} +2 -2
- package/dist/chunk-PXTRBKRK.js +3 -0
- package/dist/{chunk-U2N2KE7A.js → chunk-Q5JRIHT3.js} +2 -2
- package/dist/{chunk-GRX7JOXQ.js → chunk-Q7ATHARX.js} +2 -2
- package/dist/{chunk-5ZMBRQFC.js → chunk-Q7CSKIDM.js} +2 -2
- package/dist/{chunk-HG722PO7.js → chunk-QBQE7ZJ5.js} +2 -2
- package/dist/{chunk-Z2PZVKPR.js → chunk-QH22UIXP.js} +2 -2
- package/dist/chunk-QXCKQTKR.js +60 -0
- package/dist/chunk-RBAD4GJ2.js +13 -0
- package/dist/chunk-RMDPFPNW.js +2 -0
- package/dist/chunk-ROPJDEJZ.js +4 -0
- package/dist/{chunk-56NQAEPJ.js → chunk-RVZC6TJE.js} +2 -2
- package/dist/{chunk-XJX6LGHL.js → chunk-S4QZBKSR.js} +2 -2
- package/dist/chunk-SCPMZ73U.js +2 -0
- package/dist/{chunk-7IQXARSQ.js → chunk-SIAP5RGI.js} +2 -2
- package/dist/{chunk-4TQU4TX2.js → chunk-SIX4RFR3.js} +2 -2
- package/dist/{chunk-AYPDH2LU.js → chunk-SKKXTABJ.js} +2 -2
- package/dist/{chunk-ZYM4HOFA.js → chunk-SSRFUQBD.js} +2 -2
- package/dist/chunk-SYVJEEUJ.js +3 -0
- package/dist/chunk-T3CZAZSI.js +8 -0
- package/dist/chunk-T3I6NHBH.js +2 -0
- package/dist/{chunk-GDRJB3SB.js → chunk-T6DWDI5E.js} +2 -2
- package/dist/chunk-T6HRIROJ.js +7 -0
- package/dist/{chunk-OTSPRVNW.js → chunk-TAA7HXHE.js} +2 -2
- package/dist/{chunk-IJMD6BRI.js → chunk-TJ2JQYT3.js} +2 -2
- package/dist/chunk-TULNMD5T.js +368 -0
- package/dist/chunk-U2FPY5XA.js +3 -0
- package/dist/chunk-U3SXIMII.js +38 -0
- package/dist/{chunk-ENWQWA2R.js → chunk-U6KCHXJ4.js} +2 -2
- package/dist/chunk-UH3XSKS5.js +9 -0
- package/dist/{chunk-UDY7MIAW.js → chunk-UIFUZVCC.js} +2 -2
- package/dist/{chunk-BDGTPN27.js → chunk-UXKURIVI.js} +2 -2
- package/dist/{chunk-FGNCOQUX.js → chunk-V2RBODHL.js} +2 -2
- package/dist/chunk-VBKUWB6N.js +2 -0
- package/dist/{chunk-PIFTZEEM.js → chunk-VBV6ALJE.js} +2 -2
- package/dist/{chunk-2OXVP5U5.js → chunk-VDGFWCQV.js} +2 -2
- package/dist/chunk-VDSDOEWF.js +2 -0
- package/dist/{chunk-C76O5MDS.js → chunk-VZPWVCLN.js} +2 -2
- package/dist/chunk-WDSFQDPN.js +2 -0
- package/dist/{chunk-BTVKZGWT.js → chunk-WFA35BGR.js} +2 -2
- package/dist/{chunk-H7CG6LOE.js → chunk-WLMP3OCW.js} +2 -2
- package/dist/{chunk-WOOAY3PA.js → chunk-WSA52GOR.js} +2 -2
- package/dist/chunk-WYPL7GF7.js +2 -0
- package/dist/{chunk-RDULNRSJ.js → chunk-X3YVZAKZ.js} +2 -2
- package/dist/chunk-X6OGVFIT.js +2 -0
- package/dist/{chunk-ISWFRGJ6.js → chunk-XKXTR6ZI.js} +2 -2
- package/dist/chunk-Y5DFAW5W.js +4 -0
- package/dist/chunk-YSYPDRD5.js +3 -0
- package/dist/chunk-ZFVPWH62.js +5 -0
- package/dist/chunk-ZGIHTH27.js +2 -0
- package/dist/{chunk-QKT4UI2Y.js → chunk-ZGIQN2SX.js} +2 -2
- package/dist/chunk-ZHG4WAHR.js +12 -0
- package/dist/{chunk-CLG6DWVS.js → chunk-ZKB2XUEN.js} +2 -2
- package/dist/chunk-ZLMXIQLC.js +21 -0
- package/dist/chunk-ZMCQIHI4.js +2 -0
- package/dist/cli-main.js +2 -2
- package/dist/code-TAVIKWJI.js +2 -0
- package/dist/code-result-json-5FEFQCAQ.js +2 -0
- package/dist/command-descriptors-7BKH53Y3.js +343 -0
- package/dist/dataflow-GFBTVDH3.js +2 -0
- package/dist/dependence-slice-GWGQCODG.js +2 -0
- package/dist/deps-4QHVDPYA.js +2 -0
- package/dist/direct-navigation-4UBC6HNW.js +3 -0
- package/dist/entry-map-QCTF4RVY.js +2 -0
- package/dist/files-M2UBF5HJ.js +2 -0
- package/dist/frontend-profile-roles-D7eCum8P.d.ts +10 -0
- package/dist/{health-CPp2Jf1Z.d.ts → health-BI2a9WPy.d.ts} +60 -2
- package/dist/hierarchy-2UIHRLW4.js +2 -0
- package/dist/imports-WIE3YZOB.js +2 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/members-YKD636DA.js +2 -0
- package/dist/methods-VDF4IMYG.js +2 -0
- package/dist/output-continuation-command-4UMDOOLO.js +3 -0
- package/dist/output-pagination-2GME6OPY.js +19 -0
- package/dist/postinstall.js +1 -1
- package/dist/project-reindex-XEQTRCV5.js +3 -0
- package/dist/queries/affected.js +1 -1
- package/dist/queries/anchors.d.ts +1 -1
- package/dist/queries/anchors.js +1 -1
- package/dist/queries/architecture.js +1 -1
- package/dist/queries/bottlenecks.js +1 -1
- package/dist/queries/by-kind.js +1 -1
- package/dist/queries/call-graph.d.ts +2 -0
- package/dist/queries/call-graph.js +1 -1
- package/dist/queries/change-surface.js +1 -1
- package/dist/queries/cleanup-plan.js +1 -1
- package/dist/queries/co-change.d.ts +20 -2
- package/dist/queries/co-change.js +1 -1
- package/dist/queries/code.js +1 -1
- package/dist/queries/complexity-hotspots.js +1 -1
- package/dist/queries/complexity.js +1 -1
- package/dist/queries/context.js +1 -1
- package/dist/queries/convergence.js +1 -1
- package/dist/queries/coupling.js +1 -1
- package/dist/queries/cycles.js +1 -1
- package/dist/queries/dataflow.js +1 -1
- package/dist/queries/dead.d.ts +2 -0
- package/dist/queries/dead.js +1 -1
- package/dist/queries/decorative-checkers.js +1 -1
- package/dist/queries/deep-chains.js +1 -1
- package/dist/queries/dependence-slice.js +1 -1
- package/dist/queries/dependency-depth.js +1 -1
- package/dist/queries/deps.js +1 -1
- package/dist/queries/diff-impact.d.ts +9 -0
- package/dist/queries/diff-impact.js +1 -1
- package/dist/queries/doc-drift.js +1 -1
- package/dist/queries/drift.js +1 -1
- package/dist/queries/duplicate-bodies.d.ts +28 -1
- package/dist/queries/duplicate-bodies.js +1 -1
- package/dist/queries/entry-map.d.ts +1 -1
- package/dist/queries/entry-map.js +1 -1
- package/dist/queries/evidence.js +1 -1
- package/dist/queries/extract-candidates.d.ts +50 -23
- package/dist/queries/extract-candidates.js +1 -1
- package/dist/queries/fan.js +1 -1
- package/dist/queries/files.js +1 -1
- package/dist/queries/health.d.ts +1 -1
- package/dist/queries/health.js +1 -1
- package/dist/queries/hierarchy.js +1 -1
- package/dist/queries/hotspots.js +1 -1
- package/dist/queries/imports.js +1 -1
- package/dist/queries/incomplete-migration.js +1 -1
- package/dist/queries/index.d.ts +4 -3
- package/dist/queries/index.js +1 -1
- package/dist/queries/isolated.js +1 -1
- package/dist/queries/locality-candidates.js +1 -1
- package/dist/queries/members.js +1 -1
- package/dist/queries/methods.js +1 -1
- package/dist/queries/not-implemented.js +1 -1
- package/dist/queries/outline.js +1 -1
- package/dist/queries/passthrough-candidates.d.ts +9 -1
- package/dist/queries/passthrough-candidates.js +1 -1
- package/dist/queries/plan-context.js +1 -1
- package/dist/queries/react-component-duplicates.d.ts +19 -3
- package/dist/queries/react-component-duplicates.js +1 -1
- package/dist/queries/react-hook-candidates.d.ts +22 -3
- package/dist/queries/react-hook-candidates.js +1 -1
- package/dist/queries/react-large-component-pressure.d.ts +17 -3
- package/dist/queries/react-large-component-pressure.js +1 -1
- package/dist/queries/recent-duplicates.js +1 -1
- package/dist/queries/redundant-reexports.js +1 -1
- package/dist/queries/reference-neighborhood.js +1 -1
- package/dist/queries/reference-reachability.js +1 -1
- package/dist/queries/refs.js +1 -1
- package/dist/queries/self-audit.d.ts +7 -1
- package/dist/queries/self-audit.js +1 -1
- package/dist/queries/similar-chains.js +1 -1
- package/dist/queries/similar-files.js +1 -1
- package/dist/queries/similar-signatures.js +1 -1
- package/dist/queries/similar.js +1 -1
- package/dist/queries/slice.js +1 -1
- package/dist/queries/source-inspection.js +1 -1
- package/dist/queries/source-search.js +1 -1
- package/dist/queries/stale-abstractions.js +1 -1
- package/dist/queries/surface.js +1 -1
- package/dist/queries/symbols.js +1 -1
- package/dist/queries/system-map.d.ts +1 -1
- package/dist/queries/system-map.js +1 -1
- package/dist/queries/system.js +1 -1
- package/dist/queries/test-quality.js +1 -1
- package/dist/queries/trace.js +1 -1
- package/dist/queries/twin-ab.js +1 -1
- package/dist/queries/twin-drift.d.ts +22 -6
- package/dist/queries/twin-drift.js +1 -1
- package/dist/queries/unused-imports.js +1 -1
- package/dist/queries/unused-params.js +1 -1
- package/dist/queries/value-flow.js +1 -1
- package/dist/queries/vue-component-duplicates.js +1 -1
- package/dist/queries/vue-composable-candidates.js +1 -1
- package/dist/queries/vue-large-view-pressure.js +1 -1
- package/dist/queries/wrapper-candidates.d.ts +16 -1
- package/dist/queries/wrapper-candidates.js +1 -1
- package/dist/query-service-fastpath.js +5 -5
- package/dist/query-service-server.js +3 -3
- package/dist/refs-JNK5CLM7.js +2 -0
- package/dist/refs-pagination-6BLRYGMV.js +2 -0
- package/dist/reindex-worker.js +25 -25
- package/dist/reindex.d.ts +3 -2
- package/dist/reindex.js +35 -35
- package/dist/runtime.d.ts +34 -2
- package/dist/runtime.js +4 -4
- package/dist/rust-semantic-session-server.js +1 -1
- package/dist/rust-semantic-session-worker.js +1 -1
- package/dist/rust-semantic-worker.js +1 -1
- package/dist/{scip-cli-H-n59izO.d.ts → scip-cli-DOerTq-R.d.ts} +42 -4
- package/dist/slice-PHPVNCWX.js +2 -0
- package/dist/surface-MQX5MPIV.js +2 -0
- package/dist/symbol-resolution-DBLVXLBC.js +2 -0
- package/dist/system-JOPKV4OG.js +2 -0
- package/dist/trace-I2P2YFH4.js +2 -0
- package/dist/typescript-mailbox-worker.js +1 -1
- package/dist/value-flow-JJVMF7NP.js +2 -0
- package/dist/watch-server.js +3 -3
- package/docs/COMMAND_REFERENCE.md +2 -2
- package/docs/DETECTOR_GUIDE.md +51 -12
- package/docs/accuracy-audit-checklist.md +36 -13
- package/docs/locality-analyzer-design.md +9 -9
- package/package.json +2 -2
- package/skills/conductor/SKILL.md +110 -0
- package/skills/conductor/agents/openai.yaml +4 -0
- package/skills/principal-maintainability-review/SKILL.md +273 -0
- package/skills/principal-maintainability-review/agents/openai.yaml +4 -0
- package/skills/scip-calibrate/SKILL.md +102 -0
- package/skills/scip-calibrate/agents/openai.yaml +4 -0
- package/skills/scip-claim-audit/SKILL.md +113 -0
- package/skills/scip-claim-audit/agents/openai.yaml +4 -0
- package/skills/scip-probe-reachability/SKILL.md +93 -0
- package/skills/scip-probe-reachability/agents/openai.yaml +4 -0
- package/skills/scip-root-cause/SKILL.md +160 -0
- package/skills/scip-root-cause/agents/openai.yaml +4 -0
- package/skills/scip-system-compression/SKILL.md +252 -0
- package/skills/scip-system-compression/agents/openai.yaml +4 -0
- package/skills/scip-system-compression/references/compression-atlas.md +116 -0
- package/skills/scip-system-compression/references/compression-patterns.md +87 -0
- package/skills/scip-twin-drift/SKILL.md +109 -0
- package/skills/scip-twin-drift/agents/openai.yaml +4 -0
- package/dist/by-kind-4IYG2SKW.js +0 -2
- package/dist/call-graph-WQNXMNNN.js +0 -2
- package/dist/call-graph-evidence-lZa2dwQA.d.ts +0 -11
- package/dist/chunk-2BTJALUS.js +0 -454
- package/dist/chunk-3QXC54FQ.js +0 -3
- package/dist/chunk-3TJY6M3B.js +0 -7
- package/dist/chunk-42W3LFUK.js +0 -13
- package/dist/chunk-4GAQ6FI4.js +0 -43
- package/dist/chunk-6NC3YSPY.js +0 -38
- package/dist/chunk-6VEFRPTD.js +0 -5
- package/dist/chunk-7C26EKLZ.js +0 -4
- package/dist/chunk-7JYHQAH2.js +0 -22
- package/dist/chunk-7KSO2OAP.js +0 -2
- package/dist/chunk-7XZGZBSQ.js +0 -2
- package/dist/chunk-A77SCPW2.js +0 -3
- package/dist/chunk-AK3PYTIK.js +0 -5
- package/dist/chunk-AMIMMNA4.js +0 -11
- package/dist/chunk-AUY5BL74.js +0 -2
- package/dist/chunk-BDHFVH2M.js +0 -18
- package/dist/chunk-BECZLYNU.js +0 -8
- package/dist/chunk-BUTEIZKP.js +0 -10
- package/dist/chunk-BWVQP3LB.js +0 -38
- package/dist/chunk-BYDAFMSR.js +0 -57
- package/dist/chunk-BZYSGZRK.js +0 -2
- package/dist/chunk-C7IJMOFP.js +0 -134
- package/dist/chunk-CBBHFNLX.js +0 -2
- package/dist/chunk-D2MVJSP4.js +0 -21
- package/dist/chunk-D35XIZGN.js +0 -2
- package/dist/chunk-DKM723YF.js +0 -79
- package/dist/chunk-DRENNWRG.js +0 -2
- package/dist/chunk-E44IVWIJ.js +0 -367
- package/dist/chunk-EDMB6SSO.js +0 -7
- package/dist/chunk-EETGXQY7.js +0 -3
- package/dist/chunk-FKGQOTKD.js +0 -2
- package/dist/chunk-GH5YSGZL.js +0 -5
- package/dist/chunk-GQIDEID3.js +0 -2
- package/dist/chunk-HCVJR2V4.js +0 -3
- package/dist/chunk-IMKZEXZG.js +0 -2
- package/dist/chunk-ISIQLPJ2.js +0 -61
- package/dist/chunk-IXESDH3J.js +0 -2
- package/dist/chunk-JJ62MTQH.js +0 -40
- package/dist/chunk-JT6XX7QY.js +0 -8
- package/dist/chunk-KFOYCQAJ.js +0 -9
- package/dist/chunk-LRI5OMPE.js +0 -2
- package/dist/chunk-MHIEP7EG.js +0 -4
- package/dist/chunk-NK3JMP22.js +0 -2
- package/dist/chunk-NVSZNESQ.js +0 -2
- package/dist/chunk-OJNK5ALA.js +0 -2
- package/dist/chunk-OXYAWIEA.js +0 -2
- package/dist/chunk-OZETODHH.js +0 -2
- package/dist/chunk-PBUH2P5S.js +0 -3
- package/dist/chunk-PLJUQFQN.js +0 -2
- package/dist/chunk-PLYUVM4F.js +0 -2
- package/dist/chunk-PXXYQK55.js +0 -2
- package/dist/chunk-Q5TA4OY4.js +0 -20
- package/dist/chunk-Q7GBK5T7.js +0 -81
- package/dist/chunk-QLBSG7U5.js +0 -3
- package/dist/chunk-QWKHW6VZ.js +0 -2
- package/dist/chunk-RPL3ARU7.js +0 -16
- package/dist/chunk-SVHTMVA4.js +0 -4
- package/dist/chunk-T6QD2ZQB.js +0 -43
- package/dist/chunk-TD7VKJ2Y.js +0 -117
- package/dist/chunk-TKDNDQA7.js +0 -3
- package/dist/chunk-TQZV7KV4.js +0 -2
- package/dist/chunk-TUSPIVZ3.js +0 -4
- package/dist/chunk-URSGGIZX.js +0 -2
- package/dist/chunk-UT7TADJX.js +0 -2
- package/dist/chunk-V4NG5OMS.js +0 -554
- package/dist/chunk-VTCIYFEK.js +0 -2
- package/dist/chunk-VU6LIWHT.js +0 -2
- package/dist/chunk-VUSKPCUB.js +0 -2
- package/dist/chunk-WN3TCGJ4.js +0 -2
- package/dist/chunk-WSLEJSFR.js +0 -2
- package/dist/chunk-WYZIHUPZ.js +0 -16
- package/dist/chunk-XE33FV5W.js +0 -2
- package/dist/chunk-XGGBK66W.js +0 -4
- package/dist/chunk-XSWYJCAK.js +0 -2
- package/dist/chunk-Y334QQU5.js +0 -3
- package/dist/chunk-Z2AWCTN6.js +0 -2
- package/dist/chunk-ZOXKSQQB.js +0 -2
- package/dist/chunk-ZPASRBLF.js +0 -2
- package/dist/chunk-ZZ3Z7D56.js +0 -2
- package/dist/code-EQJFDT6I.js +0 -2
- package/dist/code-result-json-7UWIWBOO.js +0 -2
- package/dist/command-descriptors-ORNTVNYV.js +0 -342
- package/dist/dataflow-6VL54GX5.js +0 -2
- package/dist/dependence-slice-DT2NUHD2.js +0 -2
- package/dist/deps-DB7H5IKC.js +0 -2
- package/dist/direct-navigation-O3LUAYWQ.js +0 -3
- package/dist/entry-map-6K62RV3D.js +0 -2
- package/dist/files-MSLD7MO6.js +0 -2
- package/dist/hierarchy-IVBXAKFA.js +0 -2
- package/dist/imports-FRAVZ3Y2.js +0 -2
- package/dist/members-KJOJDYGO.js +0 -2
- package/dist/methods-2AYABBT3.js +0 -2
- package/dist/output-continuation-command-JHMPH6NC.js +0 -3
- package/dist/output-pagination-3OFL2MJV.js +0 -19
- package/dist/project-reindex-HYO4WD7Z.js +0 -3
- package/dist/refs-ARMA6XUJ.js +0 -2
- package/dist/refs-pagination-VUGIWN6U.js +0 -2
- package/dist/slice-YOB5YFAM.js +0 -2
- package/dist/surface-VY5EFWTW.js +0 -2
- package/dist/symbol-resolution-DGQN4XIV.js +0 -2
- package/dist/system-2KQ3QD2P.js +0 -2
- package/dist/trace-HTIPTXAE.js +0 -2
- package/dist/value-flow-5FV3VQI7.js +0 -2
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Compression Atlas
|
|
2
|
+
|
|
3
|
+
Use this reference when the compression scope is broad enough that local refactors may interact. The atlas is a written planning artifact: save it before implementation when filesystem edits are allowed, and update it after each cluster if code changes reveal new facts.
|
|
4
|
+
|
|
5
|
+
Preferred paths are `docs/plans/YYYY-MM-DD-<scope>-compression-atlas.md` or `reports/compression/YYYY-MM-DD-<scope>-atlas.md`. If neither directory exists, create the one that best matches the repository's existing planning/reporting conventions.
|
|
6
|
+
|
|
7
|
+
## Atlas Template
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
Scope
|
|
11
|
+
- Target:
|
|
12
|
+
- Assumed boundaries:
|
|
13
|
+
- Explicit non-goals, including health-score or detector-count optimization:
|
|
14
|
+
- Public surfaces to preserve:
|
|
15
|
+
|
|
16
|
+
System Map
|
|
17
|
+
- Entry points:
|
|
18
|
+
- Major subsystems:
|
|
19
|
+
- Tests/docs/generated artifacts:
|
|
20
|
+
- Current ownership boundaries:
|
|
21
|
+
|
|
22
|
+
Role Inventory
|
|
23
|
+
- Role:
|
|
24
|
+
Referents:
|
|
25
|
+
Execution shape:
|
|
26
|
+
Evidence:
|
|
27
|
+
Pressure:
|
|
28
|
+
|
|
29
|
+
Opportunity Ledger
|
|
30
|
+
- ID:
|
|
31
|
+
Opportunity:
|
|
32
|
+
Evidence:
|
|
33
|
+
Root cause:
|
|
34
|
+
Proposed disposition: merge | delete | inline | extract | generate | enforce | supersede | defer | skip
|
|
35
|
+
Disposition reason:
|
|
36
|
+
Cluster:
|
|
37
|
+
Public behavior constraints:
|
|
38
|
+
|
|
39
|
+
Deferred Register
|
|
40
|
+
- Opportunity ID:
|
|
41
|
+
Evidence:
|
|
42
|
+
Blocking fact:
|
|
43
|
+
Dependency or owner:
|
|
44
|
+
Revisit condition:
|
|
45
|
+
Next-pass priority:
|
|
46
|
+
|
|
47
|
+
Compression Clusters
|
|
48
|
+
- Name:
|
|
49
|
+
Thesis:
|
|
50
|
+
Opportunities:
|
|
51
|
+
Old mechanisms:
|
|
52
|
+
New mechanism:
|
|
53
|
+
What disappears:
|
|
54
|
+
Touch map:
|
|
55
|
+
Depends on:
|
|
56
|
+
Validation:
|
|
57
|
+
Risk:
|
|
58
|
+
|
|
59
|
+
Dependency Order
|
|
60
|
+
1. Cluster:
|
|
61
|
+
Enables:
|
|
62
|
+
Must precede:
|
|
63
|
+
Validation after cluster:
|
|
64
|
+
|
|
65
|
+
Sense-Check
|
|
66
|
+
- Content check:
|
|
67
|
+
- Structure check:
|
|
68
|
+
- Value check:
|
|
69
|
+
- Rework check:
|
|
70
|
+
- Public-surface check:
|
|
71
|
+
- Ambition check:
|
|
72
|
+
|
|
73
|
+
Final Audit
|
|
74
|
+
- Concepts removed:
|
|
75
|
+
- Concepts added:
|
|
76
|
+
- Net concept count:
|
|
77
|
+
- Largest remaining pressure point:
|
|
78
|
+
- Deferred opportunities:
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Ledger Rules
|
|
82
|
+
|
|
83
|
+
Every discovered opportunity gets exactly one disposition. Do not use `defer` just because the change is large or cross-cutting. If an opportunity is false, net-negative, or too speculative, mark it `skip`. If it is valid but blocked, mark it `defer` and add it to the deferred register.
|
|
84
|
+
|
|
85
|
+
Every deferred entry must name a verified blocking fact and a revisit condition. Acceptable blockers include an explicit scope limit, missing evidence that would make implementation unsafe, dependency on an earlier cluster, conflict with unrelated user changes, unavailable runtime/generated artifacts, or user-imposed time/slice limits.
|
|
86
|
+
|
|
87
|
+
Major cleanup is in scope when it is the right compression. Prefer ordered clusters, public-behavior validation, and implementation over deferral.
|
|
88
|
+
|
|
89
|
+
Use `supersede` when a local opportunity will be absorbed by a larger mechanism. For example, a wrapper-candidate finding may be superseded by a broader adapter-core split if the wrapper disappears as part of moving behavior into the core.
|
|
90
|
+
|
|
91
|
+
Use `enforce` when the goal is to make drift impossible. The real referents are repeated predicates, option defaults, SQL fragments, lint rules, typed descriptors, tests, or generated surfaces. The narrower policy should become easier to use than the scattered alternatives.
|
|
92
|
+
|
|
93
|
+
## Ordering Rules
|
|
94
|
+
|
|
95
|
+
Order by enabling power, not by apparent size.
|
|
96
|
+
|
|
97
|
+
Prefer this order when the evidence supports it:
|
|
98
|
+
|
|
99
|
+
1. Public behavior characterization: tests, snapshots, help output, or documented API constraints.
|
|
100
|
+
2. Shared policy or descriptor center: one place to name the rule or execution shape.
|
|
101
|
+
3. Adapters and callers: migrate concrete units onto the new center.
|
|
102
|
+
4. Compatibility shells: keep thin aliases only when needed for public stability.
|
|
103
|
+
5. Deletions and inlining: remove old mechanisms after references prove they are replaced.
|
|
104
|
+
6. Docs and generated surfaces: update or derive them once runtime behavior is settled.
|
|
105
|
+
|
|
106
|
+
Reject an order when it causes a file to be rewritten by multiple clusters without a stated reason. Merge those clusters or introduce the enabling mechanism first.
|
|
107
|
+
|
|
108
|
+
## Sense-Check Questions
|
|
109
|
+
|
|
110
|
+
- Does each cluster remove a concept, policy branch, lifecycle, or hand-maintained surface?
|
|
111
|
+
- Does the new mechanism have one clear role, or is it a false center?
|
|
112
|
+
- Are skipped opportunities skipped because of verified facts, not convenience?
|
|
113
|
+
- Are deferred opportunities still visible with a blocking fact and revisit condition?
|
|
114
|
+
- Is any major but correct compression being deferred merely because it is large?
|
|
115
|
+
- Would an executor know exactly which files and symbols to change?
|
|
116
|
+
- Can focused validation prove behavior stayed stable after each cluster?
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Compression Patterns
|
|
2
|
+
|
|
3
|
+
Use this reference after the first evidence pass, when generating possible simplification models. These are prompts for thought, not templates to impose.
|
|
4
|
+
|
|
5
|
+
## Atlas-First Compression
|
|
6
|
+
|
|
7
|
+
Use when the user wants to think ahead across a whole repository, module family, command surface, query family, or subsystem before editing. The real referents are source files, symbols, command handlers, query modules, docs, tests, generated artifacts, and previously discovered opportunities that could interact. The deeper pattern is that discovery and ordering must be completed before implementation, so local opportunities are not rediscovered as new work after each edit.
|
|
8
|
+
|
|
9
|
+
Typical compression: build a compression atlas with an opportunity ledger and deferred register, cluster by root cause, order clusters by enabling power, enrich steps, sense-check overlap and value, then execute the unblocked clusters in dependency order even when the right cleanup is large.
|
|
10
|
+
|
|
11
|
+
Reject when the scope is a single isolated bug or one clearly bounded refactor where a full atlas would add planning overhead without reducing rework risk.
|
|
12
|
+
|
|
13
|
+
## Metadata-Rendered Surface
|
|
14
|
+
|
|
15
|
+
Use when command help, docs, examples, tests, and runtime behavior all describe the same external surface. The real referents are command registrations, option definitions, usage text, README sections, snapshots, and smoke tests. The deeper pattern is that hand-maintained text should become a rendered view of executable metadata.
|
|
16
|
+
|
|
17
|
+
Typical compression: introduce a command descriptor or schema that owns name, arguments, options, examples, analysis function, and renderer hooks; generate help/docs/tests from it where practical.
|
|
18
|
+
|
|
19
|
+
Reject when docs intentionally teach concepts that cannot be derived from command metadata.
|
|
20
|
+
|
|
21
|
+
## Pipeline
|
|
22
|
+
|
|
23
|
+
Use when many flows repeatedly parse input, load state, run analysis, transform results, render output, and handle errors. The real referents are command actions, scripts, batch jobs, worker handlers, and tests that assert their outputs. The deeper pattern is one lifecycle with different stages plugged in.
|
|
24
|
+
|
|
25
|
+
Typical compression: make the lifecycle explicit, keep stage functions small, and move policy decisions into named stage inputs instead of scattered inline code.
|
|
26
|
+
|
|
27
|
+
Reject when the flows have materially different ordering, resource lifetime, or error semantics.
|
|
28
|
+
|
|
29
|
+
## Registry or Descriptor Table
|
|
30
|
+
|
|
31
|
+
Use when many branches select behavior by name, language, kind, command, file type, or analysis phase. The real referents are switch statements, if chains, command builders, language dispatch, test matrices, and documentation tables. The deeper pattern is a finite set of cases with shared fields and per-case functions.
|
|
32
|
+
|
|
33
|
+
Typical compression: replace scattered branches with a typed table of descriptors and one executor that consumes the table.
|
|
34
|
+
|
|
35
|
+
Reject when the table becomes a bag of unrelated optional fields.
|
|
36
|
+
|
|
37
|
+
## Execution Algebra
|
|
38
|
+
|
|
39
|
+
Use when a descriptor table centralizes names and metadata but leaves many handlers repeating the same lifecycle. The real referents are command handlers, API handlers, worker phases, query calls, renderers, option decoders, budget checks, and hidden commands. The deeper pattern is that each unit is an instance of one of a few execution shapes.
|
|
40
|
+
|
|
41
|
+
Typical compression: define typed command shapes such as pure query, heuristic query, project readiness, lifecycle side effect, and isolated worker. Each shape owns its required setup order, allowed variant points, result renderer, and error behavior. Descriptors choose a shape instead of pointing at a bespoke handler whenever possible.
|
|
42
|
+
|
|
43
|
+
Reject when shape variants require many unrelated escape hatches, or when lifecycle order differs enough that a custom handler is clearer.
|
|
44
|
+
|
|
45
|
+
## Shared Policy Object
|
|
46
|
+
|
|
47
|
+
Use when separate modules answer the same rule question differently, such as "what is live?", "what is public?", "what is ignored?", "what counts as a test?", or "which edge is real?" The real referents are repeated predicates, SQL fragments, filters, option defaults, and tests that encode the same domain boundary. The deeper pattern is one policy that multiple analyses should import.
|
|
48
|
+
|
|
49
|
+
Typical compression: name the policy in domain language, centralize it in a narrow module, and make each caller pass only the context it actually owns.
|
|
50
|
+
|
|
51
|
+
Reject when the apparent rule is only similar because the words are similar; user-visible behavior may require separate policies.
|
|
52
|
+
|
|
53
|
+
## Query Algebra
|
|
54
|
+
|
|
55
|
+
Use when query modules repeatedly build the same graph, candidate set, scoring pass, or summary rows before applying different final filters. The real referents are SQL fragments, graph builders, row mappers, symbol classifiers, candidate gates, and report summaries. The deeper pattern is a small vocabulary of query operations that can be composed.
|
|
56
|
+
|
|
57
|
+
Typical compression: factor the repeated operation as a named data transformation with explicit inputs and outputs; keep command-specific ranking and rendering outside it.
|
|
58
|
+
|
|
59
|
+
Reject when a generalized operation hides expensive work or makes precision/confidence rules less visible.
|
|
60
|
+
|
|
61
|
+
## Adapter-Core Split
|
|
62
|
+
|
|
63
|
+
Use when UI, CLI, API, or worker code owns business logic while pure modules merely support it. The real referents are command actions, HTTP handlers, worker messages, renderers, and pure query functions. The deeper pattern is that adapters translate boundaries while the core owns analysis.
|
|
64
|
+
|
|
65
|
+
Typical compression: move behavior into pure functions with typed results; make adapters responsible only for input parsing, resource setup, output formatting, and exit behavior.
|
|
66
|
+
|
|
67
|
+
Reject when moving logic would destabilize a public surface without reducing duplicated policy.
|
|
68
|
+
|
|
69
|
+
## Compatibility Shell
|
|
70
|
+
|
|
71
|
+
Use when old APIs, scripts, command names, or file paths remain only to preserve callers after the real implementation moved. The real referents are wrappers, aliases, barrels, deprecated modules, and release notes. The deeper pattern is a temporary shell around a new center.
|
|
72
|
+
|
|
73
|
+
Typical compression: keep the shell thin, document the compatibility boundary, and delete it when references prove it is no longer used.
|
|
74
|
+
|
|
75
|
+
Reject when the wrapper adds meaningful validation, translation, or lifecycle management.
|
|
76
|
+
|
|
77
|
+
## Anti-Patterns
|
|
78
|
+
|
|
79
|
+
Helper cemetery: a refactor extracts many tiny helpers but leaves the original concepts scattered.
|
|
80
|
+
|
|
81
|
+
Parameter swamp: one generic function gains many flags because the grouped cases are not actually the same kind of thing.
|
|
82
|
+
|
|
83
|
+
False center: a new module becomes a dependency hub without owning a coherent policy or workflow.
|
|
84
|
+
|
|
85
|
+
Name-level unification: code is grouped because names sound similar, while call graphs, data flow, or user-visible behavior show different roles.
|
|
86
|
+
|
|
87
|
+
Premature deletion: code is removed because it looks conceptually redundant before references, entry points, and tests prove it is unused or replaceable.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scip-twin-drift
|
|
3
|
+
description: Find and resolve twin drift with scip-query. Use for same-name or near-name functions across files with diverged bodies, drifted policy thresholds, one-sided fixes, or consolidating a duplicated concept into one canonical helper.
|
|
4
|
+
metadata:
|
|
5
|
+
commands:
|
|
6
|
+
- template: 'scip-query twin-drift -s <scope> --json'
|
|
7
|
+
when: 'Enumerate same-name or near-name callable groups whose bodies partially overlap.'
|
|
8
|
+
- template: 'scip-query duplicate-bodies -s <scope>'
|
|
9
|
+
when: 'Separate exact clones, which belong to this detector, from drifted twins.'
|
|
10
|
+
- template: 'scip-query code <selector>'
|
|
11
|
+
when: 'Read every member of a divergent group to classify the divergence.'
|
|
12
|
+
- template: 'scip-query refs <symbol>'
|
|
13
|
+
when: 'Pick the canonical twin by consumer count.'
|
|
14
|
+
- template: 'scip-query diff-impact'
|
|
15
|
+
when: 'After consolidating, map the changed symbols and every downstream consumer.'
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# scip-twin-drift
|
|
19
|
+
|
|
20
|
+
<!-- BEGIN GENERATED SKILL COMMANDS -->
|
|
21
|
+
## Command and question manual
|
|
22
|
+
|
|
23
|
+
| Command syntax | Question it answers |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| `scip-query twin-drift -s <scope> --json` | Enumerate same-name or near-name callable groups whose bodies partially overlap. |
|
|
26
|
+
| `scip-query duplicate-bodies -s <scope>` | Separate exact clones, which belong to this detector, from drifted twins. |
|
|
27
|
+
| `scip-query code <selector>` | Read every member of a divergent group to classify the divergence. |
|
|
28
|
+
| `scip-query refs <symbol>` | Pick the canonical twin by consumer count. |
|
|
29
|
+
| `scip-query diff-impact` | After consolidating, map the changed symbols and every downstream consumer. |
|
|
30
|
+
|
|
31
|
+
These commands are controls, not a checklist. Use every capability needed by the task, but make each query answer a distinct question. There is no required sequence or query limit. Run a command's `--help` when you need a flag not shown in its template.
|
|
32
|
+
<!-- END GENERATED SKILL COMMANDS -->
|
|
33
|
+
|
|
34
|
+
Use this skill when the same concept exists in more than one place under the same or a near-name (case-insensitive, or edit-distance at most 2 for names of 8 or more characters) and the bodies have silently diverged. A twin drift group is a same-leaf-name family of callables spanning at least two files whose normalized-token bodies are neither identical (that is the job of `duplicate-bodies`) nor unrelated (a homonym like `render` or `parse`) but partially overlapping. That overlap is the signature of a concept that was copied once and then edited independently in only some of its copies.
|
|
35
|
+
|
|
36
|
+
## Rules
|
|
37
|
+
|
|
38
|
+
1. `IDENTICAL` groups defer to `duplicate-bodies`; do not re-report them here.
|
|
39
|
+
2. Homonyms (similarity below `--min-similarity`, default 0.3) are noise unless `--include-homonyms` was requested; do not chase them.
|
|
40
|
+
3. Every `DIVERGENT` group in scope gets a classification before this skill reports done.
|
|
41
|
+
4. Prefer consolidation to one exported helper over leaving parallel copies. When consolidation is unsafe or premature, record the intent gap explicitly in a comment or a suppression with a reason rather than silently accepting drift.
|
|
42
|
+
5. If your own diff introduces a new twin, you just reproduced the defect class this skill exists to catch. Fix or explicitly accept it before finishing.
|
|
43
|
+
|
|
44
|
+
## Workflow
|
|
45
|
+
|
|
46
|
+
### 1. Run the detector
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
scip-query twin-drift -s <scope> --json
|
|
50
|
+
scip-query duplicate-bodies -s <scope>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Scope with `-s <path>` when the review is bounded to a module. Record group count, member count, and the maximum divergence per group.
|
|
54
|
+
|
|
55
|
+
This step is complete only when every group in scope is enumerated with its relationship (`divergent` versus suppressed homonym).
|
|
56
|
+
|
|
57
|
+
### 2. Classify each DIVERGENT group
|
|
58
|
+
|
|
59
|
+
For each group, read every member with `scip-query code <symbol-or-file:range>` and use the group's first divergent tokens as a starting point for where the bodies diverge. Classify the group as one of:
|
|
60
|
+
|
|
61
|
+
- **Intentional variation**: the copies differ because the domains genuinely differ, for example a React-specific versus Vue-specific structural comparator that must branch on framework-specific overlap checks. Essential variation stays; record why.
|
|
62
|
+
- **Drifted policy**: the copies encode what should be one policy (a threshold, a normalization rule, an edge-case guard) that only some copies received when it last changed. This is a bug: pick the correct value and propagate it, or extract the policy into one named function or constant.
|
|
63
|
+
- **One-sided fix**: one copy was bugfixed or hardened and its twins were not. This is also a bug: apply the same fix to every member, or consolidate.
|
|
64
|
+
|
|
65
|
+
This step is complete only when every DIVERGENT group in scope has one of these three labels with a one-line reason.
|
|
66
|
+
|
|
67
|
+
### 3. Pick the canonical twin and act
|
|
68
|
+
|
|
69
|
+
For groups getting consolidated, pick the canonical member by consumer count:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
scip-query refs <symbol-in-file-A>
|
|
73
|
+
scip-query refs <symbol-in-file-B>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Prefer the member with the most consumers, or the one in the more general or shared location when counts tie. Extract or move the canonical body to one exported helper; update the other members to call it, or delete them if they were pure duplication with different names for the caller's convenience. Preserve any classified-essential variation as a parameter or a thin caller-side branch, not as a second copy of the whole body.
|
|
77
|
+
|
|
78
|
+
For groups marked intentional variation, do not force consolidation. Record the reason in a comment near one of the members so the next `twin-drift` run and the next reader both see it was considered.
|
|
79
|
+
|
|
80
|
+
This step is complete only when every DIVERGENT group is either consolidated (with the old copies gone or forwarding) or has a recorded reason it stays separate.
|
|
81
|
+
|
|
82
|
+
### 4. Verify
|
|
83
|
+
|
|
84
|
+
Rerun the detector to confirm consolidated groups no longer appear as DIVERGENT, run the repository's own tests and typecheck for the touched files, then:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
scip-query diff-impact
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Read every downstream consumer it lists. A consumer that depended on the deleted twin's behavior, not the canonical one's, is a regression this skill must catch before finishing.
|
|
91
|
+
|
|
92
|
+
This step is complete only when `twin-drift` shows no unclassified `DIVERGENT` groups in scope and every consumer named by `diff-impact` has been checked.
|
|
93
|
+
|
|
94
|
+
## Report
|
|
95
|
+
|
|
96
|
+
```markdown
|
|
97
|
+
Scope:
|
|
98
|
+
Groups found: N (M divergent, K suppressed homonyms)
|
|
99
|
+
|
|
100
|
+
Divergent groups:
|
|
101
|
+
|
|
102
|
+
- <leaf name> (<files>): classification: intentional variation | drifted policy | one-sided fix
|
|
103
|
+
- action: consolidated into <canonical file:symbol> | reason kept separate
|
|
104
|
+
|
|
105
|
+
Verification:
|
|
106
|
+
|
|
107
|
+
- `scip-query twin-drift -s <scope> --json`: <result>
|
|
108
|
+
- `scip-query diff-impact`: <consumers checked>
|
|
109
|
+
```
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: 'SCIP Twin Drift'
|
|
3
|
+
short_description: 'Find and resolve same-name twins that have silently diverged'
|
|
4
|
+
default_prompt: 'Use $scip-twin-drift to find same-name or near-name functions that have diverged across files, classify each divergence as intentional variation, drifted policy, or one-sided fix, and consolidate or record the intent gap.'
|
package/dist/by-kind-4IYG2SKW.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a,b}from"./chunk-JAT6C3VX.js";import"./chunk-MTDBHTSF.js";import"./chunk-C7IJMOFP.js";import"./chunk-YXPUP5G2.js";import"./chunk-DRENNWRG.js";import"./chunk-DKM723YF.js";import"./chunk-K3XFWJI2.js";import"./chunk-IW5XQG5G.js";import"./chunk-H5EXS3HM.js";import"./chunk-HGFDYOVB.js";import"./chunk-AK3PYTIK.js";export{a as byKind,b as kindCounts};
|
|
2
|
-
//# sourceMappingURL=by-kind-4IYG2SKW.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-GQIDEID3.js";import"./chunk-7KCZELVM.js";import"./chunk-BGBBVSH4.js";import"./chunk-6NC3YSPY.js";import"./chunk-MTDBHTSF.js";import"./chunk-IXESDH3J.js";import"./chunk-OXYAWIEA.js";import"./chunk-FKGQOTKD.js";import"./chunk-2XCGSDIT.js";import"./chunk-WRQXLNYE.js";import"./chunk-T6QD2ZQB.js";import"./chunk-EELPBR7E.js";import"./chunk-BJT7LSPK.js";import"./chunk-WSLEJSFR.js";import"./chunk-VUSKPCUB.js";import"./chunk-F4FNK44D.js";import"./chunk-HCVJR2V4.js";import"./chunk-EETGXQY7.js";import"./chunk-TQZV7KV4.js";import"./chunk-C7IJMOFP.js";import"./chunk-YXPUP5G2.js";import"./chunk-DRENNWRG.js";import"./chunk-BVFYEEBH.js";import"./chunk-JHH5SCZ3.js";import"./chunk-ENWQWA2R.js";import"./chunk-DKM723YF.js";import"./chunk-K3XFWJI2.js";import"./chunk-IW5XQG5G.js";import"./chunk-JT6XX7QY.js";import"./chunk-H5EXS3HM.js";import"./chunk-HGFDYOVB.js";import"./chunk-SB25YMEQ.js";import"./chunk-AK3PYTIK.js";export{a as callGraph};
|
|
2
|
-
//# sourceMappingURL=call-graph-WQNXMNNN.js.map
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
type CalleeEvidenceSource = 'ast-callsite' | 'semantic-callee' | 'scip-chunk';
|
|
2
|
-
interface CalleeRow {
|
|
3
|
-
symbol: string;
|
|
4
|
-
file: string;
|
|
5
|
-
chunkId: number;
|
|
6
|
-
source: CalleeEvidenceSource;
|
|
7
|
-
/** Zero-based source line of the call expression when retained by the evidence source. */
|
|
8
|
-
callsiteLine?: number;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export type { CalleeRow as C, CalleeEvidenceSource as a };
|