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
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Twin drift: same concept, silently diverged copies
|
|
2
|
+
|
|
3
|
+
Use when the same concept exists in more than one place under the same or a
|
|
4
|
+
near name and the bodies have silently diverged — same-name or near-name
|
|
5
|
+
functions across files with diverged bodies, drifted policy thresholds,
|
|
6
|
+
one-sided fixes, or consolidating a duplicated concept into one canonical
|
|
7
|
+
helper.
|
|
8
|
+
|
|
9
|
+
Command shortlist: `twin-drift --json --full` (detector), `duplicate-bodies
|
|
10
|
+
--json --full` (cross-check), `code <symbol>`, `refs <symbol>`, `diff-gate
|
|
11
|
+
--json`.
|
|
12
|
+
|
|
13
|
+
## Definitions
|
|
14
|
+
|
|
15
|
+
A **twin drift group** is a same-leaf-name family of callables spanning at
|
|
16
|
+
least two files whose normalized-token bodies are neither identical (that's
|
|
17
|
+
`duplicate-bodies`' job) nor unrelated (a homonym like `render` or `parse`)
|
|
18
|
+
but partially overlapping — signaling a concept copied once and then edited
|
|
19
|
+
independently in only some of its copies.
|
|
20
|
+
|
|
21
|
+
**Near-name** means case-insensitive match, or edit-distance ≤ 2 for names of
|
|
22
|
+
8 or more characters.
|
|
23
|
+
|
|
24
|
+
## Detect
|
|
25
|
+
|
|
26
|
+
Run `scip-query twin-drift --json --full` to surface every DIVERGENT and
|
|
27
|
+
near-name group in scope; scope it to a module with `-s/--scope <path>` when
|
|
28
|
+
the review should be bounded. Record group count, member count, and
|
|
29
|
+
`maxDivergence` per group.
|
|
30
|
+
|
|
31
|
+
Cross-check results against `scip-query duplicate-bodies --json --full` —
|
|
32
|
+
IDENTICAL groups belong to `duplicate-bodies`, not here; do not re-report
|
|
33
|
+
them. Homonyms — groups with similarity below `--min-similarity` (default
|
|
34
|
+
0.3) — are noise and should not be chased unless `--include-homonyms` was
|
|
35
|
+
explicitly requested.
|
|
36
|
+
|
|
37
|
+
**Complete when:** every group in scope is enumerated with its relationship
|
|
38
|
+
(divergent vs. suppressed homonym).
|
|
39
|
+
|
|
40
|
+
## Classify each DIVERGENT group
|
|
41
|
+
|
|
42
|
+
Use `scip-query code <symbol>` to read every member's body; use the group's
|
|
43
|
+
`firstDivergentTokens` field as a starting point for locating where the
|
|
44
|
+
bodies diverge. Assign exactly one label:
|
|
45
|
+
|
|
46
|
+
- **Intentional variation** — the copies differ because the domains
|
|
47
|
+
genuinely differ (example: a React-specific vs. Vue-specific structural
|
|
48
|
+
comparator branching on framework-specific overlap checks). Essential
|
|
49
|
+
variation stays, and the reason must be recorded.
|
|
50
|
+
- **Drifted policy** — the copies encode what should be one policy (a
|
|
51
|
+
threshold, a normalization rule, an edge-case guard) that only some copies
|
|
52
|
+
received when it last changed. This is a bug: pick the correct value and
|
|
53
|
+
propagate it, or extract the policy into one named function/constant.
|
|
54
|
+
- **One-sided fix** — one copy was bugfixed or hardened and its twin(s)
|
|
55
|
+
were not. This is a bug: apply the same fix to every member, or
|
|
56
|
+
consolidate them.
|
|
57
|
+
|
|
58
|
+
**Complete when:** every DIVERGENT group in scope has one of the three
|
|
59
|
+
labels with a one-line reason.
|
|
60
|
+
|
|
61
|
+
## Act
|
|
62
|
+
|
|
63
|
+
Prefer consolidating a twin-drift group into one exported helper over
|
|
64
|
+
leaving parallel copies; when consolidation is unsafe or premature, record
|
|
65
|
+
the intent gap explicitly (comment or waiver) rather than silently accepting
|
|
66
|
+
the drift.
|
|
67
|
+
|
|
68
|
+
For groups being consolidated, pick the canonical member by comparing
|
|
69
|
+
consumer counts via `scip-query refs <symbol-in-file-A>` and `scip-query
|
|
70
|
+
refs <symbol-in-file-B>` — prefer the member with the most consumers, or the
|
|
71
|
+
one in the more general/shared location when consumer counts tie.
|
|
72
|
+
|
|
73
|
+
To consolidate: extract or move the canonical body to one exported helper
|
|
74
|
+
and update the other members to call it, or delete them outright if they
|
|
75
|
+
were pure duplication with different names for caller convenience. Preserve
|
|
76
|
+
any classified-essential variation as a parameter or a thin caller-side
|
|
77
|
+
branch, not as a second copy of the whole body.
|
|
78
|
+
|
|
79
|
+
For groups marked intentional variation, do not force consolidation —
|
|
80
|
+
instead record the reason in a comment near one of the members so the next
|
|
81
|
+
`twin-drift` run and the next reader both see it was considered.
|
|
82
|
+
|
|
83
|
+
**Complete when:** every DIVERGENT group is either consolidated (old copies
|
|
84
|
+
gone or forwarding) or has a recorded reason it stays separate.
|
|
85
|
+
|
|
86
|
+
## Verify
|
|
87
|
+
|
|
88
|
+
After acting, rerun `scip-query twin-drift` to confirm consolidated groups
|
|
89
|
+
no longer appear as DIVERGENT, and run the routed postchecks from
|
|
90
|
+
`scip-verify`.
|
|
91
|
+
|
|
92
|
+
The twin-partner check inside `scip-query diff-gate` is advisory and never
|
|
93
|
+
blocks the gate by itself, but a finding there on your own diff means you've
|
|
94
|
+
reproduced the exact defect class this workflow exists to catch — fix it or
|
|
95
|
+
explicitly accept it before finishing.
|
|
96
|
+
|
|
97
|
+
**Complete when:** `twin-drift` shows no unclassified DIVERGENT groups in
|
|
98
|
+
scope and any `diff-gate` findings are resolved or explained.
|
|
99
|
+
|
|
100
|
+
## Report
|
|
101
|
+
|
|
102
|
+
List: scope; groups found (total/divergent/suppressed homonyms); each
|
|
103
|
+
divergent group with classification and action taken; and the verification
|
|
104
|
+
results of `twin-drift --json --full` and `diff-gate --json`.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scip-diagnose
|
|
3
|
+
description: Use in a scip-query-indexed repo when something is broken, crashing, failing a test, returning wrong data, or regressed — one bug, a recurring family pointing at one design flaw, or a raw issue/ticket needing a fix packet. Also use proactively to prove whether a parser/AST branch is reachable or dead, even with no reported failure. Distinct from the `debugging` skill: that one supplies the general method (reproduce on demand, observe rather than infer, one variable at a time); this one supplies SCIP evidence (trace, refs, dataflow) in an indexed repo. Use both together. Distinct from `incident-review`, which is postmortem methodology after an outage rather than finding a live cause.
|
|
4
|
+
commands:
|
|
5
|
+
- template: "scip-query files <feature-or-error-term>"
|
|
6
|
+
when: "Locate the files that can explain an unnormalized report or error."
|
|
7
|
+
- template: "scip-query trace <candidate-symbol>"
|
|
8
|
+
when: "Connect a candidate cause to its definition and references."
|
|
9
|
+
- template: "scip-query call-graph <entry-symbol>"
|
|
10
|
+
when: "Trace callers and callees around the observed failure path."
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# scip-diagnose
|
|
14
|
+
|
|
15
|
+
<!-- BEGIN GENERATED SKILL COMMANDS -->
|
|
16
|
+
## Commands for this skill
|
|
17
|
+
|
|
18
|
+
| Command | Purpose | Returns | Coverage | When |
|
|
19
|
+
| --- | --- | --- | --- | --- |
|
|
20
|
+
| `scip-query files <feature-or-error-term>` | Find files matching a pattern | matching file paths | `complete` | Locate the files that can explain an unnormalized report or error. |
|
|
21
|
+
| `scip-query trace <candidate-symbol>` | Trace a symbol: definition + all references | definition sites with source and signature; referencing files with line numbers | `bounded` | Connect a candidate cause to its definition and references. |
|
|
22
|
+
| `scip-query call-graph <entry-symbol>` | Show incoming callers and outgoing callees for a symbol | caller and callee symbol identities with files | `bounded` | Trace callers and callees around the observed failure path. |
|
|
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
|
+
Move from a reported failure to a minimal verified fix. This skill covers four related but distinct situations — one bug, a recurring family of bugs pointing at one design flaw, a raw issue report that needs to become a fix packet, and an unverified parser/AST branch that needs to be proven reachable or dead — and routes each to its own evidence-gathering mode.
|
|
30
|
+
|
|
31
|
+
This skill has no commands of its own; every mode below draws on the shared `scip-query` vocabulary. Load [`../_shared/SKILL.md`](../_shared/SKILL.md) for freshness, lookup, postcheck, and subagent rules whenever a mode's shortlist is insufficient.
|
|
32
|
+
|
|
33
|
+
## Pick the mode
|
|
34
|
+
|
|
35
|
+
| Situation | Mode | Reference |
|
|
36
|
+
| --- | --- | --- |
|
|
37
|
+
| One reported failure: broken, crashing, failing a test, wrong output, a regression — needs the smallest verified fix | **Debug** | [`references/debug.md`](references/debug.md) |
|
|
38
|
+
| The same kind of bug keeps recurring in one subsystem, patching hasn't worked, or the user lists several fixed/observed bugs and asks what is really wrong | **Root cause** | [`references/root-cause.md`](references/root-cause.md) |
|
|
39
|
+
| A raw bug report, GitHub issue, support ticket, TODO, or vague defect that has not yet been turned into evidence | **Triage** | [`references/triage.md`](references/triage.md) |
|
|
40
|
+
| A conditional branches on a parser/AST node's type, tag, or shape and nobody has checked it against the real parser — dead-branch or wrong-node-type suspicion, tree-sitter grammar mismatch, even with no reported failure | **Probe reachability** | [`references/probe-reachability.md`](references/probe-reachability.md) |
|
|
41
|
+
|
|
42
|
+
Pick exactly one mode before gathering evidence. Debug and triage both trace a single failing path, but debug assumes the failure is already pinned down enough to reproduce; triage exists because it isn't — normalize the report first. Root cause is not "debug but more bugs": it requires a falsifiable design-flaw hypothesis, killed rivals, retrodiction, and an executed latent-instance hunt, not just more patches. Probe reachability is the only mode that runs without a reported failure at all — it proves or disproves reachability of code nobody has verified against the real parser.
|
|
43
|
+
|
|
44
|
+
## How the modes relate to each other and to other skills
|
|
45
|
+
|
|
46
|
+
- **Debug → Root cause escalation:** if a debug fix is the second or third patch to the same mechanism, stop and switch to root-cause mode instead of shipping another narrow patch.
|
|
47
|
+
- **Triage → Debug/Root cause handoff:** triage produces a fix packet with a suspected root cause and a failing-test plan; if the user also asked for the fix, implement from the packet using debug-mode discipline (smallest change, verify, `scip-verify`).
|
|
48
|
+
- **Root cause → scip-plan handoff:** root-cause mode diagnoses and hands off; it does not edit application code. The flaw and invariants become `scip-plan`'s current-flow and risk evidence, and the family table and hunt results constrain its slices.
|
|
49
|
+
- **vs. `debugging` skill:** that skill supplies the general method — reproduce on demand, observe rather than infer, change one variable at a time. This skill supplies the SCIP-specific evidence (trace, refs, dataflow, blast radius) that method needs in an indexed repo. Use both together; this skill does not replace that discipline.
|
|
50
|
+
- **vs. `incident-review`:** that skill is postmortem methodology applied after an outage has already been resolved. This skill finds a live, unresolved cause.
|
|
51
|
+
- **vs. `scip-audit`:** structural smells with no bug evidence go to the maintainability scenario in `scip-audit`. A recurring bug family with bug evidence goes to root-cause mode here.
|
|
52
|
+
- **Verification:** every mode that ends in a code change verifies with the narrowest repo test or smoke command, then invokes the `scip-verify` skill. Triage-only requests stop at the packet.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Debug: one failure → minimal verified fix
|
|
2
|
+
|
|
3
|
+
Use this mode 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.
|
|
4
|
+
|
|
5
|
+
Load shared mechanics from [`../../_shared/SKILL.md`](../../_shared/SKILL.md) only when this shortlist is insufficient.
|
|
6
|
+
|
|
7
|
+
## Commands used in this mode
|
|
8
|
+
|
|
9
|
+
| Command | When |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `scip-query files <feature-or-error-term>` | Find the entry point from a feature name or error term (complete coverage: matching file paths). |
|
|
12
|
+
| `scip-query outline <candidate-file>` | Enumerate symbols in a candidate file while narrowing the entry point. |
|
|
13
|
+
| `scip-query trace <candidate-symbol>` | Find the entry point: definition plus every reference (bounded coverage: definition sites with source/signature, referencing files with line numbers). |
|
|
14
|
+
| `scip-query code <candidate-symbol>` | Read the exact source at the candidate entry point or callee. |
|
|
15
|
+
| `scip-query kind-counts` / `scip-query by-kind` | Orient in an unfamiliar codebase during entry-point discovery. |
|
|
16
|
+
| `scip-query call-graph <entry-symbol>` | Follow execution: callers and callees along the failing path (bounded coverage). |
|
|
17
|
+
| `scip-query refs <state-or-api-symbol>` | Follow execution: every referencing site of shared state or an API symbol. |
|
|
18
|
+
| `scip-query fan-in <suspect-symbol>` / `scip-query fan-out <suspect-file>` | Follow execution: who depends on the suspect symbol/file, and what it depends on. |
|
|
19
|
+
| `scip-query dataflow <symbol-or-variable>` | Follow data: producers, consumers, and usage sites (bounded coverage). |
|
|
20
|
+
| `scip-query slice <symbol-or-variable>` / `--forward` | Follow data: backward and forward slices from the suspect value. |
|
|
21
|
+
| `scip-query similar <suspect-symbol> --json --full` | Compare nearby implementations for missing guards or handling (bounded coverage: symbol pairs, similarity scores, shared evidence). |
|
|
22
|
+
| `scip-query similar <suspect-symbol> <similar-symbol> --plan` | Compare two specific implementations directly. |
|
|
23
|
+
| `scip-query similar-files <suspect-file> --json --full` | Compare nearby files for missing handling. |
|
|
24
|
+
| `scip-query change-surface <suspect-file> --json --full` | Bound the fix: exports, consumers, and blast-radius risk (bounded coverage). |
|
|
25
|
+
| `scip-query affected <suspect-symbol> --json` | Bound the fix: transitive closure of symbols that could break. |
|
|
26
|
+
|
|
27
|
+
## Rules
|
|
28
|
+
|
|
29
|
+
1. Reproduce or restate the failure before editing.
|
|
30
|
+
2. Use scip-query to find entry points, call paths, data flow, and blast radius.
|
|
31
|
+
3. Prefer one narrow fix over broad cleanup.
|
|
32
|
+
4. Verify with the narrowest repo test or smoke command, then invoke `scip-verify`.
|
|
33
|
+
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 presented with unearned confidence.
|
|
34
|
+
|
|
35
|
+
## Workflow
|
|
36
|
+
|
|
37
|
+
### 1. Pin the failure
|
|
38
|
+
|
|
39
|
+
Record observed behavior, expected behavior, the reproducing command/route/UI action/test/job/file, error text or wrong output, and the regression window if known.
|
|
40
|
+
|
|
41
|
+
If no reproduction is provided, build the smallest runnable reproduction from existing tests, scripts, CLI, or app entry points.
|
|
42
|
+
|
|
43
|
+
This step is complete only when the mismatch is concrete enough to test, or the missing external fact is named.
|
|
44
|
+
|
|
45
|
+
### 2. Find the entry point
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
scip-query files <feature-or-error-term>
|
|
49
|
+
scip-query outline <candidate-file>
|
|
50
|
+
scip-query trace <candidate-symbol>
|
|
51
|
+
scip-query code <candidate-symbol>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Use `kind-counts` or `by-kind` when the codebase is unfamiliar.
|
|
55
|
+
|
|
56
|
+
This step is complete only when the failing path has a plausible entry point with source evidence.
|
|
57
|
+
|
|
58
|
+
### 3. Follow execution and data
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
scip-query call-graph <entry-symbol>
|
|
62
|
+
scip-query code <callee-symbol>
|
|
63
|
+
scip-query refs <state-or-api-symbol>
|
|
64
|
+
scip-query fan-in <suspect-symbol>
|
|
65
|
+
scip-query fan-out <suspect-file>
|
|
66
|
+
scip-query dataflow <symbol-or-variable>
|
|
67
|
+
scip-query slice <symbol-or-variable>
|
|
68
|
+
scip-query slice <symbol-or-variable> --forward
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Stop expanding the trace when the first code fact that can cause the symptom is found.
|
|
72
|
+
|
|
73
|
+
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 the preferred hypothesis.
|
|
74
|
+
|
|
75
|
+
This step is complete only when the path explains the symptom or the missing evidence is made explicit.
|
|
76
|
+
|
|
77
|
+
### 4. Compare nearby implementations
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
scip-query similar <suspect-symbol> --json --full
|
|
81
|
+
scip-query similar <suspect-symbol> <similar-symbol> --plan
|
|
82
|
+
scip-query similar-files <suspect-file> --json --full
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Use implementation comparisons to find missing guards, conversions, lifecycle steps, or error handling, while preserving essential differences.
|
|
86
|
+
|
|
87
|
+
This step is complete only when comparisons either support the fix or are rejected with a stated reason.
|
|
88
|
+
|
|
89
|
+
### 5. Bound and fix
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
scip-query change-surface <suspect-file> --json --full
|
|
93
|
+
scip-query affected <suspect-symbol> --json
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Make the smallest code change that fixes the root cause.
|
|
97
|
+
|
|
98
|
+
This step is complete only when the changed symbol/file is justified by blast-radius evidence.
|
|
99
|
+
|
|
100
|
+
### 6. Verify
|
|
101
|
+
|
|
102
|
+
Run the reproduction, a narrow test or smoke command, and invoke `scip-verify`.
|
|
103
|
+
|
|
104
|
+
## Report
|
|
105
|
+
|
|
106
|
+
```markdown
|
|
107
|
+
Bug:
|
|
108
|
+
Entry point:
|
|
109
|
+
Root cause:
|
|
110
|
+
Rival considered:
|
|
111
|
+
Discriminator: <the executed observation that separated them>
|
|
112
|
+
Fix:
|
|
113
|
+
Verification:
|
|
114
|
+
Remaining risk:
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
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, state the missing evidence instead of asserting a cause.
|
package/skills/{scip-probe-reachability/SKILL.md → scip-diagnose/references/probe-reachability.md}
RENAMED
|
@@ -1,38 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
name: scip-probe-reachability
|
|
3
|
-
description: Prove whether a parser/AST branch is actually reachable by running the real parser on minimal inputs. Use for unreachable or dead node-type/shape branches, wrong node-type strings, tree-sitter grammar mismatches, or any conditional written for an AST or parser output that has never been checked against the real parser.
|
|
4
|
-
commands:
|
|
5
|
-
- template: "scip-query outline <file> --signatures"
|
|
6
|
-
when: "Enumerate branches: symbol tree with signatures for the target file."
|
|
7
|
-
- template: "scip-query code <symbol>"
|
|
8
|
-
when: "Enumerate branches: read each branch condition's exact node-type check."
|
|
9
|
-
- template: "scip-query trace <symbol>"
|
|
10
|
-
when: "Enumerate branches: confirm the function's only caller/entry point."
|
|
11
|
-
---
|
|
1
|
+
# Probe reachability: prove a parser/AST branch reachable or dead
|
|
12
2
|
|
|
13
|
-
|
|
3
|
+
Use this mode for code that branches on a parser or AST node's type or shape (`node.type === '...'`, a grammar-specific tag, a regex over token shape) where nobody has verified the real parser ever produces that type or shape. A branch written from documentation, memory, or a similar grammar in another language can be permanently dead: it looks correct, compiles, and is never exercised by a single test, because the input that should reach it never reaches it under the actual parser. This mode runs without any reported failure — the trigger is an unverified branch, not a bug report.
|
|
14
4
|
|
|
15
|
-
|
|
5
|
+
Load shared mechanics from [`../../_shared/SKILL.md`](../../_shared/SKILL.md) only when this shortlist is insufficient.
|
|
16
6
|
|
|
17
|
-
|
|
7
|
+
## Commands used in this mode
|
|
18
8
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
|
23
|
-
|
|
|
24
|
-
| `scip-query outline <file> --signatures` | Tree view of symbols in a file, with line ranges | Enumerate branches: symbol tree with signatures for the target file. |
|
|
25
|
-
| `scip-query code <symbol>` | Read the source code for a symbol (bounded to its definition range) | Enumerate branches: read each branch condition's exact node-type check. |
|
|
26
|
-
| `scip-query trace <symbol>` | Trace a symbol: definition + all references | Enumerate branches: confirm the function's only caller/entry point. |
|
|
27
|
-
|
|
28
|
-
Use this shortlist first. Open [`../_shared/SKILL.md`](../_shared/SKILL.md) only when it is insufficient.
|
|
29
|
-
<!-- END GENERATED SKILL COMMANDS -->
|
|
9
|
+
| Command | When |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `scip-query outline <file> --signatures` | Enumerate branches: symbol tree with signatures for the target file (complete coverage: symbol names, nesting, line ranges). |
|
|
12
|
+
| `scip-query code <symbol>` | Enumerate branches: read each branch condition's exact node-type check (complete coverage: definition identity, source, line range). |
|
|
13
|
+
| `scip-query trace <symbol>` | Enumerate branches: confirm the function's only caller/entry point (bounded coverage). |
|
|
30
14
|
|
|
31
15
|
## Rules
|
|
32
16
|
|
|
33
17
|
1. Never trust a branch condition by reading it; run the real parser on an input constructed to hit it.
|
|
34
18
|
2. Write scratch probe scripts only under the session scratchpad, never inside the repository — they are throwaway evidence, not product code.
|
|
35
|
-
3. Never create a git worktree and never symlink `node_modules` for this
|
|
19
|
+
3. Never create a git worktree and never symlink `node_modules` for this mode's probes; import the parser module directly (from `src/` via a TypeScript runner, or from the built package) in a standalone script that needs no repo-root install step.
|
|
36
20
|
4. A branch is a finding whether it is truly unreachable (dead code) or reachable but under a different node-type string than the code checks (a silent misclassification, which is worse than dead code because it fails without raising anything).
|
|
37
21
|
5. Completion requires every node-type/shape branch in the target function to have either a reached probe or a filed finding — partial coverage is not done.
|
|
38
22
|
|
|
@@ -51,7 +35,7 @@ This step is complete only when every node-type/shape branch in the target funct
|
|
|
51
35
|
|
|
52
36
|
### 2. Construct a minimal input per branch
|
|
53
37
|
|
|
54
|
-
For each branch, write the smallest source snippet in the target language that should, by the language's grammar, produce a node of that type or shape at that point in the tree. Prefer one snippet per branch; note when a single snippet is expected to exercise more than one branch
|
|
38
|
+
For each branch, write the smallest source snippet in the target language that should, by the language's grammar, produce a node of that type or shape at that point in the tree. Prefer one snippet per branch; note when a single snippet is expected to exercise more than one sibling branch in a walk.
|
|
55
39
|
|
|
56
40
|
This step is complete only when every branch has a candidate input snippet.
|
|
57
41
|
|
|
@@ -86,6 +70,7 @@ Branches:
|
|
|
86
70
|
| --- | --- | --- | --- |
|
|
87
71
|
|
|
88
72
|
Findings:
|
|
73
|
+
|
|
89
74
|
- <branch> — dead branch / wrong node-type string — fix: <direction>
|
|
90
75
|
```
|
|
91
76
|
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# Root cause: recurring bug family → design flaw → least invasive remedy
|
|
2
|
+
|
|
3
|
+
Use this mode to move from a family of related bugs to the design flaw that
|
|
4
|
+
produces them, and to the least invasive remedy that eliminates the class.
|
|
5
|
+
Debug mode takes one failure to one minimal fix; the maintainability scenario
|
|
6
|
+
in `scip-audit` finds structural smells without bug evidence; this mode starts
|
|
7
|
+
from evidence that patching has not worked — the same kind of bug keeps
|
|
8
|
+
recurring — and asks what the system's design gets wrong.
|
|
9
|
+
|
|
10
|
+
Load shared mechanics from [`../../_shared/SKILL.md`](../../_shared/SKILL.md) only when this shortlist is insufficient.
|
|
11
|
+
|
|
12
|
+
## Commands used in this mode
|
|
13
|
+
|
|
14
|
+
| Command | When |
|
|
15
|
+
| --- | --- |
|
|
16
|
+
| `scip-query trace <mechanism-symbol>` | Assemble the family: mechanism and violated invariant for each bug (bounded coverage: definition sites with source/signature, referencing files with line numbers). |
|
|
17
|
+
| `scip-query code <mechanism-symbol>` / `scip-query dataflow <mechanism-symbol>` | Assemble the family: trace each bug's mechanism to source rather than a symptom description. |
|
|
18
|
+
| `scip-query co-change <fix-site-file>` | Assemble the family: files that historically changed together with each fix site without a dependency edge — hidden coupling candidates, and a way to find family members the user forgot (bounded coverage: file pairs, co-change counts, confidence, history context). |
|
|
19
|
+
| `scip-query system <system-scope>` | Define the system's real responsibilities, files, and dependencies in and out (complete coverage: module file paths, exported symbols with line ranges, internal and reverse dependencies). |
|
|
20
|
+
| `scip-query surface <system-scope>` | Define the system: referents for its public surface alongside `system`. |
|
|
21
|
+
| `scip-query similar <fixed-symbol> --json --full` | Predict: hunt latent instances among sibling implementations of the fixed code (bounded coverage). |
|
|
22
|
+
| `scip-query refs <invariant-carrier>` | Predict: every site that touches the violated invariant's state (bounded coverage: referencing file paths, reference line numbers grouped by file). |
|
|
23
|
+
| `scip-query affected <remedy-symbol> --json` | Choose the remedy rung: blast radius of the candidate remedy (bounded coverage: transitive closure of symbols that could break). |
|
|
24
|
+
|
|
25
|
+
## Terms
|
|
26
|
+
|
|
27
|
+
A **bug family** is a set of failures whose mechanisms violate the same invariant; what makes it a family rather than a coincidence is that one stated flaw derives every member, so fixing members one at a time treats symptoms of a shared cause.
|
|
28
|
+
|
|
29
|
+
A **design flaw** is a mismatch between what a system's design assumes and what its real responsibilities require; what makes it the root cause is that it is the earliest fact from which every family member's mechanism follows, so removing it removes the class.
|
|
30
|
+
|
|
31
|
+
**Retrodiction** is deriving each already-known bug from the hypothesized flaw; what makes it a test is that a family member the flaw cannot derive either shrinks the family or kills the hypothesis.
|
|
32
|
+
|
|
33
|
+
A **latent instance** is a not-yet-reported bug the flaw predicts must exist in unfixed code; what makes it decisive is that it is checkable now — finding one confirms the diagnosis and becomes a fix target, while an honest hunt that finds none weakens the diagnosis and must be reported as weakening it.
|
|
34
|
+
|
|
35
|
+
The **remedy ladder** is the ordered set of interventions from least to most invasive; what makes the order binding is that each rung is only justified when a constructed family member survives the rung below it.
|
|
36
|
+
|
|
37
|
+
## Rules
|
|
38
|
+
|
|
39
|
+
1. Every bug in the family gets a mechanism traced to source, not a symptom description: which invariant broke, where, and what the fix did. Sources: fix commits (`git log --follow`, `git show`) plus `trace`/`code`/`dataflow`.
|
|
40
|
+
2. The flaw hypothesis must be falsifiable and stated as a design claim — "the design assumes X, but the system's responsibilities include Y" — never as a narrative about unlucky bugs.
|
|
41
|
+
3. State at least two rivals and kill them with evidence: unrelated coincidences, caller misuse rather than design, one missed edge case rather than a structural flaw.
|
|
42
|
+
4. The hypothesis must retrodict every family member and predict at least one latent instance, and the latent-instance hunt must be executed (`similar`, `refs` over the invariant's carriers, or a constructed probe), not merely argued.
|
|
43
|
+
5. Choose the lowest remedy rung that kills the whole class — retrodicted and latent members both. Climb a rung only when a constructed family member survives the rung below, and keep that counterexample in the record.
|
|
44
|
+
6. Root-cause stories are the most rationalization-prone artifact in software: prefer delegating the attack on the diagnosis and the remedy to a fresh subagent given only the family table, system definition, and hypothesis — briefed to win by refuting it. Solo fallback: write the rival hypotheses and the latent-instance predictions before reading any more code.
|
|
45
|
+
7. The verdict is derived with counts, and the diagnosis hands off to
|
|
46
|
+
`scip-plan` for implementation — this mode does not edit application code
|
|
47
|
+
itself.
|
|
48
|
+
|
|
49
|
+
## Workflow
|
|
50
|
+
|
|
51
|
+
### 1. Assemble the bug family
|
|
52
|
+
|
|
53
|
+
For each reported or fixed bug, fill one row:
|
|
54
|
+
|
|
55
|
+
```markdown
|
|
56
|
+
| Bug | Symptom | Mechanism (file:symbol) | Invariant violated | Fix applied | Source |
|
|
57
|
+
| --- | ------- | ----------------------- | ------------------ | ----------- | ------ |
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Evidence: the user's description, fix commits (`git log --follow`, `git show`), `scip-query trace`/`code` on the mechanism symbols, `scip-query co-change` on fix sites to find members the user forgot.
|
|
61
|
+
|
|
62
|
+
This step is complete only when every row has a source-traced mechanism and a named invariant — a bug whose mechanism cannot be traced is listed as `unconfirmed member`, not silently included.
|
|
63
|
+
|
|
64
|
+
### 2. Define the system
|
|
65
|
+
|
|
66
|
+
Define the system that owns the family, contextually: its wider class, then the essential responsibility that explains its other traits in this codebase — with referents from `scip-query system <scope>` and `surface <scope>`. Then list the design's load-bearing assumptions as the code actually embodies them (not as the README states them), each with a `Source:` citation.
|
|
67
|
+
|
|
68
|
+
This step is complete only when the system's real responsibilities and embodied assumptions are stated with citations.
|
|
69
|
+
|
|
70
|
+
### 3. Hypothesize the flaw — and its rivals
|
|
71
|
+
|
|
72
|
+
State the flaw as a falsifiable design claim:
|
|
73
|
+
|
|
74
|
+
```markdown
|
|
75
|
+
Flaw hypothesis: the design assumes <X> (Source: <citation>), but the system's
|
|
76
|
+
responsibilities include <Y> (Source: <citation>); every family member is an
|
|
77
|
+
instance of the X∧Y collision.
|
|
78
|
+
|
|
79
|
+
Rivals:
|
|
80
|
+
|
|
81
|
+
- R1. Coincidence — the members have unrelated causes. Killed by: <evidence> | ALIVE
|
|
82
|
+
- R2. Misuse — callers hold the bug, the design is sound. Killed by: <evidence> | ALIVE
|
|
83
|
+
- R3. <next-most-plausible> — Killed by: <evidence> | ALIVE
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
A rival still marked `ALIVE` at the end of the workflow caps the diagnosis at `CANDIDATE`, not `CONFIRMED`.
|
|
87
|
+
|
|
88
|
+
### 4. Retrodict and predict
|
|
89
|
+
|
|
90
|
+
Retrodiction: derive each family-table row from the flaw in one sentence each. A member that cannot be derived is removed from the family (say so) or refutes the hypothesis (start over).
|
|
91
|
+
|
|
92
|
+
Prediction: the flaw implies unfixed instances exist. Name where they must be, then hunt:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
scip-query similar <fixed-symbol> --json --full
|
|
96
|
+
scip-query refs <invariant-carrier>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
plus a constructed probe when the claim is cheaply executable. Record each prediction with an executed result:
|
|
100
|
+
|
|
101
|
+
```markdown
|
|
102
|
+
- L1. <predicted latent instance> → FOUND at <file:line> (new fix target) | NOT FOUND after <hunt executed>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
This step is complete only when every family member is retrodicted and every prediction has an executed hunt result. Zero latent instances found is a reportable weakness of the diagnosis, not a detail to omit.
|
|
106
|
+
|
|
107
|
+
### 5. Choose the lowest rung
|
|
108
|
+
|
|
109
|
+
The remedy ladder, in order:
|
|
110
|
+
|
|
111
|
+
1. **Enforce the invariant at a boundary** — type, guard, constraint, lint, trigger — without moving code.
|
|
112
|
+
2. **Consolidate the responsibility into one owner** — the scattered decision gets one named mechanism.
|
|
113
|
+
3. **Redesign the core behind its existing interface** — consumers untouched.
|
|
114
|
+
4. **Redesign the interfaces** — last resort; consumers migrate.
|
|
115
|
+
|
|
116
|
+
For the chosen rung, run the attack: construct a family member — retrodicted
|
|
117
|
+
or latent — that survives the rung. If one survives, keep the counterexample
|
|
118
|
+
in the record and climb one rung. Check blast radius with
|
|
119
|
+
`scip-query affected` before proposing any rung above 1. For protocol- or
|
|
120
|
+
lifecycle-shaped flaws whose remedy must hold across interleavings, note the
|
|
121
|
+
escalation path to the TLA+ mode in `scip-plan`.
|
|
122
|
+
|
|
123
|
+
This step is complete only when the chosen rung has an attack record showing no family member survives it, and every rejected lower rung keeps its surviving counterexample.
|
|
124
|
+
|
|
125
|
+
### 6. Report and hand off
|
|
126
|
+
|
|
127
|
+
```markdown
|
|
128
|
+
## Root-cause diagnosis
|
|
129
|
+
|
|
130
|
+
System: <definition with referents>
|
|
131
|
+
Bug family: <n> members traced, <u> unconfirmed
|
|
132
|
+
Flaw: <the design claim> — CONFIRMED | CANDIDATE (rival <id> alive)
|
|
133
|
+
Rivals: <r> stated, <k> killed with evidence
|
|
134
|
+
Retrodiction: <n>/<n> members derived
|
|
135
|
+
Latent instances: <p> predicted, <f> found (each a fix target), hunts executed
|
|
136
|
+
Remedy: rung <1-4> — <the intervention>; lower rungs rejected by <counterexamples>
|
|
137
|
+
Blast radius: <affected summary>
|
|
138
|
+
Escalation: <none | scip-plan TLA+ mode for <property>>
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Hand the diagnosis to `scip-plan`: the flaw and invariants constrain current
|
|
142
|
+
flow and risks, the family table and hunt results constrain the slices, and
|
|
143
|
+
the surviving-counterexample record seeds the verification attacks.
|
|
144
|
+
|
|
145
|
+
The diagnosis is complete only when the verdict line carries the counts and every count is backed by an entry in the record above it.
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Triage: raw report → grounded fix packet
|
|
2
|
+
|
|
3
|
+
Use this mode to turn a report into a grounded fix packet. Triage is the evidence pass that determines whether the issue is reproducible, where it enters the codebase, what root cause is likely, and what test should fail before the fix.
|
|
4
|
+
|
|
5
|
+
Load shared mechanics from [`../../_shared/SKILL.md`](../../_shared/SKILL.md) only when this shortlist is insufficient.
|
|
6
|
+
|
|
7
|
+
## Commands used in this mode
|
|
8
|
+
|
|
9
|
+
| Command | When |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| `scip-query files <issue-term>` | Map ownership: locate files for the reported term (complete coverage: matching file paths). |
|
|
12
|
+
| `scip-query outline <candidate-file>` | Map ownership: enumerate symbols in a candidate owner file. |
|
|
13
|
+
| `scip-query system <module-or-scope>` / `scip-query surface <module-or-scope>` | Map ownership: the module's real shape and public surface for broad subsystems. |
|
|
14
|
+
| `scip-query kind-counts` / `scip-query by-kind` | Map ownership: orient in broad or unfamiliar subsystems. |
|
|
15
|
+
| `scip-query trace <entry-or-error-symbol>` | Trace the failing path: definition plus every reference (bounded coverage: definition sites with source/signature, referencing files with line numbers). |
|
|
16
|
+
| `scip-query code <entry-or-error-symbol>` | Trace the failing path: read the exact source (complete coverage: definition identity, source, line range). For stack traces, read the exact range with `scip-query code 'file:start-end'`. |
|
|
17
|
+
| `scip-query call-graph <entry-symbol>` | Trace the failing path: callers and callees (bounded coverage). |
|
|
18
|
+
| `scip-query dataflow <state-or-input-symbol>` / `scip-query slice <state-or-input-symbol>` | Trace the failing path: data flow and slices from the suspect input or state. |
|
|
19
|
+
| `scip-query similar <suspect-symbol> --json --full` | Compare and bound: nearby implementations for missing handling (bounded coverage: symbol pairs, similarity scores, shared evidence). |
|
|
20
|
+
| `scip-query similar <suspect-symbol> <comparison-symbol> --plan` | Compare and bound: two specific implementations directly. |
|
|
21
|
+
| `scip-query similar-files <suspect-file> --json --full` | Compare and bound: nearby files for missing handling. |
|
|
22
|
+
| `scip-query co-change <suspect-file> --json --full` | Compare and bound: files that historically changed with the suspect file. |
|
|
23
|
+
| `scip-query change-surface <suspect-file> --json --full` | Compare and bound: exports, consumers, and blast-radius risk. |
|
|
24
|
+
| `scip-query affected <suspect-symbol> --json` | Compare and bound: transitive impact bound for the fix plan (bounded coverage). |
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
|
|
28
|
+
1. Do not file or implement a fix from the issue title alone.
|
|
29
|
+
2. Use scip-query for code evidence: entry points, references, call flow, data flow, blast radius, and similar implementations.
|
|
30
|
+
3. Prefer a failing test plan before a code plan.
|
|
31
|
+
4. If the user asks only for triage, stop at the packet. If they also asked to fix it, implement only after the packet is clear.
|
|
32
|
+
|
|
33
|
+
## Workflow
|
|
34
|
+
|
|
35
|
+
### 1. Normalize the report
|
|
36
|
+
|
|
37
|
+
Record summary, observed behavior, expected behavior, reproduction, affected surface, severity, user impact, and logs/screenshots/tests/links.
|
|
38
|
+
|
|
39
|
+
Ask the user only for product intent, credentials, private data, or external system state that the repo cannot answer.
|
|
40
|
+
|
|
41
|
+
This step is complete only when missing facts are either recovered or named.
|
|
42
|
+
|
|
43
|
+
### 2. Map ownership
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
scip-query files <issue-term>
|
|
47
|
+
scip-query outline <candidate-file>
|
|
48
|
+
scip-query system <module-or-scope>
|
|
49
|
+
scip-query surface <module-or-scope>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Use `kind-counts` and `by-kind` for broad subsystems.
|
|
53
|
+
|
|
54
|
+
This step is complete only when likely owner files and surfaces are named.
|
|
55
|
+
|
|
56
|
+
### 3. Trace the failing path
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
scip-query trace <entry-or-error-symbol>
|
|
60
|
+
scip-query code <entry-or-error-symbol>
|
|
61
|
+
scip-query call-graph <entry-symbol>
|
|
62
|
+
scip-query dataflow <state-or-input-symbol>
|
|
63
|
+
scip-query slice <state-or-input-symbol>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
For stack traces, read the exact range with `scip-query code 'file:start-end'`.
|
|
67
|
+
|
|
68
|
+
This step is complete only when a suspected root cause is tied to source evidence or labeled unproven.
|
|
69
|
+
|
|
70
|
+
### 4. Compare and bound
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
scip-query similar <suspect-symbol> --json --full
|
|
74
|
+
scip-query similar <suspect-symbol> <comparison-symbol> --plan
|
|
75
|
+
scip-query similar-files <suspect-file> --json --full
|
|
76
|
+
scip-query co-change <suspect-file> --json --full
|
|
77
|
+
scip-query change-surface <suspect-file> --json --full
|
|
78
|
+
scip-query affected <suspect-symbol> --json
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
This step is complete only when the packet has a narrow test shape and an impact bound.
|
|
82
|
+
|
|
83
|
+
## Packet
|
|
84
|
+
|
|
85
|
+
```markdown
|
|
86
|
+
## Issue
|
|
87
|
+
|
|
88
|
+
<one-sentence mismatch>
|
|
89
|
+
|
|
90
|
+
## Reproduction
|
|
91
|
+
|
|
92
|
+
<steps, command, failing test, or missing data>
|
|
93
|
+
|
|
94
|
+
## Evidence
|
|
95
|
+
|
|
96
|
+
- <scip-query command>: <fact>
|
|
97
|
+
|
|
98
|
+
## Suspected Root Cause
|
|
99
|
+
|
|
100
|
+
<earliest code fact that explains the symptom>
|
|
101
|
+
|
|
102
|
+
## Impact
|
|
103
|
+
|
|
104
|
+
- users/surfaces affected
|
|
105
|
+
- blast radius
|
|
106
|
+
|
|
107
|
+
## Fix Plan
|
|
108
|
+
|
|
109
|
+
1. Add or update failing test/smoke check.
|
|
110
|
+
2. Make the smallest code change.
|
|
111
|
+
3. Run targeted test.
|
|
112
|
+
4. Invoke `scip-verify`.
|
|
113
|
+
|
|
114
|
+
## Open Questions
|
|
115
|
+
|
|
116
|
+
- <product intent or external state only>
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
If no root cause is proven, label the issue `needs reproduction` or `needs product decision` rather than asserting one.
|