@remnic/core 9.69.32 → 9.69.34

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.
Files changed (775) hide show
  1. package/dist/access-admin-ops-surface.d.ts +13 -11
  2. package/dist/access-admin-ops-surface.js +64 -59
  3. package/dist/access-authorization-probe.d.ts +13 -11
  4. package/dist/access-authorization-probe.js +65 -60
  5. package/dist/access-boundary.d.ts +13 -11
  6. package/dist/access-boundary.js +64 -59
  7. package/dist/access-cli.js +140 -136
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-coding-context-resolution.d.ts +2 -1
  10. package/dist/access-coding-context-resolution.js +3 -3
  11. package/dist/access-extraction-force-flush.d.ts +13 -11
  12. package/dist/access-extraction-force-flush.js +64 -59
  13. package/dist/access-health-types.d.ts +2 -1
  14. package/dist/access-http-briefing.d.ts +13 -11
  15. package/dist/access-http-briefing.js +65 -60
  16. package/dist/access-http-lcm-compaction.d.ts +13 -11
  17. package/dist/access-http-lifecycle-flush.d.ts +13 -11
  18. package/dist/access-http-offline-stream.d.ts +13 -11
  19. package/dist/access-http-query.d.ts +3 -2
  20. package/dist/access-http-query.js +66 -61
  21. package/dist/access-http.d.ts +14 -12
  22. package/dist/access-http.js +86 -82
  23. package/dist/access-identity-continuity-surface.d.ts +11 -9
  24. package/dist/access-identity-continuity-surface.js +64 -59
  25. package/dist/access-lcm-surface.d.ts +13 -11
  26. package/dist/access-lcm-surface.js +64 -59
  27. package/dist/access-mcp.d.ts +13 -11
  28. package/dist/access-mcp.js +73 -69
  29. package/dist/access-memory-search-fanout.d.ts +3 -2
  30. package/dist/{access-namespace-preflight-BsvmyENS.d.ts → access-namespace-preflight-kXG8MvYx.d.ts} +1 -1
  31. package/dist/access-namespace-preflight.d.ts +4 -3
  32. package/dist/access-namespace-preflight.js +64 -59
  33. package/dist/access-observe-transcript.d.ts +11 -9
  34. package/dist/access-observe-transcript.js +3 -3
  35. package/dist/access-observe-write-surface.d.ts +15 -13
  36. package/dist/access-observe-write-surface.js +64 -59
  37. package/dist/access-offline-manifest.d.ts +47 -11
  38. package/dist/access-offline-manifest.js +18 -16
  39. package/dist/access-operations-batch.js +67 -63
  40. package/dist/access-operations.d.ts +18 -16
  41. package/dist/access-operations.js +72 -68
  42. package/dist/access-recall-concurrency.d.ts +13 -11
  43. package/dist/access-recall-concurrency.js +64 -59
  44. package/dist/access-recall-response.d.ts +13 -11
  45. package/dist/access-recall-response.js +64 -59
  46. package/dist/access-recall-surface.d.ts +13 -11
  47. package/dist/access-recall-surface.js +64 -59
  48. package/dist/access-schema.d.ts +138 -96
  49. package/dist/access-schema.js +15 -1
  50. package/dist/{access-service-CCpOuS46.d.ts → access-service-WUm2LnXZ.d.ts} +110 -108
  51. package/dist/access-service-helpers.d.ts +13 -11
  52. package/dist/access-service.d.ts +13 -11
  53. package/dist/access-service.js +64 -59
  54. package/dist/access-surface-catalog.d.ts +13 -11
  55. package/dist/access-surface-catalog.js +66 -61
  56. package/dist/access-surface-catalog.js.map +1 -1
  57. package/dist/access-wearables-meetings-surface.d.ts +4 -3
  58. package/dist/action-confidence.d.ts +2 -1
  59. package/dist/active-memory-bridge.d.ts +2 -1
  60. package/dist/active-memory-bridge.js +2 -2
  61. package/dist/active-recall.d.ts +2 -1
  62. package/dist/active-recall.js +14 -12
  63. package/dist/active-recall.js.map +1 -1
  64. package/dist/activity/digest.d.ts +56 -0
  65. package/dist/activity/digest.js +32 -0
  66. package/dist/adapters/index.d.ts +46 -1
  67. package/dist/adapters/index.js +13 -9
  68. package/dist/adapters/registry.js +3 -3
  69. package/dist/ambient-provenance.d.ts +2 -1
  70. package/dist/artifact-search.d.ts +2 -1
  71. package/dist/{auto-sync-NSHLUAQI.js → auto-sync-4YFATLFQ.js} +10 -9
  72. package/dist/{auto-sync-NSHLUAQI.js.map → auto-sync-4YFATLFQ.js.map} +1 -1
  73. package/dist/behavior-learner.d.ts +2 -1
  74. package/dist/behavior-signals.d.ts +2 -1
  75. package/dist/bootstrap.d.ts +11 -9
  76. package/dist/briefing-window.d.ts +3 -2
  77. package/dist/briefing.d.ts +3 -2
  78. package/dist/briefing.js +28 -27
  79. package/dist/buffer-surprise-report.d.ts +2 -1
  80. package/dist/buffer-turn-helpers.d.ts +2 -1
  81. package/dist/buffer.d.ts +3 -2
  82. package/dist/buffer.js +12 -11
  83. package/dist/bulk-import/index.d.ts +4 -3
  84. package/dist/calibration.d.ts +2 -1
  85. package/dist/calibration.js +3 -2
  86. package/dist/calibration.js.map +1 -1
  87. package/dist/capabilities.d.ts +2 -1
  88. package/dist/{capsule-merge-IPG4IOFP.js → capsule-merge-ZCXUPLNJ.js} +2 -2
  89. package/dist/{catalog-CDZLyiXL.d.ts → catalog-BaCx29iv.d.ts} +1 -1
  90. package/dist/causal-behavior.d.ts +2 -1
  91. package/dist/causal-consolidation.d.ts +2 -1
  92. package/dist/causal-consolidation.js +29 -28
  93. package/dist/causal-consolidation.js.map +1 -1
  94. package/dist/causal-trajectory-graph.d.ts +2 -1
  95. package/dist/{chunk-CDKHKZL5.js → chunk-2524MOWK.js} +2 -2
  96. package/dist/{chunk-HVAEXYPL.js → chunk-255PC37A.js} +47 -25
  97. package/dist/chunk-255PC37A.js.map +1 -0
  98. package/dist/{chunk-IY2FVXM6.js → chunk-2AU4D4HQ.js} +3 -3
  99. package/dist/{chunk-QDY6KYTN.js → chunk-2JCA2PQT.js} +3 -3
  100. package/dist/{chunk-RSVEP77Y.js → chunk-2UZ5ZH6W.js} +3 -3
  101. package/dist/{chunk-XQ2Q43XD.js → chunk-326KUXIR.js} +15 -648
  102. package/dist/chunk-326KUXIR.js.map +1 -0
  103. package/dist/{chunk-NWWXSJX5.js → chunk-34QW2LK2.js} +2 -2
  104. package/dist/{chunk-S7DPKM5W.js → chunk-353C5UNV.js} +1 -1
  105. package/dist/{chunk-GQOMZ3MK.js → chunk-36UBSLFN.js} +2 -2
  106. package/dist/{chunk-DBQWVT2H.js → chunk-3CBI2ZSA.js} +2 -2
  107. package/dist/{chunk-NZXEK3UF.js → chunk-3Q3N35W7.js} +2 -2
  108. package/dist/{chunk-YYGZJPOK.js → chunk-42DJ235G.js} +2 -2
  109. package/dist/{chunk-7VJXIDOC.js → chunk-4JVQRFZD.js} +9 -9
  110. package/dist/{chunk-22FVR2KE.js → chunk-4MIS4CQW.js} +6 -2
  111. package/dist/chunk-4MIS4CQW.js.map +1 -0
  112. package/dist/{chunk-WHBVXTUI.js → chunk-4PB2MBY6.js} +9 -9
  113. package/dist/{chunk-TEYN7ZYF.js → chunk-4WCNPQQ5.js} +4 -4
  114. package/dist/{chunk-Z4PCVRTN.js → chunk-5A7ZUOBA.js} +217 -396
  115. package/dist/chunk-5A7ZUOBA.js.map +1 -0
  116. package/dist/chunk-5HYUUFMQ.js +1280 -0
  117. package/dist/chunk-5HYUUFMQ.js.map +1 -0
  118. package/dist/{chunk-RBGREYVJ.js → chunk-5QBDLMGG.js} +2 -2
  119. package/dist/{chunk-RKBLRTNT.js → chunk-5SDSVX7N.js} +2 -2
  120. package/dist/{chunk-LPECRQO4.js → chunk-5THU7NFP.js} +3 -3
  121. package/dist/{chunk-N7RWREIQ.js → chunk-65RENJGB.js} +6 -1
  122. package/dist/chunk-65RENJGB.js.map +1 -0
  123. package/dist/{chunk-LWA7MDVO.js → chunk-6CCRSQWT.js} +2 -2
  124. package/dist/{chunk-TIT2C6WX.js → chunk-6XYC7NM4.js} +2 -2
  125. package/dist/{chunk-FHQSPTPZ.js → chunk-6YAIN5XJ.js} +2 -2
  126. package/dist/{chunk-PV36INNL.js → chunk-757NP436.js} +3 -3
  127. package/dist/{chunk-WJBZMNNS.js → chunk-7CAY3YKP.js} +742 -29
  128. package/dist/chunk-7CAY3YKP.js.map +1 -0
  129. package/dist/{chunk-6H5JYDOM.js → chunk-7J2CGXG3.js} +2 -2
  130. package/dist/{chunk-FBMYGNOC.js → chunk-A2YQL2FF.js} +6 -6
  131. package/dist/chunk-A5UQ52YQ.js +211 -0
  132. package/dist/chunk-A5UQ52YQ.js.map +1 -0
  133. package/dist/{chunk-X2NFFBTO.js → chunk-A7GQBJP5.js} +4 -4
  134. package/dist/{chunk-MPYD657E.js → chunk-A7WOWDZK.js} +2 -2
  135. package/dist/{chunk-C4OTC6WY.js → chunk-AIKTQVV3.js} +3 -3
  136. package/dist/{chunk-CGC5UQCF.js → chunk-AKE4GGQ3.js} +2 -2
  137. package/dist/{chunk-VP67GZ7T.js → chunk-APFKZVJS.js} +2 -2
  138. package/dist/{chunk-M75RYSHS.js → chunk-AQIRQUCP.js} +2 -2
  139. package/dist/{chunk-S7T2TY65.js → chunk-AXFR2NQ5.js} +3 -3
  140. package/dist/{chunk-PSPABFN2.js → chunk-BD7JTBYP.js} +4 -4
  141. package/dist/{chunk-FCSZ4K2X.js → chunk-BJJWRWER.js} +3 -3
  142. package/dist/{chunk-JT3EB7ZL.js → chunk-BNGHPYZU.js} +5 -5
  143. package/dist/chunk-BRZWWUCJ.js +13 -0
  144. package/dist/{chunk-FYDW33ZB.js.map → chunk-BRZWWUCJ.js.map} +1 -1
  145. package/dist/{chunk-MFJBANPX.js → chunk-C2BFTYD7.js} +2 -2
  146. package/dist/{chunk-3JVLGJCY.js → chunk-C6KRO3SU.js} +2 -2
  147. package/dist/{chunk-Q3O3VKRB.js → chunk-CRUFVJOX.js} +16 -15
  148. package/dist/chunk-CRUFVJOX.js.map +1 -0
  149. package/dist/{chunk-AOCP6JA7.js → chunk-D3IZCN5P.js} +4 -4
  150. package/dist/{chunk-ROKKIMON.js → chunk-EJIEQOPB.js} +5 -5
  151. package/dist/{chunk-ET356KSB.js → chunk-F4TWWUMP.js} +2 -2
  152. package/dist/{chunk-CLLPJ6QT.js → chunk-FQXJAC3T.js} +2 -2
  153. package/dist/{chunk-DD5JFCWM.js → chunk-GCBIXUPT.js} +2 -2
  154. package/dist/{chunk-ROGRI25A.js → chunk-I3H5LFOI.js} +2 -2
  155. package/dist/{chunk-S65WXHNK.js → chunk-IFFLUCCU.js} +2 -2
  156. package/dist/{chunk-MYMNC6O5.js → chunk-ISYZ5DUI.js} +64 -60
  157. package/dist/{chunk-MYMNC6O5.js.map → chunk-ISYZ5DUI.js.map} +1 -1
  158. package/dist/{chunk-D5LORF7A.js → chunk-JZDH2ZZK.js} +3 -3
  159. package/dist/{chunk-2GPE5UCR.js → chunk-K6IPSW5B.js} +2 -2
  160. package/dist/{chunk-HG6HXVHQ.js → chunk-KDJHLOZP.js} +10 -10
  161. package/dist/{chunk-I27RSQRR.js → chunk-KYGOQV37.js} +2 -2
  162. package/dist/{chunk-JEIXTYVG.js → chunk-L2QLDZJC.js} +46 -17
  163. package/dist/chunk-L2QLDZJC.js.map +1 -0
  164. package/dist/{chunk-A7XEPMQ6.js → chunk-LAVJC57X.js} +3 -3
  165. package/dist/chunk-LAVJC57X.js.map +1 -0
  166. package/dist/{chunk-VZWXFXLX.js → chunk-LMCD5W5B.js} +2 -2
  167. package/dist/{chunk-3QQTXYZ6.js → chunk-LSLCFCCQ.js} +2 -1
  168. package/dist/chunk-LSLCFCCQ.js.map +1 -0
  169. package/dist/{chunk-MKD3OMPS.js → chunk-M3MYMWXG.js} +2 -2
  170. package/dist/{chunk-DITMGZOL.js → chunk-MMG5K6XJ.js} +2 -2
  171. package/dist/{chunk-VGXM5B4H.js → chunk-MNIPH6LD.js} +2 -2
  172. package/dist/{chunk-CZYYJZB6.js → chunk-ND2O2PVN.js} +1014 -1318
  173. package/dist/chunk-ND2O2PVN.js.map +1 -0
  174. package/dist/chunk-NPNSKE76.js +220 -0
  175. package/dist/chunk-NPNSKE76.js.map +1 -0
  176. package/dist/{chunk-MKWKYHXJ.js → chunk-OB3XMWX5.js} +4 -4
  177. package/dist/{chunk-XU6OEECT.js → chunk-OQQXGYMX.js} +3 -3
  178. package/dist/{chunk-GTWHVXPA.js → chunk-OZUXKUPD.js} +6 -4
  179. package/dist/{chunk-GTWHVXPA.js.map → chunk-OZUXKUPD.js.map} +1 -1
  180. package/dist/chunk-PCEYGOSL.js +66 -0
  181. package/dist/chunk-PCEYGOSL.js.map +1 -0
  182. package/dist/{chunk-47DEYNMR.js → chunk-PEXW2JCK.js} +2 -2
  183. package/dist/{chunk-EEOUMG3J.js → chunk-PWPIERBM.js} +38 -6
  184. package/dist/chunk-PWPIERBM.js.map +1 -0
  185. package/dist/chunk-Q4AUIFUA.js +111 -0
  186. package/dist/chunk-Q4AUIFUA.js.map +1 -0
  187. package/dist/{chunk-SO7SV523.js → chunk-Q6LCCIZN.js} +1 -1
  188. package/dist/chunk-Q6LCCIZN.js.map +1 -0
  189. package/dist/{chunk-42SDNZCU.js → chunk-QF4J3KMV.js} +19 -19
  190. package/dist/{chunk-SB6PSOP7.js → chunk-QLJ6762U.js} +2 -2
  191. package/dist/{chunk-XOVKXJEP.js → chunk-R3TLVTWW.js} +3 -3
  192. package/dist/{chunk-PHNAB54Q.js → chunk-RQO3J4MR.js} +2 -2
  193. package/dist/{chunk-5N53UBH2.js → chunk-RR7G2X7C.js} +5 -5
  194. package/dist/{chunk-DCJ3YFIC.js → chunk-S2ULTQZR.js} +2 -2
  195. package/dist/{chunk-GY5WZBA6.js → chunk-S76KRJDG.js} +3 -3
  196. package/dist/{chunk-H272ZPQ3.js → chunk-SHEHQBCG.js} +124 -23
  197. package/dist/chunk-SHEHQBCG.js.map +1 -0
  198. package/dist/{chunk-EEC4PCG5.js → chunk-SZDLX763.js} +2 -2
  199. package/dist/{chunk-SQJ3SDIW.js → chunk-SZWEDG3H.js} +13 -7
  200. package/dist/chunk-SZWEDG3H.js.map +1 -0
  201. package/dist/{chunk-E2ZHGBAK.js → chunk-T2JSUEH6.js} +2 -2
  202. package/dist/{chunk-QMGXMJ2O.js → chunk-T2YFZ27G.js} +9 -9
  203. package/dist/{chunk-LEPOP46W.js → chunk-TFA6HPOA.js} +4 -4
  204. package/dist/{chunk-BA6WOZOT.js → chunk-TK4FHQRN.js} +4 -4
  205. package/dist/chunk-TLHNF6GA.js +647 -0
  206. package/dist/chunk-TLHNF6GA.js.map +1 -0
  207. package/dist/{chunk-ZNJSBIP4.js → chunk-TNSCIPBQ.js} +4 -4
  208. package/dist/{chunk-YUMDFDUA.js → chunk-TWYTGIBR.js} +4 -4
  209. package/dist/{chunk-FDLDOEO6.js → chunk-UBG4GAEP.js} +51 -6
  210. package/dist/chunk-UBG4GAEP.js.map +1 -0
  211. package/dist/{chunk-EZZV7OQL.js → chunk-UEZKN6VR.js} +2 -2
  212. package/dist/{chunk-HY55QQD7.js → chunk-UJX4I26O.js} +2 -2
  213. package/dist/{chunk-BLUYQFRH.js → chunk-VELCIWJZ.js} +15 -11
  214. package/dist/chunk-VELCIWJZ.js.map +1 -0
  215. package/dist/{chunk-CBCNKKZD.js → chunk-VIZR45AN.js} +2 -2
  216. package/dist/{chunk-ZG74PWRW.js → chunk-VZAKYDMJ.js} +2 -2
  217. package/dist/{chunk-ITPS5DDH.js → chunk-W5BLTZZJ.js} +8 -8
  218. package/dist/chunk-W6IJMWTZ.js +72 -0
  219. package/dist/chunk-W6IJMWTZ.js.map +1 -0
  220. package/dist/{chunk-H3TKENU4.js → chunk-WIKO4SCR.js} +5 -5
  221. package/dist/{chunk-YFLLGRXO.js → chunk-X2QPKLPL.js} +2 -2
  222. package/dist/{chunk-FGGYSN4P.js → chunk-X424T5JQ.js} +2 -2
  223. package/dist/{chunk-NAXDPKVM.js → chunk-XPJNT6PI.js} +4 -4
  224. package/dist/{chunk-2JVJ7UHC.js → chunk-XQU3CPF2.js} +4 -2
  225. package/dist/chunk-XQU3CPF2.js.map +1 -0
  226. package/dist/chunk-XW2T4QAW.js +1 -0
  227. package/dist/{chunk-VED2YHUD.js → chunk-YEDVOYL2.js} +2 -2
  228. package/dist/{chunk-TLPZ6MKZ.js → chunk-YEN4TREG.js} +541 -5
  229. package/dist/chunk-YEN4TREG.js.map +1 -0
  230. package/dist/{chunk-RC5DXXWC.js → chunk-YM7YN37H.js} +2 -2
  231. package/dist/{chunk-VLXBE57O.js → chunk-YVGXH72Y.js} +2 -2
  232. package/dist/{chunk-YQAXP5AC.js → chunk-YXLUTALO.js} +5 -5
  233. package/dist/{chunk-565C6ZFO.js → chunk-Z7YDVHDI.js} +2 -2
  234. package/dist/{chunk-O75CRYGF.js → chunk-ZEFVK7XC.js} +1 -1
  235. package/dist/chunk-ZEFVK7XC.js.map +1 -0
  236. package/dist/{chunk-XUE46UYW.js → chunk-ZLN7AROH.js} +6 -6
  237. package/dist/{chunk-GVG3JYBI.js → chunk-ZMKYCFJ7.js} +640 -199
  238. package/dist/chunk-ZMKYCFJ7.js.map +1 -0
  239. package/dist/{chunk-HK32G473.js → chunk-ZWEZXVYH.js} +2 -2
  240. package/dist/{cli-NEEdq5Rt.d.ts → cli-5mTYh1Tn.d.ts} +5 -5
  241. package/dist/cli-fallback.d.ts +11 -4
  242. package/dist/cli-fallback.js +5 -1
  243. package/dist/cli.d.ts +15 -13
  244. package/dist/cli.js +110 -106
  245. package/dist/coding/export-okf-codegraph.d.ts +2 -1
  246. package/dist/coding/export-okf-codegraph.js +34 -32
  247. package/dist/coding/export-okf-codegraph.js.map +1 -1
  248. package/dist/coding/pre-action-gate.d.ts +2 -1
  249. package/dist/compat/checks.js +2 -2
  250. package/dist/compat/codex-cli-fallback.d.ts +1 -1
  251. package/dist/compat/codex-cli-fallback.js +5 -1
  252. package/dist/compat/codex-cli-fallback.js.map +1 -1
  253. package/dist/compounding/engine.d.ts +3 -2
  254. package/dist/compounding/engine.js +29 -28
  255. package/dist/compounding/preference-consolidator.d.ts +2 -1
  256. package/dist/compression-optimizer.d.ts +2 -1
  257. package/dist/config.d.ts +2 -1
  258. package/dist/config.js +14 -12
  259. package/dist/connectors/codex-materialize-runner.d.ts +2 -1
  260. package/dist/connectors/codex-materialize-runner.js +28 -27
  261. package/dist/connectors/codex-materialize.d.ts +2 -1
  262. package/dist/connectors/index.d.ts +2 -1
  263. package/dist/connectors/index.js +30 -29
  264. package/dist/consolidation-provenance-check.d.ts +3 -2
  265. package/dist/consolidation-undo.d.ts +3 -2
  266. package/dist/contradiction/index.d.ts +4 -3
  267. package/dist/contradiction/index.js +5 -5
  268. package/dist/{contradiction-scan-NOYMFG66.js → contradiction-scan-GVD4JJ7B.js} +3 -3
  269. package/dist/converge-config.d.ts +2 -1
  270. package/dist/convergence-refresh.d.ts +3 -2
  271. package/dist/convergence-refresh.js +30 -29
  272. package/dist/conversation-index/backend.d.ts +2 -1
  273. package/dist/conversation-index/backend.js +3 -3
  274. package/dist/conversation-index/chunker.d.ts +2 -1
  275. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  276. package/dist/conversation-index/faiss-adapter.js +2 -2
  277. package/dist/conversation-index/indexer.d.ts +2 -1
  278. package/dist/conversation-index/search.d.ts +2 -1
  279. package/dist/corpus-watermark.d.ts +2 -1
  280. package/dist/corpus-watermark.js +31 -30
  281. package/dist/cross-lingual-recall.d.ts +2 -1
  282. package/dist/day-summary.d.ts +2 -1
  283. package/dist/deep-recall-http-glue.d.ts +13 -11
  284. package/dist/deep-recall-http-glue.js +12 -2
  285. package/dist/deep-recall-mcp-tools.d.ts +13 -11
  286. package/dist/deep-recall-policy-llm.d.ts +2 -1
  287. package/dist/deep-recall-policy-llm.js +4 -3
  288. package/dist/deep-recall-seeds.d.ts +2 -1
  289. package/dist/delinearize.d.ts +2 -1
  290. package/dist/dependency-propagation-config.d.ts +2 -1
  291. package/dist/{dependency-propagation-delivery-CQPCu0o5.d.ts → dependency-propagation-delivery-CDQCxNll.d.ts} +1 -1
  292. package/dist/direct-answer-wiring.d.ts +2 -1
  293. package/dist/direct-answer.d.ts +2 -1
  294. package/dist/embedding-fallback.d.ts +2 -1
  295. package/dist/enrichment/index.d.ts +2 -1
  296. package/dist/entity-origin-fields.d.ts +2 -1
  297. package/dist/entity-retrieval.d.ts +3 -2
  298. package/dist/entity-retrieval.js +28 -27
  299. package/dist/entity-schema.d.ts +2 -1
  300. package/dist/episodic-context.d.ts +2 -1
  301. package/dist/eval-trajectory-contracts.d.ts +2 -1
  302. package/dist/eval-trajectory-store.d.ts +2 -1
  303. package/dist/eval-trajectory.d.ts +2 -1
  304. package/dist/explicit-capture.d.ts +11 -9
  305. package/dist/explicit-capture.js +6 -6
  306. package/dist/external-wiki-access.d.ts +13 -11
  307. package/dist/external-wiki-access.js +65 -60
  308. package/dist/external-wiki-collection-registration.d.ts +2 -1
  309. package/dist/external-wiki-collection.d.ts +2 -1
  310. package/dist/external-wiki-mcp-tools.d.ts +13 -11
  311. package/dist/extraction-error-classification.d.ts +2 -1
  312. package/dist/extraction-faithfulness.d.ts +2 -1
  313. package/dist/extraction-faithfulness.js +4 -3
  314. package/dist/extraction-judge-telemetry.d.ts +2 -1
  315. package/dist/extraction-judge-training.d.ts +2 -1
  316. package/dist/extraction-judge.d.ts +2 -1
  317. package/dist/extraction-judge.js +5 -4
  318. package/dist/extraction-liveness.d.ts +2 -1
  319. package/dist/extraction-normalization.d.ts +2 -1
  320. package/dist/extraction-prompt.d.ts +2 -1
  321. package/dist/extraction-source-grounding-rules.d.ts +2 -1
  322. package/dist/extraction-source-grounding.d.ts +2 -1
  323. package/dist/extraction.d.ts +2 -1
  324. package/dist/extraction.js +40 -38
  325. package/dist/fallback-llm.d.ts +2 -1
  326. package/dist/fallback-llm.js +3 -2
  327. package/dist/{first-start-migration-RC345GPL.js → first-start-migration-L3UFX5CU.js} +3 -3
  328. package/dist/generic-recall-paths-CqAZyXKX.d.ts +23 -0
  329. package/dist/graph-append-error.d.ts +2 -1
  330. package/dist/graph-dashboard-diff.d.ts +2 -1
  331. package/dist/graph-dashboard-key.d.ts +2 -1
  332. package/dist/graph-dashboard-parser.d.ts +2 -1
  333. package/dist/graph-edge-reinforcement.d.ts +2 -1
  334. package/dist/graph-jsonl.d.ts +2 -1
  335. package/dist/graph-path-reconstruction.d.ts +2 -1
  336. package/dist/graph-path-scoring.d.ts +2 -1
  337. package/dist/graph-snapshot.d.ts +2 -1
  338. package/dist/graph.d.ts +2 -1
  339. package/dist/harmonic-retrieval.js +2 -2
  340. package/dist/importance.d.ts +2 -1
  341. package/dist/importers/index.d.ts +2 -1
  342. package/dist/importers/test-utils.d.ts +2 -1
  343. package/dist/in-flight-reads.d.ts +2 -1
  344. package/dist/{index-C9VXenR8.d.ts → index-BNluTxBp.d.ts} +2 -2
  345. package/dist/index.d.ts +963 -945
  346. package/dist/index.js +323 -221
  347. package/dist/intent.d.ts +2 -1
  348. package/dist/lcm/engine.d.ts +2 -1
  349. package/dist/lcm/engine.js +2 -2
  350. package/dist/lcm/index.d.ts +2 -1
  351. package/dist/lcm/index.js +7 -7
  352. package/dist/lcm/tools.d.ts +2 -1
  353. package/dist/lifecycle.d.ts +2 -1
  354. package/dist/live-connectors-runner.d.ts +2 -1
  355. package/dist/local-llm.d.ts +4 -1
  356. package/dist/local-llm.js +2 -2
  357. package/dist/local-model-endpoint.d.ts +2 -1
  358. package/dist/location/index.d.ts +4 -3
  359. package/dist/location/index.js +33 -32
  360. package/dist/maintenance/memory-governance.d.ts +2 -1
  361. package/dist/maintenance/memory-governance.js +28 -27
  362. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
  363. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +28 -27
  364. package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
  365. package/dist/maintenance/rebuild-memory-projection.js +29 -28
  366. package/dist/{maintenance-C14sorKa.d.ts → maintenance-8hmWOMY_.d.ts} +378 -4
  367. package/dist/mcp-memory-inspector-app.d.ts +13 -11
  368. package/dist/memory-action-policy.d.ts +2 -1
  369. package/dist/memory-cache.d.ts +2 -1
  370. package/dist/memory-controller.d.ts +2 -1
  371. package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
  372. package/dist/memory-projection-store.d.ts +2 -1
  373. package/dist/memory-provenance.d.ts +2 -1
  374. package/dist/memory-snapshot.d.ts +2 -1
  375. package/dist/memory-subject-cli.d.ts +13 -11
  376. package/dist/memory-subject.d.ts +13 -11
  377. package/dist/memory-worth-outcomes.d.ts +3 -2
  378. package/dist/migrate/from-engram.js +2 -2
  379. package/dist/models-json.d.ts +2 -1
  380. package/dist/namespaces/migrate.d.ts +4 -3
  381. package/dist/namespaces/migrate.js +29 -28
  382. package/dist/namespaces/principal.d.ts +2 -1
  383. package/dist/namespaces/search.d.ts +2 -1
  384. package/dist/namespaces/search.js +11 -11
  385. package/dist/namespaces/storage.d.ts +4 -3
  386. package/dist/namespaces/storage.js +28 -27
  387. package/dist/native-knowledge.d.ts +2 -1
  388. package/dist/network/tailscale.js +2 -2
  389. package/dist/offline-sync-impression-drain.d.ts +2 -1
  390. package/dist/offline-sync-impression-drain.js +6 -6
  391. package/dist/operator-doctor-corpus.d.ts +2 -1
  392. package/dist/operator-doctor-corpus.js +32 -31
  393. package/dist/operator-doctor-replica.d.ts +2 -1
  394. package/dist/operator-toolkit.d.ts +4 -3
  395. package/dist/operator-toolkit.js +48 -46
  396. package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
  397. package/dist/orchestration/maintenance.d.ts +5 -4
  398. package/dist/orchestration/maintenance.js +47 -42
  399. package/dist/{orchestrator-kqSzGv7e.d.ts → orchestrator-BUd_3Q86.d.ts} +17 -29
  400. package/dist/orchestrator.d.ts +11 -9
  401. package/dist/orchestrator.js +144 -138
  402. package/dist/patterns-cli.d.ts +2 -1
  403. package/dist/{pipeline-DRUwHb1X.d.ts → pipeline-Dv1Bv0ma.d.ts} +1 -1
  404. package/dist/policy-runtime.d.ts +2 -1
  405. package/dist/proactive-contention.d.ts +2 -1
  406. package/dist/provenance.d.ts +2 -1
  407. package/dist/{public-http-CW3l0g3P.d.ts → public-http-L-IymRBN.d.ts} +1 -1
  408. package/dist/{qmd-BVWlg1YS.d.ts → qmd-Mj508lHA.d.ts} +1 -1
  409. package/dist/qmd-preflight.d.ts +3 -2
  410. package/dist/qmd-recall-cache.d.ts +2 -1
  411. package/dist/qmd.d.ts +3 -2
  412. package/dist/qmd.js +2 -2
  413. package/dist/recall-concurrency-config.d.ts +2 -1
  414. package/dist/recall-disclosure-escalation.d.ts +2 -1
  415. package/dist/recall-explain-renderer.d.ts +2 -1
  416. package/dist/recall-explain-renderer.js +3 -3
  417. package/dist/recall-memory-map.d.ts +2 -1
  418. package/dist/recall-navigate-access.d.ts +2 -1
  419. package/dist/recall-navigate-access.js +2 -2
  420. package/dist/recall-navigate-disclosure.d.ts +2 -1
  421. package/dist/recall-navigate-disclosure.js +1 -1
  422. package/dist/recall-navigate.d.ts +2 -1
  423. package/dist/recall-navigate.js +2 -2
  424. package/dist/recall-planner-llm.d.ts +2 -1
  425. package/dist/recall-planner-llm.js +3 -2
  426. package/dist/recall-planner-llm.js.map +1 -1
  427. package/dist/recall-state-view-admission.d.ts +56 -0
  428. package/dist/recall-state-view-admission.js +39 -0
  429. package/dist/recall-state-view-admission.js.map +1 -0
  430. package/dist/recall-state-view-inject.js +2 -2
  431. package/dist/recall-state-view-render.js +2 -2
  432. package/dist/recall-state-view-widen.d.ts +18 -1
  433. package/dist/recall-state-view-widen.js +2 -2
  434. package/dist/recall-state-view-wire.d.ts +1 -1
  435. package/dist/recall-state-view-wire.js +3 -3
  436. package/dist/recall-state-view.d.ts +1 -0
  437. package/dist/recall-state-view.js +1 -1
  438. package/dist/recall-state.d.ts +2 -1
  439. package/dist/recall-tag-filter.d.ts +2 -1
  440. package/dist/recall-timings.d.ts +2 -1
  441. package/dist/recall-xray-cli.d.ts +2 -1
  442. package/dist/recall-xray-cli.js +4 -4
  443. package/dist/recall-xray-renderer.d.ts +2 -1
  444. package/dist/recall-xray-renderer.js +3 -3
  445. package/dist/recall-xray.d.ts +9 -1
  446. package/dist/recall-xray.js +2 -2
  447. package/dist/reconcile/cursor.d.ts +11 -2
  448. package/dist/reconcile/cursor.js +6 -4
  449. package/dist/reconcile/cursor.js.map +1 -1
  450. package/dist/reconcile/manifest.d.ts +37 -2
  451. package/dist/reconcile/manifest.js +15 -5
  452. package/dist/reconcile/plan.d.ts +2 -1
  453. package/dist/replay/normalizers/chatgpt.d.ts +2 -1
  454. package/dist/replay/normalizers/claude.d.ts +2 -1
  455. package/dist/replay/normalizers/openclaw.d.ts +2 -1
  456. package/dist/replay/normalizers/shared.d.ts +2 -1
  457. package/dist/replay/runner.d.ts +2 -1
  458. package/dist/replay/types.d.ts +2 -1
  459. package/dist/replica-divergence.d.ts +2 -1
  460. package/dist/replica-peers-config.d.ts +2 -1
  461. package/dist/{resolution-VKATP2HT.js → resolution-OHJZG45O.js} +6 -6
  462. package/dist/resolution-OHJZG45O.js.map +1 -0
  463. package/dist/resolve-auth-token.d.ts +2 -1
  464. package/dist/resume-bundles.js +15 -13
  465. package/dist/retrieval-agents.d.ts +3 -2
  466. package/dist/retrieval-tiers.d.ts +2 -1
  467. package/dist/routing/engine.d.ts +2 -1
  468. package/dist/routing/store.d.ts +2 -1
  469. package/dist/runtime/child-process.d.ts +1 -1
  470. package/dist/runtime/child-process.js +1 -1
  471. package/dist/salvage-envelope.d.ts +2 -1
  472. package/dist/salvage-envelope.js +2 -2
  473. package/dist/schemas.d.ts +176 -176
  474. package/dist/{scope-profiles-Vl00B1KU.d.ts → scope-profiles-B6BGVbxm.d.ts} +1 -1
  475. package/dist/search/embed-helper.d.ts +2 -1
  476. package/dist/search/factory.d.ts +2 -1
  477. package/dist/search/factory.js +10 -10
  478. package/dist/search/index.d.ts +2 -1
  479. package/dist/search/index.js +14 -14
  480. package/dist/search/lancedb-backend.d.ts +2 -1
  481. package/dist/search/lancedb-backend.js +2 -2
  482. package/dist/search/meilisearch-backend.d.ts +2 -1
  483. package/dist/search/meilisearch-backend.js +2 -2
  484. package/dist/search/noop-backend.d.ts +2 -1
  485. package/dist/search/orama-backend.d.ts +2 -1
  486. package/dist/search/orama-backend.js +2 -2
  487. package/dist/search/port.d.ts +2 -1
  488. package/dist/search/remote-backend.d.ts +2 -1
  489. package/dist/{semantic-consolidation-BC9-GFuT.d.ts → semantic-consolidation-J-598F5M.d.ts} +1 -1
  490. package/dist/semantic-consolidation.d.ts +3 -2
  491. package/dist/semantic-consolidation.js +29 -28
  492. package/dist/semantic-rule-promotion.js +28 -27
  493. package/dist/semantic-rule-verifier.d.ts +2 -1
  494. package/dist/semantic-rule-verifier.js +28 -27
  495. package/dist/{service-BOy6dHfc.d.ts → service-ZQkJ52cz.d.ts} +2 -2
  496. package/dist/session-observer-bands.d.ts +2 -1
  497. package/dist/session-observer-state.d.ts +2 -1
  498. package/dist/shared-context/manager.d.ts +8 -7
  499. package/dist/signal.d.ts +2 -1
  500. package/dist/source-agent-qualifier.d.ts +2 -1
  501. package/dist/source-agent-qualifier.js +38 -36
  502. package/dist/standup/build.js +29 -28
  503. package/dist/{storage-BLJRnFi6.d.ts → storage-CU_hZUgP.d.ts} +67 -6
  504. package/dist/storage.d.ts +4 -3
  505. package/dist/storage.js +27 -26
  506. package/dist/subject-config.d.ts +2 -1
  507. package/dist/subject-config.js +2 -2
  508. package/dist/summarizer.d.ts +2 -1
  509. package/dist/summarizer.js +5 -5
  510. package/dist/summary-snapshot.d.ts +2 -1
  511. package/dist/support-passport/index.d.ts +49 -15
  512. package/dist/support-passport/index.js +72 -63
  513. package/dist/temporal-supersession.d.ts +3 -2
  514. package/dist/temporal-timeline-recall.d.ts +2 -1
  515. package/dist/temporal-validity.d.ts +2 -1
  516. package/dist/threading.d.ts +2 -1
  517. package/dist/tier-migration.d.ts +3 -2
  518. package/dist/tier-routing.d.ts +2 -1
  519. package/dist/tier-routing.js +2 -2
  520. package/dist/{tier-stats-KA6OZX2C.js → tier-stats-VK5PCO2L.js} +3 -3
  521. package/dist/topics.d.ts +2 -1
  522. package/dist/transcript.d.ts +2 -1
  523. package/dist/transfer/capsule-import.js +1 -1
  524. package/dist/transfer/export-okf.d.ts +2 -1
  525. package/dist/transfer/export-okf.js +29 -28
  526. package/dist/transfer/types.d.ts +102 -102
  527. package/dist/trust-score-stage.d.ts +2 -1
  528. package/dist/trust-score.d.ts +2 -1
  529. package/dist/{types-YY-eKKU7.d.ts → types-BGxTvLBO.d.ts} +58 -13
  530. package/dist/types.d.ts +2 -1
  531. package/dist/types.js +1 -1
  532. package/dist/utility-runtime.d.ts +2 -1
  533. package/dist/verified-recall.js +28 -27
  534. package/dist/who-knows-cli.d.ts +13 -11
  535. package/dist/who-knows-cli.js +29 -28
  536. package/dist/who-knows.d.ts +13 -11
  537. package/dist/who-knows.js +28 -27
  538. package/dist/write-envelope.d.ts +4 -2
  539. package/dist/write-envelope.js +3 -1
  540. package/package.json +12 -2
  541. package/src/access-category-alias.test.ts +216 -0
  542. package/src/access-mcp.test.ts +73 -0
  543. package/src/access-mcp.ts +6 -6
  544. package/src/access-observe-write-surface.ts +19 -4
  545. package/src/access-offline-manifest.ts +297 -16
  546. package/src/access-recall-surface.ts +5 -5
  547. package/src/access-schema.ts +76 -7
  548. package/src/access-service.ts +11 -2
  549. package/src/activity/config.test.ts +124 -1
  550. package/src/activity/config.ts +150 -18
  551. package/src/activity/index.ts +3 -0
  552. package/src/activity/journal-extract-storage.test.ts +129 -0
  553. package/src/activity/journal-extract.test.ts +314 -0
  554. package/src/activity/journal-extract.ts +247 -0
  555. package/src/activity/journal-heading.test.ts +24 -1
  556. package/src/activity/journal-heading.ts +36 -0
  557. package/src/activity/journal-read.test.ts +242 -0
  558. package/src/activity/journal-read.ts +183 -0
  559. package/src/activity/journal-source.test.ts +15 -15
  560. package/src/activity/journal-source.ts +21 -14
  561. package/src/activity/journal-state.lock-worker.ts +30 -0
  562. package/src/activity/journal-state.test.ts +144 -0
  563. package/src/activity/journal-state.ts +107 -0
  564. package/src/activity/journal-strip.test.ts +106 -52
  565. package/src/activity/journal-strip.ts +35 -10
  566. package/src/activity/journal-vault-integration.test.ts +230 -0
  567. package/src/activity/journal-vault-provenance.test.ts +9 -7
  568. package/src/activity/journal-vault-provenance.ts +4 -10
  569. package/src/activity/journal-vault-read.test.ts +3 -2
  570. package/src/activity/journal-vault-read.ts +9 -139
  571. package/src/activity/journal.test.ts +74 -23
  572. package/src/activity/runner.test.ts +116 -1
  573. package/src/activity/runner.ts +25 -0
  574. package/src/activity/scheduler.ts +4 -0
  575. package/src/activity/store.test.ts +18 -0
  576. package/src/activity/store.ts +14 -0
  577. package/src/activity/sync-registration.ts +4 -0
  578. package/src/activity/timeline/analysis-metadata.ts +2 -0
  579. package/src/activity/timeline/analysis-provider.ts +140 -0
  580. package/src/activity/timeline/analysis-run.test.ts +419 -0
  581. package/src/activity/timeline/analysis-run.ts +106 -0
  582. package/src/activity/timeline/analysis.ts +66 -37
  583. package/src/activity/timeline/corrections.ts +9 -0
  584. package/src/activity/timeline/index.ts +3 -0
  585. package/src/activity/timeline/query.test.ts +71 -0
  586. package/src/activity/timeline/query.ts +57 -8
  587. package/src/activity/timeline/regenerate.test.ts +505 -0
  588. package/src/activity/timeline/regenerate.ts +373 -0
  589. package/src/activity/types.ts +40 -5
  590. package/src/adapters/grok-opencode.test.ts +146 -0
  591. package/src/adapters/grok.ts +53 -0
  592. package/src/adapters/index.ts +2 -0
  593. package/src/adapters/opencode.ts +52 -0
  594. package/src/adapters/registry.ts +4 -0
  595. package/src/cli-fallback.ts +13 -4
  596. package/src/config.test.ts +3 -1
  597. package/src/config.ts +4 -0
  598. package/src/dedup/merge.test.ts +732 -25
  599. package/src/fallback-llm.test.ts +53 -0
  600. package/src/fallback-llm.ts +12 -0
  601. package/src/index.ts +2 -0
  602. package/src/local-llm.ts +3 -1
  603. package/src/orchestration/dependency-propagation-recovery-replay.ts +1 -1
  604. package/src/orchestration/extraction-persist-deps.ts +9 -0
  605. package/src/orchestration/extraction-persist-promotion.test.ts +265 -6
  606. package/src/orchestration/extraction-persist-promotion.ts +42 -3
  607. package/src/orchestration/extraction-persist.ts +3 -3
  608. package/src/orchestration/harmonic-construction-persist.test.ts +115 -4
  609. package/src/orchestration/harmonic-construction-persist.ts +34 -6
  610. package/src/orchestration/maintenance.ts +1 -0
  611. package/src/orchestration/orchestrator-helpers.ts +6 -0
  612. package/src/orchestration/recall-entry.ts +16 -0
  613. package/src/orchestration/recall-internal-deps.ts +14 -0
  614. package/src/orchestration/recall-internal.ts +41 -58
  615. package/src/orchestration/recall-result-formatter.ts +11 -1
  616. package/src/orchestration/recall-search-pipeline.ts +121 -11
  617. package/src/orchestration/recall-state-view-pipeline.test.ts +211 -0
  618. package/src/orchestration/semantic-merge-commit-effects.ts +76 -17
  619. package/src/orchestration/semantic-merge-persist.ts +121 -16
  620. package/src/orchestration/semantic-merge-promotion-payload.ts +133 -54
  621. package/src/orchestrator.ts +7 -35
  622. package/src/providers/codex-subscription.test.ts +666 -0
  623. package/src/providers/codex-subscription.ts +743 -0
  624. package/src/recall-disclosure.test.ts +20 -0
  625. package/src/recall-state-view-admission.ts +114 -0
  626. package/src/recall-state-view-asof.test.ts +176 -0
  627. package/src/recall-state-view-call.test.ts +175 -0
  628. package/src/recall-state-view-config.test.ts +16 -0
  629. package/src/recall-state-view-widen.test.ts +70 -0
  630. package/src/recall-state-view-widen.ts +28 -7
  631. package/src/recall-state-view-wire.ts +3 -1
  632. package/src/recall-state-view-zero-diff.test.ts +20 -11
  633. package/src/recall-state-view.test.ts +142 -0
  634. package/src/recall-state-view.ts +72 -24
  635. package/src/recall-xray-renderer.test.ts +27 -0
  636. package/src/recall-xray-renderer.ts +4 -0
  637. package/src/recall-xray.ts +13 -0
  638. package/src/reconcile/cursor.ts +23 -33
  639. package/src/reconcile/manifest.ts +96 -11
  640. package/src/reconcile-identity-cache.test.ts +378 -0
  641. package/src/runtime/child-process.ts +1 -1
  642. package/src/storage/cas-revision-host.ts +75 -0
  643. package/src/storage/cas-revision-store.test.ts +459 -0
  644. package/src/storage/cas-revision-store.ts +661 -0
  645. package/src/storage/deletion-revision-store.ts +80 -6
  646. package/src/storage/tombstone-blocked-capture-index.ts +15 -0
  647. package/src/storage/tombstone-blocked-capture-mutation.ts +67 -7
  648. package/src/storage/tombstone-blocked-capture-sync.ts +55 -20
  649. package/src/storage-contract/failure-semantics.test.ts +1 -1
  650. package/src/storage-frontmatter-cas.test.ts +698 -1
  651. package/src/storage-replay.test.ts +166 -3
  652. package/src/storage.ts +41 -41
  653. package/src/support-passport/card-projection.ts +82 -33
  654. package/src/temporal-supersession.test.ts +10 -10
  655. package/src/types.ts +7 -7
  656. package/src/write-envelope.ts +1 -1
  657. package/dist/chunk-22FVR2KE.js.map +0 -1
  658. package/dist/chunk-2JVJ7UHC.js.map +0 -1
  659. package/dist/chunk-3QQTXYZ6.js.map +0 -1
  660. package/dist/chunk-4UDQUPT5.js +0 -560
  661. package/dist/chunk-4UDQUPT5.js.map +0 -1
  662. package/dist/chunk-A7XEPMQ6.js.map +0 -1
  663. package/dist/chunk-AU7Q3LSC.js +0 -56
  664. package/dist/chunk-AU7Q3LSC.js.map +0 -1
  665. package/dist/chunk-BLUYQFRH.js.map +0 -1
  666. package/dist/chunk-CZYYJZB6.js.map +0 -1
  667. package/dist/chunk-EEOUMG3J.js.map +0 -1
  668. package/dist/chunk-FDLDOEO6.js.map +0 -1
  669. package/dist/chunk-FYDW33ZB.js +0 -13
  670. package/dist/chunk-GVG3JYBI.js.map +0 -1
  671. package/dist/chunk-H272ZPQ3.js.map +0 -1
  672. package/dist/chunk-HVAEXYPL.js.map +0 -1
  673. package/dist/chunk-JEIXTYVG.js.map +0 -1
  674. package/dist/chunk-LRICZIGN.js +0 -52
  675. package/dist/chunk-LRICZIGN.js.map +0 -1
  676. package/dist/chunk-N7RWREIQ.js.map +0 -1
  677. package/dist/chunk-O75CRYGF.js.map +0 -1
  678. package/dist/chunk-Q3O3VKRB.js.map +0 -1
  679. package/dist/chunk-SEDEKFYQ.js +0 -1
  680. package/dist/chunk-SO7SV523.js.map +0 -1
  681. package/dist/chunk-SQJ3SDIW.js.map +0 -1
  682. package/dist/chunk-TLPZ6MKZ.js.map +0 -1
  683. package/dist/chunk-WJBZMNNS.js.map +0 -1
  684. package/dist/chunk-XQ2Q43XD.js.map +0 -1
  685. package/dist/chunk-Z4PCVRTN.js.map +0 -1
  686. package/src/activity/journal-mode.test.ts +0 -32
  687. package/src/activity/journal-mode.ts +0 -20
  688. /package/dist/{chunk-SEDEKFYQ.js.map → activity/digest.js.map} +0 -0
  689. /package/dist/{capsule-merge-IPG4IOFP.js.map → capsule-merge-ZCXUPLNJ.js.map} +0 -0
  690. /package/dist/{chunk-CDKHKZL5.js.map → chunk-2524MOWK.js.map} +0 -0
  691. /package/dist/{chunk-IY2FVXM6.js.map → chunk-2AU4D4HQ.js.map} +0 -0
  692. /package/dist/{chunk-QDY6KYTN.js.map → chunk-2JCA2PQT.js.map} +0 -0
  693. /package/dist/{chunk-RSVEP77Y.js.map → chunk-2UZ5ZH6W.js.map} +0 -0
  694. /package/dist/{chunk-NWWXSJX5.js.map → chunk-34QW2LK2.js.map} +0 -0
  695. /package/dist/{chunk-S7DPKM5W.js.map → chunk-353C5UNV.js.map} +0 -0
  696. /package/dist/{chunk-GQOMZ3MK.js.map → chunk-36UBSLFN.js.map} +0 -0
  697. /package/dist/{chunk-DBQWVT2H.js.map → chunk-3CBI2ZSA.js.map} +0 -0
  698. /package/dist/{chunk-NZXEK3UF.js.map → chunk-3Q3N35W7.js.map} +0 -0
  699. /package/dist/{chunk-YYGZJPOK.js.map → chunk-42DJ235G.js.map} +0 -0
  700. /package/dist/{chunk-7VJXIDOC.js.map → chunk-4JVQRFZD.js.map} +0 -0
  701. /package/dist/{chunk-WHBVXTUI.js.map → chunk-4PB2MBY6.js.map} +0 -0
  702. /package/dist/{chunk-TEYN7ZYF.js.map → chunk-4WCNPQQ5.js.map} +0 -0
  703. /package/dist/{chunk-RBGREYVJ.js.map → chunk-5QBDLMGG.js.map} +0 -0
  704. /package/dist/{chunk-RKBLRTNT.js.map → chunk-5SDSVX7N.js.map} +0 -0
  705. /package/dist/{chunk-LPECRQO4.js.map → chunk-5THU7NFP.js.map} +0 -0
  706. /package/dist/{chunk-LWA7MDVO.js.map → chunk-6CCRSQWT.js.map} +0 -0
  707. /package/dist/{chunk-TIT2C6WX.js.map → chunk-6XYC7NM4.js.map} +0 -0
  708. /package/dist/{chunk-FHQSPTPZ.js.map → chunk-6YAIN5XJ.js.map} +0 -0
  709. /package/dist/{chunk-PV36INNL.js.map → chunk-757NP436.js.map} +0 -0
  710. /package/dist/{chunk-6H5JYDOM.js.map → chunk-7J2CGXG3.js.map} +0 -0
  711. /package/dist/{chunk-FBMYGNOC.js.map → chunk-A2YQL2FF.js.map} +0 -0
  712. /package/dist/{chunk-X2NFFBTO.js.map → chunk-A7GQBJP5.js.map} +0 -0
  713. /package/dist/{chunk-MPYD657E.js.map → chunk-A7WOWDZK.js.map} +0 -0
  714. /package/dist/{chunk-C4OTC6WY.js.map → chunk-AIKTQVV3.js.map} +0 -0
  715. /package/dist/{chunk-CGC5UQCF.js.map → chunk-AKE4GGQ3.js.map} +0 -0
  716. /package/dist/{chunk-VP67GZ7T.js.map → chunk-APFKZVJS.js.map} +0 -0
  717. /package/dist/{chunk-M75RYSHS.js.map → chunk-AQIRQUCP.js.map} +0 -0
  718. /package/dist/{chunk-S7T2TY65.js.map → chunk-AXFR2NQ5.js.map} +0 -0
  719. /package/dist/{chunk-PSPABFN2.js.map → chunk-BD7JTBYP.js.map} +0 -0
  720. /package/dist/{chunk-FCSZ4K2X.js.map → chunk-BJJWRWER.js.map} +0 -0
  721. /package/dist/{chunk-JT3EB7ZL.js.map → chunk-BNGHPYZU.js.map} +0 -0
  722. /package/dist/{chunk-MFJBANPX.js.map → chunk-C2BFTYD7.js.map} +0 -0
  723. /package/dist/{chunk-3JVLGJCY.js.map → chunk-C6KRO3SU.js.map} +0 -0
  724. /package/dist/{chunk-AOCP6JA7.js.map → chunk-D3IZCN5P.js.map} +0 -0
  725. /package/dist/{chunk-ROKKIMON.js.map → chunk-EJIEQOPB.js.map} +0 -0
  726. /package/dist/{chunk-ET356KSB.js.map → chunk-F4TWWUMP.js.map} +0 -0
  727. /package/dist/{chunk-CLLPJ6QT.js.map → chunk-FQXJAC3T.js.map} +0 -0
  728. /package/dist/{chunk-DD5JFCWM.js.map → chunk-GCBIXUPT.js.map} +0 -0
  729. /package/dist/{chunk-ROGRI25A.js.map → chunk-I3H5LFOI.js.map} +0 -0
  730. /package/dist/{chunk-S65WXHNK.js.map → chunk-IFFLUCCU.js.map} +0 -0
  731. /package/dist/{chunk-D5LORF7A.js.map → chunk-JZDH2ZZK.js.map} +0 -0
  732. /package/dist/{chunk-2GPE5UCR.js.map → chunk-K6IPSW5B.js.map} +0 -0
  733. /package/dist/{chunk-HG6HXVHQ.js.map → chunk-KDJHLOZP.js.map} +0 -0
  734. /package/dist/{chunk-I27RSQRR.js.map → chunk-KYGOQV37.js.map} +0 -0
  735. /package/dist/{chunk-VZWXFXLX.js.map → chunk-LMCD5W5B.js.map} +0 -0
  736. /package/dist/{chunk-MKD3OMPS.js.map → chunk-M3MYMWXG.js.map} +0 -0
  737. /package/dist/{chunk-DITMGZOL.js.map → chunk-MMG5K6XJ.js.map} +0 -0
  738. /package/dist/{chunk-VGXM5B4H.js.map → chunk-MNIPH6LD.js.map} +0 -0
  739. /package/dist/{chunk-MKWKYHXJ.js.map → chunk-OB3XMWX5.js.map} +0 -0
  740. /package/dist/{chunk-XU6OEECT.js.map → chunk-OQQXGYMX.js.map} +0 -0
  741. /package/dist/{chunk-47DEYNMR.js.map → chunk-PEXW2JCK.js.map} +0 -0
  742. /package/dist/{chunk-42SDNZCU.js.map → chunk-QF4J3KMV.js.map} +0 -0
  743. /package/dist/{chunk-SB6PSOP7.js.map → chunk-QLJ6762U.js.map} +0 -0
  744. /package/dist/{chunk-XOVKXJEP.js.map → chunk-R3TLVTWW.js.map} +0 -0
  745. /package/dist/{chunk-PHNAB54Q.js.map → chunk-RQO3J4MR.js.map} +0 -0
  746. /package/dist/{chunk-5N53UBH2.js.map → chunk-RR7G2X7C.js.map} +0 -0
  747. /package/dist/{chunk-DCJ3YFIC.js.map → chunk-S2ULTQZR.js.map} +0 -0
  748. /package/dist/{chunk-GY5WZBA6.js.map → chunk-S76KRJDG.js.map} +0 -0
  749. /package/dist/{chunk-EEC4PCG5.js.map → chunk-SZDLX763.js.map} +0 -0
  750. /package/dist/{chunk-E2ZHGBAK.js.map → chunk-T2JSUEH6.js.map} +0 -0
  751. /package/dist/{chunk-QMGXMJ2O.js.map → chunk-T2YFZ27G.js.map} +0 -0
  752. /package/dist/{chunk-LEPOP46W.js.map → chunk-TFA6HPOA.js.map} +0 -0
  753. /package/dist/{chunk-BA6WOZOT.js.map → chunk-TK4FHQRN.js.map} +0 -0
  754. /package/dist/{chunk-ZNJSBIP4.js.map → chunk-TNSCIPBQ.js.map} +0 -0
  755. /package/dist/{chunk-YUMDFDUA.js.map → chunk-TWYTGIBR.js.map} +0 -0
  756. /package/dist/{chunk-EZZV7OQL.js.map → chunk-UEZKN6VR.js.map} +0 -0
  757. /package/dist/{chunk-HY55QQD7.js.map → chunk-UJX4I26O.js.map} +0 -0
  758. /package/dist/{chunk-CBCNKKZD.js.map → chunk-VIZR45AN.js.map} +0 -0
  759. /package/dist/{chunk-ZG74PWRW.js.map → chunk-VZAKYDMJ.js.map} +0 -0
  760. /package/dist/{chunk-ITPS5DDH.js.map → chunk-W5BLTZZJ.js.map} +0 -0
  761. /package/dist/{chunk-H3TKENU4.js.map → chunk-WIKO4SCR.js.map} +0 -0
  762. /package/dist/{chunk-YFLLGRXO.js.map → chunk-X2QPKLPL.js.map} +0 -0
  763. /package/dist/{chunk-FGGYSN4P.js.map → chunk-X424T5JQ.js.map} +0 -0
  764. /package/dist/{chunk-NAXDPKVM.js.map → chunk-XPJNT6PI.js.map} +0 -0
  765. /package/dist/{contradiction-scan-NOYMFG66.js.map → chunk-XW2T4QAW.js.map} +0 -0
  766. /package/dist/{chunk-VED2YHUD.js.map → chunk-YEDVOYL2.js.map} +0 -0
  767. /package/dist/{chunk-RC5DXXWC.js.map → chunk-YM7YN37H.js.map} +0 -0
  768. /package/dist/{chunk-VLXBE57O.js.map → chunk-YVGXH72Y.js.map} +0 -0
  769. /package/dist/{chunk-YQAXP5AC.js.map → chunk-YXLUTALO.js.map} +0 -0
  770. /package/dist/{chunk-565C6ZFO.js.map → chunk-Z7YDVHDI.js.map} +0 -0
  771. /package/dist/{chunk-XUE46UYW.js.map → chunk-ZLN7AROH.js.map} +0 -0
  772. /package/dist/{chunk-HK32G473.js.map → chunk-ZWEZXVYH.js.map} +0 -0
  773. /package/dist/{resolution-VKATP2HT.js.map → contradiction-scan-GVD4JJ7B.js.map} +0 -0
  774. /package/dist/{first-start-migration-RC345GPL.js.map → first-start-migration-L3UFX5CU.js.map} +0 -0
  775. /package/dist/{tier-stats-KA6OZX2C.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
@@ -99,6 +99,8 @@ export interface RecallSearchPipelineDeps {
99
99
  * string at the input boundary (CLI / HTTP / MCP).
100
100
  */
101
101
  asOfMs?: number;
102
+ /** #1952 state-view admission — see filterSearchResultsByRecallSafety. */
103
+ stateViewActive?: boolean;
102
104
  requestingConnector?: string;
103
105
  },
104
106
  ): Promise<QmdSearchResult[]>;
