scip-query 0.23.0 → 0.26.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 +491 -2
- package/README.md +111 -122
- package/dist/augment-vue-worker.js +1 -1
- package/dist/by-kind-PRVFAGTQ.js +2 -0
- package/dist/call-graph-DVPAQV2F.js +2 -0
- package/dist/call-graph-evidence-CUtj8V2I.d.ts +19 -0
- package/dist/chunk-2FSBGL5P.js +2 -0
- package/dist/chunk-2HLAFUCY.js +2 -0
- package/dist/chunk-2IWUT6CJ.js +3 -0
- package/dist/chunk-2KNN7GTQ.js +2 -0
- package/dist/chunk-2LHXRE2B.js +8 -0
- package/dist/{chunk-EG2CPZMJ.js → chunk-2YXE77TJ.js} +2 -2
- package/dist/chunk-36SGVCGX.js +2 -0
- package/dist/chunk-3ABBFPTP.js +2 -0
- package/dist/chunk-3IVFU4FD.js +3 -0
- package/dist/chunk-3JIQS44J.js +7 -0
- package/dist/chunk-3ZRB6DNK.js +7 -0
- package/dist/{chunk-6YTSKJJ3.js → chunk-42EOW5VI.js} +1 -1
- package/dist/{chunk-6I6L7Z62.js → chunk-4BHGBMNO.js} +2 -2
- package/dist/chunk-4BP3UBDG.js +2 -0
- package/dist/chunk-4D6RO7G4.js +2 -0
- package/dist/chunk-4FEWQ6RH.js +2 -0
- package/dist/chunk-4IGEOBG7.js +2 -0
- package/dist/chunk-4QZXBUKC.js +2 -0
- package/dist/chunk-4WBDEVX2.js +4 -0
- package/dist/chunk-4WCUBZU3.js +8 -0
- package/dist/chunk-4WTUBQ36.js +40 -0
- package/dist/chunk-4XQ4O6IM.js +3 -0
- package/dist/chunk-55UQAMZO.js +4 -0
- package/dist/chunk-5D2LVK7O.js +125 -0
- package/dist/chunk-5IYJ56TT.js +2 -0
- package/dist/chunk-5PLMJC7Q.js +2 -0
- package/dist/chunk-5TNQJUR2.js +5 -0
- package/dist/chunk-62BDNPMI.js +2 -0
- package/dist/chunk-64DZ5TXR.js +7 -0
- package/dist/chunk-65245JCM.js +2 -0
- package/dist/chunk-6FFVZZL4.js +2 -0
- package/dist/chunk-6KO5JHAR.js +2 -0
- package/dist/chunk-6LRXOOSX.js +2 -0
- package/dist/chunk-6LSEIIF7.js +2 -0
- package/dist/chunk-6YMNWD3H.js +6 -0
- package/dist/chunk-72AD6ZRR.js +5 -0
- package/dist/chunk-73AAKPUC.js +4 -0
- package/dist/chunk-76CZ77DF.js +2 -0
- package/dist/chunk-7VPEEAAG.js +2 -0
- package/dist/chunk-7WTPQ4NX.js +14 -0
- package/dist/chunk-7Y5T6XDP.js +2 -0
- package/dist/chunk-A2IIGFMJ.js +5 -0
- package/dist/chunk-AB5KCTEV.js +2 -0
- package/dist/chunk-AC566WBP.js +6 -0
- package/dist/chunk-AGWFSTXC.js +3 -0
- package/dist/chunk-AOSIYPTA.js +2 -0
- package/dist/chunk-AUVEWPIF.js +2 -0
- package/dist/chunk-B56T42J3.js +25 -0
- package/dist/chunk-BIQEF5NE.js +2 -0
- package/dist/chunk-BL6XJKTA.js +3 -0
- package/dist/chunk-BMKOQJRI.js +2 -0
- package/dist/chunk-BOZ4EXBB.js +3 -0
- package/dist/chunk-BUTWYEPH.js +2 -0
- package/dist/chunk-BZB4QPIP.js +2 -0
- package/dist/{chunk-ILTDAWEF.js → chunk-CE357GEE.js} +4 -4
- package/dist/chunk-CFN45HFP.js +2 -0
- package/dist/chunk-CFYMZFXT.js +368 -0
- package/dist/chunk-CN5EH7O3.js +2 -0
- package/dist/chunk-D254DNNQ.js +4 -0
- package/dist/chunk-D3FDISIC.js +2 -0
- package/dist/chunk-D3NX5XIE.js +3 -0
- package/dist/chunk-DA7RPPDF.js +3 -0
- package/dist/chunk-DDMC3FON.js +3 -0
- package/dist/chunk-DIO3FUSG.js +2 -0
- package/dist/chunk-DJ2NNSUK.js +3 -0
- package/dist/chunk-DKYQIM3C.js +18 -0
- package/dist/{chunk-JTQVMR42.js → chunk-DOOEL2IV.js} +2 -2
- package/dist/chunk-DVFP6PZI.js +2 -0
- package/dist/chunk-E3FDPXZK.js +2 -0
- package/dist/chunk-E7YNJLCB.js +2 -0
- package/dist/chunk-EFGW5JPH.js +2 -0
- package/dist/chunk-EJVTR244.js +13 -0
- package/dist/chunk-EOV7RTRZ.js +2 -0
- package/dist/chunk-ETOIKRHO.js +2 -0
- package/dist/chunk-EYK3ZAO2.js +3 -0
- package/dist/chunk-F2V2LPET.js +52 -0
- package/dist/chunk-F4LUHJTF.js +2 -0
- package/dist/chunk-F4PUT6IT.js +2 -0
- package/dist/chunk-F56GCXXS.js +5 -0
- package/dist/chunk-FC2EVQRM.js +2 -0
- package/dist/chunk-FL7NBMHP.js +3 -0
- package/dist/chunk-FMRN2TRL.js +3 -0
- package/dist/chunk-FVULPZDF.js +20 -0
- package/dist/chunk-GCKCF5FL.js +43 -0
- package/dist/chunk-GH2PYF46.js +2 -0
- package/dist/chunk-GHJAGXIP.js +2 -0
- package/dist/{chunk-WIWY3CRX.js → chunk-GMVSHUKZ.js} +2 -2
- package/dist/chunk-GS6KDO4R.js +2 -0
- package/dist/chunk-GUUBXNN7.js +2 -0
- package/dist/chunk-GVWX5T43.js +80 -0
- package/dist/chunk-GZKFETP5.js +2 -0
- package/dist/chunk-H4EQHO6J.js +9 -0
- package/dist/chunk-H73WY2RM.js +2 -0
- package/dist/chunk-H75GSPRV.js +60 -0
- package/dist/chunk-HDR3AHSV.js +61 -0
- package/dist/chunk-HQBSL74Y.js +2 -0
- package/dist/chunk-HRRFKWPZ.js +2 -0
- package/dist/chunk-HXENDJC6.js +2 -0
- package/dist/chunk-IIBAZNSW.js +21 -0
- package/dist/chunk-INLMWEUU.js +12 -0
- package/dist/chunk-IWQPAF4F.js +2 -0
- package/dist/chunk-IZJ6YUKP.js +35 -0
- package/dist/chunk-J2TMAIN5.js +60 -0
- package/dist/chunk-J5FJMODQ.js +142 -0
- package/dist/chunk-J7HZPIO3.js +2 -0
- package/dist/chunk-JEVRKFRL.js +2 -0
- package/dist/chunk-JFXSGAEB.js +30 -0
- package/dist/chunk-JVRTHGFS.js +3 -0
- package/dist/chunk-JYWEX7RR.js +360 -0
- package/dist/chunk-K3YL22N6.js +2 -0
- package/dist/chunk-K4CN7GXK.js +12 -0
- package/dist/chunk-K5TBVXU4.js +30 -0
- package/dist/chunk-KDDIE2DP.js +9 -0
- package/dist/chunk-KHWRRPV4.js +2 -0
- package/dist/chunk-KI6NBKDY.js +14 -0
- package/dist/chunk-KU3QRSTH.js +2 -0
- package/dist/chunk-KZBJWZJB.js +2 -0
- package/dist/chunk-L7GFM3NP.js +3 -0
- package/dist/chunk-LMO6PK3V.js +35 -0
- package/dist/chunk-LN4YXJJU.js +2 -0
- package/dist/chunk-LOVIZBJ4.js +43 -0
- package/dist/chunk-LPCRK4A2.js +11 -0
- package/dist/chunk-MMHZKBFA.js +2 -0
- package/dist/{chunk-M2O5NY6W.js → chunk-MOQQBQRD.js} +2 -2
- package/dist/chunk-N2WN6I3L.js +2 -0
- package/dist/chunk-N3ORQT7L.js +2 -0
- package/dist/chunk-NAZ3RAIW.js +2 -0
- package/dist/chunk-NDUNO5JQ.js +2 -0
- package/dist/chunk-NEIWRNAZ.js +4 -0
- package/dist/chunk-NJJMVD65.js +2 -0
- package/dist/chunk-NLOQOBXI.js +20 -0
- package/dist/chunk-NOLZOVCU.js +2 -0
- package/dist/chunk-NOWINRRN.js +2 -0
- package/dist/chunk-NZAXKGRL.js +16 -0
- package/dist/chunk-O2C4UILI.js +2 -0
- package/dist/chunk-O3RHA6ZT.js +3 -0
- package/dist/chunk-O4UZSPPI.js +3 -0
- package/dist/chunk-OGFV2BUX.js +2 -0
- package/dist/chunk-OZCJXZK6.js +499 -0
- package/dist/chunk-P6ODM7BY.js +2 -0
- package/dist/{chunk-XBGWL66K.js → chunk-PAVGPRHJ.js} +2 -2
- package/dist/chunk-PH52RA7D.js +2 -0
- package/dist/chunk-PKN354TH.js +3 -0
- package/dist/chunk-PWOASWEG.js +11 -0
- package/dist/chunk-QIWXRW72.js +2 -0
- package/dist/chunk-QJRMOK5N.js +2 -0
- package/dist/{chunk-YXPUP5G2.js → chunk-QOIXNWQR.js} +2 -2
- package/dist/chunk-QXEUDXBT.js +3 -0
- package/dist/chunk-QYUVVBMR.js +6 -0
- package/dist/chunk-QZ7KQZRN.js +2 -0
- package/dist/chunk-R6LQBUDH.js +2 -0
- package/dist/chunk-RBS42E55.js +20 -0
- package/dist/chunk-RSJKPCFX.js +26 -0
- package/dist/chunk-S6CZA3MV.js +2 -0
- package/dist/chunk-STMVAHJP.js +2 -0
- package/dist/chunk-SYVPTTVW.js +2 -0
- package/dist/chunk-T3I6NHBH.js +2 -0
- package/dist/chunk-T6DK3ZP7.js +2 -0
- package/dist/chunk-TKD34PHN.js +4 -0
- package/dist/chunk-TNNQFH7W.js +2 -0
- package/dist/chunk-TNV7SSUF.js +2 -0
- package/dist/chunk-TO7ZR3EH.js +8 -0
- package/dist/chunk-TOU3CHK4.js +2 -0
- package/dist/chunk-TRBI4UKT.js +2 -0
- package/dist/chunk-TZCVNCAN.js +4 -0
- package/dist/chunk-U4LZA5LL.js +3 -0
- package/dist/chunk-U5RIG3JP.js +3 -0
- package/dist/chunk-UP5KXN2I.js +2 -0
- package/dist/chunk-UQFR3NDH.js +5 -0
- package/dist/chunk-UXYXF7GV.js +2 -0
- package/dist/chunk-VB3GOKOS.js +2 -0
- package/dist/chunk-VF5JZICY.js +2 -0
- package/dist/chunk-VTY3VK6E.js +2 -0
- package/dist/chunk-VX2O4RIS.js +2 -0
- package/dist/chunk-WKPV2TDZ.js +2 -0
- package/dist/chunk-WOFQ5DTB.js +2 -0
- package/dist/chunk-WS4C6TCK.js +2 -0
- package/dist/chunk-WXU3DGPU.js +2 -0
- package/dist/chunk-X6RMKHJQ.js +81 -0
- package/dist/{chunk-4ILJCCXV.js → chunk-XHMN6ZX7.js} +2 -2
- package/dist/chunk-XHTVFLWW.js +2 -0
- package/dist/chunk-XKIDJCIK.js +2 -0
- package/dist/chunk-XTYTYZPT.js +2 -0
- package/dist/chunk-Y2JHHTTA.js +2 -0
- package/dist/chunk-YGVRMGYN.js +4 -0
- package/dist/chunk-YNQCGEQE.js +2 -0
- package/dist/chunk-YOQVEXVE.js +14 -0
- package/dist/chunk-YRT2WLYY.js +2 -0
- package/dist/chunk-YTAP5Y2G.js +2 -0
- package/dist/chunk-YTYWI7VB.js +2 -0
- package/dist/chunk-YULZRALL.js +2 -0
- package/dist/chunk-Z33WQG4Q.js +2 -0
- package/dist/chunk-ZGTYGDMF.js +16 -0
- package/dist/chunk-ZHMRSZFD.js +43 -0
- package/dist/chunk-ZHSP366W.js +10 -0
- package/dist/chunk-ZIBYCYKK.js +7 -0
- package/dist/{chunk-GAS2LJMP.js → chunk-ZLADLUE6.js} +3 -3
- package/dist/chunk-ZO4YXUT6.js +4 -0
- package/dist/{chunk-HYO3NP5Q.js → chunk-ZR4HBC2H.js} +2 -2
- package/dist/cli-main.js +6 -6
- package/dist/cli.js +1 -1
- package/dist/{code-B17qEMbt.d.ts → code-BNyrCF3_.d.ts} +3 -2
- package/dist/code-IL5WH3NZ.js +2 -0
- package/dist/code-result-json-ANTBEDFP.js +4 -0
- package/dist/command-descriptors-HEEMDHTU.js +222 -0
- package/dist/deps-EOWFC6FD.js +2 -0
- package/dist/direct-navigation-Y5B6OSIQ.js +3 -0
- package/dist/{exploration-topology-BG4v30HZ.d.ts → exploration-topology-CSgEyAz-.d.ts} +3 -1
- package/dist/files-K4AI3JUM.js +2 -0
- package/dist/frontend-profile-roles-D7eCum8P.d.ts +10 -0
- package/dist/{health-CPp2Jf1Z.d.ts → health-BtfmNrfa.d.ts} +58 -74
- package/dist/hierarchy-6W5NDIFI.js +2 -0
- package/dist/imports-WH365QY4.js +2 -0
- package/dist/index.d.ts +13 -1
- package/dist/index.js +1 -1
- package/dist/members-K3PHMF5S.js +2 -0
- package/dist/methods-E7KVMBX4.js +2 -0
- package/dist/output-continuation-command-BJSY67SN.js +3 -0
- package/dist/output-pagination-UZJ5ACIX.js +24 -0
- package/dist/postinstall.js +1 -1
- package/dist/project-reindex-EP24WT4X.js +3 -0
- package/dist/queries/affected.js +1 -1
- package/dist/queries/architecture.d.ts +15 -4
- 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 +3 -1
- package/dist/queries/call-graph.js +1 -1
- package/dist/queries/change-surface.d.ts +1 -0
- package/dist/queries/change-surface.js +1 -1
- package/dist/queries/cleanup-plan.d.ts +3 -3
- 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.d.ts +1 -1
- package/dist/queries/code.js +1 -1
- package/dist/queries/complexity.d.ts +6 -3
- package/dist/queries/complexity.js +1 -1
- package/dist/queries/context.d.ts +1 -7
- package/dist/queries/context.js +1 -1
- package/dist/queries/coupling.js +1 -1
- package/dist/queries/cycles.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/dependence-slice.d.ts +46 -22
- package/dist/queries/dependence-slice.js +1 -1
- package/dist/queries/dependency-depth.d.ts +1 -7
- package/dist/queries/dependency-depth.js +1 -1
- package/dist/queries/deps.js +1 -1
- package/dist/queries/diff-impact.d.ts +3 -1
- package/dist/queries/diff-impact.js +1 -1
- package/dist/queries/doc-drift.js +1 -1
- package/dist/queries/drift.d.ts +1 -1
- package/dist/queries/drift.js +1 -1
- package/dist/queries/duplicate-bodies.d.ts +29 -2
- package/dist/queries/duplicate-bodies.js +1 -1
- package/dist/queries/entry-map.d.ts +2 -4
- package/dist/queries/entry-map.js +1 -1
- package/dist/queries/evidence.d.ts +121 -61
- package/dist/queries/evidence.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.d.ts +2 -2
- package/dist/queries/hierarchy.js +1 -1
- package/dist/queries/hotspots.d.ts +1 -1
- package/dist/queries/hotspots.js +1 -1
- package/dist/queries/imports.d.ts +1 -0
- package/dist/queries/imports.js +1 -1
- package/dist/queries/incomplete-migration.d.ts +3 -3
- package/dist/queries/incomplete-migration.js +1 -1
- package/dist/queries/index.d.ts +17 -65
- package/dist/queries/index.js +1 -1
- package/dist/queries/locality-candidates.d.ts +4 -4
- package/dist/queries/locality-candidates.js +1 -1
- package/dist/queries/members.d.ts +2 -2
- package/dist/queries/members.js +1 -1
- package/dist/queries/methods.js +1 -1
- package/dist/queries/not-implemented.d.ts +2 -6
- 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/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.d.ts +4 -14
- package/dist/queries/redundant-reexports.js +1 -1
- package/dist/queries/refs.d.ts +4 -1
- package/dist/queries/refs.js +1 -1
- package/dist/queries/review.d.ts +188 -0
- package/dist/queries/review.js +2 -0
- package/dist/queries/similar-files.d.ts +7 -10
- package/dist/queries/similar-files.js +1 -1
- package/dist/queries/similar-signatures.js +1 -1
- package/dist/queries/similar.d.ts +19 -1
- package/dist/queries/similar.js +1 -1
- package/dist/queries/slice-cohesion.d.ts +205 -0
- package/dist/queries/slice-cohesion.js +2 -0
- package/dist/queries/source-inspection.d.ts +6 -202
- package/dist/queries/source-inspection.js +1 -1
- package/dist/queries/source-search.d.ts +2 -3
- package/dist/queries/source-search.js +1 -1
- package/dist/queries/stats.d.ts +1 -0
- package/dist/queries/stats.js +1 -1
- package/dist/queries/surface.js +1 -1
- package/dist/queries/symbols.js +1 -1
- package/dist/queries/system.d.ts +4 -2
- package/dist/queries/system.js +1 -1
- package/dist/queries/test-quality.d.ts +1 -1
- package/dist/queries/test-quality.js +1 -1
- package/dist/queries/twin-drift.d.ts +23 -7
- package/dist/queries/twin-drift.js +1 -1
- package/dist/queries/unused-imports.js +1 -1
- package/dist/queries/unused-params.d.ts +3 -15
- package/dist/queries/unused-params.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/query-service-fastpath.js +5 -5
- package/dist/query-service-server.js +4 -4
- package/dist/refs-CCBJG7WK.js +2 -0
- package/dist/refs-pagination-DRNLVU4S.js +2 -0
- package/dist/reindex-worker.js +79 -29
- package/dist/reindex.js +45 -45
- package/dist/repository-cache-worker.js +2 -0
- package/dist/runtime.d.ts +8 -8
- package/dist/runtime.js +3 -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/service-queries-2WAJI7R6.js +6 -0
- package/dist/source-inspection-91U9zdO3.d.ts +341 -0
- package/dist/{source-search-types-Dwz8KeuW.d.ts → source-search-types-DWGYNg8M.d.ts} +15 -2
- package/dist/stats-G7DIV6VU.js +2 -0
- package/dist/surface-IO55UALI.js +2 -0
- package/dist/system-ZBMSHJXU.js +2 -0
- package/dist/{queries/trace.d.ts → trace-BMjw3prn.d.ts} +1 -18
- package/dist/typescript-indexer.js +2 -0
- package/dist/typescript-mailbox-worker.js +1 -1
- package/dist/watch-server.js +3 -3
- package/docs/AGENT_GUIDE.md +19 -128
- package/docs/CLI_JSON_OUTPUT.md +21 -17
- package/docs/COMMAND_REFERENCE.md +34 -49
- package/docs/CURRENT_COMMANDS.md +123 -0
- package/docs/DETECTOR_EVIDENCE_CONTRACTS.md +0 -40
- package/docs/DETECTOR_GUIDE.md +55 -12
- package/docs/PRODUCT_VISION.md +135 -0
- package/docs/PROPERTY_TESTING.md +73 -0
- package/docs/REVIEW.md +76 -0
- package/docs/SKILLS.md +51 -0
- package/docs/WINDOWS_SIDECAR_RELEASE.md +12 -3
- package/docs/accuracy-audit-checklist.md +70 -13
- package/docs/analyzer-inventory.md +2 -2
- package/docs/locality-analyzer-design.md +9 -9
- package/package.json +18 -80
- package/scripts/evidence-product-contract.mjs +7 -3
- package/scripts/record-review-coverage.mjs +118 -0
- package/scripts/scip-windows-provenance.mjs +29 -19
- package/skills/scip-architecture-review/SKILL.md +57 -0
- package/skills/scip-architecture-review/agents/openai.yaml +4 -0
- package/skills/scip-architecture-review/references/design-checks.md +17 -0
- package/skills/scip-explore/SKILL.md +15 -59
- package/skills/scip-explore/agents/openai.yaml +3 -3
- package/skills/scip-explore/references/external-evidence.md +2 -2
- package/skills/scip-explore/references/information-model.md +26 -29
- package/skills/scip-explore/scripts/capture-evidence.mjs +68 -34
- package/skills/scip-integrity-audit/SKILL.md +53 -181
- package/skills/scip-integrity-audit/agents/openai.yaml +3 -3
- package/skills/scip-integrity-audit/references/integrity-probes.md +27 -0
- package/skills/scip-plan/SKILL.md +39 -65
- package/skills/scip-plan/agents/openai.yaml +2 -2
- package/skills/scip-query/SKILL.md +28 -81
- package/skills/scip-query/agents/openai.yaml +2 -2
- package/skills/scip-query/references/command-guide.md +169 -0
- package/skills/scip-setup/SKILL.md +4 -2
- package/skills/scip-setup/agents/openai.yaml +3 -3
- package/dist/by-kind-XI2CSWEY.js +0 -2
- package/dist/call-graph-UONR6JR5.js +0 -2
- package/dist/call-graph-evidence-lZa2dwQA.d.ts +0 -11
- package/dist/chunk-26CT72HM.js +0 -2
- package/dist/chunk-2E7CX53V.js +0 -2
- package/dist/chunk-2GRUZAQF.js +0 -43
- package/dist/chunk-2LDBDR6J.js +0 -29
- package/dist/chunk-2OOY75BW.js +0 -2
- package/dist/chunk-2R3V3PSD.js +0 -4
- package/dist/chunk-2WC2OEDO.js +0 -4
- package/dist/chunk-35NLDRZC.js +0 -2
- package/dist/chunk-3AF4TUFK.js +0 -3
- package/dist/chunk-3D3QG236.js +0 -2
- package/dist/chunk-3FHOF22C.js +0 -21
- package/dist/chunk-3JKSW6LJ.js +0 -2
- package/dist/chunk-3L2ZBPEX.js +0 -133
- package/dist/chunk-3PJABJSU.js +0 -2
- package/dist/chunk-3SVF22I5.js +0 -2
- package/dist/chunk-3WR4E3A3.js +0 -3
- package/dist/chunk-4FTZ4P5G.js +0 -2
- package/dist/chunk-4UX2F3JX.js +0 -2
- package/dist/chunk-4WNW27SX.js +0 -2
- package/dist/chunk-5ENOG4VP.js +0 -61
- package/dist/chunk-64BFSI5I.js +0 -2
- package/dist/chunk-66DVSJQG.js +0 -455
- package/dist/chunk-6HFCYNYE.js +0 -9
- package/dist/chunk-6PQNKL3G.js +0 -3
- package/dist/chunk-6V5CNXL6.js +0 -2
- package/dist/chunk-6VVV4WRR.js +0 -4
- package/dist/chunk-7BWFZPPZ.js +0 -2
- package/dist/chunk-7CYG22FH.js +0 -2
- package/dist/chunk-7F45LJKI.js +0 -2
- package/dist/chunk-7IWV2EG3.js +0 -3
- package/dist/chunk-7KCZELVM.js +0 -2
- package/dist/chunk-AFHTBORT.js +0 -2
- package/dist/chunk-AVRYW5OZ.js +0 -2
- package/dist/chunk-B3X6KU75.js +0 -2
- package/dist/chunk-B5D7QPBE.js +0 -4
- package/dist/chunk-BBCIS4DX.js +0 -16
- package/dist/chunk-BDUVI7TO.js +0 -3
- package/dist/chunk-BE7ZZTMC.js +0 -2
- package/dist/chunk-BHVUJOCQ.js +0 -3
- package/dist/chunk-BJT7LSPK.js +0 -3
- package/dist/chunk-BKVWUP7Y.js +0 -2
- package/dist/chunk-BQGB4HBD.js +0 -2
- package/dist/chunk-BRV7PIFF.js +0 -2
- package/dist/chunk-CEEZJXEF.js +0 -2
- package/dist/chunk-CIYLO6SI.js +0 -7
- package/dist/chunk-CJZXN4NU.js +0 -2
- package/dist/chunk-CNO7TOKL.js +0 -2
- package/dist/chunk-COF23M5F.js +0 -2
- package/dist/chunk-CWFP7GM5.js +0 -2
- package/dist/chunk-D2DHWI3D.js +0 -2
- package/dist/chunk-D4N5SQ2M.js +0 -4
- package/dist/chunk-DBRSYFXR.js +0 -2
- package/dist/chunk-DHUIOLDT.js +0 -2
- package/dist/chunk-DIRJWYBM.js +0 -6
- package/dist/chunk-DIUFNHRJ.js +0 -35
- package/dist/chunk-DRENNWRG.js +0 -2
- package/dist/chunk-DTZCKZEU.js +0 -4
- package/dist/chunk-DULC3QFP.js +0 -5
- package/dist/chunk-DYGHBZ2N.js +0 -16
- package/dist/chunk-E5R6AQ73.js +0 -40
- package/dist/chunk-E73UNJTF.js +0 -38
- package/dist/chunk-EKV5HX33.js +0 -2
- package/dist/chunk-EQHFIL6T.js +0 -3
- package/dist/chunk-ESIQ66Z7.js +0 -2
- package/dist/chunk-EVFUMY4R.js +0 -3
- package/dist/chunk-F7DY272B.js +0 -2
- package/dist/chunk-FBN2FGXG.js +0 -2
- package/dist/chunk-FDLOBR6P.js +0 -4
- package/dist/chunk-FESCRNVV.js +0 -5
- package/dist/chunk-FFRKR4EQ.js +0 -2
- package/dist/chunk-FGA2U4OR.js +0 -8
- package/dist/chunk-FIQRSHVM.js +0 -2
- package/dist/chunk-FPYLNQPT.js +0 -2
- package/dist/chunk-FRUSVINH.js +0 -2
- package/dist/chunk-GSP44ENC.js +0 -2
- package/dist/chunk-GUFSG5TX.js +0 -2
- package/dist/chunk-GYIZ4NXB.js +0 -2
- package/dist/chunk-GZIUDL6G.js +0 -2
- package/dist/chunk-H5EXS3HM.js +0 -2
- package/dist/chunk-HCXEQRFF.js +0 -18
- package/dist/chunk-HEHOQQKH.js +0 -2
- package/dist/chunk-HKGFPJ4T.js +0 -4
- package/dist/chunk-HLZTEXRA.js +0 -2
- package/dist/chunk-HOENASQM.js +0 -3
- package/dist/chunk-HVF5VBG6.js +0 -2
- package/dist/chunk-I55I7XXP.js +0 -2
- package/dist/chunk-IDFEUFKS.js +0 -2
- package/dist/chunk-IHGQTTVW.js +0 -2
- package/dist/chunk-IICPE7B2.js +0 -20
- package/dist/chunk-IL676XCC.js +0 -18
- package/dist/chunk-IW5XQG5G.js +0 -2
- package/dist/chunk-IZDPJ2QI.js +0 -2
- package/dist/chunk-J66VOFW6.js +0 -5
- package/dist/chunk-JFMEXGFE.js +0 -2
- package/dist/chunk-JGKUET5J.js +0 -3
- package/dist/chunk-JS4PGXMV.js +0 -3
- package/dist/chunk-JWTGMPIT.js +0 -80
- package/dist/chunk-JYR66JN5.js +0 -5
- package/dist/chunk-KFOYCQAJ.js +0 -9
- package/dist/chunk-KLFEXGQA.js +0 -2
- package/dist/chunk-KMVGRIO2.js +0 -2
- package/dist/chunk-KYSDI3GE.js +0 -5
- package/dist/chunk-L6PJPETJ.js +0 -29
- package/dist/chunk-LDVT66YM.js +0 -2
- package/dist/chunk-LEECKFCJ.js +0 -2
- package/dist/chunk-LMZ5PRUV.js +0 -2
- package/dist/chunk-LQRQN2XA.js +0 -2
- package/dist/chunk-LXABEJX3.js +0 -2
- package/dist/chunk-MNV5FSBW.js +0 -3
- package/dist/chunk-MPQ4OTBM.js +0 -2
- package/dist/chunk-MTDBHTSF.js +0 -2
- package/dist/chunk-MV3CDXPI.js +0 -38
- package/dist/chunk-MWN53KRN.js +0 -60
- package/dist/chunk-MXNGIEPU.js +0 -3
- package/dist/chunk-N2ZSIIGR.js +0 -117
- package/dist/chunk-N5B2NILC.js +0 -5
- package/dist/chunk-NJITK2GP.js +0 -2
- package/dist/chunk-NOGJXYFO.js +0 -2
- package/dist/chunk-NOYBFVJA.js +0 -554
- package/dist/chunk-NWQXSFFU.js +0 -3
- package/dist/chunk-ODDUPDP7.js +0 -13
- package/dist/chunk-OLIWTZI3.js +0 -3
- package/dist/chunk-OLNV6I6U.js +0 -2
- package/dist/chunk-OR2E3AGZ.js +0 -2
- package/dist/chunk-OSR2GEHQ.js +0 -2
- package/dist/chunk-OSSESPDX.js +0 -3
- package/dist/chunk-OWOOWNJ5.js +0 -7
- package/dist/chunk-P42EIXTA.js +0 -2
- package/dist/chunk-PJFGPYTU.js +0 -2
- package/dist/chunk-PP7KNN7L.js +0 -2
- package/dist/chunk-PU7T5QYQ.js +0 -2
- package/dist/chunk-PWWAJSKV.js +0 -74
- package/dist/chunk-PZL5T7SU.js +0 -73
- package/dist/chunk-QBE3YX64.js +0 -23
- package/dist/chunk-QGVTFRY2.js +0 -7
- package/dist/chunk-QOJONDS7.js +0 -2
- package/dist/chunk-QU5XRYB5.js +0 -4
- package/dist/chunk-QUU5OBVK.js +0 -11
- package/dist/chunk-RBLQNW26.js +0 -20
- package/dist/chunk-RTQ7NEKG.js +0 -81
- package/dist/chunk-SQXRS7BG.js +0 -4
- package/dist/chunk-SSK6LDPC.js +0 -2
- package/dist/chunk-SZHGTCPP.js +0 -7
- package/dist/chunk-T4N4P2K5.js +0 -16
- package/dist/chunk-TA3QKLLU.js +0 -2
- package/dist/chunk-TEBQMNVI.js +0 -43
- package/dist/chunk-TPFHAQ2G.js +0 -2
- package/dist/chunk-TQPCBMWT.js +0 -5
- package/dist/chunk-TQZV7KV4.js +0 -2
- package/dist/chunk-TRNAEQ6P.js +0 -3
- package/dist/chunk-TY7CRN3Z.js +0 -2
- package/dist/chunk-UHFYCMZO.js +0 -35
- package/dist/chunk-UICY4GTQ.js +0 -7
- package/dist/chunk-UVGEWT4Y.js +0 -26
- package/dist/chunk-UXW33INU.js +0 -29
- package/dist/chunk-VMPRET3I.js +0 -5
- package/dist/chunk-VNLGKHS6.js +0 -6
- package/dist/chunk-VQILFTEH.js +0 -2
- package/dist/chunk-VUPHCS7Y.js +0 -57
- package/dist/chunk-VVZSBTSU.js +0 -23
- package/dist/chunk-VZRNID6A.js +0 -2
- package/dist/chunk-W5OXRYGE.js +0 -7
- package/dist/chunk-W6STWDQI.js +0 -57
- package/dist/chunk-W7CXK74K.js +0 -2
- package/dist/chunk-WB3WYIRE.js +0 -4
- package/dist/chunk-WDNVY4E7.js +0 -20
- package/dist/chunk-WK46TNUM.js +0 -3
- package/dist/chunk-WNTFFKAX.js +0 -12
- package/dist/chunk-WOIKCX6A.js +0 -2
- package/dist/chunk-WUN6KBHV.js +0 -2
- package/dist/chunk-WYCTJDVR.js +0 -2
- package/dist/chunk-WYPL7GF7.js +0 -2
- package/dist/chunk-XDAUYDFT.js +0 -2
- package/dist/chunk-XDQMU3BT.js +0 -2
- package/dist/chunk-XFA4SSO3.js +0 -3
- package/dist/chunk-XGZEP6GR.js +0 -8
- package/dist/chunk-XPDPNWTQ.js +0 -368
- package/dist/chunk-XRYABF57.js +0 -8
- package/dist/chunk-YBGKCQIS.js +0 -2
- package/dist/chunk-YEN6CYC7.js +0 -16
- package/dist/chunk-YF5IB2LF.js +0 -2
- package/dist/chunk-YI2AWIHC.js +0 -3
- package/dist/chunk-YPWBKGFU.js +0 -2
- package/dist/chunk-YPWHBBIS.js +0 -2
- package/dist/chunk-YSH6U3L4.js +0 -3
- package/dist/chunk-YU5DZUZI.js +0 -10
- package/dist/chunk-YWO5DDRC.js +0 -16
- package/dist/chunk-Z4CDXYNQ.js +0 -2
- package/dist/chunk-ZF5KHH7C.js +0 -2
- package/dist/chunk-ZOHS7AQV.js +0 -21
- package/dist/chunk-ZTI4SBFV.js +0 -3
- package/dist/code-MI6F2TTU.js +0 -2
- package/dist/code-result-json-FXALY4HE.js +0 -2
- package/dist/command-descriptors-P34VABY5.js +0 -343
- package/dist/dataflow-4KEMJPC6.js +0 -2
- package/dist/dependence-slice-R7FPWD5M.js +0 -2
- package/dist/deps-7EMQUYUT.js +0 -2
- package/dist/direct-navigation-6YO234F2.js +0 -3
- package/dist/entry-map-KOOLR26E.js +0 -2
- package/dist/files-OPIPJIGZ.js +0 -2
- package/dist/graph-evidence-Bjyky2V4.d.ts +0 -126
- package/dist/hierarchy-QPD2CAER.js +0 -2
- package/dist/imports-M6HUXRXC.js +0 -2
- package/dist/members-I5MEFOCT.js +0 -2
- package/dist/methods-5JYGGHXA.js +0 -2
- package/dist/next-anchor-candidates-BwMczMvX.d.ts +0 -90
- package/dist/output-continuation-command-UPQAAKBP.js +0 -3
- package/dist/output-pagination-3OFL2MJV.js +0 -19
- package/dist/project-reindex-UKKQ5PLS.js +0 -3
- package/dist/queries/anchors.d.ts +0 -123
- package/dist/queries/anchors.js +0 -2
- package/dist/queries/complexity-hotspots.d.ts +0 -40
- package/dist/queries/complexity-hotspots.js +0 -2
- package/dist/queries/convergence.d.ts +0 -33
- package/dist/queries/convergence.js +0 -2
- package/dist/queries/dataflow.d.ts +0 -77
- package/dist/queries/dataflow.js +0 -2
- package/dist/queries/deep-chains.d.ts +0 -5
- package/dist/queries/deep-chains.js +0 -2
- package/dist/queries/extract-candidates.d.ts +0 -52
- package/dist/queries/extract-candidates.js +0 -2
- package/dist/queries/isolated.d.ts +0 -24
- package/dist/queries/isolated.js +0 -2
- package/dist/queries/plan-context.d.ts +0 -33
- package/dist/queries/plan-context.js +0 -2
- package/dist/queries/reference-neighborhood.d.ts +0 -4
- package/dist/queries/reference-neighborhood.js +0 -2
- package/dist/queries/reference-reachability.d.ts +0 -48
- package/dist/queries/reference-reachability.js +0 -2
- package/dist/queries/self-audit.d.ts +0 -63
- package/dist/queries/self-audit.js +0 -2
- package/dist/queries/similar-chains.d.ts +0 -48
- package/dist/queries/similar-chains.js +0 -2
- package/dist/queries/slice.d.ts +0 -4
- package/dist/queries/slice.js +0 -2
- package/dist/queries/stale-abstractions.d.ts +0 -72
- package/dist/queries/stale-abstractions.js +0 -2
- package/dist/queries/system-map.d.ts +0 -449
- package/dist/queries/system-map.js +0 -2
- package/dist/queries/trace.js +0 -2
- package/dist/queries/twin-ab.d.ts +0 -66
- package/dist/queries/twin-ab.js +0 -2
- package/dist/queries/value-flow.d.ts +0 -43
- package/dist/queries/value-flow.js +0 -2
- package/dist/queries/wrapper-candidates.d.ts +0 -34
- package/dist/queries/wrapper-candidates.js +0 -2
- package/dist/refs-PSU4JZZW.js +0 -2
- package/dist/refs-pagination-JG6CJMRC.js +0 -2
- package/dist/slice-HYRATV64.js +0 -2
- package/dist/source-snippet-_wrcgmZc.d.ts +0 -15
- package/dist/stats-OOJ74B32.js +0 -2
- package/dist/surface-VTGDYWF5.js +0 -2
- package/dist/symbol-resolution-WD5EU5JE.js +0 -2
- package/dist/system-LRQNFOR2.js +0 -2
- package/dist/trace-F4B6OLL4.js +0 -2
- package/dist/value-flow-VRPZY72V.js +0 -2
- package/skills/concrete-plan/SKILL.md +0 -8
- package/skills/concrete-plan/agents/openai.yaml +0 -4
|
@@ -91,15 +91,15 @@ The output should include confidence, reasons, counterevidence, and the exact co
|
|
|
91
91
|
|
|
92
92
|
The locality analyzer should not replace existing analyzers. It should complete their story.
|
|
93
93
|
|
|
94
|
-
| Existing analyzer | What it says today
|
|
95
|
-
| ---------------------------------------------------- |
|
|
96
|
-
| `react-large-component-pressure` | This React component is too large.
|
|
97
|
-
| `vue-large-view-pressure` | This Vue SFC is too large.
|
|
98
|
-
| `extract-candidates` | This function
|
|
99
|
-
| `react-hook-candidates`, `vue-composable-candidates` | Several components repeat behavior.
|
|
100
|
-
| `recent-duplicates`, `echo` | New code duplicates older code.
|
|
101
|
-
| `incomplete-migration` | A helper extraction stopped halfway.
|
|
102
|
-
| `co-change` | Files move together historically.
|
|
94
|
+
| Existing analyzer | What it says today | Locality companion question |
|
|
95
|
+
| ---------------------------------------------------- | ------------------------------------------------ | ----------------------------------------------------------------------------------------------------- |
|
|
96
|
+
| `react-large-component-pressure` | This React component is too large. | If pieces are extracted, which ones are private, feature-local, or shared? |
|
|
97
|
+
| `vue-large-view-pressure` | This Vue SFC is too large. | Should extracted child components/composables live beside the view, in the feature, or in app shared? |
|
|
98
|
+
| `extract-candidates` | This function has a region of exclusive callees. | Would the extracted helper have one real owner or a broader consumer set? |
|
|
99
|
+
| `react-hook-candidates`, `vue-composable-candidates` | Several components repeat behavior. | Is the hook/composable local to one feature or reusable across domains? |
|
|
100
|
+
| `recent-duplicates`, `echo` | New code duplicates older code. | Which existing owner should the new code reuse, and would reuse widen the wrong API? |
|
|
101
|
+
| `incomplete-migration` | A helper extraction stopped halfway. | Is the helper in the right place for all remaining call sites? |
|
|
102
|
+
| `co-change` | Files move together historically. | Does history imply a hidden shared owner or only a local synchronization point? |
|
|
103
103
|
|
|
104
104
|
## Algorithm Sketch
|
|
105
105
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scip-query",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.0",
|
|
4
4
|
"description": "Evidence and verification for AI coding agents: map code, reuse concepts, finish migrations, and gate diffs.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -21,7 +21,8 @@
|
|
|
21
21
|
"scripts/verify-scip-windows.mjs",
|
|
22
22
|
"skills/**/*.md",
|
|
23
23
|
"skills/**/agents/*.yaml",
|
|
24
|
-
"skills/**/scripts/*.mjs"
|
|
24
|
+
"skills/**/scripts/*.mjs",
|
|
25
|
+
"scripts/record-review-coverage.mjs"
|
|
25
26
|
],
|
|
26
27
|
"sideEffects": false,
|
|
27
28
|
"exports": {
|
|
@@ -41,10 +42,6 @@
|
|
|
41
42
|
"import": "./dist/queries/architecture.js",
|
|
42
43
|
"types": "./dist/queries/architecture.d.ts"
|
|
43
44
|
},
|
|
44
|
-
"./queries/anchors": {
|
|
45
|
-
"import": "./dist/queries/anchors.js",
|
|
46
|
-
"types": "./dist/queries/anchors.d.ts"
|
|
47
|
-
},
|
|
48
45
|
"./queries/bottlenecks": {
|
|
49
46
|
"import": "./dist/queries/bottlenecks.js",
|
|
50
47
|
"types": "./dist/queries/bottlenecks.d.ts"
|
|
@@ -77,14 +74,6 @@
|
|
|
77
74
|
"import": "./dist/queries/complexity.js",
|
|
78
75
|
"types": "./dist/queries/complexity.d.ts"
|
|
79
76
|
},
|
|
80
|
-
"./queries/complexity-hotspots": {
|
|
81
|
-
"import": "./dist/queries/complexity-hotspots.js",
|
|
82
|
-
"types": "./dist/queries/complexity-hotspots.d.ts"
|
|
83
|
-
},
|
|
84
|
-
"./queries/convergence": {
|
|
85
|
-
"import": "./dist/queries/convergence.js",
|
|
86
|
-
"types": "./dist/queries/convergence.d.ts"
|
|
87
|
-
},
|
|
88
77
|
"./queries/coupling": {
|
|
89
78
|
"import": "./dist/queries/coupling.js",
|
|
90
79
|
"types": "./dist/queries/coupling.d.ts"
|
|
@@ -93,10 +82,6 @@
|
|
|
93
82
|
"import": "./dist/queries/cycles.js",
|
|
94
83
|
"types": "./dist/queries/cycles.d.ts"
|
|
95
84
|
},
|
|
96
|
-
"./queries/dataflow": {
|
|
97
|
-
"import": "./dist/queries/dataflow.js",
|
|
98
|
-
"types": "./dist/queries/dataflow.d.ts"
|
|
99
|
-
},
|
|
100
85
|
"./queries/dependence-slice": {
|
|
101
86
|
"import": "./dist/queries/dependence-slice.js",
|
|
102
87
|
"types": "./dist/queries/dependence-slice.d.ts"
|
|
@@ -113,18 +98,10 @@
|
|
|
113
98
|
"import": "./dist/queries/decorative-checkers.js",
|
|
114
99
|
"types": "./dist/queries/decorative-checkers.d.ts"
|
|
115
100
|
},
|
|
116
|
-
"./queries/deep-chains": {
|
|
117
|
-
"import": "./dist/queries/deep-chains.js",
|
|
118
|
-
"types": "./dist/queries/deep-chains.d.ts"
|
|
119
|
-
},
|
|
120
101
|
"./queries/entry-map": {
|
|
121
102
|
"import": "./dist/queries/entry-map.js",
|
|
122
103
|
"types": "./dist/queries/entry-map.d.ts"
|
|
123
104
|
},
|
|
124
|
-
"./queries/system-map": {
|
|
125
|
-
"import": "./dist/queries/system-map.js",
|
|
126
|
-
"types": "./dist/queries/system-map.d.ts"
|
|
127
|
-
},
|
|
128
105
|
"./queries/deps": {
|
|
129
106
|
"import": "./dist/queries/deps.js",
|
|
130
107
|
"types": "./dist/queries/deps.d.ts"
|
|
@@ -149,10 +126,6 @@
|
|
|
149
126
|
"import": "./dist/queries/evidence.js",
|
|
150
127
|
"types": "./dist/queries/evidence.d.ts"
|
|
151
128
|
},
|
|
152
|
-
"./queries/extract-candidates": {
|
|
153
|
-
"import": "./dist/queries/extract-candidates.js",
|
|
154
|
-
"types": "./dist/queries/extract-candidates.d.ts"
|
|
155
|
-
},
|
|
156
129
|
"./queries/fan": {
|
|
157
130
|
"import": "./dist/queries/fan.js",
|
|
158
131
|
"types": "./dist/queries/fan.d.ts"
|
|
@@ -185,10 +158,6 @@
|
|
|
185
158
|
"import": "./dist/queries/index.js",
|
|
186
159
|
"types": "./dist/queries/index.d.ts"
|
|
187
160
|
},
|
|
188
|
-
"./queries/isolated": {
|
|
189
|
-
"import": "./dist/queries/isolated.js",
|
|
190
|
-
"types": "./dist/queries/isolated.d.ts"
|
|
191
|
-
},
|
|
192
161
|
"./queries/locality-candidates": {
|
|
193
162
|
"import": "./dist/queries/locality-candidates.js",
|
|
194
163
|
"types": "./dist/queries/locality-candidates.d.ts"
|
|
@@ -213,10 +182,6 @@
|
|
|
213
182
|
"import": "./dist/queries/passthrough-candidates.js",
|
|
214
183
|
"types": "./dist/queries/passthrough-candidates.d.ts"
|
|
215
184
|
},
|
|
216
|
-
"./queries/plan-context": {
|
|
217
|
-
"import": "./dist/queries/plan-context.js",
|
|
218
|
-
"types": "./dist/queries/plan-context.d.ts"
|
|
219
|
-
},
|
|
220
185
|
"./queries/context": {
|
|
221
186
|
"import": "./dist/queries/context.js",
|
|
222
187
|
"types": "./dist/queries/context.d.ts"
|
|
@@ -229,30 +194,14 @@
|
|
|
229
194
|
"import": "./dist/queries/redundant-reexports.js",
|
|
230
195
|
"types": "./dist/queries/redundant-reexports.d.ts"
|
|
231
196
|
},
|
|
232
|
-
"./queries/reference-neighborhood": {
|
|
233
|
-
"import": "./dist/queries/reference-neighborhood.js",
|
|
234
|
-
"types": "./dist/queries/reference-neighborhood.d.ts"
|
|
235
|
-
},
|
|
236
|
-
"./queries/reference-reachability": {
|
|
237
|
-
"import": "./dist/queries/reference-reachability.js",
|
|
238
|
-
"types": "./dist/queries/reference-reachability.d.ts"
|
|
239
|
-
},
|
|
240
197
|
"./queries/refs": {
|
|
241
198
|
"import": "./dist/queries/refs.js",
|
|
242
199
|
"types": "./dist/queries/refs.d.ts"
|
|
243
200
|
},
|
|
244
|
-
"./queries/self-audit": {
|
|
245
|
-
"import": "./dist/queries/self-audit.js",
|
|
246
|
-
"types": "./dist/queries/self-audit.d.ts"
|
|
247
|
-
},
|
|
248
201
|
"./queries/similar": {
|
|
249
202
|
"import": "./dist/queries/similar.js",
|
|
250
203
|
"types": "./dist/queries/similar.d.ts"
|
|
251
204
|
},
|
|
252
|
-
"./queries/similar-chains": {
|
|
253
|
-
"import": "./dist/queries/similar-chains.js",
|
|
254
|
-
"types": "./dist/queries/similar-chains.d.ts"
|
|
255
|
-
},
|
|
256
205
|
"./queries/similar-files": {
|
|
257
206
|
"import": "./dist/queries/similar-files.js",
|
|
258
207
|
"types": "./dist/queries/similar-files.d.ts"
|
|
@@ -285,9 +234,9 @@
|
|
|
285
234
|
"import": "./dist/queries/similar-signatures.js",
|
|
286
235
|
"types": "./dist/queries/similar-signatures.d.ts"
|
|
287
236
|
},
|
|
288
|
-
"./queries/slice": {
|
|
289
|
-
"import": "./dist/queries/slice.js",
|
|
290
|
-
"types": "./dist/queries/slice.d.ts"
|
|
237
|
+
"./queries/slice-cohesion": {
|
|
238
|
+
"import": "./dist/queries/slice-cohesion.js",
|
|
239
|
+
"types": "./dist/queries/slice-cohesion.d.ts"
|
|
291
240
|
},
|
|
292
241
|
"./queries/source-inspection": {
|
|
293
242
|
"import": "./dist/queries/source-inspection.js",
|
|
@@ -297,10 +246,6 @@
|
|
|
297
246
|
"import": "./dist/queries/source-search.js",
|
|
298
247
|
"types": "./dist/queries/source-search.d.ts"
|
|
299
248
|
},
|
|
300
|
-
"./queries/stale-abstractions": {
|
|
301
|
-
"import": "./dist/queries/stale-abstractions.js",
|
|
302
|
-
"types": "./dist/queries/stale-abstractions.d.ts"
|
|
303
|
-
},
|
|
304
249
|
"./queries/stats": {
|
|
305
250
|
"import": "./dist/queries/stats.js",
|
|
306
251
|
"types": "./dist/queries/stats.d.ts"
|
|
@@ -321,14 +266,6 @@
|
|
|
321
266
|
"import": "./dist/queries/test-quality.js",
|
|
322
267
|
"types": "./dist/queries/test-quality.d.ts"
|
|
323
268
|
},
|
|
324
|
-
"./queries/trace": {
|
|
325
|
-
"import": "./dist/queries/trace.js",
|
|
326
|
-
"types": "./dist/queries/trace.d.ts"
|
|
327
|
-
},
|
|
328
|
-
"./queries/twin-ab": {
|
|
329
|
-
"import": "./dist/queries/twin-ab.js",
|
|
330
|
-
"types": "./dist/queries/twin-ab.d.ts"
|
|
331
|
-
},
|
|
332
269
|
"./queries/twin-drift": {
|
|
333
270
|
"import": "./dist/queries/twin-drift.js",
|
|
334
271
|
"types": "./dist/queries/twin-drift.d.ts"
|
|
@@ -337,18 +274,10 @@
|
|
|
337
274
|
"import": "./dist/queries/unused-params.js",
|
|
338
275
|
"types": "./dist/queries/unused-params.d.ts"
|
|
339
276
|
},
|
|
340
|
-
"./queries/value-flow": {
|
|
341
|
-
"import": "./dist/queries/value-flow.js",
|
|
342
|
-
"types": "./dist/queries/value-flow.d.ts"
|
|
343
|
-
},
|
|
344
277
|
"./queries/unused-imports": {
|
|
345
278
|
"import": "./dist/queries/unused-imports.js",
|
|
346
279
|
"types": "./dist/queries/unused-imports.d.ts"
|
|
347
280
|
},
|
|
348
|
-
"./queries/wrapper-candidates": {
|
|
349
|
-
"import": "./dist/queries/wrapper-candidates.js",
|
|
350
|
-
"types": "./dist/queries/wrapper-candidates.d.ts"
|
|
351
|
-
},
|
|
352
281
|
"./reindex": {
|
|
353
282
|
"import": "./dist/reindex.js",
|
|
354
283
|
"types": "./dist/reindex.d.ts"
|
|
@@ -356,6 +285,10 @@
|
|
|
356
285
|
"./runtime": {
|
|
357
286
|
"import": "./dist/runtime.js",
|
|
358
287
|
"types": "./dist/runtime.d.ts"
|
|
288
|
+
},
|
|
289
|
+
"./queries/review": {
|
|
290
|
+
"import": "./dist/queries/review.js",
|
|
291
|
+
"types": "./dist/queries/review.d.ts"
|
|
359
292
|
}
|
|
360
293
|
},
|
|
361
294
|
"scripts": {
|
|
@@ -366,12 +299,12 @@
|
|
|
366
299
|
"test": "vitest run --maxWorkers=2",
|
|
367
300
|
"soak:cache-lifecycle": "npm run build && vite-node scripts/cache-lifecycle-soak.ts",
|
|
368
301
|
"test:watch": "vitest",
|
|
369
|
-
"typecheck": "tsc --noEmit && tsc -p tests/fixtures/invocation-coverage-contract/tsconfig.json && tsc -p tests/fixtures/protocol-state-contract/tsconfig.json",
|
|
302
|
+
"typecheck": "tsc --noEmit && tsc -p tests/fixtures/invocation-coverage-contract/tsconfig.json && tsc -p tests/fixtures/protocol-state-contract/tsconfig.json && npm run test:properties:types",
|
|
370
303
|
"audit:prod": "node scripts/audit-production-dependencies.mjs",
|
|
371
304
|
"api:report": "node scripts/api-surface-contract.mjs report",
|
|
372
305
|
"api:check": "npm run build && node scripts/api-surface-contract.mjs check && tsc -p tests/fixtures/public-api-consumer/tsconfig.json",
|
|
373
306
|
"api:update": "npm run build && node scripts/api-surface-contract.mjs update",
|
|
374
|
-
"lint": "npm run format:check && eslint src tests tsup.config.ts scripts/api-surface-contract.mjs scripts/audit-production-dependencies.mjs scripts/benchmark-cold-reindex.ts scripts/benchmark-graph-literal.ts scripts/benchmark-query-service.ts scripts/benchmark-reindex-accounting.ts scripts/benchmark-source-search.ts scripts/build-scip-windows.mjs scripts/cache-lifecycle-soak.ts scripts/codex-exploration-sandbox.mjs scripts/codex-exploration-trial-core.mjs scripts/codex-exploration-trial.mjs scripts/compare-exploration-trials.mjs scripts/exploration-benchmark-core.mjs scripts/exploration-benchmark.mjs scripts/npm-release-state.ts scripts/npm-release.ts scripts/publish-scip-windows.ts scripts/release-npm-guard.ts scripts/release-npm.ts scripts/scip-windows-package-identity.ts scripts/scip-windows-provenance.mjs scripts/scip-windows-release.ts scripts/verify-identity-collision-cli.mjs scripts/verify-scip-windows.mjs scripts/verify-scip-windows-registry.ts skills/scip-explore/scripts/capture-evidence.mjs && npm run api:check && node scripts/check-skill-links.mjs",
|
|
307
|
+
"lint": "npm run format:check && eslint src tests tsup.config.ts scripts/api-surface-contract.mjs scripts/audit-production-dependencies.mjs scripts/benchmark-cold-reindex.ts scripts/benchmark-graph-literal.ts scripts/benchmark-query-service.ts scripts/benchmark-reindex-accounting.ts scripts/benchmark-source-search.ts scripts/build-scip-windows.mjs scripts/cache-lifecycle-soak.ts scripts/record-review-coverage.mjs scripts/change-benchmark-core.mjs scripts/codex-change-trial.mjs benchmarks/change/checks.mjs benchmarks/change/reference-patches.mjs scripts/codex-exploration-sandbox.mjs scripts/codex-exploration-trial-core.mjs scripts/codex-exploration-trial.mjs scripts/compare-exploration-trials.mjs scripts/exploration-benchmark-core.mjs scripts/exploration-benchmark.mjs scripts/npm-release-state.ts scripts/npm-release.ts scripts/publish-scip-windows.ts scripts/release-npm-guard.ts scripts/release-npm.ts scripts/scip-windows-package-identity.ts scripts/scip-windows-provenance.mjs scripts/scip-windows-release.ts scripts/score-detector-labels.ts scripts/verify-identity-collision-cli.mjs scripts/verify-scip-windows.mjs scripts/verify-scip-windows-registry.ts skills/scip-explore/scripts/capture-evidence.mjs scripts/test-properties.mjs && npm run api:check && node scripts/check-skill-links.mjs",
|
|
375
308
|
"build:scip-windows": "node scripts/build-scip-windows.mjs",
|
|
376
309
|
"verify:scip-windows": "node scripts/verify-scip-windows.mjs",
|
|
377
310
|
"verify:identity-collision-cli": "node scripts/verify-identity-collision-cli.mjs",
|
|
@@ -394,7 +327,11 @@
|
|
|
394
327
|
"postinstall": "node dist/postinstall.js || true",
|
|
395
328
|
"publish:scip-windows": "vite-node scripts/publish-scip-windows.ts",
|
|
396
329
|
"release:npm": "vite-node scripts/release-npm.ts",
|
|
397
|
-
"release:npm:dry-run": "vite-node scripts/release-npm.ts --dry-run"
|
|
330
|
+
"release:npm:dry-run": "vite-node scripts/release-npm.ts --dry-run",
|
|
331
|
+
"bench:change": "node scripts/codex-change-trial.mjs",
|
|
332
|
+
"test:properties": "node scripts/test-properties.mjs",
|
|
333
|
+
"test:properties:thorough": "node scripts/test-properties.mjs --thorough",
|
|
334
|
+
"test:properties:types": "tsc -p tests/properties/tsconfig.json"
|
|
398
335
|
},
|
|
399
336
|
"keywords": [
|
|
400
337
|
"scip",
|
|
@@ -453,6 +390,7 @@
|
|
|
453
390
|
"@types/better-sqlite3": "^7.6.12",
|
|
454
391
|
"@types/node": "^22.10.0",
|
|
455
392
|
"eslint": "^10.2.0",
|
|
393
|
+
"fast-check": "4.9.0",
|
|
456
394
|
"globals": "^17.5.0",
|
|
457
395
|
"prettier": "^3.8.4",
|
|
458
396
|
"tsup": "^8.3.0",
|
|
@@ -165,14 +165,14 @@ function parseArgs(argv) {
|
|
|
165
165
|
parsed.warmIterations = positiveInteger(argv[++index], '--warm-iterations');
|
|
166
166
|
} else if (arg === '--command') {
|
|
167
167
|
const value = argv[++index];
|
|
168
|
-
|
|
168
|
+
requireEvidenceArgumentValue(value, '--command');
|
|
169
169
|
parsed.commands.push(splitCommand(value));
|
|
170
170
|
} else if (arg === '--out') {
|
|
171
171
|
parsed.out = argv[++index];
|
|
172
|
-
|
|
172
|
+
requireEvidenceArgumentValue(parsed.out, '--out');
|
|
173
173
|
} else if (arg === '--profile-out') {
|
|
174
174
|
parsed.profileOut = argv[++index];
|
|
175
|
-
|
|
175
|
+
requireEvidenceArgumentValue(parsed.profileOut, '--profile-out');
|
|
176
176
|
} else if (arg === '--no-clear') {
|
|
177
177
|
parsed.noClear = true;
|
|
178
178
|
} else {
|
|
@@ -195,3 +195,7 @@ function splitCommand(value) {
|
|
|
195
195
|
.filter(Boolean)
|
|
196
196
|
.filter((part, index) => !(index === 0 && part === 'scip-query'));
|
|
197
197
|
}
|
|
198
|
+
|
|
199
|
+
function requireEvidenceArgumentValue(value, flag) {
|
|
200
|
+
if (!value) throw new Error(`${flag} requires a value`);
|
|
201
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
import { execFileSync, spawnSync } from 'node:child_process';
|
|
4
|
+
import { existsSync, mkdirSync, readFileSync, realpathSync, statSync, writeFileSync } from 'node:fs';
|
|
5
|
+
import { dirname, isAbsolute, relative, resolve, sep } from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
|
|
8
|
+
const hash = (bytes) => createHash('sha256').update(bytes).digest('hex');
|
|
9
|
+
|
|
10
|
+
/** Wrap an actual test run, proving its coverage was produced against unchanged source bytes. */
|
|
11
|
+
export function recordReviewCoverage({ root, input, output, command, args = [] }) {
|
|
12
|
+
const inputPath = inside(root, input);
|
|
13
|
+
const outputPath = inside(root, output);
|
|
14
|
+
if (inputPath === outputPath) throw new Error('Coverage input and receipt output must be different files.');
|
|
15
|
+
const before = runStableCoverageCommand(root, command, args, inputPath);
|
|
16
|
+
const files = matchedCoverageFiles(root, inputPath, before);
|
|
17
|
+
mkdirSync(dirname(outputPath), { recursive: true });
|
|
18
|
+
writeFileSync(
|
|
19
|
+
outputPath,
|
|
20
|
+
JSON.stringify(
|
|
21
|
+
{ schemaVersion: 1, recordedAt: new Date().toISOString(), command: [command, ...args], files },
|
|
22
|
+
null,
|
|
23
|
+
2,
|
|
24
|
+
) + '\n',
|
|
25
|
+
);
|
|
26
|
+
return { output: outputPath, files: Object.keys(files).length };
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function runStableCoverageCommand(root, command, args, inputPath) {
|
|
30
|
+
const before = sourceHashes(root);
|
|
31
|
+
const previous = existsSync(inputPath) ? statSync(inputPath, { bigint: true }) : null;
|
|
32
|
+
const started = BigInt(Date.now()) * 1_000_000n;
|
|
33
|
+
const result = spawnSync(command, args, { cwd: root, stdio: 'inherit', shell: false });
|
|
34
|
+
if (result.error) throw result.error;
|
|
35
|
+
if (result.status !== 0)
|
|
36
|
+
throw new Error(`Test command did not succeed (${result.signal ?? result.status}). Coverage was not recorded.`);
|
|
37
|
+
const current = statSync(inputPath, { bigint: true });
|
|
38
|
+
if (current.mtimeNs < started || (previous && previous.mtimeNs === current.mtimeNs && previous.ino === current.ino)) {
|
|
39
|
+
throw new Error('The test command did not produce a fresh coverage artifact.');
|
|
40
|
+
}
|
|
41
|
+
const after = sourceHashes(root);
|
|
42
|
+
if (JSON.stringify(before) !== JSON.stringify(after))
|
|
43
|
+
throw new Error('Source changed during the test run. Rerun against stable files.');
|
|
44
|
+
return before;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function matchedCoverageFiles(root, inputPath, before) {
|
|
48
|
+
const istanbul = JSON.parse(readFileSync(inputPath, 'utf8'));
|
|
49
|
+
const files = {};
|
|
50
|
+
for (const [key, coverage] of Object.entries(istanbul)) {
|
|
51
|
+
const file = relative(root, resolve(root, coverage.path ?? key))
|
|
52
|
+
.split(sep)
|
|
53
|
+
.join('/');
|
|
54
|
+
if (!before[file]) continue;
|
|
55
|
+
if (!coverage.statementMap || !coverage.s) throw new Error(`Missing Istanbul statement coverage for ${file}.`);
|
|
56
|
+
files[file] = { sourceHash: before[file], coverage };
|
|
57
|
+
}
|
|
58
|
+
if (Object.keys(files).length === 0) throw new Error('Coverage contains no source files matching this checkout.');
|
|
59
|
+
return files;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function sourceHashes(root) {
|
|
63
|
+
const paths = [
|
|
64
|
+
...new Set(
|
|
65
|
+
execFileSync('git', ['ls-files', '-co', '--exclude-standard', '-z'], {
|
|
66
|
+
cwd: root,
|
|
67
|
+
encoding: 'utf8',
|
|
68
|
+
maxBuffer: 32 * 1024 * 1024,
|
|
69
|
+
}).split('\0'),
|
|
70
|
+
),
|
|
71
|
+
].sort();
|
|
72
|
+
const hashes = {};
|
|
73
|
+
for (const file of paths) {
|
|
74
|
+
if (!/\.[cm]?[jt]sx?$/.test(file) || /(^|\/)(node_modules|dist|build|coverage|\.scipquery)(\/|$)/.test(file))
|
|
75
|
+
continue;
|
|
76
|
+
const absolute = inside(root, file);
|
|
77
|
+
if (existsSync(absolute)) hashes[file] = hash(readFileSync(absolute));
|
|
78
|
+
}
|
|
79
|
+
return hashes;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function inside(root, file) {
|
|
83
|
+
const absolute = resolve(root, file);
|
|
84
|
+
const rel = relative(root, existsSync(absolute) ? realpathSync(absolute) : absolute);
|
|
85
|
+
if (rel === '..' || rel.startsWith('..' + sep) || isAbsolute(rel)) throw new Error(`Path escapes project: ${file}`);
|
|
86
|
+
return absolute;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
|
90
|
+
try {
|
|
91
|
+
const argv = process.argv.slice(2);
|
|
92
|
+
const separator = argv.indexOf('--');
|
|
93
|
+
if (separator < 0 || !argv[separator + 1])
|
|
94
|
+
throw new Error(
|
|
95
|
+
'Usage: node record-review-coverage.mjs [--input coverage/coverage-final.json] [--output .scipquery/coverage.json] -- <test-command> [args...]',
|
|
96
|
+
);
|
|
97
|
+
const flags = argv.slice(0, separator);
|
|
98
|
+
let input = 'coverage/coverage-final.json';
|
|
99
|
+
let output = '.scipquery/coverage.json';
|
|
100
|
+
for (let i = 0; i < flags.length; i += 2) {
|
|
101
|
+
if (!flags[i + 1]) throw new Error(`Missing value for ${flags[i]}`);
|
|
102
|
+
if (flags[i] === '--input') input = flags[i + 1];
|
|
103
|
+
else if (flags[i] === '--output') output = flags[i + 1];
|
|
104
|
+
else throw new Error(`Unknown option: ${flags[i]}`);
|
|
105
|
+
}
|
|
106
|
+
const result = recordReviewCoverage({
|
|
107
|
+
root: realpathSync(process.cwd()),
|
|
108
|
+
input,
|
|
109
|
+
output,
|
|
110
|
+
command: argv[separator + 1],
|
|
111
|
+
args: argv.slice(separator + 2),
|
|
112
|
+
});
|
|
113
|
+
process.stdout.write(`Recorded source-matched coverage for ${result.files} files: ${result.output}\n`);
|
|
114
|
+
} catch (error) {
|
|
115
|
+
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
|
116
|
+
process.exitCode = 1;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -49,25 +49,7 @@ export function sha256(bytes) {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
export function inspectPortableExecutable(bytes, filename = '<binary>') {
|
|
52
|
-
|
|
53
|
-
throw provenanceError('malformed-binary', `${filename} is too short to be a PE executable.`);
|
|
54
|
-
}
|
|
55
|
-
if (bytes[0] !== 0x4d || bytes[1] !== 0x5a) {
|
|
56
|
-
throw provenanceError('malformed-binary', `${filename} is missing the DOS MZ signature.`);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const peOffset = bytes.readUInt32LE(0x3c);
|
|
60
|
-
if (!Number.isSafeInteger(peOffset) || peOffset < 0x40 || peOffset + 26 > bytes.length) {
|
|
61
|
-
throw provenanceError('malformed-binary', `${filename} has an invalid PE header offset.`);
|
|
62
|
-
}
|
|
63
|
-
if (
|
|
64
|
-
bytes[peOffset] !== 0x50 ||
|
|
65
|
-
bytes[peOffset + 1] !== 0x45 ||
|
|
66
|
-
bytes[peOffset + 2] !== 0 ||
|
|
67
|
-
bytes[peOffset + 3] !== 0
|
|
68
|
-
) {
|
|
69
|
-
throw provenanceError('malformed-binary', `${filename} is missing the PE signature.`);
|
|
70
|
-
}
|
|
52
|
+
const peOffset = portableExecutableHeaderOffset(bytes, filename);
|
|
71
53
|
|
|
72
54
|
const machineCode = bytes.readUInt16LE(peOffset + 4);
|
|
73
55
|
const target = WINDOWS_SIDECAR_TARGETS.find((candidate) => candidate.peMachineCode === machineCode);
|
|
@@ -94,6 +76,34 @@ export function inspectPortableExecutable(bytes, filename = '<binary>') {
|
|
|
94
76
|
};
|
|
95
77
|
}
|
|
96
78
|
|
|
79
|
+
function portableExecutableHeaderOffset(bytes, filename) {
|
|
80
|
+
if (!Buffer.isBuffer(bytes) || bytes.length < 0x40) {
|
|
81
|
+
throw provenanceError('malformed-binary', `${filename} is too short to be a PE executable.`);
|
|
82
|
+
}
|
|
83
|
+
if (bytes[0] !== 0x4d || bytes[1] !== 0x5a) {
|
|
84
|
+
throw provenanceError('malformed-binary', `${filename} is missing the DOS MZ signature.`);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const peOffset = bytes.readUInt32LE(0x3c);
|
|
88
|
+
if (!Number.isSafeInteger(peOffset) || peOffset < 0x40 || peOffset + 26 > bytes.length) {
|
|
89
|
+
throw provenanceError('malformed-binary', `${filename} has an invalid PE header offset.`);
|
|
90
|
+
}
|
|
91
|
+
validatePortableExecutableSignature(bytes, peOffset, filename);
|
|
92
|
+
|
|
93
|
+
return peOffset;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function validatePortableExecutableSignature(bytes, peOffset, filename) {
|
|
97
|
+
if (
|
|
98
|
+
bytes[peOffset] !== 0x50 ||
|
|
99
|
+
bytes[peOffset + 1] !== 0x45 ||
|
|
100
|
+
bytes[peOffset + 2] !== 0 ||
|
|
101
|
+
bytes[peOffset + 3] !== 0
|
|
102
|
+
) {
|
|
103
|
+
throw provenanceError('malformed-binary', `${filename} is missing the PE signature.`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
97
107
|
export function inspectWindowsSidecarBinary(file, readFile = readFileSync) {
|
|
98
108
|
const bytes = readFile(file);
|
|
99
109
|
const pe = inspectPortableExecutable(bytes, file);
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scip-architecture-review
|
|
3
|
+
description: Evaluate architecture and maintainability for coding agents. Find ambiguous owners, duplicated rules, leaked coordination, misleading boundaries, and dependency problems; justify changes from behavior and consumers.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SCIP Architecture and Maintainability Review
|
|
7
|
+
|
|
8
|
+
Load `$scip-query` for mechanics. Use ordinary file tools for implementation reads and scip-query for the relationships and findings that guide the investigation. This workflow covers first-use assessment, later design reassessment, and the structural consequences of changes. Use `$scip-integrity-audit` when the issue is whether a feature fulfills its promise.
|
|
9
|
+
|
|
10
|
+
Choose from the shared guide's [architecture and dependency commands](../scip-query/references/command-guide.md#architecture-and-dependencies), [simplification and cleanup commands](../scip-query/references/command-guide.md#simplification-and-cleanup), or [framework investigations](../scip-query/references/command-guide.md#framework-investigations) when a concrete concern calls for that analysis. Each row explains its question, index requirement and limits.
|
|
11
|
+
|
|
12
|
+
A module assigns responsibility to a group of code, such as storing documents or calculating eligibility. Its interface is the operations and rules consumers must understand: inputs, results, errors, effects, and ordering. A dependency exists when one implementation relies on another's behavior or representation.
|
|
13
|
+
|
|
14
|
+
Maintainability is the ability to change required behavior correctly without unnecessary discovery, duplicated decisions, or coordinated edits. Evaluate mistakes the structure would invite an agent to make and the facts it must discover to avoid them. File size, folder names, interface counts, and clean dependency rules do not establish design quality.
|
|
15
|
+
|
|
16
|
+
## Orient without inventing owners
|
|
17
|
+
|
|
18
|
+
Run `scip-query system --source` for current TS/JS module groups and imports, including groups without findings. It needs no index or architecture configuration. Group IDs distinguish declared boundaries from provisional directories. Read coverage and missing configuration before claiming whole-repository visibility.
|
|
19
|
+
|
|
20
|
+
Use a printed group selector to investigate its files, dependencies, consumers, source interface evidence, findings, and limits. Use `health` for ranked cleanup candidates when useful and `architecture` for declared policy. Neither substitutes for behavior.
|
|
21
|
+
|
|
22
|
+
For a large review, record groups inventoried, relationships investigated, concerns confirmed/rejected, and unresolved scopes. Follow important cross-group relations as well as directory children. A structural inventory of all files is not a behavioral review of all modules.
|
|
23
|
+
|
|
24
|
+
## Evaluate maintenance consequences
|
|
25
|
+
|
|
26
|
+
| Concern | Evidence to seek | Counterevidence |
|
|
27
|
+
| ------------------------------------------ | --------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
|
|
28
|
+
| Unclear owner or competing implementations | One rule is independently decided in live paths; fixes or thresholds disagree | Different contracts, versions, platforms, or compatibility obligations |
|
|
29
|
+
| Caller coordination | Consumers repeat preparation, transaction, ordering, or cleanup for one responsibility | The consumer owns the broader operation or transaction |
|
|
30
|
+
| Weak interface | Consumers require internal formats or undocumented ordering | Required control, performance, or interoperability |
|
|
31
|
+
| Mixed responsibilities | Operations have separate state, consumers, dependencies, and reasons to change | A shared lifecycle, invariant, or public capability |
|
|
32
|
+
| Dependency direction | Independent policy imports delivery mechanisms; a cycle obstructs a required separation | Deliberate orchestration or a grouping-only cycle without a file cycle |
|
|
33
|
+
| Unnecessary mechanisms | Copies, wrappers, registries, or pipelines require several updates for one decision | An adapter isolates a real change boundary or distinct contract |
|
|
34
|
+
|
|
35
|
+
A deep module provides useful behavior while exposing relatively little implementation knowledge to callers. Examine required knowledge and coordination. One argument with dozens of interacting settings does not establish depth; adding implementation lines does not improve it.
|
|
36
|
+
|
|
37
|
+
Read relevant implementations AND consumers. State: “When an agent changes X, it must also discover/change Y because Z; this proposal removes that obligation by …”. Name the strongest example that could invalidate the proposal. Similar syntax or names do not establish interchangeable behavior.
|
|
38
|
+
|
|
39
|
+
For recurring bugs, trace mechanisms to a specific violated rule, test competing explanations, and investigate predicted instances elsewhere. A missed predicted instance does not by itself disprove the diagnosis or establish absence.
|
|
40
|
+
|
|
41
|
+
## Preserve justified decisions
|
|
42
|
+
|
|
43
|
+
A configured boundary maps files to a named policy group. An allowed-dependency row states which groups it may depend on; missing rows remain unknown. Record reasons for important directions in design documentation, not only current imports.
|
|
44
|
+
|
|
45
|
+
Use existing `.scipquery.json` controls for membership, allowed directions, and relevant cycle/coverage constraints. Do not automatically bless all current edges, raise size limits, or widen allowances to clear a report. Counts locate candidates; they are not universal design laws.
|
|
46
|
+
|
|
47
|
+
Later reassess responsibilities and allowances from present behavior and realistic changes. Report policy compliance separately from whether the policy still serves the project.
|
|
48
|
+
|
|
49
|
+
## Recommend or implement
|
|
50
|
+
|
|
51
|
+
Record exact code/consumers, the maintenance mistake invited, supporting evidence and limits, counterevidence, proposed owner/interface, preserved behavior, what disappears, and checks exposing a mistaken change.
|
|
52
|
+
|
|
53
|
+
Combine symptoms of the same scattered rule. Compare alternative shapes when they materially change consumers or state ownership; do not require several designs for a trivial edit.
|
|
54
|
+
|
|
55
|
+
For larger simplifications read [design checks](references/design-checks.md) and use `$scip-plan`. Carry authorized fixes through migration, retirement, behavioral checks, current-source review, and fresh impact analysis. Review-only work stops at an evidence-backed assessment.
|
|
56
|
+
|
|
57
|
+
The result is supported decisions and specific unknowns, not a grade. Retaining the design is valid when a concern does not survive investigation.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Architecture and Maintainability"
|
|
3
|
+
short_description: "Review owners, interfaces, and dependencies."
|
|
4
|
+
default_prompt: "Use $scip-architecture-review to identify concrete maintenance mistakes this design invites and assess changes using behavior and consumers."
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Design checks
|
|
2
|
+
|
|
3
|
+
Load for concerns sharing a design cause or changes crossing owners.
|
|
4
|
+
|
|
5
|
+
Look for one responsibility behind several mechanisms: repeated resource lifecycles, copied failure policy, separate registries/docs describing one command surface, or repeated eligibility calculations. Establish sameness from behavior, state, and consumers.
|
|
6
|
+
|
|
7
|
+
A consolidation should remove duplicated knowledge or prevent inconsistent decisions. A wrapper accepting many callbacks may move coordination without removing it. Preserve grammar, protocol, platform, and compatibility differences when they change the contract.
|
|
8
|
+
|
|
9
|
+
Consider removing a redundant layer, placing a repeated rule behind an existing owner, deriving repeated representations from an authoritative registry, or separating unrelated responsibilities. Choose a coherent mechanism preserving behavior; minimum file size and line count are not objectives.
|
|
10
|
+
|
|
11
|
+
Use realistic product changes to test the benefit: alter eligibility, replace a storage representation, add an operation, or change retry policy. Identify the old places an agent must discover/coordinate and the proposed places. Explain remaining necessary cross-module edits.
|
|
12
|
+
|
|
13
|
+
Read consumers capable of refuting the interface. Preserve incomplete consumer coverage; a simple caller does not prove every caller can use the same operation.
|
|
14
|
+
|
|
15
|
+
For multi-step work keep concerns, owners, consumers, dispositions, dependency order, and checks in one plan. Link symptoms to their shared cause. Name obsolete implementations, routes, registrations, fallbacks, artifacts, and docs to retire. Preserve resource identity, state transitions, and observable ordering. Adding a new implementation beside an old live one does not complete consolidation.
|
|
16
|
+
|
|
17
|
+
Evaluate the workflow using representative tasks with and without the tool/skill, the same model and constraints, and repeated trials where variability matters. Include coherent designs and intentional adapters alongside defects. Inspect actual patches and tests for missed consumers, duplicated rules, incorrect behavior, and unnecessary edits. Measure structural accuracy separately from design conclusions; fewer findings do not prove better agent-produced code.
|