@remnic/core 9.69.37 → 9.69.39
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/dist/access-admin-ops-surface.d.ts +14 -12
- package/dist/access-admin-ops-surface.js +86 -83
- package/dist/access-authorization-probe.d.ts +14 -12
- package/dist/access-authorization-probe.js +87 -84
- package/dist/access-boundary.d.ts +14 -12
- package/dist/access-boundary.js +86 -83
- package/dist/access-cli.js +197 -191
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +2 -1
- package/dist/access-extraction-force-flush.d.ts +14 -12
- package/dist/access-extraction-force-flush.js +86 -83
- package/dist/access-health-types.d.ts +2 -1
- package/dist/access-http-briefing.d.ts +14 -12
- package/dist/access-http-briefing.js +87 -84
- package/dist/access-http-lcm-compaction.d.ts +14 -12
- package/dist/access-http-lifecycle-flush.d.ts +14 -12
- package/dist/access-http-offline-stream.d.ts +14 -12
- package/dist/access-http-query.d.ts +3 -2
- package/dist/access-http-query.js +88 -85
- package/dist/access-http.d.ts +15 -13
- package/dist/access-http.js +108 -105
- package/dist/access-identity-continuity-surface.d.ts +12 -10
- package/dist/access-identity-continuity-surface.js +86 -83
- package/dist/access-lcm-surface.d.ts +14 -12
- package/dist/access-lcm-surface.js +86 -83
- package/dist/access-mcp.d.ts +14 -12
- package/dist/access-mcp.js +97 -94
- package/dist/access-memory-search-fanout.d.ts +3 -2
- package/dist/{access-namespace-preflight-CV5cHujx.d.ts → access-namespace-preflight-DY4z6L5X.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +4 -3
- package/dist/access-namespace-preflight.js +86 -83
- package/dist/access-observe-transcript.d.ts +12 -10
- package/dist/access-observe-write-category.d.ts +37 -0
- package/dist/access-observe-write-category.js +34 -0
- package/dist/access-observe-write-surface.d.ts +17 -15
- package/dist/access-observe-write-surface.js +86 -83
- package/dist/access-offline-manifest.d.ts +12 -10
- package/dist/access-offline-manifest.js +15 -15
- package/dist/access-operations-batch.js +91 -88
- package/dist/access-operations.d.ts +17 -30
- package/dist/access-operations.js +96 -93
- package/dist/access-recall-concurrency.d.ts +14 -12
- package/dist/access-recall-concurrency.js +86 -83
- package/dist/access-recall-response.d.ts +14 -12
- package/dist/access-recall-response.js +86 -83
- package/dist/access-recall-surface.d.ts +14 -12
- package/dist/access-recall-surface.js +86 -83
- package/dist/access-schema.d.ts +210 -107
- package/dist/access-schema.js +9 -15
- package/dist/{access-service-DwHC7lcV.d.ts → access-service-MY4bsr_Q.d.ts} +101 -77
- package/dist/access-service-helpers.d.ts +14 -12
- package/dist/access-service.d.ts +14 -12
- package/dist/access-service.js +86 -83
- package/dist/access-surface-catalog.d.ts +14 -12
- package/dist/access-surface-catalog.js +88 -85
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +5 -3
- package/dist/action-confidence.d.ts +2 -1
- package/dist/active-memory-bridge.d.ts +2 -1
- package/dist/active-memory-bridge.js +3 -3
- package/dist/active-recall.d.ts +2 -1
- package/dist/active-recall.js +20 -17
- package/dist/active-recall.js.map +1 -1
- package/dist/activity/digest.d.ts +2 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/ambient-provenance.d.ts +2 -1
- package/dist/artifact-search.d.ts +2 -1
- package/dist/{auto-sync-FSRJDU63.js → auto-sync-RP4C6ZPF.js} +11 -9
- package/dist/{auto-sync-FSRJDU63.js.map → auto-sync-RP4C6ZPF.js.map} +1 -1
- package/dist/background-generation-config.d.ts +10 -0
- package/dist/background-generation-config.js +9 -0
- package/dist/background-generation.d.ts +25 -0
- package/dist/background-generation.js +11 -0
- package/dist/behavior-learner.d.ts +2 -1
- package/dist/behavior-signals.d.ts +2 -1
- package/dist/bootstrap.d.ts +12 -10
- package/dist/briefing-window.d.ts +3 -2
- package/dist/briefing.d.ts +3 -2
- package/dist/briefing.js +27 -26
- package/dist/buffer-surprise-report.d.ts +2 -1
- package/dist/buffer-turn-helpers.d.ts +2 -1
- package/dist/buffer.d.ts +3 -2
- package/dist/buffer.js +8 -8
- package/dist/bulk-import/index.d.ts +4 -3
- package/dist/calibration.d.ts +3 -1
- package/dist/calibration.js +4 -2
- package/dist/calibration.js.map +1 -1
- package/dist/capabilities.d.ts +2 -1
- package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-7FJQINUR.js} +2 -2
- package/dist/{capsule-merge-ZCXUPLNJ.js → capsule-merge-IPG4IOFP.js} +2 -2
- package/dist/{catalog-Cl4H8N89.d.ts → catalog-CW87xGx8.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +2 -1
- package/dist/causal-behavior.js +2 -2
- package/dist/causal-chain.js +2 -2
- package/dist/causal-consolidation.d.ts +2 -1
- package/dist/causal-consolidation.js +29 -28
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-retrieval.js +2 -2
- package/dist/causal-trajectory-graph.d.ts +2 -1
- package/dist/causal-trajectory-graph.js +2 -2
- package/dist/causal-trajectory.js +1 -1
- package/dist/{chunk-YHU5XUF4.js → chunk-27MKMTBY.js} +2 -2
- package/dist/{chunk-TK4FHQRN.js → chunk-2J3V5QEO.js} +4 -4
- package/dist/{chunk-BXLOS5AJ.js → chunk-2NLLXCJG.js} +2 -2
- package/dist/chunk-2QG4SLZI.js +44 -0
- package/dist/chunk-2QG4SLZI.js.map +1 -0
- package/dist/{chunk-TFRDUD3M.js → chunk-2ZTDRNCS.js} +2 -2
- package/dist/{chunk-PWPIERBM.js → chunk-37CAEC7E.js} +4 -4
- package/dist/{chunk-X7BCM2NA.js → chunk-3EKVN2OP.js} +2 -2
- package/dist/{chunk-S2ULTQZR.js → chunk-3N3PBBEH.js} +2 -2
- package/dist/{chunk-XCF3SFHD.js → chunk-3NPNBVFR.js} +2 -2
- package/dist/{chunk-JO5TQAKW.js → chunk-4BCHFSC7.js} +3 -3
- package/dist/{chunk-Q6D7EUSQ.js → chunk-4JVQRFZD.js} +10 -10
- package/dist/{chunk-YEDVOYL2.js → chunk-4RX5O34R.js} +2 -2
- package/dist/{chunk-JMPYZJQN.js → chunk-4RZLTZVM.js} +4 -4
- package/dist/{chunk-Q7JK6YEB.js → chunk-54NX5EG4.js} +2 -2
- package/dist/{chunk-GWK7FEUL.js → chunk-5FAGCOZD.js} +4 -4
- package/dist/{chunk-2PUE5P7C.js → chunk-5N4MZLEH.js} +5 -5
- package/dist/{chunk-B2YKTE7P.js → chunk-5SPCMAUC.js} +10 -10
- package/dist/{chunk-3OHISDDW.js → chunk-5U7K4W6K.js} +2 -2
- package/dist/{chunk-CYEMS2PG.js → chunk-5YCNDC3C.js} +3 -3
- package/dist/{chunk-PAAJWQH5.js → chunk-62D2PAAM.js} +4 -4
- package/dist/{chunk-52II7PB6.js → chunk-645WOU5I.js} +4 -4
- package/dist/chunk-6AGWBKQU.js +94 -0
- package/dist/chunk-6AGWBKQU.js.map +1 -0
- package/dist/{chunk-326KUXIR.js → chunk-6EHM2AV7.js} +6 -6
- package/dist/{chunk-YM7YN37H.js → chunk-6ET2VII7.js} +2 -2
- package/dist/chunk-6H2G7RFT.js +58 -0
- package/dist/chunk-6H2G7RFT.js.map +1 -0
- package/dist/{chunk-A2YQL2FF.js → chunk-6P4REYKL.js} +5 -5
- package/dist/{chunk-7RKBPXY6.js → chunk-6YAIN5XJ.js} +2 -2
- package/dist/{chunk-2L5FSNPC.js → chunk-A7GQBJP5.js} +10 -10
- package/dist/{chunk-UYVXIY6C.js → chunk-AAZEKXUP.js} +2 -2
- package/dist/{chunk-JR6PP7UM.js → chunk-ACY4ZPF7.js} +28 -2
- package/dist/chunk-ACY4ZPF7.js.map +1 -0
- package/dist/{chunk-IQZ6ISFX.js → chunk-AECJY3GJ.js} +2 -2
- package/dist/{chunk-76DRU7C4.js → chunk-AENM6GKU.js} +2 -2
- package/dist/{chunk-KTRXQQFN.js → chunk-B36GUU6T.js} +4 -4
- package/dist/{chunk-TLHNF6GA.js → chunk-BV4ZKIZH.js} +1 -1
- package/dist/{chunk-ZWEZXVYH.js → chunk-CEO4DONG.js} +2 -2
- package/dist/chunk-CWTCMZGE.js +858 -0
- package/dist/chunk-CWTCMZGE.js.map +1 -0
- package/dist/{chunk-ZEPVWLCN.js → chunk-CZTPU65V.js} +25 -25
- package/dist/{chunk-TRU6JBOI.js → chunk-D545Z7UH.js} +3 -3
- package/dist/{chunk-6E5GYDIE.js → chunk-DGS34QSY.js} +2 -2
- package/dist/{chunk-65RENJGB.js → chunk-E2AWJ7KQ.js} +8 -4
- package/dist/chunk-E2AWJ7KQ.js.map +1 -0
- package/dist/{chunk-6Z3WW2MW.js → chunk-ENBPQEVU.js} +3 -3
- package/dist/{chunk-DOKKRZPH.js → chunk-EYKIDK33.js} +21 -19
- package/dist/chunk-EYKIDK33.js.map +1 -0
- package/dist/{chunk-PNEDMJ53.js → chunk-F4EHXVP7.js} +2 -2
- package/dist/{chunk-JPKZTCWZ.js → chunk-FNHLI2RE.js} +3 -3
- package/dist/{chunk-D2DIYEFW.js → chunk-FWWWUPOE.js} +12 -36
- package/dist/chunk-FWWWUPOE.js.map +1 -0
- package/dist/{chunk-M3MYMWXG.js → chunk-FXHOZGSE.js} +2 -2
- package/dist/{chunk-SAKA6PPL.js → chunk-GAS7KYC7.js} +5 -5
- package/dist/{chunk-LSLCFCCQ.js → chunk-GDYU6VF4.js} +1 -1
- package/dist/chunk-GDYU6VF4.js.map +1 -0
- package/dist/{chunk-2AR5JFD7.js → chunk-GG5FHZJJ.js} +6 -6
- package/dist/{chunk-WS3WNLST.js → chunk-GI4ZBWPQ.js} +3 -3
- package/dist/{chunk-JYR4LH76.js → chunk-GMIQV6DD.js} +2 -2
- package/dist/{chunk-WIKO4SCR.js → chunk-H3TKENU4.js} +5 -5
- package/dist/{chunk-ZLN7AROH.js → chunk-HIP6DKJJ.js} +5 -5
- package/dist/{chunk-SF6RFI5Z.js → chunk-HWLIMQE2.js} +2 -2
- package/dist/{chunk-JZYECQWN.js → chunk-IL6ODG6M.js} +2 -2
- package/dist/{chunk-GNR6YEWZ.js → chunk-IQEJIOEU.js} +6 -6
- package/dist/{chunk-BICNRVEC.js → chunk-IWO6QXWJ.js} +2 -2
- package/dist/{chunk-RN3MVLW3.js → chunk-IYKZJVL5.js} +1 -1
- package/dist/chunk-IYKZJVL5.js.map +1 -0
- package/dist/{chunk-42DJ235G.js → chunk-J272ODKJ.js} +2 -2
- package/dist/{chunk-R3TLVTWW.js → chunk-JDX2OA4R.js} +3 -3
- package/dist/{chunk-G5MO3VQA.js → chunk-JKKII6GX.js} +2 -2
- package/dist/{chunk-L5OXE4PX.js → chunk-JTQR6L2N.js} +3 -3
- package/dist/{chunk-VDX2J7OX.js → chunk-KQAFEZQX.js} +2 -2
- package/dist/{chunk-AKE4GGQ3.js → chunk-KQW3YGEN.js} +2 -2
- package/dist/{chunk-LMMQKZK3.js → chunk-L63GFNKL.js} +1 -1
- package/dist/{chunk-BRZWWUCJ.js → chunk-LMLGBG6H.js} +2 -2
- package/dist/{chunk-3IXB77DA.js → chunk-LPYYY4AP.js} +318 -278
- package/dist/chunk-LPYYY4AP.js.map +1 -0
- package/dist/{chunk-YEN4TREG.js → chunk-LQNRVPTV.js} +54 -567
- package/dist/chunk-LQNRVPTV.js.map +1 -0
- package/dist/{chunk-CQ7SSBO4.js → chunk-M6HBPLBA.js} +2 -2
- package/dist/chunk-MCRVQ5YQ.js +14 -0
- package/dist/chunk-MCRVQ5YQ.js.map +1 -0
- package/dist/{chunk-3YMDY3ZF.js → chunk-MUTVRKKY.js} +16 -16
- package/dist/{chunk-FCFAYMTU.js → chunk-NXGSONWM.js} +2 -2
- package/dist/{chunk-4WGAMREC.js → chunk-O4M4BDIJ.js} +2 -2
- package/dist/{chunk-5SYI2F47.js → chunk-O76F5QPP.js} +2 -2
- package/dist/{chunk-SROIT6QY.js → chunk-OPBFP4TF.js} +28 -11
- package/dist/chunk-OPBFP4TF.js.map +1 -0
- package/dist/{chunk-7MJBKZPU.js → chunk-P4ZAEYKG.js} +68 -34
- package/dist/chunk-P4ZAEYKG.js.map +1 -0
- package/dist/{chunk-57GDHV2D.js → chunk-PCOVEDPK.js} +6 -6
- package/dist/{chunk-PPTOAHTZ.js → chunk-PGAB2V53.js} +2 -2
- package/dist/{chunk-HHDTBYDJ.js → chunk-Q432REND.js} +2 -2
- package/dist/{chunk-XAITGGX5.js → chunk-Q4AUIFUA.js} +4 -4
- package/dist/{chunk-5LLQAUMI.js → chunk-Q7CLGFA7.js} +3 -3
- package/dist/{chunk-KUK56OPR.js → chunk-QHT7MOUF.js} +12 -12
- package/dist/{chunk-W6IJMWTZ.js → chunk-QTQ6XKGT.js} +4 -4
- package/dist/{chunk-FLLORID2.js → chunk-RLJHJQUY.js} +9 -9
- package/dist/{chunk-353KGBKY.js → chunk-RW4QNB4J.js} +4 -4
- package/dist/{chunk-GWQVMKUJ.js → chunk-SCXURCVT.js} +3 -3
- package/dist/{chunk-FQXJAC3T.js → chunk-SGUDMW2K.js} +4 -4
- package/dist/{chunk-LSDEIZ76.js → chunk-TA4C3XB7.js} +6 -6
- package/dist/{chunk-YIZ2EUUL.js → chunk-TNZNSMVJ.js} +94 -94
- package/dist/{chunk-CIYUWSMZ.js → chunk-TRLOFIQC.js} +2 -2
- package/dist/{chunk-TL7NLM2L.js → chunk-TSP5WH72.js} +2 -2
- package/dist/{chunk-3K6UFW5B.js → chunk-UHRZ324M.js} +8 -8
- package/dist/{chunk-JLXWRQNR.js → chunk-UZEHHXYC.js} +170 -167
- package/dist/chunk-UZEHHXYC.js.map +1 -0
- package/dist/{chunk-A5UQ52YQ.js → chunk-UZZ7SQT3.js} +5 -5
- package/dist/{chunk-GHX5PNXW.js → chunk-VBSNUH4J.js} +2 -2
- package/dist/{chunk-MR6LQVZ5.js → chunk-VJIE4D2I.js} +3 -3
- package/dist/{chunk-OTPXEE6W.js → chunk-VSL63CFJ.js} +15 -12
- package/dist/chunk-VSL63CFJ.js.map +1 -0
- package/dist/{chunk-2JGGZICG.js → chunk-WBM2MVBK.js} +2 -2
- package/dist/{chunk-CD3C4BJN.js → chunk-WIWLX65T.js} +2 -2
- package/dist/{chunk-GDDSXVWR.js → chunk-X4TD4O2F.js} +3 -3
- package/dist/{chunk-DQEMWVMT.js → chunk-X7Y7WX73.js} +1 -1
- package/dist/{chunk-FPQDZCUX.js → chunk-XH3HGI2N.js} +2 -2
- package/dist/{chunk-C6KRO3SU.js → chunk-XVDZFTN5.js} +4 -4
- package/dist/{chunk-3SL52JKD.js → chunk-XVZA6VXC.js} +4 -4
- package/dist/chunk-YDVAM7S4.js +221 -0
- package/dist/chunk-YDVAM7S4.js.map +1 -0
- package/dist/chunk-YFTNZMGR.js +71 -0
- package/dist/chunk-YFTNZMGR.js.map +1 -0
- package/dist/{chunk-VELCIWJZ.js → chunk-YKREX63Z.js} +19 -10
- package/dist/chunk-YKREX63Z.js.map +1 -0
- package/dist/{chunk-BLHX5FQW.js → chunk-YUW66UAH.js} +2 -2
- package/dist/{chunk-DOQLHCSS.js → chunk-ZBW7A667.js} +2 -2
- package/dist/{chunk-4DPDIOVA.js → chunk-ZEGL7YCC.js} +2 -2
- package/dist/{chunk-VVX5PZFS.js → chunk-ZHXSOMYH.js} +2 -2
- package/dist/{chunk-GCBIXUPT.js → chunk-ZMWSYUUL.js} +2 -2
- package/dist/{chunk-X2QPKLPL.js → chunk-ZZUVBZL2.js} +2 -2
- package/dist/{cli-1mzd5TM4.d.ts → cli-DGq0MNpO.d.ts} +5 -5
- package/dist/cli-fallback.d.ts +4 -2
- package/dist/cli-fallback.js +3 -1
- package/dist/cli.d.ts +16 -14
- package/dist/cli.js +139 -134
- package/dist/coding/export-okf-codegraph.d.ts +2 -1
- package/dist/coding/export-okf-codegraph.js +26 -25
- package/dist/coding/export-okf-codegraph.js.map +1 -1
- package/dist/coding/pre-action-gate.d.ts +2 -1
- package/dist/coding/pre-action-gate.js +2 -2
- package/dist/compat/codex-cli-fallback.d.ts +1 -1
- package/dist/compat/codex-cli-fallback.js +3 -1
- package/dist/compat/codex-cli-fallback.js.map +1 -1
- package/dist/compounding/engine.d.ts +3 -2
- package/dist/compounding/engine.js +27 -26
- package/dist/compounding/preference-consolidator.d.ts +2 -1
- package/dist/compression-optimizer.d.ts +2 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.js +18 -15
- package/dist/connectors/codex-materialize-runner.d.ts +2 -1
- package/dist/connectors/codex-materialize-runner.js +26 -25
- package/dist/connectors/codex-materialize.d.ts +2 -1
- package/dist/connectors/index.d.ts +2 -1
- package/dist/connectors/index.js +29 -28
- package/dist/consolidation-provenance-check.d.ts +3 -2
- package/dist/consolidation-undo.d.ts +3 -2
- package/dist/contradiction/index.d.ts +5 -3
- package/dist/contradiction/index.js +7 -7
- package/dist/{contradiction-scan-GVD4JJ7B.js → contradiction-scan-BSGKZHYJ.js} +4 -4
- package/dist/contradiction-scan-BSGKZHYJ.js.map +1 -0
- package/dist/converge-config.d.ts +2 -1
- package/dist/convergence-refresh.d.ts +3 -2
- package/dist/convergence-refresh.js +29 -28
- package/dist/conversation-index/backend.d.ts +2 -1
- package/dist/conversation-index/chunker.d.ts +2 -1
- package/dist/conversation-index/faiss-adapter.d.ts +2 -1
- package/dist/conversation-index/indexer.d.ts +2 -1
- package/dist/conversation-index/search.d.ts +2 -1
- package/dist/corpus-watermark.d.ts +2 -1
- package/dist/corpus-watermark.js +29 -28
- package/dist/cross-lingual-recall.d.ts +2 -1
- package/dist/day-summary.d.ts +2 -1
- package/dist/deep-recall-http-glue.d.ts +14 -12
- package/dist/deep-recall-http-glue.js +4 -14
- package/dist/deep-recall-mcp-tools.d.ts +14 -12
- package/dist/deep-recall-policy-llm.d.ts +3 -1
- package/dist/deep-recall-policy-llm.js +5 -3
- package/dist/deep-recall-seeds.d.ts +2 -1
- package/dist/delinearize.d.ts +2 -1
- package/dist/dependency-propagation-config.d.ts +2 -1
- package/dist/{dependency-propagation-delivery-Bua2ApHV.d.ts → dependency-propagation-delivery-Cq1ekOwV.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +2 -1
- package/dist/direct-answer.d.ts +2 -1
- package/dist/embedding-fallback.d.ts +2 -1
- package/dist/enrichment/index.d.ts +2 -1
- package/dist/entity-origin-fields.d.ts +2 -1
- package/dist/entity-retrieval.d.ts +3 -2
- package/dist/entity-retrieval.js +28 -27
- package/dist/entity-schema.d.ts +2 -1
- package/dist/episodic-context.d.ts +2 -1
- package/dist/eval-trajectory-contracts.d.ts +2 -1
- package/dist/eval-trajectory-store.d.ts +2 -1
- package/dist/eval-trajectory.d.ts +2 -1
- package/dist/event-order-recall.js +3 -3
- package/dist/explicit-capture.d.ts +12 -10
- package/dist/explicit-capture.js +6 -6
- package/dist/external-wiki-access.d.ts +14 -12
- package/dist/external-wiki-access.js +87 -84
- package/dist/external-wiki-collection-registration.d.ts +2 -1
- package/dist/external-wiki-collection.d.ts +2 -1
- package/dist/external-wiki-mcp-tools.d.ts +14 -12
- package/dist/extraction-error-classification.d.ts +2 -1
- package/dist/extraction-faithfulness.d.ts +3 -1
- package/dist/extraction-faithfulness.js +5 -3
- package/dist/extraction-judge-telemetry.d.ts +3 -1
- package/dist/extraction-judge-training.d.ts +3 -1
- package/dist/extraction-judge.d.ts +3 -1
- package/dist/extraction-judge.js +5 -3
- package/dist/extraction-liveness.d.ts +2 -1
- package/dist/extraction-normalization.d.ts +2 -1
- package/dist/extraction-prompt.d.ts +2 -1
- package/dist/extraction-source-grounding-rules.d.ts +2 -1
- package/dist/extraction-source-grounding.d.ts +2 -1
- package/dist/extraction-source-grounding.js +3 -3
- package/dist/extraction-span-config.d.ts +2 -1
- package/dist/extraction-span-materialize.d.ts +2 -1
- package/dist/extraction-span-materialize.js +2 -2
- package/dist/extraction.d.ts +2 -1
- package/dist/extraction.js +46 -45
- package/dist/fallback-llm-codex-subscription.d.ts +79 -0
- package/dist/fallback-llm-codex-subscription.js +22 -0
- package/dist/fallback-llm-codex-subscription.js.map +1 -0
- package/dist/fallback-llm.d.ts +5 -1
- package/dist/fallback-llm.js +4 -2
- package/dist/{first-start-migration-GZ45G5FS.js → first-start-migration-ZWMV5CX4.js} +6 -6
- package/dist/{generic-recall-paths-DJBADojG.d.ts → generic-recall-paths-BcySh_f9.d.ts} +1 -1
- package/dist/graph-append-error.d.ts +2 -1
- package/dist/graph-dashboard-diff.d.ts +2 -1
- package/dist/graph-dashboard-key.d.ts +2 -1
- package/dist/graph-dashboard-parser.d.ts +2 -1
- package/dist/{graph-edge-decay-ROSUPDX3.js → graph-edge-decay-MKIRZ762.js} +5 -5
- package/dist/graph-edge-decay-MKIRZ762.js.map +1 -0
- package/dist/graph-edge-reinforcement.d.ts +2 -1
- package/dist/graph-jsonl.d.ts +2 -1
- package/dist/graph-jsonl.js +3 -3
- package/dist/graph-path-reconstruction.d.ts +2 -1
- package/dist/graph-path-scoring.d.ts +2 -1
- package/dist/graph-snapshot.d.ts +2 -1
- package/dist/graph-snapshot.js +3 -3
- package/dist/graph.d.ts +2 -1
- package/dist/graph.js +2 -2
- package/dist/harmonic-retrieval.js +3 -3
- package/dist/importance.d.ts +2 -1
- package/dist/importers/index.d.ts +2 -1
- package/dist/importers/test-utils.d.ts +2 -1
- package/dist/in-flight-reads.d.ts +2 -1
- package/dist/{index-Bsy8ygLL.d.ts → index-DWOb4wz9.d.ts} +2 -2
- package/dist/index.d.ts +713 -705
- package/dist/index.js +419 -346
- package/dist/intent.d.ts +2 -1
- package/dist/lcm/engine.d.ts +2 -1
- package/dist/lcm/engine.js +4 -4
- package/dist/lcm/index.d.ts +2 -1
- package/dist/lcm/index.js +12 -12
- package/dist/lcm/tools.d.ts +2 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/live-connectors-runner.d.ts +2 -1
- package/dist/local-llm-config.d.ts +7 -1
- package/dist/local-llm-config.js +12 -0
- package/dist/local-llm.d.ts +2 -1
- package/dist/local-model-endpoint.d.ts +2 -1
- package/dist/location/index.d.ts +4 -3
- package/dist/location/index.js +60 -59
- package/dist/maintenance/memory-governance.d.ts +2 -1
- package/dist/maintenance/memory-governance.js +26 -25
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +27 -26
- package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-projection.js +28 -27
- package/dist/{maintenance-DItyBwTC.d.ts → maintenance-CW9wCzMP.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +14 -12
- package/dist/memory-action-policy.d.ts +2 -1
- package/dist/memory-cache.d.ts +2 -1
- package/dist/memory-controller.d.ts +2 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
- package/dist/memory-projection-store.d.ts +2 -1
- package/dist/memory-provenance.d.ts +2 -1
- package/dist/memory-snapshot.d.ts +2 -1
- package/dist/memory-subject-cli.d.ts +14 -12
- package/dist/memory-subject.d.ts +14 -12
- package/dist/memory-worth-outcomes.d.ts +3 -2
- package/dist/models-json.d.ts +2 -1
- package/dist/namespaces/migrate.d.ts +4 -3
- package/dist/namespaces/migrate.js +27 -26
- package/dist/namespaces/principal.d.ts +2 -1
- package/dist/namespaces/search.d.ts +2 -1
- package/dist/namespaces/search.js +6 -6
- package/dist/namespaces/storage.d.ts +4 -3
- package/dist/namespaces/storage.js +26 -25
- package/dist/native-knowledge.d.ts +2 -1
- package/dist/offline-sync-impression-drain.d.ts +2 -1
- package/dist/offline-sync-impression-drain.js +4 -4
- package/dist/operator-doctor-corpus.d.ts +2 -1
- package/dist/operator-doctor-corpus.js +30 -29
- package/dist/operator-doctor-replica.d.ts +2 -1
- package/dist/operator-toolkit.d.ts +4 -3
- package/dist/operator-toolkit.js +53 -49
- package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
- package/dist/orchestration/maintenance.d.ts +5 -4
- package/dist/orchestration/maintenance.js +39 -38
- package/dist/{orchestrator-DBUX-aAM.d.ts → orchestrator-ComHLm49.d.ts} +22 -11
- package/dist/orchestrator.d.ts +12 -10
- package/dist/orchestrator.js +224 -218
- package/dist/patterns-cli.d.ts +2 -1
- package/dist/{pipeline-BqgcOk1Z.d.ts → pipeline-CiYcqqhl.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +2 -1
- package/dist/proactive-contention.d.ts +2 -1
- package/dist/provenance.d.ts +2 -1
- package/dist/provenance.js +2 -2
- package/dist/{public-http-CqtZ5kv3.d.ts → public-http-CuK4_Cb1.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +3 -2
- package/dist/{qmd-BD0ikV_Y.d.ts → qmd-qXD4vatU.d.ts} +1 -1
- package/dist/qmd-recall-cache.d.ts +2 -1
- package/dist/qmd.d.ts +3 -2
- package/dist/recall-concurrency-config.d.ts +2 -1
- package/dist/recall-disclosure-escalation.d.ts +2 -1
- package/dist/recall-explain-renderer.d.ts +2 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +2 -1
- package/dist/recall-navigate-access.d.ts +2 -1
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.d.ts +2 -1
- package/dist/recall-navigate-disclosure.js +1 -1
- package/dist/recall-navigate.d.ts +2 -1
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-planner-llm.d.ts +3 -1
- package/dist/recall-planner-llm.js +4 -2
- package/dist/recall-planner-llm.js.map +1 -1
- package/dist/recall-state-view-admission.d.ts +3 -2
- package/dist/recall-state-view-admission.js +9 -9
- package/dist/recall-state-view-anchors.d.ts +85 -0
- package/dist/recall-state-view-anchors.js +21 -0
- package/dist/recall-state-view-anchors.js.map +1 -0
- package/dist/recall-state-view-inject.js +2 -2
- package/dist/recall-state-view-render.js +2 -2
- package/dist/recall-state-view-widen.js +2 -2
- package/dist/recall-state-view-wire.js +3 -3
- package/dist/recall-state-view.d.ts +37 -1
- package/dist/recall-state-view.js +11 -3
- package/dist/recall-state.d.ts +2 -1
- package/dist/recall-tag-filter.d.ts +2 -1
- package/dist/recall-timings.d.ts +2 -1
- package/dist/recall-xray-cli.d.ts +2 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +2 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +2 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +2 -1
- package/dist/reconcile/cursor.js +2 -2
- package/dist/reconcile/manifest.d.ts +2 -1
- package/dist/reconcile/manifest.js +4 -4
- package/dist/reconcile/plan.d.ts +2 -1
- package/dist/reconcile/plan.js +2 -2
- package/dist/replay/normalizers/chatgpt.d.ts +2 -1
- package/dist/replay/normalizers/claude.d.ts +2 -1
- package/dist/replay/normalizers/openclaw.d.ts +2 -1
- package/dist/replay/normalizers/shared.d.ts +2 -1
- package/dist/replay/runner.d.ts +2 -1
- package/dist/replay/types.d.ts +2 -1
- package/dist/replica-divergence.d.ts +2 -1
- package/dist/replica-peers-config.d.ts +2 -1
- package/dist/{resolution-OHJZG45O.js → resolution-4GG3QZRJ.js} +8 -8
- package/dist/resolution-4GG3QZRJ.js.map +1 -0
- package/dist/resolve-auth-token.d.ts +2 -1
- package/dist/resume-bundles.js +19 -16
- package/dist/retrieval-agents.d.ts +3 -2
- package/dist/retrieval-tiers.d.ts +2 -1
- package/dist/routing/engine.d.ts +2 -1
- package/dist/routing/store.d.ts +2 -1
- package/dist/salvage-envelope.d.ts +2 -1
- package/dist/salvage-envelope.js +2 -2
- package/dist/schemas.d.ts +160 -160
- package/dist/{scope-profiles-BIJMsd0B.d.ts → scope-profiles-BT9rqC3w.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +2 -1
- package/dist/search/factory.d.ts +2 -1
- package/dist/search/factory.js +5 -5
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.js +13 -13
- package/dist/search/lancedb-backend.d.ts +2 -1
- package/dist/search/meilisearch-backend.d.ts +2 -1
- package/dist/search/noop-backend.d.ts +2 -1
- package/dist/search/orama-backend.d.ts +2 -1
- package/dist/search/port.d.ts +2 -1
- package/dist/search/remote-backend.d.ts +2 -1
- package/dist/{semantic-consolidation-D7sJocll.d.ts → semantic-consolidation-CmZi7thY.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +3 -2
- package/dist/semantic-consolidation.js +27 -26
- package/dist/semantic-rule-promotion.js +26 -25
- package/dist/semantic-rule-verifier.d.ts +2 -1
- package/dist/semantic-rule-verifier.js +26 -25
- package/dist/{service-fwgEngUj.d.ts → service-CLkA7AQB.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +2 -1
- package/dist/session-observer-state.d.ts +2 -1
- package/dist/shared-context/manager.d.ts +8 -7
- package/dist/signal.d.ts +2 -1
- package/dist/source-agent-qualifier.d.ts +2 -1
- package/dist/source-agent-qualifier.js +41 -40
- package/dist/standup/build.js +27 -26
- package/dist/{storage-Cbll3-Tk.d.ts → storage-wvX01lht.d.ts} +1 -1
- package/dist/storage.d.ts +3 -2
- package/dist/storage.js +25 -24
- package/dist/subject-config.d.ts +2 -1
- package/dist/subject-config.js +2 -2
- package/dist/summarizer.d.ts +2 -1
- package/dist/summarizer.js +6 -3
- package/dist/summary-snapshot.d.ts +2 -1
- package/dist/support-passport/index.d.ts +17 -15
- package/dist/support-passport/index.js +92 -89
- package/dist/temporal-supersession.d.ts +3 -2
- package/dist/temporal-timeline-recall.d.ts +2 -1
- package/dist/temporal-validity.d.ts +2 -1
- package/dist/threading.d.ts +2 -1
- package/dist/tier-migration.d.ts +3 -2
- package/dist/tier-routing.d.ts +2 -1
- package/dist/tier-routing.js +3 -3
- package/dist/{tier-stats-VK5PCO2L.js → tier-stats-LUSUUNU6.js} +4 -4
- package/dist/topics.d.ts +2 -1
- package/dist/transcript.d.ts +2 -1
- package/dist/transfer/backup.js +2 -2
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/capsule-import.js +3 -3
- package/dist/transfer/export-okf.d.ts +2 -1
- package/dist/transfer/export-okf.js +26 -25
- package/dist/transfer/types.d.ts +78 -78
- package/dist/trust-score-stage.d.ts +2 -1
- package/dist/trust-score.d.ts +2 -1
- package/dist/{types-48sPkWB0.d.ts → types-Cyr32ABj.d.ts} +3 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +2 -1
- package/dist/verified-recall.js +26 -25
- package/dist/who-knows-cli.d.ts +14 -12
- package/dist/who-knows-cli.js +27 -26
- package/dist/who-knows.d.ts +14 -12
- package/dist/who-knows.js +26 -25
- package/dist/write-envelope.d.ts +7 -1
- package/dist/write-envelope.js +1 -1
- package/package.json +2 -2
- package/src/access-boundary.ts +21 -6
- package/src/access-category-alias.test.ts +488 -51
- package/src/access-http.test.ts +249 -0
- package/src/access-http.ts +2 -0
- package/src/access-mcp.test.ts +2 -2
- package/src/access-observe-write-category.ts +25 -0
- package/src/access-observe-write-surface.ts +58 -57
- package/src/access-operations-batch.ts +28 -2
- package/src/access-operations.ts +6 -4
- package/src/access-schema.ts +106 -50
- package/src/access-service.ts +23 -9
- package/src/background-generation-config.ts +79 -0
- package/src/background-generation.test.ts +123 -0
- package/src/background-generation.ts +52 -0
- package/src/cli-fallback.ts +8 -2
- package/src/config.test.ts +172 -0
- package/src/config.ts +2 -43
- package/src/fallback-llm-codex-subscription.ts +168 -0
- package/src/fallback-llm.test.ts +46 -0
- package/src/fallback-llm.ts +60 -48
- package/src/index.ts +2 -16
- package/src/local-llm-config.ts +84 -0
- package/src/orchestration/recall-internal.ts +91 -74
- package/src/orchestration/recall-rerank-coordinator.ts +41 -4
- package/src/orchestration/recall-search-pipeline.ts +25 -18
- package/src/orchestration/recall-state-view-pipeline.test.ts +89 -0
- package/src/providers/codex-subscription.test.ts +804 -1
- package/src/providers/codex-subscription.ts +407 -65
- package/src/recall-rerank-coordinator.test.ts +153 -0
- package/src/recall-state-view-anchors.ts +163 -0
- package/src/recall-state-view-widen.ts +21 -7
- package/src/recall-state-view-zero-diff.test.ts +30 -0
- package/src/recall-state-view.test.ts +161 -0
- package/src/recall-state-view.ts +206 -35
- package/src/summarizer.ts +25 -0
- package/src/trust-score-recall-paths.test.ts +1 -1
- package/src/types.ts +3 -2
- package/src/write-envelope.ts +5 -0
- package/dist/chunk-255PC37A.js +0 -120
- package/dist/chunk-255PC37A.js.map +0 -1
- package/dist/chunk-3IXB77DA.js.map +0 -1
- package/dist/chunk-65RENJGB.js.map +0 -1
- package/dist/chunk-7MJBKZPU.js.map +0 -1
- package/dist/chunk-D2DIYEFW.js.map +0 -1
- package/dist/chunk-DOKKRZPH.js.map +0 -1
- package/dist/chunk-JLXWRQNR.js.map +0 -1
- package/dist/chunk-JR6PP7UM.js.map +0 -1
- package/dist/chunk-LSLCFCCQ.js.map +0 -1
- package/dist/chunk-OTPXEE6W.js.map +0 -1
- package/dist/chunk-RN3MVLW3.js.map +0 -1
- package/dist/chunk-SROIT6QY.js.map +0 -1
- package/dist/chunk-VELCIWJZ.js.map +0 -1
- package/dist/chunk-YEN4TREG.js.map +0 -1
- /package/dist/{capsule-crypto-YO5QJ6L3.js.map → access-observe-write-category.js.map} +0 -0
- /package/dist/{contradiction-scan-GVD4JJ7B.js.map → background-generation-config.js.map} +0 -0
- /package/dist/{graph-edge-decay-ROSUPDX3.js.map → background-generation.js.map} +0 -0
- /package/dist/{resolution-OHJZG45O.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
- /package/dist/{capsule-merge-ZCXUPLNJ.js.map → capsule-merge-IPG4IOFP.js.map} +0 -0
- /package/dist/{chunk-YHU5XUF4.js.map → chunk-27MKMTBY.js.map} +0 -0
- /package/dist/{chunk-TK4FHQRN.js.map → chunk-2J3V5QEO.js.map} +0 -0
- /package/dist/{chunk-BXLOS5AJ.js.map → chunk-2NLLXCJG.js.map} +0 -0
- /package/dist/{chunk-TFRDUD3M.js.map → chunk-2ZTDRNCS.js.map} +0 -0
- /package/dist/{chunk-PWPIERBM.js.map → chunk-37CAEC7E.js.map} +0 -0
- /package/dist/{chunk-X7BCM2NA.js.map → chunk-3EKVN2OP.js.map} +0 -0
- /package/dist/{chunk-S2ULTQZR.js.map → chunk-3N3PBBEH.js.map} +0 -0
- /package/dist/{chunk-XCF3SFHD.js.map → chunk-3NPNBVFR.js.map} +0 -0
- /package/dist/{chunk-JO5TQAKW.js.map → chunk-4BCHFSC7.js.map} +0 -0
- /package/dist/{chunk-Q6D7EUSQ.js.map → chunk-4JVQRFZD.js.map} +0 -0
- /package/dist/{chunk-YEDVOYL2.js.map → chunk-4RX5O34R.js.map} +0 -0
- /package/dist/{chunk-JMPYZJQN.js.map → chunk-4RZLTZVM.js.map} +0 -0
- /package/dist/{chunk-Q7JK6YEB.js.map → chunk-54NX5EG4.js.map} +0 -0
- /package/dist/{chunk-GWK7FEUL.js.map → chunk-5FAGCOZD.js.map} +0 -0
- /package/dist/{chunk-2PUE5P7C.js.map → chunk-5N4MZLEH.js.map} +0 -0
- /package/dist/{chunk-B2YKTE7P.js.map → chunk-5SPCMAUC.js.map} +0 -0
- /package/dist/{chunk-3OHISDDW.js.map → chunk-5U7K4W6K.js.map} +0 -0
- /package/dist/{chunk-CYEMS2PG.js.map → chunk-5YCNDC3C.js.map} +0 -0
- /package/dist/{chunk-PAAJWQH5.js.map → chunk-62D2PAAM.js.map} +0 -0
- /package/dist/{chunk-52II7PB6.js.map → chunk-645WOU5I.js.map} +0 -0
- /package/dist/{chunk-326KUXIR.js.map → chunk-6EHM2AV7.js.map} +0 -0
- /package/dist/{chunk-YM7YN37H.js.map → chunk-6ET2VII7.js.map} +0 -0
- /package/dist/{chunk-A2YQL2FF.js.map → chunk-6P4REYKL.js.map} +0 -0
- /package/dist/{chunk-7RKBPXY6.js.map → chunk-6YAIN5XJ.js.map} +0 -0
- /package/dist/{chunk-2L5FSNPC.js.map → chunk-A7GQBJP5.js.map} +0 -0
- /package/dist/{chunk-UYVXIY6C.js.map → chunk-AAZEKXUP.js.map} +0 -0
- /package/dist/{chunk-IQZ6ISFX.js.map → chunk-AECJY3GJ.js.map} +0 -0
- /package/dist/{chunk-76DRU7C4.js.map → chunk-AENM6GKU.js.map} +0 -0
- /package/dist/{chunk-KTRXQQFN.js.map → chunk-B36GUU6T.js.map} +0 -0
- /package/dist/{chunk-TLHNF6GA.js.map → chunk-BV4ZKIZH.js.map} +0 -0
- /package/dist/{chunk-ZWEZXVYH.js.map → chunk-CEO4DONG.js.map} +0 -0
- /package/dist/{chunk-ZEPVWLCN.js.map → chunk-CZTPU65V.js.map} +0 -0
- /package/dist/{chunk-TRU6JBOI.js.map → chunk-D545Z7UH.js.map} +0 -0
- /package/dist/{chunk-6E5GYDIE.js.map → chunk-DGS34QSY.js.map} +0 -0
- /package/dist/{chunk-6Z3WW2MW.js.map → chunk-ENBPQEVU.js.map} +0 -0
- /package/dist/{chunk-PNEDMJ53.js.map → chunk-F4EHXVP7.js.map} +0 -0
- /package/dist/{chunk-JPKZTCWZ.js.map → chunk-FNHLI2RE.js.map} +0 -0
- /package/dist/{chunk-M3MYMWXG.js.map → chunk-FXHOZGSE.js.map} +0 -0
- /package/dist/{chunk-SAKA6PPL.js.map → chunk-GAS7KYC7.js.map} +0 -0
- /package/dist/{chunk-2AR5JFD7.js.map → chunk-GG5FHZJJ.js.map} +0 -0
- /package/dist/{chunk-WS3WNLST.js.map → chunk-GI4ZBWPQ.js.map} +0 -0
- /package/dist/{chunk-JYR4LH76.js.map → chunk-GMIQV6DD.js.map} +0 -0
- /package/dist/{chunk-WIKO4SCR.js.map → chunk-H3TKENU4.js.map} +0 -0
- /package/dist/{chunk-ZLN7AROH.js.map → chunk-HIP6DKJJ.js.map} +0 -0
- /package/dist/{chunk-SF6RFI5Z.js.map → chunk-HWLIMQE2.js.map} +0 -0
- /package/dist/{chunk-JZYECQWN.js.map → chunk-IL6ODG6M.js.map} +0 -0
- /package/dist/{chunk-GNR6YEWZ.js.map → chunk-IQEJIOEU.js.map} +0 -0
- /package/dist/{chunk-BICNRVEC.js.map → chunk-IWO6QXWJ.js.map} +0 -0
- /package/dist/{chunk-42DJ235G.js.map → chunk-J272ODKJ.js.map} +0 -0
- /package/dist/{chunk-R3TLVTWW.js.map → chunk-JDX2OA4R.js.map} +0 -0
- /package/dist/{chunk-G5MO3VQA.js.map → chunk-JKKII6GX.js.map} +0 -0
- /package/dist/{chunk-L5OXE4PX.js.map → chunk-JTQR6L2N.js.map} +0 -0
- /package/dist/{chunk-VDX2J7OX.js.map → chunk-KQAFEZQX.js.map} +0 -0
- /package/dist/{chunk-AKE4GGQ3.js.map → chunk-KQW3YGEN.js.map} +0 -0
- /package/dist/{chunk-LMMQKZK3.js.map → chunk-L63GFNKL.js.map} +0 -0
- /package/dist/{chunk-BRZWWUCJ.js.map → chunk-LMLGBG6H.js.map} +0 -0
- /package/dist/{chunk-CQ7SSBO4.js.map → chunk-M6HBPLBA.js.map} +0 -0
- /package/dist/{chunk-3YMDY3ZF.js.map → chunk-MUTVRKKY.js.map} +0 -0
- /package/dist/{chunk-FCFAYMTU.js.map → chunk-NXGSONWM.js.map} +0 -0
- /package/dist/{chunk-4WGAMREC.js.map → chunk-O4M4BDIJ.js.map} +0 -0
- /package/dist/{chunk-5SYI2F47.js.map → chunk-O76F5QPP.js.map} +0 -0
- /package/dist/{chunk-57GDHV2D.js.map → chunk-PCOVEDPK.js.map} +0 -0
- /package/dist/{chunk-PPTOAHTZ.js.map → chunk-PGAB2V53.js.map} +0 -0
- /package/dist/{chunk-HHDTBYDJ.js.map → chunk-Q432REND.js.map} +0 -0
- /package/dist/{chunk-XAITGGX5.js.map → chunk-Q4AUIFUA.js.map} +0 -0
- /package/dist/{chunk-5LLQAUMI.js.map → chunk-Q7CLGFA7.js.map} +0 -0
- /package/dist/{chunk-KUK56OPR.js.map → chunk-QHT7MOUF.js.map} +0 -0
- /package/dist/{chunk-W6IJMWTZ.js.map → chunk-QTQ6XKGT.js.map} +0 -0
- /package/dist/{chunk-FLLORID2.js.map → chunk-RLJHJQUY.js.map} +0 -0
- /package/dist/{chunk-353KGBKY.js.map → chunk-RW4QNB4J.js.map} +0 -0
- /package/dist/{chunk-GWQVMKUJ.js.map → chunk-SCXURCVT.js.map} +0 -0
- /package/dist/{chunk-FQXJAC3T.js.map → chunk-SGUDMW2K.js.map} +0 -0
- /package/dist/{chunk-LSDEIZ76.js.map → chunk-TA4C3XB7.js.map} +0 -0
- /package/dist/{chunk-YIZ2EUUL.js.map → chunk-TNZNSMVJ.js.map} +0 -0
- /package/dist/{chunk-CIYUWSMZ.js.map → chunk-TRLOFIQC.js.map} +0 -0
- /package/dist/{chunk-TL7NLM2L.js.map → chunk-TSP5WH72.js.map} +0 -0
- /package/dist/{chunk-3K6UFW5B.js.map → chunk-UHRZ324M.js.map} +0 -0
- /package/dist/{chunk-A5UQ52YQ.js.map → chunk-UZZ7SQT3.js.map} +0 -0
- /package/dist/{chunk-GHX5PNXW.js.map → chunk-VBSNUH4J.js.map} +0 -0
- /package/dist/{chunk-MR6LQVZ5.js.map → chunk-VJIE4D2I.js.map} +0 -0
- /package/dist/{chunk-2JGGZICG.js.map → chunk-WBM2MVBK.js.map} +0 -0
- /package/dist/{chunk-CD3C4BJN.js.map → chunk-WIWLX65T.js.map} +0 -0
- /package/dist/{chunk-GDDSXVWR.js.map → chunk-X4TD4O2F.js.map} +0 -0
- /package/dist/{chunk-DQEMWVMT.js.map → chunk-X7Y7WX73.js.map} +0 -0
- /package/dist/{chunk-FPQDZCUX.js.map → chunk-XH3HGI2N.js.map} +0 -0
- /package/dist/{chunk-C6KRO3SU.js.map → chunk-XVDZFTN5.js.map} +0 -0
- /package/dist/{chunk-3SL52JKD.js.map → chunk-XVZA6VXC.js.map} +0 -0
- /package/dist/{chunk-BLHX5FQW.js.map → chunk-YUW66UAH.js.map} +0 -0
- /package/dist/{chunk-DOQLHCSS.js.map → chunk-ZBW7A667.js.map} +0 -0
- /package/dist/{chunk-4DPDIOVA.js.map → chunk-ZEGL7YCC.js.map} +0 -0
- /package/dist/{chunk-VVX5PZFS.js.map → chunk-ZHXSOMYH.js.map} +0 -0
- /package/dist/{chunk-GCBIXUPT.js.map → chunk-ZMWSYUUL.js.map} +0 -0
- /package/dist/{chunk-X2QPKLPL.js.map → chunk-ZZUVBZL2.js.map} +0 -0
- /package/dist/{first-start-migration-GZ45G5FS.js.map → first-start-migration-ZWMV5CX4.js.map} +0 -0
- /package/dist/{tier-stats-VK5PCO2L.js.map → tier-stats-LUSUUNU6.js.map} +0 -0
|
@@ -567,3 +567,156 @@ test("trust rerank preserves duplicate paths owned by different namespaces (#202
|
|
|
567
567
|
);
|
|
568
568
|
assert.equal(outcome.trustByPath?.size, 2, "trust metadata must have one entry per namespaced result");
|
|
569
569
|
});
|
|
570
|
+
|
|
571
|
+
test("#2859 state-view cap: pairs reconcile before cap/MMR and count as one evidence packet", () => {
|
|
572
|
+
// MMR off so the ordered pool equals the input order — the packet
|
|
573
|
+
// semantics under test are then fully deterministic.
|
|
574
|
+
const config = parseConfig({ recallMmrEnabled: false });
|
|
575
|
+
const corpus = makeFakes([]);
|
|
576
|
+
const coordinator = new RecallRerankCoordinator({
|
|
577
|
+
getConfig: () => config,
|
|
578
|
+
getStorage: corpus.getStorage,
|
|
579
|
+
readQmdResultMemory: async () => null,
|
|
580
|
+
});
|
|
581
|
+
const sv = (
|
|
582
|
+
id: string,
|
|
583
|
+
score: number,
|
|
584
|
+
chain: Partial<QmdSearchResult> = {},
|
|
585
|
+
): QmdSearchResult => ({ ...result(id, score), id, status: "active", ...chain });
|
|
586
|
+
const rows: QmdSearchResult[] = [
|
|
587
|
+
sv("p1", 0.95, { status: "superseded", supersededBy: "s1" }),
|
|
588
|
+
sv("orphan", 0.9, { status: "superseded", supersededBy: "absent" }),
|
|
589
|
+
sv("s1", 0.85),
|
|
590
|
+
sv("f1", 0.8),
|
|
591
|
+
sv("f2", 0.75),
|
|
592
|
+
];
|
|
593
|
+
const caps = resolveCapabilities(config);
|
|
594
|
+
|
|
595
|
+
// Packet view: [p1+s1], [f1], [f2] — the orphan is reconciled away
|
|
596
|
+
// BEFORE the cap, and the admitted pair consumes a single slot.
|
|
597
|
+
const partition = coordinator.diversifyRecallResultsWithHeadroom(
|
|
598
|
+
"memories",
|
|
599
|
+
rows,
|
|
600
|
+
2,
|
|
601
|
+
undefined,
|
|
602
|
+
caps,
|
|
603
|
+
true,
|
|
604
|
+
);
|
|
605
|
+
assert.deepEqual(
|
|
606
|
+
partition.appliedResults.map((r) => r.id),
|
|
607
|
+
["p1", "s1", "f1"],
|
|
608
|
+
"a complete pair is one packet: pred+succ plus one filler for limit 2",
|
|
609
|
+
);
|
|
610
|
+
assert.deepEqual(
|
|
611
|
+
partition.headroomResults.map((r) => r.id),
|
|
612
|
+
["f2"],
|
|
613
|
+
"headroom is the remainder of the reconciled pool",
|
|
614
|
+
);
|
|
615
|
+
|
|
616
|
+
// The slice never splits a packet at the boundary: even with the
|
|
617
|
+
// successor ranked LAST, the pair is admitted together.
|
|
618
|
+
const splitRisk: QmdSearchResult[] = [
|
|
619
|
+
sv("p1", 0.95, { status: "superseded", supersededBy: "s1" }),
|
|
620
|
+
sv("f1", 0.9),
|
|
621
|
+
sv("f2", 0.85),
|
|
622
|
+
sv("s1", 0.8),
|
|
623
|
+
];
|
|
624
|
+
const applied = coordinator.diversifyAndLimitRecallResults(
|
|
625
|
+
"memories",
|
|
626
|
+
splitRisk,
|
|
627
|
+
2,
|
|
628
|
+
undefined,
|
|
629
|
+
caps,
|
|
630
|
+
true,
|
|
631
|
+
);
|
|
632
|
+
assert.deepEqual(
|
|
633
|
+
applied.map((r) => r.id),
|
|
634
|
+
["p1", "f1", "s1"],
|
|
635
|
+
"no underfill: the boundary keeps the evidence packet complete",
|
|
636
|
+
);
|
|
637
|
+
|
|
638
|
+
// Flag absent → the legacy row slice, byte-identical (zero-diff default).
|
|
639
|
+
const legacy = coordinator.diversifyAndLimitRecallResults(
|
|
640
|
+
"memories",
|
|
641
|
+
rows,
|
|
642
|
+
2,
|
|
643
|
+
undefined,
|
|
644
|
+
caps,
|
|
645
|
+
);
|
|
646
|
+
assert.deepEqual(
|
|
647
|
+
legacy.map((r) => r.id),
|
|
648
|
+
["p1", "orphan"],
|
|
649
|
+
"without the state view the cap stays the plain top-N row slice",
|
|
650
|
+
);
|
|
651
|
+
});
|
|
652
|
+
|
|
653
|
+
test("#2859 packet cap after filter: a quarantined successor does not consume budget", () => {
|
|
654
|
+
const config = parseConfig({ recallMmrEnabled: false });
|
|
655
|
+
const corpus = makeFakes([]);
|
|
656
|
+
const coordinator = new RecallRerankCoordinator({
|
|
657
|
+
getConfig: () => config,
|
|
658
|
+
getStorage: corpus.getStorage,
|
|
659
|
+
readQmdResultMemory: async () => null,
|
|
660
|
+
});
|
|
661
|
+
const sv = (
|
|
662
|
+
id: string,
|
|
663
|
+
score: number,
|
|
664
|
+
chain: Partial<QmdSearchResult> = {},
|
|
665
|
+
): QmdSearchResult => ({ ...result(id, score), id, status: "active", ...chain });
|
|
666
|
+
// Trust already removed s1. Cap-after-filter must drop the orphaned
|
|
667
|
+
// predecessor and promote the next live packet instead of returning empty.
|
|
668
|
+
const afterTrust: QmdSearchResult[] = [
|
|
669
|
+
sv("p1", 0.95, { status: "superseded", supersededBy: "s1" }),
|
|
670
|
+
sv("f1", 0.8),
|
|
671
|
+
sv("f2", 0.75),
|
|
672
|
+
];
|
|
673
|
+
const partition = coordinator.diversifyRecallResultsWithHeadroom(
|
|
674
|
+
"memories",
|
|
675
|
+
afterTrust,
|
|
676
|
+
1,
|
|
677
|
+
undefined,
|
|
678
|
+
resolveCapabilities(config),
|
|
679
|
+
true,
|
|
680
|
+
);
|
|
681
|
+
assert.deepEqual(
|
|
682
|
+
partition.appliedResults.map((row) => row.id),
|
|
683
|
+
["f1"],
|
|
684
|
+
"disallowed pair must not occupy the only packet slot",
|
|
685
|
+
);
|
|
686
|
+
assert.deepEqual(
|
|
687
|
+
partition.headroomResults.map((row) => row.id),
|
|
688
|
+
["f2"],
|
|
689
|
+
);
|
|
690
|
+
});
|
|
691
|
+
|
|
692
|
+
test("#2859 linkless superseded status does not consume a packet slot", () => {
|
|
693
|
+
const config = parseConfig({ recallMmrEnabled: false });
|
|
694
|
+
const corpus = makeFakes([]);
|
|
695
|
+
const coordinator = new RecallRerankCoordinator({
|
|
696
|
+
getConfig: () => config,
|
|
697
|
+
getStorage: corpus.getStorage,
|
|
698
|
+
readQmdResultMemory: async () => null,
|
|
699
|
+
});
|
|
700
|
+
const sv = (
|
|
701
|
+
id: string,
|
|
702
|
+
score: number,
|
|
703
|
+
chain: Partial<QmdSearchResult> = {},
|
|
704
|
+
): QmdSearchResult => ({ ...result(id, score), id, status: "active", ...chain });
|
|
705
|
+
const rows: QmdSearchResult[] = [
|
|
706
|
+
sv("legacy", 0.99, { status: "superseded" }),
|
|
707
|
+
sv("live", 0.5),
|
|
708
|
+
];
|
|
709
|
+
const applied = coordinator.diversifyAndLimitRecallResults(
|
|
710
|
+
"memories",
|
|
711
|
+
rows,
|
|
712
|
+
1,
|
|
713
|
+
undefined,
|
|
714
|
+
resolveCapabilities(config),
|
|
715
|
+
true,
|
|
716
|
+
);
|
|
717
|
+
assert.deepEqual(
|
|
718
|
+
applied.map((row) => row.id),
|
|
719
|
+
["live"],
|
|
720
|
+
"status-only superseded rows are rejected before the packet cap",
|
|
721
|
+
);
|
|
722
|
+
});
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { isChangeOrientedQuery, stateViewKey } from "./recall-state-view.js";
|
|
2
|
+
/**
|
|
3
|
+
* State-view anchor admission (#2859).
|
|
4
|
+
*
|
|
5
|
+
* Shared namespace-qualified admission tracker for the recall safety
|
|
6
|
+
* filter (QMD/embedding/cold paths) and the recent-scan path. A deferred
|
|
7
|
+
* superseded row is admitted only when an in-set successor anchors it —
|
|
8
|
+
* through the row's own `supersededBy` or through an admitted successor's
|
|
9
|
+
* `supersedes` back-pointer. Identities are `namespace\0id`, so identical
|
|
10
|
+
* ids across namespace fanout never cross-anchor.
|
|
11
|
+
*/
|
|
12
|
+
import { shouldFilterSupersededFromRecall } from "./temporal-supersession.js";
|
|
13
|
+
import type { MemoryFile } from "./types.js";
|
|
14
|
+
|
|
15
|
+
export interface StateViewAnchorFrontmatter {
|
|
16
|
+
id?: string;
|
|
17
|
+
supersedes?: string;
|
|
18
|
+
supersededBy?: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* #2859 — pair reconciliation and packet-counting caps apply only WITHOUT
|
|
23
|
+
* a historical pin: under asOf the validity filter legitimately orphans
|
|
24
|
+
* predecessors (see annotateStateView's asOf mode).
|
|
25
|
+
*/
|
|
26
|
+
export function stateViewPacketActive(stateViewActive: boolean | undefined, asOfMs: number | undefined): boolean {
|
|
27
|
+
return stateViewActive === true && !(typeof asOfMs === "number" && Number.isFinite(asOfMs));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* #1952/#2859 — config flag OR per-call override, gated on change intent.
|
|
32
|
+
* Packet semantics are off under a historical asOf pin (see stateViewPacketActive).
|
|
33
|
+
*/
|
|
34
|
+
export function resolveRecallStateViewFlags(
|
|
35
|
+
optionFlag: boolean | undefined,
|
|
36
|
+
configFlag: boolean | undefined,
|
|
37
|
+
retrievalQuery: string,
|
|
38
|
+
asOfMs: number | undefined,
|
|
39
|
+
): { stateViewActive: boolean; stateViewPacketActive: boolean } {
|
|
40
|
+
const stateViewActive =
|
|
41
|
+
(optionFlag === true || configFlag === true) && isChangeOrientedQuery(retrievalQuery);
|
|
42
|
+
return { stateViewActive, stateViewPacketActive: stateViewPacketActive(stateViewActive, asOfMs) };
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export class StateViewAnchorTracker {
|
|
46
|
+
private readonly admitted = new Set<string>();
|
|
47
|
+
private readonly supersedesAnchors = new Set<string>();
|
|
48
|
+
|
|
49
|
+
has(namespace: string | undefined, frontmatter: StateViewAnchorFrontmatter): boolean {
|
|
50
|
+
const id = frontmatter.id;
|
|
51
|
+
return typeof id === "string" && id.length > 0 ? this.admitted.has(stateViewKey(namespace, id)) : false;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Register a row as admitted (a survivor of every gate, or a deferred
|
|
56
|
+
* row whose successor anchored it). The row's `supersedes` back-pointer
|
|
57
|
+
* then anchors its own predecessor.
|
|
58
|
+
*/
|
|
59
|
+
admit(namespace: string | undefined, frontmatter: StateViewAnchorFrontmatter): void {
|
|
60
|
+
const id = frontmatter.id;
|
|
61
|
+
if (typeof id !== "string" || id.length === 0) return;
|
|
62
|
+
this.admitted.add(stateViewKey(namespace, id));
|
|
63
|
+
if (frontmatter.supersedes) {
|
|
64
|
+
this.supersedesAnchors.add(stateViewKey(namespace, frontmatter.supersedes));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** True when an admitted successor anchors this superseded row. */
|
|
69
|
+
anchored(namespace: string | undefined, frontmatter: StateViewAnchorFrontmatter): boolean {
|
|
70
|
+
const id = frontmatter.id;
|
|
71
|
+
if (typeof id !== "string" || id.length === 0) return false;
|
|
72
|
+
const successorId = frontmatter.supersededBy;
|
|
73
|
+
return (
|
|
74
|
+
(typeof successorId === "string" && this.admitted.has(stateViewKey(namespace, successorId))) ||
|
|
75
|
+
this.supersedesAnchors.has(stateViewKey(namespace, id))
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface StateViewRecentAdmissionDeps {
|
|
81
|
+
namespaceOf: (path: string) => string;
|
|
82
|
+
isExcluded: (path: string) => boolean;
|
|
83
|
+
supersessionOptions: { enabled: boolean; includeInRecall: boolean };
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* #2859 — recent-scan admission: seed the tracker with every memory that
|
|
88
|
+
* survives the supersession gate, then admit superseded rows anchored by
|
|
89
|
+
* an in-set successor (fixpoint — an admitted link anchors the next).
|
|
90
|
+
*/
|
|
91
|
+
export function admitStateViewRecentMemories(
|
|
92
|
+
memories: readonly MemoryFile[],
|
|
93
|
+
deps: StateViewRecentAdmissionDeps
|
|
94
|
+
): StateViewAnchorTracker {
|
|
95
|
+
const tracker = new StateViewAnchorTracker();
|
|
96
|
+
for (const m of memories) {
|
|
97
|
+
if (deps.isExcluded(m.path)) continue;
|
|
98
|
+
if (m.frontmatter.status === "superseded") continue;
|
|
99
|
+
if (shouldFilterSupersededFromRecall(m.frontmatter, deps.supersessionOptions)) continue;
|
|
100
|
+
tracker.admit(deps.namespaceOf(m.path), m.frontmatter);
|
|
101
|
+
}
|
|
102
|
+
for (let progress = true; progress; ) {
|
|
103
|
+
progress = false;
|
|
104
|
+
for (const m of memories) {
|
|
105
|
+
const namespace = deps.namespaceOf(m.path);
|
|
106
|
+
if (tracker.has(namespace, m.frontmatter)) continue;
|
|
107
|
+
if (deps.isExcluded(m.path)) continue;
|
|
108
|
+
if (m.frontmatter.status !== "superseded") continue;
|
|
109
|
+
if (!shouldFilterSupersededFromRecall(m.frontmatter, deps.supersessionOptions)) continue;
|
|
110
|
+
if (tracker.anchored(namespace, m.frontmatter)) {
|
|
111
|
+
tracker.admit(namespace, m.frontmatter);
|
|
112
|
+
progress = true;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return tracker;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export interface RecentScanMemoryFilterDeps extends StateViewRecentAdmissionDeps {
|
|
120
|
+
stateViewActive: boolean;
|
|
121
|
+
asOfMs: number | undefined;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Recent-scan admission for the fallback path.
|
|
126
|
+
*
|
|
127
|
+
* Superseded-status filtering delegates to
|
|
128
|
+
* shouldFilterSupersededFromRecall so recent-scan and the QMD
|
|
129
|
+
* safety filter share semantics (kill switch, audit mode, PR #402).
|
|
130
|
+
* #1952: an active state view admits a superseded memory whose
|
|
131
|
+
* successor ALSO survives this admission filter (fixpoint below).
|
|
132
|
+
* PR #713: when `as_of` is active, pass superseded candidates
|
|
133
|
+
* through here — boostSearchResults's `[valid_at, invalid_at)`
|
|
134
|
+
* evaluation is the authoritative historical gate. Other
|
|
135
|
+
* non-active statuses stay excluded.
|
|
136
|
+
* #2859: namespace-qualified anchors with the supersedes
|
|
137
|
+
* back-pointer — mirrors the safety-filter fixpoint.
|
|
138
|
+
*/
|
|
139
|
+
export function filterRecentScanMemories(
|
|
140
|
+
memories: readonly MemoryFile[],
|
|
141
|
+
deps: RecentScanMemoryFilterDeps,
|
|
142
|
+
): MemoryFile[] {
|
|
143
|
+
const asOfActive = typeof deps.asOfMs === "number" && Number.isFinite(deps.asOfMs);
|
|
144
|
+
const stateViewAnchors =
|
|
145
|
+
deps.stateViewActive && !asOfActive ? admitStateViewRecentMemories(memories, deps) : null;
|
|
146
|
+
return memories.filter((m) => {
|
|
147
|
+
if (deps.isExcluded(m.path)) return false;
|
|
148
|
+
const status = m.frontmatter.status;
|
|
149
|
+
if (!status || status === "active") return true;
|
|
150
|
+
if (status === "superseded") {
|
|
151
|
+
if (asOfActive) return true;
|
|
152
|
+
if (stateViewAnchors?.has(deps.namespaceOf(m.path), m.frontmatter)) {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
// Include superseded memory only if the canonical gate says
|
|
156
|
+
// NOT to filter it (kill switch off or audit mode on).
|
|
157
|
+
return !shouldFilterSupersededFromRecall(m.frontmatter, deps.supersessionOptions);
|
|
158
|
+
}
|
|
159
|
+
// Other non-active statuses (archived, retired, etc.) are
|
|
160
|
+
// excluded from the recent-scan path by default.
|
|
161
|
+
return false;
|
|
162
|
+
});
|
|
163
|
+
}
|
|
@@ -9,8 +9,9 @@ import {
|
|
|
9
9
|
annotateStateView,
|
|
10
10
|
isChangeOrientedQuery,
|
|
11
11
|
parseRecallStateViews,
|
|
12
|
-
|
|
12
|
+
resultStateViewKey,
|
|
13
13
|
shouldWidenSuperseded,
|
|
14
|
+
stateViewKey,
|
|
14
15
|
type StateViewResult,
|
|
15
16
|
} from "./recall-state-view.js";
|
|
16
17
|
|
|
@@ -45,21 +46,34 @@ export function widenRecallStateViews<T extends StateViewResult>(
|
|
|
45
46
|
if (!enabled || !isChangeOrientedQuery(query)) return results;
|
|
46
47
|
const asOfActive = typeof asOfMs === "number" && Number.isFinite(asOfMs);
|
|
47
48
|
|
|
49
|
+
// #2859: matches are namespace-qualified, and a successor's `supersedes`
|
|
50
|
+
// back-pointer anchors its predecessor even when the predecessor's own
|
|
51
|
+
// `supersededBy` is absent.
|
|
48
52
|
const candidateIds = new Set<string>();
|
|
53
|
+
const supersedesAnchors = new Set<string>();
|
|
49
54
|
for (const result of results) {
|
|
50
|
-
const
|
|
51
|
-
if (
|
|
55
|
+
const key = resultStateViewKey(result);
|
|
56
|
+
if (!key) continue;
|
|
57
|
+
candidateIds.add(key);
|
|
58
|
+
if (result.supersedes) {
|
|
59
|
+
supersedesAnchors.add(stateViewKey(result.namespace, result.supersedes));
|
|
60
|
+
}
|
|
52
61
|
}
|
|
53
62
|
|
|
54
63
|
const seen = new Set(candidateIds);
|
|
55
64
|
const extra: T[] = [];
|
|
56
65
|
if (!asOfActive) {
|
|
57
66
|
for (const item of pool) {
|
|
58
|
-
const
|
|
59
|
-
if (!
|
|
60
|
-
|
|
67
|
+
const key = resultStateViewKey(item);
|
|
68
|
+
if (!key || seen.has(key)) continue;
|
|
69
|
+
const successorKey = item.supersededBy
|
|
70
|
+
? stateViewKey(item.namespace, item.supersededBy)
|
|
71
|
+
: undefined;
|
|
72
|
+
if (!shouldWidenSuperseded(successorKey, candidateIds) && !supersedesAnchors.has(key)) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
61
75
|
extra.push(item);
|
|
62
|
-
seen.add(
|
|
76
|
+
seen.add(key);
|
|
63
77
|
}
|
|
64
78
|
}
|
|
65
79
|
|
|
@@ -143,6 +143,7 @@ type LiveFixtureRow = StateViewLine & {
|
|
|
143
143
|
score: number;
|
|
144
144
|
supersededAt?: string;
|
|
145
145
|
supersededBy?: string;
|
|
146
|
+
supersedes?: string;
|
|
146
147
|
};
|
|
147
148
|
|
|
148
149
|
// Review round 2: the earlier follow-up ran `injectStateViewLines`, which has
|
|
@@ -176,6 +177,7 @@ function liveEntries(
|
|
|
176
177
|
stateLabel: result.stateLabel,
|
|
177
178
|
...(result.supersededAt ? { supersededAt: result.supersededAt } : {}),
|
|
178
179
|
...(result.supersededBy ? { supersededBy: result.supersededBy } : {}),
|
|
180
|
+
...(result.supersedes ? { supersedes: result.supersedes } : {}),
|
|
179
181
|
}));
|
|
180
182
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- test fixture
|
|
181
183
|
const widened = applyRecallStateViews(qmdResults as any[], query, config);
|
|
@@ -289,3 +291,31 @@ test("the live route still renders every current entry it was given", () => {
|
|
|
289
291
|
assert.match(entries[0]!, /the API limit is 100\/min/);
|
|
290
292
|
assert.match(entries[1]!, /we chose SQLite/);
|
|
291
293
|
});
|
|
294
|
+
|
|
295
|
+
test("the enabled route renders history for a supersedes-only pair", () => {
|
|
296
|
+
const results = [
|
|
297
|
+
{
|
|
298
|
+
memoryId: "m-1",
|
|
299
|
+
text: "we use PostgreSQL",
|
|
300
|
+
stateLabel: "current" as const,
|
|
301
|
+
score: 0.9,
|
|
302
|
+
supersedes: "m-0",
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
memoryId: "m-0",
|
|
306
|
+
text: "we use SQLite",
|
|
307
|
+
stateLabel: "current" as const,
|
|
308
|
+
supersededAt: "2026-08-01",
|
|
309
|
+
score: 0.7,
|
|
310
|
+
},
|
|
311
|
+
];
|
|
312
|
+
const query = "what changed about the database?";
|
|
313
|
+
const enabled = liveEntries(results, query, true);
|
|
314
|
+
const old = enabled.entries.find((entry) => entry.includes("we use SQLite"));
|
|
315
|
+
assert.equal(
|
|
316
|
+
enabled.widened.find((row) => row.id === "m-0")?.stateLabel,
|
|
317
|
+
"historical",
|
|
318
|
+
);
|
|
319
|
+
assert.ok(old, "enabled render includes the predecessor");
|
|
320
|
+
assert.match(old!, /\[superseded 2026-08-01 by m-1\] we use SQLite/);
|
|
321
|
+
});
|
|
@@ -3,9 +3,11 @@ import test from "node:test";
|
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
annotateStateView,
|
|
6
|
+
capStateViewPackets,
|
|
6
7
|
formatSupersededPrefix,
|
|
7
8
|
isChangeOrientedQuery,
|
|
8
9
|
parseRecallStateViews,
|
|
10
|
+
reconcileStateViewPairs,
|
|
9
11
|
shouldWidenSuperseded,
|
|
10
12
|
type StateViewChain,
|
|
11
13
|
type StateViewResult,
|
|
@@ -271,3 +273,162 @@ test("transitive orphan chains collapse: A→B→(C absent) drops both A and B",
|
|
|
271
273
|
"the fixpoint must drop A once B is dropped, not render a dangling historical",
|
|
272
274
|
);
|
|
273
275
|
});
|
|
276
|
+
|
|
277
|
+
test("#2859 reverse chain derives from the successor supersedes back-pointer when supersededBy is absent", () => {
|
|
278
|
+
const results = [
|
|
279
|
+
fact("new-job", { status: "active", supersedes: "old-job" }),
|
|
280
|
+
// Corrected row: no supersededBy, and even no "superseded" status —
|
|
281
|
+
// the ONLY link is the successor's back-pointer.
|
|
282
|
+
fact("old-job", {}),
|
|
283
|
+
];
|
|
284
|
+
const labeled = annotateStateView(results, "when did the job title change", [], { enabled: true });
|
|
285
|
+
assert.deepEqual(
|
|
286
|
+
labeled.map((row) => [row.id, row.stateLabel, row.supersededBy]),
|
|
287
|
+
[
|
|
288
|
+
["new-job", "current", undefined],
|
|
289
|
+
["old-job", "historical", "new-job"],
|
|
290
|
+
],
|
|
291
|
+
"the back-pointer must link the pair, admit the predecessor, and carry derived supersededBy",
|
|
292
|
+
);
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
test("#2859 back-pointer pair survives the orphan fixpoint in both directions", () => {
|
|
296
|
+
const results = [
|
|
297
|
+
fact("v3", { status: "active", supersedes: "v2" }),
|
|
298
|
+
fact("v2", { status: "superseded", supersedes: "v1" }),
|
|
299
|
+
fact("v1", {}),
|
|
300
|
+
];
|
|
301
|
+
const labeled = annotateStateView(results, "what changed about the database", [], { enabled: true });
|
|
302
|
+
assert.deepEqual(
|
|
303
|
+
labeled.map((row) => [row.id, row.stateLabel]),
|
|
304
|
+
[
|
|
305
|
+
["v3", "current"],
|
|
306
|
+
["v2", "transition"],
|
|
307
|
+
["v1", "historical"],
|
|
308
|
+
],
|
|
309
|
+
);
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
test("#2859 asOf label uses the validity boundary, not the supersededAt write time", () => {
|
|
313
|
+
const pin = Date.parse("2026-08-05T00:00:00.000Z");
|
|
314
|
+
// Write time January, validity flip September: at an August pin the row
|
|
315
|
+
// was still the live fact even though supersededAt PREDATES the pin.
|
|
316
|
+
const predecessor = fact("old-job", {
|
|
317
|
+
status: "superseded",
|
|
318
|
+
supersededBy: "new-job",
|
|
319
|
+
supersededAt: "2026-01-01T00:00:00.000Z",
|
|
320
|
+
invalidAt: "2026-09-01T00:00:00.000Z",
|
|
321
|
+
});
|
|
322
|
+
const labeled = annotateStateView([predecessor], "when did the job title change", [], {
|
|
323
|
+
enabled: true,
|
|
324
|
+
asOfMs: pin,
|
|
325
|
+
});
|
|
326
|
+
assert.equal(
|
|
327
|
+
labeled[0]?.stateLabel,
|
|
328
|
+
"current",
|
|
329
|
+
"the boundary is invalidAt, so a pin before the flip labels the row current-at-snapshot",
|
|
330
|
+
);
|
|
331
|
+
|
|
332
|
+
// Past the boundary the same row labels historical (boundary <= pin).
|
|
333
|
+
const afterFlip = annotateStateView([predecessor], "when did the job title change", [], {
|
|
334
|
+
enabled: true,
|
|
335
|
+
asOfMs: Date.parse("2026-09-05T00:00:00.000Z"),
|
|
336
|
+
});
|
|
337
|
+
assert.equal(
|
|
338
|
+
afterFlip[0]?.stateLabel,
|
|
339
|
+
"historical",
|
|
340
|
+
"a pin past the validity flip labels the row historical",
|
|
341
|
+
);
|
|
342
|
+
|
|
343
|
+
// Legacy row without a validity window keeps the supersededAt fallback.
|
|
344
|
+
const legacy = fact("old-legacy", {
|
|
345
|
+
status: "superseded",
|
|
346
|
+
supersededBy: "new-legacy",
|
|
347
|
+
supersededAt: "2026-01-01T00:00:00.000Z",
|
|
348
|
+
});
|
|
349
|
+
const legacyLabel = annotateStateView([legacy], "when did the job title change", [], {
|
|
350
|
+
enabled: true,
|
|
351
|
+
asOfMs: pin,
|
|
352
|
+
});
|
|
353
|
+
assert.equal(
|
|
354
|
+
legacyLabel[0]?.stateLabel,
|
|
355
|
+
"historical",
|
|
356
|
+
"no invalidAt → the supersededAt write time is the only recorded boundary",
|
|
357
|
+
);
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
test("#2859 namespace-qualified identities: same id across namespaces never cross-anchors", () => {
|
|
361
|
+
// ns-a has the superseded predecessor; ns-b has an UNRELATED row that
|
|
362
|
+
// happens to reuse the successor id. Bare-id matching would admit the
|
|
363
|
+
// ns-a predecessor on the ns-b anchor.
|
|
364
|
+
const results = [
|
|
365
|
+
fact("m-1", { namespace: "ns-b", status: "active" }),
|
|
366
|
+
fact("m-0", { namespace: "ns-a", status: "superseded", supersededBy: "m-1" }),
|
|
367
|
+
];
|
|
368
|
+
const labeled = annotateStateView(results, "when did this change", [], { enabled: true });
|
|
369
|
+
assert.deepEqual(
|
|
370
|
+
labeled.map((row) => row.id),
|
|
371
|
+
["m-1"],
|
|
372
|
+
"a foreign-namespace successor must not anchor the superseded row",
|
|
373
|
+
);
|
|
374
|
+
|
|
375
|
+
// Positive control: the same-namespace successor anchors it.
|
|
376
|
+
const anchored = annotateStateView(
|
|
377
|
+
[
|
|
378
|
+
fact("m-1", { namespace: "ns-a", status: "active" }),
|
|
379
|
+
fact("m-0", { namespace: "ns-a", status: "superseded", supersededBy: "m-1" }),
|
|
380
|
+
],
|
|
381
|
+
"when did this change",
|
|
382
|
+
[],
|
|
383
|
+
{ enabled: true },
|
|
384
|
+
);
|
|
385
|
+
assert.deepEqual(
|
|
386
|
+
anchored.map((row) => [row.id, row.stateLabel]),
|
|
387
|
+
[
|
|
388
|
+
["m-1", "current"],
|
|
389
|
+
["m-0", "historical"],
|
|
390
|
+
],
|
|
391
|
+
);
|
|
392
|
+
});
|
|
393
|
+
|
|
394
|
+
test("#2859 namespace-qualified chains: a chain link never crosses namespaces", () => {
|
|
395
|
+
const chains: StateViewChain[] = [
|
|
396
|
+
{ predecessorId: "old", successorId: "new", namespace: "ns-a" },
|
|
397
|
+
];
|
|
398
|
+
const results = [
|
|
399
|
+
fact("new", { namespace: "ns-b", status: "active" }),
|
|
400
|
+
fact("old", { namespace: "ns-a", status: "superseded", supersededAt: "2026-02-01" }),
|
|
401
|
+
];
|
|
402
|
+
const labeled = annotateStateView(results, "before the correction what was it", chains, {
|
|
403
|
+
enabled: true,
|
|
404
|
+
});
|
|
405
|
+
assert.deepEqual(
|
|
406
|
+
labeled.map((row) => row.id),
|
|
407
|
+
["new"],
|
|
408
|
+
"the ns-a chain link must not pair against the ns-b successor",
|
|
409
|
+
);
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
test("reconcile drops a linkless superseded row so it cannot consume a packet slot", () => {
|
|
413
|
+
const rows = [
|
|
414
|
+
fact("legacy", { status: "superseded", supersededAt: "2026-01-01" }),
|
|
415
|
+
fact("live", { status: "active" }),
|
|
416
|
+
];
|
|
417
|
+
assert.deepEqual(
|
|
418
|
+
reconcileStateViewPairs(rows).map((row) => row.id),
|
|
419
|
+
["live"],
|
|
420
|
+
"audit/kill-switch status-only rows have no successor and must leave before the cap",
|
|
421
|
+
);
|
|
422
|
+
assert.deepEqual(
|
|
423
|
+
capStateViewPackets(reconcileStateViewPairs(rows), 1).map((row) => row.id),
|
|
424
|
+
["live"],
|
|
425
|
+
);
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
test("reconcile still keeps an unlinked active row", () => {
|
|
429
|
+
const rows = [fact("solo", { status: "active" })];
|
|
430
|
+
assert.deepEqual(
|
|
431
|
+
reconcileStateViewPairs(rows).map((row) => row.id),
|
|
432
|
+
["solo"],
|
|
433
|
+
);
|
|
434
|
+
});
|