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
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
interface:
|
|
2
2
|
display_name: "SCIP Explore"
|
|
3
|
-
short_description: "
|
|
4
|
-
default_prompt: "Use $scip-explore to understand this system end to end with SCIP-backed code evidence."
|
|
3
|
+
short_description: "Understand a system with SCIP evidence"
|
|
4
|
+
default_prompt: "Use $scip-explore to understand this system end to end with SCIP-backed code evidence before editing it."
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Diagrams
|
|
2
|
+
|
|
3
|
+
Use this for code flow diagrams, architecture diagrams, data-flow maps, dependency maps, blast-radius visuals, module maps, or any HTML artifact that explains a system — built from `scip-query` evidence. A code diagram is an HTML artifact that turns source units, calls, dependencies, data flow, or blast radius into a visual map. Every node and edge must trace to `scip-query` evidence — gather it before drawing.
|
|
4
|
+
|
|
5
|
+
## Workflow
|
|
6
|
+
|
|
7
|
+
**1. Pick the diagram type.** Map the user's intent to a diagram type:
|
|
8
|
+
|
|
9
|
+
| Intent | Diagram type |
|
|
10
|
+
|---|---|
|
|
11
|
+
| Feature flow | Call flow |
|
|
12
|
+
| Value origin or mutation | Data flow |
|
|
13
|
+
| Who depends on this | Blast radius |
|
|
14
|
+
| Module architecture | Dependency map |
|
|
15
|
+
| Why this is hard to change | Change surface / bottleneck map |
|
|
16
|
+
| Classes or ownership | Hierarchy and surface map |
|
|
17
|
+
|
|
18
|
+
Done when: the diagram's node and edge types are chosen.
|
|
19
|
+
|
|
20
|
+
**2. Collect evidence.** Use only the commands the chosen diagram type needs, from:
|
|
21
|
+
|
|
22
|
+
- `system <module>` — module map (file paths, exported symbols with line ranges, internal/reverse deps) for a dependency or architecture diagram.
|
|
23
|
+
- `trace <symbol>` — definition sites plus all references, for a call-flow diagram.
|
|
24
|
+
- `call-graph <symbol>` — incoming callers and outgoing callees, for a call-flow diagram.
|
|
25
|
+
- `dataflow <symbol>` — definition sites, usage sites, producer symbols, consumer symbols, for a data-flow diagram.
|
|
26
|
+
- `affected <symbol> --json` — transitive closure of symbols that could break if this symbol changes, for blast-radius nodes and edges.
|
|
27
|
+
- `change-surface <file> --json --full` — exports, external consumer counts, and risk levels, for a change-surface map.
|
|
28
|
+
- Also available as needed: `surface`, `outline`, `code`, `slice`, `slice --forward`, `deps`, `rdeps`, `hierarchy --json`, `fan-out --json`.
|
|
29
|
+
|
|
30
|
+
Done when: every planned node and edge has a source command behind it.
|
|
31
|
+
|
|
32
|
+
**3. Build the artifact.** Write it to `docs/scip-query/diagrams/YYYY-MM-DD-<scope>.html`. It must include: title, scope, summary, the visual diagram, a legend, an evidence table (which command produced which nodes/edges — command provenance lives inside the artifact, not just in your chat reply), omitted/collapsed nodes, and unavailable capabilities. Use inline CSS and semantic HTML or inline SVG: stable dimensions, wrapping labels, accessible colors, and distinct edge styles for calls, data, dependencies, and risk. Scope large graphs into clusters instead of rendering a hairball.
|
|
33
|
+
|
|
34
|
+
Done when: the HTML contains both the visual diagram and the provenance/evidence table.
|
|
35
|
+
|
|
36
|
+
**4. Verify.** Open the diagram file locally, or use a browser/screenshot tool when available. Confirm: the diagram is nonblank, labels don't overlap badly, and major nodes/edges trace to evidence. If the diagram is part of a docs/code change, invoke `scip-verify`.
|
|
37
|
+
|
|
38
|
+
End the deliverable with the file path and a statement of what the diagram proves.
|
|
39
|
+
|
|
40
|
+
Load shared mechanics from `../_shared/SKILL.md` — use this skill's own command shortlist first and open `_shared` only when it's insufficient.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Language playbook
|
|
2
|
+
|
|
3
|
+
Choose the shortest command path from "what is this system doing?" to a verified, language-specific answer. Start with the active language's row before reaching for broader or noisier commands. Pair relationship commands (`call-graph`, `imports`, `imported-by`, `refs`) with `code` to confirm behavior claims — don't stop at the relationship alone. For de-bloat work, cross-check multiple detector families rather than trusting one. When a command is weaker for a given language, use that language's fallback note instead of forcing it.
|
|
4
|
+
|
|
5
|
+
## Universal first pass (any language)
|
|
6
|
+
|
|
7
|
+
Run in order: `stats` (repo-wide size/shape, complete) → `kind-counts` → `files <feature-or-module-name>` (locate the files, complete) → `outline <file>` (symbol tree with line ranges, complete) → `by-kind function --scope <feature-or-module-name>` → `trace <symbol>` (definition + every reference, bounded) → `hierarchy <symbol>` → `code <symbol>` (confirm behavior with source, complete).
|
|
8
|
+
|
|
9
|
+
## Per-language shortlists
|
|
10
|
+
|
|
11
|
+
Each row gives the commands to reach for first, a de-bloat set for cleanup passes, and a fallback note for where that language's evidence is weaker or stronger than usual.
|
|
12
|
+
|
|
13
|
+
**TypeScript** — first: `system`, `surface`, `call-graph`, `dataflow`, `change-surface`. De-bloat: `health`, `dead`, `similar`, `similar --plan`, `wrapper-candidates`, `passthrough-candidates`, `stale-abstractions`, `unused-imports`, `redundant-reexports`. Fallback: strongest verified surface of any language here; Vue script blocks use this same command path.
|
|
14
|
+
|
|
15
|
+
**Python** — first: `outline`, `kind-counts --scope`, `system`, `imports`, `imported-by`, `call-graph`. De-bloat: `dead`, `unused-imports`, `drift`, `similar-signatures`, `complexity`, `complexity-hotspots`. Fallback: prefer source-backed fallbacks when call/kind metadata is sparse.
|
|
16
|
+
|
|
17
|
+
**Java** — first: `system`, `surface`, `call-graph`, `deps`, `rdeps`, `slice`. De-bloat: `health`, `dead`, `similar-files`, `similar-chains`, `wrapper-candidates`, `stale-abstractions`, `extract-candidates`. Fallback: use module/package surfaces to avoid class-only tunnel vision.
|
|
18
|
+
|
|
19
|
+
**Scala** — first: `surface`, `trace`, `call-graph`, `imports`, `imported-by`. De-bloat: `dead`, `similar-files`, `similar-chains`, `extract-candidates`, `stale-abstractions`, `unused-imports`. Fallback: confirm behavior with `code`.
|
|
20
|
+
|
|
21
|
+
**Kotlin** — first: `surface`, `trace`, `call-graph`, `imports`, `imported-by`. De-bloat: `dead`, `similar-files`, `similar-chains`, `extract-candidates`, `stale-abstractions`, `unused-imports`. Fallback: confirm behavior with `code`.
|
|
22
|
+
|
|
23
|
+
**Rust** — first: `trace`, `call-graph`, `refs`, `methods`, `surface`. De-bloat: `dead`, `wrapper-candidates`, `passthrough-candidates`, `stale-abstractions`, `similar-signatures`, `redundant-reexports`. Fallback: `methods` and `surface` are usually high signal here.
|
|
24
|
+
|
|
25
|
+
**Go** — first: `surface`, `trace`, `call-graph`, `refs`, `fan-in`. De-bloat: `dead`, `wrapper-candidates`, `passthrough-candidates`, `similar-files`, `similar-signatures`, `complexity`. Fallback: use package-level surfaces and confirm exported APIs before cleanup.
|
|
26
|
+
|
|
27
|
+
**C++** — first: `trace`, `refs`, `methods`, `surface`, `code`. De-bloat: `dead`, `wrapper-candidates`, `similar-files`, `similar-chains`, `extract-candidates`, `unused-imports`. Fallback: try `call-graph` after trace/refs/code.
|
|
28
|
+
|
|
29
|
+
**C** — first: `trace`, `call-graph`, `refs`, `outline`, `fan-out`. De-bloat: `dead`, `wrapper-candidates`, `similar-files`, `similar-chains`, `extract-candidates`, `unused-imports`. Fallback: skip class/member commands — they don't apply.
|
|
30
|
+
|
|
31
|
+
**Ruby** — first: `trace`, `call-graph`, `refs`, `imports`, `imported-by`. De-bloat: `dead`, `wrapper-candidates`, `passthrough-candidates`, `stale-abstractions`, `similar-files`, `similar-signatures`. Fallback: confirm dynamic-looking paths with source.
|
|
32
|
+
|
|
33
|
+
**C#** — first: `surface`, `call-graph`, `trace`, `methods`, `refs`. De-bloat: `dead`, `wrapper-candidates`, `passthrough-candidates`, `stale-abstractions`, `similar-files`, `extract-candidates`. Fallback: use surfaces and methods together.
|
|
34
|
+
|
|
35
|
+
**Visual Basic** — first: `surface`, `call-graph`, `trace`, `methods`, `refs`. De-bloat: `dead`, `wrapper-candidates`, `passthrough-candidates`, `stale-abstractions`, `similar-files`, `extract-candidates`. Fallback: use surfaces and methods together.
|
|
36
|
+
|
|
37
|
+
**Dart** — first: `surface`, `call-graph`, `trace`, `imports`, `imported-by`. De-bloat: `dead`, `wrapper-candidates`, `stale-abstractions`, `similar-files`, `similar-signatures`, `redundant-reexports`. Fallback: confirm exported API shape with `surface`.
|
|
38
|
+
|
|
39
|
+
**PHP** — first: `trace`, `refs`, `methods`, `surface`, `code`. De-bloat: `dead`, `wrapper-candidates`, `stale-abstractions`, `similar-files`, `similar-signatures`, `extract-candidates`. Fallback: try `call-graph` after trace/refs/code.
|
|
40
|
+
|
|
41
|
+
**Clojure / ClojureScript** — first: `files`, `outline`, `trace`, `refs`, `call-graph`. De-bloat: `dead`, `similar-files`, `similar-signatures`, `complexity`, `complexity-hotspots`. Constraint: SCIP indexing comes from scip-clojure — there is no TypeScript-style semantic provider available for it, so don't expect the same depth of type-aware results.
|
|
42
|
+
|
|
43
|
+
## Minimal workflows
|
|
44
|
+
|
|
45
|
+
**Understand a feature:** `files <feature>` → `outline <file>` → `kind-counts --scope <feature>` → `fan-out <file>` → `trace <entry-symbol>` → `call-graph <entry-symbol>` → `code <entry-symbol>` → `surface <module>`.
|
|
46
|
+
|
|
47
|
+
**Find DRY and de-bloat wins:** `health` → `dead` → `wrapper-candidates` → `passthrough-candidates` → `stale-abstractions` → `similar-files` → `similar-chains` → `similar-signatures` → `extract-candidates`.
|
|
48
|
+
|
|
49
|
+
When recommending a command sequence, name the language and say why these commands are highest-signal for it — don't just list commands.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scip-improve
|
|
3
|
+
description: Use when edits should actually be made: fix confirmed cleanup findings batch by batch, consolidate a drifted twin into one canonical helper, implement a named maintainability mechanism, extract a React hook or Vue composable, move files to fix locality, or bring AGENTS.md/standards/docs back in sync with code. Requires findings already confirmed — audit first if they are not. For reducing one symbol's cognitive complexity, use `complexity-cleanup`; for deciding where a boundary belongs at design time, use `decomposition`.
|
|
4
|
+
commands:
|
|
5
|
+
- template: "scip-query cleanup-plan --verify --json"
|
|
6
|
+
when: "Build compiler-checked deletion batches from confirmed dead-code findings."
|
|
7
|
+
- template: "scip-query cleanup-apply --verified --batch <n>"
|
|
8
|
+
when: "Apply one already verified cleanup batch."
|
|
9
|
+
- template: "scip-query diff-gate --json --compact"
|
|
10
|
+
when: "Gate each implemented improvement slice before declaring it complete."
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Purpose
|
|
14
|
+
|
|
15
|
+
This skill edits the working tree. It does not discover findings — it acts on
|
|
16
|
+
findings someone already confirmed: a cleanup-plan batch, a twin-drift group,
|
|
17
|
+
a maintainability register entry, a React/Vue duplicate or extraction
|
|
18
|
+
candidate, a directory move ledger, or a doc-drift worklist. If nothing has
|
|
19
|
+
been confirmed yet, run the matching scenario in `scip-audit` and come back
|
|
20
|
+
with its evidence and disposition.
|
|
21
|
+
|
|
22
|
+
## Ground rules, every scenario
|
|
23
|
+
|
|
24
|
+
- Work in small, independently verifiable batches or slices — one verified deletion batch, one migration slice, one twin group, one register entry. Never apply everything unattended.
|
|
25
|
+
- State the plan before editing: what's confirmed, the evidence, the intended change, how you'll verify it.
|
|
26
|
+
- Re-derive evidence from current `scip-query` output, not from memory or the stale text you're replacing.
|
|
27
|
+
- After every applied change, run the routed postchecks in the `scip-verify` skill, in addition to whatever narrow rerun this scenario names.
|
|
28
|
+
- Load command mechanics from `_shared` first; this file only names the commands each scenario needs and what to do with their output.
|
|
29
|
+
|
|
30
|
+
## Triage
|
|
31
|
+
|
|
32
|
+
| Situation | Do this | Reference |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| Fix confirmed cleanup findings, raise health, "keep cleaning" | `health` → `cleanup-plan --verify` → `cleanup-apply --verified --batch <n>` in a loop | `references/cleanup-batches.md` |
|
|
35
|
+
| AGENTS.md/CLAUDE.md/standards/command docs are stale or cite moved code | `doc-drift` → `outline`/`trace`/`code` per doc → rerun `doc-drift` | `references/doc-reconcile.md` |
|
|
36
|
+
| Same-name/near-name functions diverged, one-sided fix, drifted threshold | `twin-drift --json --full` → classify → consolidate → rerun `twin-drift` | `references/twin-drift.md` |
|
|
37
|
+
| Implement a confirmed maintainability register entry (hidden policy, thin wrapper, dead re-export) | `extract-candidates` / `passthrough-candidates` / `wrapper-candidates` / `stale-abstractions` / `redundant-reexports` to confirm, then implement the disposition | `references/maintainability-mechanism.md` |
|
|
38
|
+
| Extract a React hook/component or Vue composable/component | cross-check confirmed candidates, classify reuse/extract/split, extract | `references/frontend-extraction.md` |
|
|
39
|
+
| Move files to fix locality, declare/close an architecture boundary | `locality-candidates --json --full` → migration slice → boundary config → postchecks | `references/directory-moves.md` |
|
|
40
|
+
|
|
41
|
+
## Owned commands
|
|
42
|
+
|
|
43
|
+
`cleanup-apply`, `cleanup-plan`, `twin-drift`, `doc-drift`, `locality-candidates`, `extract-candidates`, `passthrough-candidates`, `wrapper-candidates`, `redundant-reexports`, `stale-abstractions` — each has a worked scenario in the references above; none should be run without reading the reference's evidence caveat first (several of these detectors are exploration-only with near-zero precision on codebases with intentional layering).
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<!-- BEGIN GENERATED SKILL COMMANDS -->
|
|
47
|
+
## Commands for this skill
|
|
48
|
+
|
|
49
|
+
| Command | Purpose | Returns | Coverage | When |
|
|
50
|
+
| --- | --- | --- | --- | --- |
|
|
51
|
+
| `scip-query cleanup-plan --verify --json` | Ordered, batched deletion plan: graph-fact dead code plus the cascade candidates it unlocks | ordered cleanup batches, evidence, and optional verification outcomes | `bounded` | Build compiler-checked deletion batches from confirmed dead-code findings. |
|
|
52
|
+
| `scip-query cleanup-apply --verified --batch <n>` | Apply a compiler-verified cleanup-plan batch to the working tree | applied files, deletions, verification, and refusal reasons | `bounded` | Apply one already verified cleanup batch. |
|
|
53
|
+
| `scip-query diff-gate --json --compact` | 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 | blocking findings with check id, message, and remediation; advisory findings; root-cause groups; changed file and symbol counts; process exit status (1 when blocking findings exist) | `bounded` | Gate each implemented improvement slice before declaring it complete. |
|
|
54
|
+
|
|
55
|
+
Use this shortlist first. Open [`../_shared/SKILL.md`](../_shared/SKILL.md) only when it is insufficient.
|
|
56
|
+
<!-- END GENERATED SKILL COMMANDS -->
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Cleanup batches
|
|
2
|
+
|
|
3
|
+
Use when the user asks to fix cleanup findings, raise health, keep cleaning, continue after setup, or work until no safe confirmed cleanup remains. The target is not a higher health score for its own sake — it's fixing confirmed issues that make the codebase harder to understand, verify, or change.
|
|
4
|
+
|
|
5
|
+
## Before editing
|
|
6
|
+
|
|
7
|
+
If cleanup findings have not been swept and confirmed yet, run the cleanup
|
|
8
|
+
scenario in `scip-audit` first. Then report a markdown block before touching
|
|
9
|
+
any code:
|
|
10
|
+
|
|
11
|
+
- current score from `scip-query health --json`
|
|
12
|
+
- the first confirmed batch: finding, evidence, planned fix, verification plan
|
|
13
|
+
- remaining signals with status
|
|
14
|
+
|
|
15
|
+
## Priority order
|
|
16
|
+
|
|
17
|
+
Work top to bottom, one item at a time:
|
|
18
|
+
|
|
19
|
+
1. Compiler-verified deletion batches (`cleanup-plan --verify`).
|
|
20
|
+
2. Incomplete migrations (`incomplete-migration --json --full`) and recent duplicate echoes (`duplicate-bodies --json --full`, exact small-body echoes).
|
|
21
|
+
3. Unused params/imports, dead symbols, isolated symbols.
|
|
22
|
+
4. Broken or stale docs, config validation issues, missing co-change partners.
|
|
23
|
+
5. Thin wrappers, passthroughs, stale abstractions, speculative generality.
|
|
24
|
+
6. Frontend component/hook/composable duplication and large-view pressure.
|
|
25
|
+
7. Directory architecture and maintainability repairs — only when evidence is strong and blast radius is bounded.
|
|
26
|
+
|
|
27
|
+
## The loop
|
|
28
|
+
|
|
29
|
+
Repeat until stopping:
|
|
30
|
+
|
|
31
|
+
1. Apply one verified deletion batch — `scip-query cleanup-apply --verified --batch <n>` against the plan from `scip-query cleanup-plan --verify --json` — or one small targeted refactor for the next prioritized item.
|
|
32
|
+
2. Run the narrow project check for the touched behavior (tests/typecheck scoped to what changed).
|
|
33
|
+
3. Run `scip-query health --json`.
|
|
34
|
+
4. Invoke the `scip-verify` skill.
|
|
35
|
+
5. If `docs/scip-query/health-dossier.md` exists (or a custom `--dossier-dir` was used), refresh it by rerunning `scip-query setup --json` with the same `--dossier-dir` if one was used.
|
|
36
|
+
6. Pick the next highest-priority confirmed item and repeat.
|
|
37
|
+
|
|
38
|
+
Only use `scip-query cleanup-apply --all` with explicit user approval — never apply all batches unattended by default.
|
|
39
|
+
|
|
40
|
+
## Stop when
|
|
41
|
+
|
|
42
|
+
- Only intentional, false-positive, blocked, or unconfirmed items remain.
|
|
43
|
+
- The next improvement would require a product/API/ownership decision.
|
|
44
|
+
- A missing toolchain prevents trustworthy verification.
|
|
45
|
+
- Further work would amount to broad redesign, not bounded cleanup.
|
|
46
|
+
|
|
47
|
+
## Between passes
|
|
48
|
+
|
|
49
|
+
After a cleanup pass, run `scip-query health --write-baseline` to snapshot finding identities. At the start of the next pass, compare against it with `scip-query health --baseline`.
|
|
50
|
+
|
|
51
|
+
## Closeout report
|
|
52
|
+
|
|
53
|
+
Starting and final health scores, batches applied, important files changed, verification commands run, remaining accepted or blocked items, and the highest-value follow-up.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Directory moves
|
|
2
|
+
|
|
3
|
+
Use to move files to fix locality or to close a dependency rule once the
|
|
4
|
+
directory scenario in `scip-audit` has produced a target structure or move
|
|
5
|
+
ledger. If there is no reviewed target structure yet, run that scenario first
|
|
6
|
+
— this reference starts from its output and never invents a target structure
|
|
7
|
+
on its own.
|
|
8
|
+
|
|
9
|
+
## Find and confirm the move
|
|
10
|
+
|
|
11
|
+
Run `scip-query locality-candidates --json --full` for directory-locality and ancestry candidates from consumer ownership (symbols, current homes, consumer locality, suggested homes). Cross-check current placement with `scip-query system <scope>` (files, exported symbols with line ranges, internal deps, reverse deps).
|
|
12
|
+
|
|
13
|
+
Concepts that decide whether a move is safe:
|
|
14
|
+
|
|
15
|
+
- **Ownership boundary** — a folder, package, module, or convention grouping code around one stable responsibility.
|
|
16
|
+
- **Forbidden edge** — an actual cross-boundary dependency rejected by an explicit project rule. Directory distance or an unusual import alone does not make an edge forbidden.
|
|
17
|
+
- **Reciprocal dependency** — traffic in both directions between two boundaries. It's a review signal that the boundaries exert mutual pressure, not proof that either import is wrong.
|
|
18
|
+
- **Migration slice** — the smallest set of file moves and import updates that can be verified independently.
|
|
19
|
+
|
|
20
|
+
Rules: separate review from migration — don't move files unless asked. Preserve broad boundaries when evidence shows they're intentional. Don't reward a generic "shared" boundary/directory unless the shared concept has a name, an owner, and cross-boundary consumers. Prefer small verified moves over large speculative reorganizations. Configure descriptive boundaries before closing dependency rules.
|
|
21
|
+
|
|
22
|
+
Before editing a slice, state: the files to move, the imports/exports/tests/docs to update, the expected verification, and the rollback risk.
|
|
23
|
+
|
|
24
|
+
## If boundaries themselves are changing
|
|
25
|
+
|
|
26
|
+
Add mature boundary path patterns to `.scipquery.json` under `architecture.boundaries` **without** `allowedDependencies` rows first, e.g.:
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{ "architecture": { "boundaries": [
|
|
30
|
+
{ "name": "domain", "paths": ["src/domain/**"] },
|
|
31
|
+
{ "name": "runtime", "paths": ["src/runtime/**"] }
|
|
32
|
+
] } }
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Then run `scip-query config-validate --json`, then `scip-query architecture --json`.
|
|
36
|
+
|
|
37
|
+
An `allowedDependencies` row is closed: an outgoing target omitted from a present row is forbidden, but a missing row makes no dependency claim at all. Example: `{ "architecture": { "boundaries": [...], "allowedDependencies": { "domain": [], "runtime": ["domain"] }, "requireAcyclic": true } }`. For each closed row, record the evidence for its intended direction. Never copy the current dependency graph into the allow-list merely to obtain zero findings; leave emerging or disputed rules undeclared rather than closing the row prematurely.
|
|
38
|
+
|
|
39
|
+
When repairing a boundary cycle, inspect the least-broad edge inside it first, then decide whether the fix is a move, a dependency inversion, a named shared contract, a boundary merge, or a policy correction.
|
|
40
|
+
|
|
41
|
+
## Ratcheting enforcement on a large repo
|
|
42
|
+
|
|
43
|
+
Before enabling architecture regression enforcement on an existing codebase, review the direct findings with `scip-query drift --architecture` and record reviewed existing debt with `scip-query health --write-baseline`. The baseline records stable architecture identities by boundary pair, not by whichever example file happens to sort first. Commit `.scipquery-baseline.json` together with `.scipquery.json`.
|
|
44
|
+
|
|
45
|
+
The default `diff-gate` architecture check compares only architecture identities and does not run every health detector; `diff-gate --baseline` is the opt-in full health ratchet and does not duplicate architecture findings. A missing baseline causes the architecture gate to report that enforcement is not enabled — it does **not** silently treat the current dependency graph as accepted.
|
|
46
|
+
|
|
47
|
+
## After moving the slice
|
|
48
|
+
|
|
49
|
+
Run `scip-query incomplete-migration`, `scip-query recent-duplicates`, and `scip-query co-change <moved-file-or-config>`, plus the project's tests or typecheck for the affected workspace.
|
|
50
|
+
|
|
51
|
+
If `.scipquery.json` locality changed, also run `scip-query config-validate`, `scip-query locality-candidates --json --full`, `scip-query architecture --json`, `scip-query drift --architecture`, and `scip-query diff-gate`.
|
|
52
|
+
|
|
53
|
+
Then invoke `scip-verify`. The implementation is complete only when imports, tests, locality signals, and verification are all checked.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Doc reconciliation
|
|
2
|
+
|
|
3
|
+
Use for stale standards, broken file references, docs that cite moved code, agent guidance, or normative contradictions between documentation and implementation. Only reconcile living docs — documentation agents or maintainers use to make present-day changes: AGENTS.md, CLAUDE.md, standards, command docs, workflow docs. Do not reconcile archival records (dated plans, ADRs, reports); list them in `.scipquery.json` under `docs.snapshotPaths` so `doc-drift` excludes them with a labeled exclusion instead of resurfacing them every sweep.
|
|
4
|
+
|
|
5
|
+
The core distinction driving every edit:
|
|
6
|
+
|
|
7
|
+
- **Descriptive claims** say what the code currently does or where it lives. Update them when code moves.
|
|
8
|
+
- **Normative claims** say what code must or should do. If code violates one, fix the code or escalate the contradiction — never weaken the standard silently to match drifted code.
|
|
9
|
+
|
|
10
|
+
## Step 1 — Build the worklist
|
|
11
|
+
|
|
12
|
+
Run `scip-query doc-drift --json --full` for the ranked worklist (document paths, coupled code subjects, history evidence), plus `scip-query doc-drift <doc-or-tree>` for anything scoped. Prioritize broken references first, then highest staleness, then the docs agents read most. Done only when each target doc is selected for a current-use reason.
|
|
13
|
+
|
|
14
|
+
## Step 2 — Reconcile one doc
|
|
15
|
+
|
|
16
|
+
For each doc: `scip-query doc-drift <doc>`, `scip-query outline <subject-file>` for its current shape, `scip-query system <module>` for the surrounding module, `scip-query trace <symbol>` for every symbol the doc mentions, `scip-query code <symbol>` to re-derive any snippet from current source (never from memory or the stale text). Use git history only to understand why a subject changed, never as a substitute for current code evidence.
|
|
17
|
+
|
|
18
|
+
- Fix broken references by finding the current code or deleting the obsolete claim.
|
|
19
|
+
- Rewrite stale descriptive claims from the evidence just gathered.
|
|
20
|
+
- Record normative contradictions instead of changing standards to bless drifted code.
|
|
21
|
+
|
|
22
|
+
Done only when every edited claim is supported by evidence gathered in this session.
|
|
23
|
+
|
|
24
|
+
## Step 3 — Verify
|
|
25
|
+
|
|
26
|
+
Rerun `scip-query doc-drift <doc>`. If the documentation change is part of a codebase diff, invoke `scip-verify`. Don't claim reconciliation is done until `doc-drift` has been rerun. Done only when staleness drops to zero or the remaining contradiction is explicitly reported.
|
|
27
|
+
|
|
28
|
+
## Step 4 — Report
|
|
29
|
+
|
|
30
|
+
Staleness before and after, broken references fixed, claims updated, normative contradictions surfaced, and docs recommended for deletion.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# React/Vue extraction
|
|
2
|
+
|
|
3
|
+
Use to extract a React hook/component or a Vue composable/component once the
|
|
4
|
+
frontend scenario in `scip-audit` has produced confirmed candidate pairs. If
|
|
5
|
+
nothing is confirmed yet, run that scenario first, then cross-check, then act.
|
|
6
|
+
|
|
7
|
+
- A **component duplicate candidate** is a pair or group of rendered structures repeating the same user-facing arrangement, controls, states, props/bindings, or data-presentation shape enough that a shared component may reduce drift.
|
|
8
|
+
- A **hook candidate** (React) / **composable candidate** (Vue) is a pair or group of behaviors repeating the same state lifecycle, effects, requests, validation, persistence, or derived-data policy enough that a shared hook/composable may preserve behavior better.
|
|
9
|
+
- **Large component/view pressure** means one component, SFC, or linked view file contains several kinds of knowledge that change for different reasons — a large file or style block is pressure, not proof, by itself.
|
|
10
|
+
|
|
11
|
+
## Scan (only if not already done)
|
|
12
|
+
|
|
13
|
+
React: `scip-query react-component-duplicates`, `react-hook-candidates`, `react-large-component-pressure`, `recent-duplicates`, `health` — all `--scope <scope> --full --json`, uncapped.
|
|
14
|
+
|
|
15
|
+
Vue: same shape, using `vue-component-duplicates`, `vue-composable-candidates`, `vue-large-view-pressure`. Before scanning, when component references, imported composables, script blocks, or linked external scripts matter, run `scip-query augment-vue --project <path-to-tsconfig>` to add compiler-resolved Vue SFC references via Volar — Vue needs this step; React doesn't.
|
|
16
|
+
|
|
17
|
+
Record scope, counts, and uncapped/full status.
|
|
18
|
+
|
|
19
|
+
## Cross-check before acting
|
|
20
|
+
|
|
21
|
+
Use `scip-query outline <file>`, `deps <file>`, `rdeps <file>`, `similar-files --scope <scope>`, and either `scip-query similar <closest-existing-component-or-hook>` (React) or `scip-query recent-duplicates --scope <scope> --full --json` (Vue) to validate each candidate. Classify every top candidate as reuse, extract, split, skip, or blocked:
|
|
22
|
+
|
|
23
|
+
- Component-duplicate-only → look for a shared presentational component or existing reuse.
|
|
24
|
+
- Hook/composable-candidate-only → look for shared state lifecycle, effects, requests, validation, persistence, or derived-state policy.
|
|
25
|
+
- Both overlap → look for a feature-level concept that needs both a component boundary and a hook/composable boundary.
|
|
26
|
+
- Large-component/view-only → split by reason to change, not by line count.
|
|
27
|
+
|
|
28
|
+
## Act
|
|
29
|
+
|
|
30
|
+
Prefer reuse over extraction. Extract a component for repeated UI/template structure, props, slots/children, states, or design-system composition. Extract a hook for repeated state, effects, requests, subscriptions, memoized derivations, callbacks, or persistence; extract a composable for the Vue equivalent — repeated state, lifecycle, requests, validation, persistence, derived data, or event policy. Keep essential domain-specific variation at the call site.
|
|
31
|
+
|
|
32
|
+
Don't:
|
|
33
|
+
- Create boolean-soup APIs or wrapper components/composables with no policy as a side effect.
|
|
34
|
+
- Treat shared design-system primitives, icons, labels, route names, test IDs, or CSS utilities alone as sufficient evidence for a duplicate/hook/composable claim.
|
|
35
|
+
- Extract a shared hook or composable from templates that merely look similar but carry different domain lifecycles — that similarity may justify a shared presentational component, never a shared hook/composable.
|
|
36
|
+
|
|
37
|
+
## Verify and report
|
|
38
|
+
|
|
39
|
+
Invoke `scip-verify` and run its React or Vue postcheck rows, plus the applicable extraction, duplicate, parameter, wrapper, passthrough, and stale-abstraction checks. Work is complete only when the acted-on candidate pairs disappear, weaken materially, or are explicitly accepted as essential variation. Report: executive read, command evidence, candidate groups, recommended action taken, post-change proof, and remaining accepted variation.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Implementing a maintainability mechanism
|
|
2
|
+
|
|
3
|
+
Use to implement a confirmed maintainability opportunity: a register or atlas
|
|
4
|
+
entry that names a hidden policy, an unnamed lifecycle, or scattered concepts,
|
|
5
|
+
and proposes a disposition. Maintainability is the degree to which real code
|
|
6
|
+
units let a maintainer understand, verify, and change behavior without
|
|
7
|
+
rediscovering hidden knowledge. If there is no confirmed register entry yet,
|
|
8
|
+
run the maintainability scenario in `scip-audit` first — this reference starts
|
|
9
|
+
from its output.
|
|
10
|
+
|
|
11
|
+
## Vocabulary you need to act correctly
|
|
12
|
+
|
|
13
|
+
- **Concept boundary** — the line around code units that exist for one reason to change.
|
|
14
|
+
- **Hidden policy** — a rule for choosing among several plausible behaviors that lives in local branches, comments, conventions, or caller folklore instead of a named mechanism.
|
|
15
|
+
- **Lifecycle** — a repeatable sequence of states or steps that makes a result valid.
|
|
16
|
+
- **Essential variation** — difference that must remain because the real units differ: language grammars, user-visible APIs, runtime environments, compatibility boundaries. **Accidental variation** — difference in code shape that doesn't correspond to any of those. Preserve the former; remove the latter.
|
|
17
|
+
- **System compression** — replacing several mechanisms that perform the same role, policy, lifecycle, or surface job with fewer named mechanisms, preserving behavior.
|
|
18
|
+
- **Unifying definition** — the single essential trait that makes several code sites one concept. A merge, extract, or generate action is only justified when you can state this trait and it covers every cited site; if it doesn't, the variation is essential and those sites must not be consolidated.
|
|
19
|
+
|
|
20
|
+
Ground every action in files, symbols, references, call graphs, dependencies, surfaces, and blast radius — never opinion. Name concrete referents before naming a smell. Don't chase health scores; detector counts are clues, not objectives. Only add an abstraction when it removes hidden policy, names a lifecycle, enforces a rule, or reduces concept count — never for its own sake. Prefer deletion, inlining, merging, generation, or enforcement of an existing mechanism before introducing a broad new framework.
|
|
21
|
+
|
|
22
|
+
## Priority when several confirmed entries compete
|
|
23
|
+
|
|
24
|
+
Rank by severity tier, most severe first: (1) hidden correctness or evidence policy spread across modules, (2) a repeated lifecycle/pipeline with no owner, (3) public surface exposing accidental internals, (4) a large module with unrelated reasons to change, (5) tests that encode incident history without contract vocabulary, (6) adapter families with repeated capability/fallback shapes, (7) suppression comments documenting architecture decisions instead of exceptions, (8) thin wrappers/passthroughs that don't buy clarity. Reject and don't act on smells that are aesthetic, unverifiable, or false compression.
|
|
25
|
+
|
|
26
|
+
## Confirming a candidate before you touch code
|
|
27
|
+
|
|
28
|
+
- `scip-query extract-candidates` finds heuristic extraction candidates from isolated callee clusters. When the register calls for extracting a shared helper, run this to confirm the callee cluster, then read every cited site to check the unifying definition actually holds.
|
|
29
|
+
- `scip-query passthrough-candidates` finds heuristic passthrough candidates that forward to one callee. When the disposition is inline or delete, run this to confirm the passthrough is real before removing it.
|
|
30
|
+
- `scip-query wrapper-candidates` and `scip-query stale-abstractions` find, respectively, single-consumer wrappers and 0–1-consumer abstractions — both have near-zero precision on codebases with intentional layering or ambient types. Treat every hit as exploration, never a finding; run them only after the main sweep is exhausted; never act on a hit without reading the cited code first, and confirm real consumer counts with `refs`/`surface` before deciding a disposition.
|
|
31
|
+
- `scip-query redundant-reexports` finds barrel re-exports that nobody imports through. When the disposition is delete, confirm no import path actually uses the barrel, then remove the re-export and update any doc or index that referenced it.
|
|
32
|
+
|
|
33
|
+
## Dispositions
|
|
34
|
+
|
|
35
|
+
merge, delete, inline, extract, generate, enforce, supersede, defer, skip. Every merge/extract/generate action must carry its unifying definition and its strongest dissenter — the cited site most likely to differ essentially — plus evidence that the dissenter doesn't actually differ essentially. If a dissenter survives review (it really does differ essentially), the entry's disposition becomes skip with reason "essential variation," but the dissenter stays recorded either way.
|
|
36
|
+
|
|
37
|
+
## Implement
|
|
38
|
+
|
|
39
|
+
Implement the smallest named mechanism that matches the real concept. Keep essential variation near the adapter or domain code that knows it, not buried inside the new mechanism.
|
|
40
|
+
|
|
41
|
+
## Verify and report
|
|
42
|
+
|
|
43
|
+
Run focused tests, then the routed postchecks from `scip-verify`. The final report states the smell addressed, the mechanism introduced or removed, what was deliberately not compressed, and the verification results.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Twin drift
|
|
2
|
+
|
|
3
|
+
Use when the same concept exists in more than one place under the same or a near-name and the bodies have silently diverged — same-name or near-name functions across files with diverged bodies, drifted policy thresholds, one-sided fixes, or consolidating a duplicated concept into one canonical helper.
|
|
4
|
+
|
|
5
|
+
A twin drift group is a same-leaf-name family of callables spanning at least two files whose normalized-token bodies are neither identical (that's `duplicate-bodies`' job) nor unrelated (a homonym like `render` or `parse`), but partially overlapping — a concept copied once and edited independently in only some copies. "Near-name" means case-insensitive match, or edit-distance ≤ 2 for names of 8+ characters.
|
|
6
|
+
|
|
7
|
+
## Detect
|
|
8
|
+
|
|
9
|
+
Run `scip-query twin-drift --json --full` to surface every DIVERGENT and near-name group in scope; scope it with `-s/--scope <path>` when the review should be bounded. Cross-check against `scip-query duplicate-bodies --json --full` — IDENTICAL groups belong there, not here; don't re-report them. Homonyms (similarity below `--min-similarity`, default 0.3) are noise — skip them unless `--include-homonyms` was explicitly requested. Record group count, member count, and `maxDivergence` per group. Done only when every group in scope is enumerated with its relationship (divergent vs. suppressed homonym).
|
|
10
|
+
|
|
11
|
+
## Classify
|
|
12
|
+
|
|
13
|
+
For every DIVERGENT group, read each member's body with `scip-query code <symbol>`, starting from the group's `firstDivergentTokens` field to locate where the bodies diverge. Assign exactly one label with a one-line reason:
|
|
14
|
+
|
|
15
|
+
- **Intentional variation** — the domains genuinely differ (e.g., a React-specific vs. Vue-specific structural comparator branching on framework-specific checks). Essential variation stays; record the reason.
|
|
16
|
+
- **Drifted policy** — one policy (a threshold, a normalization rule, an edge-case guard) only some copies received when it last changed. This is a bug: pick the correct value and propagate it, or extract the policy into one named function/constant.
|
|
17
|
+
- **One-sided fix** — one copy was bugfixed or hardened and its twin(s) weren't. This is a bug: apply the same fix to every member, or consolidate.
|
|
18
|
+
|
|
19
|
+
Done only when every DIVERGENT group has one of the three labels with its reason.
|
|
20
|
+
|
|
21
|
+
## Consolidate
|
|
22
|
+
|
|
23
|
+
Pick the canonical member by comparing consumer counts via `scip-query refs <symbol-in-file-A>` and `scip-query refs <symbol-in-file-B>` — prefer the member with more consumers, or the one in the more general/shared location on a tie. Extract or move the canonical body to one exported helper and update the other members to call it, or delete them outright if they were pure duplication under a different name for caller convenience. Preserve classified-essential variation as a parameter or a thin caller-side branch, not a second copy of the whole body. For intentional-variation groups, don't force consolidation — record the reason in a comment near one of the members so the next `twin-drift` run and the next reader both see it was considered.
|
|
24
|
+
|
|
25
|
+
Done only when every DIVERGENT group is either consolidated (old copies gone or forwarding) or has a recorded reason it stays separate.
|
|
26
|
+
|
|
27
|
+
## Verify
|
|
28
|
+
|
|
29
|
+
Rerun `scip-query twin-drift --json --full` to confirm consolidated groups no longer appear as DIVERGENT, then run the routed postchecks from `scip-verify`. The twin-partner check inside `diff-gate` is advisory and never blocks the gate by itself — but a finding there on your own diff means you've reproduced the exact defect class this skill exists to catch; treat it as a signal to run this workflow, not just to suppress the finding. Fix it or explicitly accept it before finishing.
|
|
30
|
+
|
|
31
|
+
Done only when `twin-drift` shows no unclassified DIVERGENT groups in scope and any `diff-gate` findings are resolved or explained.
|
|
32
|
+
|
|
33
|
+
## Report
|
|
34
|
+
|
|
35
|
+
Scope, groups found (total / divergent / suppressed homonyms), each divergent group with its classification and action taken, and the verification results of `twin-drift --json --full` and `diff-gate --json`.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scip-plan
|
|
3
|
+
description: Use before, during, AND after non-trivial work: plan a change, migration, or refactor; assess what breaks when changing a public export, module boundary, schema, route, CLI command, config field, generated artifact, signature, or documented behaviour; conduct a multi-phase program and review a delegated agent's work mid-flight; plan a performance campaign; scaffold a TLA+ model before implementing, and trace-check it against the real system afterward. Distinct from the `review` skill, which reviews a finished branch or PR against coding standards and the originating spec — this one oversees a program you are conducting.
|
|
4
|
+
commands:
|
|
5
|
+
- template: "scip-query plan-context <target>"
|
|
6
|
+
when: "Anchor the current flow, consumers, reuse options, and change risks."
|
|
7
|
+
- template: "scip-query refs <symbol>"
|
|
8
|
+
when: "Complete or narrow the direct consumer set for a planned symbol change."
|
|
9
|
+
- template: "scip-query affected <symbol> --json"
|
|
10
|
+
when: "Measure transitive impact when the change is not consumer-local."
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# scip-plan
|
|
14
|
+
|
|
15
|
+
<!-- BEGIN GENERATED SKILL COMMANDS -->
|
|
16
|
+
## Commands for this skill
|
|
17
|
+
|
|
18
|
+
| Command | Purpose | Returns | Coverage | When |
|
|
19
|
+
| --- | --- | --- | --- | --- |
|
|
20
|
+
| `scip-query plan-context <target>` | Pre-edit planning context for a symbol, file, or module | definitions and references; callers and callees; dataflow producers and consumers; backward and forward slices; affected symbols; change-surface risk; dependencies and reverse dependencies; module files and exports; external surface use; complexity; churn; co-change partners; active suppressions | `bounded` | Anchor the current flow, consumers, reuse options, and change risks. |
|
|
21
|
+
| `scip-query refs <symbol>` | Find all files referencing a symbol | referencing file paths; reference line numbers grouped by file | `bounded` | Complete or narrow the direct consumer set for a planned symbol change. |
|
|
22
|
+
| `scip-query affected <symbol> --json` | Transitive closure of symbols that could break if this symbol changes | affected symbol identities, files, and traversal depths | `bounded` | Measure transitive impact when the change is not consumer-local. |
|
|
23
|
+
|
|
24
|
+
Use this shortlist first. Open [`../_shared/SKILL.md`](../_shared/SKILL.md) only when it is insufficient.
|
|
25
|
+
<!-- END GENERATED SKILL COMMANDS -->
|
|
26
|
+
|
|
27
|
+
## Purpose
|
|
28
|
+
|
|
29
|
+
Plan and conduct work: a single non-trivial change, public-surface impact, a multi-phase program carried end to end with verification at each handoff (including reviewing a delegated agent's work in flight), a benchmark-driven optimization campaign, and TLA+ modelling both before implementation and as post-implementation trace-conformance.
|
|
30
|
+
|
|
31
|
+
Shared mechanics (lookup tips, command families, postchecks, subagent-briefing text, general command catalogue) live in `../_shared/SKILL.md` — load it only when this skill's own shortlist is insufficient.
|
|
32
|
+
|
|
33
|
+
## Pick the mode first
|
|
34
|
+
|
|
35
|
+
| Situation | Do this |
|
|
36
|
+
|---|---|
|
|
37
|
+
| One non-trivial change, refactor, migration, or bug fix | Ordinary-mode scenario below |
|
|
38
|
+
| The change touches a security boundary, money, a destructive/irreversible op, a persistent-data migration, shared-state concurrency, a broad public API, or an unrollback-able rollout — or the user asks for the rigorous version | `references/high-assurance.md` |
|
|
39
|
+
| You're about to edit a public export, route, schema, CLI command, config field, generated artifact, or documented behavior, and need to know what breaks | `references/api-impact.md` |
|
|
40
|
+
| You're running a multi-phase program: writing an executable plan, delegating steps, reviewing a subagent's work mid-flight, or carrying a change end to end | `references/conductor.md` |
|
|
41
|
+
| You need something faster and must prove the speedup with measurements | `references/hyper-optimization.md` |
|
|
42
|
+
| You need a TLA+ model of a risky protocol, before or after implementation | `references/tla-model.md` |
|
|
43
|
+
|
|
44
|
+
Picking the mode matters: running the high-assurance certificate on routine work is how planning becomes a tax people route around. When genuinely unsure whether a change needs a heavier mode, ask rather than defaulting up.
|
|
45
|
+
|
|
46
|
+
## Scenario: plan a single non-trivial change (ordinary mode, the default)
|
|
47
|
+
|
|
48
|
+
Apply `_shared`'s freshness gate once before citing the first graph fact; let an active watcher handle refreshes and use manual reindex only as the documented fallback. Then run `scip-query plan-context <target>` — the single anchoring call for planning. Its composite return already includes definitions, references, callers, callees, dataflow producers/consumers, forward and backward slices, affected symbols, change-surface risk, dependencies and reverse dependencies, module exports, external surface use, complexity, churn, co-change partners, and active suppressions, so the job is to interpret this composite rather than rebuild a proof system on top of it.
|
|
49
|
+
|
|
50
|
+
Reach for a second command only when a section `plan-context` returned came back bounded (not complete) or the target wasn't indexed: `scip-query refs <symbol>` to enumerate consumers in full, `scip-query affected <symbol>` for the transitive blast radius when the change isn't consumer-local, `scip-query code <symbol>` to read the source behind a behavior claim before writing it into the plan.
|
|
51
|
+
|
|
52
|
+
Write the plan to `docs/plans/YYYY-MM-DD-<short-name>.md` with these sections:
|
|
53
|
+
|
|
54
|
+
- **Goal** — what the user is trying to accomplish, and what done looks like for them.
|
|
55
|
+
- **Current Flow** — the affected path from entry point to observable effect, in prose, with evidence behind each claim; if current behavior can't be described end to end, the change isn't ready to make.
|
|
56
|
+
- **Affected Consumers** — who calls/imports/reads the changed code and what breaks if the contract shifts; state explicitly whether the list is complete or bounded — a capped list presented as complete is worse than one flagged as bounded.
|
|
57
|
+
- **Reuse Decision** — for every new helper/wrapper/type/parameter/flag/component/hook/module, name what it could have extended instead and why extension loses. New parallel code with no reuse decision is the single most common defect this skill exists to prevent.
|
|
58
|
+
- **Slices** — ordered implementation steps, each naming its files/symbols, the behavior change, and the validation (a test, command, or specific manual check) that proves it. A slice with no validation is a wish.
|
|
59
|
+
- **Risks and Unknowns** — what could go wrong, what couldn't be established, and any rollout constraint; keep unknowns explicit rather than rounding them to assumptions.
|
|
60
|
+
|
|
61
|
+
The plan is done only when: the entry-to-effect path is described and evidenced, every affected consumer is assigned to a slice or explicitly out of scope, every new unit has a reuse decision, every slice has validation, and unknowns are written down rather than resolved by guessing. Then implement in the smallest coherent slice and run `scip-verify` when the change lands.
|
|
62
|
+
|
|
63
|
+
## Owned command quick-reference
|
|
64
|
+
|
|
65
|
+
`bench`, `work-audit` → performance campaigns, see `references/hyper-optimization.md`.
|
|
66
|
+
`tla`, `tla scaffold`, `tla verify`, `tla instrument`, `tla trace-check`, `tla fetch-tools` → model scaffolding and conformance, see `references/tla-model.md`.
|
|
67
|
+
|
|
68
|
+
Everything else used above (`plan-context`, `refs`, `affected`, `code`, `surface`, `co-change`, `doc-drift`, `diff-gate`, `health`, `call-graph`, `complexity`, `change-surface`, ...) is general catalogue — see `../_shared/SKILL.md` for the full vocabulary.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Public-surface impact
|
|
2
|
+
|
|
3
|
+
Use before changing anything another process or person depends on: a callable, export, route, schema, config field, CLI command, generated artifact, or documented behavior. Its defining trait: a local edit can force coordinated consumer, docs, tests, or migration changes outside the implementation file.
|
|
4
|
+
|
|
5
|
+
## Scenario: assess what breaks before editing a public surface
|
|
6
|
+
|
|
7
|
+
**Step 1 — identify the actual surface.** Run `scip-query surface <module-or-package>`, `scip-query outline <file>`, `scip-query trace <symbol-or-command>`, `scip-query code <symbol-or-command>`, and `scip-query hierarchy <symbol> --json`. Done only when the real surface is named as one of: member, class, module, package, route, schema, command, or config field.
|
|
8
|
+
|
|
9
|
+
**Step 2 — find consumers.** Run `scip-query refs <symbol>`, `scip-query fan-in <symbol>`, `scip-query rdeps <file>`, `scip-query affected <symbol> --json`, and `scip-query change-surface <file> --json --full`. Record direct consumers separately from transitive consumers. Done only when direct breakage and regression blast radius are both known.
|
|
10
|
+
|
|
11
|
+
**Step 3 — find hidden partners.** Run `scip-query co-change <file> --json --full` (files historically coupled without a dependency edge), `scip-query doc-drift --json --full` (docs describing the surface), `scip-query similar <symbol> --json --full`, and `scip-query similar-files <file> --json --full`. Docs, generated files, tests, and config count as part of the API when they describe or enforce the surface. Done only when docs, generated files, fixtures, sibling APIs, and hand-synchronized partners are accounted for or ruled out.
|
|
12
|
+
|
|
13
|
+
**Step 4 — choose the migration shape.** Pick one of: compatible extension, two-step migration, breaking coordinated change, or an adapter shim for external consumers/compatibility windows. Prefer backward-compatible migrations when consumers are broad or external. Reject speculative new parameters or empty wrappers using `scip-query unused-params --json --full`, `scip-query wrapper-candidates --json --full`, and `scip-query passthrough-candidates --json --full`. Done only when the migration shape explains deploy order, rollback, and compatibility risk.
|
|
14
|
+
|
|
15
|
+
**Step 5 — write the plan and verify.** Plan template: Surface; a Consumer dispositions table (Consumer | Kind: direct/transitive/doc/config/test | Disposition: unchanged-safe/update/shim/defer); Required co-changes; Migration; Verification (targeted tests, `scip-query diff-impact --json`, `scip-verify`, `scip-query doc-drift --json --full` if docs changed, `scip-query config-validate` if config changed). Every consumer returned by refs/affected must appear as a row — a blank disposition means the analysis is unfinished. Non-indexed consumers (SQL, fixtures, dynamic strings, external callers) must be checked with `rg` and rowed the same way as indexed consumers.
|
|
16
|
+
|
|
17
|
+
After editing, run the routed checks from `_shared` and invoke `scip-verify`. The workflow is complete only when direct consumers, docs/config partners, and scip-verify have all been checked.
|
|
18
|
+
|
|
19
|
+
Final report shape: API impact (low/medium/high); Surface changed; Consumers; Migration plan; Co-changes; Verification; Remaining risk.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Conducting a multi-phase program
|
|
2
|
+
|
|
3
|
+
This governs running a program of work — planning, delegation, review, closure — across multiple steps, not how to write a single change plan (use the main SKILL.md's ordinary-mode scenario, or `references/high-assurance.md`, for that). Act like a skeptical principal engineer.
|
|
4
|
+
|
|
5
|
+
Key commands: `scip-query plan-context <target>` anchors each phase's step before delegating it; `scip-query diff-gate --json` verifies a handoff before accepting it and before closing the program; `scip-query health --json` pre-registers or checks a program-level health benchmark.
|
|
6
|
+
|
|
7
|
+
## The three laws
|
|
8
|
+
|
|
9
|
+
1. **A green result you have never seen fail is unverified.** This applies to tests, gates, reports from other agents, and your own checks (the integrity scenario in `scip-audit` applies the same law to code, where available).
|
|
10
|
+
2. **A plan is a contract for a less-capable executor, not a note to self.** If a competent-but-uninspired agent could not execute a step without guessing, the step is not finished being written.
|
|
11
|
+
3. **Nothing is silent.** Every finding, deviation, and shortcut must be either fixed or written down with a reason someone else would accept. 0% silent is the invariant — "fixed everything" is not.
|
|
12
|
+
|
|
13
|
+
## Scenario: write the program plan
|
|
14
|
+
|
|
15
|
+
State DONE MEANS falsifiably in the Goal — a command someone can run and a result they can check, not an aspiration. Pre-register acceptance benchmarks before any work: measure the current number (test count, timing, finding count, proof line), write it in the plan, and state the target number; work that cannot move a pre-registered number is scope to question.
|
|
16
|
+
|
|
17
|
+
Every plan step carries five fields: a file anchor with verified current behavior (cite how you know), the exact change, the validation command with expected output, a testability design (pure core, injected effects), and why this step is safe in this order. "Update X" with no current/target behavior is a wish, not a step.
|
|
18
|
+
|
|
19
|
+
Order phases by information gain and risk: blockers and evidence-integrity first, cheap discriminating probes before expensive builds, measurement before optimization, and anything not yet decided by the human becomes a GATED phase the executor must not start. Infrastructure that later steps inherit (a labeling choke point, a shared helper layer) must land before the features that need it. Flag one-way doors with their migration path, and keep an explicit DEFER list so cut scope is visible instead of forgotten.
|
|
20
|
+
|
|
21
|
+
Working agreement to include in the plan: ONE COMMIT PER STEP — bisectability is non-negotiable, and phase-level commits hide which step broke. Gate commands must be the FULL gate set the repo defines per phase — tests, typecheck, lint/format, and build — not just focused tests, because focused tests hide cross-phase regressions and omitting the linter is how red mains ship. Include regeneration duties and a deviation protocol: if source contradicts an anchor, BLOCKED-note it and continue; never improvise silently.
|
|
22
|
+
|
|
23
|
+
## Scenario: delegate and review a handoff
|
|
24
|
+
|
|
25
|
+
Delegate breadth, keep judgment: fan out mechanical/scoped work to subagents, but personally own anything requiring taste, cross-cutting context, or the final word on "is this real." Concurrent agents must get disjoint write scopes, named in their briefs; if a collision happens anyway, stop racing, apply-verify-commit atomically in one action, and re-sequence to a single writer.
|
|
26
|
+
|
|
27
|
+
Never accept a report at face value — reproduce its evidence. On every handoff, choose the minimal discriminating probe (the one command most likely to expose the report being wrong: a mutation input, a hand count, the benchmark number) and run it yourself; a report verified only by reading it is not verified. Loop until `scip-query diff-gate --json` is quiet: fix, re-run the discriminating probe, re-run the gate, and only then move on.
|
|
28
|
+
|
|
29
|
+
Verify your verifier: a gate check that cannot fail is no gate (e.g. a lint grep that only matches one linter's output, a diff-gate run on a clean tree, a test suite that skips the new path) — prove the check catches a planted failure once before trusting its green. After any "all green," ask what that check does NOT cover (eslint vs prettier; unit vs integration; clean-tree vacuity).
|
|
30
|
+
|
|
31
|
+
## Git and commit discipline
|
|
32
|
+
|
|
33
|
+
Never run `git checkout`/`restore`/`stash` on a tree with uncommitted work, yours or anyone's; revert probe edits by targeted deletion instead, and if source is lost, check `dist/*.map` sourcesContent before panicking. Commit working states early and surgically using explicit paths, never `add -A` on a shared tree; an unbisectable pile of work is a liability. Make commit cadence mechanical: at every step boundary run the arithmetic check "steps completed == commits made"; if they differ, stop and commit before touching anything new. "I'll commit when it's all done" is the signature decay pattern of a long or low-effort run — in two real executions this rationalized delay led to finishing an entire plan with zero or one commit, with the deviation rationalized mid-run rather than decided; a self-check that is a count (not a feeling) prevents this rationalization.
|
|
34
|
+
|
|
35
|
+
## Closing the program
|
|
36
|
+
|
|
37
|
+
After the program, fold what was learned back into the durable layer (docs, skills, followups) — insight that lives only in the conversation is lost. Escalate only genuine decision points — one-way doors, scope changes, taste, spending; for everything else, decide, act, and disclose.
|
|
38
|
+
|
|
39
|
+
Every conducted program and every plan written under this skill must end with a self-report checklist mapping each section above to concrete evidence: pre-registered benchmarks and their before/after values, each handoff's discriminating probe and its OBSERVED result (a probe listed but not run counts as not run), the deviation ledger, the DEFER list, and which learnings were folded back and where — so a reviewer can audit the conduct, not just the artifact.
|
|
40
|
+
|
|
41
|
+
The program is complete only when: every pre-registered benchmark is met or its miss explained; every handoff probe is run and recorded; the gate is quiet on the final state; nothing is silent (every finding fixed or ledgered); and the self-report is written.
|