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,222 @@
|
|
|
1
|
+
# Directory architecture: boundaries, locality, and safe moves
|
|
2
|
+
|
|
3
|
+
Evaluate, design, reorganize, or migrate folder structure, ownership
|
|
4
|
+
boundaries, locality config, messy repos, AI-generated layout, or safe
|
|
5
|
+
file-move slices.
|
|
6
|
+
|
|
7
|
+
Command shortlist: `system <scope>`, `locality-candidates --json --full`,
|
|
8
|
+
`similar-files --full --json`, `cycles`, `architecture --json`, `drift
|
|
9
|
+
--architecture`, `co-change --json --full`, `health --write-baseline`,
|
|
10
|
+
`diff-gate`, `config-validate --json`.
|
|
11
|
+
|
|
12
|
+
## Definitions
|
|
13
|
+
|
|
14
|
+
- **Ownership boundary** — a folder, package, module, or convention that
|
|
15
|
+
groups code around one stable responsibility.
|
|
16
|
+
- **Dependency edge** — points from code that relies on something to the
|
|
17
|
+
code it relies on; for imports, A → B means A imports B.
|
|
18
|
+
- **Forbidden edge** — an actual cross-boundary dependency rejected by an
|
|
19
|
+
explicit project rule. Directory distance or an unusual import alone does
|
|
20
|
+
not make an edge forbidden.
|
|
21
|
+
- **Layer** — a responsibility ordered by dependency direction, such as
|
|
22
|
+
presentation depending on application.
|
|
23
|
+
- **Subsystem** — a responsibility that owns an end-to-end capability, such
|
|
24
|
+
as authentication or rendering.
|
|
25
|
+
- **Package** — a publication or build unit. **Service** — an independently
|
|
26
|
+
running unit. Do not force the layer, subsystem, package, and service
|
|
27
|
+
concepts all into one single layer hierarchy.
|
|
28
|
+
- **Reciprocal dependency** — dependency traffic in both directions between
|
|
29
|
+
two boundaries; it is a review signal because the boundaries exert mutual
|
|
30
|
+
change pressure, not proof that either import is wrong.
|
|
31
|
+
- **Architecture ratchet** — an enforcement rule that records existing
|
|
32
|
+
violations while preventing new ones, allowing a large codebase to improve
|
|
33
|
+
without a speculative rewrite.
|
|
34
|
+
- **Target structure** — a proposed future layout that expresses an
|
|
35
|
+
ownership model, not merely a prettier tree.
|
|
36
|
+
- **Migration slice** — the smallest set of file moves and import updates
|
|
37
|
+
that can be verified independently.
|
|
38
|
+
- **Slop codebase** — one whose files are arranged by accident, convenience,
|
|
39
|
+
or recent edits rather than stable ownership rules.
|
|
40
|
+
|
|
41
|
+
## Operating principles
|
|
42
|
+
|
|
43
|
+
Start with evidence, not taste. Separate review from migration — do not move
|
|
44
|
+
files unless asked. Preserve broad boundaries when evidence shows they are
|
|
45
|
+
intentional; do not reward a generic "shared" boundary/directory unless the
|
|
46
|
+
shared concept has a name, owner, and cross-boundary consumers. For messy
|
|
47
|
+
repos, produce a discovery map and decisions instead of pretending the
|
|
48
|
+
target structure is obvious. Prefer small verified moves over large
|
|
49
|
+
speculative reorganizations. Configure descriptive boundaries before closing
|
|
50
|
+
(declaring) dependency rules. Treat graph shape (dependency structure) as
|
|
51
|
+
evidence about responsibilities, never as a substitute for identifying them.
|
|
52
|
+
|
|
53
|
+
## Step 1 — Bound the question
|
|
54
|
+
|
|
55
|
+
Classify the request as review, target structure, locality config,
|
|
56
|
+
migration plan, or implementation.
|
|
57
|
+
|
|
58
|
+
**Complete when:** scope and deliverable are explicit.
|
|
59
|
+
|
|
60
|
+
## Step 2 — Inventory evidence
|
|
61
|
+
|
|
62
|
+
Run `stats`, `system <scope>`, `files <pattern>`, `surface <scope>`, `deps
|
|
63
|
+
<file>`, `rdeps <file>`, `change-surface <file>`, `plan-context
|
|
64
|
+
<file-or-symbol>`, `locality-candidates --json --full`, `cycles`,
|
|
65
|
+
`architecture --json`, `drift --architecture`, `co-change`, `similar-files
|
|
66
|
+
--min-similarity 0.6 --min-deps 3`, `similar-chains --min-similarity 0.5`,
|
|
67
|
+
`recent-duplicates`, and `drift`.
|
|
68
|
+
|
|
69
|
+
- `system <scope>` returns module file paths, exported symbols with line
|
|
70
|
+
ranges, internal dependencies, and reverse dependencies.
|
|
71
|
+
- `locality-candidates --json --full` returns directory-locality and
|
|
72
|
+
ancestry candidates from consumer ownership — symbols, current homes,
|
|
73
|
+
consumer locality, and suggested homes.
|
|
74
|
+
- `similar-files --full --json` returns file pairs with similarity scores
|
|
75
|
+
and shared symbols (overlapping dependency profiles).
|
|
76
|
+
- `cycles` detects circular dependency chains between files.
|
|
77
|
+
- `architecture --json` measures configured boundaries, actual dependency
|
|
78
|
+
traffic, forbidden edges, reciprocal pairs, and boundary cycles.
|
|
79
|
+
- `drift --architecture` reviews direct drift findings together with
|
|
80
|
+
boundary coverage and architecture signals.
|
|
81
|
+
- `co-change --json --full` inventories hidden file-level coupling from git
|
|
82
|
+
history — files that change together without a dependency edge.
|
|
83
|
+
|
|
84
|
+
Also read durable project guidance that names architecture, modules,
|
|
85
|
+
ownership, routes, workflows, contracts, or domains.
|
|
86
|
+
|
|
87
|
+
**Complete when:** each folder under review has evidence for exports, entry
|
|
88
|
+
points, consumers, tests, co-change partners, and claimed ownership rules.
|
|
89
|
+
|
|
90
|
+
## Step 3 — Classify boundary maturity
|
|
91
|
+
|
|
92
|
+
Classify each boundary candidate as:
|
|
93
|
+
|
|
94
|
+
- **Mature** — repeated, documented, and enforced by imports, tests,
|
|
95
|
+
routes, packages, standards, or review history.
|
|
96
|
+
- **Emerging** — meaningful and partly repeated but not consistent enough
|
|
97
|
+
to configure.
|
|
98
|
+
- **Accidental** — a convenience bucket, legacy pile, generated artifact,
|
|
99
|
+
recent edit cluster, or mixed reasons to change.
|
|
100
|
+
|
|
101
|
+
**Complete when:** mature, emerging, and accidental boundaries are
|
|
102
|
+
separated.
|
|
103
|
+
|
|
104
|
+
## Step 4 — Build a descriptive architecture model
|
|
105
|
+
|
|
106
|
+
For a large existing codebase, before calling anything a "layer," inventory:
|
|
107
|
+
workspace packages/public exports; applications/services/deployable entry
|
|
108
|
+
points; domain capabilities/end-to-end subsystems;
|
|
109
|
+
persistence/network/rendering/compiler/other technical responsibilities;
|
|
110
|
+
tests/routes/contracts/ownership or architecture documentation; and
|
|
111
|
+
dependency/co-change evidence showing which files already move as a unit.
|
|
112
|
+
|
|
113
|
+
Add mature boundary path patterns to `.scipquery.json` under
|
|
114
|
+
`architecture.boundaries` WITHOUT `allowedDependencies` rows first:
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"architecture": {
|
|
119
|
+
"boundaries": [
|
|
120
|
+
{ "name": "domain", "paths": ["src/domain/**"] },
|
|
121
|
+
{ "name": "runtime", "paths": ["src/runtime/**"] }
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
After adding boundaries, run `scip-query config-validate --json` then
|
|
128
|
+
`scip-query architecture --json` to check the new boundary configuration.
|
|
129
|
+
Use unmapped and ambiguous files to repair boundary membership, and use
|
|
130
|
+
actual boundary edges, reciprocal pairs, and strongly connected groups to
|
|
131
|
+
test whether boundary names describe real separation.
|
|
132
|
+
|
|
133
|
+
**Complete when:** every configured boundary has a stated responsibility and
|
|
134
|
+
the mapping gaps are understood.
|
|
135
|
+
|
|
136
|
+
## Step 5 — Declare only supported dependency rules
|
|
137
|
+
|
|
138
|
+
An `allowedDependencies` row is closed: an outgoing target omitted from a
|
|
139
|
+
present row is forbidden, but a missing row makes no dependency claim at
|
|
140
|
+
all. Example closed config:
|
|
141
|
+
|
|
142
|
+
```json
|
|
143
|
+
{
|
|
144
|
+
"architecture": {
|
|
145
|
+
"boundaries": [ ... ],
|
|
146
|
+
"allowedDependencies": {
|
|
147
|
+
"domain": [],
|
|
148
|
+
"runtime": ["domain"]
|
|
149
|
+
},
|
|
150
|
+
"requireAcyclic": true
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
For each closed `allowedDependencies` row, record the evidence for its
|
|
156
|
+
intended direction. Do not copy the current dependency graph into the
|
|
157
|
+
allow-list merely to obtain zero findings. Leave emerging or disputed
|
|
158
|
+
dependency rules undeclared rather than closing the row prematurely.
|
|
159
|
+
|
|
160
|
+
**Complete when:** every forbidden edge is understood as either
|
|
161
|
+
implementation debt, a false boundary, or a policy mistake.
|
|
162
|
+
|
|
163
|
+
## Step 6 — Propose structure or decisions
|
|
164
|
+
|
|
165
|
+
Structure a directory architecture review/proposal using this exact section
|
|
166
|
+
order:
|
|
167
|
+
|
|
168
|
+
1. Scope
|
|
169
|
+
2. Current Structure Map
|
|
170
|
+
3. Boundary Maturity
|
|
171
|
+
4. Descriptive Architecture Model
|
|
172
|
+
5. Dependency Rules
|
|
173
|
+
6. Forbidden-Edge Ledger
|
|
174
|
+
7. Reciprocal and Cycle Review
|
|
175
|
+
8. Target Structure
|
|
176
|
+
9. Move Ledger
|
|
177
|
+
10. Locality Config
|
|
178
|
+
11. No-Move Decisions
|
|
179
|
+
12. Deferred Decisions
|
|
180
|
+
13. Migration Order
|
|
181
|
+
|
|
182
|
+
List a decision as No-Move when broad consumers, route/package/contract
|
|
183
|
+
surfaces, infrastructure roles, generic shared risk, or weak evidence make a
|
|
184
|
+
move harmful.
|
|
185
|
+
|
|
186
|
+
**Complete when:** every proposed move has a reason and a verification path.
|
|
187
|
+
|
|
188
|
+
## Step 7 — Ratchet, then implement one slice (when asked)
|
|
189
|
+
|
|
190
|
+
For a large repository with existing violations, review the direct findings
|
|
191
|
+
with `scip-query drift --architecture` and write the shared health baseline
|
|
192
|
+
with `scip-query health --write-baseline`. The baseline records stable
|
|
193
|
+
architecture identities by boundary pair, not by whichever example file
|
|
194
|
+
happens to sort first.
|
|
195
|
+
|
|
196
|
+
The default `scip-query diff-gate` architecture check compares only
|
|
197
|
+
architecture identities and does not run every health detector; `diff-gate
|
|
198
|
+
--baseline` is the opt-in full health ratchet and does not duplicate
|
|
199
|
+
architecture findings. Commit `.scipquery-baseline.json` together with
|
|
200
|
+
`.scipquery.json`. A missing baseline causes the architecture gate to report
|
|
201
|
+
that enforcement is not enabled — it does NOT silently treat the current
|
|
202
|
+
dependency graph as accepted.
|
|
203
|
+
|
|
204
|
+
Prefer inspecting the least-broad edge inside a boundary cycle first, then
|
|
205
|
+
determine whether the repair is a move, dependency inversion, named shared
|
|
206
|
+
contract, boundary merge, or policy correction.
|
|
207
|
+
|
|
208
|
+
Before editing to implement a migration slice, state the files to move, the
|
|
209
|
+
imports/exports/tests/docs to update, the expected verification, and the
|
|
210
|
+
rollback risk.
|
|
211
|
+
|
|
212
|
+
After moving the smallest high-confidence slice, run `scip-query
|
|
213
|
+
incomplete-migration`, `scip-query recent-duplicates`, and `scip-query
|
|
214
|
+
co-change <moved-file-or-config>`. Also run the project's tests or typecheck
|
|
215
|
+
for the affected workspace.
|
|
216
|
+
|
|
217
|
+
If `.scipquery.json` locality changed, run `scip-query config-validate`,
|
|
218
|
+
`scip-query locality-candidates --json --full`, `scip-query architecture
|
|
219
|
+
--json`, `scip-query drift --architecture`, and `scip-query diff-gate`.
|
|
220
|
+
|
|
221
|
+
Then invoke `scip-verify`; the implementation is complete only when imports,
|
|
222
|
+
tests, locality signals, and verification are checked.
|
|
@@ -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.
|