@@ -172,6 +174,8 @@ export interface RecallSearchPipelineDeps {
172
174
  dropUnresolved?: boolean;
173
175
  recallNamespaces?: readonly string[];
174
176
  requestingConnector?: string;
177
+ /** #1952 state-view admission — see filterSearchResultsByRecallSafety. */
178
+ stateViewActive?: boolean;
175
179
  },
176
180
  ): Promise<{ results: QmdSearchResult[]; memoryByPath: Map<string, MemoryFile> }>;
177
181
  loadSearchResultMemoryMap(
@@ -598,6 +602,8 @@ export class RecallSearchPipelineCoordinator {
598
602
  deadlineAtMs?: number | null;
599
603
  /** Issue #681 — when true, bypass graphTraversalConfidenceFloor. */
600
604
  includeLowConfidence?: boolean;
605
+ /** #1952 state-view admission — resolved by the caller from config/override + change intent. */
606
+ stateViewActive?: boolean;
601
607
  }): Promise<QmdSearchResult[]> {
602
608
  // Prefer the threaded set; fall back to a config-derived set so direct
603
609
  // callers (unit tests) behave identically to the recall pipeline (#1523).
@@ -844,6 +850,7 @@ export class RecallSearchPipelineCoordinator {
844
850
  dropUnresolved: true,
845
851
  recallNamespaces: options.recallNamespaces,
846
852
  requestingConnector: options.requestingConnector,
853
+ stateViewActive: options.stateViewActive,
847
854
  },
848
855
  );
