scip-query 0.19.5 → 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 +48 -1
- package/README.md +241 -48
- 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 +17 -17
- package/docs/API_EVOLUTION.md +71 -0
- package/docs/CLI_JSON_OUTPUT.md +83 -0
- package/docs/COMMAND_REFERENCE.md +5 -3
- package/docs/COMMITTED_RECORD_COMPATIBILITY.md +117 -0
- package/docs/CONFIGURATION_WRITE_SAFETY.md +130 -0
- package/docs/DETECTOR_GUIDE.md +46 -46
- package/docs/DURABILITY.md +103 -0
- package/docs/INDEX_GENERATIONS.md +121 -0
- package/docs/LOCK_PROTOCOL.md +133 -0
- package/docs/MAILBOX_LIFECYCLE.md +197 -0
- package/docs/REINDEX_METADATA_COMPATIBILITY.md +84 -0
- package/docs/RUST_DURABLE_SESSION_PROTOCOL.md +126 -0
- package/docs/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 +88 -229
- package/skills/_shared/agents/openai.yaml +1 -1
- package/skills/_shared/references/agent-contract-catalog.md +105 -0
- package/skills/_shared/references/command-catalog.md +118 -0
- package/skills/_shared/references/detector-precision-and-diffgate.md +59 -0
- package/skills/_shared/references/evidence-and-dead-code.md +25 -0
- package/skills/scip-audit/SKILL.md +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} +11 -27
- package/skills/scip-diagnose/references/root-cause.md +145 -0
- package/skills/scip-diagnose/references/triage.md +119 -0
- package/skills/scip-explore/SKILL.md +54 -85
- package/skills/scip-explore/agents/openai.yaml +2 -2
- package/skills/scip-explore/references/diagrams.md +40 -0
- package/skills/scip-explore/references/language-playbook.md +49 -0
- package/skills/scip-improve/SKILL.md +56 -0
- package/skills/scip-improve/agents/openai.yaml +4 -0
- package/skills/scip-improve/references/cleanup-batches.md +53 -0
- package/skills/scip-improve/references/directory-moves.md +53 -0
- package/skills/scip-improve/references/doc-reconcile.md +30 -0
- package/skills/scip-improve/references/frontend-extraction.md +39 -0
- package/skills/scip-improve/references/maintainability-mechanism.md +43 -0
- package/skills/scip-improve/references/twin-drift.md +35 -0
- package/skills/scip-plan/SKILL.md +68 -0
- package/skills/scip-plan/agents/openai.yaml +4 -0
- package/skills/scip-plan/references/api-impact.md +19 -0
- package/skills/scip-plan/references/conductor.md +41 -0
- package/skills/scip-plan/references/high-assurance.md +43 -0
- package/skills/scip-plan/references/hyper-optimization.md +50 -0
- package/skills/scip-plan/references/tla-model.md +88 -0
- package/skills/scip-query/SKILL.md +53 -98
- package/skills/scip-query/agents/openai.yaml +2 -2
- package/skills/scip-setup/SKILL.md +69 -181
- package/skills/scip-setup/agents/openai.yaml +3 -3
- package/skills/scip-setup/references/bootstrap-workflow.md +120 -0
- package/skills/scip-setup/references/language-verification.md +61 -0
- package/skills/scip-setup/references/lifecycle-commands.md +119 -0
- package/skills/scip-setup/references/per-repo-triage.md +24 -0
- package/skills/scip-verify/SKILL.md +121 -84
- package/skills/scip-verify/agents/openai.yaml +2 -2
- package/skills/scip-verify/references/calibrate-detectors.md +170 -0
- package/dist/chunk-2CTX5CMX.js +0 -4
- package/dist/chunk-2Y373BDD.js +0 -2
- package/dist/chunk-7UY7SD7D.js +0 -927
- 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-TW4OG5FC.js +0 -4
- package/dist/chunk-U7DSEKOM.js +0 -30
- package/dist/chunk-V27BEQJN.js +0 -7
- package/dist/chunk-XAGAZSFE.js +0 -6
- package/dist/chunk-XBN5VO53.js +0 -2
- package/dist/command-descriptors-N2TL4XM2.js +0 -613
- package/dist/direct-navigation-DUCZCTOE.js +0 -3
- package/skills/scip-api-impact/SKILL.md +0 -140
- package/skills/scip-api-impact/agents/openai.yaml +0 -4
- package/skills/scip-calibrate/SKILL.md +0 -131
- package/skills/scip-calibrate/agents/openai.yaml +0 -4
- package/skills/scip-claim-audit/SKILL.md +0 -107
- package/skills/scip-claim-audit/agents/openai.yaml +0 -4
- package/skills/scip-cleanup-audit/SKILL.md +0 -130
- package/skills/scip-cleanup-audit/agents/openai.yaml +0 -4
- package/skills/scip-cleanup-improve/SKILL.md +0 -85
- package/skills/scip-cleanup-improve/agents/openai.yaml +0 -4
- package/skills/scip-concrete-plan/HIGH_ASSURANCE.md +0 -317
- package/skills/scip-concrete-plan/SKILL.md +0 -105
- package/skills/scip-concrete-plan/agents/openai.yaml +0 -4
- package/skills/scip-conductor/SKILL.md +0 -133
- package/skills/scip-conductor/agents/openai.yaml +0 -4
- package/skills/scip-debug/SKILL.md +0 -130
- package/skills/scip-debug/agents/openai.yaml +0 -4
- package/skills/scip-diagram/SKILL.md +0 -110
- package/skills/scip-diagram/agents/openai.yaml +0 -4
- package/skills/scip-directory-architecture/SKILL.md +0 -266
- package/skills/scip-directory-architecture/agents/openai.yaml +0 -4
- package/skills/scip-doc-reconcile/SKILL.md +0 -89
- package/skills/scip-doc-reconcile/agents/openai.yaml +0 -4
- package/skills/scip-hyper-optimization/SKILL.md +0 -156
- package/skills/scip-hyper-optimization/agents/openai.yaml +0 -4
- package/skills/scip-integrity-audit/SKILL.md +0 -152
- package/skills/scip-integrity-audit/agents/openai.yaml +0 -4
- package/skills/scip-language-playbook/SKILL.md +0 -106
- package/skills/scip-language-playbook/agents/openai.yaml +0 -4
- package/skills/scip-maintainability/SKILL.md +0 -158
- package/skills/scip-maintainability/agents/openai.yaml +0 -4
- package/skills/scip-probe-reachability/agents/openai.yaml +0 -4
- package/skills/scip-react-maintainability/SKILL.md +0 -101
- package/skills/scip-react-maintainability/agents/openai.yaml +0 -4
- package/skills/scip-root-cause/SKILL.md +0 -151
- package/skills/scip-root-cause/agents/openai.yaml +0 -4
- package/skills/scip-tla-model-system/SKILL.md +0 -148
- package/skills/scip-tla-model-system/agents/openai.yaml +0 -4
- package/skills/scip-triage-issue/SKILL.md +0 -133
- package/skills/scip-triage-issue/agents/openai.yaml +0 -4
- package/skills/scip-twin-drift/SKILL.md +0 -109
- package/skills/scip-twin-drift/agents/openai.yaml +0 -4
- package/skills/scip-vue-maintainability/SKILL.md +0 -107
- package/skills/scip-vue-maintainability/agents/openai.yaml +0 -4
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# React and Vue maintainability
|
|
2
|
+
|
|
3
|
+
Reviews React and Vue frontends as maintainable systems: React as
|
|
4
|
+
components, hooks, JSX structure, and behavior lifecycles; Vue as single-file
|
|
5
|
+
components, templates, scripts, styles, external scripts, components, and
|
|
6
|
+
composables. Both follow the same four-step workflow below; framework-
|
|
7
|
+
specific commands and definitions are called out per step.
|
|
8
|
+
|
|
9
|
+
## Definitions
|
|
10
|
+
|
|
11
|
+
- **Component duplicate candidate** (React or Vue) — a pair or group of
|
|
12
|
+
rendered structures that repeat the same user-facing arrangement,
|
|
13
|
+
controls, states, props, or data-presentation shape enough that a shared
|
|
14
|
+
component may reduce drift.
|
|
15
|
+
- **React hook candidate** — a pair or group of component behaviors that
|
|
16
|
+
repeat the same state lifecycle, effects, requests, validation,
|
|
17
|
+
persistence, callback policy, or derived-data rule enough that a shared
|
|
18
|
+
hook may preserve behavior better.
|
|
19
|
+
- **Vue composable candidate** — a pair or group of script behaviors that
|
|
20
|
+
repeat the same state lifecycle, effects, requests, validation,
|
|
21
|
+
persistence, or derived-data policy enough that a shared composable may
|
|
22
|
+
preserve behavior better.
|
|
23
|
+
- **Large component/view pressure** — one component, SFC, or linked view
|
|
24
|
+
file contains several kinds of knowledge that change for different
|
|
25
|
+
reasons. A large file is review pressure, not proof of duplication, by
|
|
26
|
+
itself.
|
|
27
|
+
|
|
28
|
+
## Step 1 — Bound and scan
|
|
29
|
+
|
|
30
|
+
Pick the narrowest source root, feature area, or changed-file scope that
|
|
31
|
+
still includes likely reuse partners.
|
|
32
|
+
|
|
33
|
+
**Vue only:** if component references, imported composables, script blocks,
|
|
34
|
+
or linked external scripts matter, run `scip-query augment-vue --project
|
|
35
|
+
<path-to-tsconfig>` first — it adds compiler-resolved Vue SFC references to
|
|
36
|
+
the SQLite index using Volar (complete coverage) and must run before
|
|
37
|
+
scanning.
|
|
38
|
+
|
|
39
|
+
Then run, all uncapped with `--full --json`:
|
|
40
|
+
|
|
41
|
+
**React:**
|
|
42
|
+
```
|
|
43
|
+
scip-query react-component-duplicates --scope <scope> --full --json
|
|
44
|
+
scip-query react-hook-candidates --scope <scope> --full --json
|
|
45
|
+
scip-query react-large-component-pressure --scope <scope> --full --json
|
|
46
|
+
scip-query recent-duplicates --scope <scope> --full --json
|
|
47
|
+
scip-query health --scope <scope> --json
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Vue:**
|
|
51
|
+
```
|
|
52
|
+
scip-query vue-component-duplicates --scope <scope> --full --json
|
|
53
|
+
scip-query vue-composable-candidates --scope <scope> --full --json
|
|
54
|
+
scip-query vue-large-view-pressure --scope <scope> --full --json
|
|
55
|
+
scip-query recent-duplicates --scope <scope> --full --json
|
|
56
|
+
scip-query health --json
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Every `*-duplicates`/`*-candidates`/`*-pressure` command has bounded
|
|
60
|
+
coverage — `--full` is required for the uncapped scan.
|
|
61
|
+
`react-component-duplicates`/`vue-component-duplicates` derive structural
|
|
62
|
+
similarity from tags, props, events, and bindings (React) or tags, bindings,
|
|
63
|
+
slots, and directives (Vue). `recent-duplicates` finds directional pairs:
|
|
64
|
+
recent code that re-implements established callable, React, or Vue code.
|
|
65
|
+
`health` gives a composite codebase health report (score, findings,
|
|
66
|
+
priorities, baselines, coverage notes) scoped to the frontend area.
|
|
67
|
+
|
|
68
|
+
**Complete when:** command scope, counts, and uncapped/full status are
|
|
69
|
+
recorded.
|
|
70
|
+
|
|
71
|
+
## Step 2 — Cross-check candidates
|
|
72
|
+
|
|
73
|
+
- **Component-duplicate-only finding** — inspect for a shared presentational
|
|
74
|
+
component or existing component reuse.
|
|
75
|
+
- **Hook/composable-candidate-only finding** — inspect for shared behavior,
|
|
76
|
+
lifecycle, request, validation, persistence, event, or derived-state
|
|
77
|
+
policy.
|
|
78
|
+
- **Both overlap** — inspect for a feature-level concept that needs both a
|
|
79
|
+
component and a hook/composable boundary.
|
|
80
|
+
- **Large-component/view-only finding** — split by reason to change, not by
|
|
81
|
+
line count.
|
|
82
|
+
|
|
83
|
+
Use `scip-query outline <file>`, `deps <file>`, `rdeps <file>`,
|
|
84
|
+
`similar-files --scope <scope>`, and (React) `similar
|
|
85
|
+
<closest-existing-component-or-hook>` / (Vue) `recent-duplicates --scope
|
|
86
|
+
<scope> --full --json` to validate candidates.
|
|
87
|
+
|
|
88
|
+
**Complete when:** each top candidate is classified as reuse, extract,
|
|
89
|
+
split, skip, or blocked.
|
|
90
|
+
|
|
91
|
+
## Step 3 — Act on findings
|
|
92
|
+
|
|
93
|
+
Prefer reuse over extraction.
|
|
94
|
+
|
|
95
|
+
- **React:** extract a component for repeated UI structure, states, props,
|
|
96
|
+
slots/children, or design-system composition; extract a hook for repeated
|
|
97
|
+
state, effects, requests, subscriptions, memoized derivations, callbacks,
|
|
98
|
+
or persistence.
|
|
99
|
+
- **Vue:** extract a component for repeated template structure, props,
|
|
100
|
+
slots, states, or design-system composition; extract a composable for
|
|
101
|
+
repeated state, lifecycle, requests, validation, persistence, derived
|
|
102
|
+
data, or event policy.
|
|
103
|
+
|
|
104
|
+
Keep domain-specific/essential variation at the call site rather than
|
|
105
|
+
abstracting it away.
|
|
106
|
+
|
|
107
|
+
Anti-patterns to avoid as a side effect of acting on a finding: do not
|
|
108
|
+
create boolean-soup APIs or wrapper components with no policy. Shared
|
|
109
|
+
design-system primitives, icons, labels, route names, test IDs, or CSS
|
|
110
|
+
utilities alone are not sufficient evidence to justify a duplicate/hook/
|
|
111
|
+
composable claim. Similar JSX/templates with different domain lifecycles may
|
|
112
|
+
justify a presentational component but does not justify a shared hook or
|
|
113
|
+
composable.
|
|
114
|
+
|
|
115
|
+
**Complete when:** the chosen action reduces future drift without creating
|
|
116
|
+
boolean-soup APIs or wrapper components with no policy.
|
|
117
|
+
|
|
118
|
+
## Step 4 — Verify
|
|
119
|
+
|
|
120
|
+
Invoke `scip-verify` and use its authoritative postcheck table, including
|
|
121
|
+
the applicable React/Vue, extraction, duplicate, parameter, wrapper,
|
|
122
|
+
passthrough, and stale-abstraction checks.
|
|
123
|
+
|
|
124
|
+
**Complete when:** acted-on candidate pairs disappear, weaken materially, or
|
|
125
|
+
are explicitly accepted as essential variation.
|
|
126
|
+
|
|
127
|
+
## Report
|
|
128
|
+
|
|
129
|
+
Executive read, command evidence, candidate groups, recommended action,
|
|
130
|
+
post-change proof, and remaining accepted variation.
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Integrity: is this real?
|
|
2
|
+
|
|
3
|
+
Structural review (`references/maintainability.md`) asks "is this well
|
|
4
|
+
organized?" This drill set asks **"is this real?"** — it hunts decorative
|
|
5
|
+
checkers, adapters written against imagined data, features that have
|
|
6
|
+
silently never run, and numbers nobody ever recomputed.
|
|
7
|
+
|
|
8
|
+
Command shortlist: `refs <symbol>`, `code <symbol>`, `trace <symbol>`,
|
|
9
|
+
`call-graph <symbol>`, `twin-drift -s <scope> --json`,
|
|
10
|
+
`twin-ab <symbolA> <symbolB>`, `outline <file> --signatures`,
|
|
11
|
+
`decorative-checkers -s <scope> --json`, `not-implemented -s <scope> --json`,
|
|
12
|
+
`test-quality -s <scope> --json`.
|
|
13
|
+
|
|
14
|
+
## The stance
|
|
15
|
+
|
|
16
|
+
A green result you have never seen fail is unverified: every status word,
|
|
17
|
+
banner, and metric is testimony from the code, not evidence about the code,
|
|
18
|
+
so cross-examine the producer before believing it. The most dangerous code
|
|
19
|
+
is not broken code; it is code that reports success without doing the work.
|
|
20
|
+
|
|
21
|
+
## Run all five drills over the chosen scope
|
|
22
|
+
|
|
23
|
+
### Drill 1 — Falsify every checker
|
|
24
|
+
|
|
25
|
+
Inventory everything in scope that accepts/rejects, passes/fails, or
|
|
26
|
+
validates (checkers, gates, verifiers, validators) by finding producers with
|
|
27
|
+
`refs`/`call-graph` on the status words in their output.
|
|
28
|
+
|
|
29
|
+
For each one found, construct an input that MUST fail — a wrong binding, a
|
|
30
|
+
corrupt file, an impossible value — and run it. A checker that passes its
|
|
31
|
+
should-fail input is decorative and must be filed as a defect, not a note.
|
|
32
|
+
|
|
33
|
+
Before filing, attempt the defense: an accusation triggers a rewrite, so
|
|
34
|
+
search for the failure exit the drill may have missed — a config-gated
|
|
35
|
+
branch, an async rejection, or one-hop delegation (the calibration's known
|
|
36
|
+
noise archetypes). File the defect with the executed should-fail input
|
|
37
|
+
attached and the defense attempt noted; a defense that succeeds clears the
|
|
38
|
+
checker and stays in the record as its witness.
|
|
39
|
+
|
|
40
|
+
**Complete when:** every checker in scope has been witnessed rejecting a
|
|
41
|
+
constructed should-fail input, or is listed with a reason it cannot be.
|
|
42
|
+
|
|
43
|
+
Mechanized by `scip-query decorative-checkers`, which finds
|
|
44
|
+
`validate*`/`verify*`/`check*`/`assert*`/`is*`/`has*` callables with no
|
|
45
|
+
reachable failure exit anywhere in their body. Run it first to shortlist
|
|
46
|
+
candidates before hand-constructing should-fail inputs. It was calibrated
|
|
47
|
+
2026-07-03 against two external repos, is standalone-only, and its noise
|
|
48
|
+
archetypes past one-hop delegation are documented in
|
|
49
|
+
`docs/validation/2026-07-03-integrity-detector-calibration.md`.
|
|
50
|
+
|
|
51
|
+
### Drill 2 — Diff every adapter against captured reality
|
|
52
|
+
|
|
53
|
+
For each parser/adapter of an external format (tool output, XML/JSON
|
|
54
|
+
schemas, protocol messages), obtain ONE real sample from the actual source
|
|
55
|
+
and diff it against the code's assumptions and the tests' fixtures. Ask of
|
|
56
|
+
every fixture whether it was generated from reality or imagined. A parser
|
|
57
|
+
and a hand-written fixture can validate each other's shared hallucination
|
|
58
|
+
indefinitely, so fixture-vs-code agreement alone is not proof of
|
|
59
|
+
correctness.
|
|
60
|
+
|
|
61
|
+
**Complete when:** every adapter has been checked against at least one
|
|
62
|
+
captured-real sample.
|
|
63
|
+
|
|
64
|
+
### Drill 3 — Autopsy every fallback
|
|
65
|
+
|
|
66
|
+
For every catch block, `??` fallback, and degraded mode in scope, produce an
|
|
67
|
+
execution witness (a test, a probe, a log) that the PRIMARY path runs —
|
|
68
|
+
because a primary path that has never worked looks identical to a healthy
|
|
69
|
+
fallback. Use the probe-reachability mode in `scip-diagnose` for parser/AST
|
|
70
|
+
branch reachability
|
|
71
|
+
when autopsying fallbacks. A fallback that always fires means the feature
|
|
72
|
+
above it is dead — "date of death: birth."
|
|
73
|
+
|
|
74
|
+
**Complete when:** every fallback's primary path has a witness or a filed
|
|
75
|
+
defect.
|
|
76
|
+
|
|
77
|
+
Mechanized by `scip-query not-implemented`, which finds reachable placeholder
|
|
78
|
+
stubs (`throw new Error('not implemented')`, TODO-comment + return-default,
|
|
79
|
+
empty bodies) that a real caller, entry surface, or package-surface export
|
|
80
|
+
can actually reach — distinguishing "primary path never built" from `dead`'s
|
|
81
|
+
"primary path built but unreferenced." Standalone-only (calibrated
|
|
82
|
+
2026-07-03; 0 live findings on two external repos post-fix). A clean run
|
|
83
|
+
means "nothing this shape found," not proof that every fallback's primary
|
|
84
|
+
path is live.
|
|
85
|
+
|
|
86
|
+
### Drill 4 — Hand-compute every metric twice
|
|
87
|
+
|
|
88
|
+
For each number the system reports (scores, counts, estimates), pick two
|
|
89
|
+
concrete instances, compute the expected value by hand from first
|
|
90
|
+
principles, and compare — off-by-a-factor errors (double counting, inflated
|
|
91
|
+
estimates) survive for years when nobody recomputes a single sample.
|
|
92
|
+
|
|
93
|
+
**Complete when:** every reported metric has two hand-verified samples.
|
|
94
|
+
|
|
95
|
+
### Drill 5 — Cross-examine same-concept twins
|
|
96
|
+
|
|
97
|
+
Where one concept is computed in more than one place, feed both
|
|
98
|
+
implementations the same input and require the same answer. `twin-drift`
|
|
99
|
+
finds same-name cases mechanically; same-concept-different-name pairs must be
|
|
100
|
+
traced via `refs` and compared via `code` (see `references/twin-drift.md`
|
|
101
|
+
for the full drift-classification workflow once a pair is found).
|
|
102
|
+
|
|
103
|
+
Once a twin pair is identified, `scip-query twin-ab <symbolA> <symbolB>`
|
|
104
|
+
scaffolds a table-driven vitest file that imports both implementations and
|
|
105
|
+
asserts equal output — fill in the input table and run it. Disagreement
|
|
106
|
+
between twins means at least one is wrong — determine which before
|
|
107
|
+
consolidating them.
|
|
108
|
+
|
|
109
|
+
**Complete when:** every discovered twin pair has been compared on a shared
|
|
110
|
+
input.
|
|
111
|
+
|
|
112
|
+
## Severity
|
|
113
|
+
|
|
114
|
+
Rank findings by what the failure does to a user who trusted the output: a
|
|
115
|
+
decorative checker or false "verified" banner outranks everything; a
|
|
116
|
+
dead-but-fallbacked feature outranks a wrong metric; a wrong metric outranks
|
|
117
|
+
structural mess. Route structural findings to `references/maintainability.md`
|
|
118
|
+
instead of reporting them here — they are real but they are not lies.
|
|
119
|
+
|
|
120
|
+
## Reporting
|
|
121
|
+
|
|
122
|
+
File each finding with: the claim as displayed, the producer (file:line),
|
|
123
|
+
the drill that exposed it, the should-fail input or real sample used, and the
|
|
124
|
+
fix. The audit is complete only when every drill's exit criterion is met for
|
|
125
|
+
the scope, and every defect found has a regression artifact (a test,
|
|
126
|
+
fixture, or model) that fails on the pre-fix behavior.
|
|
127
|
+
|
|
128
|
+
End with a derived verdict, not an impression:
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
Integrity: <scope> — <c> checkers witnessed failing, <a> adapters diffed
|
|
132
|
+
against reality, <f> fallback primaries witnessed live, <m> metrics
|
|
133
|
+
recomputed, <t> twins compared; <d> defects filed, <u> unverifiable (reasons)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
A suspect scope that produces zero defects is itself a claim: state what
|
|
137
|
+
made the suspicion wrong, or rerun the drill that should have caught it.
|
|
138
|
+
|
|
139
|
+
## Your own regression artifacts are in scope too
|
|
140
|
+
|
|
141
|
+
A regression artifact that doesn't actually assert anything, or asserts the
|
|
142
|
+
same literal it stubbed into its own mock, is a fake witness — the same
|
|
143
|
+
"reports success without doing the work" failure mode this drill set hunts
|
|
144
|
+
in production code, just relocated to the test suite.
|
|
145
|
+
|
|
146
|
+
Run `scip-query test-quality -s <scope>` over the audit's own regression
|
|
147
|
+
artifacts (and periodically over the suite at large) to catch fake
|
|
148
|
+
witnesses. It catches assertion-free test bodies, a skipped-test ledger with
|
|
149
|
+
git-blame age (a skip with no fix date attached is a claim nobody is
|
|
150
|
+
checking), and mock-echo (a test that only proves its own stub).
|
|
151
|
+
Standalone-only with mixed precision by sub-check (calibrated 2026-07-03):
|
|
152
|
+
assertion-free and skipped are high-precision; mock-echo is intentionally
|
|
153
|
+
low-precision (syntactic same-literal matching, not dataflow) — treat its
|
|
154
|
+
output as a reviewed candidate list, not a verdict.
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Maintainability: hidden policy, scattered concepts, weak boundaries
|
|
2
|
+
|
|
3
|
+
Maintainability is the degree to which real code units let a maintainer
|
|
4
|
+
understand, verify, and change behavior without rediscovering hidden
|
|
5
|
+
knowledge. Use for hidden policies, scattered concepts, accidental
|
|
6
|
+
variation, weak boundaries, system compression, architecture smells, and
|
|
7
|
+
structural refactor opportunities beyond a health score.
|
|
8
|
+
|
|
9
|
+
Ground all claims in files, symbols, references, call graphs, dependencies,
|
|
10
|
+
surfaces, and blast radius rather than opinion. Do not chase health scores —
|
|
11
|
+
detector counts are clues, not objectives. Name concrete referents (specific
|
|
12
|
+
files/symbols) before naming a code smell. Only add an abstraction when it
|
|
13
|
+
removes hidden policy, names a lifecycle, enforces a rule, or reduces
|
|
14
|
+
concept count — never for its own sake; prefer deletion, inlining, merging,
|
|
15
|
+
generation, or enforcement of an existing mechanism before introducing a
|
|
16
|
+
broad new framework.
|
|
17
|
+
|
|
18
|
+
## Vocabulary
|
|
19
|
+
|
|
20
|
+
- **Code smell** — an observable codebase fact that predicts avoidable
|
|
21
|
+
future mistakes because the same knowledge must be rediscovered,
|
|
22
|
+
synchronized, or defended in more than one place.
|
|
23
|
+
- **Concept boundary** — the line around code units that exist for one
|
|
24
|
+
reason to change.
|
|
25
|
+
- **Hidden policy** — a rule for choosing among several plausible behaviors
|
|
26
|
+
that lives in local branches, comments, conventions, or caller folklore
|
|
27
|
+
instead of a named mechanism.
|
|
28
|
+
- **Lifecycle** — a repeatable sequence of states or steps that makes a
|
|
29
|
+
result valid.
|
|
30
|
+
- **Accidental variation** — difference in code shape that does not
|
|
31
|
+
correspond to behavior, domain facts, runtime constraints, or external
|
|
32
|
+
contracts.
|
|
33
|
+
- **Essential variation** — difference that must remain because the real
|
|
34
|
+
units differ: language grammars, user-visible APIs, runtime environments,
|
|
35
|
+
or compatibility boundaries. Preserve it; do not remove it.
|
|
36
|
+
- **System compression** — replacing several mechanisms that perform the
|
|
37
|
+
same role, policy, lifecycle, or surface job with fewer named mechanisms
|
|
38
|
+
that preserve behavior.
|
|
39
|
+
- **Unifying definition** — the single essential trait that makes several
|
|
40
|
+
code sites one concept. Any scattered-concept or consolidation claim must
|
|
41
|
+
ship its unifying definition; if no such trait covers every cited site,
|
|
42
|
+
the variation is essential and the sites must not be consolidated. Failing
|
|
43
|
+
to state it proves the sites are not one concept — consolidating anyway
|
|
44
|
+
packages essential variation into a false abstraction.
|
|
45
|
+
|
|
46
|
+
## Step 1 — Bound the review
|
|
47
|
+
|
|
48
|
+
Restate the review question as: "What future-maintenance mistakes does this
|
|
49
|
+
structure invite, and what smaller named mechanisms would prevent them
|
|
50
|
+
without hiding real variation?" Name the scope as one of: repo, module,
|
|
51
|
+
command family, query family, runtime surface, fixture set, or feature path.
|
|
52
|
+
|
|
53
|
+
**Complete when:** the review question and scope are both concrete.
|
|
54
|
+
|
|
55
|
+
## Step 2 — Map evidence
|
|
56
|
+
|
|
57
|
+
Run, in sequence: `scip-query stats`, `system <scope>`, `surface <scope>`,
|
|
58
|
+
`files <pattern>`, `outline <file>`, `deps <file>`, `rdeps <file>`, `trace
|
|
59
|
+
<symbol>`, `call-graph <symbol>`, `affected <symbol>`, `change-surface
|
|
60
|
+
<file>`.
|
|
61
|
+
|
|
62
|
+
- `stats` maps repo-wide index size before bounding the review (complete
|
|
63
|
+
coverage).
|
|
64
|
+
- `system <scope>` gives the full module map — files, exported symbols with
|
|
65
|
+
line ranges, internal deps, reverse deps (complete coverage).
|
|
66
|
+
- `surface <scope>` shows which symbols consumers actually use — consumer
|
|
67
|
+
paths and consumed symbol identities (complete coverage).
|
|
68
|
+
- `change-surface <file>` gives a pre-change briefing of defined symbols,
|
|
69
|
+
external consumer counts, and risk levels (bounded coverage).
|
|
70
|
+
- `affected <symbol>` computes the transitive closure of symbols that could
|
|
71
|
+
break if a candidate symbol changes (bounded coverage).
|
|
72
|
+
- `drift --patterns --architecture` finds drift candidates — unused imports
|
|
73
|
+
plus declared architecture boundary violations (bounded coverage; opt-in
|
|
74
|
+
pattern hits are leads, not confirmed findings).
|
|
75
|
+
|
|
76
|
+
Use the cleanup-oriented commands `health`, `similar`, `similar-files`,
|
|
77
|
+
`similar-chains`, `extract-candidates`, `wrapper-candidates`,
|
|
78
|
+
`passthrough-candidates`, `stale-abstractions`, `drift`, and `cycles` as
|
|
79
|
+
evidence-gathering probes during this step, not as final verdicts.
|
|
80
|
+
|
|
81
|
+
**Complete when:** concrete units, consumers, tests, fallbacks, adapters,
|
|
82
|
+
generated artifacts, and compatibility constraints are all visible.
|
|
83
|
+
|
|
84
|
+
## Step 3 — Build the role inventory
|
|
85
|
+
|
|
86
|
+
For each cluster, ask what one concept appears in several places and what
|
|
87
|
+
single essential trait makes them one concept — if the trait cannot be
|
|
88
|
+
stated, they are not one concept. Also ask: what policy is hidden, what
|
|
89
|
+
lifecycle is unnamed, which differences are essential, what must a
|
|
90
|
+
maintainer know that the local interface does not admit, and would a
|
|
91
|
+
smaller mechanism remove a reason to change, versus merely move code?
|
|
92
|
+
|
|
93
|
+
**Complete when:** every candidate smell names its referents and its
|
|
94
|
+
future-maintenance failure mode.
|
|
95
|
+
|
|
96
|
+
## Step 4 — Rank pressure
|
|
97
|
+
|
|
98
|
+
Severity tiers, most to least severe:
|
|
99
|
+
|
|
100
|
+
1. Hidden correctness or evidence policy spread across modules.
|
|
101
|
+
2. A repeated lifecycle or pipeline with no owner.
|
|
102
|
+
3. Public surface exposing accidental internals.
|
|
103
|
+
4. A large module with unrelated reasons to change.
|
|
104
|
+
5. Tests that encode incident history without contract vocabulary.
|
|
105
|
+
6. Adapter families with repeated capability or fallback shapes.
|
|
106
|
+
7. Suppression comments that document architecture decisions instead of
|
|
107
|
+
exceptions.
|
|
108
|
+
8. Thin wrappers and passthroughs that do not buy clarity.
|
|
109
|
+
|
|
110
|
+
Reject and do not act on smells that are aesthetic, unverifiable, or false
|
|
111
|
+
compression.
|
|
112
|
+
|
|
113
|
+
**Complete when:** each target is ranked, skipped, or deferred with
|
|
114
|
+
evidence.
|
|
115
|
+
|
|
116
|
+
## Step 5 — Choose a model
|
|
117
|
+
|
|
118
|
+
For substantial changes, compare at least two of three models:
|
|
119
|
+
|
|
120
|
+
- **Conservative** — delete or inline local bloat.
|
|
121
|
+
- **Shape-level** — introduce one small mechanism for a repeated role or
|
|
122
|
+
lifecycle.
|
|
123
|
+
- **Radical** — replace a scattered surface with metadata, generation, or
|
|
124
|
+
enforced policy.
|
|
125
|
+
|
|
126
|
+
Evaluate: behavior preserved, concept count removed, blast radius, deletion
|
|
127
|
+
potential, false-abstraction failure mode, migration path, and verification
|
|
128
|
+
cost.
|
|
129
|
+
|
|
130
|
+
**Complete when:** the chosen model removes a concept or policy duplication
|
|
131
|
+
rather than merely extracting a helper.
|
|
132
|
+
|
|
133
|
+
## Step 6 — Produce a register or atlas
|
|
134
|
+
|
|
135
|
+
For a broad review, write a register under `docs/plans/` unless the user
|
|
136
|
+
asks not to edit files; for an implementation, write an atlas before
|
|
137
|
+
editing.
|
|
138
|
+
|
|
139
|
+
Dispositions: merge, delete, inline, extract, generate, enforce, supersede,
|
|
140
|
+
defer, skip.
|
|
141
|
+
|
|
142
|
+
Every merge, extract, or generate entry must carry its unifying definition
|
|
143
|
+
and its strongest dissenter (the cited site most likely to differ
|
|
144
|
+
essentially), plus evidence that the dissenter does not actually differ
|
|
145
|
+
essentially. If a dissenter survives review (it really does differ
|
|
146
|
+
essentially), the entry moves to disposition `skip` with reason "essential
|
|
147
|
+
variation" — but the dissenter stays recorded in the register either way.
|
|
148
|
+
|
|
149
|
+
**Complete when:** each opportunity has evidence, disposition, dependency
|
|
150
|
+
order, touch map, and validation plan recorded.
|
|
151
|
+
|
|
152
|
+
## Step 7 — Implement and verify (when asked)
|
|
153
|
+
|
|
154
|
+
Implement the smallest named mechanism that matches the real concept, and
|
|
155
|
+
keep essential variation near the adapter or domain code that knows it.
|
|
156
|
+
After implementing, run focused tests and the routed postchecks from
|
|
157
|
+
`scip-verify`, then complete that verification skill.
|
|
158
|
+
|
|
159
|
+
## Report
|
|
160
|
+
|
|
161
|
+
State the smell addressed, the mechanism introduced or removed, what was
|
|
162
|
+
deliberately not compressed, and verification results.
|
|
@@ -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.
|