scip-query 0.19.8 → 0.20.0
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 +97 -0
- package/README.md +158 -48
- package/dist/augment-vue-worker.js +1 -1
- package/dist/chunk-26QA6FAI.js +8 -0
- package/dist/{chunk-KJ2IIBZN.js → chunk-2HPVVXM5.js} +2 -2
- package/dist/chunk-2KAZEZ6M.js +2 -0
- package/dist/chunk-32LVLCLN.js +40 -0
- package/dist/{chunk-24GTWJ3N.js → chunk-3CLX5EOX.js} +2 -2
- package/dist/{chunk-QGGLL3UH.js → chunk-3G66UZBH.js} +2 -2
- package/dist/{chunk-AA4UWRNL.js → chunk-3ORVDL3H.js} +2 -2
- package/dist/chunk-4MAK2HOY.js +6 -0
- package/dist/{chunk-QIQ63BHW.js → chunk-4TURLRL5.js} +2 -2
- package/dist/chunk-4UQVNCQE.js +2 -0
- package/dist/chunk-55Q3WLZX.js +2 -0
- package/dist/{chunk-CTF2GDEX.js → chunk-5E4WNAVD.js} +2 -2
- package/dist/{chunk-ZCEJ63SP.js → chunk-5I5G2QOX.js} +2 -2
- package/dist/chunk-6LDJQXAH.js +2 -0
- package/dist/{chunk-3EDFLQ6A.js → chunk-6O5TICIZ.js} +2 -2
- package/dist/{chunk-ACAM6O5R.js → chunk-6SHPK5ZE.js} +2 -2
- package/dist/chunk-7BAVHKMJ.js +49 -0
- package/dist/chunk-7O5IKBTZ.js +16 -0
- package/dist/{chunk-WJL2L6MV.js → chunk-7PIO7NKH.js} +2 -2
- package/dist/chunk-7S5E7KWT.js +2 -0
- package/dist/{chunk-YLFORA5G.js → chunk-7SQQWSY3.js} +2 -2
- package/dist/chunk-7WPLAODU.js +5 -0
- package/dist/chunk-A73XVBCR.js +20 -0
- package/dist/chunk-AFHORGLH.js +42 -0
- package/dist/chunk-AIE7TFJW.js +9 -0
- package/dist/{chunk-TWMJ3Y3G.js → chunk-AZJQQKDD.js} +2 -2
- package/dist/{chunk-BDOIKGDI.js → chunk-B2PX5I6M.js} +2 -2
- package/dist/{chunk-DQBCO2UY.js → chunk-B7PBSLZN.js} +2 -2
- package/dist/chunk-BBW6JFHN.js +2 -0
- package/dist/{chunk-YTVWB7YJ.js → chunk-BDCC2NPY.js} +2 -2
- package/dist/{chunk-O23I56NA.js → chunk-BNXCIFVY.js} +2 -2
- package/dist/{chunk-MLFZP76A.js → chunk-BPAPWKP6.js} +2 -2
- package/dist/chunk-BS2NMXQZ.js +4 -0
- package/dist/chunk-C3KV2II6.js +2 -0
- package/dist/chunk-C43RDDP4.js +20 -0
- package/dist/{chunk-K2WO7XY7.js → chunk-CJST5ETY.js} +2 -2
- package/dist/chunk-DAFAHMNB.js +42 -0
- package/dist/{chunk-KKME5ZAI.js → chunk-DQGFVPUV.js} +2 -2
- package/dist/chunk-DQLPXMH6.js +8 -0
- package/dist/chunk-EKZTZXHZ.js +117 -0
- package/dist/{chunk-FJ5UDTQF.js → chunk-EN3O7VJA.js} +2 -2
- package/dist/{chunk-HZYDQPNY.js → chunk-EW2NTSFA.js} +2 -2
- package/dist/chunk-F3Z4OUDS.js +8 -0
- package/dist/chunk-FJH2NW7J.js +66 -0
- package/dist/{chunk-MSBDMFER.js → chunk-FKSELJQF.js} +2 -2
- package/dist/chunk-FTFP6O3L.js +11 -0
- package/dist/chunk-FYLK2DEJ.js +2 -0
- package/dist/{chunk-WUW7YUAH.js → chunk-GH74ASD6.js} +2 -2
- package/dist/{chunk-464PLI5O.js → chunk-GMXWZP2B.js} +2 -2
- package/dist/chunk-GOUBFH5O.js +3 -0
- package/dist/{chunk-FIJCV235.js → chunk-HLF2TX6R.js} +2 -2
- package/dist/{chunk-WWKWUPSU.js → chunk-HX4GQPZP.js} +2 -2
- package/dist/chunk-HX7M4BDI.js +30 -0
- package/dist/chunk-HZ72SESS.js +128 -0
- package/dist/{chunk-SERUIGV5.js → chunk-IB2N4FIY.js} +2 -2
- package/dist/chunk-ILMHV3KM.js +2 -0
- package/dist/chunk-IZYYAFN5.js +2 -0
- package/dist/{chunk-GNC4JVAN.js → chunk-JAYYFEQY.js} +2 -2
- package/dist/{chunk-QJIVBYEK.js → chunk-JDOEX4E6.js} +2 -2
- package/dist/chunk-JFGGXWQF.js +947 -0
- package/dist/chunk-JN4NMBEX.js +8 -0
- package/dist/{chunk-6M7RONVB.js → chunk-JVYA47YU.js} +2 -2
- package/dist/{chunk-7KYNAMMH.js → chunk-JW56N3KI.js} +2 -2
- package/dist/{chunk-OUBAF226.js → chunk-JZ2OXNWB.js} +2 -2
- package/dist/chunk-KMKTIO2G.js +8 -0
- package/dist/chunk-L5GJNV2T.js +8 -0
- package/dist/{chunk-MNSTUIDD.js → chunk-L7AW2QB5.js} +2 -2
- package/dist/chunk-L7JDSCDF.js +4 -0
- package/dist/chunk-LU47HG23.js +14 -0
- package/dist/chunk-LVY7NPF7.js +2 -0
- package/dist/chunk-LY4WC4AD.js +74 -0
- package/dist/{chunk-7FT5Y65S.js → chunk-MKCDWWGV.js} +2 -2
- package/dist/chunk-MNE7YG56.js +2 -0
- package/dist/{chunk-7QHY3H7P.js → chunk-MRXBEXSY.js} +2 -2
- package/dist/chunk-MV7OWDUX.js +2 -0
- package/dist/{chunk-ZJ5CBXK3.js → chunk-N5W4YZMK.js} +2 -2
- package/dist/chunk-NGEXCJJW.js +11 -0
- package/dist/{chunk-7SWJEWJF.js → chunk-NIW6JDC5.js} +2 -2
- package/dist/{chunk-O3O4XXO6.js → chunk-O64IZ6UX.js} +2 -2
- package/dist/{chunk-3ZSJ3PWF.js → chunk-PBUQFCNB.js} +2 -2
- package/dist/{chunk-7RAG65VK.js → chunk-POAVPHH7.js} +2 -2
- package/dist/{chunk-A3QXWFBK.js → chunk-PQCI4SQX.js} +2 -2
- package/dist/{chunk-4BV4QAZJ.js → chunk-PXY7F6Y4.js} +2 -2
- package/dist/chunk-RDO52JGY.js +2 -0
- package/dist/chunk-RJT3TUUZ.js +2 -0
- package/dist/{chunk-S4S2WOIX.js → chunk-RUJURYSV.js} +2 -2
- package/dist/{chunk-JAY7YWS3.js → chunk-RVLDN63O.js} +2 -2
- package/dist/chunk-RXOXSKY3.js +2 -0
- package/dist/chunk-S7OYBOCK.js +2 -0
- package/dist/chunk-SMNXQT5Z.js +3 -0
- package/dist/{chunk-NE3TZUCI.js → chunk-SRAFT254.js} +2 -2
- package/dist/{chunk-ELLMY7XJ.js → chunk-SXP2MBJH.js} +2 -2
- package/dist/chunk-T7YQSHPQ.js +3 -0
- package/dist/{chunk-WY45BHKQ.js → chunk-TFRAYKN6.js} +2 -2
- package/dist/{chunk-2SNGN6U4.js → chunk-UJCOIXDY.js} +2 -2
- package/dist/{chunk-MZZBAITE.js → chunk-UJPRPGCO.js} +2 -2
- package/dist/chunk-W4ETQAXM.js +2 -0
- package/dist/chunk-WCCFZ7V7.js +113 -0
- package/dist/chunk-WUPW3UN3.js +3 -0
- package/dist/{chunk-7LSVMFX7.js → chunk-WXZLAAWK.js} +2 -2
- package/dist/{chunk-5ML2BNRH.js → chunk-X54AGLVX.js} +2 -2
- package/dist/chunk-XKWKXZKW.js +20 -0
- package/dist/{chunk-5YLUDDAF.js → chunk-XSRF6Q77.js} +2 -2
- package/dist/chunk-Y2MVPNKY.js +5 -0
- package/dist/{chunk-JHF3E4YM.js → chunk-YKUU5AIC.js} +2 -2
- package/dist/{chunk-E3HYEQO7.js → chunk-YLCJLTPL.js} +2 -2
- package/dist/{chunk-7VCOXZH3.js → chunk-YTQVETEO.js} +2 -2
- package/dist/chunk-Z4N3MZYA.js +38 -0
- package/dist/chunk-ZHXX42OH.js +18 -0
- package/dist/chunk-ZJOOT3BG.js +2 -0
- package/dist/{chunk-P3UO3EH3.js → chunk-ZK26BAQL.js} +2 -2
- package/dist/{chunk-33KUO7CG.js → chunk-ZTETIQ35.js} +2 -2
- package/dist/cli.js +3 -8
- package/dist/command-descriptors-DSS46KXI.js +642 -0
- package/dist/{config-types-B6MEoRNy.d.ts → config-types-jVM3D7MA.d.ts} +68 -2
- package/dist/{db-DYLKr9Wn.d.ts → db-B5PM5yNk.d.ts} +20 -2
- package/dist/{diff-gate-types-C9BoYwYD.d.ts → diff-gate-types-B0QYpDv1.d.ts} +2 -1
- package/dist/direct-navigation-6YHV6IB5.js +3 -0
- package/dist/{health-DgxIDXJC.d.ts → health-Do5TKSJI.d.ts} +1 -1
- package/dist/index.d.ts +3 -3
- 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 +22 -3
- 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 +3 -3
- package/dist/queries/complexity-hotspots.js +1 -1
- package/dist/queries/complexity.d.ts +3 -3
- 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 +2 -2
- 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 +40 -7
- package/dist/queries/diff-gate.js +1 -1
- package/dist/queries/diff-impact.d.ts +84 -6
- package/dist/queries/diff-impact.js +1 -1
- package/dist/queries/doc-drift.d.ts +3 -3
- 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 +3 -3
- 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 +12 -3
- package/dist/queries/files.js +1 -1
- 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 +8 -6
- package/dist/queries/incomplete-migration.js +1 -1
- package/dist/queries/index.d.ts +141 -10
- 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 +34 -3
- package/dist/queries/methods.js +1 -1
- package/dist/queries/not-implemented.d.ts +2 -2
- 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 +3 -3
- package/dist/queries/passthrough-candidates.js +1 -1
- package/dist/queries/plan-context.d.ts +3 -3
- 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/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 +14 -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 +21 -21
- package/dist/reindex.d.ts +3 -3
- package/dist/reindex.js +33 -33
- package/dist/runtime.d.ts +5 -3
- package/dist/runtime.js +3 -3
- 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-Cc6c00-a.d.ts → scip-cli-BnEwZRLJ.d.ts} +1 -1
- package/dist/{symbol-types-BgWU6lhL.d.ts → symbol-types-BIQwfoAx.d.ts} +7 -1
- package/dist/typescript-mailbox-worker.js +2 -0
- package/dist/watch-server.js +2 -42
- package/docs/AGENT_GUIDE.md +13 -6
- package/docs/CLI_JSON_OUTPUT.md +110 -22
- package/docs/COMMAND_REFERENCE.md +88 -88
- package/docs/COMMITTED_RECORD_COMPATIBILITY.md +55 -18
- package/docs/DURABILITY.md +88 -38
- package/docs/INDEX_GENERATIONS.md +65 -19
- package/docs/MAILBOX_LIFECYCLE.md +28 -1
- package/docs/REINDEX_METADATA_COMPATIBILITY.md +18 -8
- package/docs/SECURITY_MODEL.md +31 -14
- package/docs/TELEMETRY_RETENTION.md +11 -4
- package/docs/WATCH_REFRESH_REQUESTS.md +34 -21
- package/docs/WINDOWS_SIDECAR_RELEASE.md +9 -4
- package/docs/analyzer-inventory.md +31 -22
- package/docs/analyzer-validation-ledger.md +8 -0
- package/docs/schemas/outcome-event-record.schema.json +57 -1
- package/docs/schemas/project-config.schema.json +82 -1
- package/docs/schemas/suppression-record.schema.json +84 -3
- package/package.json +5 -5
- package/skills/_shared/SKILL.md +2 -2
- package/skills/_shared/references/agent-contract-catalog.md +1 -1
- package/skills/_shared/references/detector-precision-and-diffgate.md +1 -1
- package/skills/scip-audit/SKILL.md +6 -6
- package/skills/scip-audit/references/claims.md +1 -1
- package/skills/scip-audit/references/cleanup.md +19 -20
- package/skills/scip-audit/references/directory.md +4 -4
- package/skills/scip-audit/references/frontend.md +10 -10
- package/skills/scip-audit/references/twin-drift.md +2 -2
- package/skills/scip-diagnose/references/debug.md +8 -8
- package/skills/scip-diagnose/references/root-cause.md +3 -3
- package/skills/scip-diagnose/references/triage.md +10 -10
- package/skills/scip-explore/SKILL.md +3 -3
- package/skills/scip-improve/SKILL.md +10 -10
- package/skills/scip-improve/references/cleanup-batches.md +3 -3
- package/skills/scip-improve/references/directory-moves.md +3 -3
- package/skills/scip-improve/references/doc-reconcile.md +1 -1
- package/skills/scip-improve/references/frontend-extraction.md +2 -2
- package/skills/scip-improve/references/twin-drift.md +3 -3
- package/skills/scip-plan/SKILL.md +2 -2
- package/skills/scip-plan/references/api-impact.md +5 -5
- package/skills/scip-plan/references/conductor.md +2 -2
- package/skills/scip-plan/references/hyper-optimization.md +1 -1
- package/skills/scip-query/SKILL.md +15 -5
- package/skills/scip-setup/references/bootstrap-workflow.md +7 -8
- package/skills/scip-setup/references/language-verification.md +2 -2
- package/skills/scip-setup/references/per-repo-triage.md +1 -1
- package/skills/scip-verify/SKILL.md +10 -10
- package/skills/scip-verify/references/calibrate-detectors.md +7 -7
- package/dist/chunk-2465DLHK.js +0 -3
- package/dist/chunk-2U3OLUNJ.js +0 -61
- package/dist/chunk-33XTHFKR.js +0 -2
- package/dist/chunk-43KC6EQZ.js +0 -2
- package/dist/chunk-47BU5Z4T.js +0 -8
- package/dist/chunk-4YTUWQ6M.js +0 -18
- package/dist/chunk-64MNV6AB.js +0 -8
- package/dist/chunk-67QRR5YC.js +0 -6
- package/dist/chunk-6GXYN7YA.js +0 -40
- package/dist/chunk-A2TNXAXO.js +0 -8
- package/dist/chunk-APMMR5Y2.js +0 -2
- package/dist/chunk-AZFUMCQB.js +0 -2
- package/dist/chunk-BNXICU42.js +0 -33
- package/dist/chunk-C5Q44Q5D.js +0 -3
- package/dist/chunk-DQGSM7RZ.js +0 -20
- package/dist/chunk-E2LAW7SL.js +0 -30
- package/dist/chunk-E4NFOAD4.js +0 -6
- package/dist/chunk-E5HNT4X2.js +0 -3
- package/dist/chunk-FD3HFKXR.js +0 -5
- package/dist/chunk-GHKEJTCE.js +0 -35
- package/dist/chunk-GLZTVKAB.js +0 -16
- package/dist/chunk-HIB452NU.js +0 -949
- package/dist/chunk-IF6FP6B2.js +0 -66
- package/dist/chunk-JORHF5AL.js +0 -108
- package/dist/chunk-KSGTULOS.js +0 -9
- package/dist/chunk-KXDJAG4N.js +0 -38
- package/dist/chunk-L4S2A7BV.js +0 -2
- package/dist/chunk-LP3ARJKF.js +0 -8
- package/dist/chunk-LSOR3LQG.js +0 -3
- package/dist/chunk-NTUMF2X3.js +0 -56
- package/dist/chunk-QOXBSI6G.js +0 -20
- package/dist/chunk-QXK6UUSM.js +0 -2
- package/dist/chunk-RA3AYNWP.js +0 -112
- package/dist/chunk-RJMDJR3A.js +0 -2
- package/dist/chunk-RLH5VUMG.js +0 -2
- package/dist/chunk-SMQWE25B.js +0 -3
- package/dist/chunk-TAVELHYR.js +0 -2
- package/dist/chunk-VAXNI5NE.js +0 -146
- package/dist/chunk-VVY2G5ET.js +0 -2
- package/dist/chunk-W3DBTGL4.js +0 -11
- package/dist/chunk-WANA4KAQ.js +0 -5
- package/dist/chunk-X4FR5BZF.js +0 -9
- package/dist/chunk-X6RKPDY7.js +0 -2
- package/dist/chunk-YCPASUCX.js +0 -2
- package/dist/chunk-ZL2OGDCD.js +0 -2
- package/dist/command-descriptors-ZW5J4ZEM.js +0 -631
- package/dist/direct-navigation-42YHQPOI.js +0 -3
|
@@ -23,6 +23,10 @@ The worktree cache keeps this internal layout:
|
|
|
23
23
|
meta.json compatibility mirror
|
|
24
24
|
.scipquery-generations/
|
|
25
25
|
state.json atomic current-generation pointer
|
|
26
|
+
gc.json last bounded-collection observation
|
|
27
|
+
gc.lock collection/reader-admission coordinator
|
|
28
|
+
readers/
|
|
29
|
+
<pid>-<token>.json live process-generation leases
|
|
26
30
|
<generation-sha256>/
|
|
27
31
|
manifest.json
|
|
28
32
|
index.db
|
|
@@ -30,11 +34,19 @@ The worktree cache keeps this internal layout:
|
|
|
30
34
|
meta.json
|
|
31
35
|
```
|
|
32
36
|
|
|
33
|
-
The files inside a named generation directory are immutable.
|
|
37
|
+
The files inside a named generation directory are immutable. Their final
|
|
38
|
+
read-only mode is applied before their final file synchronization, so the
|
|
39
|
+
persisted inode contains both the accepted bytes and the protection metadata.
|
|
40
|
+
The SHA-256
|
|
34
41
|
identity incorporates the database bytes, SCIP bytes when present, and the
|
|
35
42
|
generation-bearing metadata fields. `manifest.json` records the exact size and
|
|
36
43
|
digest of each stored artifact. `state.json` names the accepted directory and
|
|
37
44
|
is the only publication decision read by internal database consumers.
|
|
45
|
+
Opening a named generation authenticates the database, SCIP, and metadata
|
|
46
|
+
bytes against those digests; matching size alone is never sufficient. A
|
|
47
|
+
bounded process-local validation cache is keyed by manifest identity plus
|
|
48
|
+
stable device, inode, size, modification-time, and change-time evidence, so a
|
|
49
|
+
same-size mutation invalidates the cached proof and is rehashed.
|
|
38
50
|
|
|
39
51
|
The top-level files remain for the SCIP CLI, indexers, older scip-query
|
|
40
52
|
versions, and external inspection. They are derived mirrors, not the internal
|
|
@@ -48,18 +60,26 @@ Publication proceeds in this order:
|
|
|
48
60
|
|
|
49
61
|
1. Retain the previously published stable artifacts as an immutable
|
|
50
62
|
generation when upgrading a legacy cache.
|
|
51
|
-
2.
|
|
52
|
-
|
|
53
|
-
3.
|
|
54
|
-
directory
|
|
63
|
+
2. Durably establish `.scipquery-generations/` from its nearest existing
|
|
64
|
+
ancestor when this is the cache's first generation.
|
|
65
|
+
3. Copy-on-write clone or copy every accepted candidate artifact into a
|
|
66
|
+
private staging directory, apply its final read-only mode, and flush the
|
|
67
|
+
resulting inode.
|
|
68
|
+
4. Flush the manifest and staging namespace, rename the complete staging
|
|
69
|
+
directory into its content-derived identity, and flush the generation-root
|
|
55
70
|
directory entry.
|
|
56
|
-
|
|
71
|
+
5. Establish the versioned query layout after augmentation: add the
|
|
72
|
+
definition-only covering index, remove known redundant indexes only when
|
|
73
|
+
schema inspection proves a retained equivalent, and run `ANALYZE` so the
|
|
74
|
+
planner sees the final row distribution. Query-plan tests hold those
|
|
75
|
+
proofs.
|
|
76
|
+
6. Durably replace `state.json` so new internal readers select the complete
|
|
57
77
|
new directory.
|
|
58
|
-
|
|
78
|
+
7. Replace the three compatibility mirrors and durably record their file
|
|
59
79
|
identities for drift diagnostics.
|
|
60
80
|
|
|
61
|
-
A crash before step
|
|
62
|
-
step
|
|
81
|
+
A crash before step 6 leaves the prior pointer authoritative. A crash after
|
|
82
|
+
the pointer step leaves the new immutable generation authoritative even if one or more
|
|
63
83
|
compatibility mirrors are old. `scip-query status` and freshness inspection
|
|
64
84
|
report that mirror drift and a later refresh repairs it; database-backed
|
|
65
85
|
queries remain generation-consistent throughout.
|
|
@@ -70,6 +90,14 @@ and TypeScript semantic mailbox requests carry the handle identity, so a
|
|
|
70
90
|
continuation or numeric symbol identifier from an older generation is rejected
|
|
71
91
|
when a service has moved to a newer one.
|
|
72
92
|
|
|
93
|
+
Current metadata also records `sqliteLayoutVersion`. A current-version
|
|
94
|
+
metadata record that predates this field remains readable and can reuse its
|
|
95
|
+
language SCIP shards, but it cannot take the whole-SQLite unchanged fast path.
|
|
96
|
+
The next refresh applies query-layout maintenance to the stable mirror,
|
|
97
|
+
publishes a new immutable generation and current layout metadata, and does not
|
|
98
|
+
rerun unchanged language indexers. Later unchanged refreshes resume the
|
|
99
|
+
ordinary whole-generation reuse path.
|
|
100
|
+
|
|
73
101
|
Mailbox protocol version 3 additionally binds that generation identity into a
|
|
74
102
|
content-derived logical-operation key. The deterministic request ID lets a
|
|
75
103
|
retry join an already pending, inflight, or retained completed operation,
|
|
@@ -86,18 +114,36 @@ generation implementation, which did not name an immutable artifact set, also
|
|
|
86
114
|
uses this compatibility path. New publications upgrade either layout without
|
|
87
115
|
deleting the stable files.
|
|
88
116
|
|
|
89
|
-
Published local generation directories are retained
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
117
|
+
Published local generation directories are retained by a bounded,
|
|
118
|
+
reader-aware collector. Opening an immutable `ScipDatabase` first acquires the
|
|
119
|
+
generation GC lock, resolves the current pointer, and visibility-atomically
|
|
120
|
+
publishes a lease containing its random token, generation identity, PID, and
|
|
121
|
+
operating-system process-start identity when available. Closing the database
|
|
122
|
+
removes that exact lease idempotently.
|
|
123
|
+
|
|
124
|
+
Publication and collection use the same token-owned process lock. Collection
|
|
125
|
+
always protects the current generation, the named recovery generation, and
|
|
126
|
+
every live reader generation. It removes only oldest unprotected generations
|
|
127
|
+
until both default limits hold: at most eight retained generations and at most
|
|
128
|
+
2 GiB of logical artifact bytes. A lease whose recorded process instance is
|
|
129
|
+
provably dead is reclaimed. A malformed lease protects every generation and
|
|
130
|
+
defers deletion; uncertainty cannot authorize reclamation.
|
|
131
|
+
|
|
132
|
+
`gc.json` is a visibility-atomic diagnostic containing retained counts, logical
|
|
133
|
+
bytes, protected/readers counts, removed counts, limits, state, time, and any
|
|
134
|
+
reason. `scip-query status` reports that observation together with the current
|
|
135
|
+
retained set and oldest generation age. Collection failure does not invalidate
|
|
136
|
+
the accepted index; it remains explicit bounded-storage debt for the operator.
|
|
95
137
|
|
|
96
138
|
The repository-wide shared generation store is a separate cache layer. It
|
|
97
|
-
warms a worktree
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
139
|
+
warms a worktree from a complete content-addressed generation. Publication
|
|
140
|
+
flushes each final read-only artifact, the manifest, the staging namespace, the
|
|
141
|
+
rename into `generations/<identity>`, and `generations/` itself before
|
|
142
|
+
returning `directory-durable` on supported hosts. On a host without directory
|
|
143
|
+
sync, it returns `file-flushed`; readers still rehash every artifact and reject
|
|
144
|
+
an incomplete generation. The local publisher then creates the private
|
|
145
|
+
immutable directory and pointer described here. Later worktree writes cannot
|
|
146
|
+
mutate either the shared source or a retained local reader.
|
|
101
147
|
|
|
102
148
|
## Shared worktree lease invariant
|
|
103
149
|
|
|
@@ -122,7 +122,12 @@ boundaries.
|
|
|
122
122
|
A claim is a time-bounded service ownership record made real by renaming one
|
|
123
123
|
pending file into an owner-specific inflight directory. Rename is the
|
|
124
124
|
ownership compare-and-set: only the process whose rename succeeds owns that
|
|
125
|
-
file.
|
|
125
|
+
file. Before a first claim can remove the pending name, the service durably
|
|
126
|
+
establishes the fixed mailbox skeleton, creates the owner directory, and
|
|
127
|
+
flushes `inflight/` so the complete destination path survives. It then writes
|
|
128
|
+
the owner record, renames the request, flushes the source directory, and
|
|
129
|
+
flushes the owner directory in that order. The directory's owner record binds
|
|
130
|
+
the random owner ID to a PID and,
|
|
126
131
|
when the operating system exposes it, a process-start identity. A process-start
|
|
127
132
|
identity is the operating-system fact that distinguishes successive
|
|
128
133
|
executions occupying the same numeric PID slot.
|
|
@@ -147,6 +152,14 @@ answer-affecting operations are read-only or rebuildable, the response
|
|
|
147
152
|
identity is stable, and exclusive completion remains a final defense against
|
|
148
153
|
two observable answers.
|
|
149
154
|
|
|
155
|
+
Accepted admission and successful claims expose the achieved directory-sync
|
|
156
|
+
result. On POSIX hosts that complete every directory flush this is
|
|
157
|
+
`directory-durable`. When Node reports directory handles unsupported on
|
|
158
|
+
Windows, it is `file-flushed`: complete file bytes and process-crash recovery
|
|
159
|
+
remain, but the protocol does not upgrade that bounded result into a
|
|
160
|
+
machine-crash namespace claim. Any other directory synchronization error
|
|
161
|
+
throws instead of acknowledging the transition.
|
|
162
|
+
|
|
150
163
|
## Fairness and maintenance
|
|
151
164
|
|
|
152
165
|
Pending work is ordered by `enqueuedAtMs`, then stable request identity.
|
|
@@ -158,6 +171,19 @@ at most 64 removals or reclaims. Those caps are what let the watch and Rust
|
|
|
158
171
|
server loops regain control to update heartbeats, observe stop signals, and
|
|
159
172
|
run unrelated maintenance even when a mailbox was flooded.
|
|
160
173
|
|
|
174
|
+
The TypeScript watch service initializes its two mailbox layouts once after
|
|
175
|
+
acquiring service ownership. An empty poll reads the already-established
|
|
176
|
+
directories; it does not recreate or chmod the full layout. Consecutive empty
|
|
177
|
+
polls back off from 50 ms through 100 ms and 200 ms to a 250 ms ceiling. A poll
|
|
178
|
+
that processes work returns to a 10 ms drain interval. The Rust service uses
|
|
179
|
+
the same 10–250 ms adaptive range.
|
|
180
|
+
|
|
181
|
+
Deadline authority is re-evaluated per claimed request. A service reads its
|
|
182
|
+
clock immediately before starting each handler and again after the handler
|
|
183
|
+
returns. Therefore a request that expires while an earlier request runs is
|
|
184
|
+
rejected before execution, and an answer completed after its authoritative
|
|
185
|
+
deadline is not published as success.
|
|
186
|
+
|
|
161
187
|
Maintenance:
|
|
162
188
|
|
|
163
189
|
- reclaims expired inflight ownership only after the recorded process instance
|
|
@@ -190,6 +216,7 @@ window. Clock-domain rules for these records are documented in
|
|
|
190
216
|
Focused contract coverage lives in:
|
|
191
217
|
|
|
192
218
|
- `tests/storage/bounded-mailbox.test.ts`;
|
|
219
|
+
- `tests/storage/atomic-file-crash.test.ts`;
|
|
193
220
|
- `tests/semantic/typescript/typescript-session-mailbox.test.ts`;
|
|
194
221
|
- `tests/reindex/typescript-index-mailbox.test.ts`;
|
|
195
222
|
- `tests/semantic/rust/durable-session-protocol.test.ts`;
|
|
@@ -7,7 +7,7 @@ record rather than an authority by itself: a consumer still verifies the
|
|
|
7
7
|
database, SCIP companion, immutable-generation state, or current source
|
|
8
8
|
fingerprint required by its operation.
|
|
9
9
|
|
|
10
|
-
`src/domain/reindex-metadata.ts` is the
|
|
10
|
+
`src/domain/reindex-metadata.ts` is the domain decoding boundary. It
|
|
11
11
|
classifies an input as:
|
|
12
12
|
|
|
13
13
|
- `legacy`: a structurally valid version 2 record;
|
|
@@ -38,12 +38,20 @@ Future records are never rewritten.
|
|
|
38
38
|
|
|
39
39
|
Recognized versions validate `status`, optional timestamp,
|
|
40
40
|
requested/indexed language sets, skipped-language rows, SCIP companion state,
|
|
41
|
-
and v3 shard maps. A fingerprint
|
|
42
|
-
stable-generation compatibility,
|
|
43
|
-
|
|
44
|
-
lists contain unique names
|
|
41
|
+
the optional positive `sqliteLayoutVersion`, and v3 shard maps. A fingerprint
|
|
42
|
+
is an opaque JSON identity for evidence and stable-generation compatibility,
|
|
43
|
+
preserving the pre-decoder v2/v3 contract; freshness and publication
|
|
44
|
+
additionally require it to be an object. Language lists contain unique names
|
|
45
|
+
from the same
|
|
45
46
|
`SUPPORTED_LANGUAGES` catalog used by configuration.
|
|
46
47
|
|
|
48
|
+
The SQLite layout field is an additive v3 upgrade boundary rather than a wire
|
|
49
|
+
version migration. A v3 record without it remains queryable, evidence-usable,
|
|
50
|
+
and eligible for language-shard reuse. It is not eligible for whole-SQLite
|
|
51
|
+
unchanged reuse. The next refresh can therefore reuse unchanged language SCIP
|
|
52
|
+
shards, establish the current post-conversion indexes and planner statistics,
|
|
53
|
+
and publish a new generation without rerunning those indexers.
|
|
54
|
+
|
|
47
55
|
## Capability matrix
|
|
48
56
|
|
|
49
57
|
A capability is a named permission to interpret a decoded record for one
|
|
@@ -62,14 +70,16 @@ the same version while intentionally requiring different completeness.
|
|
|
62
70
|
Consumer-specific comparisons happen only after this matrix accepts the
|
|
63
71
|
record:
|
|
64
72
|
|
|
65
|
-
- freshness
|
|
66
|
-
|
|
73
|
+
- freshness compares a publishable fingerprint and sorted indexed languages
|
|
74
|
+
with current inputs; whole-SQLite unchanged reuse additionally requires the
|
|
75
|
+
current `sqliteLayoutVersion`;
|
|
67
76
|
- shared-generation publication additionally verifies the immutable artifact
|
|
68
77
|
set, project root, and database integrity;
|
|
69
78
|
- evidence and TypeScript semantic cache keys accept complete or partial
|
|
70
79
|
records and include status, so partial and complete results cannot collide;
|
|
71
80
|
- SQLite and TypeScript service generation identities use the same canonical
|
|
72
|
-
projection and reject records
|
|
81
|
+
projection, including `sqliteLayoutVersion` when present, and reject records
|
|
82
|
+
without stable-identity capability;
|
|
73
83
|
- per-language and per-project reuse compare the decoded v3 shard
|
|
74
84
|
fingerprints with current fingerprints and require the corresponding shard
|
|
75
85
|
file to exist.
|
package/docs/SECURITY_MODEL.md
CHANGED
|
@@ -76,20 +76,28 @@ Every command accepts:
|
|
|
76
76
|
```
|
|
77
77
|
|
|
78
78
|
The opaque cursor binds the command, working directory, non-pagination
|
|
79
|
-
arguments,
|
|
80
|
-
hash. The first invocation
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
79
|
+
arguments, immutable page number and size, private output snapshot, and
|
|
80
|
+
complete output hash. The first invocation records UTF-8 byte ranges and a
|
|
81
|
+
hash for each page while retaining only one page in memory. A continuation
|
|
82
|
+
reads and verifies only its own range instead of re-running the command or
|
|
83
|
+
rescanning the complete output.
|
|
84
|
+
|
|
85
|
+
One snapshot is limited to 32 million rendered characters, 64 MiB, and 32,768
|
|
86
|
+
pages. The current user's snapshot pool is limited to 32 snapshots and 256 MiB
|
|
87
|
+
under a process-identity-aware lock. Abandoned writers are reclaimed without
|
|
88
|
+
removing a live writer; complete snapshots expire after one hour and are
|
|
89
|
+
removed after their final page.
|
|
90
|
+
|
|
91
|
+
Run commands normally without selecting a page size. If human output is
|
|
92
|
+
oversized, the readable multiline page prints one `Continue exactly:` command;
|
|
93
|
+
run it unchanged until the transport-complete marker. That marker proves every
|
|
94
|
+
rendered character was retrieved; command coverage remains a separate claim.
|
|
95
|
+
Explicit paged `--json`
|
|
96
|
+
returns the versioned object envelope and must be followed until
|
|
97
|
+
`page.complete` is `true`. Do not pipe output through `head`, `tail`, or a
|
|
98
|
+
line-range `sed`; those programs discard data without creating a resumable
|
|
99
|
+
position. See [CLI JSON output](CLI_JSON_OUTPUT.md) and the [output-page
|
|
100
|
+
schema](schemas/cli-output-page.schema.json).
|
|
93
101
|
|
|
94
102
|
## Diff-gate process containment
|
|
95
103
|
|
|
@@ -105,6 +113,15 @@ parent terminates and reaps that child before releasing the lease. An operator
|
|
|
105
113
|
may set `SCIP_QUERY_DIFF_GATE_TIMEOUT_MS` to a positive millisecond value; the
|
|
106
114
|
runtime caps it at 10 minutes.
|
|
107
115
|
|
|
116
|
+
The parent creates a unique, private progress path and one-run token while it
|
|
117
|
+
owns the lease. The child visibility-atomically records the current gate phase
|
|
118
|
+
and detector immediately before and after each detector. A timed-out parent
|
|
119
|
+
accepts only the record carrying its token, reports the active detector or
|
|
120
|
+
phase plus the last completed detector, and removes the record before releasing
|
|
121
|
+
the lease. The progress record is diagnostic evidence, not authority: failure
|
|
122
|
+
to write it cannot turn a passing gate into a failure, and a stale or malformed
|
|
123
|
+
record cannot alter the gate result.
|
|
124
|
+
|
|
108
125
|
Outcome reconciliation rechecks at most one historical comparison base per
|
|
109
126
|
gate. Deferred bases remain open and the result reports their exact base and
|
|
110
127
|
finding counts, so accumulated event history cannot silently multiply one
|
|
@@ -58,10 +58,17 @@ mailbox-response, and release records use their own durable protocols.
|
|
|
58
58
|
|
|
59
59
|
Lock timeout and ownership-changed release are typed failures at the shared
|
|
60
60
|
helper boundary. The reindex-activity and affected-shadow production writers
|
|
61
|
-
remain best effort:
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
61
|
+
remain best effort: telemetry failure cannot change the authoritative reindex
|
|
62
|
+
result. A reindex-activity writer returns either `recorded` or `failed` with a
|
|
63
|
+
reason; reindex, foreground watch, and daemon watch surface that failure as a
|
|
64
|
+
warning or watch-state error rather than silently losing the observation.
|
|
65
|
+
|
|
66
|
+
A retained-set summary carries an activity-confidence state. `complete` means
|
|
67
|
+
every selected non-empty record decoded; `partial` means a valid subset was
|
|
68
|
+
used while exact invalid/skipped/read-error or incomplete-tail counts are
|
|
69
|
+
reported; `unavailable` means no reliable summary could be formed. The summary
|
|
70
|
+
also exposes records read and ignored partial-tail bytes, so consumers can
|
|
71
|
+
distinguish zero activity from missing evidence.
|
|
65
72
|
|
|
66
73
|
The regression suite forces:
|
|
67
74
|
|
|
@@ -21,10 +21,15 @@ A claim is an exclusive processing marker for that admitted request. A
|
|
|
21
21
|
completion is a durable receipt proving that the attempt associated with the
|
|
22
22
|
claim finished successfully, or that the request expired before execution.
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
On hosts that support directory synchronization, these records provide
|
|
25
|
+
at-least-once execution across process, operating-system, and machine failure
|
|
26
|
+
for an accepted, unexpired request. At-least-once execution means a crash after
|
|
27
|
+
reindex success but before the completion receipt may repeat the safe reindex
|
|
28
|
+
operation; it never means an acknowledged request can disappear. On Windows
|
|
29
|
+
hosts where Node cannot synchronize directory handles, admission reports
|
|
30
|
+
`achievedDurability: "file-flushed"` and `directorySync: "unsupported"`:
|
|
31
|
+
process-crash recovery remains intact, but the stronger machine-crash
|
|
32
|
+
namespace guarantee is not claimed.
|
|
28
33
|
|
|
29
34
|
## Layout
|
|
30
35
|
|
|
@@ -52,18 +57,22 @@ deadline remain authoritative.
|
|
|
52
57
|
|
|
53
58
|
## Lifecycle
|
|
54
59
|
|
|
55
|
-
1. The requester durably
|
|
56
|
-
|
|
60
|
+
1. The requester durably establishes the protocol root, `staging/`, and the
|
|
61
|
+
target record directory from the nearest existing ancestor.
|
|
62
|
+
2. It writes and flushes a complete staging record.
|
|
63
|
+
3. It exclusively links that record into `requests/`. A collision is a
|
|
57
64
|
duplicate, not an overwrite.
|
|
58
|
-
|
|
65
|
+
4. It flushes `requests/` before returning accepted and reports the achieved
|
|
66
|
+
platform guarantee.
|
|
67
|
+
5. The watch server, while holding the project watch lock, claims pending,
|
|
59
68
|
unexpired requests through exclusive claim records.
|
|
60
|
-
|
|
69
|
+
6. It deliberately coalesces one claimed batch into one `watch-demand`
|
|
61
70
|
refresh. Requests arriving while the watcher is busy remain pending.
|
|
62
|
-
|
|
71
|
+
7. A successful corresponding reindex writes every completion receipt before
|
|
63
72
|
removing any claim.
|
|
64
|
-
|
|
73
|
+
8. A failed reindex removes its claims without writing completion, making the
|
|
65
74
|
requests pending after a bounded retry delay.
|
|
66
|
-
|
|
75
|
+
9. A successor watch server removes predecessor claims only after acquiring
|
|
67
76
|
the same exclusive watch lock. Completed requests remain completed; all
|
|
68
77
|
other claimed requests become pending.
|
|
69
78
|
|
|
@@ -76,17 +85,21 @@ retention window.
|
|
|
76
85
|
|
|
77
86
|
## Crash and Concurrency Outcomes
|
|
78
87
|
|
|
79
|
-
| Boundary
|
|
80
|
-
|
|
|
81
|
-
| Crash before exclusive admission
|
|
88
|
+
| Boundary | Observable outcome |
|
|
89
|
+
| ------------------------------------------------ | --------------------------------------------------------------------------------------- |
|
|
90
|
+
| Crash before exclusive admission | No request was accepted; only staging may remain |
|
|
82
91
|
| 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
|
|
84
|
-
| Two callers use distinct keys
|
|
85
|
-
| Crash after claim before reindex
|
|
86
|
-
| Reindex failure
|
|
87
|
-
| Crash after reindex before completion
|
|
88
|
-
| Crash after completion before claim removal
|
|
89
|
-
| Activity writer races any row above
|
|
92
|
+
| Two callers use one idempotency key | Exactly one immutable request wins |
|
|
93
|
+
| Two callers use distinct keys | Both requests remain independently visible and may be coalesced deliberately |
|
|
94
|
+
| Crash after claim before reindex | Successor clears the stale claim and retries the request |
|
|
95
|
+
| Reindex failure | Claim is released; request remains pending |
|
|
96
|
+
| Crash after reindex before completion | Request may execute again; it is never lost |
|
|
97
|
+
| Crash after completion before claim removal | Completion prevents replay; successor removes the obsolete claim |
|
|
98
|
+
| Activity writer races any row above | Activity changes only `watch-activity.json` and cannot modify request state |
|
|
99
|
+
|
|
100
|
+
The first two rows are machine-crash claims only when admission returned
|
|
101
|
+
`directory-durable`. A `file-flushed` result is explicit evidence that the
|
|
102
|
+
host could not commit the complete namespace frontier.
|
|
90
103
|
|
|
91
104
|
## Compatibility and Diagnostics
|
|
92
105
|
|
|
@@ -234,10 +234,15 @@ both coordinates and repairs only the absent intended package.
|
|
|
234
234
|
The path is stable for one pair of package coordinates. Repacking different
|
|
235
235
|
bytes, using a different source revision, or selecting a different registry
|
|
236
236
|
under those same versions therefore collides with the existing record and
|
|
237
|
-
stops before registry work. The record is atomically replaced
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
237
|
+
stops before registry work. The record is atomically replaced while the
|
|
238
|
+
release lock is owned. The coordinator reports `directory-durable` when the
|
|
239
|
+
host synchronizes the containing directory and
|
|
240
|
+
`file-flushed; directory sync unsupported` when Windows exposes only the
|
|
241
|
+
bounded file guarantee; a real synchronization failure aborts the run. It is
|
|
242
|
+
intentionally ignored by Git and omitted from the npm package: it is local
|
|
243
|
+
recovery state, not portable release authority. Fresh registry observation,
|
|
244
|
+
immutable npm versions, and exact package identity remain the external safety
|
|
245
|
+
authority regardless of the local result. The normative shape is
|
|
241
246
|
`docs/schemas/npm-release-state.schema.json`.
|
|
242
247
|
|
|
243
248
|
Current-schema additive fields are tolerated. Malformed JSON, a wrong
|
|
@@ -52,7 +52,7 @@ The declared-coupling config has been refreshed after the inventory surfaced old
|
|
|
52
52
|
| `wrapper-candidates` | Small production callables with one real external caller, caller fan-in, and boundary-token evidence | Hygiene | Contextual signal, sometimes direct | Single-caller wrappers can be needless indirection, but may also be names, domain/lifecycle boundaries, test seams, or API shaping. Boundary evidence discounts those without hiding them. |
|
|
53
53
|
| `passthrough-candidates` | Small production callables with exactly one callee, literal pass-through body, runtime-boundary evidence, public-facade evidence, action tier, recommendation, and score count | Hygiene, with `scoreCount` discount | Direct when no boundary or public-facade evidence is present; contextual signal when either exists | Body-shape gate is real. Boundary evidence distinguishes adapter, provider, public, capability, transport, lifecycle, access-policy, and facade-shaped forwarders; public-facade evidence separately identifies package-public or rooted exported passthroughs. |
|
|
54
54
|
| `stale-abstractions` | Type-like definitions, real consumers, barrel consumers, transitive reachability, definer usage, confidence, staleness kind, action tier, and recommendation | Hygiene | Direct for unused abstractions; contextual signal for one-consumer ownership rows | `0 consumers` is direct repair. `1 consumer` is contextual, including high-confidence misplaced types, because the repair may be move, inline, keep, or document as public contract. |
|
|
55
|
-
| `drift` | File dep graph, symbol ref graph, semantic/source import usage, project-owned architecture report, sibling patterns, action tier, policy basis, recommendation | Hygiene | Split by kind | `unused-import` and grouped `architecture-violation` rows are direct repair. `pattern-deviation` rows are contextual signals and remain excluded from health scoring. Undeclared boundary edges, reciprocity, and connected groups appear only in architecture context.
|
|
55
|
+
| `drift` | File dep graph, symbol ref graph, semantic/source import usage, project-owned architecture report, sibling patterns, action tier, policy basis, recommendation | Hygiene | Split by kind | `unused-import` and grouped `architecture-violation` rows are direct repair. `pattern-deviation` rows are contextual signals and remain excluded from health scoring. Undeclared boundary edges, reciprocity, and connected groups appear only in architecture context. |
|
|
56
56
|
| `complexity-hotspots` | Production callable LOC, fan-in, fan-out, callee count | Risk | Direct repair pressure | Complexity pressure usually means refactor, but the current score is structural, not cyclomatic. It should be separate from branch-count complexity. |
|
|
57
57
|
| `co-change` / hidden coupling | Git co-change pairs, dependency edges, declared couplings, file noise filters, partner-class labels, declared-coupling suggestions, commit scope, recency context, commit-subject context, and score-weighted count | Risk, weighted by history strength | Contextual signal | Strong evidence that coordination may be missing, but not proof that extraction or unification is correct. Partner classes, history context, subject context, and score weighting now separate contract-like focused current pairs from broad, stale, or unlabeled history before suggesting declared coupling. |
|
|
58
58
|
| Suppression inventory | `scip-query: ignore-*` comments in source, plus structured `.scipquery.json` suppressions | Evidence quality axis | Meta signal | Useful precision feedback. High suppressions should reduce trust or weight for that detector family. Structured file-scoped suppressions now validate path freshness. |
|
|
@@ -85,19 +85,19 @@ The declared-coupling config has been refreshed after the inventory surfaced old
|
|
|
85
85
|
|
|
86
86
|
## Graph, Risk, and Planning Analyzers
|
|
87
87
|
|
|
88
|
-
| Analyzer | Evidence examined
|
|
89
|
-
| -------------------- |
|
|
90
|
-
| `affected` | Transitive symbol impact from a changed symbol
|
|
91
|
-
| `change-surface` | Definitions in a file plus external consumer counts
|
|
92
|
-
| `plan-context` | Trace, references, call graph, dataflow, deps/rdeps, surface, affected, change-surface, complexity, history
|
|
93
|
-
| `bottlenecks` | Callable fan-in times fan-out, risk kind, action tier, evidence reasons, recommendation
|
|
94
|
-
| `hotspots` | Most referenced symbols
|
|
95
|
-
| `fan-in` / `fan-out` | Reference counts into symbols or out of files
|
|
96
|
-
| `coupling` | Shared symbols between two files or top coupled pairs, coupling kind, action tier, evidence reasons, recommendation
|
|
97
|
-
| `architecture` | Project-owned boundary paths and dependency rules applied to resolved import and re-export edges, with mapping coverage, policy-row coverage, edge breadth, reciprocity, and SCCs | Split by evidence | Forbidden edges, required-but-missing policy rows, cycles under `requireAcyclic`, and boundaries hiding an internal sub-directory cycle under `requireResolvedBoundaries` are direct policy findings. Unmapped files, reciprocity, and advisory cycles remain report-only signals.
|
|
98
|
-
| `deep-chains` | Longest dependency chains after SCC condensation, suffix de-duplication, chain kind, action tier, evidence reasons, recommendation
|
|
99
|
-
| `complexity` | Branch count, cyclomatic estimate, callee count, fan-in, fan-out for one symbol
|
|
100
|
-
| `self-audit` | Cheap evidence paths checked against TypeScript compiler oracle
|
|
88
|
+
| Analyzer | Evidence examined | Recommended role | Evaluation |
|
|
89
|
+
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
90
|
+
| `affected` | Transitive symbol impact from a changed symbol | Support analysis | Blast-radius map, not smell. |
|
|
91
|
+
| `change-surface` | Definitions in a file plus external consumer counts | Support/risk analysis | Pre-change risk briefing. Useful for planning and score context, not a repair. |
|
|
92
|
+
| `plan-context` | Trace, references, call graph, dataflow, deps/rdeps, surface, affected, change-surface, complexity, history | Support analysis | Composite planning bundle. It should not contribute smell score directly. |
|
|
93
|
+
| `bottlenecks` | Callable fan-in times fan-out, risk kind, action tier, evidence reasons, recommendation | Contextual signal | Good risk hotspot, not automatic refactor. Output now states `signal` and frames central code as coordination risk rather than repair proof. |
|
|
94
|
+
| `hotspots` | Most referenced symbols | Support/contextual signal | Identifies choke points. Not a smell alone. |
|
|
95
|
+
| `fan-in` / `fan-out` | Reference counts into symbols or out of files | Support analysis | Raw graph metrics. |
|
|
96
|
+
| `coupling` | Shared symbols between two files or top coupled pairs, coupling kind, action tier, evidence reasons, recommendation | Contextual signal | May reveal boundary problems, but shared symbols can be intended. Output now makes the coordination-pressure interpretation explicit. |
|
|
97
|
+
| `architecture` | Project-owned boundary paths and dependency rules applied to resolved import and re-export edges, with mapping coverage, policy-row coverage, edge breadth, reciprocity, and SCCs | Split by evidence | Forbidden edges, required-but-missing policy rows, cycles under `requireAcyclic`, and boundaries hiding an internal sub-directory cycle under `requireResolvedBoundaries` are direct policy findings. Unmapped files, reciprocity, and advisory cycles remain report-only signals. |
|
|
98
|
+
| `deep-chains` | Longest dependency chains after SCC condensation, suffix de-duplication, chain kind, action tier, evidence reasons, recommendation | Contextual signal | Long chains imply propagation risk, but action depends on layers and ownership. Strict suffix duplicates are now removed from top results. |
|
|
99
|
+
| `complexity` | Branch count, cyclomatic estimate, callee count, fan-in, fan-out for one symbol | Direct repair pressure | This is closer to the user-specified "cyclomatic complexity" analyzer than `complexity-hotspots`. Should score strongly when branches/cyclomatic exceed thresholds. |
|
|
100
|
+
| `self-audit` | Cheap evidence paths checked against TypeScript compiler oracle | Meta analysis | Measures analyzer accuracy. Should guide trust/weight, not code health directly. |
|
|
101
101
|
|
|
102
102
|
## Navigation and Evidence Providers
|
|
103
103
|
|
|
@@ -123,14 +123,14 @@ The codebase already avoids some duplicate analysis by sharing kernels:
|
|
|
123
123
|
|
|
124
124
|
The remaining conceptual overlap is mostly healthy, but needs product labels:
|
|
125
125
|
|
|
126
|
-
| Overlap family | Members | Same analysis or distinct? | Recommendation
|
|
127
|
-
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- |
|
|
128
|
-
| Deletability | `dead`, `isolated`, `cleanup-plan`, `redundant-reexports`, `new-dead` | Distinct evidence scopes over the same core question: can this be removed or must it be wired? | Model as one "deletability" action family with subtypes and confidence.
|
|
129
|
-
| Similarity and reuse | `similar`, `similar-files`, `similar-chains`, `similar-signatures`, `convergence`, React/Vue duplicates, `recent-duplicates`, `echo` | Distinct evidence bases. The risk is UX confusion, not implementation duplication. | Keep separate, but expose basis, action tier, and root-cause groups where pairwise rows repeat.
|
|
130
|
-
| Extraction pressure | `extract-candidates`, React/Vue behavior candidates, large component/view pressure, `incomplete-migration` | Different stages: discover seam, detect duplicated behavior, detect excessive size, catch unfinished migration. | Score unfinished migrations higher than discovery leads.
|
|
131
|
-
| Indirection | `wrapper-candidates`, `passthrough-candidates`, `stale-abstractions` | Related but not the same: single caller, literal forwarding, low-consumer types. | Passthrough and wrapper rows now split by boundary evidence; stale should split by confidence.
|
|
132
|
-
| Architecture/history drift | `architecture`, `drift`, `doc-drift`, `co-change`, `co-change-partner`, `doc-reference` | Same broad problem of things moving out of sync, but sources differ. | Explicit architecture rules are direct; co-change remains signal; doc-reference strength depends on citation kind.
|
|
133
|
-
| Graph risk | `architecture`, `fan-in`, `fan-out`, `hotspots`, `bottlenecks`, `coupling`, `deep-chains`, `change-surface`, `affected` | Mostly layered views of graph pressure. | Treat inferred graph shape as support/context; declared forbidden edges and acyclicity violations are direct policy disagreements.
|
|
126
|
+
| Overlap family | Members | Same analysis or distinct? | Recommendation |
|
|
127
|
+
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
|
|
128
|
+
| Deletability | `dead`, `isolated`, `cleanup-plan`, `redundant-reexports`, `new-dead` | Distinct evidence scopes over the same core question: can this be removed or must it be wired? | Model as one "deletability" action family with subtypes and confidence. |
|
|
129
|
+
| Similarity and reuse | `similar`, `similar-files`, `similar-chains`, `similar-signatures`, `convergence`, React/Vue duplicates, `recent-duplicates`, `echo` | Distinct evidence bases. The risk is UX confusion, not implementation duplication. | Keep separate, but expose basis, action tier, and root-cause groups where pairwise rows repeat. |
|
|
130
|
+
| Extraction pressure | `extract-candidates`, React/Vue behavior candidates, large component/view pressure, `incomplete-migration` | Different stages: discover seam, detect duplicated behavior, detect excessive size, catch unfinished migration. | Score unfinished migrations higher than discovery leads. |
|
|
131
|
+
| Indirection | `wrapper-candidates`, `passthrough-candidates`, `stale-abstractions` | Related but not the same: single caller, literal forwarding, low-consumer types. | Passthrough and wrapper rows now split by boundary evidence; stale should split by confidence. |
|
|
132
|
+
| Architecture/history drift | `architecture`, `drift`, `doc-drift`, `co-change`, `co-change-partner`, `doc-reference` | Same broad problem of things moving out of sync, but sources differ. | Explicit architecture rules are direct; co-change remains signal; doc-reference strength depends on citation kind. |
|
|
133
|
+
| Graph risk | `architecture`, `fan-in`, `fan-out`, `hotspots`, `bottlenecks`, `coupling`, `deep-chains`, `change-surface`, `affected` | Mostly layered views of graph pressure. | Treat inferred graph shape as support/context; declared forbidden edges and acyclicity violations are direct policy disagreements. |
|
|
134
134
|
|
|
135
135
|
## Score Model Implications
|
|
136
136
|
|
|
@@ -272,3 +272,12 @@ boundary paths and dependency rows to import-only file edges, retaining edge
|
|
|
272
272
|
breadth and representative files. It is report-only in this slice: inferred
|
|
273
273
|
reciprocity and strongly connected groups do not affect health or diff-gate,
|
|
274
274
|
and an unconfigured repository receives no implicit source-layer policy.
|
|
275
|
+
|
|
276
|
+
## 2026-07-26 Diff-Gate Progress Follow-Up
|
|
277
|
+
|
|
278
|
+
The `src/queries/impact/diff-gate.ts` citation remains accurate after bounded
|
|
279
|
+
progress reporting was added. `DIFF_GATE_CHECKS` is still the canonical public
|
|
280
|
+
check list and `diffGate()` still owns check execution; the check-name type and
|
|
281
|
+
process-local observer contract now live in `queries/internal`, while the
|
|
282
|
+
impact query emits start and completion notifications around each executed
|
|
283
|
+
check.
|
|
@@ -506,3 +506,11 @@ still overriding it with the content-aware version. And the report described a
|
|
|
506
506
|
single-import edge as "incidental rather than load-bearing" — the graph
|
|
507
507
|
establishes edge breadth, not importance, so it now reports the measurement and
|
|
508
508
|
says explicitly that breadth alone settles nothing.
|
|
509
|
+
|
|
510
|
+
## 2026-07-26 Diff-Gate Progress Follow-Up
|
|
511
|
+
|
|
512
|
+
The change-time gate and check-list citations remain accurate. Progress
|
|
513
|
+
instrumentation does not add, remove, or reorder any `DIFF_GATE_CHECKS` entry:
|
|
514
|
+
`diffGate()` emits process-local start and completion notifications around
|
|
515
|
+
each check, while isolated CLI execution turns those notifications into
|
|
516
|
+
diagnostic progress and active-detector timeout evidence.
|