849
856
  results = boostInput.results;
@@ -864,6 +871,7 @@ export class RecallSearchPipelineCoordinator {
864
871
  {
865
872
  allowLifecycleFiltered: true,
866
873
  asOfMs: options.asOfMs,
874
+ stateViewActive: options.stateViewActive,
867
875
  requestingConnector: options.requestingConnector,
868
876
  },
869
877
  ),
@@ -882,6 +890,7 @@ export class RecallSearchPipelineCoordinator {
882
890
  {
883
891
  allowLifecycleFiltered: true,
884
892
  asOfMs: options.asOfMs,
893
+ stateViewActive: options.stateViewActive,
885
894
  requestingConnector: options.requestingConnector,
886
895
  },
887
896
  ));
@@ -1108,8 +1117,45 @@ export class RecallSearchPipelineCoordinator {
1108
1117
  asOfMs?: number;
1109
1118
  blockedPaths?: Set<string>;
1110
1119
  requestingConnector?: string;
1120
+ /**
1121
+ * #1952 state-aware recall views. When true (config `recallStateViews`
1122
+ * or per-call override, AND a change-intent query — resolved by the
1123
+ * caller), a superseded candidate is admitted iff its successor
1124
+ * (`frontmatter.supersededBy`) is also in this candidate set. The
1125
+ * admitted row carries `id`/`status`/`supersededBy`/`supersededAt` so
1126
+ * the inject seam can label it; every other path is unchanged.
1127
+ */
1128
+ stateViewActive?: boolean;
1111
1129
  },
