scip-query 0.19.4 → 0.19.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +75 -1
- package/README.md +242 -49
- package/dist/augment-vue-worker.js +1 -1
- package/dist/{chunk-2YU7I3QO.js → chunk-24QNP7MN.js} +2 -2
- package/dist/{chunk-CNKAGUPL.js → chunk-26X7KCJR.js} +2 -2
- package/dist/{chunk-GPBBJ5Y4.js → chunk-273W2U4Y.js} +3 -3
- package/dist/{chunk-7GXM52MI.js → chunk-2CVXCGL4.js} +2 -2
- package/dist/{chunk-ABMYA4TN.js → chunk-2EZSOTSY.js} +2 -2
- package/dist/{chunk-HKEHS2AS.js → chunk-2GSQR6YA.js} +2 -2
- package/dist/{chunk-FECYOO5O.js → chunk-2OXVAGGT.js} +2 -2
- package/dist/chunk-2ZOCHAL2.js +8 -0
- package/dist/{chunk-QGXBRIM5.js → chunk-336DC5NJ.js} +2 -2
- package/dist/chunk-35SQLYCQ.js +2 -0
- package/dist/{chunk-VXQNNXJE.js → chunk-3OIKRYU5.js} +2 -2
- package/dist/{chunk-52ZYCAEO.js → chunk-47X75ZKH.js} +2 -2
- package/dist/{chunk-NPKYOIFM.js → chunk-4CGVLUDP.js} +2 -2
- package/dist/chunk-4RI4BJGT.js +8 -0
- package/dist/{chunk-P2PC2WGR.js → chunk-52HQTTPB.js} +2 -2
- package/dist/{chunk-YNRNA5LK.js → chunk-5OC3HWP5.js} +2 -2
- package/dist/{chunk-STOL2BTL.js → chunk-6XFC7PQ5.js} +2 -2
- package/dist/{chunk-J77UIT3I.js → chunk-6XHTISLI.js} +2 -2
- package/dist/chunk-6YTSKJJ3.js +2 -0
- package/dist/{chunk-BTEE5NZQ.js → chunk-7E3TH5ZN.js} +2 -2
- package/dist/{chunk-X6D5IC6I.js → chunk-7LABSJSR.js} +2 -2
- package/dist/chunk-7Q6VYYCH.js +2 -0
- package/dist/{chunk-FWUUZTIO.js → chunk-A43URCQ3.js} +2 -2
- package/dist/chunk-A63U2W3P.js +3 -0
- package/dist/{chunk-3MJ5YA4Y.js → chunk-ADFSIJP2.js} +2 -2
- package/dist/chunk-AOLE4DYM.js +6 -0
- package/dist/chunk-APMMR5Y2.js +2 -0
- package/dist/chunk-B5MHCHP3.js +107 -0
- package/dist/{chunk-4RSI5EMG.js → chunk-CSTYYXKC.js} +2 -2
- package/dist/{chunk-25LPM4DG.js → chunk-CYJM7CYF.js} +2 -2
- package/dist/{chunk-S44IULR6.js → chunk-DD5BOU5I.js} +2 -2
- package/dist/{chunk-YGAGTIDK.js → chunk-DGMCFMPG.js} +7 -7
- package/dist/{chunk-UOAV44HR.js → chunk-E2ZXPB7J.js} +2 -2
- package/dist/{chunk-IZKFSVBV.js → chunk-EVOC5I5I.js} +2 -2
- package/dist/{chunk-XTX6QHOF.js → chunk-F42A3AKG.js} +2 -2
- package/dist/{chunk-Q4IIEGXJ.js → chunk-FHCTEANE.js} +2 -2
- package/dist/{chunk-3SVWW4PN.js → chunk-FKGN4A4E.js} +2 -2
- package/dist/{chunk-IG7N5ZIK.js → chunk-FQTPPXNA.js} +2 -2
- package/dist/{chunk-F6O7AAC3.js → chunk-G4UQL4CP.js} +2 -2
- package/dist/chunk-GA64UPMI.js +6 -0
- package/dist/{chunk-ZXJYMGD3.js → chunk-GK3GRUJX.js} +2 -2
- package/dist/chunk-HEBAY673.js +2 -0
- package/dist/chunk-HELS7KFF.js +2 -0
- package/dist/{chunk-B5NLK2B3.js → chunk-IPDCSB6N.js} +2 -2
- package/dist/{chunk-M7MTH5NR.js → chunk-IYAOX36F.js} +2 -2
- package/dist/{chunk-YVVCVR2L.js → chunk-J7VT2CRB.js} +2 -2
- package/dist/{chunk-4333ETTV.js → chunk-JELJLXEE.js} +2 -2
- package/dist/{chunk-LBMJEAEW.js → chunk-JERWGHQT.js} +2 -2
- package/dist/chunk-JJJCO4QC.js +945 -0
- package/dist/{chunk-6E7UTQY7.js → chunk-JZNLMHWY.js} +2 -2
- package/dist/{chunk-R4FQGQ4X.js → chunk-K42M2KWT.js} +2 -2
- package/dist/{chunk-H7UKLTWJ.js → chunk-KLVJABXA.js} +2 -2
- package/dist/chunk-KP4KBDVF.js +3 -0
- package/dist/{chunk-RV2FQIX3.js → chunk-LMFVTUW2.js} +2 -2
- package/dist/chunk-LRTP3DKL.js +3 -0
- package/dist/{chunk-U6WNH5GC.js → chunk-MGBJHRFB.js} +2 -2
- package/dist/{chunk-QDV6RDCP.js → chunk-MLGTCX56.js} +2 -2
- package/dist/{chunk-54HA4ZXH.js → chunk-N3SE646F.js} +2 -2
- package/dist/{chunk-KP6XRY5Z.js → chunk-NBRUH7OE.js} +2 -2
- package/dist/{chunk-M7AIS73L.js → chunk-NN4ZIRPK.js} +2 -2
- package/dist/{chunk-I5RJM53C.js → chunk-NQLSSVOB.js} +2 -2
- package/dist/{chunk-4SALD7RU.js → chunk-OBKDTVZ3.js} +2 -2
- package/dist/{chunk-GBQ5NYPR.js → chunk-OHWZKLVA.js} +6 -6
- package/dist/{chunk-6NSFJYRC.js → chunk-OP3MTFJR.js} +2 -2
- package/dist/{chunk-EOOJGLDU.js → chunk-OQ2A4G2G.js} +2 -2
- package/dist/{chunk-DLWR3NUU.js → chunk-P6HBYNBE.js} +2 -2
- package/dist/{chunk-QVWS2VWZ.js → chunk-PC44K7RF.js} +2 -2
- package/dist/{chunk-A2EZV2UM.js → chunk-QBYYWGAT.js} +2 -2
- package/dist/{chunk-QRGV2F7L.js → chunk-QHKUY4FW.js} +2 -2
- package/dist/chunk-QHRL4LKM.js +2 -0
- package/dist/{chunk-I5AWSI2G.js → chunk-QQWOFXNW.js} +2 -2
- package/dist/{chunk-WQTAC523.js → chunk-RBFFD4V2.js} +2 -2
- package/dist/{chunk-SOAT6NLA.js → chunk-RJHCPSZ7.js} +2 -2
- package/dist/{chunk-VGRICIQI.js → chunk-RWRLUZ6U.js} +2 -2
- package/dist/{chunk-4T3LTWUS.js → chunk-S2GP3CU3.js} +2 -2
- package/dist/{chunk-HEXVUYFQ.js → chunk-SHKZ7OVJ.js} +2 -2
- package/dist/{chunk-NSS46APD.js → chunk-TFUU5MQQ.js} +2 -2
- package/dist/{chunk-IUFDSKGG.js → chunk-TYQ76QHQ.js} +2 -2
- package/dist/{chunk-NRCXJDHL.js → chunk-U5CNPPTZ.js} +2 -2
- package/dist/{chunk-MITTUCEH.js → chunk-UQK5CRUK.js} +2 -2
- package/dist/{chunk-XLTP42QA.js → chunk-UUJBLG6J.js} +2 -2
- package/dist/chunk-UXP636P5.js +144 -0
- package/dist/{chunk-64RFXJT5.js → chunk-VEVBIAOJ.js} +6 -6
- package/dist/chunk-VKRQDBW5.js +9 -0
- package/dist/{chunk-C7NIYIQ4.js → chunk-VOQFGC2W.js} +4 -4
- package/dist/{chunk-DZ74OMG6.js → chunk-VP542C25.js} +2 -2
- package/dist/{chunk-Q3AFUTGB.js → chunk-WMXRRBII.js} +2 -2
- package/dist/{chunk-ZGZUZ7XE.js → chunk-WXAAURU7.js} +2 -2
- package/dist/chunk-X3NLZHPA.js +20 -0
- package/dist/{chunk-WER3B7MI.js → chunk-XF3KLXN3.js} +2 -2
- package/dist/{chunk-NH5ALKPW.js → chunk-XVJ3V7LM.js} +2 -2
- package/dist/{chunk-4XTA5OMB.js → chunk-YGQN3XGZ.js} +2 -2
- package/dist/{chunk-CFMXJPHH.js → chunk-YHXBD52M.js} +2 -2
- package/dist/{chunk-7B3UPBVA.js → chunk-YLVE3SXZ.js} +2 -2
- package/dist/{chunk-YIJ7ZAA4.js → chunk-YTUD45PU.js} +2 -2
- package/dist/{chunk-VTKGCT3V.js → chunk-YWB2EBNB.js} +2 -2
- package/dist/{chunk-UKZBVX4U.js → chunk-Z2LHPIOM.js} +2 -2
- package/dist/chunk-Z5QQPJ3U.js +30 -0
- package/dist/{chunk-NZL2DBT7.js → chunk-ZLJLE6LK.js} +2 -2
- package/dist/{chunk-XYADIZHU.js → chunk-ZTTISZ7J.js} +2 -2
- package/dist/cli.js +3 -3
- package/dist/command-descriptors-SJDZ7QGR.js +617 -0
- package/dist/{config-types-D20KuvvZ.d.ts → config-types-BWQ5xPGI.d.ts} +4 -0
- package/dist/{db-G_II8yXU.d.ts → db-B0r1o7Vt.d.ts} +18 -1
- package/dist/direct-navigation-HTKOZEOM.js +3 -0
- package/dist/{health-oblXYgkF.d.ts → health-CFnlCiTz.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 +23 -24
- package/dist/reindex.d.ts +10 -4
- package/dist/reindex.js +33 -38
- package/dist/runtime.d.ts +167 -11
- 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-DCvnlZCu.d.ts} +5 -1
- package/dist/watch-server.js +5 -5
- package/docs/AGENT_GUIDE.md +1 -1
- package/docs/AI_FAILURE_MODES.md +18 -18
- package/docs/API_EVOLUTION.md +71 -0
- package/docs/CLI_JSON_OUTPUT.md +83 -0
- package/docs/COMMAND_REFERENCE.md +10 -8
- package/docs/COMMITTED_RECORD_COMPATIBILITY.md +117 -0
- package/docs/CONFIGURATION_WRITE_SAFETY.md +130 -0
- package/docs/DETECTOR_GUIDE.md +47 -47
- 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/TELEMETRY_RETENTION.md +72 -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/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 +15 -5
- 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 +91 -242
- 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 +76 -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} +12 -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 +53 -84
- 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 +52 -97
- package/skills/scip-query/agents/openai.yaml +2 -2
- package/skills/scip-setup/SKILL.md +65 -176
- 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 +123 -70
- 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-C2QSK7E7.js +0 -2
- package/dist/chunk-D4U5Q3FT.js +0 -7
- 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-OMPZHGHO.js +0 -2
- package/dist/chunk-SVLTAG5O.js +0 -927
- package/dist/chunk-U7DSEKOM.js +0 -30
- package/dist/chunk-V27BEQJN.js +0 -7
- package/dist/chunk-VMNZB6WI.js +0 -4
- package/dist/chunk-XBN5VO53.js +0 -2
- package/dist/chunk-ZAIILQNP.js +0 -5
- package/dist/command-descriptors-MFU4BCJ7.js +0 -612
- package/dist/direct-navigation-MRMQFIRB.js +0 -3
- package/skills/scip-api-impact/SKILL.md +0 -139
- 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 -106
- package/skills/scip-claim-audit/agents/openai.yaml +0 -4
- package/skills/scip-cleanup-audit/SKILL.md +0 -126
- package/skills/scip-cleanup-audit/agents/openai.yaml +0 -4
- package/skills/scip-cleanup-improve/SKILL.md +0 -84
- package/skills/scip-cleanup-improve/agents/openai.yaml +0 -4
- package/skills/scip-concrete-plan/SKILL.md +0 -262
- 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 -254
- 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 -150
- 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 -126
- package/skills/scip-triage-issue/agents/openai.yaml +0 -4
- package/skills/scip-twin-drift/SKILL.md +0 -107
- 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,262 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: scip-concrete-plan
|
|
3
|
-
description: Plan code changes with scip-query evidence and testable design. Use for non-trivial implementation, refactor, migration, API, or bug-fix plans before editing code; require contextual definitions, cited premises, reuse audit, test seams, counterexample attacks, and a derived verdict.
|
|
4
|
-
commands:
|
|
5
|
-
- template: "scip-query status --capabilities"
|
|
6
|
-
when: "Discover: confirm the index is fresh before citing graph facts."
|
|
7
|
-
- template: "scip-query plan-context <target>"
|
|
8
|
-
when: "Discover: anchor the plan with pre-edit context for the target."
|
|
9
|
-
- template: "scip-query refs <symbol>"
|
|
10
|
-
when: "Premises: enumerate every writer and reader of a touched state surface; reuse audit: find existing consumers."
|
|
11
|
-
- template: "scip-query dataflow <symbol-or-variable>"
|
|
12
|
-
when: "Premises: producers and consumers backing a state-authority premise."
|
|
13
|
-
- template: "scip-query code <symbol>"
|
|
14
|
-
when: "Premises: read source before citing a behavior claim."
|
|
15
|
-
- template: "scip-query trace <symbol>"
|
|
16
|
-
when: "Verify the plan: rerun source-producing context for cited targets."
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
# Concrete Plan
|
|
20
|
-
|
|
21
|
-
Use this skill to write an implementation plan that another agent can execute without guessing and a reviewer can check without re-deriving. A concrete plan is a certificate: a dated Markdown document whose conclusion — ready to implement — is derived from numbered, source-cited premises, defended against constructed counterexamples, and shaped so the intended behavior is easy to test before it is easy to ship.
|
|
22
|
-
|
|
23
|
-
Load shared mechanics from [`../_shared/SKILL.md`](../_shared/SKILL.md) when you need lookup tips, command families, postchecks, or subagent rules.
|
|
24
|
-
|
|
25
|
-
<!-- BEGIN GENERATED SKILL COMMANDS -->
|
|
26
|
-
## Commands for this skill
|
|
27
|
-
|
|
28
|
-
| Command | Purpose | When |
|
|
29
|
-
| --- | --- | --- |
|
|
30
|
-
| `scip-query status --capabilities` | Show index status for this project | Discover: confirm the index is fresh before citing graph facts. |
|
|
31
|
-
| `scip-query plan-context <target>` | Pre-edit planning context for a symbol, file, or module | Discover: anchor the plan with pre-edit context for the target. |
|
|
32
|
-
| `scip-query refs <symbol>` | Find all files referencing a symbol | Premises: enumerate every writer and reader of a touched state surface; reuse audit: find existing consumers. |
|
|
33
|
-
| `scip-query dataflow <symbol-or-variable>` | Reference-level dataflow: definition sites, usage sites, producers, consumers | Premises: producers and consumers backing a state-authority premise. |
|
|
34
|
-
| `scip-query code <symbol>` | Read the source code for a symbol (bounded to its definition range) | Premises: read source before citing a behavior claim. |
|
|
35
|
-
| `scip-query trace <symbol>` | Trace a symbol: definition + all references | Verify the plan: rerun source-producing context for cited targets. |
|
|
36
|
-
|
|
37
|
-
Use this shortlist first. Open [`../_shared/SKILL.md`](../_shared/SKILL.md) only when it is insufficient.
|
|
38
|
-
<!-- END GENERATED SKILL COMMANDS -->
|
|
39
|
-
|
|
40
|
-
## Rules
|
|
41
|
-
|
|
42
|
-
1. Start with `scip-query status --capabilities`; reindex only when freshness is `stale`, `missing`, or `unknown`.
|
|
43
|
-
2. Anchor the plan with `scip-query plan-context <target>`. If the target is not indexed, record that fact and use scip-query for every code-adjacent claim it can answer.
|
|
44
|
-
3. Put the plan in `docs/plans/YYYY-MM-DD-<short-name>.md`.
|
|
45
|
-
4. Define every load-bearing concept contextually and state every invariant in `iff` or `must always` form. A definition without referents (a `Source:` line) is a guess.
|
|
46
|
-
5. Evidence lives in numbered premises (`P1`, `P2`, ...), each with a `Source` naming the scip-query command that produced it. Every shared-state surface the plan touches gets a state-authority premise enumerating its complete writer and reader sets.
|
|
47
|
-
6. Steps and defenses cite the premises they depend on. A claim no premise supports is either new evidence to gather or an explicit `ASSUMPTION` — never silent.
|
|
48
|
-
7. Do not propose a new helper, wrapper, type, parameter, config flag, component, hook, or module until the reuse audit proves reuse or extension is not the better move.
|
|
49
|
-
8. Every behavior-changing step includes a testability design: test seam, injected dependencies, pure core, side-effect boundary, and validation.
|
|
50
|
-
9. Attack entries must be constructed scenarios — actor, starting state, sequence — and each ends in a recorded outcome: `HELD` citing the defending step and premises, or `HOLE` with its repair step or accepted reason. An assertion of absence ("no new shared mutable state") is not a defense; it cannot fail, so it cannot catch anything.
|
|
51
|
-
10. Installing an enforcer — trigger, constraint, guard, gate — opens an enforcement window: every existing writer in the relevant state-authority premise must be brought into compliance in the same or an earlier step, or the window recorded as an accepted hole. Every step declares `Deployable`.
|
|
52
|
-
11. The verdict is derived, not asserted: `PLANNED-COMPLETE` only when the coverage matrix has no blank rows and every attack ends in `HELD` with citations or an accepted hole. An attack record where nothing ever broke is a red flag — attacks run against a draft should find holes; if none did, rerun the pass as falsification, preferably in a fresh subagent context.
|
|
53
|
-
|
|
54
|
-
## Planning Terms
|
|
55
|
-
|
|
56
|
-
A reuse audit is the part of a plan that proves a proposed new symbol, file, option, wrapper, or contract is needed; what makes it useful is that it ties the new shape to existing definitions, consumers, and rejected extension points.
|
|
57
|
-
|
|
58
|
-
A test seam is the entry point a test can call to prove a behavior without replaying the whole product path; what makes it valuable in a plan is that it names the exact unit or boundary where correctness will be observed.
|
|
59
|
-
|
|
60
|
-
A side-effect boundary is the edge where deterministic program decisions meet files, processes, clocks, networks, databases, or other external capabilities; what makes it important is that failures and fakes can be isolated there while core decisions stay easy to test.
|
|
61
|
-
|
|
62
|
-
A contract is the stable promise one code unit exposes to another, including accepted inputs, returned outputs, errors, timing expectations, and side effects that callers may rely on.
|
|
63
|
-
|
|
64
|
-
An invariant is a property of the changed system that must hold at every observable moment; what makes it load-bearing is that attacks are judged against it and the final verdict is derived from whether it survives them all.
|
|
65
|
-
|
|
66
|
-
A premise is a numbered, source-cited statement of fact about the current code; what makes it a premise rather than a note is that steps and defenses cite it by ID, so a false premise is traceable to everything built on it.
|
|
67
|
-
|
|
68
|
-
A state-authority premise is a premise that enumerates the complete writer and reader sets of one shared state surface; what makes it powerful is that "complete" is falsifiable with `refs` and `dataflow`, turning a forgotten write path from an unknowable into a checkable omission.
|
|
69
|
-
|
|
70
|
-
A counterexample attack is a concrete actor, starting state, and action sequence constructed to violate an invariant; what makes it evidence is that its defense cites premises and steps, so "we considered failure" becomes "this specific failure is blocked here."
|
|
71
|
-
|
|
72
|
-
An enforcement window is the interval between the step that installs an invariant enforcer and the step that brings the last existing writer into compliance; what makes it dangerous is that during it, every unupdated writer fails the new check in production, so the plan that adds safety is itself the outage.
|
|
73
|
-
|
|
74
|
-
## Workflow
|
|
75
|
-
|
|
76
|
-
### 1. Discover
|
|
77
|
-
|
|
78
|
-
Run:
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
scip-query status --capabilities
|
|
82
|
-
scip-query plan-context <target>
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
Use the shared reference for follow-up commands. Fill four gates before designing:
|
|
86
|
-
|
|
87
|
-
```markdown
|
|
88
|
-
## Goal
|
|
89
|
-
What the user is trying to accomplish and what done looks like for them.
|
|
90
|
-
|
|
91
|
-
## Definitions & Invariants
|
|
92
|
-
For each load-bearing concept: its wider class, then the one trait that causally
|
|
93
|
-
explains its other traits in this codebase — with the referents. Then the
|
|
94
|
-
invariants the change must preserve, in iff / must-always form.
|
|
95
|
-
|
|
96
|
-
## Current State
|
|
97
|
-
A short narrative of the affected end-to-end flow. Every factual sentence
|
|
98
|
-
cites a premise by ID.
|
|
99
|
-
|
|
100
|
-
## Reuse Audit
|
|
101
|
-
For every new symbol or file being considered: reuse target, extension target,
|
|
102
|
-
or evidence-backed reason new code is justified.
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
Definition discipline: place the concept in its wider class, then name the essential trait — the one that makes the concept's other traits in this codebase possible and explains them. Do not label genus or differentia; write it as prose. Ban circular and synonym definitions ("the refresh coordinator coordinates refreshes" defines nothing). Any new term the plan introduces gets defined the same way. Good definitions condense: they imply the concept's other traits instead of listing them, and derived requirements fall out of them — if restore is defined as the inverse of cancel, then the privilege to restore must not be weaker than the privilege to cancel, and a plan that gates them asymmetrically must defend that asymmetry.
|
|
106
|
-
|
|
107
|
-
This step is complete only when the concepts are defined with referents, the invariants are stated formally, and every proposed new unit has a reuse decision with citations.
|
|
108
|
-
|
|
109
|
-
### 2. Establish Premises
|
|
110
|
-
|
|
111
|
-
Number every fact the plan depends on:
|
|
112
|
-
|
|
113
|
-
```markdown
|
|
114
|
-
## Premises
|
|
115
|
-
|
|
116
|
-
- P1. <current behavior fact> — Source: `scip-query code <symbol>`
|
|
117
|
-
- P2. Writers of `<state surface>`: <complete list>. Readers: <complete list>.
|
|
118
|
-
— Source: `scip-query refs <symbol>` + `scip-query dataflow <symbol>`
|
|
119
|
-
- P3. ASSUMPTION: <belief the evidence cannot yet confirm, and what would confirm it>
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
State-authority rule: for every state surface the plan touches — database column, store field, event topic, endpoint, cache entry — write one premise enumerating its complete writer and reader sets. Completeness comes from `refs` and `dataflow`, not memory.
|
|
123
|
-
|
|
124
|
-
Why this premise class exists: a sprint-restore plan hardened `restore()` and the cancellation path but never enumerated the writers of sprint status. Review found `PATCH /sprints/:id` could set `status: 'active'` around every restore invariant, and transition automations wrote `sprintId` straight past the new membership guard — two of that review's five ship-blockers, both sitting in the writer list one `refs` call would have produced. With a state-authority premise, each writer in the list must be visited by an attack; without it, the side doors are invisible until review.
|
|
125
|
-
|
|
126
|
-
This step is complete only when every state surface named in any phase has a state-authority premise and every remaining unknown is an explicit `ASSUMPTION`.
|
|
127
|
-
|
|
128
|
-
### 3. Shape for Tests
|
|
129
|
-
|
|
130
|
-
Before writing implementation phases, add:
|
|
131
|
-
|
|
132
|
-
```markdown
|
|
133
|
-
## Testability Design
|
|
134
|
-
|
|
135
|
-
| Behavior | Test seam | Dependencies to inject | Pure core | Side-effect shell | Contract |
|
|
136
|
-
| --- | --- | --- | --- | --- | --- |
|
|
137
|
-
| <behavior> | <test entry point> | <clock/db/http/logger/etc.> | <calculation/decision function> | <I/O wrapper> | <small interface or call shape> |
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
Plan the code so tests can call the pure core directly and exercise the side-effect shell with injected replacements. Prefer this shape:
|
|
141
|
-
|
|
142
|
-
1. Parse and validate at the boundary.
|
|
143
|
-
2. Pass domain data and injected dependencies into a small orchestrator.
|
|
144
|
-
3. Put calculations, filtering, selection, formatting decisions, and state transitions in pure functions.
|
|
145
|
-
4. Keep database, network, filesystem, clock, randomness, logging, email, and payment calls in thin side-effect shells.
|
|
146
|
-
5. Depend on small contracts at boundaries; avoid broad option objects, booleans that hide behavior, and wrappers that merely forward.
|
|
147
|
-
|
|
148
|
-
This step is complete only when every changed behavior has a named test seam and the plan makes clear which logic can be tested without real external services.
|
|
149
|
-
|
|
150
|
-
### 4. Design the Checklist
|
|
151
|
-
|
|
152
|
-
Write phases in execution order. Keep each phase deployable or explicitly mark why it is not. Use this step format:
|
|
153
|
-
|
|
154
|
-
```markdown
|
|
155
|
-
### N.M - Imperative title
|
|
156
|
-
|
|
157
|
-
- [ ] **File**: `path/to/file.ts:LINE-LINE`
|
|
158
|
-
- **Premises**: P<n>, P<m>
|
|
159
|
-
- **Deployable**: yes | no — <reason> | part of single-deploy group <name>
|
|
160
|
-
- **What**: Current behavior verified from source.
|
|
161
|
-
- **Change**: Exact edit to make.
|
|
162
|
-
- **Testability**:
|
|
163
|
-
- Test seam:
|
|
164
|
-
- Injected dependencies:
|
|
165
|
-
- Pure core:
|
|
166
|
-
- Side-effect shell:
|
|
167
|
-
- Contract:
|
|
168
|
-
- **Validation**: Targeted test, smoke command, or manual check that proves the behavior.
|
|
169
|
-
- **Why**: Why this step is needed and why this order is safe, citing the premises it rests on.
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
If a step installs an enforcer — trigger, constraint, guard, gate — check its enforcement window here: every existing writer in the relevant state-authority premise is brought into compliance in the same or an earlier step, or the window is carried into the attack record as a hole to accept or repair.
|
|
173
|
-
|
|
174
|
-
This step is complete only when no checklist item says "update this file" without exact current behavior, target behavior, cited premises, a deployability declaration, and validation.
|
|
175
|
-
|
|
176
|
-
### 5. Attack the Plan
|
|
177
|
-
|
|
178
|
-
Construct counterexamples against every invariant. This pass is falsification, not defense: it succeeds by finding holes, and against a draft it should find some. Prefer delegating it to a fresh subagent when the environment can spawn one — give the adversary only the Definitions & Invariants, Premises, state-authority maps, and the checklist, not your design rationale, and brief it that it wins by producing holes; fold its findings back as HOLE entries and repair steps. Solo fallback: enumerate the full attack list from the coverage-matrix rows below before writing any Outcome line, so attacks cannot be shaped around defenses you already have.
|
|
179
|
-
|
|
180
|
-
Use the lenses as attack prompts — purpose, blast radius, valid intermediate state, reversibility, failure, concurrency, boundaries, data integrity, observability, human experience, efficiency, reuse, testability — and record each attack in this form:
|
|
181
|
-
|
|
182
|
-
```markdown
|
|
183
|
-
### A<n>. <invariant> via <lens>
|
|
184
|
-
- Attack: <actor> + <starting state> + <action sequence>
|
|
185
|
-
- Outcome: HELD — defended by step <N.M> (P<i>, P<j>)
|
|
186
|
-
| HOLE — repaired by new step <N.M>
|
|
187
|
-
| HOLE — accepted: <reason>
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
A `HELD` that cannot name its defending step and premises is not `HELD`; it is a hole wearing confidence. A repaired hole keeps its `HOLE — repaired by step N.M` label permanently — do not rewrite it to `HELD` after the repair, because the repair history is the evidence that the pass falsified. The verdict's repaired count must equal the number of `HOLE — repaired` entries in the record. Close the record with a coverage matrix — one row per writer in every state-authority premise and per applicable lens (valid intermediate state is always applicable when any step installs an enforcer or migration):
|
|
191
|
-
|
|
192
|
-
```markdown
|
|
193
|
-
| Surface or lens | Attacks |
|
|
194
|
-
| --- | --- |
|
|
195
|
-
| <writer, reader, or lens> | A2, A7 |
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
A blank row is an unattacked writer. The record is incomplete until every row names an attack or carries an accepted reason. Spread attacks across rows before deepening one: depth on the axis you already anticipated does not protect the axes you did not — the leaks come from blank rows, not from the tenth variation of the race you already modeled.
|
|
199
|
-
|
|
200
|
-
Invalid entry — this exact shape preceded three post-review remediation rounds on a real plan:
|
|
201
|
-
|
|
202
|
-
> **Concurrency**: Validation happens before database writes; no new shared mutable state or retry behavior is introduced.
|
|
203
|
-
|
|
204
|
-
It names no actor, no interleaving, and cites nothing. It is an assertion of absence: it cannot fail, so it caught nothing — review later found exactly the race it waved away. A valid entry for the same phase:
|
|
205
|
-
|
|
206
|
-
> ### A3. "Every stored value is a member of its field's option set" via concurrency
|
|
207
|
-
> - Attack: admin removes option O in transaction A while a user writes value O in transaction B; interleaving B-validates → A-commits → B-commits persists an orphaned value.
|
|
208
|
-
> - Outcome: HOLE — repaired by new step 2.2: validation reads the option definition outside B's lock (P4), so serialize definition changes with every value writer via FOR UPDATE on the definition row; regression proves both interleavings against PostgreSQL.
|
|
209
|
-
|
|
210
|
-
This step is complete only when the coverage matrix has no blank rows and every attack entry ends in a cited `HELD` or a recorded `HOLE`.
|
|
211
|
-
|
|
212
|
-
### 6. Verify the Plan and Derive the Verdict
|
|
213
|
-
|
|
214
|
-
Run or delegate phase-by-phase reference checks. Each verifier confirms:
|
|
215
|
-
|
|
216
|
-
- every path exists;
|
|
217
|
-
- every line range is still within about five lines;
|
|
218
|
-
- every premise reproduces when its `Source` command is rerun — a premise that no longer reproduces is false, and everything citing it is suspect until fixed;
|
|
219
|
-
- every behavior claim matches source;
|
|
220
|
-
- every new unit has reuse evidence;
|
|
221
|
-
- every behavior-changing step has cited premises, a validation command, and a testability design.
|
|
222
|
-
|
|
223
|
-
Then rerun the source-producing context for the cited targets:
|
|
224
|
-
|
|
225
|
-
```bash
|
|
226
|
-
scip-query plan-context <target>
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
Use the shared reference for subagent briefing text when delegating. Close the plan by applying the definitions to the record — do not summarize feelings:
|
|
230
|
-
|
|
231
|
-
```markdown
|
|
232
|
-
## Verdict
|
|
233
|
-
|
|
234
|
-
A plan is PLANNED-COMPLETE iff the coverage matrix has no blank rows, every
|
|
235
|
-
attack ends in HELD with cited steps and premises or an accepted hole with a
|
|
236
|
-
written reason, and no premise failed reverification.
|
|
237
|
-
|
|
238
|
-
Result: PLANNED-COMPLETE | INCOMPLETE — <n> attacks, <x> holes repaired,
|
|
239
|
-
<y> holes accepted; <unresolved items>
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
The counts are part of the verdict. "16 attacks, 0 holes repaired" against a fresh draft is not a strong plan; it is an attack pass that defended instead of falsified — rerun it before shipping the plan.
|
|
243
|
-
|
|
244
|
-
This step is complete only when stale references are fixed, every premise reverified, and the verdict line is derived from the attack record.
|
|
245
|
-
|
|
246
|
-
## Output Shape
|
|
247
|
-
|
|
248
|
-
The plan file contains:
|
|
249
|
-
|
|
250
|
-
1. Title and date.
|
|
251
|
-
2. Goal.
|
|
252
|
-
3. Definitions & Invariants.
|
|
253
|
-
4. Premises (including state-authority premises and explicit assumptions).
|
|
254
|
-
5. Current State (narrative citing premise IDs).
|
|
255
|
-
6. Reuse Audit.
|
|
256
|
-
7. Testability Design.
|
|
257
|
-
8. Design Phases (steps citing premises, each with a deployability declaration).
|
|
258
|
-
9. Attack Record (attacks with outcomes, holes repaired or accepted, coverage matrix).
|
|
259
|
-
10. Execution Order and deployable phase notes.
|
|
260
|
-
11. Ship Order with one-way doors flagged.
|
|
261
|
-
12. Verdict with attack and hole counts.
|
|
262
|
-
13. Summary of files to create, edit, delete, and verify.
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: scip-conductor
|
|
3
|
-
description: Plan and conduct multi-step engineering programs like a skeptical principal engineer. Use for writing executable multi-phase plans, delegating implementation, reviewing another agent's work, or carrying a large change end to end with verification at every handoff.
|
|
4
|
-
commands:
|
|
5
|
-
- template: "scip-query plan-context <target>"
|
|
6
|
-
when: "Anchor each phase's step before delegating it."
|
|
7
|
-
- template: "scip-query diff-gate --json"
|
|
8
|
-
when: "Verify a handoff before accepting it and before closing the program."
|
|
9
|
-
- template: "scip-query health --json"
|
|
10
|
-
when: "Pre-register or check a program-level health benchmark."
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# scip-conductor
|
|
14
|
-
|
|
15
|
-
This skill is how to run a *program* of work — planning, delegation, review,
|
|
16
|
-
and closure — not how to write one change plan (use a dedicated planning
|
|
17
|
-
skill such as `scip-concrete-plan` for individual changes when one is available).
|
|
18
|
-
|
|
19
|
-
Load shared mechanics from [`../_shared/SKILL.md`](../_shared/SKILL.md).
|
|
20
|
-
|
|
21
|
-
<!-- BEGIN GENERATED SKILL COMMANDS -->
|
|
22
|
-
## Commands for this skill
|
|
23
|
-
|
|
24
|
-
| Command | Purpose | When |
|
|
25
|
-
| --- | --- | --- |
|
|
26
|
-
| `scip-query plan-context <target>` | Pre-edit planning context for a symbol, file, or module | Anchor each phase's step before delegating it. |
|
|
27
|
-
| `scip-query diff-gate --json` | Gate the current diff: architecture regressions plus echo, migration, coordination, doc-drift, unused-param, and new-dead candidates; exit 1 on blocking findings | Verify a handoff before accepting it and before closing the program. |
|
|
28
|
-
| `scip-query health --json` | Composite codebase health report with prioritized action list | Pre-register or check a program-level health benchmark. |
|
|
29
|
-
|
|
30
|
-
Use this shortlist first. Open [`../_shared/SKILL.md`](../_shared/SKILL.md) only when it is insufficient.
|
|
31
|
-
<!-- END GENERATED SKILL COMMANDS -->
|
|
32
|
-
|
|
33
|
-
## The Three Laws
|
|
34
|
-
|
|
35
|
-
1. **A green result you have never seen fail is unverified.** Applies to
|
|
36
|
-
tests, gates, reports from other agents, and your own checks. (Where
|
|
37
|
-
available, `scip-integrity-audit` is the same law aimed at code.)
|
|
38
|
-
2. **A plan is a contract for a less-capable executor, not a note to self.**
|
|
39
|
-
If a competent-but-uninspired agent could not execute a step without
|
|
40
|
-
guessing, the step is not finished being written.
|
|
41
|
-
3. **Nothing is silent.** Every finding, deviation, and shortcut is either
|
|
42
|
-
fixed or written down with a reason someone else would accept. 0%
|
|
43
|
-
silent is the invariant; "fixed everything" is not.
|
|
44
|
-
|
|
45
|
-
## Writing the Plan
|
|
46
|
-
|
|
47
|
-
- **Goal states what DONE MEANS falsifiably** — a command someone can run
|
|
48
|
-
and a result they can check, not an aspiration.
|
|
49
|
-
- **Pre-register acceptance benchmarks.** Before any work: measure the
|
|
50
|
-
current number (test count, timing, finding count, proof line), write it
|
|
51
|
-
in the plan, and state the target number. Work that cannot move a
|
|
52
|
-
pre-registered number is scope to question.
|
|
53
|
-
- **Every step carries five fields**: file anchor with verified current
|
|
54
|
-
behavior (cite how you know); the exact change; the validation command
|
|
55
|
-
with expected output; testability design (pure core, injected effects);
|
|
56
|
-
why this step is safe *in this order*. "Update X" with no current/target
|
|
57
|
-
behavior is a wish, not a step.
|
|
58
|
-
- **Order phases by information gain and risk**: blockers and
|
|
59
|
-
evidence-integrity first; cheap discriminating probes before expensive
|
|
60
|
-
builds; measurement before optimization; anything not yet decided by the
|
|
61
|
-
human is a GATED phase the executor must not start. Infrastructure the
|
|
62
|
-
later steps inherit (a labeling choke point, a shared helper layer)
|
|
63
|
-
lands before the features that need it.
|
|
64
|
-
- **Flag one-way doors** with their migration path, and keep an explicit
|
|
65
|
-
DEFER list so cut scope is visible instead of forgotten.
|
|
66
|
-
- **Include the working agreement**: ONE COMMIT PER STEP (bisectability is
|
|
67
|
-
non-negotiable; phase-level commits hide which step broke), the exact
|
|
68
|
-
gate commands — the FULL gate set the repo defines per phase: tests,
|
|
69
|
-
typecheck, lint/format, and build, not just focused tests (focused tests
|
|
70
|
-
hide cross-phase regressions; omitting the linter is how red mains ship),
|
|
71
|
-
regeneration duties,
|
|
72
|
-
and the deviation protocol —
|
|
73
|
-
"if source contradicts an anchor, BLOCKED-note it and continue; never
|
|
74
|
-
improvise silently."
|
|
75
|
-
|
|
76
|
-
## Conducting the Work
|
|
77
|
-
|
|
78
|
-
- **Delegate breadth, keep judgment.** Fan out mechanical/scoped work;
|
|
79
|
-
personally own anything requiring taste, cross-cutting context, or the
|
|
80
|
-
final word on "is this real."
|
|
81
|
-
- **Concurrent agents get disjoint write scopes**, named in their briefs.
|
|
82
|
-
If a collision happens anyway: stop racing, apply-verify-commit
|
|
83
|
-
atomically in one action, and re-sequence to a single writer.
|
|
84
|
-
- **Never accept a report — reproduce its evidence.** On every handoff,
|
|
85
|
-
choose the *minimal discriminating probe*: the one command most likely to
|
|
86
|
-
expose the report being wrong (a mutation input, a hand count, the
|
|
87
|
-
benchmark number), and run it yourself. A report verified by reading it
|
|
88
|
-
is not verified.
|
|
89
|
-
- **Loop until the gate is quiet**: fix → re-run the discriminating probe →
|
|
90
|
-
re-run the gate → only then move on. After the program: fold what was
|
|
91
|
-
learned back into the durable layer (docs, skills, followups) — insight
|
|
92
|
-
that lives only in the conversation is lost.
|
|
93
|
-
- **Escalate only genuine decision points** — one-way doors, scope changes,
|
|
94
|
-
taste, spending. Everything else: decide, act, disclose.
|
|
95
|
-
|
|
96
|
-
## Scar Rules (each bought with a real failure)
|
|
97
|
-
|
|
98
|
-
- **Verify your verifier.** A gate check that cannot fail is no gate: a
|
|
99
|
-
lint grep that only matches one linter's output, a diff-gate run on a
|
|
100
|
-
clean tree, a test suite that skips the new path. Prove the check catches
|
|
101
|
-
a planted failure once before trusting its green.
|
|
102
|
-
- **Never `git checkout`/`restore`/`stash` on a tree with uncommitted
|
|
103
|
-
work** — yours or anyone's. Revert probe edits by targeted deletion.
|
|
104
|
-
If source is lost, check `dist/*.map` sourcesContent before panicking.
|
|
105
|
-
- **Commit working states early and surgically** (explicit paths, never
|
|
106
|
-
`add -A` on a shared tree); an unbisectable pile of work is a liability.
|
|
107
|
-
- **Make the commit cadence mechanical, not aspirational.** At every step
|
|
108
|
-
boundary run the arithmetic check: steps completed == commits made. If
|
|
109
|
-
they differ, stop and commit before touching anything new. "I'll commit
|
|
110
|
-
when it's all done" is the signature decay of a long or low-effort run —
|
|
111
|
-
two real executions finished an entire plan with zero or one commit, and
|
|
112
|
-
both times the deviation was rationalized mid-run, not decided. A
|
|
113
|
-
self-check that is a count cannot be rationalized.
|
|
114
|
-
- **Watch for your own gate holes**: after any "all green," ask what that
|
|
115
|
-
check does NOT cover (eslint vs prettier; unit vs integration; clean-tree
|
|
116
|
-
vacuity).
|
|
117
|
-
|
|
118
|
-
## Self-Report (required output)
|
|
119
|
-
|
|
120
|
-
End every conducted program — and every plan written under this skill —
|
|
121
|
-
with a checklist mapping each section above to concrete evidence:
|
|
122
|
-
the pre-registered benchmarks and their before/after values; each handoff's
|
|
123
|
-
discriminating probe and its OBSERVED result (a probe listed but not run
|
|
124
|
-
counts as not run); the deviation ledger; the DEFER list;
|
|
125
|
-
which learnings were folded back and where. A reviewer must be able to
|
|
126
|
-
audit the *conduct*, not just the artifact.
|
|
127
|
-
|
|
128
|
-
## Completion
|
|
129
|
-
|
|
130
|
-
The program is complete only when: every pre-registered benchmark met or
|
|
131
|
-
its miss explained; every handoff probe run and recorded; the gate quiet on
|
|
132
|
-
the final state; nothing silent — every finding fixed or ledgered; and the
|
|
133
|
-
self-report written.
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: scip-debug
|
|
3
|
-
description: Debug bugs and regressions with scip-query evidence. Use for failing behavior, wrong data flow, confusing runtime paths, broken tests, root-cause analysis, reproduction, tracing, or minimal fixes.
|
|
4
|
-
commands:
|
|
5
|
-
- template: "scip-query files <feature-or-error-term>"
|
|
6
|
-
when: "Find the entry point from a feature name or error term."
|
|
7
|
-
- template: "scip-query trace <candidate-symbol>"
|
|
8
|
-
when: "Find the entry point: definition plus every reference."
|
|
9
|
-
- template: "scip-query call-graph <entry-symbol>"
|
|
10
|
-
when: "Follow execution: callers and callees along the failing path."
|
|
11
|
-
- template: "scip-query dataflow <symbol-or-variable>"
|
|
12
|
-
when: "Follow data: producers, consumers, and usage sites."
|
|
13
|
-
- template: "scip-query similar <suspect-symbol> --json --full"
|
|
14
|
-
when: "Compare nearby implementations for missing guards or handling."
|
|
15
|
-
- template: "scip-query change-surface <suspect-file> --json --full"
|
|
16
|
-
when: "Bound the fix: exports, consumers, and blast-radius risk."
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
# scip-debug
|
|
20
|
-
|
|
21
|
-
Use this skill to move from a reported failure to a minimal verified fix. A bug is a mismatch between expected behavior and observed behavior in a concrete execution path. A root cause is the earliest code fact in that path that explains the mismatch.
|
|
22
|
-
|
|
23
|
-
Load shared mechanics from [`../_shared/SKILL.md`](../_shared/SKILL.md).
|
|
24
|
-
|
|
25
|
-
<!-- BEGIN GENERATED SKILL COMMANDS -->
|
|
26
|
-
## Commands for this skill
|
|
27
|
-
|
|
28
|
-
| Command | Purpose | When |
|
|
29
|
-
| --- | --- | --- |
|
|
30
|
-
| `scip-query files <feature-or-error-term>` | Find files matching a pattern | Find the entry point from a feature name or error term. |
|
|
31
|
-
| `scip-query trace <candidate-symbol>` | Trace a symbol: definition + all references | Find the entry point: definition plus every reference. |
|
|
32
|
-
| `scip-query call-graph <entry-symbol>` | Show incoming callers and outgoing callees for a symbol | Follow execution: callers and callees along the failing path. |
|
|
33
|
-
| `scip-query dataflow <symbol-or-variable>` | Reference-level dataflow: definition sites, usage sites, producers, consumers | Follow data: producers, consumers, and usage sites. |
|
|
34
|
-
| `scip-query similar <suspect-symbol> --json --full` | Find heuristic function similarity candidates from callee fingerprints | Compare nearby implementations for missing guards or handling. |
|
|
35
|
-
| `scip-query change-surface <suspect-file> --json --full` | Pre-change briefing: exports, consumers, and blast-radius risk | Bound the fix: exports, consumers, and blast-radius risk. |
|
|
36
|
-
|
|
37
|
-
Use this shortlist first. Open [`../_shared/SKILL.md`](../_shared/SKILL.md) only when it is insufficient.
|
|
38
|
-
<!-- END GENERATED SKILL COMMANDS -->
|
|
39
|
-
|
|
40
|
-
## Rules
|
|
41
|
-
|
|
42
|
-
1. Reproduce or restate the failure before editing.
|
|
43
|
-
2. Use scip-query to find entry points, call paths, data flow, and blast radius.
|
|
44
|
-
3. Prefer one narrow fix over broad cleanup.
|
|
45
|
-
4. Verify with the narrowest repo test or smoke command, then invoke `scip-verify`.
|
|
46
|
-
5. A root-cause claim whose fix crosses a file boundary requires a rival: state the next-most-plausible explanation for the same symptom and run the observation that separates them. A root cause with no rival considered is a guess with confidence.
|
|
47
|
-
|
|
48
|
-
## Workflow
|
|
49
|
-
|
|
50
|
-
### 1. Pin the failure
|
|
51
|
-
|
|
52
|
-
Record observed behavior, expected behavior, reproducing command/route/UI action/test/job/file, error text or wrong output, and regression window if known.
|
|
53
|
-
|
|
54
|
-
If no reproduction is provided, build the smallest runnable reproduction from existing tests, scripts, CLI, or app entry points.
|
|
55
|
-
|
|
56
|
-
This step is complete only when the mismatch is concrete enough to test or the missing external fact is named.
|
|
57
|
-
|
|
58
|
-
### 2. Find the entry point
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
scip-query files <feature-or-error-term>
|
|
62
|
-
scip-query outline <candidate-file>
|
|
63
|
-
scip-query trace <candidate-symbol>
|
|
64
|
-
scip-query code <candidate-symbol>
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
Use `kind-counts` or `by-kind` when the codebase is unfamiliar.
|
|
68
|
-
|
|
69
|
-
This step is complete only when the failing path has a plausible entry point with source evidence.
|
|
70
|
-
|
|
71
|
-
### 3. Follow execution and data
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
scip-query call-graph <entry-symbol>
|
|
75
|
-
scip-query code <callee-symbol>
|
|
76
|
-
scip-query refs <state-or-api-symbol>
|
|
77
|
-
scip-query fan-in <suspect-symbol>
|
|
78
|
-
scip-query fan-out <suspect-file>
|
|
79
|
-
scip-query dataflow <symbol-or-variable>
|
|
80
|
-
scip-query slice <symbol-or-variable>
|
|
81
|
-
scip-query slice <symbol-or-variable> --forward
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
Stop expanding when the first code fact that can cause the symptom is found.
|
|
85
|
-
|
|
86
|
-
When a candidate cause emerges, state it as a hypothesis alongside one rival — the next-most-plausible explanation for the same symptom. Name the observation that distinguishes them (a log line, a probe, a narrower test) and execute it. Choose the discriminator that is cheapest to run, not the one most likely to confirm.
|
|
87
|
-
|
|
88
|
-
This step is complete only when the path explains the symptom or the missing evidence is explicit.
|
|
89
|
-
|
|
90
|
-
### 4. Compare nearby implementations
|
|
91
|
-
|
|
92
|
-
```bash
|
|
93
|
-
scip-query similar <suspect-symbol> --json --full
|
|
94
|
-
scip-query similar <suspect-symbol> <similar-symbol> --plan
|
|
95
|
-
scip-query similar-files <suspect-file> --json --full
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
Use comparisons to find missing guards, conversions, lifecycle steps, or error handling. Preserve essential differences.
|
|
99
|
-
|
|
100
|
-
This step is complete only when comparisons either support the fix or are rejected with a reason.
|
|
101
|
-
|
|
102
|
-
### 5. Bound and fix
|
|
103
|
-
|
|
104
|
-
```bash
|
|
105
|
-
scip-query change-surface <suspect-file> --json --full
|
|
106
|
-
scip-query affected <suspect-symbol> --json
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
Make the smallest code change that fixes the root cause.
|
|
110
|
-
|
|
111
|
-
This step is complete only when the changed symbol/file is justified by blast-radius evidence.
|
|
112
|
-
|
|
113
|
-
### 6. Verify
|
|
114
|
-
|
|
115
|
-
Run the reproduction, narrow test or smoke command, and invoke `scip-verify`.
|
|
116
|
-
|
|
117
|
-
## Report
|
|
118
|
-
|
|
119
|
-
```markdown
|
|
120
|
-
Bug:
|
|
121
|
-
Entry point:
|
|
122
|
-
Root cause:
|
|
123
|
-
Rival considered:
|
|
124
|
-
Discriminator: <the executed observation that separated them>
|
|
125
|
-
Fix:
|
|
126
|
-
Verification:
|
|
127
|
-
Remaining risk:
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
Do not present a guess as a root cause. A root cause with no rival considered and no executed discriminator is a guess. If no root cause is proven, report the missing evidence.
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: scip-diagram
|
|
3
|
-
description: Diagram code with scip-query evidence. Use for code flow diagrams, architecture diagrams, data-flow maps, dependency maps, blast-radius visuals, module maps, or HTML artifacts explaining a system.
|
|
4
|
-
commands:
|
|
5
|
-
- template: "scip-query system <module>"
|
|
6
|
-
when: "Collect evidence: module map for a dependency or architecture diagram."
|
|
7
|
-
- template: "scip-query trace <symbol>"
|
|
8
|
-
when: "Collect evidence: definition plus references for a call-flow diagram."
|
|
9
|
-
- template: "scip-query call-graph <symbol>"
|
|
10
|
-
when: "Collect evidence: callers/callees for a call-flow diagram."
|
|
11
|
-
- template: "scip-query dataflow <symbol>"
|
|
12
|
-
when: "Collect evidence: producers/consumers for a data-flow diagram."
|
|
13
|
-
- template: "scip-query affected <symbol> --json"
|
|
14
|
-
when: "Collect evidence: blast-radius nodes and edges."
|
|
15
|
-
- template: "scip-query change-surface <file> --json --full"
|
|
16
|
-
when: "Collect evidence: exports and consumers for a change-surface map."
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
# scip-diagram
|
|
20
|
-
|
|
21
|
-
Use this skill to build a visual explanation from compiler-resolved facts. 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.
|
|
22
|
-
|
|
23
|
-
Load shared mechanics from [`../_shared/SKILL.md`](../_shared/SKILL.md).
|
|
24
|
-
|
|
25
|
-
<!-- BEGIN GENERATED SKILL COMMANDS -->
|
|
26
|
-
## Commands for this skill
|
|
27
|
-
|
|
28
|
-
| Command | Purpose | When |
|
|
29
|
-
| --- | --- | --- |
|
|
30
|
-
| `scip-query system <module>` | Full module map: files, symbols, deps in/out | Collect evidence: module map for a dependency or architecture diagram. |
|
|
31
|
-
| `scip-query trace <symbol>` | Trace a symbol: definition + all references | Collect evidence: definition plus references for a call-flow diagram. |
|
|
32
|
-
| `scip-query call-graph <symbol>` | Show incoming callers and outgoing callees for a symbol | Collect evidence: callers/callees for a call-flow diagram. |
|
|
33
|
-
| `scip-query dataflow <symbol>` | Reference-level dataflow: definition sites, usage sites, producers, consumers | Collect evidence: producers/consumers for a data-flow diagram. |
|
|
34
|
-
| `scip-query affected <symbol> --json` | Transitive closure of symbols that could break if this symbol changes | Collect evidence: blast-radius nodes and edges. |
|
|
35
|
-
| `scip-query change-surface <file> --json --full` | Pre-change briefing: exports, consumers, and blast-radius risk | Collect evidence: exports and consumers for a change-surface map. |
|
|
36
|
-
|
|
37
|
-
Use this shortlist first. Open [`../_shared/SKILL.md`](../_shared/SKILL.md) only when it is insufficient.
|
|
38
|
-
<!-- END GENERATED SKILL COMMANDS -->
|
|
39
|
-
|
|
40
|
-
## Rules
|
|
41
|
-
|
|
42
|
-
1. Run evidence before drawing.
|
|
43
|
-
2. Default to a self-contained HTML file.
|
|
44
|
-
3. Include command provenance in the artifact.
|
|
45
|
-
4. Scope large graphs into clusters instead of rendering a hairball.
|
|
46
|
-
5. Verify the HTML opens and the diagram is nonblank.
|
|
47
|
-
|
|
48
|
-
## Workflow
|
|
49
|
-
|
|
50
|
-
### 1. Pick diagram type
|
|
51
|
-
|
|
52
|
-
| User wants | Diagram |
|
|
53
|
-
| --- | --- |
|
|
54
|
-
| Feature flow | Call flow |
|
|
55
|
-
| Value origin or mutation | Data flow |
|
|
56
|
-
| Dependents | Blast radius |
|
|
57
|
-
| Module architecture | Dependency map |
|
|
58
|
-
| Hard-to-change explanation | Change surface or bottleneck map |
|
|
59
|
-
| Classes or ownership | Hierarchy and surface map |
|
|
60
|
-
|
|
61
|
-
This step is complete only when the diagram's node and edge types are chosen.
|
|
62
|
-
|
|
63
|
-
### 2. Collect evidence
|
|
64
|
-
|
|
65
|
-
Use only commands needed for the chosen diagram:
|
|
66
|
-
|
|
67
|
-
```bash
|
|
68
|
-
scip-query system <module>
|
|
69
|
-
scip-query surface <module>
|
|
70
|
-
scip-query outline <file>
|
|
71
|
-
scip-query trace <symbol>
|
|
72
|
-
scip-query code <symbol>
|
|
73
|
-
scip-query call-graph <symbol>
|
|
74
|
-
scip-query dataflow <symbol>
|
|
75
|
-
scip-query slice <symbol>
|
|
76
|
-
scip-query slice <symbol> --forward
|
|
77
|
-
scip-query deps <file>
|
|
78
|
-
scip-query rdeps <file>
|
|
79
|
-
scip-query affected <symbol> --json
|
|
80
|
-
scip-query change-surface <file> --json --full
|
|
81
|
-
scip-query hierarchy <symbol> --json
|
|
82
|
-
scip-query fan-out <file> --json
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
This step is complete only when every planned node and edge has a source command.
|
|
86
|
-
|
|
87
|
-
### 3. Build the artifact
|
|
88
|
-
|
|
89
|
-
Write to:
|
|
90
|
-
|
|
91
|
-
```text
|
|
92
|
-
docs/scip-query/diagrams/YYYY-MM-DD-<scope>.html
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
Include title, scope, summary, visual diagram, legend, evidence table, omitted/collapsed nodes, and unavailable capabilities.
|
|
96
|
-
|
|
97
|
-
Use inline CSS and semantic HTML or inline SVG. Give stable dimensions, wrapping labels, accessible colors, and distinct edge styles for calls, data, dependencies, and risk.
|
|
98
|
-
|
|
99
|
-
This step is complete only when the HTML contains the visual and provenance table.
|
|
100
|
-
|
|
101
|
-
### 4. Verify
|
|
102
|
-
|
|
103
|
-
Open the file locally or use a browser/screenshot tool when available. Confirm:
|
|
104
|
-
|
|
105
|
-
- diagram is nonblank;
|
|
106
|
-
- labels do not overlap badly;
|
|
107
|
-
- major nodes and edges trace to evidence;
|
|
108
|
-
- `scip-verify` has been invoked when this is part of a docs/code change.
|
|
109
|
-
|
|
110
|
-
End with the file path and what the diagram proves.
|