@remnic/core 9.50.0 → 9.50.2

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 (367) hide show
  1. package/dist/access-admin-ops-surface.d.ts +10 -10
  2. package/dist/access-admin-ops-surface.js +17 -17
  3. package/dist/access-authorization-probe.d.ts +10 -10
  4. package/dist/access-authorization-probe.js +18 -18
  5. package/dist/access-boundary.d.ts +10 -10
  6. package/dist/access-boundary.js +17 -17
  7. package/dist/access-cli.js +42 -42
  8. package/dist/access-coding-context-resolution.d.ts +1 -1
  9. package/dist/access-extraction-force-flush.d.ts +10 -10
  10. package/dist/access-extraction-force-flush.js +17 -17
  11. package/dist/access-health-types.d.ts +1 -1
  12. package/dist/access-http-lcm-compaction.d.ts +10 -10
  13. package/dist/access-http-lifecycle-flush.d.ts +10 -10
  14. package/dist/access-http-offline-stream.d.ts +10 -10
  15. package/dist/access-http-query.js +17 -17
  16. package/dist/access-http.d.ts +10 -10
  17. package/dist/access-http.js +23 -23
  18. package/dist/access-identity-continuity-surface.d.ts +8 -8
  19. package/dist/access-identity-continuity-surface.js +17 -17
  20. package/dist/access-lcm-surface.d.ts +10 -10
  21. package/dist/access-lcm-surface.js +17 -17
  22. package/dist/access-mcp.d.ts +10 -10
  23. package/dist/access-mcp.js +21 -21
  24. package/dist/access-memory-search-fanout.d.ts +2 -2
  25. package/dist/{access-namespace-preflight-DuDU301-.d.ts → access-namespace-preflight-Dj2QolFE.d.ts} +1 -1
  26. package/dist/access-namespace-preflight.d.ts +3 -3
  27. package/dist/access-namespace-preflight.js +17 -17
  28. package/dist/access-observe-write-surface.d.ts +10 -10
  29. package/dist/access-observe-write-surface.js +17 -17
  30. package/dist/access-offline-manifest.d.ts +8 -8
  31. package/dist/access-operations-batch.js +18 -18
  32. package/dist/access-operations.d.ts +10 -10
  33. package/dist/access-operations.js +20 -20
  34. package/dist/access-recall-concurrency.d.ts +10 -10
  35. package/dist/access-recall-concurrency.js +17 -17
  36. package/dist/access-recall-response.d.ts +10 -10
  37. package/dist/access-recall-response.js +17 -17
  38. package/dist/access-recall-surface.d.ts +10 -10
  39. package/dist/access-recall-surface.js +17 -17
  40. package/dist/{access-service--_3T_v23.d.ts → access-service-DesbnTSa.d.ts} +7 -7
  41. package/dist/access-service-helpers.d.ts +10 -10
  42. package/dist/access-service.d.ts +10 -10
  43. package/dist/access-service.js +17 -17
  44. package/dist/access-surface-catalog.d.ts +10 -10
  45. package/dist/access-wearables-meetings-surface.d.ts +3 -3
  46. package/dist/action-confidence.d.ts +1 -1
  47. package/dist/active-memory-bridge.d.ts +1 -1
  48. package/dist/active-recall.d.ts +1 -1
  49. package/dist/ambient-provenance.d.ts +1 -1
  50. package/dist/artifact-search.d.ts +1 -1
  51. package/dist/behavior-learner.d.ts +1 -1
  52. package/dist/behavior-signals.d.ts +1 -1
  53. package/dist/bootstrap.d.ts +8 -8
  54. package/dist/briefing.d.ts +2 -2
  55. package/dist/briefing.js +6 -6
  56. package/dist/buffer-surprise-report.d.ts +1 -1
  57. package/dist/buffer-turn-helpers.d.ts +1 -1
  58. package/dist/buffer.d.ts +2 -2
  59. package/dist/bulk-import/index.d.ts +3 -3
  60. package/dist/calibration.d.ts +1 -1
  61. package/dist/capabilities.d.ts +1 -1
  62. package/dist/{capsule-merge-KXTRZ23Z.js → capsule-merge-XMFBXVDP.js} +4 -4
  63. package/dist/{catalog-DjUmUIal.d.ts → catalog-D-G7RgXR.d.ts} +1 -1
  64. package/dist/causal-behavior.d.ts +1 -1
  65. package/dist/causal-consolidation.d.ts +1 -1
  66. package/dist/causal-consolidation.js +7 -7
  67. package/dist/causal-trajectory-graph.d.ts +1 -1
  68. package/dist/{chunk-N3CXAYPJ.js → chunk-2HGUDBRJ.js} +2 -2
  69. package/dist/{chunk-FV7YQTN3.js → chunk-2S72LWKX.js} +2 -2
  70. package/dist/{chunk-NKL25FCF.js → chunk-4MBPIL4V.js} +2 -2
  71. package/dist/{chunk-PWIMF7LP.js → chunk-5C2HNJMO.js} +12 -12
  72. package/dist/{chunk-ZN4EYMKJ.js → chunk-67QG75MJ.js} +2 -2
  73. package/dist/{chunk-JI62YGPI.js → chunk-6QPHF6RR.js} +2 -2
  74. package/dist/{chunk-4EABKPZS.js → chunk-75XOWNRS.js} +4 -4
  75. package/dist/{chunk-O76MWTVS.js → chunk-7BAYBYY5.js} +2 -2
  76. package/dist/{chunk-4JWJMRPJ.js → chunk-7PKFPLLZ.js} +2 -2
  77. package/dist/{chunk-24BKGKGO.js → chunk-BOFVT6P3.js} +5 -5
  78. package/dist/{chunk-SHYIMIX5.js → chunk-ESG7Z255.js} +2 -2
  79. package/dist/{chunk-P26YHAQH.js → chunk-EWMTOVMY.js} +51 -27
  80. package/dist/chunk-EWMTOVMY.js.map +1 -0
  81. package/dist/{chunk-WPZX7MEA.js → chunk-FXX6RQYC.js} +3 -3
  82. package/dist/{chunk-S75UQ3T3.js → chunk-GDDGZVFI.js} +2 -2
  83. package/dist/{chunk-S2SJEOTM.js → chunk-GFIKG4FR.js} +2 -2
  84. package/dist/{chunk-7NDM2PNK.js → chunk-GZICBRWK.js} +2 -2
  85. package/dist/{chunk-X4IDNPOS.js → chunk-HAEU3ZW7.js} +2 -2
  86. package/dist/{chunk-RBPH3GZV.js → chunk-IK6X5QPO.js} +26 -29
  87. package/dist/chunk-IK6X5QPO.js.map +1 -0
  88. package/dist/{chunk-GKEYXXKX.js → chunk-IXXABW5A.js} +2 -2
  89. package/dist/{chunk-GGBSF2X7.js → chunk-JB6D7EFB.js} +2 -2
  90. package/dist/{chunk-E633OXMH.js → chunk-JPHEOE6Z.js} +8 -8
  91. package/dist/{chunk-6XGEBQ3R.js → chunk-KDG2KTWW.js} +3 -3
  92. package/dist/{chunk-7BLWBSRL.js → chunk-LEJPSMKM.js} +2 -2
  93. package/dist/{chunk-JDCQK3C5.js → chunk-M4A44LUA.js} +2 -2
  94. package/dist/{chunk-ZDAYWJV6.js → chunk-NO37MR45.js} +3 -3
  95. package/dist/{chunk-PWLB4TRK.js → chunk-OQAL6SIR.js} +2 -2
  96. package/dist/{chunk-QWLW3VQH.js → chunk-PLKFO2HJ.js} +2 -2
  97. package/dist/{chunk-EURCX6PS.js → chunk-PWN32TAG.js} +2 -2
  98. package/dist/{chunk-ELQCS47S.js → chunk-PYKKWQZ2.js} +3 -3
  99. package/dist/{chunk-P4QOYG52.js → chunk-QN7NTKRC.js} +1 -1
  100. package/dist/{chunk-7VWZ4LRW.js → chunk-QW3WFHKU.js} +2 -2
  101. package/dist/{chunk-PNRA7FAD.js → chunk-RZRUV6N2.js} +104 -62
  102. package/dist/chunk-RZRUV6N2.js.map +1 -0
  103. package/dist/{chunk-3LD4N2TF.js → chunk-S3AYIQCU.js} +68 -82
  104. package/dist/chunk-S3AYIQCU.js.map +1 -0
  105. package/dist/{chunk-ZJIFYUJI.js → chunk-SV3PSA7Y.js} +2 -2
  106. package/dist/{chunk-LQKXVQZR.js → chunk-TQFHQPWD.js} +5 -5
  107. package/dist/{chunk-GSEPRIZC.js → chunk-TS4AJ2GI.js} +2 -2
  108. package/dist/{chunk-VFS3MK5F.js → chunk-V5H6OJCR.js} +2 -2
  109. package/dist/{chunk-T35UJI5R.js → chunk-V7X767RT.js} +18 -18
  110. package/dist/{chunk-4S3ECH3U.js → chunk-VJXY5ZCT.js} +2 -2
  111. package/dist/{chunk-PLCHU56K.js → chunk-YQ4IQ2GA.js} +2 -2
  112. package/dist/{chunk-LTOAJXZB.js → chunk-Z3RHPGSY.js} +3 -3
  113. package/dist/{chunk-5XCN4XBU.js → chunk-ZQOCRIGA.js} +3 -3
  114. package/dist/{cli-BLNmNEMT.d.ts → cli-D4vvtxjY.d.ts} +5 -5
  115. package/dist/cli.d.ts +12 -12
  116. package/dist/cli.js +34 -34
  117. package/dist/coding/pre-action-gate.d.ts +1 -1
  118. package/dist/compounding/engine.d.ts +2 -2
  119. package/dist/compounding/engine.js +6 -6
  120. package/dist/compounding/preference-consolidator.d.ts +1 -1
  121. package/dist/compression-optimizer.d.ts +1 -1
  122. package/dist/config.d.ts +1 -1
  123. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  124. package/dist/connectors/codex-materialize-runner.js +6 -6
  125. package/dist/connectors/codex-materialize.d.ts +1 -1
  126. package/dist/connectors/index.d.ts +2 -1
  127. package/dist/connectors/index.js +7 -7
  128. package/dist/consolidation-provenance-check.d.ts +2 -2
  129. package/dist/consolidation-provenance-check.js +4 -4
  130. package/dist/consolidation-undo.d.ts +2 -2
  131. package/dist/consolidation-undo.js +3 -3
  132. package/dist/contradiction/index.d.ts +2 -2
  133. package/dist/converge-config.d.ts +1 -1
  134. package/dist/convergence-refresh.d.ts +2 -2
  135. package/dist/convergence-refresh.js +8 -8
  136. package/dist/conversation-index/backend.d.ts +1 -1
  137. package/dist/conversation-index/chunker.d.ts +1 -1
  138. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  139. package/dist/conversation-index/indexer.d.ts +1 -1
  140. package/dist/conversation-index/search.d.ts +1 -1
  141. package/dist/corpus-watermark.d.ts +1 -1
  142. package/dist/corpus-watermark.js +8 -8
  143. package/dist/day-summary.d.ts +1 -1
  144. package/dist/delinearize.d.ts +1 -1
  145. package/dist/dependency-propagation-config.d.ts +1 -1
  146. package/dist/direct-answer-wiring.d.ts +1 -1
  147. package/dist/direct-answer.d.ts +1 -1
  148. package/dist/embedding-fallback.d.ts +1 -1
  149. package/dist/enrichment/index.d.ts +1 -1
  150. package/dist/entity-retrieval.d.ts +2 -2
  151. package/dist/entity-retrieval.js +6 -6
  152. package/dist/entity-schema.d.ts +1 -1
  153. package/dist/explicit-capture.d.ts +8 -8
  154. package/dist/explicit-capture.js +4 -4
  155. package/dist/external-wiki-access.d.ts +10 -10
  156. package/dist/external-wiki-access.js +18 -18
  157. package/dist/external-wiki-collection-registration.d.ts +1 -1
  158. package/dist/external-wiki-collection.d.ts +1 -1
  159. package/dist/external-wiki-mcp-tools.d.ts +10 -10
  160. package/dist/extraction-error-classification.d.ts +1 -1
  161. package/dist/extraction-faithfulness.d.ts +1 -1
  162. package/dist/extraction-judge-telemetry.d.ts +1 -1
  163. package/dist/extraction-judge-training.d.ts +1 -1
  164. package/dist/extraction-judge.d.ts +1 -1
  165. package/dist/extraction-liveness.d.ts +1 -1
  166. package/dist/extraction-normalization.d.ts +1 -1
  167. package/dist/extraction-prompt.d.ts +1 -1
  168. package/dist/extraction-source-grounding-rules.d.ts +1 -1
  169. package/dist/extraction-source-grounding.d.ts +1 -1
  170. package/dist/extraction.d.ts +17 -18
  171. package/dist/extraction.js +10 -10
  172. package/dist/fallback-llm.d.ts +1 -1
  173. package/dist/{forget-GJ42LCBW.js → forget-UJDJHG6R.js} +2 -2
  174. package/dist/graph-dashboard-diff.d.ts +1 -1
  175. package/dist/graph-dashboard-key.d.ts +1 -1
  176. package/dist/graph-dashboard-parser.d.ts +1 -1
  177. package/dist/graph-edge-reinforcement.d.ts +1 -1
  178. package/dist/graph-snapshot.d.ts +1 -1
  179. package/dist/graph.d.ts +1 -1
  180. package/dist/harmonic-retrieval.js +1 -1
  181. package/dist/importance.d.ts +1 -1
  182. package/dist/importers/index.d.ts +1 -1
  183. package/dist/in-flight-reads.d.ts +1 -1
  184. package/dist/index.d.ts +19 -19
  185. package/dist/index.js +42 -42
  186. package/dist/intent.d.ts +1 -1
  187. package/dist/lcm/engine.d.ts +1 -1
  188. package/dist/lcm/index.d.ts +1 -1
  189. package/dist/lcm/tools.d.ts +1 -1
  190. package/dist/lifecycle.d.ts +1 -1
  191. package/dist/live-connectors-runner.d.ts +1 -1
  192. package/dist/local-llm.d.ts +1 -1
  193. package/dist/local-model-endpoint.d.ts +1 -1
  194. package/dist/maintenance/memory-governance.d.ts +1 -1
  195. package/dist/maintenance/memory-governance.js +6 -6
  196. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
  197. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +6 -6
  198. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
  199. package/dist/maintenance/rebuild-memory-projection.js +7 -7
  200. package/dist/{maintenance-DKbKZi3u.d.ts → maintenance-ClmUVpGI.d.ts} +3 -3
  201. package/dist/mcp-memory-inspector-app.d.ts +10 -10
  202. package/dist/memory-action-policy.d.ts +1 -1
  203. package/dist/memory-cache.d.ts +1 -1
  204. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  205. package/dist/memory-projection-store.d.ts +1 -1
  206. package/dist/memory-provenance.d.ts +1 -1
  207. package/dist/memory-snapshot.d.ts +1 -1
  208. package/dist/memory-worth-outcomes.d.ts +2 -2
  209. package/dist/models-json.d.ts +1 -1
  210. package/dist/namespaces/migrate.d.ts +3 -3
  211. package/dist/namespaces/migrate.js +7 -7
  212. package/dist/namespaces/principal.d.ts +1 -1
  213. package/dist/namespaces/search.d.ts +1 -1
  214. package/dist/namespaces/storage.d.ts +3 -3
  215. package/dist/namespaces/storage.js +6 -6
  216. package/dist/native-knowledge.d.ts +1 -1
  217. package/dist/offline-sync-impression-drain.d.ts +1 -1
  218. package/dist/operator-doctor-corpus.d.ts +1 -1
  219. package/dist/operator-doctor-corpus.js +9 -9
  220. package/dist/operator-doctor-replica.d.ts +1 -1
  221. package/dist/operator-toolkit.d.ts +3 -3
  222. package/dist/operator-toolkit.js +14 -14
  223. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  224. package/dist/orchestration/maintenance.d.ts +4 -4
  225. package/dist/orchestration/maintenance.js +11 -11
  226. package/dist/{orchestrator-BRwD7ceU.d.ts → orchestrator-qJ07zI8H.d.ts} +8 -12
  227. package/dist/orchestrator.d.ts +8 -8
  228. package/dist/orchestrator.js +42 -42
  229. package/dist/page-versioning.js +3 -3
  230. package/dist/patterns-cli.d.ts +1 -1
  231. package/dist/{pipeline-DC-1C9T8.d.ts → pipeline-WFCxhHOn.d.ts} +1 -1
  232. package/dist/policy-runtime.d.ts +1 -1
  233. package/dist/proactive-contention.d.ts +1 -1
  234. package/dist/provenance.d.ts +1 -1
  235. package/dist/{qmd-DdeCEZdb.d.ts → qmd-5tzkQ44y.d.ts} +1 -1
  236. package/dist/qmd-preflight.d.ts +2 -2
  237. package/dist/qmd-recall-cache.d.ts +1 -1
  238. package/dist/qmd.d.ts +2 -2
  239. package/dist/recall-concurrency-config.d.ts +1 -1
  240. package/dist/recall-disclosure-escalation.d.ts +1 -1
  241. package/dist/recall-explain-renderer.d.ts +1 -1
  242. package/dist/recall-memory-map.d.ts +1 -1
  243. package/dist/recall-planner-llm.d.ts +1 -1
  244. package/dist/recall-state.d.ts +1 -1
  245. package/dist/recall-tag-filter.d.ts +1 -1
  246. package/dist/recall-timings.d.ts +1 -1
  247. package/dist/recall-xray-cli.d.ts +1 -1
  248. package/dist/recall-xray-renderer.d.ts +1 -1
  249. package/dist/recall-xray.d.ts +1 -1
  250. package/dist/reconcile/cursor.d.ts +1 -1
  251. package/dist/reconcile/manifest.d.ts +1 -1
  252. package/dist/reconcile/plan.d.ts +1 -1
  253. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  254. package/dist/replay/normalizers/claude.d.ts +1 -1
  255. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  256. package/dist/replay/normalizers/shared.d.ts +1 -1
  257. package/dist/replay/runner.d.ts +1 -1
  258. package/dist/replay/types.d.ts +1 -1
  259. package/dist/replica-divergence.d.ts +1 -1
  260. package/dist/replica-peers-config.d.ts +1 -1
  261. package/dist/resolve-auth-token.d.ts +1 -1
  262. package/dist/retrieval-agents.d.ts +2 -2
  263. package/dist/retrieval-tiers.d.ts +1 -1
  264. package/dist/routing/engine.d.ts +1 -1
  265. package/dist/routing/store.d.ts +1 -1
  266. package/dist/salvage-envelope.d.ts +1 -1
  267. package/dist/{scope-profiles-BXVq4Jv0.d.ts → scope-profiles--vfXPl3X.d.ts} +1 -1
  268. package/dist/search/embed-helper.d.ts +1 -1
  269. package/dist/search/factory.d.ts +1 -1
  270. package/dist/search/index.d.ts +1 -1
  271. package/dist/search/lancedb-backend.d.ts +1 -1
  272. package/dist/search/meilisearch-backend.d.ts +1 -1
  273. package/dist/search/noop-backend.d.ts +1 -1
  274. package/dist/search/orama-backend.d.ts +1 -1
  275. package/dist/search/port.d.ts +1 -1
  276. package/dist/search/remote-backend.d.ts +1 -1
  277. package/dist/{semantic-consolidation-CGYxfa8F.d.ts → semantic-consolidation-BBDuP9nJ.d.ts} +1 -1
  278. package/dist/semantic-consolidation.d.ts +2 -2
  279. package/dist/semantic-consolidation.js +7 -7
  280. package/dist/semantic-rule-promotion.js +6 -6
  281. package/dist/semantic-rule-verifier.d.ts +1 -1
  282. package/dist/semantic-rule-verifier.js +6 -6
  283. package/dist/{service-CBDBQFCN.d.ts → service-B8DtbpCM.d.ts} +2 -2
  284. package/dist/session-observer-bands.d.ts +1 -1
  285. package/dist/session-observer-state.d.ts +1 -1
  286. package/dist/shared-context/manager.d.ts +1 -1
  287. package/dist/signal.d.ts +1 -1
  288. package/dist/source-agent-qualifier.d.ts +1 -1
  289. package/dist/source-agent-qualifier.js +9 -9
  290. package/dist/{storage-V--MQi7w.d.ts → storage-BkYN1RIy.d.ts} +1 -1
  291. package/dist/storage.d.ts +2 -2
  292. package/dist/storage.js +5 -5
  293. package/dist/summarizer.d.ts +1 -1
  294. package/dist/summary-snapshot.d.ts +1 -1
  295. package/dist/temporal-supersession.d.ts +2 -2
  296. package/dist/temporal-supersession.js +1 -1
  297. package/dist/temporal-timeline-recall.d.ts +1 -1
  298. package/dist/temporal-validity.d.ts +1 -1
  299. package/dist/threading.d.ts +1 -1
  300. package/dist/tier-migration.d.ts +2 -2
  301. package/dist/tier-routing.d.ts +1 -1
  302. package/dist/topics.d.ts +1 -1
  303. package/dist/transcript.d.ts +1 -1
  304. package/dist/transfer/capsule-import.js +4 -4
  305. package/dist/trust-score-stage.d.ts +1 -1
  306. package/dist/trust-score.d.ts +1 -1
  307. package/dist/{types-D_a6Sqjz.d.ts → types-u2s9j1uD.d.ts} +1 -1
  308. package/dist/types.d.ts +1 -1
  309. package/dist/utility-runtime.d.ts +1 -1
  310. package/dist/verified-recall.js +6 -6
  311. package/dist/write-envelope.d.ts +1 -1
  312. package/package.json +2 -2
  313. package/src/connectors/index.ts +40 -112
  314. package/src/dependency-revalidation-routing.test.ts +165 -0
  315. package/src/extraction.ts +46 -31
  316. package/src/orchestration/dependency-propagation.test.ts +89 -8
  317. package/src/orchestration/dependency-propagation.ts +60 -27
  318. package/src/orchestration/dependency-revalidation.test.ts +119 -0
  319. package/src/orchestration/dependency-revalidation.ts +31 -82
  320. package/src/orchestrator.ts +5 -7
  321. package/src/runtime/daemon-health.ts +53 -0
  322. package/src/runtime/http-transport.ts +25 -0
  323. package/src/testing/subjects/dependency-propagation.test.ts +367 -0
  324. package/dist/chunk-3LD4N2TF.js.map +0 -1
  325. package/dist/chunk-P26YHAQH.js.map +0 -1
  326. package/dist/chunk-PNRA7FAD.js.map +0 -1
  327. package/dist/chunk-RBPH3GZV.js.map +0 -1
  328. /package/dist/{capsule-merge-KXTRZ23Z.js.map → capsule-merge-XMFBXVDP.js.map} +0 -0
  329. /package/dist/{chunk-N3CXAYPJ.js.map → chunk-2HGUDBRJ.js.map} +0 -0
  330. /package/dist/{chunk-FV7YQTN3.js.map → chunk-2S72LWKX.js.map} +0 -0
  331. /package/dist/{chunk-NKL25FCF.js.map → chunk-4MBPIL4V.js.map} +0 -0
  332. /package/dist/{chunk-PWIMF7LP.js.map → chunk-5C2HNJMO.js.map} +0 -0
  333. /package/dist/{chunk-ZN4EYMKJ.js.map → chunk-67QG75MJ.js.map} +0 -0
  334. /package/dist/{chunk-JI62YGPI.js.map → chunk-6QPHF6RR.js.map} +0 -0
  335. /package/dist/{chunk-4EABKPZS.js.map → chunk-75XOWNRS.js.map} +0 -0
  336. /package/dist/{chunk-O76MWTVS.js.map → chunk-7BAYBYY5.js.map} +0 -0
  337. /package/dist/{chunk-4JWJMRPJ.js.map → chunk-7PKFPLLZ.js.map} +0 -0
  338. /package/dist/{chunk-24BKGKGO.js.map → chunk-BOFVT6P3.js.map} +0 -0
  339. /package/dist/{chunk-SHYIMIX5.js.map → chunk-ESG7Z255.js.map} +0 -0
  340. /package/dist/{chunk-WPZX7MEA.js.map → chunk-FXX6RQYC.js.map} +0 -0
  341. /package/dist/{chunk-S75UQ3T3.js.map → chunk-GDDGZVFI.js.map} +0 -0
  342. /package/dist/{chunk-S2SJEOTM.js.map → chunk-GFIKG4FR.js.map} +0 -0
  343. /package/dist/{chunk-7NDM2PNK.js.map → chunk-GZICBRWK.js.map} +0 -0
  344. /package/dist/{chunk-X4IDNPOS.js.map → chunk-HAEU3ZW7.js.map} +0 -0
  345. /package/dist/{chunk-GKEYXXKX.js.map → chunk-IXXABW5A.js.map} +0 -0
  346. /package/dist/{chunk-GGBSF2X7.js.map → chunk-JB6D7EFB.js.map} +0 -0
  347. /package/dist/{chunk-E633OXMH.js.map → chunk-JPHEOE6Z.js.map} +0 -0
  348. /package/dist/{chunk-6XGEBQ3R.js.map → chunk-KDG2KTWW.js.map} +0 -0
  349. /package/dist/{chunk-7BLWBSRL.js.map → chunk-LEJPSMKM.js.map} +0 -0
  350. /package/dist/{chunk-JDCQK3C5.js.map → chunk-M4A44LUA.js.map} +0 -0
  351. /package/dist/{chunk-ZDAYWJV6.js.map → chunk-NO37MR45.js.map} +0 -0
  352. /package/dist/{chunk-PWLB4TRK.js.map → chunk-OQAL6SIR.js.map} +0 -0
  353. /package/dist/{chunk-QWLW3VQH.js.map → chunk-PLKFO2HJ.js.map} +0 -0
  354. /package/dist/{chunk-EURCX6PS.js.map → chunk-PWN32TAG.js.map} +0 -0
  355. /package/dist/{chunk-ELQCS47S.js.map → chunk-PYKKWQZ2.js.map} +0 -0
  356. /package/dist/{chunk-P4QOYG52.js.map → chunk-QN7NTKRC.js.map} +0 -0
  357. /package/dist/{chunk-7VWZ4LRW.js.map → chunk-QW3WFHKU.js.map} +0 -0
  358. /package/dist/{chunk-ZJIFYUJI.js.map → chunk-SV3PSA7Y.js.map} +0 -0
  359. /package/dist/{chunk-LQKXVQZR.js.map → chunk-TQFHQPWD.js.map} +0 -0
  360. /package/dist/{chunk-GSEPRIZC.js.map → chunk-TS4AJ2GI.js.map} +0 -0
  361. /package/dist/{chunk-VFS3MK5F.js.map → chunk-V5H6OJCR.js.map} +0 -0
  362. /package/dist/{chunk-T35UJI5R.js.map → chunk-V7X767RT.js.map} +0 -0
  363. /package/dist/{chunk-4S3ECH3U.js.map → chunk-VJXY5ZCT.js.map} +0 -0
  364. /package/dist/{chunk-PLCHU56K.js.map → chunk-YQ4IQ2GA.js.map} +0 -0
  365. /package/dist/{chunk-LTOAJXZB.js.map → chunk-Z3RHPGSY.js.map} +0 -0
  366. /package/dist/{chunk-5XCN4XBU.js.map → chunk-ZQOCRIGA.js.map} +0 -0
  367. /package/dist/{forget-GJ42LCBW.js.map → forget-UJDJHG6R.js.map} +0 -0
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-KSXJOC4F.js";
5
5
  import {
6
6
  StorageManager
7
- } from "./chunk-24BKGKGO.js";
7
+ } from "./chunk-BOFVT6P3.js";
8
8
  import {
9
9
  isSafeRouteNamespace
10
10
  } from "./chunk-U3PN77QT.js";
