scip-query 0.19.5 → 0.19.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +85 -1
- package/README.md +259 -53
- package/dist/augment-vue-worker.js +1 -1
- package/dist/chunk-2465DLHK.js +3 -0
- package/dist/{chunk-7GXM52MI.js → chunk-24GTWJ3N.js} +2 -2
- package/dist/{chunk-NH5ALKPW.js → chunk-2SNGN6U4.js} +2 -2
- package/dist/{chunk-3SVWW4PN.js → chunk-2U3OLUNJ.js} +2 -2
- package/dist/{chunk-XLTP42QA.js → chunk-33KUO7CG.js} +2 -2
- package/dist/{chunk-54HA4ZXH.js → chunk-33XTHFKR.js} +2 -2
- package/dist/{chunk-ZGZUZ7XE.js → chunk-3EDFLQ6A.js} +2 -2
- package/dist/chunk-3ZSJ3PWF.js +16 -0
- package/dist/{chunk-F6O7AAC3.js → chunk-43KC6EQZ.js} +2 -2
- package/dist/{chunk-I5RJM53C.js → chunk-464PLI5O.js} +2 -2
- package/dist/chunk-46XGSFNI.js +2 -0
- package/dist/{chunk-M7AIS73L.js → chunk-47BU5Z4T.js} +2 -2
- package/dist/chunk-4BV4QAZJ.js +5 -0
- package/dist/chunk-4YTUWQ6M.js +18 -0
- package/dist/{chunk-RV2FQIX3.js → chunk-5ML2BNRH.js} +2 -2
- package/dist/{chunk-6NSFJYRC.js → chunk-5YLUDDAF.js} +2 -2
- package/dist/chunk-67QRR5YC.js +6 -0
- package/dist/{chunk-GPBBJ5Y4.js → chunk-6GXYN7YA.js} +3 -3
- package/dist/{chunk-4333ETTV.js → chunk-6M7RONVB.js} +2 -2
- package/dist/chunk-6YTSKJJ3.js +2 -0
- package/dist/{chunk-QDV6RDCP.js → chunk-7FT5Y65S.js} +2 -2
- package/dist/{chunk-XTX6QHOF.js → chunk-7KYNAMMH.js} +2 -2
- package/dist/{chunk-DZ74OMG6.js → chunk-7LSVMFX7.js} +2 -2
- package/dist/{chunk-VTKGCT3V.js → chunk-7QHY3H7P.js} +2 -2
- package/dist/{chunk-MITTUCEH.js → chunk-7RAG65VK.js} +2 -2
- package/dist/{chunk-25LPM4DG.js → chunk-7SWJEWJF.js} +2 -2
- package/dist/{chunk-52ZYCAEO.js → chunk-7VCOXZH3.js} +2 -2
- package/dist/chunk-A2TNXAXO.js +8 -0
- package/dist/{chunk-IUFDSKGG.js → chunk-A3QXWFBK.js} +2 -2
- package/dist/{chunk-4T3LTWUS.js → chunk-AA4UWRNL.js} +2 -2
- package/dist/{chunk-4SALD7RU.js → chunk-ACAM6O5R.js} +2 -2
- package/dist/chunk-APMMR5Y2.js +2 -0
- package/dist/chunk-AQOFWNQJ.js +1 -0
- package/dist/chunk-AZFUMCQB.js +2 -0
- package/dist/{chunk-M7MTH5NR.js → chunk-BDOIKGDI.js} +2 -2
- package/dist/{chunk-BTEE5NZQ.js → chunk-BNXICU42.js} +2 -2
- package/dist/chunk-C5Q44Q5D.js +3 -0
- package/dist/{chunk-EOOJGLDU.js → chunk-CTF2GDEX.js} +2 -2
- package/dist/chunk-DHEQMPLW.js +2 -0
- package/dist/{chunk-IZKFSVBV.js → chunk-DQBCO2UY.js} +2 -2
- package/dist/{chunk-7B3UPBVA.js → chunk-DQGSM7RZ.js} +2 -2
- package/dist/chunk-E2LAW7SL.js +30 -0
- package/dist/chunk-E3HYEQO7.js +2 -0
- package/dist/chunk-E4NFOAD4.js +6 -0
- package/dist/chunk-E5HNT4X2.js +3 -0
- package/dist/{chunk-J77UIT3I.js → chunk-ELLMY7XJ.js} +2 -2
- package/dist/chunk-FD3HFKXR.js +5 -0
- package/dist/{chunk-SOAT6NLA.js → chunk-FIJCV235.js} +2 -2
- package/dist/{chunk-H7UKLTWJ.js → chunk-FJ5UDTQF.js} +2 -2
- package/dist/{chunk-HEXVUYFQ.js → chunk-GHKEJTCE.js} +2 -2
- package/dist/{chunk-LBMJEAEW.js → chunk-GLZTVKAB.js} +3 -3
- package/dist/{chunk-FWUUZTIO.js → chunk-GNC4JVAN.js} +2 -2
- package/dist/chunk-HIB452NU.js +949 -0
- package/dist/{chunk-NRCXJDHL.js → chunk-HZYDQPNY.js} +2 -2
- package/dist/chunk-IF6FP6B2.js +66 -0
- package/dist/{chunk-4RSI5EMG.js → chunk-JAY7YWS3.js} +2 -2
- package/dist/{chunk-STOL2BTL.js → chunk-JHF3E4YM.js} +2 -2
- package/dist/chunk-JORHF5AL.js +108 -0
- package/dist/{chunk-A2EZV2UM.js → chunk-K2WO7XY7.js} +2 -2
- package/dist/chunk-KFZNKUNT.js +2 -0
- package/dist/{chunk-YVVCVR2L.js → chunk-KJ2IIBZN.js} +2 -2
- package/dist/{chunk-QGXBRIM5.js → chunk-KKME5ZAI.js} +2 -2
- package/dist/chunk-KSGTULOS.js +9 -0
- package/dist/{chunk-UOAV44HR.js → chunk-KXDJAG4N.js} +3 -3
- package/dist/{chunk-UKZBVX4U.js → chunk-L4S2A7BV.js} +2 -2
- package/dist/chunk-LP3ARJKF.js +8 -0
- package/dist/chunk-LSOR3LQG.js +3 -0
- package/dist/{chunk-Q4IIEGXJ.js → chunk-MLFZP76A.js} +2 -2
- package/dist/{chunk-WQTAC523.js → chunk-MNSTUIDD.js} +2 -2
- package/dist/{chunk-VXQNNXJE.js → chunk-MSBDMFER.js} +2 -2
- package/dist/{chunk-X6D5IC6I.js → chunk-MZZBAITE.js} +5 -5
- package/dist/{chunk-I5AWSI2G.js → chunk-NE3TZUCI.js} +2 -2
- package/dist/{chunk-6E7UTQY7.js → chunk-NTUMF2X3.js} +2 -2
- package/dist/{chunk-S44IULR6.js → chunk-O23I56NA.js} +2 -2
- package/dist/{chunk-CFMXJPHH.js → chunk-O3O4XXO6.js} +2 -2
- package/dist/{chunk-IG7N5ZIK.js → chunk-OUBAF226.js} +2 -2
- package/dist/chunk-P3UO3EH3.js +2 -0
- package/dist/{chunk-YNRNA5LK.js → chunk-QGGLL3UH.js} +2 -2
- package/dist/chunk-QIQ63BHW.js +16 -0
- package/dist/{chunk-VGRICIQI.js → chunk-QJIVBYEK.js} +2 -2
- package/dist/chunk-QOXBSI6G.js +20 -0
- package/dist/chunk-QXK6UUSM.js +2 -0
- package/dist/{chunk-XYADIZHU.js → chunk-RA3AYNWP.js} +2 -2
- package/dist/chunk-RJMDJR3A.js +2 -0
- package/dist/{chunk-NSS46APD.js → chunk-RLH5VUMG.js} +2 -2
- package/dist/{chunk-GBQ5NYPR.js → chunk-S4S2WOIX.js} +6 -6
- package/dist/{chunk-YIJ7ZAA4.js → chunk-SERUIGV5.js} +2 -2
- package/dist/{chunk-FECYOO5O.js → chunk-SMQWE25B.js} +2 -2
- package/dist/{chunk-R4FQGQ4X.js → chunk-TAVELHYR.js} +2 -2
- package/dist/{chunk-U6WNH5GC.js → chunk-TWMJ3Y3G.js} +2 -2
- package/dist/chunk-VAXNI5NE.js +146 -0
- package/dist/chunk-VVY2G5ET.js +2 -0
- package/dist/{chunk-WER3B7MI.js → chunk-W3DBTGL4.js} +2 -2
- package/dist/{chunk-CNKAGUPL.js → chunk-WANA4KAQ.js} +2 -2
- package/dist/chunk-WJL2L6MV.js +60 -0
- package/dist/chunk-WUW7YUAH.js +11 -0
- package/dist/{chunk-QVWS2VWZ.js → chunk-WWKWUPSU.js} +2 -2
- package/dist/{chunk-ABMYA4TN.js → chunk-WY45BHKQ.js} +2 -2
- package/dist/chunk-X4FR5BZF.js +9 -0
- package/dist/chunk-X6RKPDY7.js +2 -0
- package/dist/{chunk-ZXJYMGD3.js → chunk-YLFORA5G.js} +2 -2
- package/dist/{chunk-KP6XRY5Z.js → chunk-YTVWB7YJ.js} +2 -2
- package/dist/{chunk-4XTA5OMB.js → chunk-ZCEJ63SP.js} +2 -2
- package/dist/{chunk-HKEHS2AS.js → chunk-ZJ5CBXK3.js} +2 -2
- package/dist/chunk-ZL2OGDCD.js +2 -0
- package/dist/cli.js +8 -3
- package/dist/command-descriptors-ZW5J4ZEM.js +631 -0
- package/dist/{config-types-D20KuvvZ.d.ts → config-types-B6MEoRNy.d.ts} +8 -0
- package/dist/{db-G_II8yXU.d.ts → db-DYLKr9Wn.d.ts} +18 -1
- package/dist/direct-navigation-42YHQPOI.js +3 -0
- package/dist/{health-oblXYgkF.d.ts → health-DgxIDXJC.d.ts} +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/postinstall.js +1 -1
- package/dist/queries/affected.d.ts +2 -2
- package/dist/queries/affected.js +1 -1
- package/dist/queries/architecture.d.ts +2 -2
- package/dist/queries/architecture.js +1 -1
- package/dist/queries/bottlenecks.d.ts +2 -2
- package/dist/queries/bottlenecks.js +1 -1
- package/dist/queries/by-kind.d.ts +2 -2
- package/dist/queries/by-kind.js +1 -1
- package/dist/queries/call-graph.d.ts +2 -2
- package/dist/queries/call-graph.js +1 -1
- package/dist/queries/change-surface.d.ts +2 -2
- package/dist/queries/change-surface.js +1 -1
- package/dist/queries/cleanup-plan.d.ts +2 -2
- package/dist/queries/cleanup-plan.js +1 -1
- package/dist/queries/co-change.d.ts +2 -2
- package/dist/queries/co-change.js +1 -1
- package/dist/queries/code.d.ts +2 -2
- package/dist/queries/code.js +1 -1
- package/dist/queries/complexity-hotspots.d.ts +2 -2
- package/dist/queries/complexity-hotspots.js +1 -1
- package/dist/queries/complexity.d.ts +2 -2
- package/dist/queries/complexity.js +1 -1
- package/dist/queries/convergence.d.ts +2 -2
- package/dist/queries/convergence.js +1 -1
- package/dist/queries/coupling.d.ts +2 -2
- package/dist/queries/coupling.js +1 -1
- package/dist/queries/cycles.d.ts +2 -2
- package/dist/queries/cycles.js +1 -1
- package/dist/queries/dataflow.d.ts +2 -2
- package/dist/queries/dataflow.js +1 -1
- package/dist/queries/dead.d.ts +2 -2
- package/dist/queries/dead.js +1 -1
- package/dist/queries/decorative-checkers.d.ts +3 -3
- package/dist/queries/decorative-checkers.js +1 -1
- package/dist/queries/deep-chains.d.ts +2 -2
- package/dist/queries/deep-chains.js +1 -1
- package/dist/queries/deps.d.ts +2 -2
- package/dist/queries/deps.js +1 -1
- package/dist/queries/diff-gate.d.ts +30 -2
- package/dist/queries/diff-gate.js +1 -1
- package/dist/queries/diff-impact.d.ts +2 -2
- package/dist/queries/diff-impact.js +1 -1
- package/dist/queries/doc-drift.d.ts +2 -2
- package/dist/queries/doc-drift.js +1 -1
- package/dist/queries/drift.d.ts +2 -2
- package/dist/queries/drift.js +1 -1
- package/dist/queries/duplicate-bodies.d.ts +2 -2
- package/dist/queries/duplicate-bodies.js +1 -1
- package/dist/queries/extract-candidates.d.ts +2 -2
- package/dist/queries/extract-candidates.js +1 -1
- package/dist/queries/fan.d.ts +2 -2
- package/dist/queries/fan.js +1 -1
- package/dist/queries/files.d.ts +2 -2
- package/dist/queries/health.d.ts +3 -3
- 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 +2 -2
- package/dist/queries/hotspots.js +1 -1
- package/dist/queries/imports.d.ts +2 -2
- package/dist/queries/imports.js +1 -1
- package/dist/queries/incomplete-migration.d.ts +2 -2
- package/dist/queries/incomplete-migration.js +1 -1
- package/dist/queries/index.d.ts +17 -3
- package/dist/queries/index.js +1 -1
- package/dist/queries/isolated.d.ts +2 -2
- package/dist/queries/isolated.js +1 -1
- package/dist/queries/locality-candidates.d.ts +2 -2
- 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.d.ts +2 -2
- package/dist/queries/methods.js +1 -1
- package/dist/queries/not-implemented.d.ts +3 -3
- package/dist/queries/not-implemented.js +1 -1
- package/dist/queries/outline.d.ts +2 -2
- package/dist/queries/outline.js +1 -1
- package/dist/queries/passthrough-candidates.d.ts +2 -2
- package/dist/queries/passthrough-candidates.js +1 -1
- package/dist/queries/plan-context.d.ts +2 -2
- package/dist/queries/plan-context.js +1 -1
- package/dist/queries/react-component-duplicates.d.ts +2 -2
- package/dist/queries/react-component-duplicates.js +1 -1
- package/dist/queries/react-hook-candidates.d.ts +2 -2
- package/dist/queries/react-hook-candidates.js +1 -1
- package/dist/queries/react-large-component-pressure.d.ts +2 -2
- package/dist/queries/react-large-component-pressure.js +1 -1
- package/dist/queries/recent-duplicates.d.ts +2 -2
- package/dist/queries/recent-duplicates.js +1 -1
- package/dist/queries/redundant-reexports.d.ts +2 -2
- package/dist/queries/redundant-reexports.js +1 -1
- package/dist/queries/refs.d.ts +2 -2
- package/dist/queries/refs.js +1 -1
- package/dist/queries/self-audit.d.ts +2 -2
- package/dist/queries/self-audit.js +1 -1
- package/dist/queries/similar-chains.d.ts +2 -2
- package/dist/queries/similar-chains.js +1 -1
- package/dist/queries/similar-files.d.ts +2 -2
- package/dist/queries/similar-files.js +1 -1
- package/dist/queries/similar-signatures.d.ts +2 -2
- package/dist/queries/similar-signatures.js +1 -1
- package/dist/queries/similar.d.ts +2 -2
- package/dist/queries/similar.js +1 -1
- package/dist/queries/slice.d.ts +2 -2
- package/dist/queries/slice.js +1 -1
- package/dist/queries/stale-abstractions.d.ts +2 -2
- package/dist/queries/stale-abstractions.js +1 -1
- package/dist/queries/stats.d.ts +2 -2
- package/dist/queries/stats.js +1 -1
- package/dist/queries/surface.d.ts +2 -2
- package/dist/queries/surface.js +1 -1
- package/dist/queries/symbols.d.ts +2 -2
- package/dist/queries/symbols.js +1 -1
- package/dist/queries/system.d.ts +2 -2
- package/dist/queries/system.js +1 -1
- package/dist/queries/test-quality.d.ts +2 -2
- package/dist/queries/test-quality.js +1 -1
- package/dist/queries/trace.d.ts +2 -2
- package/dist/queries/trace.js +1 -1
- package/dist/queries/twin-ab.d.ts +3 -3
- package/dist/queries/twin-ab.js +1 -1
- package/dist/queries/twin-drift.d.ts +2 -2
- package/dist/queries/twin-drift.js +1 -1
- package/dist/queries/unused-imports.d.ts +2 -2
- package/dist/queries/unused-imports.js +1 -1
- package/dist/queries/unused-params.d.ts +2 -2
- package/dist/queries/unused-params.js +1 -1
- package/dist/queries/vue-component-duplicates.d.ts +2 -2
- package/dist/queries/vue-component-duplicates.js +1 -1
- package/dist/queries/vue-composable-candidates.d.ts +2 -2
- package/dist/queries/vue-composable-candidates.js +1 -1
- package/dist/queries/vue-large-view-pressure.d.ts +2 -2
- package/dist/queries/vue-large-view-pressure.js +1 -1
- package/dist/queries/wrapper-candidates.d.ts +2 -2
- package/dist/queries/wrapper-candidates.js +1 -1
- package/dist/reindex-worker.js +26 -26
- package/dist/reindex.d.ts +14 -4
- package/dist/reindex.js +34 -38
- package/dist/runtime.d.ts +167 -18
- package/dist/runtime.js +3 -2
- 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-kRpaexVJ.d.ts → scip-cli-Cc6c00-a.d.ts} +6 -2
- package/dist/watch-server.js +5 -5
- package/docs/AGENT_GUIDE.md +20 -4
- package/docs/AI_FAILURE_MODES.md +17 -17
- package/docs/API_EVOLUTION.md +71 -0
- package/docs/CLI_JSON_OUTPUT.md +168 -0
- package/docs/COMMAND_REFERENCE.md +10 -6
- package/docs/COMMITTED_RECORD_COMPATIBILITY.md +117 -0
- package/docs/CONFIGURATION_WRITE_SAFETY.md +130 -0
- package/docs/DETECTOR_GUIDE.md +46 -46
- package/docs/DURABILITY.md +103 -0
- package/docs/INDEX_GENERATIONS.md +121 -0
- package/docs/LOCK_PROTOCOL.md +133 -0
- package/docs/MAILBOX_LIFECYCLE.md +197 -0
- package/docs/REINDEX_METADATA_COMPATIBILITY.md +84 -0
- package/docs/RUST_DURABLE_SESSION_PROTOCOL.md +126 -0
- package/docs/SECURITY_MODEL.md +129 -0
- package/docs/TELEMETRY_RETENTION.md +77 -0
- package/docs/TIME_SEMANTICS.md +77 -0
- package/docs/WATCH_REFRESH_REQUESTS.md +110 -0
- package/docs/WINDOWS_SIDECAR_RELEASE.md +298 -0
- package/docs/analyzer-validation-ledger.md +24 -23
- package/docs/schemas/cli-json-envelope.schema.json +53 -0
- package/docs/schemas/cli-output-page.schema.json +104 -0
- package/docs/schemas/npm-release-state.schema.json +146 -0
- package/docs/schemas/outcome-event-record.schema.json +39 -0
- package/docs/schemas/project-config.schema.json +247 -0
- package/docs/schemas/suppression-record.schema.json +31 -0
- package/docs/schemas/windows-sidecar-provenance.schema.json +137 -0
- package/package.json +21 -10
- package/scripts/build-scip-windows.mjs +180 -61
- package/scripts/scip-windows-provenance.mjs +364 -0
- package/scripts/verify-scip-windows.mjs +29 -0
- package/skills/_shared/SKILL.md +90 -229
- package/skills/_shared/agents/openai.yaml +1 -1
- package/skills/_shared/references/agent-contract-catalog.md +105 -0
- package/skills/_shared/references/command-catalog.md +118 -0
- package/skills/_shared/references/detector-precision-and-diffgate.md +59 -0
- package/skills/_shared/references/evidence-and-dead-code.md +25 -0
- package/skills/scip-audit/SKILL.md +77 -0
- package/skills/scip-audit/agents/openai.yaml +4 -0
- package/skills/scip-audit/references/claims.md +98 -0
- package/skills/scip-audit/references/cleanup.md +101 -0
- package/skills/scip-audit/references/directory.md +222 -0
- package/skills/scip-audit/references/frontend.md +130 -0
- package/skills/scip-audit/references/integrity.md +154 -0
- package/skills/scip-audit/references/maintainability.md +162 -0
- package/skills/scip-audit/references/twin-drift.md +104 -0
- package/skills/scip-diagnose/SKILL.md +52 -0
- package/skills/scip-diagnose/agents/openai.yaml +4 -0
- package/skills/scip-diagnose/references/debug.md +117 -0
- package/skills/{scip-probe-reachability/SKILL.md → scip-diagnose/references/probe-reachability.md} +11 -27
- package/skills/scip-diagnose/references/root-cause.md +145 -0
- package/skills/scip-diagnose/references/triage.md +119 -0
- package/skills/scip-explore/SKILL.md +54 -85
- package/skills/scip-explore/agents/openai.yaml +2 -2
- package/skills/scip-explore/references/diagrams.md +40 -0
- package/skills/scip-explore/references/language-playbook.md +49 -0
- package/skills/scip-improve/SKILL.md +56 -0
- package/skills/scip-improve/agents/openai.yaml +4 -0
- package/skills/scip-improve/references/cleanup-batches.md +53 -0
- package/skills/scip-improve/references/directory-moves.md +53 -0
- package/skills/scip-improve/references/doc-reconcile.md +30 -0
- package/skills/scip-improve/references/frontend-extraction.md +39 -0
- package/skills/scip-improve/references/maintainability-mechanism.md +43 -0
- package/skills/scip-improve/references/twin-drift.md +35 -0
- package/skills/scip-plan/SKILL.md +68 -0
- package/skills/scip-plan/agents/openai.yaml +4 -0
- package/skills/scip-plan/references/api-impact.md +19 -0
- package/skills/scip-plan/references/conductor.md +41 -0
- package/skills/scip-plan/references/high-assurance.md +43 -0
- package/skills/scip-plan/references/hyper-optimization.md +50 -0
- package/skills/scip-plan/references/tla-model.md +88 -0
- package/skills/scip-query/SKILL.md +53 -98
- package/skills/scip-query/agents/openai.yaml +2 -2
- package/skills/scip-setup/SKILL.md +69 -181
- package/skills/scip-setup/agents/openai.yaml +3 -3
- package/skills/scip-setup/references/bootstrap-workflow.md +120 -0
- package/skills/scip-setup/references/language-verification.md +61 -0
- package/skills/scip-setup/references/lifecycle-commands.md +119 -0
- package/skills/scip-setup/references/per-repo-triage.md +24 -0
- package/skills/scip-verify/SKILL.md +126 -84
- package/skills/scip-verify/agents/openai.yaml +2 -2
- package/skills/scip-verify/references/calibrate-detectors.md +170 -0
- package/dist/chunk-2CTX5CMX.js +0 -4
- package/dist/chunk-2Y373BDD.js +0 -2
- package/dist/chunk-2YU7I3QO.js +0 -2
- package/dist/chunk-3MJ5YA4Y.js +0 -16
- package/dist/chunk-64RFXJT5.js +0 -16
- package/dist/chunk-7UY7SD7D.js +0 -927
- package/dist/chunk-B5NLK2B3.js +0 -6
- package/dist/chunk-C2QSK7E7.js +0 -2
- package/dist/chunk-C7NIYIQ4.js +0 -67
- package/dist/chunk-D4U5Q3FT.js +0 -7
- package/dist/chunk-DGAGY7RJ.js +0 -60
- package/dist/chunk-DLWR3NUU.js +0 -5
- package/dist/chunk-K2ERX4UT.js +0 -3
- package/dist/chunk-KHE7J5ZN.js +0 -3
- package/dist/chunk-L7SPDE73.js +0 -84
- package/dist/chunk-LHMNRHGV.js +0 -3
- package/dist/chunk-LM72NQ7T.js +0 -3
- package/dist/chunk-MSWVMDAH.js +0 -122
- package/dist/chunk-NH7WNNQC.js +0 -20
- package/dist/chunk-NPKYOIFM.js +0 -18
- package/dist/chunk-NZL2DBT7.js +0 -2
- package/dist/chunk-OMPZHGHO.js +0 -2
- package/dist/chunk-P2PC2WGR.js +0 -2
- package/dist/chunk-Q3AFUTGB.js +0 -8
- package/dist/chunk-QRGV2F7L.js +0 -2
- package/dist/chunk-TW4OG5FC.js +0 -4
- package/dist/chunk-U7DSEKOM.js +0 -30
- package/dist/chunk-V27BEQJN.js +0 -7
- package/dist/chunk-XAGAZSFE.js +0 -6
- package/dist/chunk-XBN5VO53.js +0 -2
- package/dist/chunk-YGAGTIDK.js +0 -11
- package/dist/command-descriptors-N2TL4XM2.js +0 -613
- package/dist/direct-navigation-DUCZCTOE.js +0 -3
- package/skills/scip-api-impact/SKILL.md +0 -140
- package/skills/scip-api-impact/agents/openai.yaml +0 -4
- package/skills/scip-calibrate/SKILL.md +0 -131
- package/skills/scip-calibrate/agents/openai.yaml +0 -4
- package/skills/scip-claim-audit/SKILL.md +0 -107
- package/skills/scip-claim-audit/agents/openai.yaml +0 -4
- package/skills/scip-cleanup-audit/SKILL.md +0 -130
- package/skills/scip-cleanup-audit/agents/openai.yaml +0 -4
- package/skills/scip-cleanup-improve/SKILL.md +0 -85
- package/skills/scip-cleanup-improve/agents/openai.yaml +0 -4
- package/skills/scip-concrete-plan/HIGH_ASSURANCE.md +0 -317
- package/skills/scip-concrete-plan/SKILL.md +0 -105
- package/skills/scip-concrete-plan/agents/openai.yaml +0 -4
- package/skills/scip-conductor/SKILL.md +0 -133
- package/skills/scip-conductor/agents/openai.yaml +0 -4
- package/skills/scip-debug/SKILL.md +0 -130
- package/skills/scip-debug/agents/openai.yaml +0 -4
- package/skills/scip-diagram/SKILL.md +0 -110
- package/skills/scip-diagram/agents/openai.yaml +0 -4
- package/skills/scip-directory-architecture/SKILL.md +0 -266
- package/skills/scip-directory-architecture/agents/openai.yaml +0 -4
- package/skills/scip-doc-reconcile/SKILL.md +0 -89
- package/skills/scip-doc-reconcile/agents/openai.yaml +0 -4
- package/skills/scip-hyper-optimization/SKILL.md +0 -156
- package/skills/scip-hyper-optimization/agents/openai.yaml +0 -4
- package/skills/scip-integrity-audit/SKILL.md +0 -152
- package/skills/scip-integrity-audit/agents/openai.yaml +0 -4
- package/skills/scip-language-playbook/SKILL.md +0 -106
- package/skills/scip-language-playbook/agents/openai.yaml +0 -4
- package/skills/scip-maintainability/SKILL.md +0 -158
- package/skills/scip-maintainability/agents/openai.yaml +0 -4
- package/skills/scip-probe-reachability/agents/openai.yaml +0 -4
- package/skills/scip-react-maintainability/SKILL.md +0 -101
- package/skills/scip-react-maintainability/agents/openai.yaml +0 -4
- package/skills/scip-root-cause/SKILL.md +0 -151
- package/skills/scip-root-cause/agents/openai.yaml +0 -4
- package/skills/scip-tla-model-system/SKILL.md +0 -148
- package/skills/scip-tla-model-system/agents/openai.yaml +0 -4
- package/skills/scip-triage-issue/SKILL.md +0 -133
- package/skills/scip-triage-issue/agents/openai.yaml +0 -4
- package/skills/scip-twin-drift/SKILL.md +0 -109
- package/skills/scip-twin-drift/agents/openai.yaml +0 -4
- package/skills/scip-vue-maintainability/SKILL.md +0 -107
- package/skills/scip-vue-maintainability/agents/openai.yaml +0 -4
package/docs/AI_FAILURE_MODES.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# The Ways AI Coding Rots a Codebase — and the Detector Built for Each
|
|
2
2
|
|
|
3
|
-
AI-assisted development fails in
|
|
3
|
+
AI-assisted development fails in _specific, repeatable_ ways. None of them are
|
|
4
4
|
visible in a single file, which is why linters and code review miss them: every
|
|
5
5
|
one lives in the relationships between files — the reference graph, the git
|
|
6
6
|
change graph, or the gap between docs and code. Each failure mode below names
|
|
@@ -19,7 +19,7 @@ hook, composable, or frontend component that already exists - a date formatter,
|
|
|
19
19
|
a retry wrapper, a validation guard, a table toolbar. Now there are two implementations that drift independently until they
|
|
20
20
|
contradict each other.
|
|
21
21
|
|
|
22
|
-
**The detector:** `recent-duplicates` makes similarity
|
|
22
|
+
**The detector:** `recent-duplicates` makes similarity _directional_ using git
|
|
23
23
|
file ages - which side is the established original, which is the freshly-added
|
|
24
24
|
echo.
|
|
25
25
|
|
|
@@ -61,11 +61,11 @@ inside the recency window) and tells you to pick one before they drift:
|
|
|
61
61
|
**What the agent does:** creates an abstraction, rewires one or two call
|
|
62
62
|
sites into it, and abandons the rest — the extracted logic survives inline at
|
|
63
63
|
every site it missed. The codebase ends up with the worst of both worlds: an
|
|
64
|
-
abstraction
|
|
64
|
+
abstraction _and_ the duplication it was meant to remove.
|
|
65
65
|
|
|
66
66
|
**The detector:** `incomplete-migration` finds symbols that are new at the
|
|
67
67
|
base ref, confirms they were wired into at least one site, then reports
|
|
68
|
-
established untouched functions whose callee sets
|
|
68
|
+
established untouched functions whose callee sets _contain_ the helper's
|
|
69
69
|
(containment scoring, because a missed site holds the helper's logic plus its
|
|
70
70
|
own — symmetric similarity under-scores exactly these):
|
|
71
71
|
|
|
@@ -88,11 +88,11 @@ scip-query incomplete-migration --base origin/main # gate a whole branch
|
|
|
88
88
|
## 4. Writing code that never gets wired up
|
|
89
89
|
|
|
90
90
|
**What the agent does:** builds the function, the type, the handler — and
|
|
91
|
-
never connects it. Or it
|
|
91
|
+
never connects it. Or it _was_ connected, then a later session rewired the
|
|
92
92
|
flow and left the original dangling. Dead code that looks intentional.
|
|
93
93
|
|
|
94
94
|
**The detectors:** `dead` (evidence-ranked, entrypoint-aware), and the
|
|
95
|
-
`new-dead` check in `diff-gate` that catches it
|
|
95
|
+
`new-dead` check in `diff-gate` that catches it _at the moment of creation_:
|
|
96
96
|
|
|
97
97
|
```
|
|
98
98
|
[new-dead] resolveTheme (src/theme.ts) was changed but has zero indexed consumers
|
|
@@ -114,7 +114,7 @@ every future reader has to understand.
|
|
|
114
114
|
|
|
115
115
|
**The detectors:** `unused-params` (trailing parameters no body uses, scoped
|
|
116
116
|
to removals that are type-safe by construction), plus the abstraction-level
|
|
117
|
-
versions: `wrapper-candidates` (functions that only forward),
|
|
117
|
+
versions: `wrapper-candidates` (functions that only forward),
|
|
118
118
|
`passthrough-candidates` (layers that add nothing), and `stale-abstractions`
|
|
119
119
|
(interfaces/bases with a single implementation).
|
|
120
120
|
|
|
@@ -131,11 +131,11 @@ scip-query stale-abstractions
|
|
|
131
131
|
## 6. Letting the standards docs lie
|
|
132
132
|
|
|
133
133
|
**What the agent does:** nothing — that's the problem. You write in-repo
|
|
134
|
-
standards
|
|
134
|
+
standards _for_ agents; the code moves on; the doc doesn't. The next agent
|
|
135
135
|
reads the doc and faithfully implements against a dead spec. A stale standard
|
|
136
136
|
is worse than none.
|
|
137
137
|
|
|
138
|
-
**The detector:** `doc-drift` reads every doc's file citations
|
|
138
|
+
**The detector:** `doc-drift` reads every doc's file citations _and_ its
|
|
139
139
|
co-change history, and flags docs whose referenced code kept changing after
|
|
140
140
|
the doc stopped — including broken references to files that no longer exist.
|
|
141
141
|
|
|
@@ -147,8 +147,8 @@ staleness 94 product/domain-model.md
|
|
|
147
147
|
22 change(s) since doc update src/workflows/serviceTasks.ts
|
|
148
148
|
```
|
|
149
149
|
|
|
150
|
-
**Use it:** `scip-query doc-drift`, then run the `scip-
|
|
151
|
-
drive staleness to zero (it updates descriptive claims and
|
|
150
|
+
**Use it:** `scip-query doc-drift`, then run the `scip-improve` documentation-reconciliation scenario to
|
|
151
|
+
drive staleness to zero (it updates descriptive claims and _escalates_
|
|
152
152
|
normative violations instead of silently blessing them).
|
|
153
153
|
|
|
154
154
|
**Caught automatically by:** the `doc-reference` check in `diff-gate` — a doc
|
|
@@ -162,7 +162,7 @@ store. The reference graph can't see these pairs — no import connects them —
|
|
|
162
162
|
but git history can: they've changed together in 12 of the last 14 commits.
|
|
163
163
|
|
|
164
164
|
**The detector:** `co-change` finds file pairs that repeatedly change in the
|
|
165
|
-
same commits with
|
|
165
|
+
same commits with _no_ dependency edge.
|
|
166
166
|
|
|
167
167
|
**Use it:**
|
|
168
168
|
|
|
@@ -183,7 +183,7 @@ scip-query co-change src/db/schema.prisma # partners of one file
|
|
|
183
183
|
path still references, or it hoards code because it can't prove anything is
|
|
184
184
|
safe to remove.
|
|
185
185
|
|
|
186
|
-
**The detector:** `cleanup-plan` runs dead-code analysis to a
|
|
186
|
+
**The detector:** `cleanup-plan` runs dead-code analysis to a _fixpoint_ —
|
|
187
187
|
deleting batch 0 makes batch 1 dead, and the plan shows the cascade. Then
|
|
188
188
|
`--verify` applies each batch in a throwaway git worktree and runs **your own
|
|
189
189
|
compiler** (tsc, cargo, go, python oracles — differentially, so pre-existing
|
|
@@ -222,7 +222,7 @@ scip-query plan-context <symbol-or-file> # before the edit
|
|
|
222
222
|
scip-query diff-impact --json # after the edit
|
|
223
223
|
```
|
|
224
224
|
|
|
225
|
-
The `scip-
|
|
225
|
+
The `scip-plan` skill enforces this end-to-end: every step in a plan must
|
|
226
226
|
cite the scip-query command that verified it.
|
|
227
227
|
|
|
228
228
|
## 10. Slow quality decay nobody notices
|
|
@@ -231,7 +231,7 @@ cite the scip-query command that verified it.
|
|
|
231
231
|
alarming; six weeks later the repo is unrecognizable.
|
|
232
232
|
|
|
233
233
|
**The detector:** the ratchet. `health --write-baseline` snapshots finding
|
|
234
|
-
identities into a committable file; `health --baseline` exits 1 on any
|
|
234
|
+
identities into a committable file; `health --baseline` exits 1 on any _new_
|
|
235
235
|
finding. "Don't get worse" becomes an objective gate no score arithmetic can
|
|
236
236
|
game.
|
|
237
237
|
|
|
@@ -281,8 +281,8 @@ The generated guidance distinguishes shared repository records from local
|
|
|
281
281
|
preferences. Commit suppression files and `.scipquery/ledger/` outcome events
|
|
282
282
|
with the change that produced them. Never commit the checkout hook files.
|
|
283
283
|
|
|
284
|
-
After setup, use `scip-
|
|
285
|
-
`scip-
|
|
284
|
+
After setup, use `scip-audit` to confirm raw signals and
|
|
285
|
+
`scip-improve` when the user wants the agent to fix the worst confirmed
|
|
286
286
|
items until the health score is as high as reasonably possible.
|
|
287
287
|
|
|
288
288
|
**3. The gate (enforcement).**
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Public TypeScript API evolution
|
|
2
|
+
|
|
3
|
+
The public TypeScript API is the compiler-visible declaration surface
|
|
4
|
+
reachable through `scip-query` package export paths. Its essential property is
|
|
5
|
+
that downstream programs can depend on it without importing this repository's
|
|
6
|
+
internal files.
|
|
7
|
+
|
|
8
|
+
Every built declaration path is recorded in
|
|
9
|
+
`docs/api/scip-query.api.json`. The report includes exported names, declaration
|
|
10
|
+
kinds and signatures, generic and parameter syntax, return types, and the
|
|
11
|
+
shared declaration chunks that carry referenced public types. Generation
|
|
12
|
+
normalizes formatting, comments, named import/export order, path separators,
|
|
13
|
+
and tsup chunk hashes so the review shows semantic declaration changes rather
|
|
14
|
+
than build noise.
|
|
15
|
+
|
|
16
|
+
## Contributor workflow
|
|
17
|
+
|
|
18
|
+
Build and compare the current declarations:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm run api:check
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
The check fails closed when a declaration target is absent, the committed
|
|
25
|
+
manifest is malformed, its acceptance record is missing, or any declaration
|
|
26
|
+
changes. Review every reported path and downstream use. Then accept the change
|
|
27
|
+
with one classification:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm run api:update -- \
|
|
31
|
+
--classification additive \
|
|
32
|
+
--reason "Add an optional result field for evidence provenance."
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The classifications are:
|
|
36
|
+
|
|
37
|
+
- `additive`: an old consumer remains valid, such as a new export or an
|
|
38
|
+
optional result field;
|
|
39
|
+
- `compatible-correction`: the declaration report changes to correct a
|
|
40
|
+
contract that did not describe usable runtime behavior, with the reasoning
|
|
41
|
+
recorded for review;
|
|
42
|
+
- `breaking`: an old consumer may stop compiling or acquire a different
|
|
43
|
+
meaning.
|
|
44
|
+
|
|
45
|
+
The checker automatically identifies additions and removals. It treats changed
|
|
46
|
+
signatures and referenced shared declarations conservatively. A human may
|
|
47
|
+
classify uncertain drift as a compatible correction or breaking change, but
|
|
48
|
+
cannot accept a known or uncertain change as additive without resolving the
|
|
49
|
+
evidence.
|
|
50
|
+
|
|
51
|
+
`api:update` writes a content-addressed record under
|
|
52
|
+
`docs/api/changes/`. The record binds the old and new manifest digests, package
|
|
53
|
+
version, automatic result, chosen classification, reason, and exact change
|
|
54
|
+
list. Do not edit the generated manifest or an acceptance record by hand.
|
|
55
|
+
|
|
56
|
+
## Compatibility policy
|
|
57
|
+
|
|
58
|
+
- Keep a deprecated export or adapter for at least one minor release before
|
|
59
|
+
removal when a feasible compatibility path exists.
|
|
60
|
+
- Add optional fields instead of making old consumers construct new required
|
|
61
|
+
state.
|
|
62
|
+
- Treat parameter optionality, union membership, generic constraints, and
|
|
63
|
+
discriminated-union members as contract changes even when runtime tests pass.
|
|
64
|
+
- Preserve the compile fixture in
|
|
65
|
+
`tests/fixtures/public-api-consumer/`. It represents a previously written
|
|
66
|
+
downstream program and must compile against the newly built package.
|
|
67
|
+
- The two-package release coordinator runs lint, whose gate includes
|
|
68
|
+
`api:check`, before packing either artifact or reading registry state. Direct
|
|
69
|
+
`npm publish` is refused by `prepublishOnly`; it is not an alternate API
|
|
70
|
+
compatibility path. A declaration change is not accepted merely because
|
|
71
|
+
its implementation tests pass.
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# CLI JSON output contract
|
|
2
|
+
|
|
3
|
+
A CLI JSON envelope is the public transport record printed by a scip-query
|
|
4
|
+
command when a caller selects `--json`. Its real-world units are the JSON
|
|
5
|
+
objects read by agents, shell scripts, CI jobs, and other programs. It is a
|
|
6
|
+
versioned message format distinguished by one stable outer shape that names
|
|
7
|
+
its producer, command, and result contract while leaving the command-specific
|
|
8
|
+
payload under `result`.
|
|
9
|
+
|
|
10
|
+
The current envelope is schema version 1:
|
|
11
|
+
|
|
12
|
+
```json
|
|
13
|
+
{
|
|
14
|
+
"kind": "scip-query-result",
|
|
15
|
+
"schemaVersion": 1,
|
|
16
|
+
"producer": { "name": "scip-query", "version": "0.19.8" },
|
|
17
|
+
"command": "refs",
|
|
18
|
+
"resultSchemaVersion": 1,
|
|
19
|
+
"evidence": "graph-fact",
|
|
20
|
+
"args": ["login"],
|
|
21
|
+
"options": { "json": true, "compact": true },
|
|
22
|
+
"result": {},
|
|
23
|
+
"coverage": {}
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
`schemaVersion` governs the outer transport record. `resultSchemaVersion`
|
|
28
|
+
governs the payload selected by `command`; it can advance without changing
|
|
29
|
+
the transport version. `producer.version` is the installed package version
|
|
30
|
+
that emitted the record. `kind` prevents a consumer from mistaking another
|
|
31
|
+
JSON protocol for a CLI result.
|
|
32
|
+
|
|
33
|
+
The machine-readable schema is
|
|
34
|
+
[`schemas/cli-json-envelope.schema.json`](schemas/cli-json-envelope.schema.json).
|
|
35
|
+
The public `scip-query/runtime` export provides
|
|
36
|
+
`decodeCliJsonEnvelope()` and `requireCompatibleCliJsonEnvelope()` for
|
|
37
|
+
consumers that want the repository's compatibility policy rather than a
|
|
38
|
+
hand-written field check.
|
|
39
|
+
|
|
40
|
+
## Complete output for agents
|
|
41
|
+
|
|
42
|
+
An output page is one consecutive, bounded part of the characters a command
|
|
43
|
+
rendered. Its real-world units are the `scip-query-output-page` objects and
|
|
44
|
+
human page blocks returned after a result exceeds an agent transport's safe
|
|
45
|
+
size. It differs from a query limit because it divides already-produced
|
|
46
|
+
output without discarding any character: following each emitted continuation
|
|
47
|
+
command reconstructs the complete rendered stream.
|
|
48
|
+
|
|
49
|
+
Every command accepts these global options:
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
--output-page-size <characters>
|
|
53
|
+
--output-cursor <cursor>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Human output larger than 12,000 characters is paged automatically. The page
|
|
57
|
+
prints its exact continuation command both before and after its content.
|
|
58
|
+
Agents must run that command unchanged and continue until the page reports
|
|
59
|
+
completion. Do not pipe scip-query through `head`, `tail`, or a line-range
|
|
60
|
+
`sed`; those programs discard output without creating a resumable position.
|
|
61
|
+
|
|
62
|
+
Default `--json` output remains the ordinary `scip-query-result` envelope
|
|
63
|
+
byte-for-byte so existing scripts are not broken. When that envelope exceeds
|
|
64
|
+
12,000 characters, scip-query writes an early stderr warning containing the
|
|
65
|
+
exact command that opts into output pages. The paged command returns:
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"kind": "scip-query-output-page",
|
|
70
|
+
"schemaVersion": 1,
|
|
71
|
+
"producer": { "name": "scip-query", "version": "0.19.8" },
|
|
72
|
+
"command": "architecture",
|
|
73
|
+
"contentType": "application/json",
|
|
74
|
+
"agentInstruction": "INCOMPLETE EVIDENCE: do not draw conclusions or report completion from this partial page. Run page.continuation.command exactly, then repeat until page.complete is true.",
|
|
75
|
+
"page": {
|
|
76
|
+
"offset": 0,
|
|
77
|
+
"returnedCharacters": 12000,
|
|
78
|
+
"totalCharacters": 48152,
|
|
79
|
+
"omittedCharacters": 36152,
|
|
80
|
+
"remainingCharacters": 36152,
|
|
81
|
+
"complete": false,
|
|
82
|
+
"outputHash": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
|
|
83
|
+
"continuation": {
|
|
84
|
+
"cursor": "<opaque cursor>",
|
|
85
|
+
"command": "scip-query architecture --json --output-page-size 12000 --output-cursor <opaque cursor>"
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
"content": "{\n \"kind\": \"scip-query-result\",\n ..."
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
The cursor is bound to the command, working directory, complete
|
|
93
|
+
non-pagination argument list, next character offset, private output snapshot,
|
|
94
|
+
and SHA-256 of the complete rendered output. SHA-256 is a fixed-size content
|
|
95
|
+
fingerprint: the same bytes produce the same identity with overwhelming
|
|
96
|
+
reliability. A continuation reads the immutable snapshot rather than re-running
|
|
97
|
+
the command, so timestamps, durations, edits, or reindexes cannot mix
|
|
98
|
+
different result generations between pages. Missing, expired, or changed
|
|
99
|
+
snapshot data is rejected with the exact command that restarts at page one.
|
|
100
|
+
Every incomplete machine-readable page also carries a direct
|
|
101
|
+
`agentInstruction`. A partial page is not sufficient evidence for a conclusion
|
|
102
|
+
or completion claim; consumers must follow `page.continuation.command` until
|
|
103
|
+
`page.complete` is `true`.
|
|
104
|
+
|
|
105
|
+
Output pages and result coverage answer different questions:
|
|
106
|
+
|
|
107
|
+
- output pagination says whether every rendered character is retrievable;
|
|
108
|
+
- the result envelope's `coverage` says whether the command examined every
|
|
109
|
+
logical result unit.
|
|
110
|
+
|
|
111
|
+
A completely retrieved page can therefore still contain a bounded or sampled
|
|
112
|
+
analysis. Use the result envelope's stated `--full` remediation when present,
|
|
113
|
+
then follow output continuation commands until complete.
|
|
114
|
+
|
|
115
|
+
The machine-readable page schema is
|
|
116
|
+
[`schemas/cli-output-page.schema.json`](schemas/cli-output-page.schema.json).
|
|
117
|
+
Page sizes range from 256 through 100,000 characters and cursors are limited
|
|
118
|
+
to 4,096 characters. The first paged invocation streams the complete output
|
|
119
|
+
to a mode-`0600` snapshot beneath a current-user mode-`0700` temporary
|
|
120
|
+
directory while retaining only the requested page in memory. Snapshots expire
|
|
121
|
+
after one hour and are removed after the final page. Pagination imposes no
|
|
122
|
+
arbitrary total-output ceiling and does not silently discard later pages;
|
|
123
|
+
command-level result budgets still apply and report their own completeness.
|
|
124
|
+
|
|
125
|
+
## Compatibility policy
|
|
126
|
+
|
|
127
|
+
The decoder accepts:
|
|
128
|
+
|
|
129
|
+
| Input | Meaning | Consumer action |
|
|
130
|
+
| ------------------------------------------------------------------- | --------------------------------------------- | -------------------------------------------------------------- |
|
|
131
|
+
| Unversioned legacy envelope | The public shape emitted before schema v1 | Read as supported legacy v0; plan migration |
|
|
132
|
+
| `kind: "scip-query-result"`, `schemaVersion: 1` | Current transport contract | Read the named result schema |
|
|
133
|
+
| A supported envelope with an unknown command `resultSchemaVersion` | A command payload this consumer does not know | Reject that payload without changing unrelated command schemas |
|
|
134
|
+
| A higher or otherwise unsupported positive envelope `schemaVersion` | An outer contract this consumer does not know | Reject with producer/version context |
|
|
135
|
+
| Missing required identity or transport fields | A malformed or different message | Reject with the failed boundary |
|
|
136
|
+
|
|
137
|
+
Consumers must ignore unknown fields. Additive fields can therefore ship in a
|
|
138
|
+
minor release. A field removal, type change, meaning change, or previously
|
|
139
|
+
optional field becoming required needs a new relevant schema version.
|
|
140
|
+
Deprecated aliases remain available for a documented compatibility window;
|
|
141
|
+
removing one requires a major contract transition.
|
|
142
|
+
|
|
143
|
+
The committed v0 and v1 fixtures in `tests/fixtures/` prove that the newest
|
|
144
|
+
decoder reads both generations. The v1 fixture also contains an unknown
|
|
145
|
+
additive field so tests prove tolerant reads rather than exact-key coupling.
|
|
146
|
+
|
|
147
|
+
## Other JSON protocols
|
|
148
|
+
|
|
149
|
+
The hidden `__health-phase` and `__diff-impact-batch` commands are
|
|
150
|
+
same-package child-process messages, not public `--json` responses. They use
|
|
151
|
+
the independently versioned `scip-query-isolated-analysis` protocol and are
|
|
152
|
+
validated for protocol name, schema version, producer, command, and result
|
|
153
|
+
before the parent accepts them.
|
|
154
|
+
|
|
155
|
+
The `hook-context`, `hook-pretool`, and `hook-stop` outputs implement the
|
|
156
|
+
Codex or Claude host's hook schema. Those hosts are the protocol owners, so
|
|
157
|
+
scip-query must not add its CLI envelope fields to their messages. The hook
|
|
158
|
+
event discriminator supplied by the host contract identifies those records.
|
|
159
|
+
|
|
160
|
+
## Evolution checklist
|
|
161
|
+
|
|
162
|
+
1. Keep existing fields and meanings when making an additive change.
|
|
163
|
+
2. Bump `resultSchemaVersion` when one command's payload breaks compatibility.
|
|
164
|
+
3. Bump `schemaVersion` when the shared outer record breaks compatibility.
|
|
165
|
+
4. Keep a fixture for the previous supported generation and teach the decoder
|
|
166
|
+
whether to migrate or reject it.
|
|
167
|
+
5. Update the JSON Schema, this guide, the command reference, and compatibility
|
|
168
|
+
tests in the same change.
|
|
@@ -4,11 +4,15 @@
|
|
|
4
4
|
|
|
5
5
|
This syntax summary is generated from the CLI command descriptors. Keep workflow guidance hand-authored, but keep command syntax, descriptions, and option flags descriptor-owned.
|
|
6
6
|
|
|
7
|
+
Commands with `--json` emit the versioned public envelope documented in [CLI JSON output contract](CLI_JSON_OUTPUT.md).
|
|
8
|
+
|
|
9
|
+
Every command accepts `--output-page-size <characters>` and `--output-cursor <cursor>`. Oversized human output prints an exact continuation command; oversized JSON prints the exact command that opts into versioned output pages.
|
|
10
|
+
|
|
7
11
|
### Indexing
|
|
8
12
|
|
|
9
13
|
| Command | Description | Options |
|
|
10
14
|
|---|---|---|
|
|
11
|
-
| `reindex` | Index the codebase and convert to SQLite | `-l, --language <lang>`<br>`--pnpm-workspaces`<br>`--force`<br>`--allow-partial`<br>`--indexer-concurrency <n>`<br>`--json` |
|
|
15
|
+
| `reindex` | Index the codebase and convert to SQLite | `-l, --language <lang>`<br>`--pnpm-workspaces`<br>`--force`<br>`--allow-partial`<br>`--trust-project-tools`<br>`--install-missing`<br>`--indexer-concurrency <n>`<br>`--json` |
|
|
12
16
|
| `augment-sources` | Add source files skipped by upstream SCIP indexers to the SQLite documents table | - |
|
|
13
17
|
| `augment-vue` | Add compiler-resolved Vue SFC references to the SQLite index using Volar | `--project <tsconfig>` |
|
|
14
18
|
|
|
@@ -73,7 +77,7 @@ This syntax summary is generated from the CLI command descriptors. Keep workflow
|
|
|
73
77
|
| `redundant-reexports` | Find barrel re-exports that nobody imports through | `-s, --scope <path>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
|
|
74
78
|
| `duplicate-bodies` | Find exact duplicate small-body candidates across files | `-s, --scope <path>`<br>`--max-loc <n>`<br>`--min-loc <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
|
|
75
79
|
| `twin-drift` | Twin drift candidates: same-name (or near-name) functions across files with diverged bodies | `-s, --scope <path>`<br>`--min-similarity <n>`<br>`--include-homonyms`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
|
|
76
|
-
| `twin-ab <symbolA> <symbolB>` | Generate a behavioral A/B scaffold comparing two same-concept twins (scip-
|
|
80
|
+
| `twin-ab <symbolA> <symbolB>` | Generate a behavioral A/B scaffold comparing two same-concept twins (scip-audit integrity scenario) — a ready-to-fill vitest file, not an auto-executor | `--out <path>`<br>`--force`<br>`--json` |
|
|
77
81
|
| `not-implemented` | Reachable placeholder stub candidates (throw-stub, TODO+return-default, empty body) — production callers can actually reach these; an unreachable stub is dead's job, not this one's | `-s, --scope <path>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
|
|
78
82
|
| `decorative-checkers` | Decorative checker candidates: validate*/verify*/check*/assert*/is*/has* callables with no reachable failure exit anywhere in their body | `-s, --scope <path>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
|
|
79
83
|
| `test-quality` | Test-quality candidates: assertion-free it/test bodies, a skipped-test ledger with git-blame age, and mock-echo tests that assert the same literal they stubbed into a mock | `-s, --scope <path>`<br>`-n, --limit <n>`<br>`--rot-days <n>`<br>`--full`<br>`--json` |
|
|
@@ -100,7 +104,7 @@ This syntax summary is generated from the CLI command descriptors. Keep workflow
|
|
|
100
104
|
| `affected <symbol>` | Transitive closure of symbols that could break if this symbol changes | `--max-depth <n>`<br>`-s, --scope <path>`<br>`--json` |
|
|
101
105
|
| `change-surface <file>` | Pre-change briefing: exports, consumers, and blast-radius risk | `--full`<br>`--json` |
|
|
102
106
|
| `co-change [file]` | Files that change together in git history without a dependency edge — hidden coupling candidates | `--min-together <n>`<br>`-n, --limit <n>`<br>`--all`<br>`--full`<br>`--json` |
|
|
103
|
-
| `diff-gate` |
|
|
107
|
+
| `diff-gate` | Runtime-bounded, single-flight gate for the current diff: architecture regressions plus echo, migration, coordination, doc-drift, unused-param, and new-dead candidates; exit 1 on blocking findings | `--base <ref>`<br>`--min-together <n>`<br>`--max-echo-checks <n>`<br>`--max-helpers <n>`<br>`--baseline`<br>`--full`<br>`--skip <check>`<br>`--hook`<br>`--json`<br>`--compact` |
|
|
104
108
|
| `incomplete-migration` | Partially-completed extraction candidates: new helpers in the diff wired into some sites while similar un-migrated sites remain | `--base <ref>`<br>`--min-containment <n>`<br>`--max-helpers <n>`<br>`-n, --limit <n>`<br>`--full`<br>`--json` |
|
|
105
109
|
| `diff-impact` | Compute changed symbols and downstream consumers from current git diff | `--base <ref>`<br>`--json` |
|
|
106
110
|
|
|
@@ -130,17 +134,17 @@ This syntax summary is generated from the CLI command descriptors. Keep workflow
|
|
|
130
134
|
|---|---|---|
|
|
131
135
|
| `bench` | Benchmark indexing and command runtimes for this repository | `--json`<br>`--cold-index`<br>`--include-heavy`<br>`--command <cmd>`<br>`--timeout-ms <n>`<br>`--progress`<br>`--profile`<br>`--profile-out <path>` |
|
|
132
136
|
| `work-audit <profile>` | Rank exact repeated computations in a profiling JSONL file by measured avoidable time | `--top <n>`<br>`--json` |
|
|
133
|
-
| `install-skills` | Install skills (_shared, scip-query, scip-setup, scip-
|
|
137
|
+
| `install-skills` | Install skills (_shared, scip-query, scip-setup, scip-explore, scip-plan, scip-diagnose, scip-audit, scip-improve, scip-verify) into Claude Code, Codex, and shared agent roots | - |
|
|
134
138
|
| `setup-hooks` | Install or refresh project-local Codex and Claude Code lifecycle hooks | `--shared`<br>`--remove`<br>`--force`<br>`--json` |
|
|
135
139
|
| `check-deps` | Check whether scip-query and the detected language indexers are actually runnable | - |
|
|
136
140
|
| `capabilities` | Report which evidence and verification capabilities are available in this project | `--matrix`<br>`--json` |
|
|
137
141
|
| `capability-matrix` | Deprecated alias for capabilities --matrix | `--json` |
|
|
138
142
|
| `init` | Create a .scipquery.json config file for this project | - |
|
|
139
143
|
| `config-validate` | Validate .scipquery.json, including structured suppressions and declared coupling groups | `--json` |
|
|
140
|
-
| `suppress <id>` | Record an accepted finding as a file under .scipquery/suppressions/ with a required reason | `--reason <text>`<br>`--check <check>`<br>`--file <path>`<br>`--expires-at <iso>`<br>`--json` |
|
|
144
|
+
| `suppress <id>` | Record an accepted finding as a file under .scipquery/suppressions/ with a required reason | `--reason <text>`<br>`--check <check>`<br>`--file <path>`<br>`--expires-at <iso>`<br>`--replace <revision>`<br>`--json` |
|
|
141
145
|
| `effectiveness` | Per-check effectiveness from the committed outcome ledger: caught, comparison-verified fixes, suppressed, unverified disappearances, and precision | `--since <window>`<br>`--check <check>`<br>`--json` |
|
|
142
146
|
| `doctor` | Diagnose config, index freshness, dependency readiness, and project capabilities | `--json` |
|
|
143
|
-
| `setup` | Bootstrap this project: enable automatic indexing, install agent skills, refresh the index, verify capabilities, and report health | `--guided`<br>`--yes`<br>`--git-hook`<br>`--no-hooks`<br>`--no-skills`<br>`--no-parsers`<br>`--no-health`<br>`--dossier-dir <path>`<br>`--json` |
|
|
147
|
+
| `setup` | Bootstrap this project: enable automatic indexing, install agent skills, refresh the index, verify capabilities, and report health | `--guided`<br>`--yes`<br>`--git-hook`<br>`--no-hooks`<br>`--no-skills`<br>`--no-parsers`<br>`--install-missing`<br>`--no-health`<br>`--dossier-dir <path>`<br>`--json` |
|
|
144
148
|
| `setup-agent` | Seed agent guidance for this project: AGENTS.md/CLAUDE.md block pointing agents at the scip-query skills and diff gate, plus an optional git pre-commit backstop | `--git-hook` |
|
|
145
149
|
| `setup-ci` | Write a GitHub Actions workflow that runs scip-query reindex and diff-gate on pull requests | `--force`<br>`--dry-run` |
|
|
146
150
|
| `uninstall` | Remove scip-query-owned skill links, project hooks, and managed agent setup blocks | `--global`<br>`--project`<br>`--dry-run`<br>`--json` |
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Committed record compatibility
|
|
2
|
+
|
|
3
|
+
scip-query stores two kinds of team-shared records in Git:
|
|
4
|
+
|
|
5
|
+
- `.scipquery/suppressions/*.json` contains accepted detector-policy
|
|
6
|
+
decisions.
|
|
7
|
+
- `.scipquery/events/*.json` contains immutable finding-transition
|
|
8
|
+
observations used by `effectiveness` and cross-HEAD repair verification.
|
|
9
|
+
|
|
10
|
+
A committed record is a repository-owned JSON fact or policy whose value
|
|
11
|
+
comes from surviving clones and branches. Unlike a local cache row, it cannot
|
|
12
|
+
be silently dropped and rebuilt when a reader does not understand it.
|
|
13
|
+
|
|
14
|
+
## Compatibility states
|
|
15
|
+
|
|
16
|
+
Every JSON candidate is classified exactly once:
|
|
17
|
+
|
|
18
|
+
| State | Meaning | Included in conclusions? |
|
|
19
|
+
| -------------------- | ----------------------------------------------------------------- | ------------------------ |
|
|
20
|
+
| `legacy` | A supported unversioned record from an earlier scip-query release | Yes |
|
|
21
|
+
| `current` | A record matching the current discriminator and schema | Yes |
|
|
22
|
+
| `unsupported-older` | A versioned record older than the supported overlap window | No |
|
|
23
|
+
| `unsupported-future` | A record written by a newer incompatible schema | No |
|
|
24
|
+
| `malformed` | Invalid JSON, fields, discriminator, metadata, or stable identity | No |
|
|
25
|
+
|
|
26
|
+
`complete` is true only when every candidate is `legacy` or `current`.
|
|
27
|
+
Readers return accepted records together with `total`, `accepted`, `omitted`,
|
|
28
|
+
the per-state counts, and path-specific issues. A subset may still support a
|
|
29
|
+
conservative result, but it must not be represented as complete.
|
|
30
|
+
|
|
31
|
+
## Current suppression records
|
|
32
|
+
|
|
33
|
+
New records conform to
|
|
34
|
+
[`schemas/suppression-record.schema.json`](schemas/suppression-record.schema.json).
|
|
35
|
+
They carry:
|
|
36
|
+
|
|
37
|
+
- `kind: "scip-query-suppression"`;
|
|
38
|
+
- `schemaVersion: 1`;
|
|
39
|
+
- the stable `suppressionIdentity`;
|
|
40
|
+
- producer name/version and creation/update timestamps;
|
|
41
|
+
- the existing suppression target and reason fields.
|
|
42
|
+
|
|
43
|
+
The discriminator is additive within suppression v1. Older v1 readers permit
|
|
44
|
+
unknown properties, so they continue to read newly written records. Current
|
|
45
|
+
readers also accept v1 records written before the discriminator was added and
|
|
46
|
+
unversioned legacy records. The filename remains the conflict domain:
|
|
47
|
+
different suppression identities merge as different paths, while policy
|
|
48
|
+
changes to one identity require revision-aware replacement.
|
|
49
|
+
|
|
50
|
+
If a future or malformed suppression is omitted, it cannot waive a finding.
|
|
51
|
+
`diff-gate` keeps the matching finding unsuppressed and reports incomplete
|
|
52
|
+
suppression coverage in JSON, human output, and Stop-hook feedback.
|
|
53
|
+
|
|
54
|
+
## Current outcome-event records
|
|
55
|
+
|
|
56
|
+
New records conform to
|
|
57
|
+
[`schemas/outcome-event-record.schema.json`](schemas/outcome-event-record.schema.json).
|
|
58
|
+
They retain all semantic event fields at the root and add:
|
|
59
|
+
|
|
60
|
+
- `kind: "scip-query-outcome-event"`;
|
|
61
|
+
- `schemaVersion: 1`;
|
|
62
|
+
- `eventIdentity`, the JSON tuple of check, finding ID, transition, and
|
|
63
|
+
observed commit;
|
|
64
|
+
- producer name/version.
|
|
65
|
+
|
|
66
|
+
Keeping semantic fields at the root lets the immediately prior permissive
|
|
67
|
+
reader consume new records. Current readers accept both these v1 records and
|
|
68
|
+
the existing unversioned event files.
|
|
69
|
+
|
|
70
|
+
The immutable filename is still a timestamp plus a hash of the complete
|
|
71
|
+
record bytes. Deduplication does not use that path or producer metadata; it
|
|
72
|
+
uses the semantic `eventIdentity`. If legacy and current records describe the
|
|
73
|
+
same fact, stronger comparison evidence wins and then the earliest timestamp
|
|
74
|
+
wins, as before.
|
|
75
|
+
|
|
76
|
+
## Partial history is conservative
|
|
77
|
+
|
|
78
|
+
`effectiveness --json` includes
|
|
79
|
+
`recordCompatibility.outcomeEvents`. Human output prints the same incomplete
|
|
80
|
+
coverage counts before any metrics. Metrics use only accepted records and are
|
|
81
|
+
therefore explicitly partial when `complete` is false.
|
|
82
|
+
|
|
83
|
+
Cross-HEAD repair verification needs complete committed history to establish
|
|
84
|
+
the prior lifecycle anchor. If any event candidate is incompatible, scip-query
|
|
85
|
+
retains every missing local-ledger finding and defers resolution. An omitted
|
|
86
|
+
record can therefore delay a verified fix, but it cannot manufacture one.
|
|
87
|
+
|
|
88
|
+
## Legacy JSONL migration
|
|
89
|
+
|
|
90
|
+
`.scipquery/ledger/events.jsonl` remains readable during the overlap window.
|
|
91
|
+
On the next event append:
|
|
92
|
+
|
|
93
|
+
1. every non-empty line is classified;
|
|
94
|
+
2. compatible lines are copied to independent current event files;
|
|
95
|
+
3. new observations are appended normally;
|
|
96
|
+
4. the legacy ledger and its `merge=union` attribute are removed only if
|
|
97
|
+
every line was compatible.
|
|
98
|
+
|
|
99
|
+
If even one line is unsupported or malformed, the original ledger stays
|
|
100
|
+
byte-for-byte present and the append reports a warning. Repeating the append
|
|
101
|
+
is safe: exclusive content-addressed event creation makes already-copied rows
|
|
102
|
+
idempotent. Upgrade scip-query or repair the named malformed line before
|
|
103
|
+
removing the legacy ledger.
|
|
104
|
+
|
|
105
|
+
## Merge and rollback rules
|
|
106
|
+
|
|
107
|
+
- Commit suppression and event files with the code or documentation change
|
|
108
|
+
that produced them.
|
|
109
|
+
- Do not rewrite all legacy files just to make compatibility counters
|
|
110
|
+
“current.” Read overlap is the migration mechanism.
|
|
111
|
+
- Resolve a same-suppression-path conflict by reviewing both policy decisions;
|
|
112
|
+
never choose a side mechanically.
|
|
113
|
+
- Independent event files should normally keep both sides of a merge.
|
|
114
|
+
- Do not delete an unsupported record to make a warning disappear. Use a
|
|
115
|
+
reader that supports it, or deliberately migrate it with verified tooling.
|
|
116
|
+
- Rolling back to the immediately prior release remains safe because new
|
|
117
|
+
metadata is additive and prior readers ignore unknown fields.
|