1112
1130
  ): QmdSearchResult[] {
1131
+ // #1952 state-aware recall views. A superseded row is admitted only
1132
+ // when its successor SURVIVES this filter — a successor rejected by
1133
+ // the connector/lifecycle/validity/dedicated-surface/status gates
1134
+ // must never anchor (or spend a result slot on) its superseded row.
1135
+ // Anchors are therefore collected from rows that survive the pass
1136
+ // below; superseded rows defer admission to the post-pass fixpoint.
1137
+ const stateViewActive = options?.stateViewActive === true;
1138
+ const stateViewSurvivorIds = stateViewActive ? new Set<string>() : null;
1139
+ const stateViewDeferred: number[] = [];
1140
+ const stateViewBuilt: (QmdSearchResult | null)[] | null = stateViewActive
1141
+ ? new Array<QmdSearchResult | null>(results.length).fill(null)
1142
+ : null;
1143
+ const buildRecallRow = (r: QmdSearchResult, memory: MemoryFile | undefined): QmdSearchResult => ({
1144
+ ...r,
1145
+ sourceConnector: memory ? memory.frontmatter.sourceConnector : undefined,
1146
+ origin: memory ? memory.frontmatter.origin : undefined,
1147
+ // #1952: an active state view carries the chain fields the inject
1148
+ // seam labels from (id/status/supersededBy/supersededAt).
1149
+ ...(stateViewActive && memory
1150
+ ? {
1151
+ id: memory.frontmatter.id,
1152
+ status: memory.frontmatter.status,
1153
+ supersededBy: memory.frontmatter.supersededBy,
1154
+ supersededAt: memory.frontmatter.supersededAt,
1155
+ }
1156
+ : {}),
1157
+ });
1158
+ let stateViewAdmittedCount = 0;
1113
1159
  const lifecycleCaps = resolveMemoryLifecycleCapabilities(this.deps.config);
1114
1160
  let lifecycleFilteredCount = 0;
1115
1161
  let temporalSupersededFilteredCount = 0;
@@ -1120,7 +1166,9 @@ export class RecallSearchPipelineCoordinator {
1120
1166
  let connectorPartitionFilteredCount = 0;
1121
1167
  let supportPassportFilteredCount = 0;
1122
1168
  const filtered: QmdSearchResult[] = [];
1123
- for (const r of results) {
1169
+ for (let resultIdx = 0; resultIdx < results.length; resultIdx += 1) {
1170
+ const r = results[resultIdx]!;
1171
+ let stateViewPending = false;
1124
1172
  if (options?.blockedPaths && resultHasKey(options.blockedPaths, r)) {
1125
1173
  blockedPathFilteredCount += 1;
1126
1174
  continue;
@@ -1195,16 +1243,23 @@ export class RecallSearchPipelineCoordinator {
1195
1243
  // allowLifecycleFiltered=true to include archived/retired
1196
1244
  // candidates, but superseded memories must still be filtered
1197
1245
  // unless temporalSupersessionIncludeInRecall is set.
1198
- // Skipped entirely when `as_of` is active (above branch); the
1199
- // half-open `[valid_at, invalid_at)` evaluation in isValidAsOf
1200
- // is the authoritative gate for historical recall.
1246
+ // #1952: an active state view ADMITS the superseded row when its
1247
+ // successor also survives this filter — history never renders
1248
+ // unanchored, and a successor rejected by any gate here can
1249
+ // never anchor. Admission defers to the post-pass fixpoint.
1250
+ // Skipped entirely when `as_of` is active (above branch);
1251
+ // isValidAsOf stays the authoritative historical gate.
1201
1252
  shouldFilterSupersededFromRecall(memory.frontmatter, {
1202
1253
  enabled: lifecycleCaps.temporalSupersession,
1203
1254
  includeInRecall: this.deps.config.temporalSupersessionIncludeInRecall,
1204
1255
  })
1205
1256
  ) {
1206
- temporalSupersededFilteredCount += 1;
1207
- continue;
1257
+ if (stateViewActive) {
1258
+ stateViewPending = true;
1259
+ } else {
1260
+ temporalSupersededFilteredCount += 1;
1261
+ continue;
1262
+ }
1208
1263
  }
1209
1264
  // Bi-temporal INJECTION filter (issue #1578): when the master gate
1210
1265
  // is on and the caller did NOT pin `as_of`, drop facts whose event-
@@ -1243,11 +1298,57 @@ export class RecallSearchPipelineCoordinator {
1243
1298
  }
1244
1299
  // Derive persisted provenance exclusively from hydrated frontmatter.
1245
1300
  // The formatter parses this value at the model-context render site.
1246
- filtered.push({
1247
- ...r,
1248
- sourceConnector: memory ? memory.frontmatter.sourceConnector : undefined,
1249
- origin: memory ? memory.frontmatter.origin : undefined,
1250
- });
1301
+ if (stateViewPending) {
1302
+ // Survived every other gate; admission now hinges on the
1303
+ // successor surviving too decided by the fixpoint below.
1304
+ stateViewDeferred.push(resultIdx);
1305
+ continue;
1306
+ }
1307
+ const builtRow = buildRecallRow(r, memory);
1308
+ if (stateViewBuilt !== null) {
1309
+ stateViewBuilt[resultIdx] = builtRow;
1310
+ if (memory) {
1311
+ const id = memory.frontmatter.id;
1312
+ if (typeof id === "string" && id.length > 0) stateViewSurvivorIds!.add(id);
1313
+ }
1314
+ }
1315
+ filtered.push(builtRow);
1316
+ }
1317
+ if (stateViewDeferred.length > 0) {
1318
+ // #1952 admission fixpoint: a deferred superseded row joins the
1319
+ // output only when its successor is (or becomes) part of the
1320
+ // filter-surviving set. An admitted row can itself anchor the next
1321
+ // link of a chain, so iterate to a fixpoint.
1322
+ const admitted = new Set<number>();
1323
+ for (let progress = true; progress; ) {
1324
+ progress = false;
1325
+ for (const deferredIdx of stateViewDeferred) {
1326
+ if (admitted.has(deferredIdx)) continue;
1327
+ const deferredMemory = memoryForResult(memoryByPath, results[deferredIdx]!);
1328
+ if (!deferredMemory) continue;
1329
+ if (stateViewSurvivorIds!.has(deferredMemory.frontmatter.supersededBy ?? "")) {
1330
+ admitted.add(deferredIdx);
1331
+ const id = deferredMemory.frontmatter.id;
1332
+ if (typeof id === "string" && id.length > 0) stateViewSurvivorIds!.add(id);
1333
+ progress = true;
1334
+ }
1335
+ }
1336
+ }
1337
+ for (const deferredIdx of stateViewDeferred) {
1338
+ const deferredMemory = memoryForResult(memoryByPath, results[deferredIdx]!);
1339
+ if (admitted.has(deferredIdx) && deferredMemory) {
1340
+ stateViewAdmittedCount += 1;
1341
+ stateViewBuilt![deferredIdx] = buildRecallRow(results[deferredIdx]!, deferredMemory);
1342
+ } else {
1343
+ temporalSupersededFilteredCount += 1;
1344
+ }
1345
+ }
1346
+ // Re-emit in the order candidates entered this filter so an
1347
+ // admitted predecessor keeps its rank position (no slot swap).
1348
+ filtered.length = 0;
1349
+ for (const builtRow of stateViewBuilt!) {
1350
+ if (builtRow) filtered.push(builtRow);
1351
+ }
1251
1352
  }
1252
1353
  if (connectorPartitionFilteredCount > 0) {
1253
1354
  log.debug(
@@ -1269,6 +1370,11 @@ export class RecallSearchPipelineCoordinator {
1269
1370
  `temporal supersession filter removed ${temporalSupersededFilteredCount} superseded candidates`,
1270
1371
  );
1271
1372
  }
1373
+ if (stateViewAdmittedCount > 0) {
1374
+ log.debug(
1375
+ `state views admitted ${stateViewAdmittedCount} superseded candidates anchored on in-set successors (#1952)`,
1376
+ );
1377
+ }
1272
1378
  if (biTemporalExpiredFilteredCount > 0) {
1273
1379
  log.debug(
1274
1380
  `bi-temporal validity filter removed ${biTemporalExpiredFilteredCount} expired-validity candidates from injection (temporal.biTemporal on)`,
@@ -1304,6 +1410,8 @@ export class RecallSearchPipelineCoordinator {
1304
1410
  dropUnresolved?: boolean;
1305
1411
  recallNamespaces?: readonly string[];
1306
1412
  requestingConnector?: string;
1413
+ /** #1952 state-view admission — see filterSearchResultsByRecallSafety. */
1414
+ stateViewActive?: boolean;
1307
1415
  },
1308
1416
  ): Promise<{ results: QmdSearchResult[]; memoryByPath: Map<string, MemoryFile> }> {
1309
1417
  if (results.length === 0) {
@@ -1366,6 +1474,8 @@ export class RecallSearchPipelineCoordinator {
1366
1474
  * string at the input boundary (CLI / HTTP / MCP).
1367
1475
  */
1368
1476
  asOfMs?: number;
1477
+ /** #1952 state-view admission — flows into filterSearchResultsForRecall. */
1478
+ stateViewActive?: boolean;
1369
1479
  requestingConnector?: string;
1370
1480
  },
1371
1481
  ): Promise<QmdSearchResult[]> {
@@ -0,0 +1,211 @@
1
+ import assert from "node:assert/strict";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { mkdtemp, rm } from "node:fs/promises";
5
+ import test from "node:test";
6
+
7
+ import { parseConfig } from "../config.js";
8
+ import { RecallSearchPipelineCoordinator } from "./recall-search-pipeline.js";
9
+ import type { RecallSearchPipelineDeps } from "./recall-search-pipeline.js";
10
+ import type { MemoryFile, QmdSearchResult } from "../types.js";
11
+ import type { StorageManager } from "../index.js";
12
+
13
+ function result(path_: string, score = 1): QmdSearchResult {
14
+ return { docid: `qmd-${path_}`, path: path_, score, snippet: path_ };
15
+ }
16
+
17
+ function memory(path_: string, fm: Partial<MemoryFile["frontmatter"]>): MemoryFile {
18
+ return {
19
+ path: path_,
20
+ content: path_,
21
+ frontmatter: {
22
+ created: "2026-07-19T00:00:00.000Z",
23
+ updated: "2026-07-19T00:00:00.000Z",
24
+ ...fm,
25
+ } as unknown as MemoryFile["frontmatter"],
26
+ };
27
+ }
28
+
29
+ async function makeCoordinator(memoryDir: string): Promise<RecallSearchPipelineCoordinator> {
30
+ const config = parseConfig({
31
+ openaiApiKey: "sk-test",
32
+ memoryDir,
33
+ workspaceDir: path.join(memoryDir, "workspace"),
34
+ temporalSupersessionEnabled: true,
35
+ temporalSupersessionIncludeInRecall: false,
36
+ });
37
+ assert.equal(config.recallStateViews, false, "parseConfig default must be false");
38
+ const deps = {
39
+ config,
40
+ storage: {} as StorageManager,
41
+ readQmdResultMemory: async () => null,
42
+ } as unknown as RecallSearchPipelineDeps;
43
+ return new RecallSearchPipelineCoordinator(deps);
44
+ }
45
+
46
+ const OLD = "facts/job-old.md";
47
+ const NEW = "facts/job-new.md";
48
+
49
+ function corpus(): { results: QmdSearchResult[]; memories: Map<string, MemoryFile> } {
50
+ const results = [result(NEW, 0.9), result(OLD, 0.7)];
51
+ const memories = new Map<string, MemoryFile>([
52
+ [NEW, memory(NEW, { id: "m-new", status: "active" })],
53
+ [
54
+ OLD,
55
+ memory(OLD, {
56
+ id: "m-old",
57
+ status: "superseded",
58
+ supersededBy: "m-new",
59
+ supersededAt: "2026-08-01",
60
+ }),
61
+ ],
62
+ ]);
63
+ return { results, memories };
64
+ }
65
+
66
+ test("state view admits a superseded candidate when its successor is in the set", async () => {
67
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-sv-admit-"));
68
+ try {
69
+ const coordinator = await makeCoordinator(memoryDir);
70
+ const { results, memories } = corpus();
71
+ const safe = coordinator.filterSearchResultsByRecallSafety(results, memories, {
72
+ stateViewActive: true,
73
+ });
74
+ assert.deepEqual(
75
+ safe.map((r) => r.path).sort(),
76
+ [NEW, OLD],
77
+ "superseded row must be admitted alongside its successor",
78
+ );
79
+ const old = safe.find((r) => r.path === OLD);
80
+ assert.equal(old?.id, "m-old", "admitted row carries the frontmatter id");
81
+ assert.equal(old?.status, "superseded");
82
+ assert.equal(old?.supersededBy, "m-new");
83
+ assert.equal(old?.supersededAt, "2026-08-01");
84
+ // Successor stays unlabeled by the filter — labeling is the inject seam's job.
85
+ assert.equal(safe.find((r) => r.path === NEW)?.supersededBy, undefined);
86
+ } finally {
87
+ await rm(memoryDir, { recursive: true, force: true });
88
+ }
89
+ });
90
+ test("default (stateViewActive unset) keeps filtering superseded — zero-diff baseline", async () => {
91
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-sv-off-"));
92
+ try {
93
+ const coordinator = await makeCoordinator(memoryDir);
94
+ const { results, memories } = corpus();
95
+ const baseline = coordinator.filterSearchResultsByRecallSafety(results, memories);
96
+ const explicitOff = coordinator.filterSearchResultsByRecallSafety(results, memories, {
97
+ stateViewActive: false,
98
+ });
99
+ assert.deepEqual(baseline.map((r) => r.path), [NEW]);
100
+ assert.deepEqual(explicitOff.map((r) => r.path), [NEW]);
101
+ // No chain fields leak onto survivors when the view is off.
102
+ assert.equal(baseline[0]?.supersededBy, undefined);
103
+ assert.equal(baseline[0]?.id, undefined);
104
+ } finally {
105
+ await rm(memoryDir, { recursive: true, force: true });
106
+ }
107
+ });
108
+
109
+ test("state view does NOT admit a superseded candidate whose successor is absent", async () => {
110
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-sv-orphan-"));
111
+ try {
112
+ const coordinator = await makeCoordinator(memoryDir);
113
+ const results = [result(OLD, 0.7)];
114
+ const memories = new Map<string, MemoryFile>([
115
+ [
116
+ OLD,
117
+ memory(OLD, {
118
+ id: "m-old",
119
+ status: "superseded",
120
+ supersededBy: "m-absent",
121
+ supersededAt: "2026-08-01",
122
+ }),
123
+ ],
124
+ ]);
125
+ const safe = coordinator.filterSearchResultsByRecallSafety(results, memories, {
126
+ stateViewActive: true,
127
+ });
128
+ assert.deepEqual(safe, [], "orphaned superseded row must stay filtered");
129
+ } finally {
130
+ await rm(memoryDir, { recursive: true, force: true });
131
+ }
132
+ });
133
+
134
+ test("a successor rejected by the status gate cannot anchor its superseded row (no slot consumed)", async () => {
135
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-sv-anchor-status-"));
136
+ try {
137
+ const coordinator = await makeCoordinator(memoryDir);
138
+ const OTHER = "facts/unrelated.md";
139
+ const results = [result(OLD, 0.9), result(NEW, 0.8), result(OTHER, 0.7)];
140
+ const memories = new Map<string, MemoryFile>([
141
+ [
142
+ OLD,
143
+ memory(OLD, {
144
+ id: "m-old",
145
+ status: "superseded",
146
+ supersededBy: "m-new",
147
+ supersededAt: "2026-08-01",
148
+ }),
149
+ ],
150
+ // In memoryByPath (pre-filter) but rejected by the forgotten-status
151
+ // gate — pre-fix this id anchored m-old and admitted it.
152
+ [NEW, memory(NEW, { id: "m-new", status: "forgotten" })],
153
+ [OTHER, memory(OTHER, { id: "m-other", status: "active" })],
154
+ ]);
155
+ const safe = coordinator.filterSearchResultsByRecallSafety(results, memories, {
156
+ stateViewActive: true,
157
+ });
158
+ assert.deepEqual(
159
+ safe.map((r) => r.path),
160
+ [OTHER],
161
+ "a filter-rejected successor must not anchor its superseded row, and the orphaned row must not consume a slot",
162
+ );
163
+ } finally {
164
+ await rm(memoryDir, { recursive: true, force: true });
165
+ }
166
+ });
167
+
168
+ test("a successor rejected by the dedicated-surface gate cannot anchor its superseded row", async () => {
169
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-sv-anchor-surface-"));
170
+ try {
171
+ const coordinator = await makeCoordinator(memoryDir);
172
+ const results = [result(OLD, 0.9), result(NEW, 0.8)];
173
+ const memories = new Map<string, MemoryFile>([
174
+ [
175
+ OLD,
176
+ memory(OLD, {
177
+ id: "m-old",
178
+ status: "superseded",
179
+ supersededBy: "m-new",
180
+ supersededAt: "2026-08-01",
181
+ }),
182
+ ],
183
+ [NEW, memory(NEW, { id: "m-new", status: "active", memoryKind: "dream" })],
184
+ ]);
185
+ const safe = coordinator.filterSearchResultsByRecallSafety(results, memories, {
186
+ stateViewActive: true,
187
+ });
188
+ assert.deepEqual(safe, [], "dream-surface successors must not anchor superseded rows");
189
+ } finally {
190
+ await rm(memoryDir, { recursive: true, force: true });
191
+ }
192
+ });
193
+
194
+ test("an anchored predecessor keeps its rank position when admitted", async () => {
195
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-sv-anchor-order-"));
196
+ try {
197
+ const coordinator = await makeCoordinator(memoryDir);
198
+ const { results, memories } = corpus();
199
+ const safe = coordinator.filterSearchResultsByRecallSafety(results, memories, {
200
+ stateViewActive: true,
201
+ });
202
+ assert.deepEqual(
203
+ safe.map((r) => r.path),
204
+ [NEW, OLD],
205
+ "admission must not reorder candidates relative to their incoming rank",
206
+ );
207
+ assert.equal(safe[1]?.supersededBy, "m-new", "admitted row carries the chain fields");
208
+ } finally {
209
+ await rm(memoryDir, { recursive: true, force: true });
210
+ }
211
+ });
@@ -137,31 +137,85 @@ export async function readTargetSnapshot(
137
137
 
138
138
  /**
139
139
  * Undo a merged body whose provenance patch never landed, and report what is
140
- * actually true of storage afterwards: `true` means the target no longer holds
141
- * unprovenanced merged text, so the caller may honestly create the fact.
140
+ * actually true of storage afterwards:
141
+ * - "reverted" the target no longer holds this merge's unprovenanced text
142
+ * (ours was restored away, or another writer already replaced the body
143
+ * - "superseded" — the standing merged body is ANOTHER writer's commit
144
+ * (#2813 P1): `committedRevision` names the receipt token OUR CAS minted,
145
+ * the reread holds a different standing token, and a concurrent writer's
146
+ * deterministic merge is byte-for-byte our merged text — so only the
147
+ * token can attribute the standing record. Never revert theirs; the
148
+ * caller discards its own staged duplicate and reports the degraded merge;
149
+ * - "stands" — unverifiable (unreadable target), or the restore lost its
150
+ * race, so assume the merged text stands and refuse to create a duplicate.
142
151
  *
143
- * Three states, because only one of them is ours to undo:
144
- * - the body is still our merged text → restore the pre-merge body under a
145
- * compare-and-swap on the re-read snapshot;
146
- * - another writer already replaced it nothing of ours remains, so the
147
- * restore is skipped rather than clobbering that writer's body;
148
- * - the target is unreadable → unverifiable, so assume the merged text stands
149
- * and refuse to create a duplicate.
152
+ * `committedRevision` is the CAS commit receipt (markCasCommittedRevision,
153
+ * or the successful CAS's return value): the dedicated per-target revision
154
+ * token from the durable sidecar (#2807) — unique per commit even within one
155
+ * millisecond. Public `frontmatter.updated` never identifies a commit.
156
+ * Callers without identity omit it and keep the body-equality
157
+ * classification above.
150
158
  */
159
+ export type RevertMergedContentResult = "reverted" | "superseded" | "stands";
160
+
151
161
  export async function revertMergedContent(
152
162
  storage: StorageManager,
153
163
  target: MemoryFile,
154
164
  mergedContent: string,
155
- ): Promise<boolean> {
165
+ committedRevision?: string,
166
+ ): Promise<RevertMergedContentResult> {
156
167
  try {
157
168
  const current = await readTargetSnapshot(storage, target);
158
- if (!current) return false;
159
- if (current.content !== mergedContent) return true;
160
- return await storage.updateMemoryIfUnchanged(current, target.content, {
169
+ if (!current) return "stands";
170
+ if (current.content !== mergedContent) return "reverted";
171
+ // #2813 (P1): the merged body standing is provably OURS only while the
172
+ // target still carries the revision token our CAS minted. A different
173
+ // token means a concurrent writer committed the same deterministic
174
+ // body after our lock was released — reverting would delete their valid
175
+ // merge while their provenance patch may already have landed.
176
+ if (committedRevision !== undefined) {
177
+ // #2813 (P1 B): the standing receipt is a THREE-WAY truth. Only a
178
+ // PROVEN foreign token may take the superseded path — that proof is
179
+ // what licenses discarding this writer's staged snapshot. The old
180
+ // fail-open read collapsed an unreadable sidecar into undefined,
181
+ // which classified as superseded and discarded the recovery
182
+ // snapshot on unproven grounds. Unavailable (transiently
183
+ // unreadable, or a reservation pending finalization) and absent
184
+ // (which cannot corroborate EITHER writer while this receipt is in
185
+ // hand) are keep-side: the degraded branch preserves the snapshot
186
+ // and reconciliation retries.
187
+ let standing: Awaited<ReturnType<StorageManager["readCasRevisionStatus"]>>;
188
+ try {
189
+ standing = await storage.readCasRevisionStatus(target.path);
190
+ } catch (err) {
191
+ standing = {
192
+ status: "unavailable",
193
+ reason: err instanceof Error ? err.message : String(err),
194
+ };
195
+ }
196
+ if (standing.status === "present") {
197
+ if (standing.revision !== committedRevision) {
198
+ return "superseded";
199
+ }
200
+ } else if (standing.status === "unavailable") {
201
+ log.warn(
202
+ `revertMergedContent: CAS revision status for ${target.path} is unavailable (${standing.reason}); ownership cannot be verified — keeping the recovery snapshot instead of discarding or reverting`,
203
+ );
204
+ return "stands";
205
+ } else {
206
+ log.warn(
207
+ `revertMergedContent: CAS revision receipt for ${target.path} is absent although this writer holds receipt ${committedRevision}; ownership cannot be verified — keeping the recovery snapshot`,
208
+ );
209
+ return "stands";
210
+ }
211
+ }
212
+ return (await storage.updateMemoryIfUnchanged(current, target.content, {
161
213
  actor: "semantic-merge-rollback",
162
- });
214
+ }))
215
+ ? "reverted"
216
+ : "stands";
163
217
  } catch {
164
- return false;
218
+ return "stands";
165
219
  }
166
220
  }
167
221
 
@@ -225,12 +279,13 @@ export async function rewriteMergedTargetGraphEdges(
225
279
  storage: {
226
280
  dir: string;
227
281
  getMemoryByIdIncludingArchived: (id: string) => Promise<MemoryFile | null>;
282
+ readCasRevision: (filePath: string) => Promise<string | undefined>;
228
283
  },
229
284
  input: {
230
285
  targetId: string;
231
286
  memoryRelPath: string;
232
287
  mergedContent: string;
233
- /** The frontmatter `updated` value the committed-body check validated. */
288
+ /** The CAS revision token the committed-body check observed. */
234
289
  revisionChecked: string | undefined;
235
290
  rewriteTypes: readonly GraphType[];
236
291
  build: () => Promise<GraphEdge[] | void>;
@@ -247,10 +302,14 @@ export async function rewriteMergedTargetGraphEdges(
247
302
  try {
248
303
  appended = (await input.build()) ?? undefined;
249
304
  const committedNow = await storage.getMemoryByIdIncludingArchived(input.targetId);
305
+ const committedRevision = committedNow === null ? undefined : await storage.readCasRevision(committedNow.path).catch((err) => {
306
+ log.warn(`rewriteMergedTargetGraphEdges: failed to read CAS revision for ${committedNow.path}: ${err}`);
307
+ return undefined;
308
+ });
250
309
  if (
251
310
  !committedNow ||
252
311
  committedNow.content !== input.mergedContent ||
253
- committedNow.frontmatter.updated !== input.revisionChecked
312
+ committedRevision !== input.revisionChecked
254
313
  ) {
255
314
  await rollbackNodeEdgeRewrite(storage.dir, input.memoryRelPath, input.rewriteTypes, removedEdges, input.targetId, appended);
256
315
  return false;