@@ -134,4 +134,4 @@ export {
134
134
  runCodexMaterialize,
135
135
  runPostConsolidationMaterialize
136
136
  };
137
- //# sourceMappingURL=chunk-NKL25FCF.js.map
137
+ //# sourceMappingURL=chunk-4MBPIL4V.js.map
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-GDB4J2H3.js";
9
9
  import {
10
10
  importCapsule
11
- } from "./chunk-5XCN4XBU.js";
11
+ } from "./chunk-ZQOCRIGA.js";
12
12
  import {
13
13
  WriteQuarantineStore
14
14
  } from "./chunk-PJSK6OJM.js";
@@ -45,7 +45,7 @@ import {
45
45
  } from "./chunk-AHVEHR6K.js";
46
46
  import {
47
47
  readAggregateExtractionWatermark
48
- } from "./chunk-FV7YQTN3.js";
48
+ } from "./chunk-2S72LWKX.js";
49
49
  import {
50
50
  recordObjectiveStateSnapshotsFromObservedMessages
51
51
  } from "./chunk-2HIJHXB3.js";
@@ -69,10 +69,10 @@ import {
69
69
  } from "./chunk-EI6V5UXY.js";
70
70
  import {
71
71
  CONNECTOR_LABEL_MAX_LENGTH
72
- } from "./chunk-X4IDNPOS.js";
72
+ } from "./chunk-HAEU3ZW7.js";
73
73
  import {
74
74
  isValidConnectorId
75
- } from "./chunk-PNRA7FAD.js";
75
+ } from "./chunk-RZRUV6N2.js";
76
76
  import {
77
77
  formatProfileTraceAscii
78
78
  } from "./chunk-NLE6TSLG.js";
