scip-query 0.19.5 → 0.19.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +85 -1
- package/README.md +259 -53
- package/dist/augment-vue-worker.js +1 -1
- package/dist/chunk-2465DLHK.js +3 -0
- package/dist/{chunk-7GXM52MI.js → chunk-24GTWJ3N.js} +2 -2
- package/dist/{chunk-NH5ALKPW.js → chunk-2SNGN6U4.js} +2 -2
- package/dist/{chunk-3SVWW4PN.js → chunk-2U3OLUNJ.js} +2 -2
- package/dist/{chunk-XLTP42QA.js → chunk-33KUO7CG.js} +2 -2
- package/dist/{chunk-54HA4ZXH.js → chunk-33XTHFKR.js} +2 -2
- package/dist/{chunk-ZGZUZ7XE.js → chunk-3EDFLQ6A.js} +2 -2
- package/dist/chunk-3ZSJ3PWF.js +16 -0
- package/dist/{chunk-F6O7AAC3.js → chunk-43KC6EQZ.js} +2 -2
- package/dist/{chunk-I5RJM53C.js → chunk-464PLI5O.js} +2 -2
- package/dist/chunk-46XGSFNI.js +2 -0
- package/dist/{chunk-M7AIS73L.js → chunk-47BU5Z4T.js} +2 -2
- package/dist/chunk-4BV4QAZJ.js +5 -0
- package/dist/chunk-4YTUWQ6M.js +18 -0
- package/dist/{chunk-RV2FQIX3.js → chunk-5ML2BNRH.js} +2 -2
- package/dist/{chunk-6NSFJYRC.js → chunk-5YLUDDAF.js} +2 -2
- package/dist/chunk-67QRR5YC.js +6 -0
- package/dist/{chunk-GPBBJ5Y4.js → chunk-6GXYN7YA.js} +3 -3
- package/dist/{chunk-4333ETTV.js → chunk-6M7RONVB.js} +2 -2
- package/dist/chunk-6YTSKJJ3.js +2 -0
- package/dist/{chunk-QDV6RDCP.js → chunk-7FT5Y65S.js} +2 -2
- package/dist/{chunk-XTX6QHOF.js → chunk-7KYNAMMH.js} +2 -2
- package/dist/{chunk-DZ74OMG6.js → chunk-7LSVMFX7.js} +2 -2
- package/dist/{chunk-VTKGCT3V.js → chunk-7QHY3H7P.js} +2 -2
- package/dist/{chunk-MITTUCEH.js → chunk-7RAG65VK.js} +2 -2
- package/dist/{chunk-25LPM4DG.js → chunk-7SWJEWJF.js} +2 -2
- package/dist/{chunk-52ZYCAEO.js → chunk-7VCOXZH3.js} +2 -2
- package/dist/chunk-A2TNXAXO.js +8 -0
- package/dist/{chunk-IUFDSKGG.js → chunk-A3QXWFBK.js} +2 -2
- package/dist/{chunk-4T3LTWUS.js → chunk-AA4UWRNL.js} +2 -2
- package/dist/{chunk-4SALD7RU.js → chunk-ACAM6O5R.js} +2 -2
- package/dist/chunk-APMMR5Y2.js +2 -0
- package/dist/chunk-AQOFWNQJ.js +1 -0
- package/dist/chunk-AZFUMCQB.js +2 -0
- package/dist/{chunk-M7MTH5NR.js → chunk-BDOIKGDI.js} +2 -2
- package/dist/{chunk-BTEE5NZQ.js → chunk-BNXICU42.js} +2 -2
- package/dist/chunk-C5Q44Q5D.js +3 -0
- package/dist/{chunk-EOOJGLDU.js → chunk-CTF2GDEX.js} +2 -2
- package/dist/chunk-DHEQMPLW.js +2 -0
- package/dist/{chunk-IZKFSVBV.js → chunk-DQBCO2UY.js} +2 -2
- package/dist/{chunk-7B3UPBVA.js → chunk-DQGSM7RZ.js} +2 -2
- package/dist/chunk-E2LAW7SL.js +30 -0
- package/dist/chunk-E3HYEQO7.js +2 -0
- package/dist/chunk-E4NFOAD4.js +6 -0
- package/dist/chunk-E5HNT4X2.js +3 -0
- package/dist/{chunk-J77UIT3I.js → chunk-ELLMY7XJ.js} +2 -2
- package/dist/chunk-FD3HFKXR.js +5 -0
- package/dist/{chunk-SOAT6NLA.js → chunk-FIJCV235.js} +2 -2
- package/dist/{chunk-H7UKLTWJ.js → chunk-FJ5UDTQF.js} +2 -2
- package/dist/{chunk-HEXVUYFQ.js → chunk-GHKEJTCE.js} +2 -2
- package/dist/{chunk-LBMJEAEW.js → chunk-GLZTVKAB.js} +3 -3
- package/dist/{chunk-FWUUZTIO.js → chunk-GNC4JVAN.js} +2 -2
- package/dist/chunk-HIB452NU.js +949 -0
- package/dist/{chunk-NRCXJDHL.js → chunk-HZYDQPNY.js} +2 -2
- package/dist/chunk-IF6FP6B2.js +66 -0
- package/dist/{chunk-4RSI5EMG.js → chunk-JAY7YWS3.js} +2 -2
- package/dist/{chunk-STOL2BTL.js → chunk-JHF3E4YM.js} +2 -2
- package/dist/chunk-JORHF5AL.js +108 -0
- package/dist/{chunk-A2EZV2UM.js → chunk-K2WO7XY7.js} +2 -2
- package/dist/chunk-KFZNKUNT.js +2 -0
- package/dist/{chunk-YVVCVR2L.js → chunk-KJ2IIBZN.js} +2 -2
- package/dist/{chunk-QGXBRIM5.js → chunk-KKME5ZAI.js} +2 -2
- package/dist/chunk-KSGTULOS.js +9 -0
- package/dist/{chunk-UOAV44HR.js → chunk-KXDJAG4N.js} +3 -3
- package/dist/{chunk-UKZBVX4U.js → chunk-L4S2A7BV.js} +2 -2
- package/dist/chunk-LP3ARJKF.js +8 -0
- package/dist/chunk-LSOR3LQG.js +3 -0
- package/dist/{chunk-Q4IIEGXJ.js → chunk-MLFZP76A.js} +2 -2
- package/dist/{chunk-WQTAC523.js → chunk-MNSTUIDD.js} +2 -2
- package/dist/{chunk-VXQNNXJE.js → chunk-MSBDMFER.js} +2 -2
- package/dist/{chunk-X6D5IC6I.js → chunk-MZZBAITE.js} +5 -5
- package/dist/{chunk-I5AWSI2G.js → chunk-NE3TZUCI.js} +2 -2
- package/dist/{chunk-6E7UTQY7.js → chunk-NTUMF2X3.js} +2 -2
- package/dist/{chunk-S44IULR6.js → chunk-O23I56NA.js} +2 -2
- package/dist/{chunk-CFMXJPHH.js → chunk-O3O4XXO6.js} +2 -2
- package/dist/{chunk-IG7N5ZIK.js → chunk-OUBAF226.js} +2 -2
- package/dist/chunk-P3UO3EH3.js +2 -0
- package/dist/{chunk-YNRNA5LK.js → chunk-QGGLL3UH.js} +2 -2
- package/dist/chunk-QIQ63BHW.js +16 -0
- package/dist/{chunk-VGRICIQI.js → chunk-QJIVBYEK.js} +2 -2
- package/dist/chunk-QOXBSI6G.js +20 -0
- package/dist/chunk-QXK6UUSM.js +2 -0
- package/dist/{chunk-XYADIZHU.js → chunk-RA3AYNWP.js} +2 -2
- package/dist/chunk-RJMDJR3A.js +2 -0
- package/dist/{chunk-NSS46APD.js → chunk-RLH5VUMG.js} +2 -2
- package/dist/{chunk-GBQ5NYPR.js → chunk-S4S2WOIX.js} +6 -6
- package/dist/{chunk-YIJ7ZAA4.js → chunk-SERUIGV5.js} +2 -2
- package/dist/{chunk-FECYOO5O.js → chunk-SMQWE25B.js} +2 -2
- package/dist/{chunk-R4FQGQ4X.js → chunk-TAVELHYR.js} +2 -2
- package/dist/{chunk-U6WNH5GC.js → chunk-TWMJ3Y3G.js} +2 -2
- package/dist/chunk-VAXNI5NE.js +146 -0
- package/dist/chunk-VVY2G5ET.js +2 -0
- package/dist/{chunk-WER3B7MI.js → chunk-W3DBTGL4.js} +2 -2
- package/dist/{chunk-CNKAGUPL.js → chunk-WANA4KAQ.js} +2 -2
- package/dist/chunk-WJL2L6MV.js +60 -0
- package/dist/chunk-WUW7YUAH.js +11 -0
- package/dist/{chunk-QVWS2VWZ.js → chunk-WWKWUPSU.js} +2 -2
- package/dist/{chunk-ABMYA4TN.js → chunk-WY45BHKQ.js} +2 -2
- package/dist/chunk-X4FR5BZF.js +9 -0
- package/dist/chunk-X6RKPDY7.js +2 -0
- package/dist/{chunk-ZXJYMGD3.js → chunk-YLFORA5G.js} +2 -2
- package/dist/{chunk-KP6XRY5Z.js → chunk-YTVWB7YJ.js} +2 -2
- package/dist/{chunk-4XTA5OMB.js → chunk-ZCEJ63SP.js} +2 -2
- package/dist/{chunk-HKEHS2AS.js → chunk-ZJ5CBXK3.js} +2 -2
- package/dist/chunk-ZL2OGDCD.js +2 -0
- package/dist/cli.js +8 -3
- package/dist/command-descriptors-ZW5J4ZEM.js +631 -0
- package/dist/{config-types-D20KuvvZ.d.ts → config-types-B6MEoRNy.d.ts} +8 -0
- package/dist/{db-G_II8yXU.d.ts → db-DYLKr9Wn.d.ts} +18 -1
- package/dist/direct-navigation-42YHQPOI.js +3 -0
- package/dist/{health-oblXYgkF.d.ts → health-DgxIDXJC.d.ts} +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/postinstall.js +1 -1
- package/dist/queries/affected.d.ts +2 -2
- package/dist/queries/affected.js +1 -1
- package/dist/queries/architecture.d.ts +2 -2
- package/dist/queries/architecture.js +1 -1
- package/dist/queries/bottlenecks.d.ts +2 -2
- package/dist/queries/bottlenecks.js +1 -1
- package/dist/queries/by-kind.d.ts +2 -2
- package/dist/queries/by-kind.js +1 -1
- package/dist/queries/call-graph.d.ts +2 -2
- package/dist/queries/call-graph.js +1 -1
- package/dist/queries/change-surface.d.ts +2 -2
- package/dist/queries/change-surface.js +1 -1
- package/dist/queries/cleanup-plan.d.ts +2 -2
- package/dist/queries/cleanup-plan.js +1 -1
- package/dist/queries/co-change.d.ts +2 -2
- package/dist/queries/co-change.js +1 -1
- package/dist/queries/code.d.ts +2 -2
- package/dist/queries/code.js +1 -1
- package/dist/queries/complexity-hotspots.d.ts +2 -2
- package/dist/queries/complexity-hotspots.js +1 -1
- package/dist/queries/complexity.d.ts +2 -2
- package/dist/queries/complexity.js +1 -1
- package/dist/queries/convergence.d.ts +2 -2
- package/dist/queries/convergence.js +1 -1
- package/dist/queries/coupling.d.ts +2 -2
- package/dist/queries/coupling.js +1 -1
- package/dist/queries/cycles.d.ts +2 -2
- package/dist/queries/cycles.js +1 -1
- package/dist/queries/dataflow.d.ts +2 -2
- package/dist/queries/dataflow.js +1 -1
- package/dist/queries/dead.d.ts +2 -2
- package/dist/queries/dead.js +1 -1
- package/dist/queries/decorative-checkers.d.ts +3 -3
- package/dist/queries/decorative-checkers.js +1 -1
- package/dist/queries/deep-chains.d.ts +2 -2
- package/dist/queries/deep-chains.js +1 -1
- package/dist/queries/deps.d.ts +2 -2
- package/dist/queries/deps.js +1 -1
- package/dist/queries/diff-gate.d.ts +30 -2
- package/dist/queries/diff-gate.js +1 -1
- package/dist/queries/diff-impact.d.ts +2 -2
- package/dist/queries/diff-impact.js +1 -1
- package/dist/queries/doc-drift.d.ts +2 -2
- package/dist/queries/doc-drift.js +1 -1
- package/dist/queries/drift.d.ts +2 -2
- package/dist/queries/drift.js +1 -1
- package/dist/queries/duplicate-bodies.d.ts +2 -2
- package/dist/queries/duplicate-bodies.js +1 -1
- package/dist/queries/extract-candidates.d.ts +2 -2
- package/dist/queries/extract-candidates.js +1 -1
- package/dist/queries/fan.d.ts +2 -2
- package/dist/queries/fan.js +1 -1
- package/dist/queries/files.d.ts +2 -2
- package/dist/queries/health.d.ts +3 -3
- package/dist/queries/health.js +1 -1
- package/dist/queries/hierarchy.d.ts +2 -2
- package/dist/queries/hierarchy.js +1 -1
- package/dist/queries/hotspots.d.ts +2 -2
- package/dist/queries/hotspots.js +1 -1
- package/dist/queries/imports.d.ts +2 -2
- package/dist/queries/imports.js +1 -1
- package/dist/queries/incomplete-migration.d.ts +2 -2
- package/dist/queries/incomplete-migration.js +1 -1
- package/dist/queries/index.d.ts +17 -3
- package/dist/queries/index.js +1 -1
- package/dist/queries/isolated.d.ts +2 -2
- package/dist/queries/isolated.js +1 -1
- package/dist/queries/locality-candidates.d.ts +2 -2
- package/dist/queries/locality-candidates.js +1 -1
- package/dist/queries/members.d.ts +2 -2
- package/dist/queries/members.js +1 -1
- package/dist/queries/methods.d.ts +2 -2
- package/dist/queries/methods.js +1 -1
- package/dist/queries/not-implemented.d.ts +3 -3
- package/dist/queries/not-implemented.js +1 -1
- package/dist/queries/outline.d.ts +2 -2
- package/dist/queries/outline.js +1 -1
- package/dist/queries/passthrough-candidates.d.ts +2 -2
- package/dist/queries/passthrough-candidates.js +1 -1
- package/dist/queries/plan-context.d.ts +2 -2
- package/dist/queries/plan-context.js +1 -1
- package/dist/queries/react-component-duplicates.d.ts +2 -2
- package/dist/queries/react-component-duplicates.js +1 -1
- package/dist/queries/react-hook-candidates.d.ts +2 -2
- package/dist/queries/react-hook-candidates.js +1 -1
- package/dist/queries/react-large-component-pressure.d.ts +2 -2
- package/dist/queries/react-large-component-pressure.js +1 -1
- package/dist/queries/recent-duplicates.d.ts +2 -2
- package/dist/queries/recent-duplicates.js +1 -1
- package/dist/queries/redundant-reexports.d.ts +2 -2
- package/dist/queries/redundant-reexports.js +1 -1
- package/dist/queries/refs.d.ts +2 -2
- package/dist/queries/refs.js +1 -1
- package/dist/queries/self-audit.d.ts +2 -2
- package/dist/queries/self-audit.js +1 -1
- package/dist/queries/similar-chains.d.ts +2 -2
- package/dist/queries/similar-chains.js +1 -1
- package/dist/queries/similar-files.d.ts +2 -2
- package/dist/queries/similar-files.js +1 -1
- package/dist/queries/similar-signatures.d.ts +2 -2
- package/dist/queries/similar-signatures.js +1 -1
- package/dist/queries/similar.d.ts +2 -2
- package/dist/queries/similar.js +1 -1
- package/dist/queries/slice.d.ts +2 -2
- package/dist/queries/slice.js +1 -1
- package/dist/queries/stale-abstractions.d.ts +2 -2
- package/dist/queries/stale-abstractions.js +1 -1
- package/dist/queries/stats.d.ts +2 -2
- package/dist/queries/stats.js +1 -1
- package/dist/queries/surface.d.ts +2 -2
- package/dist/queries/surface.js +1 -1
- package/dist/queries/symbols.d.ts +2 -2
- package/dist/queries/symbols.js +1 -1
- package/dist/queries/system.d.ts +2 -2
- package/dist/queries/system.js +1 -1
- package/dist/queries/test-quality.d.ts +2 -2
- package/dist/queries/test-quality.js +1 -1
- package/dist/queries/trace.d.ts +2 -2
- package/dist/queries/trace.js +1 -1
- package/dist/queries/twin-ab.d.ts +3 -3
- package/dist/queries/twin-ab.js +1 -1
- package/dist/queries/twin-drift.d.ts +2 -2
- package/dist/queries/twin-drift.js +1 -1
- package/dist/queries/unused-imports.d.ts +2 -2
- package/dist/queries/unused-imports.js +1 -1
- package/dist/queries/unused-params.d.ts +2 -2
- package/dist/queries/unused-params.js +1 -1
- package/dist/queries/vue-component-duplicates.d.ts +2 -2
- package/dist/queries/vue-component-duplicates.js +1 -1
- package/dist/queries/vue-composable-candidates.d.ts +2 -2
- package/dist/queries/vue-composable-candidates.js +1 -1
- package/dist/queries/vue-large-view-pressure.d.ts +2 -2
- package/dist/queries/vue-large-view-pressure.js +1 -1
- package/dist/queries/wrapper-candidates.d.ts +2 -2
- package/dist/queries/wrapper-candidates.js +1 -1
- package/dist/reindex-worker.js +26 -26
- package/dist/reindex.d.ts +14 -4
- package/dist/reindex.js +34 -38
- package/dist/runtime.d.ts +167 -18
- package/dist/runtime.js +3 -2
- package/dist/rust-semantic-session-server.js +1 -1
- package/dist/rust-semantic-session-worker.js +1 -1
- package/dist/rust-semantic-worker.js +1 -1
- package/dist/{scip-cli-kRpaexVJ.d.ts → scip-cli-Cc6c00-a.d.ts} +6 -2
- package/dist/watch-server.js +5 -5
- package/docs/AGENT_GUIDE.md +20 -4
- package/docs/AI_FAILURE_MODES.md +17 -17
- package/docs/API_EVOLUTION.md +71 -0
- package/docs/CLI_JSON_OUTPUT.md +168 -0
- package/docs/COMMAND_REFERENCE.md +10 -6
- package/docs/COMMITTED_RECORD_COMPATIBILITY.md +117 -0
- package/docs/CONFIGURATION_WRITE_SAFETY.md +130 -0
- package/docs/DETECTOR_GUIDE.md +46 -46
- package/docs/DURABILITY.md +103 -0
- package/docs/INDEX_GENERATIONS.md +121 -0
- package/docs/LOCK_PROTOCOL.md +133 -0
- package/docs/MAILBOX_LIFECYCLE.md +197 -0
- package/docs/REINDEX_METADATA_COMPATIBILITY.md +84 -0
- package/docs/RUST_DURABLE_SESSION_PROTOCOL.md +126 -0
- package/docs/SECURITY_MODEL.md +129 -0
- package/docs/TELEMETRY_RETENTION.md +77 -0
- package/docs/TIME_SEMANTICS.md +77 -0
- package/docs/WATCH_REFRESH_REQUESTS.md +110 -0
- package/docs/WINDOWS_SIDECAR_RELEASE.md +298 -0
- package/docs/analyzer-validation-ledger.md +24 -23
- package/docs/schemas/cli-json-envelope.schema.json +53 -0
- package/docs/schemas/cli-output-page.schema.json +104 -0
- package/docs/schemas/npm-release-state.schema.json +146 -0
- package/docs/schemas/outcome-event-record.schema.json +39 -0
- package/docs/schemas/project-config.schema.json +247 -0
- package/docs/schemas/suppression-record.schema.json +31 -0
- package/docs/schemas/windows-sidecar-provenance.schema.json +137 -0
- package/package.json +21 -10
- package/scripts/build-scip-windows.mjs +180 -61
- package/scripts/scip-windows-provenance.mjs +364 -0
- package/scripts/verify-scip-windows.mjs +29 -0
- package/skills/_shared/SKILL.md +90 -229
- package/skills/_shared/agents/openai.yaml +1 -1
- package/skills/_shared/references/agent-contract-catalog.md +105 -0
- package/skills/_shared/references/command-catalog.md +118 -0
- package/skills/_shared/references/detector-precision-and-diffgate.md +59 -0
- package/skills/_shared/references/evidence-and-dead-code.md +25 -0
- package/skills/scip-audit/SKILL.md +77 -0
- package/skills/scip-audit/agents/openai.yaml +4 -0
- package/skills/scip-audit/references/claims.md +98 -0
- package/skills/scip-audit/references/cleanup.md +101 -0
- package/skills/scip-audit/references/directory.md +222 -0
- package/skills/scip-audit/references/frontend.md +130 -0
- package/skills/scip-audit/references/integrity.md +154 -0
- package/skills/scip-audit/references/maintainability.md +162 -0
- package/skills/scip-audit/references/twin-drift.md +104 -0
- package/skills/scip-diagnose/SKILL.md +52 -0
- package/skills/scip-diagnose/agents/openai.yaml +4 -0
- package/skills/scip-diagnose/references/debug.md +117 -0
- package/skills/{scip-probe-reachability/SKILL.md → scip-diagnose/references/probe-reachability.md} +11 -27
- package/skills/scip-diagnose/references/root-cause.md +145 -0
- package/skills/scip-diagnose/references/triage.md +119 -0
- package/skills/scip-explore/SKILL.md +54 -85
- package/skills/scip-explore/agents/openai.yaml +2 -2
- package/skills/scip-explore/references/diagrams.md +40 -0
- package/skills/scip-explore/references/language-playbook.md +49 -0
- package/skills/scip-improve/SKILL.md +56 -0
- package/skills/scip-improve/agents/openai.yaml +4 -0
- package/skills/scip-improve/references/cleanup-batches.md +53 -0
- package/skills/scip-improve/references/directory-moves.md +53 -0
- package/skills/scip-improve/references/doc-reconcile.md +30 -0
- package/skills/scip-improve/references/frontend-extraction.md +39 -0
- package/skills/scip-improve/references/maintainability-mechanism.md +43 -0
- package/skills/scip-improve/references/twin-drift.md +35 -0
- package/skills/scip-plan/SKILL.md +68 -0
- package/skills/scip-plan/agents/openai.yaml +4 -0
- package/skills/scip-plan/references/api-impact.md +19 -0
- package/skills/scip-plan/references/conductor.md +41 -0
- package/skills/scip-plan/references/high-assurance.md +43 -0
- package/skills/scip-plan/references/hyper-optimization.md +50 -0
- package/skills/scip-plan/references/tla-model.md +88 -0
- package/skills/scip-query/SKILL.md +53 -98
- package/skills/scip-query/agents/openai.yaml +2 -2
- package/skills/scip-setup/SKILL.md +69 -181
- package/skills/scip-setup/agents/openai.yaml +3 -3
- package/skills/scip-setup/references/bootstrap-workflow.md +120 -0
- package/skills/scip-setup/references/language-verification.md +61 -0
- package/skills/scip-setup/references/lifecycle-commands.md +119 -0
- package/skills/scip-setup/references/per-repo-triage.md +24 -0
- package/skills/scip-verify/SKILL.md +126 -84
- package/skills/scip-verify/agents/openai.yaml +2 -2
- package/skills/scip-verify/references/calibrate-detectors.md +170 -0
- package/dist/chunk-2CTX5CMX.js +0 -4
- package/dist/chunk-2Y373BDD.js +0 -2
- package/dist/chunk-2YU7I3QO.js +0 -2
- package/dist/chunk-3MJ5YA4Y.js +0 -16
- package/dist/chunk-64RFXJT5.js +0 -16
- package/dist/chunk-7UY7SD7D.js +0 -927
- package/dist/chunk-B5NLK2B3.js +0 -6
- package/dist/chunk-C2QSK7E7.js +0 -2
- package/dist/chunk-C7NIYIQ4.js +0 -67
- package/dist/chunk-D4U5Q3FT.js +0 -7
- package/dist/chunk-DGAGY7RJ.js +0 -60
- package/dist/chunk-DLWR3NUU.js +0 -5
- package/dist/chunk-K2ERX4UT.js +0 -3
- package/dist/chunk-KHE7J5ZN.js +0 -3
- package/dist/chunk-L7SPDE73.js +0 -84
- package/dist/chunk-LHMNRHGV.js +0 -3
- package/dist/chunk-LM72NQ7T.js +0 -3
- package/dist/chunk-MSWVMDAH.js +0 -122
- package/dist/chunk-NH7WNNQC.js +0 -20
- package/dist/chunk-NPKYOIFM.js +0 -18
- package/dist/chunk-NZL2DBT7.js +0 -2
- package/dist/chunk-OMPZHGHO.js +0 -2
- package/dist/chunk-P2PC2WGR.js +0 -2
- package/dist/chunk-Q3AFUTGB.js +0 -8
- package/dist/chunk-QRGV2F7L.js +0 -2
- package/dist/chunk-TW4OG5FC.js +0 -4
- package/dist/chunk-U7DSEKOM.js +0 -30
- package/dist/chunk-V27BEQJN.js +0 -7
- package/dist/chunk-XAGAZSFE.js +0 -6
- package/dist/chunk-XBN5VO53.js +0 -2
- package/dist/chunk-YGAGTIDK.js +0 -11
- package/dist/command-descriptors-N2TL4XM2.js +0 -613
- package/dist/direct-navigation-DUCZCTOE.js +0 -3
- package/skills/scip-api-impact/SKILL.md +0 -140
- package/skills/scip-api-impact/agents/openai.yaml +0 -4
- package/skills/scip-calibrate/SKILL.md +0 -131
- package/skills/scip-calibrate/agents/openai.yaml +0 -4
- package/skills/scip-claim-audit/SKILL.md +0 -107
- package/skills/scip-claim-audit/agents/openai.yaml +0 -4
- package/skills/scip-cleanup-audit/SKILL.md +0 -130
- package/skills/scip-cleanup-audit/agents/openai.yaml +0 -4
- package/skills/scip-cleanup-improve/SKILL.md +0 -85
- package/skills/scip-cleanup-improve/agents/openai.yaml +0 -4
- package/skills/scip-concrete-plan/HIGH_ASSURANCE.md +0 -317
- package/skills/scip-concrete-plan/SKILL.md +0 -105
- package/skills/scip-concrete-plan/agents/openai.yaml +0 -4
- package/skills/scip-conductor/SKILL.md +0 -133
- package/skills/scip-conductor/agents/openai.yaml +0 -4
- package/skills/scip-debug/SKILL.md +0 -130
- package/skills/scip-debug/agents/openai.yaml +0 -4
- package/skills/scip-diagram/SKILL.md +0 -110
- package/skills/scip-diagram/agents/openai.yaml +0 -4
- package/skills/scip-directory-architecture/SKILL.md +0 -266
- package/skills/scip-directory-architecture/agents/openai.yaml +0 -4
- package/skills/scip-doc-reconcile/SKILL.md +0 -89
- package/skills/scip-doc-reconcile/agents/openai.yaml +0 -4
- package/skills/scip-hyper-optimization/SKILL.md +0 -156
- package/skills/scip-hyper-optimization/agents/openai.yaml +0 -4
- package/skills/scip-integrity-audit/SKILL.md +0 -152
- package/skills/scip-integrity-audit/agents/openai.yaml +0 -4
- package/skills/scip-language-playbook/SKILL.md +0 -106
- package/skills/scip-language-playbook/agents/openai.yaml +0 -4
- package/skills/scip-maintainability/SKILL.md +0 -158
- package/skills/scip-maintainability/agents/openai.yaml +0 -4
- package/skills/scip-probe-reachability/agents/openai.yaml +0 -4
- package/skills/scip-react-maintainability/SKILL.md +0 -101
- package/skills/scip-react-maintainability/agents/openai.yaml +0 -4
- package/skills/scip-root-cause/SKILL.md +0 -151
- package/skills/scip-root-cause/agents/openai.yaml +0 -4
- package/skills/scip-tla-model-system/SKILL.md +0 -148
- package/skills/scip-tla-model-system/agents/openai.yaml +0 -4
- package/skills/scip-triage-issue/SKILL.md +0 -133
- package/skills/scip-triage-issue/agents/openai.yaml +0 -4
- package/skills/scip-twin-drift/SKILL.md +0 -109
- package/skills/scip-twin-drift/agents/openai.yaml +0 -4
- package/skills/scip-vue-maintainability/SKILL.md +0 -107
- package/skills/scip-vue-maintainability/agents/openai.yaml +0 -4
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Time Semantics
|
|
2
|
+
|
|
3
|
+
scip-query separates shared timestamps from local elapsed-time control so a
|
|
4
|
+
system-clock correction cannot prolong a wait or impersonate ownership.
|
|
5
|
+
|
|
6
|
+
A **civil timestamp** is a calendar coordinate produced by the host's system
|
|
7
|
+
clock and written so different processes and later executions can compare
|
|
8
|
+
records. ISO dates, `enqueuedAtMs`, `deadlineAtMs`, heartbeat times, retention
|
|
9
|
+
times, and diagnostic start/completion times refer to this clock. Network time
|
|
10
|
+
synchronization, administrator changes, suspend/resume behavior, virtual
|
|
11
|
+
machine migration, and a reboot can move its observed value forward or
|
|
12
|
+
backward.
|
|
13
|
+
|
|
14
|
+
A **monotonic clock reading** is a process-local elapsed-time coordinate whose
|
|
15
|
+
ordering does not move backward while that process runs. `performance.now()`
|
|
16
|
+
is the JavaScript implementation used here. A monotonic reading is suitable
|
|
17
|
+
for durations and local deadlines because a civil-clock adjustment cannot add
|
|
18
|
+
time to or remove time from the measured interval. Its numeric value is not a
|
|
19
|
+
portable timestamp and is never persisted as cross-process evidence.
|
|
20
|
+
|
|
21
|
+
A **deadline** is the boundary that ends an operation when its resource budget
|
|
22
|
+
is consumed. Local request waits, lock waits, service startup and stop waits,
|
|
23
|
+
Rust readiness work, heartbeat throttles, activity polling, cache sweeps,
|
|
24
|
+
idle shutdown, and reported elapsed durations use monotonic readings. Timer
|
|
25
|
+
delivery can be late if the process is not scheduled, but moving the civil
|
|
26
|
+
clock cannot make the deadline later.
|
|
27
|
+
|
|
28
|
+
A **durable expiry hint** is a persisted civil timestamp that lets another
|
|
29
|
+
process classify old work for bounded cleanup or rejection. It is weaker than
|
|
30
|
+
ownership evidence because timestamp age cannot identify the process that
|
|
31
|
+
created a record. Mailbox request deadlines, response retention, dead-letter
|
|
32
|
+
retention, and heartbeat times remain durable hints. They may reject or clean
|
|
33
|
+
rebuildable retained data according to the documented retention contract, but
|
|
34
|
+
they do not alone authorize signaling a process, replacing a live service, or
|
|
35
|
+
reclaiming an inflight claim.
|
|
36
|
+
|
|
37
|
+
## Decision table
|
|
38
|
+
|
|
39
|
+
| Decision | Clock/evidence used | Why |
|
|
40
|
+
| ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
|
|
41
|
+
| Stop waiting for a lock, response, startup, shutdown, or readiness phase | Process-local monotonic deadline | The wait remains bounded across forward and backward civil-clock jumps. |
|
|
42
|
+
| Report a duration | Difference between monotonic readings | A clock correction cannot create a negative or inflated elapsed duration. |
|
|
43
|
+
| Publish a heartbeat, start time, completion time, or request expiry | Civil timestamp | Other processes and later executions need an inspectable shared coordinate. |
|
|
44
|
+
| Accept a watch or mailbox service as the same owner | Protocol/project identity, live PID, and matching process-start identity when recorded | A timestamp cannot distinguish PID reuse or a different executable instance. |
|
|
45
|
+
| Replace or signal a watch service | Matching process-start identity plus the explicit stop/start protocol | An old heartbeat alone never grants process-signal authority. |
|
|
46
|
+
| Reclaim an inflight mailbox claim | Lease expired and recorded process instance is dead or replaced | The civil lease is a delay hint; process-instance loss supplies ownership evidence. |
|
|
47
|
+
| Reclaim a process lock | Dead recorded process or mismatched process-start identity, followed by a guarded unchanged recheck | Valid locks do not expire; malformed public locks fail closed. |
|
|
48
|
+
|
|
49
|
+
## Cross-process handoff
|
|
50
|
+
|
|
51
|
+
Absolute monotonic readings are not sent between independent processes.
|
|
52
|
+
Portable mailbox requests carry relative timeout budgets and civil diagnostic
|
|
53
|
+
times. The receiving Rust service converts the relative budget into a new
|
|
54
|
+
deadline in its own monotonic clock domain before it hands work to its worker
|
|
55
|
+
thread. TypeScript and Rust clients likewise use their own monotonic deadline
|
|
56
|
+
while polling for a retained response.
|
|
57
|
+
|
|
58
|
+
Legacy state without a process-start identity remains readable. A live legacy
|
|
59
|
+
PID is treated conservatively: it can support availability where no process
|
|
60
|
+
mutation is attempted, but it cannot authorize a signal or deletion. An
|
|
61
|
+
unparseable public ownership record fails closed and requires operator review.
|
|
62
|
+
|
|
63
|
+
## Verification
|
|
64
|
+
|
|
65
|
+
The clock contract is covered by injected-clock tests that independently move
|
|
66
|
+
civil time forward and backward, advance monotonic time, reuse a PID with a
|
|
67
|
+
different process-start identity, and hold a live owner beyond a civil lease.
|
|
68
|
+
Focused suites include:
|
|
69
|
+
|
|
70
|
+
- `tests/domain/time.test.ts`;
|
|
71
|
+
- `tests/platform/process-file-lock.test.ts`;
|
|
72
|
+
- `tests/runtime/repository-cache-lifecycle.test.ts`;
|
|
73
|
+
- `tests/runtime/revisioned-file.test.ts`;
|
|
74
|
+
- `tests/runtime/watch-service.test.ts`;
|
|
75
|
+
- `tests/storage/bounded-mailbox.test.ts`;
|
|
76
|
+
- the TypeScript semantic and index mailbox suites; and
|
|
77
|
+
- the durable Rust and rust-analyzer readiness suites.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Watch Refresh Requests
|
|
2
|
+
|
|
3
|
+
## Contract
|
|
4
|
+
|
|
5
|
+
A watch refresh request is a durable command-side intent to make one project's
|
|
6
|
+
index current. Its concrete referents are the records created when a command or
|
|
7
|
+
agent hook observes a stale index and asks the live watch service to reindex.
|
|
8
|
+
It is a request record distinguished from ordinary watch activity by remaining
|
|
9
|
+
authoritative until a corresponding refresh attempt completes or its declared
|
|
10
|
+
deadline expires.
|
|
11
|
+
|
|
12
|
+
Watch activity is a disposable observation that a command recently used the
|
|
13
|
+
service. Its concrete referent is `watch-activity.json`; it is a
|
|
14
|
+
last-writer-wins timestamp whose only effect is extending the daemon's idle
|
|
15
|
+
lifetime. It is not a queue and carries no current refresh authority.
|
|
16
|
+
|
|
17
|
+
An admission is the successful publication of one complete immutable request
|
|
18
|
+
under `watch-refresh-requests/requests/`. Its defining property is that the
|
|
19
|
+
stable request path exists before the caller is told the request was accepted.
|
|
20
|
+
A claim is an exclusive processing marker for that admitted request. A
|
|
21
|
+
completion is a durable receipt proving that the attempt associated with the
|
|
22
|
+
claim finished successfully, or that the request expired before execution.
|
|
23
|
+
|
|
24
|
+
These records provide at-least-once execution for an accepted, unexpired
|
|
25
|
+
request. At-least-once execution means a crash after reindex success but before
|
|
26
|
+
the completion receipt may repeat the safe reindex operation; it never means an
|
|
27
|
+
unacknowledged request can disappear.
|
|
28
|
+
|
|
29
|
+
## Layout
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
<project-cache>/
|
|
33
|
+
watch-activity.json
|
|
34
|
+
watch-refresh-requests/
|
|
35
|
+
requests/<request-id>.json
|
|
36
|
+
claims/<request-id>.json
|
|
37
|
+
completions/<request-id>.json
|
|
38
|
+
staging/
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
- `requests/` is the immutable admission log.
|
|
42
|
+
- `claims/` contains exclusive, temporary ownership markers.
|
|
43
|
+
- `completions/` contains immutable acknowledgements.
|
|
44
|
+
- `staging/` contains same-filesystem temporary files used to publish a
|
|
45
|
+
complete record through an exclusive hard-link operation.
|
|
46
|
+
|
|
47
|
+
The request ID is random unless the caller supplies an idempotency key. An
|
|
48
|
+
idempotency key is a caller-chosen logical-operation identity whose hash
|
|
49
|
+
becomes the stable request ID; retries with that key observe the first admitted
|
|
50
|
+
request instead of appending another one. The first request's detail and
|
|
51
|
+
deadline remain authoritative.
|
|
52
|
+
|
|
53
|
+
## Lifecycle
|
|
54
|
+
|
|
55
|
+
1. The requester durably writes a complete staging record.
|
|
56
|
+
2. It exclusively links that record into `requests/`. A collision is a
|
|
57
|
+
duplicate, not an overwrite.
|
|
58
|
+
3. The watch server, while holding the project watch lock, claims pending,
|
|
59
|
+
unexpired requests through exclusive claim records.
|
|
60
|
+
4. It deliberately coalesces one claimed batch into one `watch-demand`
|
|
61
|
+
refresh. Requests arriving while the watcher is busy remain pending.
|
|
62
|
+
5. A successful corresponding reindex writes every completion receipt before
|
|
63
|
+
removing any claim.
|
|
64
|
+
6. A failed reindex removes its claims without writing completion, making the
|
|
65
|
+
requests pending after a bounded retry delay.
|
|
66
|
+
7. A successor watch server removes predecessor claims only after acquiring
|
|
67
|
+
the same exclusive watch lock. Completed requests remain completed; all
|
|
68
|
+
other claimed requests become pending.
|
|
69
|
+
|
|
70
|
+
The default request deadline is ten minutes. An expired request gets an
|
|
71
|
+
explicit `expired` completion rather than being silently deleted. Completed
|
|
72
|
+
and expired history is retained for seven days; pruning removes only a receipt
|
|
73
|
+
and its already-acknowledged request. Pending and claimed requests are never
|
|
74
|
+
history-pruned. Idempotency is therefore guaranteed for at least the history
|
|
75
|
+
retention window.
|
|
76
|
+
|
|
77
|
+
## Crash and Concurrency Outcomes
|
|
78
|
+
|
|
79
|
+
| Boundary | Observable outcome |
|
|
80
|
+
| --- | --- |
|
|
81
|
+
| Crash before exclusive admission | No request was accepted; only staging may remain |
|
|
82
|
+
| Crash after admission before caller sees success | Request remains pending; retrying the same idempotency key returns the admitted request |
|
|
83
|
+
| Two callers use one idempotency key | Exactly one immutable request wins |
|
|
84
|
+
| Two callers use distinct keys | Both requests remain independently visible and may be coalesced deliberately |
|
|
85
|
+
| Crash after claim before reindex | Successor clears the stale claim and retries the request |
|
|
86
|
+
| Reindex failure | Claim is released; request remains pending |
|
|
87
|
+
| Crash after reindex before completion | Request may execute again; it is never lost |
|
|
88
|
+
| Crash after completion before claim removal | Completion prevents replay; successor removes the obsolete claim |
|
|
89
|
+
| Activity writer races any row above | Activity changes only `watch-activity.json` and cannot modify request state |
|
|
90
|
+
|
|
91
|
+
## Compatibility and Diagnostics
|
|
92
|
+
|
|
93
|
+
Protocol version 5 writers use the request store. During the overlap release,
|
|
94
|
+
the watch server still recognizes the former
|
|
95
|
+
`refreshRequestedAt`/`refreshDetail` fields if an older client writes them. On
|
|
96
|
+
observation it converts that timestamp to a deduplicated durable request before
|
|
97
|
+
processing it. New activity writers never place refresh intent in the activity
|
|
98
|
+
file.
|
|
99
|
+
|
|
100
|
+
`scip-query watch --status` reports pending, claimed, completed, expired, and
|
|
101
|
+
invalid record counts. A nonzero invalid count means an on-disk record failed
|
|
102
|
+
strict validation; the store does not treat malformed bytes as an accepted
|
|
103
|
+
request or completion.
|
|
104
|
+
|
|
105
|
+
This protocol does not promise exactly-once reindex execution. Exactly-once
|
|
106
|
+
execution would require atomically committing the index generation and the
|
|
107
|
+
request receipt across separate storage authorities. Reindex is safe to
|
|
108
|
+
repeat, so the protocol chooses the stronger practical guarantee: accepted
|
|
109
|
+
intent is never silently lost, and successful acknowledgement is never
|
|
110
|
+
inferred from absence.
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
# Windows Sidecar Provenance and Release
|
|
2
|
+
|
|
3
|
+
The Windows sidecar is the npm package `scip-query-scip-windows` and the two
|
|
4
|
+
Windows PE executables it carries. It is a platform-specific optional package
|
|
5
|
+
whose distinguishing role is to make the `scip` index converter available on
|
|
6
|
+
Windows without placing roughly 40 MB of Windows-only bytes in every
|
|
7
|
+
`scip-query` installation.
|
|
8
|
+
|
|
9
|
+
A sidecar provenance record is the versioned `provenance.json` file committed
|
|
10
|
+
under `packages/scip-windows`. It is a build attestation distinguished by
|
|
11
|
+
binding one sidecar package version to the exact upstream repository, tag,
|
|
12
|
+
immutable source commit, Go toolchain, build flags, Windows target, PE machine,
|
|
13
|
+
file size, and SHA-256 of both executable files. The JSON Schema is
|
|
14
|
+
`docs/schemas/windows-sidecar-provenance.schema.json`.
|
|
15
|
+
|
|
16
|
+
## Authority and guarantees
|
|
17
|
+
|
|
18
|
+
The committed provenance record is the release authority for local sidecar
|
|
19
|
+
bytes. The executable files are intentionally ignored by Git because of their
|
|
20
|
+
size; file presence alone therefore proves nothing. A release is locally
|
|
21
|
+
eligible only when all of these facts agree:
|
|
22
|
+
|
|
23
|
+
1. The main package pins the exact sidecar package version.
|
|
24
|
+
2. `provenance.json` names that package and version.
|
|
25
|
+
3. Its repository, tag, Go version, command, flags, and build environment match
|
|
26
|
+
the checked-in build contract.
|
|
27
|
+
4. It names exactly the x64 and ARM64 targets.
|
|
28
|
+
5. Each file is a PE32+ executable with the target's machine code.
|
|
29
|
+
6. Each observed byte size and SHA-256 equals the manifest.
|
|
30
|
+
|
|
31
|
+
This evidence proves which reviewed build claim belongs to the exact local
|
|
32
|
+
bytes. It is not a cryptographic signature by a remote builder. Trust in the
|
|
33
|
+
source and toolchain claim comes from producing the record in a clean trusted
|
|
34
|
+
environment, reviewing the generated manifest, and committing it with the
|
|
35
|
+
release change. Registry-byte identity and partial multi-package publication
|
|
36
|
+
are separate contracts implemented by REL-02 and REL-03.
|
|
37
|
+
|
|
38
|
+
## Rebuild procedure
|
|
39
|
+
|
|
40
|
+
The build contract currently pins:
|
|
41
|
+
|
|
42
|
+
- SCIP repository: `https://github.com/scip-code/scip.git`
|
|
43
|
+
- SCIP tag: `v0.8.1`
|
|
44
|
+
- Go toolchain: `go1.26.4`
|
|
45
|
+
- command: `go build -trimpath -ldflags="-s -w" ./cmd/scip`
|
|
46
|
+
- environment: `CGO_ENABLED=0`, `GOOS=windows`
|
|
47
|
+
- targets: `GOARCH=amd64` and `GOARCH=arm64`
|
|
48
|
+
|
|
49
|
+
From a clean trusted checkout:
|
|
50
|
+
|
|
51
|
+
1. Install the pinned Go toolchain.
|
|
52
|
+
2. Run `npm run build:scip-windows`.
|
|
53
|
+
3. Run `npm run verify:scip-windows`.
|
|
54
|
+
4. Review the generated `packages/scip-windows/provenance.json`, README, and
|
|
55
|
+
license change. Confirm the immutable source commit is the intended tag.
|
|
56
|
+
5. Run `npm pack --dry-run` inside `packages/scip-windows`. Its `prepack`
|
|
57
|
+
lifecycle verifies provenance before npm computes the tarball.
|
|
58
|
+
6. Commit the provenance and release metadata. Do not commit the ignored
|
|
59
|
+
executables.
|
|
60
|
+
|
|
61
|
+
`SCIP_REPO_URL`, `SCIP_VERSION`, and `SCIP_GO_VERSION` are intentional-update
|
|
62
|
+
inputs, not ways to bypass the contract. A changed value makes verification
|
|
63
|
+
fail until a rebuild produces reviewed evidence for the new input.
|
|
64
|
+
|
|
65
|
+
The first provenance-bearing package is `0.13.1`. Published `0.13.0` has the
|
|
66
|
+
same executables but lacks `provenance.json`; npm versions are immutable, so
|
|
67
|
+
the registry identity gate correctly requires the patch bump instead of
|
|
68
|
+
trying to overwrite it.
|
|
69
|
+
|
|
70
|
+
## Registry identity gate
|
|
71
|
+
|
|
72
|
+
A packed sidecar identity is the npm package coordinate, exact tarball
|
|
73
|
+
SHA-1/SHA-512/size, and decoded provenance bytes observed from one locally
|
|
74
|
+
created `.tgz`. What distinguishes it from a version-existence check is that
|
|
75
|
+
it identifies the bytes intended for installation, not merely the name under
|
|
76
|
+
which some bytes were published.
|
|
77
|
+
|
|
78
|
+
Before any registry mutation, the release flow:
|
|
79
|
+
|
|
80
|
+
1. verifies the checked-in binaries and provenance;
|
|
81
|
+
2. packs the local sidecar once into a private temporary directory;
|
|
82
|
+
3. recomputes the tarball hashes and size instead of trusting npm's JSON
|
|
83
|
+
report;
|
|
84
|
+
4. extracts `provenance.json` from the tar archive under a 64 MiB decompression
|
|
85
|
+
ceiling; and
|
|
86
|
+
5. requires the packed manifest bytes to equal the reviewed local file.
|
|
87
|
+
|
|
88
|
+
For an existing version, the flow reads npm's `dist` identity, downloads the
|
|
89
|
+
published tarball with lifecycle scripts disabled, recomputes its hashes, and
|
|
90
|
+
requires all of the following to agree:
|
|
91
|
+
|
|
92
|
+
- registry metadata and downloaded tarball SHA-1/SHA-512;
|
|
93
|
+
- local and registry package names and versions;
|
|
94
|
+
- local and registry tarball SHA-1/SHA-512; and
|
|
95
|
+
- local and registry provenance bytes.
|
|
96
|
+
|
|
97
|
+
An explicit npm `E404` is the only evidence that authorizes the
|
|
98
|
+
not-yet-published branch. Authentication failures, timeouts, output-limit
|
|
99
|
+
failures, malformed metadata, generic proxy errors, and server failures are
|
|
100
|
+
ambiguous registry states and stop the release. Pack and registry commands
|
|
101
|
+
have finite 120-second and 30-second deadlines respectively, a 4 MiB captured
|
|
102
|
+
output ceiling, and typed timeout/output/exit failure classification.
|
|
103
|
+
|
|
104
|
+
Run `npm run verify:scip-windows-registry` for a read-only reconciliation. It
|
|
105
|
+
packs and verifies local bytes, then either proves that the existing registry
|
|
106
|
+
tarball is identical or reports that the version is absent and ready for its
|
|
107
|
+
first publish. The wrapper passes an explicit verification-only capability;
|
|
108
|
+
no inherited environment variable can suppress an authorized release publish.
|
|
109
|
+
|
|
110
|
+
The complete release coordinator publishes an already verified local `.tgz`,
|
|
111
|
+
not a directory that npm could repack differently. If a publish command fails
|
|
112
|
+
because another process won the race, the coordinator rereads and downloads
|
|
113
|
+
the winning registry version. It may continue only when the winner has the
|
|
114
|
+
same complete identity; a different winner requires a new package version.
|
|
115
|
+
|
|
116
|
+
The historical `npm run publish:scip-windows` alias is now local verification
|
|
117
|
+
only. `npm_lifecycle_event`, npm's dry-run environment, and other inherited
|
|
118
|
+
environment variables cannot grant it registry mutation authority. The
|
|
119
|
+
sidecar-only registry reader has an explicit verification capability, while
|
|
120
|
+
the complete coordinator is the only publishing CLI.
|
|
121
|
+
|
|
122
|
+
## Two-package release coordinator
|
|
123
|
+
|
|
124
|
+
A two-package release is one ordered publication of an exact main-package
|
|
125
|
+
tarball and the exact Windows-sidecar tarball pinned by that main package.
|
|
126
|
+
Unlike a database transaction, it cannot roll back an npm publication. Its
|
|
127
|
+
essential safety property is therefore not atomicity: it is that every
|
|
128
|
+
partial registry state identifies the intended bytes, is observed before the
|
|
129
|
+
next irreversible step, and can be reconciled by rerunning one command.
|
|
130
|
+
|
|
131
|
+
The release coordinator is the repository command that owns this entire
|
|
132
|
+
ordering. It differs from a lifecycle hook by packing and validating both
|
|
133
|
+
artifacts before either registry mutation, recording local recovery evidence,
|
|
134
|
+
and verifying registry truth after each publication:
|
|
135
|
+
|
|
136
|
+
1. acquire the token-owned release lock;
|
|
137
|
+
2. require a clean Git checkout and record the exact `HEAD` object ID;
|
|
138
|
+
3. resolve one canonical credential-free HTTPS npm registry and retain it for
|
|
139
|
+
the complete run;
|
|
140
|
+
4. run typecheck, the complete test suite, and lint; lint includes formatting,
|
|
141
|
+
production build, API compatibility, downstream compilation, and skill
|
|
142
|
+
link checks;
|
|
143
|
+
5. verify provenance and pack the sidecar;
|
|
144
|
+
6. pack the main package with lifecycle scripts disabled;
|
|
145
|
+
7. extract both packed `package.json` files, require their coordinates, and
|
|
146
|
+
require the packed main tarball to pin the exact packed sidecar version;
|
|
147
|
+
8. require Git `HEAD` and complete tracked/untracked working-tree cleanliness
|
|
148
|
+
to be unchanged;
|
|
149
|
+
9. durably record the registry and both local tarball identities before
|
|
150
|
+
reading the registry;
|
|
151
|
+
10. observe and fully verify both registry coordinates, always passing the
|
|
152
|
+
retained registry URL explicitly, before the first
|
|
153
|
+
publish;
|
|
154
|
+
11. publish and verify the sidecar if absent, then durably record that fact;
|
|
155
|
+
12. publish and verify the main package if absent, then durably record that
|
|
156
|
+
fact; and
|
|
157
|
+
13. remove private packs and release the owned lock.
|
|
158
|
+
|
|
159
|
+
Every Git, npm pack, registry, publish, test, and lint process has a finite
|
|
160
|
+
deadline and captured-output limit. A cleanup or lock-release failure produces
|
|
161
|
+
a nonzero outcome without erasing an earlier build, registry, or publication
|
|
162
|
+
failure from the diagnostic.
|
|
163
|
+
|
|
164
|
+
### Operator runbook
|
|
165
|
+
|
|
166
|
+
Prepare and commit the complete release change first. The checkout must be
|
|
167
|
+
clean because the recorded source revision is the wider evidence from which
|
|
168
|
+
the two packed artifacts were tested and produced.
|
|
169
|
+
|
|
170
|
+
1. Bump the main package version. If sidecar bytes or provenance changed, also
|
|
171
|
+
bump the immutable sidecar version and update its exact optional-dependency
|
|
172
|
+
pin.
|
|
173
|
+
2. Rebuild and review sidecar provenance when required, following the rebuild
|
|
174
|
+
procedure above.
|
|
175
|
+
3. Review and commit the version, lockfile, changelog, provenance, schemas,
|
|
176
|
+
release code, and tests.
|
|
177
|
+
4. Run:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
npm run release:npm:dry-run
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
This runs the complete local preflight, packs both artifacts, writes the
|
|
184
|
+
local recovery record, and reads/downloads any existing registry versions.
|
|
185
|
+
It never invokes `npm publish`.
|
|
186
|
+
|
|
187
|
+
5. Review the reported coordinates, integrities, registry states, and the JSON
|
|
188
|
+
record under `.scipquery/releases/`.
|
|
189
|
+
6. Run:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
npm run release:npm
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
7. Require the final output to say that both exact registry identities are
|
|
196
|
+
verified. A later retry of the same command is safe: it repeats local
|
|
197
|
+
preflight and registry verification, but it does not republish an already
|
|
198
|
+
identical coordinate.
|
|
199
|
+
|
|
200
|
+
Do not run `npm publish` directly. The root `prepublishOnly` guard refuses that
|
|
201
|
+
path because npm's lifecycle owns only one package publication and cannot
|
|
202
|
+
record or recover the pair. An operator can deliberately bypass lifecycle
|
|
203
|
+
scripts with npm's `--ignore-scripts` option; that is an administrative
|
|
204
|
+
capability outside the repository's enforcement boundary, not an alternate
|
|
205
|
+
supported release path. The coordinator itself uses `--ignore-scripts` only
|
|
206
|
+
when publishing the two tarballs it has already packed, hashed, inspected,
|
|
207
|
+
and recorded.
|
|
208
|
+
|
|
209
|
+
### Durable local release state
|
|
210
|
+
|
|
211
|
+
A local release-state record is a schema-versioned JSON recovery fact stored
|
|
212
|
+
outside both npm tarballs under `.scipquery/releases/`. It is distinguished
|
|
213
|
+
from registry authority by recording what this checkout intended and what an
|
|
214
|
+
earlier run verified, while never permitting a later run to skip fresh
|
|
215
|
+
registry observation.
|
|
216
|
+
|
|
217
|
+
Schema version 1 records:
|
|
218
|
+
|
|
219
|
+
- a content-derived `releaseId`;
|
|
220
|
+
- the clean Git revision used for preflight and packing;
|
|
221
|
+
- the canonical HTTPS npm registry on which the coordinates are interpreted;
|
|
222
|
+
- each package's name, version, byte size, SHA-1, and SHA-512 integrity;
|
|
223
|
+
- `createdAt` and nondecreasing `updatedAt` timestamps;
|
|
224
|
+
- the writer identity; and
|
|
225
|
+
- a canonical set of completed facts:
|
|
226
|
+
`local-preflight-complete`, `sidecar-registry-verified`, and
|
|
227
|
+
`main-registry-verified`.
|
|
228
|
+
|
|
229
|
+
The registry facts are independent observations, not a fictional transaction
|
|
230
|
+
log. For example, an old or manually created state may have the main identity
|
|
231
|
+
verified while the sidecar is absent. The next coordinator run still verifies
|
|
232
|
+
both coordinates and repairs only the absent intended package.
|
|
233
|
+
|
|
234
|
+
The path is stable for one pair of package coordinates. Repacking different
|
|
235
|
+
bytes, using a different source revision, or selecting a different registry
|
|
236
|
+
under those same versions therefore collides with the existing record and
|
|
237
|
+
stops before registry work. The record is atomically replaced with directory
|
|
238
|
+
durability while the release lock is owned. It is intentionally ignored by Git
|
|
239
|
+
and omitted from the npm package: it is local recovery state, not portable
|
|
240
|
+
release authority. The normative shape is
|
|
241
|
+
`docs/schemas/npm-release-state.schema.json`.
|
|
242
|
+
|
|
243
|
+
Current-schema additive fields are tolerated. Malformed JSON, a wrong
|
|
244
|
+
discriminator, an invalid identity, a noncanonical stage list, or a future
|
|
245
|
+
schema fails closed. Do not hand-edit a damaged record. Preserve it for
|
|
246
|
+
diagnosis, move it out of the coordinate-stable path, and rerun from the exact
|
|
247
|
+
recorded source revision; the new run will recompute local bytes and reverify
|
|
248
|
+
both registry coordinates before acquiring publication authority.
|
|
249
|
+
|
|
250
|
+
## Failure and recovery
|
|
251
|
+
|
|
252
|
+
| Observed state or failure | Safe outcome and recovery |
|
|
253
|
+
| ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
|
|
254
|
+
| Missing executable or provenance | Stop before registry reads; rebuild, review, and commit the intended sidecar |
|
|
255
|
+
| Stale hash, wrong PE machine, or changed build input | Stop before registry reads; do not authorize bytes from file presence |
|
|
256
|
+
| One target build fails or promotion is interrupted | No complete new build is authorized; rebuild both and rerun verification |
|
|
257
|
+
| Dirty checkout before preflight | Stop before tests and registry reads; commit, remove, or intentionally ignore/restore every tracked or untracked path |
|
|
258
|
+
| Missing, insecure, credential-bearing, or malformed registry URL | Stop before tests and registry reads; configure one canonical credential-free HTTPS npm registry |
|
|
259
|
+
| Git revision or any tracked/untracked path changes during preflight | Stop before the state record and registry reads; remove the concurrent editor and rerun from one completely clean revision |
|
|
260
|
+
| Test, lint, build, API, sidecar pack, or main pack fails | No registry mutation has occurred; fix the local failure and rerun |
|
|
261
|
+
| Initial state publication fails | No registry read or mutation has occurred; repair local filesystem durability/permissions and rerun |
|
|
262
|
+
| State contains only `local-preflight-complete` | Registry is freshly reconciled; absent packages publish in sidecar-then-main order |
|
|
263
|
+
| Sidecar is exact, main is absent | Record sidecar verification if needed, then publish and verify the main package |
|
|
264
|
+
| Main is exact, sidecar is absent | Verify the main tarball pins the intended sidecar, then publish and verify only the sidecar |
|
|
265
|
+
| Both packages are exact, state is stale or absent | Record both observed facts and finish without publication |
|
|
266
|
+
| Sidecar publishes but its state write fails | Stop before main; retry observes the exact sidecar and continues |
|
|
267
|
+
| Main publishes but its state write fails | Retry observes both exact registry identities and records completion |
|
|
268
|
+
| Publish reports failure but an identical winner is visible | Accept the registry fact after downloading and hashing it; continue |
|
|
269
|
+
| Publish and its immediate registry reconciliation both fail | Report both causal failures; rerun the coordinator to establish registry truth before another publication decision |
|
|
270
|
+
| Publish returns success but identity is not yet visible | Stop after bounded visibility retries; rerun the coordinator rather than publishing blindly |
|
|
271
|
+
| Registry query times out, is unauthorized, or is malformed | Stop; ambiguity is not converted to absence |
|
|
272
|
+
| Published tarball disagrees with `dist` metadata | Stop; treat the download or registry metadata as corrupt |
|
|
273
|
+
| Existing coordinate lacks provenance or has different bytes | Stop; npm versions are immutable, so bump the changed package version |
|
|
274
|
+
| State records different source or bytes under the same versions | Stop before registry reads; resume the recorded revision, or bump the changed package version |
|
|
275
|
+
| Configured registry differs from the recorded release registry | Stop before registry reads; restore the intended registry or begin new package versions for the other registry |
|
|
276
|
+
| Malformed or future local state | Preserve and move the artifact for diagnosis; rerun from the recorded revision so local and registry facts are rebuilt |
|
|
277
|
+
| Release lock is held by a live owner | Wait; a dead attributable owner is reclaimed conservatively, while unverifiable ownership fails closed |
|
|
278
|
+
| Cleanup and an earlier operation both fail | Both failures are reported; inspect registry/state first, then rerun to reconcile |
|
|
279
|
+
| Lock ownership changes before release | Command exits nonzero; do not infer failure or success from the local message—rerun and require exact registry identity |
|
|
280
|
+
|
|
281
|
+
Build outputs are produced in a private temporary directory. Only after both
|
|
282
|
+
targets and the manifest exist are individual files atomically replaced in the
|
|
283
|
+
sidecar directory. A process crash between replacements can leave an old/new
|
|
284
|
+
mixture visible, but the next verifier detects the mismatch and fails closed.
|
|
285
|
+
|
|
286
|
+
## Compatibility
|
|
287
|
+
|
|
288
|
+
Schema version 1 is the first executable provenance format. Readers accept
|
|
289
|
+
unknown additive fields within version 1 but require every identity and binary
|
|
290
|
+
field used by the release decision. Missing, malformed, older, or future
|
|
291
|
+
versions are not treated as legacy success. Changing a required field or its
|
|
292
|
+
meaning requires a new schema version and an explicit overlap policy before a
|
|
293
|
+
writer ships it.
|
|
294
|
+
|
|
295
|
+
The local release-state schema is independently versioned at 1. Because it has
|
|
296
|
+
not shipped before `0.19.6`, it has no legacy reader. Additive current fields
|
|
297
|
+
are compatible; removing or reinterpreting a required identity, source, stage,
|
|
298
|
+
or timestamp field requires a new schema and an explicit recovery policy.
|
|
@@ -12,12 +12,12 @@ The companion documents are:
|
|
|
12
12
|
|
|
13
13
|
The ledger is anchored to the current tool surface, not memory.
|
|
14
14
|
|
|
15
|
-
| Surface | Source
|
|
16
|
-
| ------------------------- |
|
|
17
|
-
| Repo-wide health analysis | `scip-query code health --json` reported `src/queries/health/health.ts:218`, where `health()` runs `runHealthAnalyses()` and `buildHealthReport()` through the health budget that carries full-vs-bounded semantic enrichment.
|
|
18
|
-
| Change-time gate analysis | `scip-query
|
|
19
|
-
| Public command registry | `scip-query trace queryCommandOrder --json` reported `src/runtime/commands/query-command-specs.ts:11`, where the public query command order starts. `scip-query code queryCommandDescriptor --json` reported `src/runtime/commands/query-command-specs.ts:104`, where command descriptors are resolved by id.
|
|
20
|
-
| Diff-gate check list | `scip-query trace DIFF_GATE_CHECKS --json`
|
|
15
|
+
| Surface | Source | Why it anchors the ledger |
|
|
16
|
+
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------- |
|
|
17
|
+
| Repo-wide health analysis | `scip-query code health --json` reported `src/queries/health/health.ts:218`, where `health()` runs `runHealthAnalyses()` and `buildHealthReport()` through the health budget that carries full-vs-bounded semantic enrichment. | Every repo-wide analyzer validation must eventually reconcile with health output and scoring. |
|
|
18
|
+
| Change-time gate analysis | `scip-query trace diffGate --json` resolves `diffGate()` in `src/queries/impact/diff-gate.ts`, where it runs the default diff-scoped checks: `echo`, `incomplete-migration`, `co-change-partner`, `twin-partner`, `coverage-contract`, `architecture`, `doc-reference`, `unused-params`, and `new-dead`. The baseline ratchet is explicit because it is repo-wide. | Every diff-only analyzer needs a separate validation path from repo-wide health. |
|
|
19
|
+
| Public command registry | `scip-query trace queryCommandOrder --json` reported `src/runtime/commands/query-command-specs.ts:11`, where the public query command order starts. `scip-query code queryCommandDescriptor --json` reported `src/runtime/commands/query-command-specs.ts:104`, where command descriptors are resolved by id. | The ledger must not silently miss a public analyzer command. |
|
|
20
|
+
| Diff-gate check list | `scip-query trace DIFF_GATE_CHECKS --json` resolves the canonical exported check list in `src/queries/impact/diff-gate.ts`. | The ledger must cover every change-time check that can block a diff. |
|
|
21
21
|
|
|
22
22
|
## Core Concepts
|
|
23
23
|
|
|
@@ -337,13 +337,14 @@ budget choice.
|
|
|
337
337
|
|
|
338
338
|
## 2026-07-02 Doc-Reference Hub-Cascade Follow-Up
|
|
339
339
|
|
|
340
|
-
The `diffGate()` and `DIFF_GATE_CHECKS` citations were refreshed
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
340
|
+
The `diffGate()` and `DIFF_GATE_CHECKS` citations were refreshed after
|
|
341
|
+
followup #8 added hub-file cascade damping to the doc-reference check: when
|
|
342
|
+
more than 3 docs cite the same changed hub file in one gate run, their
|
|
343
|
+
findings collapse into one clustered finding carrying `citationCount`, up to
|
|
344
|
+
3 `citationExemplars`, and an explicit `suppressedCount`. Slice 23 removed the
|
|
345
|
+
historical line numbers from these source anchors because the exported symbol
|
|
346
|
+
identities are stable while repeated additive checks made the numbers stale.
|
|
347
|
+
The current table names every default check; per-doc findings under the
|
|
347
348
|
threshold are unchanged.
|
|
348
349
|
|
|
349
350
|
## 2026-07-10 TypeScript Dead-Code Certification Follow-Up
|
|
@@ -403,7 +404,7 @@ covered, so the result is not an artifact of a permanently-firing check.
|
|
|
403
404
|
**Precision decision.** Module-hierarchy suppression is content-aware, not
|
|
404
405
|
path-based. `classifyFile` decides "barrel" from the filename, which labels
|
|
405
406
|
every `index.ts` bookkeeping — including `src/language-parsers/index.ts`, a
|
|
406
|
-
130-line cache module that was the
|
|
407
|
+
130-line cache module that was the _target_ of the narrowest real back edge in
|
|
407
408
|
the repository. A path-based rule therefore produced a false negative on the
|
|
408
409
|
single most important finding. A barrel is now excluded only when the index
|
|
409
410
|
records no definitions of its own inside it.
|
|
@@ -415,7 +416,7 @@ files depending on one of its own sub-directories is the most common real
|
|
|
415
416
|
intra-boundary cycle, not module bookkeeping.
|
|
416
417
|
|
|
417
418
|
**Known limits, not yet calibrated.** Sub-units are one directory level, so a
|
|
418
|
-
layer inversion
|
|
419
|
+
layer inversion _inside_ a single directory is invisible; the `src/source`
|
|
419
420
|
primitives/facts/products tangle had to be derived by hand and was fixed by
|
|
420
421
|
splitting the directory. Test files are not SCIP-indexed and are therefore
|
|
421
422
|
outside boundary enforcement entirely. `requireCompletePolicy` checks that a
|
|
@@ -428,17 +429,17 @@ Five rules were added to `architecture` after auditing what boundary
|
|
|
428
429
|
enforcement still could not see. Each is opt-in and defaults to off, so
|
|
429
430
|
upgrading tightens no existing project's gate.
|
|
430
431
|
|
|
431
|
-
| Rule
|
|
432
|
-
|
|
|
433
|
-
| `requireMinimalPolicy`
|
|
434
|
-
| `maxBoundaryFanOut` / global `maxBoundaryFiles` / per-boundary `maxFiles` | A boundary growing until it is coupled to most of the system. A local file ceiling overrides the global default only for its reviewed boundary. Coarseness was previously caught only when it
|
|
435
|
-
| `testPaths`
|
|
436
|
-
| `subUnits: 'file'`
|
|
437
|
-
| `fragileEdges` (report-only)
|
|
432
|
+
| Rule | Closes | Finding identity |
|
|
433
|
+
| ------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
|
|
434
|
+
| `requireMinimalPolicy` | A declared allowance outliving the edge that justified it. `requireCompletePolicy` checks a row _exists_, never that it is _minimal_, so policy widens silently. | `architecture:stale-allowance:<from>:<to>` |
|
|
435
|
+
| `maxBoundaryFanOut` / global `maxBoundaryFiles` / per-boundary `maxFiles` | A boundary growing until it is coupled to most of the system. A local file ceiling overrides the global default only for its reviewed boundary. Coarseness was previously caught only when it _hid a cycle_, never when it merely got large. | `architecture:boundary-limit:<kind>:<boundary>` |
|
|
436
|
+
| `testPaths` | Test files are excluded from the compiler project and therefore from the index, leaving them outside every boundary rule. | `architecture:test-boundary:<test>:<boundary>` |
|
|
437
|
+
| `subUnits: 'file'` | A layer inversion _inside_ one directory, invisible when sub-units are directories. | (reuses `coarse-boundary`) |
|
|
438
|
+
| `fragileEdges` (report-only) | No signal distinguishing a load-bearing dependency from one resting on a single import. 60 of 251 edges here are single-import. | none — advisory |
|
|
438
439
|
|
|
439
440
|
**Test-boundary calibration.** The first rule shape — "a test may import only what
|
|
440
441
|
its subject's boundary may import" — produced 91 findings, nearly all
|
|
441
|
-
legitimate: a test for `analysis/git-history` drives it
|
|
442
|
+
legitimate: a test for `analysis/git-history` drives it _through_
|
|
442
443
|
`queries/cleanup/co-change`, which is composition, not coupling. The shipped
|
|
443
444
|
rule allows the subject's **transitive** reach plus any boundary that reaches
|
|
444
445
|
the subject (a consumer is the natural driver). That yields 0 findings here,
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://github.com/ainsleyclark/scip-query/blob/main/docs/schemas/cli-json-envelope.schema.json",
|
|
4
|
+
"title": "scip-query CLI JSON envelope v1",
|
|
5
|
+
"description": "The public transport record emitted by scip-query commands that accept --json.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["kind", "schemaVersion", "producer", "command", "resultSchemaVersion", "args", "options", "result"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"kind": {
|
|
10
|
+
"const": "scip-query-result"
|
|
11
|
+
},
|
|
12
|
+
"schemaVersion": {
|
|
13
|
+
"const": 1
|
|
14
|
+
},
|
|
15
|
+
"producer": {
|
|
16
|
+
"type": "object",
|
|
17
|
+
"required": ["name", "version"],
|
|
18
|
+
"properties": {
|
|
19
|
+
"name": {
|
|
20
|
+
"const": "scip-query"
|
|
21
|
+
},
|
|
22
|
+
"version": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"minLength": 1
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"additionalProperties": true
|
|
28
|
+
},
|
|
29
|
+
"command": {
|
|
30
|
+
"type": "string",
|
|
31
|
+
"minLength": 1
|
|
32
|
+
},
|
|
33
|
+
"resultSchemaVersion": {
|
|
34
|
+
"type": "integer",
|
|
35
|
+
"minimum": 1
|
|
36
|
+
},
|
|
37
|
+
"evidence": {
|
|
38
|
+
"enum": ["graph-fact", "heuristic", "mixed"]
|
|
39
|
+
},
|
|
40
|
+
"analysisBudget": {},
|
|
41
|
+
"args": {
|
|
42
|
+
"type": "array"
|
|
43
|
+
},
|
|
44
|
+
"options": {
|
|
45
|
+
"type": "object",
|
|
46
|
+
"additionalProperties": true
|
|
47
|
+
},
|
|
48
|
+
"result": {},
|
|
49
|
+
"coverage": {},
|
|
50
|
+
"agentResult": {}
|
|
51
|
+
},
|
|
52
|
+
"additionalProperties": true
|
|
53
|
+
}
|