@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
@@ -156,10 +156,10 @@ function liveEntries(
156
156
  query: string,
157
157
  stateViewsEnabled: boolean,
158
158
  ): { entries: string[]; widened: { id?: string; stateLabel?: string }[] } {
159
- // parseConfig intentionally does not carry `recallStateViews` (see
160
- // recall-state-view-wire.ts: "parseConfig cannot grow"), so operators set it
161
- // on the live config object. Setting it INSIDE parseConfig silently yields a
162
- // disabled render, which makes a zero-diff assertion vacuous.
159
+ // parseConfig now carries `recallStateViews` (default false); the override
160
+ // below exercises the enabled path against the real parsed config, and the
161
+ // disabled path uses the parsed default so a parse regression (flag
162
+ // silently ignored) makes the enabled assertions below fail.
163
163
  const parsed = parseConfig({ memoryDir: "/tmp/remnic-zero-diff-test" });
164
164
  const config = stateViewsEnabled
165
165
  ? ({ ...parsed, recallStateViews: true } as typeof parsed)
@@ -196,7 +196,7 @@ function linesFrom(
196
196
  }));
197
197
  }
198
198
 
199
- test("the enabled route labels an admitted superseded row; disabled leaves labels alone", () => {
199
+ test("the enabled route labels a superseded row and renders the historical prefix", () => {
200
200
  const results = [
201
201
  { memoryId: "m-1", text: "we use PostgreSQL", stateLabel: "current" as const, score: 0.9 },
202
202
  {
@@ -224,12 +224,21 @@ test("the enabled route labels an admitted superseded row; disabled leaves label
224
224
  "current",
225
225
  "the disabled route must not touch labels",
226
226
  );
227
- // NOTE: the live formatter renders no superseded prefix formatSupersededPrefix
228
- // is reachable only from renderStateViewLine, which has no production caller.
229
- // So the rendered entries are identical here, and asserting a rendered
230
- // annotation through this route would be asserting a feature that is not
231
- // wired. That gap belongs to the rendering slice, not to this guard.
232
- assert.deepEqual(enabled.entries, disabled.entries);
227
+ // Observable effect #2 (rendering slice): the enabled route prefixes the
228
+ // admitted superseded row with `[superseded <date> by <id>]`; the disabled
229
+ // render stays byte-identical (no prefix, same snippet).
230
+ const enabledOld = enabled.entries.find((entry) => entry.includes("we use SQLite"));
231
+ const disabledOld = disabled.entries.find((entry) => entry.includes("we use SQLite"));
232
+ assert.ok(enabledOld, "enabled render includes the superseded row");
233
+ assert.ok(disabledOld, "disabled render includes the (unlabeled) row");
234
+ assert.match(enabledOld!, /\[superseded 2026-08-01 by m-1\] we use SQLite/);
235
+ assert.doesNotMatch(disabledOld!, /\[superseded/);
236
+ // Current rows are untouched in both renders.
237
+ for (const entries of [enabled.entries, disabled.entries]) {
238
+ const current = entries.find((entry) => entry.includes("we use PostgreSQL"));
239
+ assert.ok(current);
240
+ assert.doesNotMatch(current!, /\[superseded/);
241
+ }
233
242
  });
234
243
 
235
244
  test("the enabled route drops a superseded row whose successor is absent", () => {
@@ -52,6 +52,96 @@ test("change-intent conjugations fire the annotator", () => {
52
52
  }
53
53
  });
54
54
 
55
+ test("change-intent phrase matching uses token boundaries, not substrings", () => {
56
+ const positives = [
57
+ "When did we move offices?",
58
+ "we used to live in Austin",
59
+ "when did the vendor change",
60
+ ];
61
+ const negatives = [
62
+ "when Didi arrives", // proper noun must not fire "when did"
63
+ "I was confused to hear that", // "used to" inside "confused to"
64
+ ];
65
+ for (const query of positives) {
66
+ assert.equal(isChangeOrientedQuery(query), true, query);
67
+ }
68
+ for (const query of negatives) {
69
+ assert.equal(isChangeOrientedQuery(query), false, query);
70
+ }
71
+ });
72
+
73
+ test("bare before/after sequencing is not change intent; event-pointing is", () => {
74
+ const positives = [
75
+ "before the move",
76
+ "after the cutover",
77
+ "after a migration",
78
+ "before the migration",
79
+ ];
80
+ const negatives = [
81
+ "before lunch",
82
+ "after install",
83
+ "restart before dinner",
84
+ "shut down after setup",
85
+ "the aftermath report",
86
+ ];
87
+ for (const query of positives) {
88
+ assert.equal(isChangeOrientedQuery(query), true, query);
89
+ }
90
+ for (const query of negatives) {
91
+ assert.equal(isChangeOrientedQuery(query), false, query);
92
+ }
93
+ });
94
+
95
+ test("asOf mode keeps a predecessor whose successor the pin filtered out", () => {
96
+ const predecessor = fact("old-job", {
97
+ status: "superseded",
98
+ supersededBy: "new-job",
99
+ supersededAt: "2026-08-10T00:00:00.000Z",
100
+ });
101
+ const labeled = annotateStateView([predecessor], "when did the job title change", [], {
102
+ enabled: true,
103
+ asOfMs: Date.parse("2026-08-05T00:00:00.000Z"),
104
+ });
105
+ assert.equal(labeled.length, 1, "a valid asOf result must never be emptied");
106
+ assert.equal(
107
+ labeled[0]?.stateLabel,
108
+ "current",
109
+ "the pin predates the supersession, so the row was the live fact at the snapshot",
110
+ );
111
+ });
112
+
113
+ test("asOf mode labels a predecessor historical when the supersession predates the pin", () => {
114
+ const predecessor = fact("old-job", {
115
+ status: "superseded",
116
+ supersededBy: "new-job",
117
+ supersededAt: "2026-08-01T00:00:00.000Z",
118
+ });
119
+ const labeled = annotateStateView([predecessor], "when did the job title change", [], {
120
+ enabled: true,
121
+ asOfMs: Date.parse("2026-08-05T00:00:00.000Z"),
122
+ });
123
+ assert.equal(labeled.length, 1);
124
+ assert.equal(labeled[0]?.stateLabel, "historical");
125
+ });
126
+
127
+ test("asOf mode keeps pair semantics when both rows are valid at the pin", () => {
128
+ const rows = [
129
+ fact("new-job", { status: "active" }),
130
+ fact("old-job", { status: "superseded", supersededBy: "new-job", supersededAt: "2026-03-01" }),
131
+ ];
132
+ const labeled = annotateStateView(rows, "when did the job title change", [], {
133
+ enabled: true,
134
+ asOfMs: Date.parse("2026-08-05T00:00:00.000Z"),
135
+ });
136
+ assert.deepEqual(
137
+ labeled.map((row) => [row.id, row.stateLabel]),
138
+ [
139
+ ["new-job", "current"],
140
+ ["old-job", "historical"],
141
+ ],
142
+ );
143
+ });
144
+
55
145
  test("non-change query is identical (same array reference, no labels)", () => {
56
146
  const input = PAIR_RESULTS.map((row) => ({ ...row }));
57
147
  const out = annotateStateView(input, "what is the current job title", PAIR, { enabled: true });
@@ -129,3 +219,55 @@ test("annotateStateView does not mutate input rows", () => {
129
219
  assert.equal(input[0]?.stateLabel, undefined);
130
220
  assert.equal(input[1]?.stateLabel, undefined);
131
221
  });
222
+
223
+ test("disputed cycle never labels historical against a missing anchor", () => {
224
+ const results = [
225
+ fact("a", { status: "superseded", supersededBy: "b" }),
226
+ fact("b", { status: "superseded", supersededBy: "a" }),
227
+ fact("c", { status: "active" }),
228
+ ];
229
+ const labeled = annotateStateView(results, "when did this change", [], { enabled: true });
230
+ assert.deepEqual(
231
+ labeled.map((row) => [row.id, row.stateLabel]),
232
+ [
233
+ ["a", "transition"],
234
+ ["b", "transition"],
235
+ ["c", "current"],
236
+ ],
237
+ "cycle members may render as transitions, never historical-vs-current",
238
+ );
239
+ });
240
+
241
+ test("corrected row links through the chain when supersededBy is absent", () => {
242
+ const chains: StateViewChain[] = [
243
+ { predecessorId: "old", successorId: "new", supersededAt: "2026-02-01" },
244
+ ];
245
+ const results = [
246
+ fact("new", { status: "active" }),
247
+ fact("old", { status: "superseded", supersededAt: "2026-02-01" }),
248
+ ];
249
+ const labeled = annotateStateView(results, "before the correction what was it", chains, {
250
+ enabled: true,
251
+ });
252
+ assert.deepEqual(
253
+ labeled.map((row) => [row.id, row.stateLabel]),
254
+ [
255
+ ["new", "current"],
256
+ ["old", "historical"],
257
+ ],
258
+ );
259
+ });
260
+
261
+ test("transitive orphan chains collapse: A→B→(C absent) drops both A and B", () => {
262
+ const results = [
263
+ fact("a", { status: "superseded", supersededBy: "b" }),
264
+ fact("b", { status: "superseded", supersededBy: "c" }),
265
+ fact("unrelated", { status: "active" }),
266
+ ];
267
+ const labeled = annotateStateView(results, "when did this change", [], { enabled: true });
268
+ assert.deepEqual(
269
+ labeled.map((row) => row.id),
270
+ ["unrelated"],
271
+ "the fixpoint must drop A once B is dropped, not render a dangling historical",
272
+ );
273
+ });
@@ -30,7 +30,17 @@ export interface StateViewResult {
30
30
 
31
31
  export const DEFAULT_RECALL_STATE_VIEWS = false;
32
32
 
33
- const CHANGE_WORDS = ["before", "after", "switch", "switches", "switched", "switching", "change", "changes", "changed", "changing"];
33
+ const CHANGE_WORDS = ["switch", "switches", "switched", "switching", "change", "changes", "changed", "changing"];
34
+
35
+ // Phrase matches are token-bounded: "when Didi" must not fire the
36
+ // "when did" phrase, and "confused to" must not fire "used to".
37
+ const CHANGE_PHRASE_RE = /\bwhen\s+did\b|\bused\s+to\b/;
38
+ const CHANGE_WORD_RE = new RegExp(`\\b(?:${CHANGE_WORDS.join("|")})\\b`);
39
+ // Bare "before"/"after" are ordinary sequencing ("before lunch",
40
+ // "after install"). They carry change intent only when they point at a
41
+ // specific event through a determiner ("before the move", "after the
42
+ // cutover").
43
+ const EVENT_POINTER_RE = /\b(?:before|after)\s+(?:the|a|an|this|that|these|those)\b/;
34
44
 
35
45
  export function parseRecallStateViews(raw: unknown): boolean {
36
46
  return coerceBooleanLike(raw, "recallStateViews") === true;
@@ -38,15 +48,7 @@ export function parseRecallStateViews(raw: unknown): boolean {
38
48
 
39
49
  export function isChangeOrientedQuery(query: string): boolean {
40
50
  const lower = query.toLowerCase();
41
- if (lower.includes("when did") || lower.includes("used to")) return true;
42
- return CHANGE_WORDS.some((word) => {
43
- const idx = lower.indexOf(word);
44
- if (idx < 0) return false;
45
- const before = idx === 0 || !/[a-z0-9]/.test(lower[idx - 1] ?? "");
46
- const afterIdx = idx + word.length;
47
- const after = afterIdx >= lower.length || !/[a-z0-9]/.test(lower[afterIdx] ?? "");
48
- return before && after;
49
- });
51
+ return CHANGE_PHRASE_RE.test(lower) || CHANGE_WORD_RE.test(lower) || EVENT_POINTER_RE.test(lower);
50
52
  }
51
53
 
52
54
  export function shouldWidenSuperseded(
@@ -83,6 +85,7 @@ function labelFor(
83
85
  result: StateViewResult,
84
86
  byPred: Map<string, string>,
85
87
  admittedIds: ReadonlySet<string>,
88
+ asOfMs: number | null,
86
89
  ): StateLabel {
87
90
  const successorId = result.supersededBy ?? byPred.get(id);
88
91
  const isPred = shouldWidenSuperseded(successorId, admittedIds);
@@ -96,17 +99,39 @@ function labelFor(
96
99
  if (isPred && isSucc) return "transition";
97
100
  if (isPred) return "historical";
98
101
  if (isSucc) return "current";
99
- return result.status === "superseded" ? "historical" : "current";
102
+ if (result.status === "superseded") {
103
+ // #1952 asOf mode: the successor is legitimately absent under the
104
+ // historical pin. The row was the live fact at the snapshot when the
105
+ // recorded supersession postdates the pin ("current" relative to
106
+ // the snapshot); already replaced at the pin is "historical".
107
+ return asOfMs === null ? "historical" : snapshotStateLabel(result, asOfMs);
108
+ }
109
+ return "current";
110
+ }
111
+
112
+ function snapshotStateLabel(result: StateViewResult, asOfMs: number): StateLabel {
113
+ const supersededAtMs = Date.parse(result.supersededAt ?? "");
114
+ return Number.isFinite(supersededAtMs) && supersededAtMs <= asOfMs
115
+ ? "historical"
116
+ : "current";
100
117
  }
101
118
 
102
119
  export function annotateStateView<T extends StateViewResult>(
103
120
  results: T[],
104
121
  query: string,
105
122
  chains: readonly StateViewChain[],
106
- options: { enabled?: boolean } = {},
123
+ options: { enabled?: boolean; asOfMs?: number } = {},
107
124
  ): T[] {
108
125
  const enabled = options.enabled === true;
109
126
  if (!enabled || !isChangeOrientedQuery(query)) return results;
127
+ // #1952 asOf mode: under a historical pin the pipeline's isValidAsOf
128
+ // gate already decided validity at the pinned instant, so a predecessor
129
+ // must not be discarded merely because its successor is absent under
130
+ // the same filter. A valid asOf result is never emptied here.
131
+ const asOfMs =
132
+ typeof options.asOfMs === "number" && Number.isFinite(options.asOfMs)
133
+ ? options.asOfMs
134
+ : null;
110
135
 
111
136
  const byPred = buildSuccessorMap(results, chains);
112
137
  const candidateIds = new Set<string>();
@@ -115,24 +140,47 @@ export function annotateStateView<T extends StateViewResult>(
115
140
  if (id) candidateIds.add(id);
116
141
  }
117
142
 
118
- const admitted: T[] = [];
119
- for (const result of results) {
143
+ const isSupersededRow = (result: T): { superseded: boolean; successorId: string | undefined } => {
120
144
  const id = resultStateViewId(result);
121
- const successorId = result.supersededBy ?? byPred.get(id);
122
- const superseded = result.status === "superseded" || Boolean(result.supersededBy) || byPred.has(id);
123
- if (!superseded || shouldWidenSuperseded(successorId, candidateIds)) {
124
- admitted.push(result);
145
+ return {
146
+ superseded: result.status === "superseded" || Boolean(result.supersededBy) || byPred.has(id),
147
+ successorId: result.supersededBy ?? byPred.get(id),
148
+ };
149
+ };
150
+
151
+ let admitted: T[];
152
+ if (asOfMs !== null) {
153
+ admitted = results.slice();
154
+ } else {
155
+ admitted = [];
156
+ for (const result of results) {
157
+ const { superseded, successorId } = isSupersededRow(result);
158
+ if (!superseded || shouldWidenSuperseded(successorId, candidateIds)) {
159
+ admitted.push(result);
160
+ }
125
161
  }
126
- }
127
162
 
128
- const admittedIds = new Set<string>();
129
- for (const result of admitted) {
130
- const id = resultStateViewId(result);
131
- if (id) admittedIds.add(id);
163
+ // #1952 contract: superseded never appears without its successor. A
164
+ // successor can itself be dropped (filtered elsewhere, or transitively
165
+ // orphaned), so reconcile to a fixpoint instead of trusting the first pass.
166
+ let admittedIds = new Set(admitted.map(resultStateViewId).filter(Boolean));
167
+ for (let changed = true; changed; ) {
168
+ changed = false;
169
+ for (let i = admitted.length - 1; i >= 0; i -= 1) {
170
+ const row = admitted[i]!;
171
+ const { superseded, successorId } = isSupersededRow(row);
172
+ if (superseded && !shouldWidenSuperseded(successorId, admittedIds)) {
173
+ admitted.splice(i, 1);
174
+ changed = true;
175
+ }
176
+ }
177
+ if (changed) admittedIds = new Set(admitted.map(resultStateViewId).filter(Boolean));
178
+ }
132
179
  }
133
180
 
181
+ const admittedIds = new Set(admitted.map(resultStateViewId).filter(Boolean));
134
182
  return admitted.map((result) => {
135
183
  const id = resultStateViewId(result);
136
- return { ...result, stateLabel: labelFor(id, result, byPred, admittedIds) };
184
+ return { ...result, stateLabel: labelFor(id, result, byPred, admittedIds, asOfMs) };
137
185
  });
138
186
  }
@@ -558,6 +558,33 @@ test("renderXrayText omits per-edge confidence line when graphEdgeConfidences ab
558
558
  assert.ok(!out.includes("edge-confidences:"));
559
559
  });
560
560
 
561
+ // ─── Issue #1952 — state-view text rendering ──────────────────────────────
562
+
563
+ test("renderXrayText renders the state-view line exactly once per result", () => {
564
+ const snap: RecallXraySnapshot = {
565
+ ...minimalSnapshot(),
566
+ results: [
567
+ {
568
+ memoryId: "mem-current",
569
+ path: "facts/job.md",
570
+ servedBy: "hybrid",
571
+ scoreDecomposition: { final: 0.9 },
572
+ admittedBy: [],
573
+ stateView: "current",
574
+ pathPenaltyApplied: false,
575
+ },
576
+ ],
577
+ };
578
+ const out = renderXrayText(snap);
579
+ const count = out.split("state-view:").length - 1;
580
+ assert.equal(
581
+ count,
582
+ 1,
583
+ `state-view must render once per result (stable location after path), got ${count}:\n${out}`,
584
+ );
585
+ assert.ok(out.includes("state-view: current"));
586
+ });
587
+
561
588
  test("renderXrayText tier-explain block matches shared helper output", async () => {
562
589
  // CLAUDE.md rule 22: the tier-explain text block must be a single
563
590
  // source of truth shared between recall-explain-renderer and
@@ -152,6 +152,7 @@ function renderResultTextLines(
152
152
  const lines: string[] = [];
153
153
  lines.push(`[${rank}] ${result.memoryId} — ${servedByLabel(result.servedBy)}`);
154
154
  if (result.path) lines.push(` path: ${result.path}`);
155
+ if (result.stateView) lines.push(` state-view: ${result.stateView}`);
155
156
  lines.push(` score: ${renderScoreDecomposition(result)}`);
156
157
  if (result.provenance) {
157
158
  lines.push(
@@ -397,6 +398,9 @@ function renderResultMarkdownLines(
397
398
  `- **Admitted by:** ${result.admittedBy.map(mdInlineCode).join(", ")}`,
398
399
  );
399
400
  }
401
+ if (result.stateView) {
402
+ lines.push(`- **State view:** ${mdInlineCode(result.stateView)}`);
403
+ }
400
404
  if (result.rejectedBy) {
401
405
  lines.push(`- **Rejected by:** ${mdInlineCode(result.rejectedBy)}`);
402
406
  }
@@ -22,6 +22,7 @@ import { randomUUID } from "node:crypto";
22
22
  import { normalizeRetrievedMemoryProvenance, type RetrievedMemoryProvenance } from "./memory-provenance.js";
23
23
  import { estimateTokenCount } from "./token-estimate.js";
24
24
  import type { RecallDisclosure, RecallTierExplain } from "./types.js";
25
+ import type { StateLabel } from "./recall-state-view.js";
25
26
  import { isRecallDisclosure } from "./types.js";
26
27
 
27
28
  /**
@@ -196,6 +197,13 @@ export interface RecallXrayResult {
196
197
  quarantined: boolean;
197
198
  quarantineReason?: string;
198
199
  };
200
+ /**
201
+ * #1952 — recall state-view label for this result (`current`,
202
+ * `historical`, or `transition`). Present only when state views were
203
+ * active for the recall AND the result was annotated at the inject
204
+ * seam; absent otherwise, so legacy snapshots round-trip unchanged.
205
+ */
206
+ stateView?: StateLabel;
199
207
  }
200
208
 
201
209
  /**
@@ -522,6 +530,10 @@ function cloneResult(result: RecallXrayResult): RecallXrayResult {
522
530
  typeof result.pathPenaltyApplied === "boolean"
523
531
  ? result.pathPenaltyApplied
524
532
  : undefined;
533
+ const stateView =
534
+ result.stateView === "current" || result.stateView === "historical" || result.stateView === "transition"
535
+ ? result.stateView
536
+ : undefined;
525
537
  const auditEntryId = nonEmptyString(result.auditEntryId);
526
538
  const rejectedBy = nonEmptyString(result.rejectedBy);
527
539
  const scoreDecomposition = cloneScoreDecomposition(result.scoreDecomposition);
@@ -538,6 +550,7 @@ function cloneResult(result: RecallXrayResult): RecallXrayResult {
538
550
  }
539
551
  if (pathNodeIds !== undefined) out.pathNodeIds = pathNodeIds;
540
552
  if (pathPenaltyApplied !== undefined) out.pathPenaltyApplied = pathPenaltyApplied;
553
+ if (stateView !== undefined) out.stateView = stateView;
541
554
  if (auditEntryId !== undefined) out.auditEntryId = auditEntryId;
542
555
  if (rejectedBy !== undefined) out.rejectedBy = rejectedBy;
543
556
  // Disclosure + token telemetry (issue #677 PR 3/4). Only attach when
@@ -1,11 +1,7 @@
1
1
  import { createHash, randomUUID } from "node:crypto";
2
2
  import * as fs from "node:fs/promises";
3
3
  import * as path from "node:path";
4
- import {
5
- type ReconcilePlanEntry,
6
- type ReconcileSemanticAgreement,
7
- semanticAgreementKey,
8
- } from "./plan.js";
4
+ import { type ReconcilePlanEntry, type ReconcileSemanticAgreement, semanticAgreementKey } from "./plan.js";
9
5
 
10
6
  export type ConvergeRefreshTarget = "local" | "receiver";
11
7
 
@@ -56,21 +52,26 @@ export function normalizeConvergePeerUrl(peerUrl: string): string {
56
52
  export function hashPeerNamespace(peerUrl: string, namespace: string): string {
57
53
  const normalizedUrl = normalizeConvergePeerUrl(peerUrl);
58
54
  const normalizedNs = namespace.trim().toLowerCase();
59
- return createHash("sha256")
60
- .update(`${normalizedUrl}\0${normalizedNs}`)
61
- .digest("hex")
62
- .slice(0, 16);
55
+ return createHash("sha256").update(`${normalizedUrl}\0${normalizedNs}`).digest("hex").slice(0, 16);
63
56
  }
64
57
 
65
- export function defaultConvergeCursorPath(
66
- memoryDir: string,
67
- peerUrl: string,
68
- namespace: string,
69
- ): string {
58
+ export function defaultConvergeCursorPath(memoryDir: string, peerUrl: string, namespace: string): string {
70
59
  const key = hashPeerNamespace(peerUrl, namespace);
71
60
  return path.join(path.resolve(memoryDir), ".remnic", "state", "converge-cursors", `${key}.json`);
72
61
  }
73
62
 
63
+ /**
64
+ * Persistent identity cache location for a (peerUrl, namespace) pair, next
65
+ * to the cursor that governs the same pair. The cache stores the parsed
66
+ * memory identity per path keyed by content sha, so a warm manifest build
67
+ * skips the per-file read + frontmatter parse + content-hash identity work
68
+ * entirely (the dominant boot-scale plan cost on both sides).
69
+ */
70
+ export function convergeIdentityCachePath(memoryDir: string, peerUrl: string, namespace: string): string {
71
+ const key = hashPeerNamespace(peerUrl, namespace);
72
+ return path.join(path.resolve(memoryDir), ".remnic", "state", "converge-identity", `identity-${key}.json`);
73
+ }
74
+
74
75
  function normalizeSemanticFileState(input: unknown): { path: string; sha256: string } | undefined {
75
76
  if (!input || typeof input !== "object" || Array.isArray(input)) return undefined;
76
77
  const file = input as Record<string, unknown>;
@@ -94,7 +95,7 @@ function digestAfterReconcile(entry: ReconcilePlanEntry): string | undefined {
94
95
  export function deriveConvergeCursorBase(
95
96
  entries: readonly ReconcilePlanEntry[],
96
97
  namespace: string,
97
- priorSemanticAgreements: readonly ReconcileSemanticAgreement[] = [],
98
+ priorSemanticAgreements: readonly ReconcileSemanticAgreement[] = []
98
99
  ): Pick<ConvergeCursorState, "baseFiles" | "semanticAgreements"> {
99
100
  const baseFiles: ConvergeCursorFileState[] = [];
100
101
  const semanticAgreementsByPathPair = new Map(
@@ -111,8 +112,8 @@ export function deriveConvergeCursorBase(
111
112
  }
112
113
  baseFiles.sort((left, right) => left.path.localeCompare(right.path));
113
114
  const semanticAgreements = [...semanticAgreementsByPathPair.values()];
114
- semanticAgreements.sort((left, right) =>
115
- left.local.path.localeCompare(right.local.path) || left.peer.path.localeCompare(right.peer.path)
115
+ semanticAgreements.sort(
116
+ (left, right) => left.local.path.localeCompare(right.local.path) || left.peer.path.localeCompare(right.peer.path)
116
117
  );
117
118
  return { baseFiles, semanticAgreements };
118
119
  }
@@ -182,9 +183,7 @@ export function normalizeConvergeCursor(input: unknown): ConvergeCursorState {
182
183
  };
183
184
  }
184
185
 
185
- export async function readConvergeCursor(
186
- cursorPath: string,
187
- ): Promise<ConvergeCursorState | null> {
186
+ export async function readConvergeCursor(cursorPath: string): Promise<ConvergeCursorState | null> {
188
187
  try {
189
188
  const raw = await fs.readFile(path.resolve(cursorPath), "utf-8");
190
189
  const parsed = JSON.parse(raw);
@@ -195,17 +194,11 @@ export async function readConvergeCursor(
195
194
  }
196
195
  }
197
196
 
198
- export async function writeConvergeCursor(
199
- cursorPath: string,
200
- cursor: ConvergeCursorState,
201
- ): Promise<void> {
197
+ export async function writeConvergeCursor(cursorPath: string, cursor: ConvergeCursorState): Promise<void> {
202
198
  const normalized = normalizeConvergeCursor(cursor);
203
199
  const target = path.resolve(cursorPath);
204
200
  await fs.mkdir(path.dirname(target), { recursive: true });
205
- const tmp = path.join(
206
- path.dirname(target),
207
- `.converge-cursor.${process.pid}.${randomUUID()}.tmp`,
208
- );
201
+ const tmp = path.join(path.dirname(target), `.converge-cursor.${process.pid}.${randomUUID()}.tmp`);
209
202
  await fs.writeFile(tmp, JSON.stringify(normalized, null, 2) + "\n", "utf-8");
210
203
  try {
211
204
  await fs.rename(tmp, target);
@@ -221,7 +214,7 @@ export async function markConvergeRefreshPending(
221
214
  peerUrl: string;
222
215
  namespace: string;
223
216
  target: ConvergeRefreshTarget;
224
- },
217
+ }
225
218
  ): Promise<void> {
226
219
  const current = await readConvergeCursor(cursorPath);
227
220
  const pendingRefreshes = new Set(current?.pendingRefreshes ?? []);
@@ -238,10 +231,7 @@ export async function markConvergeRefreshPending(
238
231
  });
239
232
  }
240
233
 
241
- export async function clearConvergeRefreshPending(
242
- cursorPath: string,
243
- target: ConvergeRefreshTarget,
244
- ): Promise<void> {
234
+ export async function clearConvergeRefreshPending(cursorPath: string, target: ConvergeRefreshTarget): Promise<void> {
245
235
  const current = await readConvergeCursor(cursorPath);
246
236
  if (!current?.pendingRefreshes?.includes(target)) return;
247
237
  await writeConvergeCursor(cursorPath, {