@@ -84,14 +84,14 @@ import {
84
84
  persistExplicitCapture,
85
85
  queueExplicitCaptureForReview,
86
86
  validateExplicitCaptureInput
87
- } from "./chunk-N3CXAYPJ.js";
87
+ } from "./chunk-2HGUDBRJ.js";
88
88
  import {
89
89
  lcmEvidenceIdentity
90
90
  } from "./chunk-C37ZRXX7.js";
91
91
  import {
92
92
  CorpusWatermarkCache,
93
93
  computeServiceCorpusCensus
94
- } from "./chunk-ZN4EYMKJ.js";
94
+ } from "./chunk-67QG75MJ.js";
95
95
  import {
96
96
  namespaceCollectionName
97
97
  } from "./chunk-KMWYZTIE.js";
@@ -106,7 +106,7 @@ import {
106
106
  listMemoryGovernanceRuns,
107
107
  readMemoryGovernanceRunArtifact,
108
108
  runMemoryGovernance
109
- } from "./chunk-WPZX7MEA.js";
109
+ } from "./chunk-FXX6RQYC.js";
110
110
  import {
111
111
  defaultCapsulesDir
112
112
  } from "./chunk-ZY2MNJR6.js";
@@ -120,14 +120,14 @@ import {
120
120
  enqueuePassiveCorrectionNotification,
121
121
  parseBriefingFocus,
122
122
  parseBriefingWindow
123
- } from "./chunk-4S3ECH3U.js";
123
+ } from "./chunk-VJXY5ZCT.js";
124
124
  import {
125
125
  parseEntityFile,
126
126
  parseFrontmatter,
127
127
  qmdCollectionPathParts,
128
128
  qmdResultPathCandidates,
129
129
  selfDeps
130
- } from "./chunk-24BKGKGO.js";
130
+ } from "./chunk-BOFVT6P3.js";
131
131
  import {
132
132
  DEFAULT_RECALL_DISCLOSURE,
133
133
  isRecallDisclosure
@@ -153,10 +153,10 @@ import {
153
153
  } from "./chunk-R3DJVOSM.js";
154
154
  import {
155
155
  createVersion
156
- } from "./chunk-PWLB4TRK.js";
156
+ } from "./chunk-OQAL6SIR.js";
157
157
  import {
158
158
  supersessionKeysForFact
159
- } from "./chunk-P26YHAQH.js";
159
+ } from "./chunk-EWMTOVMY.js";
160
160
  import {
161
161
  ExtractionDeadlineError,
162
162
  isActivityDigestPath,
@@ -13523,4 +13523,4 @@ export {
13523
13523
  EngramAccessService,
13524
13524
  AccessAdminOpsSurface
13525
13525
  };
13526
- //# sourceMappingURL=chunk-PWIMF7LP.js.map
13526
+ //# sourceMappingURL=chunk-5C2HNJMO.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  listNamespaces
3
- } from "./chunk-GSEPRIZC.js";
3
+ } from "./chunk-TS4AJ2GI.js";
4
4
  import {
5
5
  capabilityAllowsNamespace
6
6
  } from "./chunk-MZWSOLMT.js";
@@ -282,4 +282,4 @@ export {
282
282
  computeServiceCorpusWatermarks,
283
283
  computeServiceCorpusCensus
284
284
  };
285
- //# sourceMappingURL=chunk-ZN4EYMKJ.js.map
285
+ //# sourceMappingURL=chunk-67QG75MJ.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-24BKGKGO.js";
3
+ } from "./chunk-BOFVT6P3.js";
4
4
  import {
5
5
  keyring_exports,
6
6
  secureStoreDir
@@ -388,4 +388,4 @@ export {
388
388
  resolveNamespaceStorageRoot,
389
389
  NamespaceStorageRouter
390
390
  };
391
- //# sourceMappingURL=chunk-JI62YGPI.js.map
391
+ //# sourceMappingURL=chunk-6QPHF6RR.js.map
@@ -9,14 +9,14 @@ import {
9
9
  } from "./chunk-666A3MOW.js";
10
10
  import {
11
11
  rebuildMemoryLifecycleLedger
12
- } from "./chunk-S75UQ3T3.js";
12
+ } from "./chunk-GDDGZVFI.js";
13
13
  import {
14
14
  planNamespaceMaintenance,
15
15
  runNamespaceMaintenanceBatchPlan
16
- } from "./chunk-O76MWTVS.js";
16
+ } from "./chunk-7BAYBYY5.js";
17
17
  import {
18
18
  rebuildMemoryProjection
19
- } from "./chunk-LTOAJXZB.js";
19
+ } from "./chunk-Z3RHPGSY.js";
20
20
  import {
21
21
  activityDayWindow,
22
22
  activityDigestPath,
@@ -1714,4 +1714,4 @@ export {
1714
1714
  ActivitySyncScheduler,
1715
1715
  MaintenanceScheduler
1716
1716
  };
1717
- //# sourceMappingURL=chunk-4EABKPZS.js.map
1717
+ //# sourceMappingURL=chunk-75XOWNRS.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  resolveDefaultNamespaceRoot,
3
3
  resolveNamespaceStorageRoot
4
- } from "./chunk-JI62YGPI.js";
4
+ } from "./chunk-6QPHF6RR.js";
5
5
  import {
6
6
  getConfiguredNamespaces
7
7
  } from "./chunk-YN6ASZUG.js";
@@ -2204,4 +2204,4 @@ export {
2204
2204
  runNamespaceMaintenancePlan,
2205
2205
  runNamespaceMaintenanceBatchPlan
2206
2206
  };
2207
- //# sourceMappingURL=chunk-O76MWTVS.js.map
2207
+ //# sourceMappingURL=chunk-7BAYBYY5.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-B7RWBZXW.js";
4
4
  import {
5
5
  StorageManager
6
- } from "./chunk-24BKGKGO.js";
6
+ } from "./chunk-BOFVT6P3.js";
7
7
  import {
8
8
  getCachedEpisodeMap,
9
9
  setCachedEpisodeMap
@@ -109,4 +109,4 @@ export {
109
109
  compareVerifiedEpisodeResults,
110
110
  searchVerifiedEpisodes
111
111
  };
112
- //# sourceMappingURL=chunk-4JWJMRPJ.js.map
112
+ //# sourceMappingURL=chunk-7PKFPLLZ.js.map
@@ -61,7 +61,7 @@ import {
61
61
  isQueuedReviewMemory,
62
62
  parseTombstoneBlockedOfflineSyncMemory,
63
63
  tombstoneBlocked
64
- } from "./chunk-GKEYXXKX.js";
64
+ } from "./chunk-IXXABW5A.js";
65
65
  import {
66
66
  composeMemoryEnvelope,
67
67
  isSealedMemoryEnvelope,
@@ -83,7 +83,7 @@ import {
83
83
  } from "./chunk-G7D6GZ5J.js";
84
84
  import {
85
85
  createVersion
86
- } from "./chunk-PWLB4TRK.js";
86
+ } from "./chunk-OQAL6SIR.js";
87
87
  import {
88
88
  attachInFlightReader,
89
89
  beginCoalescedScan,
@@ -105,12 +105,12 @@ import {
105
105
  requestEntityCanonicalIdReconcileSync,
106
106
  resolveHistoricalEntityCanonicalId,
107
107
  withEntityCanonicalMutationLock
108
- } from "./chunk-JDCQK3C5.js";
108
+ } from "./chunk-M4A44LUA.js";
109
109
  import {
110
110
  computeSupersessionKey,
111
111
  normalizeSupersessionKey,
112
112
  supersessionKeysForFact
113
- } from "./chunk-P26YHAQH.js";
113
+ } from "./chunk-EWMTOVMY.js";
114
114
  import {
115
115
  clearMemoryCache,
116
116
  getCachedEntities,
@@ -10850,4 +10850,4 @@ export {
10850
10850
  isValidBufferSurpriseEvent,
10851
10851
  StorageManager3 as StorageManager
10852
10852
  };
10853
- //# sourceMappingURL=chunk-24BKGKGO.js.map
10853
+ //# sourceMappingURL=chunk-BOFVT6P3.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  computeCorpusWatermarks,
6
6
  resolveCorpusNamespaceRoots
7
- } from "./chunk-ZN4EYMKJ.js";
7
+ } from "./chunk-67QG75MJ.js";
8
8
 
9
9
  // src/operator-doctor-corpus.ts
10
10
  var DIGEST_PREFIX_LENGTH = 12;
@@ -78,4 +78,4 @@ export {
78
78
  corpusWatermarksFromCheck,
79
79
  summarizeCorpusAndReplica
80
80
  };
81
- //# sourceMappingURL=chunk-SHYIMIX5.js.map
81
+ //# sourceMappingURL=chunk-ESG7Z255.js.map
@@ -44,8 +44,8 @@ function findDependents(memories, oldMemory, linkTypes = ["supports", "follows"]
44
44
  return left < right ? -1 : left > right ? 1 : 0;
45
45
  });
46
46
  }
47
- function emptyResult(skipped) {
48
- return { dependentsFound: 0, invalidated: 0, stillValid: 0, uncertain: 0, skipped };
47
+ function emptyResult(skipped, durationMs, route = null, dependentsFound = 0) {
48
+ return { dependentsFound, invalidated: 0, stillValid: 0, uncertain: 0, skipped, route, durationMs };
49
49
  }
50
50
  function logResult(event, result) {
51
51
  const oldId = event.oldMemory.frontmatter.id;
@@ -57,7 +57,9 @@ function logResult(event, result) {
57
57
  invalidated: result.invalidated,
58
58
  stillValid: result.stillValid,
59
59
  uncertain: result.uncertain,
60
- skipped: result.skipped
60
+ skipped: result.skipped,
61
+ route: result.route,
62
+ durationMs: result.durationMs
61
63
  })}`
62
64
  );
63
65
  }
@@ -71,15 +73,16 @@ function isTimeoutError(error, signal) {
71
73
  return signal.aborted || error instanceof PropagationTimeoutError || error instanceof Error && (error.name === "AbortError" || /timeout|timed out/i.test(error.message));
72
74
  }
73
75
  async function propagateInvalidation(deps, event) {
76
+ const startedAt = Date.now();
74
77
  const config = propagationConfig(deps.config);
75
78
  if (!isEnabled(config.enabled)) {
76
- const result2 = emptyResult("disabled");
79
+ const result2 = emptyResult("disabled", Date.now() - startedAt);
77
80
  logResult(event, result2);
78
81
  return result2;
79
82
  }
80
83
  const maxDependents = config.maxDependents;
81
84
  if (maxDependents <= 0) {
82
- const result2 = emptyResult("no_dependents");
85
+ const result2 = emptyResult("no_dependents", Date.now() - startedAt);
83
86
  logResult(event, result2);
84
87
  return result2;
85
88
  }
@@ -88,7 +91,7 @@ async function propagateInvalidation(deps, event) {
88
91
  memories = await deps.storage.readAllMemories();
89
92
  } catch (error) {
90
93
  log.warn(`dependency propagation discovery failed for ${event.oldMemory.frontmatter.id}: ${error}`);
91
- const result2 = emptyResult("llm_error");
94
+ const result2 = emptyResult("llm_error", Date.now() - startedAt);
92
95
  logResult(event, result2);
93
96
  return result2;
94
97
  }
@@ -99,40 +102,59 @@ async function propagateInvalidation(deps, event) {
99
102
  ).filter((memory) => memory.frontmatter.id !== event.replacementId);
100
103
  const dependents = discovered.slice(0, Math.max(0, Math.floor(maxDependents)));
101
104
  if (dependents.length === 0) {
102
- const result2 = emptyResult("no_dependents");
105
+ const result2 = emptyResult("no_dependents", Date.now() - startedAt);
103
106
  logResult(event, result2);
104
107
  return result2;
105
108
  }
106
109
  const controller = new AbortController();
107
110
  const timeoutMs = config.timeoutMs;
108
- const timeout = Number.isFinite(timeoutMs) && timeoutMs > 0 ? setTimeout(() => controller.abort(new PropagationTimeoutError()), timeoutMs) : void 0;
111
+ let timedOut = false;
112
+ let timeout;
113
+ const deadline = Number.isFinite(timeoutMs) && timeoutMs > 0 ? new Promise((_, reject) => {
114
+ timeout = setTimeout(() => {
115
+ timedOut = true;
116
+ const error = new PropagationTimeoutError();
117
+ controller.abort(error);
118
+ reject(error);
119
+ }, timeoutMs);
120
+ }) : void 0;
121
+ const revalidation = Promise.resolve().then(() => deps.extraction.revalidateDependents(
122
+ { id: event.oldMemory.frontmatter.id, content: event.oldMemory.content },
123
+ event.replacementId && event.replacementContent !== null ? { id: event.replacementId, content: event.replacementContent } : null,
124
+ dependents.map((memory) => ({
125
+ id: memory.frontmatter.id,
126
+ category: memory.frontmatter.category,
127
+ content: memory.content
128
+ })),
129
+ controller.signal
130
+ ));
109
131
  let verdicts;
110
132
  try {
111
- const response = await deps.extraction.revalidateDependents(
112
- { id: event.oldMemory.frontmatter.id, content: event.oldMemory.content },
113
- event.replacementId && event.replacementContent !== null ? { id: event.replacementId, content: event.replacementContent } : null,
114
- dependents.map((memory) => ({
115
- id: memory.frontmatter.id,
116
- category: memory.frontmatter.category,
117
- content: memory.content
118
- })),
119
- controller.signal
120
- );
121
- verdicts = response.verdicts;
122
- if (controller.signal.aborted) {
123
- if (timeout !== void 0) clearTimeout(timeout);
124
- const result2 = emptyResult("timeout");
133
+ const response = deadline ? await Promise.race([revalidation, deadline]) : await revalidation;
134
+ if (timedOut || controller.signal.aborted) {
135
+ const result2 = emptyResult(
136
+ "timeout",
137
+ Date.now() - startedAt,
138
+ "fast-completion",
139
+ dependents.length
140
+ );
125
141
  logResult(event, result2);
126
142
  return result2;
127
143
  }
144
+ verdicts = response.verdicts;
128
145
  } catch (error) {
129
- const result2 = emptyResult(isTimeoutError(error, controller.signal) ? "timeout" : "llm_error");
146
+ const result2 = emptyResult(
147
+ timedOut || isTimeoutError(error, controller.signal) ? "timeout" : "llm_error",
148
+ Date.now() - startedAt,
149
+ "fast-completion",
150
+ dependents.length
151
+ );
130
152
  log.warn(`dependency propagation revalidation failed for ${event.oldMemory.frontmatter.id}: ${error}`);
131
153
  logResult(event, result2);
132
- if (timeout !== void 0) clearTimeout(timeout);
133
154
  return result2;
155
+ } finally {
156
+ clearTimeout(timeout);
134
157
  }
135
- if (timeout !== void 0) clearTimeout(timeout);
136
158
  let invalidated = 0;
137
159
  let stillValid = 0;
138
160
  let uncertain = 0;
@@ -176,7 +198,9 @@ async function propagateInvalidation(deps, event) {
176
198
  invalidated,
177
199
  stillValid,
178
200
  uncertain,
179
- skipped: null
201
+ skipped: null,
202
+ route: "fast-completion",
203
+ durationMs: Date.now() - startedAt
180
204
  };
181
205
  logResult(event, result);
182
206
  return result;
@@ -457,4 +481,4 @@ export {
457
481
  applyTemporalSupersession,
458
482
  shouldFilterSupersededFromRecall
459
483
  };
460
- //# sourceMappingURL=chunk-P26YHAQH.js.map
484
+ //# sourceMappingURL=chunk-EWMTOVMY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/orchestration/dependency-propagation.ts","../src/temporal-supersession.ts"],"sourcesContent":["/**\n * Bounded, one-hop invalidation propagation for linked memories.\n *\n * Propagation hooks stay at orchestration call sites. They never live inside\n * StorageManager, so propagation supersessions cannot recurse.\n */\nimport type { ExtractionEngine } from \"../extraction.js\";\nimport { log } from \"../logger.js\";\nimport type { StorageManager } from \"../index.js\";\nimport type {\n DependencyPropagationConfig,\n MemoryFile,\n MemoryFrontmatter,\n MemoryLinkType,\n PluginConfig,\n} from \"../types.js\";\n\nexport interface PropagationEvent {\n /** Snapshot captured before the primary supersession or deletion. */\n oldMemory: { content: string; frontmatter: MemoryFrontmatter };\n replacementId: string | null;\n replacementContent: string | null;\n cause:\n | \"contradiction\"\n | \"temporal_supersession\"\n | \"consolidation_invalidate\"\n | \"consolidation_merge\";\n namespaceScope: string;\n}\n\nexport interface PropagationResult {\n dependentsFound: number;\n invalidated: number;\n stillValid: number;\n uncertain: number;\n skipped: \"disabled\" | \"no_dependents\" | \"llm_error\" | \"timeout\" | null;\n route: \"fast-completion\" | null;\n durationMs: number;\n}\n\nfunction propagationConfig(config: PluginConfig): DependencyPropagationConfig {\n return config.dependencyPropagation;\n}\n\nfunction isEnabled(value: unknown): boolean {\n if (value === true) return true;\n if (typeof value !== \"string\") return false;\n return [\"true\", \"1\", \"yes\", \"on\"].includes(value.trim().toLowerCase());\n}\n\nconst ACTIVE_STATUS = \"active\";\n\n/**\n * Discover exactly one-hop dependents from a memory snapshot.\n *\n * A supports edge on the dying memory points forward to its dependent.\n * follows and configured references edges point back to the dying memory.\n */\nexport function findDependents(\n memories: MemoryFile[],\n oldMemory: Pick<PropagationEvent[\"oldMemory\"], \"frontmatter\">,\n linkTypes: readonly MemoryLinkType[] = [\"supports\", \"follows\"],\n): MemoryFile[] {\n const allowed = new Set(linkTypes);\n const ids = new Set<string>();\n const byId = new Map(memories.map((memory) => [memory.frontmatter.id, memory]));\n\n // Forward: supports and references edges on the dying memory point to\n // dependents that lose evidence or a referenced anchor.\n for (const link of oldMemory.frontmatter.links ?? []) {\n if (link.linkType !== \"supports\" && link.linkType !== \"references\") continue;\n if (!allowed.has(link.linkType)) continue;\n const dependent = byId.get(link.targetId);\n if (dependent && (dependent.frontmatter.status ?? ACTIVE_STATUS) === ACTIVE_STATUS) {\n ids.add(dependent.frontmatter.id);\n }\n }\n\n const oldId = oldMemory.frontmatter.id;\n for (const memory of memories) {\n if ((memory.frontmatter.status ?? ACTIVE_STATUS) !== ACTIVE_STATUS) continue;\n if (memory.frontmatter.id === oldId) continue;\n for (const link of memory.frontmatter.links ?? []) {\n if (link.targetId !== oldId) continue;\n if (link.linkType !== \"follows\" && link.linkType !== \"references\") continue;\n if (!allowed.has(link.linkType)) continue;\n ids.add(memory.frontmatter.id);\n }\n }\n\n return Array.from(ids)\n .map((id) => byId.get(id))\n .filter((memory): memory is MemoryFile => memory !== undefined)\n .sort((a, b) => {\n const left = a.frontmatter.id;\n const right = b.frontmatter.id;\n return left < right ? -1 : left > right ? 1 : 0;\n });\n}\n\nfunction emptyResult(\n skipped: PropagationResult[\"skipped\"],\n durationMs: number,\n route: PropagationResult[\"route\"] = null,\n dependentsFound = 0,\n): PropagationResult {\n return { dependentsFound, invalidated: 0, stillValid: 0, uncertain: 0, skipped, route, durationMs };\n}\n\nfunction logResult(event: PropagationEvent, result: PropagationResult): void {\n const oldId = event.oldMemory.frontmatter.id;\n log.info(\n `dependency-propagation ${JSON.stringify({\n cause: event.cause,\n oldId,\n dependentsFound: result.dependentsFound,\n invalidated: result.invalidated,\n stillValid: result.stillValid,\n uncertain: result.uncertain,\n skipped: result.skipped,\n route: result.route,\n durationMs: result.durationMs,\n })}`,\n );\n}\n\nclass PropagationTimeoutError extends Error {\n constructor() {\n super(\"dependency propagation timed out\");\n this.name = \"PropagationTimeoutError\";\n }\n}\n\nfunction isTimeoutError(error: unknown, signal: AbortSignal): boolean {\n return signal.aborted || error instanceof PropagationTimeoutError ||\n (error instanceof Error && (error.name === \"AbortError\" || /timeout|timed out/i.test(error.message)));\n}\n\n/**\n * Revalidate one-hop dependents after a successful primary operation.\n * The caller's storage is already namespace-scoped; this function never\n * constructs another storage or scans a different namespace.\n */\nexport async function propagateInvalidation(\n deps: { storage: StorageManager; extraction: ExtractionEngine; config: PluginConfig },\n event: PropagationEvent,\n): Promise<PropagationResult> {\n const startedAt = Date.now();\n const config = propagationConfig(deps.config);\n if (!isEnabled(config.enabled)) {\n const result = emptyResult(\"disabled\", Date.now() - startedAt);\n logResult(event, result);\n return result;\n }\n\n const maxDependents = config.maxDependents;\n if (maxDependents <= 0) {\n const result = emptyResult(\"no_dependents\", Date.now() - startedAt);\n logResult(event, result);\n return result;\n }\n\n let memories: MemoryFile[];\n try {\n memories = await deps.storage.readAllMemories();\n } catch (error) {\n log.warn(`dependency propagation discovery failed for ${event.oldMemory.frontmatter.id}: ${error}`);\n const result = emptyResult(\"llm_error\", Date.now() - startedAt);\n logResult(event, result);\n return result;\n }\n // Cold-tier active dependents are not scanned in v1: the supersede and\n // frontmatter write paths operate on hot storage. Cold discovery without\n // cold write support would surface dependents it cannot act on.\n\n const discovered = findDependents(\n memories,\n event.oldMemory,\n config.linkTypes,\n ).filter((memory) => memory.frontmatter.id !== event.replacementId);\n const dependents = discovered.slice(0, Math.max(0, Math.floor(maxDependents)));\n\n if (dependents.length === 0) {\n const result = emptyResult(\"no_dependents\", Date.now() - startedAt);\n logResult(event, result);\n return result;\n }\n\n const controller = new AbortController();\n const timeoutMs = config.timeoutMs;\n let timedOut = false;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const deadline = Number.isFinite(timeoutMs) && timeoutMs > 0\n ? new Promise<never>((_, reject) => {\n timeout = setTimeout(() => {\n timedOut = true;\n const error = new PropagationTimeoutError();\n controller.abort(error);\n reject(error);\n }, timeoutMs);\n })\n : undefined;\n const revalidation = Promise.resolve().then(() => deps.extraction.revalidateDependents(\n { id: event.oldMemory.frontmatter.id, content: event.oldMemory.content },\n event.replacementId && event.replacementContent !== null\n ? { id: event.replacementId, content: event.replacementContent }\n : null,\n dependents.map((memory) => ({\n id: memory.frontmatter.id,\n category: memory.frontmatter.category,\n content: memory.content,\n })),\n controller.signal,\n ));\n\n let verdicts: Array<{ memoryId: string; verdict: \"still_valid\" | \"invalidated\" | \"uncertain\"; reason?: string }>;\n try {\n const response = deadline\n ? await Promise.race([revalidation, deadline])\n : await revalidation;\n if (timedOut || controller.signal.aborted) {\n const result = emptyResult(\n \"timeout\",\n Date.now() - startedAt,\n \"fast-completion\",\n dependents.length,\n );\n logResult(event, result);\n return result;\n }\n verdicts = response.verdicts;\n } catch (error) {\n const result = emptyResult(\n timedOut || isTimeoutError(error, controller.signal) ? \"timeout\" : \"llm_error\",\n Date.now() - startedAt,\n \"fast-completion\",\n dependents.length,\n );\n log.warn(`dependency propagation revalidation failed for ${event.oldMemory.frontmatter.id}: ${error}`);\n logResult(event, result);\n return result;\n } finally {\n clearTimeout(timeout!);\n }\n\n let invalidated = 0;\n let stillValid = 0;\n let uncertain = 0;\n for (const dependent of dependents) {\n const verdict = verdicts.find((candidate) => candidate.memoryId === dependent.frontmatter.id);\n if (verdict?.verdict === \"invalidated\") {\n if (config.dryRun) {\n invalidated += 1;\n continue;\n }\n try {\n const replacementId = event.replacementId ?? event.oldMemory.frontmatter.id;\n const superseded = await deps.storage.supersedeMemory(\n dependent.frontmatter.id,\n replacementId,\n `dependency_propagation:${event.cause}`,\n );\n if (!superseded) continue;\n const current = await deps.storage.getMemoryById(dependent.frontmatter.id);\n if (current) {\n await deps.storage.writeMemoryFrontmatter(current, {\n supersessionCause: \"dependency\",\n invalidatedBy: event.oldMemory.frontmatter.id,\n });\n }\n invalidated += 1;\n } catch (error) {\n log.warn(`dependency propagation write failed for ${dependent.frontmatter.id}: ${error}`);\n }\n continue;\n }\n if (verdict?.verdict === \"still_valid\") {\n stillValid += 1;\n } else {\n uncertain += 1;\n log.info(`dependency propagation uncertain for ${dependent.frontmatter.id}`);\n }\n }\n\n const result: PropagationResult = {\n dependentsFound: dependents.length,\n invalidated,\n stillValid,\n uncertain,\n skipped: null,\n route: \"fast-completion\",\n durationMs: Date.now() - startedAt,\n };\n logResult(event, result);\n return result;\n}\n","/**\n * Temporal Supersession (issue #375)\n *\n * When a new fact lands with `structuredAttributes` keyed on a known\n * `entityRef`, any prior fact whose supersession key collides with the new\n * fact's key is marked `status: \"superseded\"` and linked via\n * `supersededBy` / `supersededAt`. Recall filters those superseded memories\n * by default so agents see only the \"current\" value per entity attribute.\n *\n * The algorithm is intentionally O(N) over the memory corpus per write, but\n * skips cheaply when the new fact has no structuredAttributes. It reuses the\n * cached `readAllMemories()` path so cost is amortized with the rest of the\n * write pipeline.\n */\nimport type { MemoryFile, MemoryFrontmatter, PluginConfig } from \"./types.js\";\nimport type { ExtractionEngine } from \"./extraction.js\";\nimport type { StorageManager } from \"./storage.js\";\nimport { log } from \"./logger.js\";\nimport { effectiveValidAt } from \"./temporal-validity.js\";\nimport { propagateInvalidation } from \"./orchestration/dependency-propagation.js\";\n\n/**\n * Shared normalization for supersession key components.\n *\n * Trims surrounding whitespace, lowercases, then collapses any run of\n * whitespace OR hyphens to a single hyphen, and strips any leading/trailing\n * hyphens that result. Both `computeSupersessionKey` and\n * `lookupAttributeByNormalizedKey` must use this so that keys produced at\n * write time and keys used at lookup time are identical regardless of how\n * the LLM encoded whitespace, hyphens, or casing (Finding B fix).\n *\n * Symmetry guarantee: `\"foo bar\"`, `\"foo-bar\"`, `\"foo - bar\"`, and\n * `\"foo bar\"` all canonicalize to `\"foo-bar\"`.\n *\n * Exported so external tests can verify the canonical form.\n */\nexport function normalizeSupersessionKey(raw: string): string {\n return raw\n .trim()\n .toLowerCase()\n .replace(/[\\s\\-]+/g, \"-\")\n // The previous line already collapsed runs to single hyphens, so ^-|-$ is\n // equivalent to ^-+|-+$ here and drops the anchored quantifier flagged by\n // CodeQL js/polynomial-redos.\n .replace(/^-|-$/g, \"\");\n}\n\n/**\n * Stable supersession key for an (entityRef, attributeName) pair.\n *\n * The algorithm is:\n * - normalize the entityRef (trim, lower-case, collapse whitespace)\n * - normalize the attributeName the same way\n * - join with `::`\n *\n * Exported so tests and tools can recompute it without depending on storage.\n */\nexport function computeSupersessionKey(\n entityRef: string | undefined,\n attributeName: string,\n): string | null {\n if (!entityRef || typeof entityRef !== \"string\") return null;\n if (!attributeName || typeof attributeName !== \"string\") return null;\n const entity = normalizeSupersessionKey(entityRef);\n const attr = normalizeSupersessionKey(attributeName);\n if (entity.length === 0 || attr.length === 0) return null;\n return `${entity}::${attr}`;\n}\n\n/**\n * Compute the full set of supersession keys for a fact with structured\n * attributes. Returns an empty array if no keys can be derived.\n */\nexport function supersessionKeysForFact(spec: {\n entityRef?: string;\n structuredAttributes?: Record<string, string>;\n}): string[] {\n if (!spec.entityRef) return [];\n if (!spec.structuredAttributes) return [];\n const keys: string[] = [];\n for (const attrName of Object.keys(spec.structuredAttributes)) {\n const key = computeSupersessionKey(spec.entityRef, attrName);\n if (key) keys.push(key);\n }\n return keys;\n}\n\n/**\n * Look up a structured-attribute value by a raw key, normalizing both sides\n * with `normalizeSupersessionKey` before comparing. This ensures that keys\n * written by the LLM with mixed case, surrounding whitespace, or internal\n * whitespace (e.g. `\"City\"`, `\" city \"`, `\"job title\"`, `\"job-title\"`)\n * are all matched against normalized keys produced by `computeSupersessionKey`\n * (Finding B fix — uses the same helper so both sides are identical).\n *\n * The storage format is NOT changed — we only normalize at lookup time.\n */\nexport function lookupAttributeByNormalizedKey(\n attributes: Record<string, unknown>,\n rawKey: string,\n): unknown {\n const normalizedTarget = normalizeSupersessionKey(rawKey);\n for (const [k, v] of Object.entries(attributes)) {\n if (normalizeSupersessionKey(k) === normalizedTarget) return v;\n }\n return undefined;\n}\n\n/**\n * Decide whether an existing memory should be superseded by a newly-written\n * memory that carries the supplied supersession key set.\n *\n * Only memories that:\n * - are currently `active`\n * - share an `entityRef` with the new fact\n * - share at least one supersession key with the new fact\n * - are older than the new fact\n * - have a conflicting value (different string) for the overlapping key\n * are eligible. This keeps supersession local to the attribute that actually\n * changed — if fact A sets `{city: Austin, tool: vim}` and fact B sets\n * `{city: NYC}`, only the city attribute is superseded, not the tool.\n */\nexport function shouldSupersedeExisting(args: {\n candidate: MemoryFrontmatter;\n newEntityRef: string;\n newAttributes: Record<string, string>;\n newCreatedAt: string;\n newMemoryId: string;\n}): { matchedKeys: string[] } | null {\n const { candidate, newEntityRef, newAttributes, newCreatedAt, newMemoryId } = args;\n\n if (candidate.id === newMemoryId) return null;\n if (candidate.status && candidate.status !== \"active\") return null;\n if (!candidate.entityRef) return null;\n if (!candidate.structuredAttributes) return null;\n\n // Reuse the shared `normalizeSupersessionKey` helper so this comparison\n // cannot drift from the canonical form used to build supersession keys\n // elsewhere in this file.\n const candidateEntityNorm = normalizeSupersessionKey(candidate.entityRef);\n const newEntityNorm = normalizeSupersessionKey(newEntityRef);\n if (candidateEntityNorm !== newEntityNorm) return null;\n\n // Must be older than the new fact's effective validity start — equal\n // timestamps are ignored to avoid races within the same millisecond. When\n // replay/import supplies source time, valid_at must drive ordering instead\n // of wall-clock persistence time.\n const candidateCreated = Date.parse(effectiveValidAt(candidate));\n const newCreated = Date.parse(newCreatedAt);\n if (!Number.isFinite(candidateCreated) || !Number.isFinite(newCreated)) return null;\n if (candidateCreated >= newCreated) return null;\n\n const matchedKeys: string[] = [];\n for (const [attrName, newValue] of Object.entries(newAttributes)) {\n // Use normalized key lookup so mixed-case or whitespace-padded keys\n // stored by the LLM are matched correctly (Finding 2 fix).\n const candidateValue = lookupAttributeByNormalizedKey(\n candidate.structuredAttributes,\n attrName,\n );\n if (candidateValue === undefined) continue;\n // Only supersede on conflicting values — identical values are a no-op.\n if (normalizeValue(String(candidateValue)) === normalizeValue(newValue)) continue;\n const key = computeSupersessionKey(newEntityRef, attrName);\n if (key) matchedKeys.push(key);\n }\n\n return matchedKeys.length > 0 ? { matchedKeys } : null;\n}\n\nfunction normalizeValue(v: string): string {\n return v.trim().toLowerCase();\n}\n\nasync function expireChildChunksForSupersededParent(args: {\n storage: StorageManager;\n allCandidates: MemoryFile[];\n parentId: string;\n newMemoryId: string;\n supersededAt: string;\n invalidAt?: string;\n}): Promise<void> {\n const processedChunkIds = new Set<string>();\n const chunks = args.allCandidates.filter(\n (candidate) => candidate.frontmatter.parentId === args.parentId,\n );\n\n for (const chunk of chunks) {\n const chunkKey = chunk.frontmatter.id ?? chunk.path;\n if (processedChunkIds.has(chunkKey)) continue;\n\n try {\n const freshChunk = await args.storage.readMemoryByPath(chunk.path);\n if (!freshChunk) continue;\n processedChunkIds.add(chunkKey);\n const freshStatus = freshChunk.frontmatter.status ?? \"active\";\n if (freshStatus !== \"active\" || freshChunk.frontmatter.supersededBy) continue;\n\n await args.storage.writeMemoryFrontmatter(\n freshChunk,\n {\n status: \"superseded\",\n supersededBy: args.newMemoryId,\n supersededAt: args.supersededAt,\n updated: args.supersededAt,\n ...(args.invalidAt && !freshChunk.frontmatter.invalid_at\n ? { invalid_at: args.invalidAt }\n : {}),\n },\n {\n actor: \"temporal-supersession\",\n reasonCode: \"structured-attribute-update-child-chunk\",\n relatedMemoryIds: [args.newMemoryId, args.parentId],\n },\n );\n } catch (err) {\n log.warn(\n `temporal-supersession: failed to expire child chunk ${chunk.frontmatter.id} for parent ${args.parentId}: ${err}`,\n );\n }\n }\n}\n\nexport interface TemporalSupersessionResult {\n supersededIds: string[];\n matchedKeys: string[];\n}\n\n/**\n * Scan existing memories and mark any that are superseded by the\n * just-written memory. Fails open on I/O errors — the new memory is already\n * on disk, and supersession is a best-effort hygiene step.\n */\nexport async function applyTemporalSupersession(args: {\n storage: StorageManager;\n newMemoryId: string;\n entityRef?: string;\n structuredAttributes?: Record<string, string>;\n createdAt: string;\n enabled: boolean;\n /**\n * When true, skip the persisted `frontmatter.created` lookup and use\n * `args.createdAt` directly as the ordering anchor. Set this on the\n * hash-dedup short-circuit path where `newMemoryId` points to an existing\n * OLD fact (no new file is written) and its persisted timestamp would be\n * stale relative to the incoming promotion event (PR #402 Finding Uyui).\n */\n useCallerTimestamp?: boolean;\n /** Optional orchestration dependencies for one-hop propagation. */\n extraction?: ExtractionEngine;\n config?: PluginConfig;\n namespaceScope?: string;\n}): Promise<TemporalSupersessionResult> {\n const empty: TemporalSupersessionResult = { supersededIds: [], matchedKeys: [] };\n if (!args.enabled) return empty;\n if (!args.entityRef) return empty;\n if (!args.structuredAttributes) return empty;\n if (Object.keys(args.structuredAttributes).length === 0) return empty;\n\n const newKeys = supersessionKeysForFact({\n entityRef: args.entityRef,\n structuredAttributes: args.structuredAttributes,\n });\n if (newKeys.length === 0) return empty;\n\n let hotMemories: MemoryFile[];\n try {\n hotMemories = await args.storage.readAllMemories();\n } catch (err) {\n log.warn(`temporal-supersession: readAllMemories failed: ${err}`);\n return empty;\n }\n\n // Finding 1 fix: use the on-disk effective validity start of the\n // newly-written memory rather than a wall-clock timestamp sampled after\n // `writeMemory` returns. In concurrent writers the two can differ by enough\n // to cause wrong-direction supersession. If source replay/import provided\n // valid_at, it must drive ordering; otherwise created remains the legacy\n // fallback. If the memory is not yet visible in the cache (edge case during\n // fast concurrent writes) fall back to args.createdAt.\n //\n // PR #402 round-12 (Finding Uyui): on the hash-dedup early-return path the\n // caller supplies the OLD matching fact's id as `newMemoryId` (no new file is\n // written). That makes `newMemoryFile.frontmatter.created` an arbitrarily\n // old timestamp. When `args.useCallerTimestamp` is set the caller explicitly\n // opts out of the persisted-timestamp lookup so `args.createdAt` (the\n // incoming event time: source valid_at when present, otherwise wall-clock) is\n // used directly, keeping ordering correct regardless of how old the matching\n // fact is.\n const newMemoryFile = hotMemories.find((m) => m.frontmatter.id === args.newMemoryId);\n const persistedCreatedAt = args.useCallerTimestamp\n ? args.createdAt\n : (newMemoryFile ? effectiveValidAt(newMemoryFile.frontmatter) : args.createdAt);\n\n const supersededIds: string[] = [];\n const matchedKeys = new Set<string>();\n\n // Process hot then cold. Hot-then-cold ordering is safer because hot\n // writes are more frequent and the CAS re-read guards against double-writes.\n // A Set<string> of already-processed ids ensures that a memory visible in\n // both tiers (same logical memory with different filesystem paths during a\n // migration race) is processed at most once. Keying on `frontmatter.id`\n // is correct because the same logical memory has the same id regardless of\n // which tier's directory it currently lives in (PR #402 Finding 1 fix).\n // Fall back to path-based keying when id is absent (defensive).\n const processedIds = new Set<string>();\n\n // Finding UOGi fix (round-6): readAllColdMemories() performs a full uncached\n // recursive directory scan of cold/. After Finding UTsP broadened the scan\n // to cover the entire cold root (not just facts/+corrections/), the per-call\n // cost grows with the cold tree size.\n //\n // The fix is a TTL-based in-memory cache inside StorageManager\n // (readAllColdMemories caches its result for COLD_SCAN_CACHE_TTL_MS) that is\n // shared across consecutive supersession calls within the same write burst.\n // The cache is invalidated automatically on any hot→cold demotion (which\n // calls invalidateAllMemoriesCache, which also clears the cold cache) and\n // expires after the TTL as a safety net.\n //\n // This means back-to-back structured-attribute writes in the same burst\n // (e.g. batch extraction) pay the cold I/O cost at most once, not N times.\n // Correctness is preserved because the cache TTL ensures eventual consistency\n // and the invalidation hook covers the hot→cold path.\n\n let coldMemories: MemoryFile[];\n try {\n coldMemories = await args.storage.readAllColdMemories();\n } catch (err) {\n log.warn(`temporal-supersession: readAllColdMemories failed: ${err}`);\n coldMemories = [];\n }\n\n // Combine hot and cold memories into a single scan. New memory itself is\n // excluded inline. We do NOT skip cold scan when hot produced zero\n // supersessions — the P1 finding is precisely that stale cold facts leak\n // when hot has no hits.\n const allCandidates: MemoryFile[] = [...hotMemories, ...coldMemories];\n\n for (const memory of allCandidates) {\n if (memory.frontmatter.id === args.newMemoryId) continue;\n const dedupeKey = memory.frontmatter.id ?? memory.path;\n if (processedIds.has(dedupeKey)) continue;\n const snapshotStatus = memory.frontmatter.status ?? \"active\";\n if (snapshotStatus !== \"active\") {\n // A stale non-active snapshot entry must not suppress an active copy of\n // the same logical memory that appears later in another tier. This can\n // happen during hot/cold migration races where the hot snapshot is already\n // superseded but the cold copy is still active and should be evaluated.\n continue;\n }\n // NOTE: do NOT call processedIds.add(dedupeKey) here. We defer marking\n // the id as processed until AFTER the CAS re-read succeeds. If we mark\n // it here and the re-read fails (e.g. the hot entry has already been\n // migrated to cold storage), the same logical id that appears later in\n // the cold tier scan would be silently skipped, leaving a stale cold\n // fact unsuperseded. Deferring ensures that a failed primary-tier read\n // grants the alternate tier a chance to process the same id (PR #402\n // round-6 Finding 1 fix).\n\n const decision = shouldSupersedeExisting({\n candidate: memory.frontmatter,\n newEntityRef: args.entityRef,\n newAttributes: args.structuredAttributes,\n newCreatedAt: persistedCreatedAt,\n newMemoryId: args.newMemoryId,\n });\n if (!decision) {\n // No supersession decision — safe to mark as processed now so the\n // alternate tier doesn't re-evaluate an identical non-matching entry.\n processedIds.add(dedupeKey);\n continue;\n }\n\n try {\n // CAS-style re-read immediately before the write. `readAllMemories()`\n // is a snapshot — with concurrent writers, another run may have already\n // superseded this candidate since we loaded it. If we blindly trust the\n // snapshot we can clobber a newer `supersededBy` link with a stale one.\n //\n // File storage offers no true locking, so the best we can do is:\n // 1. re-read the exact file we're about to mutate\n // 2. verify status is still \"active\" and no `supersededBy` is set\n // 3. only then issue the write\n // If the re-read shows a newer concurrent writer beat us to it, skip.\n // This CAS pattern applies equally to hot and cold tier candidates.\n // Mark as processed AFTER confirming the candidate is readable so that\n // a migration-race read failure on the hot entry does not silently\n // prevent the cold entry from being evaluated (Finding 1, round 6).\n const fresh = await args.storage.readMemoryByPath(memory.path);\n if (!fresh) {\n log.debug(\n `[engram] temporal supersession skipped candidate ${memory.frontmatter.id}: no longer readable at ${memory.path} — leaving id available for alternate tier`,\n );\n // Do NOT add to processedIds — allow the cold-tier copy to be\n // evaluated in the next iteration of the same scan.\n continue;\n }\n // Candidate is readable — mark the id as processed now to prevent the\n // alternate tier from double-writing.\n processedIds.add(dedupeKey);\n const freshStatus = fresh.frontmatter.status ?? \"active\";\n if (freshStatus !== \"active\" || fresh.frontmatter.supersededBy) {\n log.debug(\n `[engram] temporal supersession skipped candidate ${memory.frontmatter.id}: already superseded by concurrent writer`,\n );\n continue;\n }\n\n // Finding 2 fix: the `supersededAt` / `updated` timestamps written to the\n // old fact must never run backwards relative to its own persisted\n // `created` timestamp. If the caller-supplied `args.createdAt` (which\n // represents \"when the new replacing fact was authored\") is earlier than\n // either the new fact's persisted `created` (T_new) or the old fact's\n // persisted `created` (T_old), we'd be writing a nonsensical\n // `supersededAt` that precedes the old memory's own creation. Clamp to\n // the monotonic maximum so time only moves forward.\n // This monotonic clamp is applied for both hot and cold tier writes.\n const oldCreatedMs = new Date(fresh.frontmatter.created).getTime();\n const newCreatedMs = new Date(persistedCreatedAt).getTime();\n const argCreatedMs = new Date(args.createdAt).getTime();\n const maxMs = Math.max(\n Number.isFinite(oldCreatedMs) ? oldCreatedMs : 0,\n Number.isFinite(newCreatedMs) ? newCreatedMs : 0,\n Number.isFinite(argCreatedMs) ? argCreatedMs : 0,\n );\n const supersededAt = new Date(maxMs).toISOString();\n\n // Issue #680 — explicit fact lifecycle. When the new fact\n // supersedes this one, set the predecessor's `invalid_at` to the\n // successor's effective valid_at. Skip when the predecessor\n // already carries an `invalid_at` so manual / earlier values\n // are preserved (idempotent).\n //\n // Codex P1 on PR #713: in the hash-dedup early-return path\n // (`useCallerTimestamp: true`), `newMemoryFile` is actually the\n // OLD matching fact — no new file was written — so its\n // `valid_at` is the predecessor's own old timestamp, not the\n // successor's effective time. Use `persistedCreatedAt`\n // directly in that path so the predecessor's invalid_at lines\n // up with the caller's wall-clock, not the matching fact's old\n // valid_at. The non-dedup path keeps the previous behavior\n // (prefer the new file's explicit valid_at, fall back to its\n // persisted created).\n let invalidAtPatch: string | undefined;\n if (!fresh.frontmatter.invalid_at) {\n if (args.useCallerTimestamp) {\n invalidAtPatch = persistedCreatedAt;\n } else {\n const newValidAt = newMemoryFile?.frontmatter.valid_at?.trim();\n invalidAtPatch =\n newValidAt && newValidAt.length > 0 ? newValidAt : persistedCreatedAt;\n }\n }\n const wrote = await args.storage.writeMemoryFrontmatter(\n fresh,\n {\n status: \"superseded\",\n supersededBy: args.newMemoryId,\n supersededAt,\n updated: supersededAt,\n ...(invalidAtPatch ? { invalid_at: invalidAtPatch } : {}),\n },\n {\n actor: \"temporal-supersession\",\n reasonCode: \"structured-attribute-update\",\n relatedMemoryIds: [args.newMemoryId],\n },\n );\n if (wrote) {\n supersededIds.push(memory.frontmatter.id);\n for (const key of decision.matchedKeys) matchedKeys.add(key);\n await expireChildChunksForSupersededParent({\n storage: args.storage,\n allCandidates,\n parentId: fresh.frontmatter.id,\n newMemoryId: args.newMemoryId,\n supersededAt,\n invalidAt: invalidAtPatch ?? fresh.frontmatter.invalid_at,\n });\n // Issue #1579 — emit a tombstone for the superseded memory so it\n // cannot resurrect through re-extraction / import / consolidation /\n // dreams / pattern-reinforcement. The supersession key is the first\n // matched key (the write-time supersession identity). Best-effort:\n // a tombstone append failure is logged but never fails supersession\n // (gotcha #13).\n // Issue #1579 thread ObteS: persist ALL matched supersession keys, not\n // just the first. A later paraphrased re-observation may derive the\n // same entity but place the tombstoned attribute at a different\n // position in structuredAttributes; without an entry for every matched\n // key, the keyed tier would miss and the fact could resurrect as\n // active. Pass the canonical contentHash from the retired memory's\n // frontmatter so the tombstone's exact tier matches re-extraction\n // (review: citation-hash alignment). The rawContent is the stored body;\n // the StorageManager.appendTombstone chokepoint strips citation\n // annotations for the normalized-text tier.\n const keysToTombstone =\n decision.matchedKeys.length > 0 ? decision.matchedKeys : [undefined];\n for (const key of keysToTombstone) {\n try {\n await args.storage.appendTombstone({\n reason: \"supersession\",\n createdBy: \"supersession\",\n sourceMemoryId: fresh.frontmatter.id,\n ...(fresh.frontmatter.contentHash\n ? { contentHash: fresh.frontmatter.contentHash }\n : {}),\n rawContent: fresh.content,\n ...(fresh.frontmatter.entityRef ? { entityRef: fresh.frontmatter.entityRef } : {}),\n ...(key ? { supersessionKey: key } : {}),\n createdAt: supersededAt,\n });\n } catch (tombErr) {\n log.warn(\n `temporal-supersession: tombstone emit failed for ${fresh.frontmatter.id}${key ? ` (key=${key})` : \"\"} : ${tombErr}`,\n );\n }\n }\n if (args.extraction && args.config && args.namespaceScope) {\n try {\n await propagateInvalidation(\n {\n storage: args.storage,\n extraction: args.extraction,\n config: args.config,\n },\n {\n oldMemory: fresh,\n replacementId: args.newMemoryId,\n replacementContent: newMemoryFile?.content ?? null,\n cause: \"temporal_supersession\",\n namespaceScope: args.namespaceScope,\n },\n );\n } catch (propagationErr) {\n log.warn(\n `temporal-supersession: dependency propagation failed for ${fresh.frontmatter.id}: ${propagationErr}`,\n );\n }\n }\n }\n } catch (err) {\n log.warn(\n `temporal-supersession: failed to mark ${memory.frontmatter.id} superseded: ${err}`,\n );\n }\n }\n\n if (supersededIds.length > 0) {\n log.debug(\n `temporal-supersession: marked ${supersededIds.length} memories superseded by ${args.newMemoryId} (keys=${Array.from(matchedKeys).join(\",\")})`,\n );\n }\n\n return { supersededIds, matchedKeys: Array.from(matchedKeys) };\n}\n\n/**\n * Recall-side filter: returns true when the candidate should be excluded\n * from recall because it has been temporally superseded. When\n * `includeInRecall` is true, this always returns false (the fact is kept),\n * matching the audit/history opt-in described in the config.\n */\nexport function shouldFilterSupersededFromRecall(\n frontmatter: MemoryFrontmatter,\n options: { enabled: boolean; includeInRecall: boolean },\n): boolean {\n if (!options.enabled) return false;\n if (options.includeInRecall) return false;\n return frontmatter.status === \"superseded\";\n}\n"],"mappings":"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","names":["result"]}
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-24BKGKGO.js";
3
+ } from "./chunk-BOFVT6P3.js";
4
4
  import {
5
5
  bumpMemoryCorpusVersionForDir
6
6
  } from "./chunk-KMAP7SNQ.js";
7
7
  import {
8
8
  requestEntityCanonicalIdReconcile
9
- } from "./chunk-JDCQK3C5.js";
9
+ } from "./chunk-M4A44LUA.js";
10
10
  import {
11
11
  decideLifecycleTransition
12
12
  } from "./chunk-TBBDFYXW.js";
@@ -759,4 +759,4 @@ export {
759
759
  listMemoryGovernanceRuns,
760
760
  readMemoryGovernanceRunArtifact
761
761
  };
762
- //# sourceMappingURL=chunk-WPZX7MEA.js.map
762
+ //# sourceMappingURL=chunk-FXX6RQYC.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-KJTKLXTH.js";
4
4
  import {
5
5
  StorageManager
6
- } from "./chunk-24BKGKGO.js";
6
+ } from "./chunk-BOFVT6P3.js";
7
7
  import {
8
8
  copyExistingFileToBackup,
9
9
  writeFileAtomically
@@ -260,4 +260,4 @@ export {
260
260
  backupExistingLedger,
261
261
  rebuildMemoryLifecycleLedger
262
262
  };
263
- //# sourceMappingURL=chunk-S75UQ3T3.js.map
263
+ //# sourceMappingURL=chunk-GDDGZVFI.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-24BKGKGO.js";
3
+ } from "./chunk-BOFVT6P3.js";
4
4
  import {
5
5
  getCachedRuleMemories,
6
6
  setCachedRuleMemories
@@ -119,4 +119,4 @@ export {
119
119
  compareVerifiedSemanticRuleResults,
120
120
  searchVerifiedSemanticRules
121
121
  };
122
- //# sourceMappingURL=chunk-S2SJEOTM.js.map
122
+ //# sourceMappingURL=chunk-GFIKG4FR.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-24BKGKGO.js";
3
+ } from "./chunk-BOFVT6P3.js";
4
4
  import {
5
5
  composeMemoryEnvelope
6
6
  } from "./chunk-5V6IXHPI.js";
@@ -546,4 +546,4 @@ export {
546
546
  setSemanticRulePromotionTestHooks,
547
547
  promoteSemanticRuleFromMemory
548
548
  };
549
- //# sourceMappingURL=chunk-7NDM2PNK.js.map
549
+ //# sourceMappingURL=chunk-GZICBRWK.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  BUILTIN_CONNECTORS,
3
3
  loadRegistry
4
- } from "./chunk-PNRA7FAD.js";
4
+ } from "./chunk-RZRUV6N2.js";
5
5
 
6
6
  // src/connectors/label.ts
7
7
  var CONNECTOR_LABEL_MAX_LENGTH = 64;
@@ -25,4 +25,4 @@ export {
25
25
  CONNECTOR_LABEL_MAX_LENGTH,
26
26
  knownConnectorIds
27
27
  };
28
- //# sourceMappingURL=chunk-X4IDNPOS.js.map
28
+ //# sourceMappingURL=chunk-HAEU3ZW7.js.map