@remnic/core 9.3.690 → 9.3.691

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 (281) hide show
  1. package/dist/access-boundary.d.ts +5 -5
  2. package/dist/access-boundary.js +18 -18
  3. package/dist/access-cli.js +44 -44
  4. package/dist/access-http.d.ts +5 -5
  5. package/dist/access-http.js +24 -24
  6. package/dist/access-mcp.d.ts +5 -5
  7. package/dist/access-mcp.js +21 -21
  8. package/dist/access-operations.d.ts +5 -5
  9. package/dist/access-operations.js +20 -20
  10. package/dist/access-schema.js +3 -3
  11. package/dist/{access-service-Dujr3MTm.d.ts → access-service-CKnFdxH-.d.ts} +2 -2
  12. package/dist/access-service.d.ts +5 -5
  13. package/dist/access-service.js +17 -17
  14. package/dist/access-surface-catalog.d.ts +5 -5
  15. package/dist/action-confidence.d.ts +1 -1
  16. package/dist/active-memory-bridge.d.ts +1 -1
  17. package/dist/active-recall.d.ts +1 -1
  18. package/dist/active-recall.js +1 -1
  19. package/dist/adapters/index.js +4 -4
  20. package/dist/adapters/registry.js +2 -2
  21. package/dist/{auto-sync-NUQWSFQD.js → auto-sync-RWXT6P5M.js} +5 -5
  22. package/dist/behavior-learner.d.ts +1 -1
  23. package/dist/behavior-signals.d.ts +1 -1
  24. package/dist/bootstrap.d.ts +4 -4
  25. package/dist/briefing.d.ts +1 -1
  26. package/dist/briefing.js +5 -5
  27. package/dist/buffer-surprise-report.d.ts +1 -1
  28. package/dist/buffer.d.ts +1 -1
  29. package/dist/calibration.d.ts +1 -1
  30. package/dist/calibration.js +2 -2
  31. package/dist/capabilities.d.ts +1 -1
  32. package/dist/{catalog-CKPtJ114.d.ts → catalog-BEWLjdOr.d.ts} +1 -1
  33. package/dist/causal-behavior.d.ts +1 -1
  34. package/dist/causal-consolidation.d.ts +1 -1
  35. package/dist/causal-consolidation.js +8 -8
  36. package/dist/{chunk-GTDH3IUH.js → chunk-2D27ODNX.js} +2 -2
  37. package/dist/{chunk-3K37VPM3.js → chunk-3BRA3N5A.js} +2 -2
  38. package/dist/{chunk-RTFAZOIR.js → chunk-3VVH6ZQW.js} +2 -2
  39. package/dist/{chunk-FIVDN2SM.js → chunk-4RGWCRIJ.js} +4 -4
  40. package/dist/{chunk-AGJH5ISO.js → chunk-5KBNNUXS.js} +2 -2
  41. package/dist/{chunk-X7RLU5CR.js → chunk-66HROLW5.js} +2 -2
  42. package/dist/{chunk-NSVXK7M5.js → chunk-7UVDIWLL.js} +4 -4
  43. package/dist/{chunk-UPIBE2DK.js → chunk-ADUAF5EV.js} +2 -2
  44. package/dist/{chunk-LLONI6PY.js → chunk-AFWEUTMS.js} +2 -2
  45. package/dist/{chunk-CWE74HRG.js → chunk-D3DNGQNQ.js} +3 -3
  46. package/dist/{chunk-ZUDM75KG.js → chunk-DCWIQFNA.js} +4 -4
  47. package/dist/{chunk-NGFEWFNK.js → chunk-DQHZA7Y3.js} +1 -1
  48. package/dist/chunk-DQHZA7Y3.js.map +1 -0
  49. package/dist/{chunk-OBXTMFZQ.js → chunk-ECZPWSB5.js} +2 -2
  50. package/dist/{chunk-BFVPIKDY.js → chunk-GCOSQBQ2.js} +3 -3
  51. package/dist/{chunk-LXIEXSHU.js → chunk-IPJD7WJH.js} +2 -2
  52. package/dist/{chunk-KQAFEZQX.js → chunk-IPLYGWQF.js} +5 -5
  53. package/dist/{chunk-MDYG7VI7.js → chunk-IREVVFTM.js} +10 -1
  54. package/dist/{chunk-MDYG7VI7.js.map → chunk-IREVVFTM.js.map} +1 -1
  55. package/dist/{chunk-RKNJBZ55.js → chunk-JBPKEARU.js} +4 -4
  56. package/dist/{chunk-WROKD3XC.js → chunk-K7I24ZO2.js} +24 -24
  57. package/dist/{chunk-Z7KILAOU.js → chunk-KO6OL4I7.js} +20 -20
  58. package/dist/{chunk-SB6CQTKP.js → chunk-MCV2DD6F.js} +2 -2
  59. package/dist/{chunk-3FC6LW6T.js → chunk-MRFVMSTR.js} +2 -2
  60. package/dist/{chunk-WDXCNJSF.js → chunk-MXZWKOOR.js} +2 -2
  61. package/dist/{chunk-XKUKJIOY.js → chunk-NCRDCTEJ.js} +7 -7
  62. package/dist/{chunk-RGNEARXW.js → chunk-NUZ3N445.js} +7 -7
  63. package/dist/{chunk-CP2NZQLT.js → chunk-OOO7ZKOD.js} +6 -6
  64. package/dist/{chunk-PHZKALOE.js → chunk-QFG23CRE.js} +2 -2
  65. package/dist/{chunk-UDJLF3BO.js → chunk-QLRYXOAD.js} +2 -2
  66. package/dist/{chunk-ZU7N3S6V.js → chunk-QNG35H27.js} +2 -2
  67. package/dist/{chunk-A4HH2EWA.js → chunk-QVG4LAQO.js} +2 -2
  68. package/dist/{chunk-54PVJDO5.js → chunk-SAC5V6JT.js} +2 -2
  69. package/dist/{chunk-CE6CBRCV.js → chunk-TJ5IIQIR.js} +56 -45
  70. package/dist/chunk-TJ5IIQIR.js.map +1 -0
  71. package/dist/{chunk-OMKUJTVJ.js → chunk-TSGREOYY.js} +5 -5
  72. package/dist/{chunk-2N6UNJSX.js → chunk-U2OBZSGG.js} +2 -2
  73. package/dist/{chunk-BKAMHZYR.js → chunk-UOCLRM74.js} +2 -2
  74. package/dist/{chunk-A7UZR6RA.js → chunk-UTUYAPLY.js} +14 -1
  75. package/dist/chunk-UTUYAPLY.js.map +1 -0
  76. package/dist/{chunk-TYF3D4MS.js → chunk-UUMYB3FR.js} +2 -2
  77. package/dist/{chunk-CUNTLEJP.js → chunk-VFVG4NS2.js} +30 -9
  78. package/dist/chunk-VFVG4NS2.js.map +1 -0
  79. package/dist/{chunk-46URPRE6.js → chunk-VH2DHBHG.js} +2 -2
  80. package/dist/{chunk-UD5OKH4J.js → chunk-W4ELOUNX.js} +2 -2
  81. package/dist/{chunk-GR77Z2BM.js → chunk-WIKNVFBS.js} +2 -2
  82. package/dist/{chunk-67MMWC74.js → chunk-ZLXGFAML.js} +2 -2
  83. package/dist/{cli-BkDp6WNi.d.ts → cli-CrSW_KRq.d.ts} +3 -3
  84. package/dist/cli.d.ts +6 -6
  85. package/dist/cli.js +38 -38
  86. package/dist/compounding/engine.d.ts +1 -1
  87. package/dist/compounding/engine.js +5 -5
  88. package/dist/compounding/preference-consolidator.d.ts +1 -1
  89. package/dist/compression-optimizer.d.ts +1 -1
  90. package/dist/config.d.ts +1 -1
  91. package/dist/config.js +1 -1
  92. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  93. package/dist/connectors/codex-materialize-runner.js +5 -5
  94. package/dist/connectors/codex-materialize.d.ts +1 -1
  95. package/dist/connectors/index.d.ts +1 -1
  96. package/dist/connectors/index.js +5 -5
  97. package/dist/consolidation-provenance-check.d.ts +1 -1
  98. package/dist/consolidation-undo.d.ts +1 -1
  99. package/dist/contradiction/index.d.ts +1 -1
  100. package/dist/contradiction/index.js +4 -4
  101. package/dist/conversation-index/backend.d.ts +1 -1
  102. package/dist/conversation-index/backend.js +2 -2
  103. package/dist/conversation-index/chunker.d.ts +1 -1
  104. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  105. package/dist/conversation-index/indexer.d.ts +1 -1
  106. package/dist/conversation-index/search.d.ts +1 -1
  107. package/dist/day-summary.d.ts +1 -1
  108. package/dist/delinearize.d.ts +1 -1
  109. package/dist/direct-answer-wiring.d.ts +1 -1
  110. package/dist/direct-answer.d.ts +1 -1
  111. package/dist/embedding-fallback.d.ts +1 -1
  112. package/dist/enrichment/index.d.ts +1 -1
  113. package/dist/entity-retrieval.d.ts +1 -1
  114. package/dist/entity-retrieval.js +5 -5
  115. package/dist/entity-schema.d.ts +1 -1
  116. package/dist/event-time.d.ts +35 -0
  117. package/dist/event-time.js +325 -0
  118. package/dist/event-time.js.map +1 -0
  119. package/dist/explicit-capture.d.ts +4 -4
  120. package/dist/extraction-judge-telemetry.d.ts +1 -1
  121. package/dist/extraction-judge-training.d.ts +1 -1
  122. package/dist/extraction-judge.d.ts +1 -1
  123. package/dist/extraction-judge.js +3 -3
  124. package/dist/extraction.d.ts +1 -1
  125. package/dist/extraction.js +3 -3
  126. package/dist/fallback-llm.d.ts +1 -1
  127. package/dist/fallback-llm.js +2 -2
  128. package/dist/identity-continuity.d.ts +1 -1
  129. package/dist/importance.d.ts +1 -1
  130. package/dist/index.d.ts +9 -9
  131. package/dist/index.js +72 -72
  132. package/dist/intent.d.ts +1 -1
  133. package/dist/lcm/engine.d.ts +1 -1
  134. package/dist/lcm/index.d.ts +1 -1
  135. package/dist/lcm/tools.d.ts +1 -1
  136. package/dist/lifecycle.d.ts +1 -1
  137. package/dist/live-connectors-runner.d.ts +1 -1
  138. package/dist/local-llm.d.ts +1 -1
  139. package/dist/maintenance/memory-governance.d.ts +1 -1
  140. package/dist/maintenance/memory-governance.js +5 -5
  141. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +5 -5
  142. package/dist/maintenance/rebuild-memory-projection.js +6 -6
  143. package/dist/mcp-memory-inspector-app.d.ts +5 -5
  144. package/dist/memory-action-policy.d.ts +1 -1
  145. package/dist/memory-cache.d.ts +1 -1
  146. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  147. package/dist/memory-projection-store.d.ts +1 -1
  148. package/dist/memory-provenance.d.ts +1 -1
  149. package/dist/memory-worth-outcomes.d.ts +1 -1
  150. package/dist/models-json.d.ts +1 -1
  151. package/dist/namespaces/migrate.d.ts +2 -2
  152. package/dist/namespaces/migrate.js +10 -10
  153. package/dist/namespaces/principal.d.ts +1 -1
  154. package/dist/namespaces/search.d.ts +1 -1
  155. package/dist/namespaces/search.js +4 -4
  156. package/dist/namespaces/storage.d.ts +2 -2
  157. package/dist/namespaces/storage.js +5 -5
  158. package/dist/native-knowledge.d.ts +1 -1
  159. package/dist/operator-toolkit.d.ts +1 -1
  160. package/dist/operator-toolkit.js +14 -14
  161. package/dist/{orchestrator-B7ixmUkP.d.ts → orchestrator-DvswGK76.d.ts} +3 -3
  162. package/dist/orchestrator.d.ts +4 -4
  163. package/dist/orchestrator.js +34 -34
  164. package/dist/patterns-cli.d.ts +1 -1
  165. package/dist/policy-runtime.d.ts +1 -1
  166. package/dist/provenance.d.ts +1 -1
  167. package/dist/qmd-recall-cache.d.ts +1 -1
  168. package/dist/qmd.d.ts +1 -1
  169. package/dist/recall-disclosure-escalation.d.ts +1 -1
  170. package/dist/recall-explain-renderer.d.ts +1 -1
  171. package/dist/recall-explain-renderer.js +3 -3
  172. package/dist/recall-planner-llm.d.ts +1 -1
  173. package/dist/recall-planner-llm.js +2 -2
  174. package/dist/recall-state.d.ts +1 -1
  175. package/dist/recall-tag-filter.d.ts +1 -1
  176. package/dist/recall-xray-cli.d.ts +1 -1
  177. package/dist/recall-xray-cli.js +4 -4
  178. package/dist/recall-xray-renderer.d.ts +1 -1
  179. package/dist/recall-xray-renderer.js +3 -3
  180. package/dist/recall-xray.d.ts +1 -1
  181. package/dist/recall-xray.js +2 -2
  182. package/dist/resolve-auth-token.d.ts +1 -1
  183. package/dist/resume-bundles.js +2 -2
  184. package/dist/retrieval-agents.d.ts +1 -1
  185. package/dist/retrieval-tiers.d.ts +1 -1
  186. package/dist/routing/engine.d.ts +1 -1
  187. package/dist/routing/store.d.ts +1 -1
  188. package/dist/search/embed-helper.d.ts +1 -1
  189. package/dist/search/factory.d.ts +1 -1
  190. package/dist/search/factory.js +3 -3
  191. package/dist/search/index.d.ts +1 -1
  192. package/dist/search/index.js +3 -3
  193. package/dist/search/lancedb-backend.d.ts +1 -1
  194. package/dist/search/meilisearch-backend.d.ts +1 -1
  195. package/dist/search/noop-backend.d.ts +1 -1
  196. package/dist/search/orama-backend.d.ts +1 -1
  197. package/dist/search/port.d.ts +1 -1
  198. package/dist/search/remote-backend.d.ts +1 -1
  199. package/dist/{semantic-consolidation-CWch5uM7.d.ts → semantic-consolidation-D5U0Mrdb.d.ts} +1 -1
  200. package/dist/semantic-consolidation.d.ts +2 -2
  201. package/dist/semantic-consolidation.js +6 -6
  202. package/dist/semantic-rule-promotion.js +5 -5
  203. package/dist/semantic-rule-verifier.d.ts +1 -1
  204. package/dist/semantic-rule-verifier.js +5 -5
  205. package/dist/session-observer-bands.d.ts +1 -1
  206. package/dist/session-observer-state.d.ts +1 -1
  207. package/dist/shared-context/manager.d.ts +1 -1
  208. package/dist/signal.d.ts +1 -1
  209. package/dist/storage.d.ts +3 -1
  210. package/dist/storage.js +4 -4
  211. package/dist/summarizer.d.ts +1 -1
  212. package/dist/summarizer.js +3 -3
  213. package/dist/summary-snapshot.d.ts +1 -1
  214. package/dist/temporal-supersession.d.ts +1 -1
  215. package/dist/temporal-supersession.js +2 -2
  216. package/dist/temporal-validity.d.ts +22 -2
  217. package/dist/temporal-validity.js +3 -1
  218. package/dist/threading.d.ts +1 -1
  219. package/dist/tier-migration.d.ts +1 -1
  220. package/dist/tier-routing.d.ts +1 -1
  221. package/dist/topics.d.ts +1 -1
  222. package/dist/transcript.d.ts +1 -1
  223. package/dist/transfer/autodetect.js +1 -1
  224. package/dist/transfer/backup.js +1 -1
  225. package/dist/transfer/capsule-export.js +2 -2
  226. package/dist/{types-Dm5xxVrr.d.ts → types-2NoBoRBM.d.ts} +38 -0
  227. package/dist/types.d.ts +1 -1
  228. package/dist/types.js +1 -1
  229. package/dist/utility-runtime.d.ts +1 -1
  230. package/dist/verified-recall.js +5 -5
  231. package/package.json +2 -2
  232. package/src/bitemporal-frontmatter.test.ts +177 -0
  233. package/src/config.ts +13 -0
  234. package/src/event-time.test.ts +514 -0
  235. package/src/event-time.ts +548 -0
  236. package/src/orchestrator.ts +27 -1
  237. package/src/storage.ts +34 -0
  238. package/src/temporal-validity.ts +34 -0
  239. package/src/types.ts +38 -0
  240. package/dist/chunk-A7UZR6RA.js.map +0 -1
  241. package/dist/chunk-CE6CBRCV.js.map +0 -1
  242. package/dist/chunk-CUNTLEJP.js.map +0 -1
  243. package/dist/chunk-NGFEWFNK.js.map +0 -1
  244. /package/dist/{auto-sync-NUQWSFQD.js.map → auto-sync-RWXT6P5M.js.map} +0 -0
  245. /package/dist/{chunk-GTDH3IUH.js.map → chunk-2D27ODNX.js.map} +0 -0
  246. /package/dist/{chunk-3K37VPM3.js.map → chunk-3BRA3N5A.js.map} +0 -0
  247. /package/dist/{chunk-RTFAZOIR.js.map → chunk-3VVH6ZQW.js.map} +0 -0
  248. /package/dist/{chunk-FIVDN2SM.js.map → chunk-4RGWCRIJ.js.map} +0 -0
  249. /package/dist/{chunk-AGJH5ISO.js.map → chunk-5KBNNUXS.js.map} +0 -0
  250. /package/dist/{chunk-X7RLU5CR.js.map → chunk-66HROLW5.js.map} +0 -0
  251. /package/dist/{chunk-NSVXK7M5.js.map → chunk-7UVDIWLL.js.map} +0 -0
  252. /package/dist/{chunk-UPIBE2DK.js.map → chunk-ADUAF5EV.js.map} +0 -0
  253. /package/dist/{chunk-LLONI6PY.js.map → chunk-AFWEUTMS.js.map} +0 -0
  254. /package/dist/{chunk-CWE74HRG.js.map → chunk-D3DNGQNQ.js.map} +0 -0
  255. /package/dist/{chunk-ZUDM75KG.js.map → chunk-DCWIQFNA.js.map} +0 -0
  256. /package/dist/{chunk-OBXTMFZQ.js.map → chunk-ECZPWSB5.js.map} +0 -0
  257. /package/dist/{chunk-BFVPIKDY.js.map → chunk-GCOSQBQ2.js.map} +0 -0
  258. /package/dist/{chunk-LXIEXSHU.js.map → chunk-IPJD7WJH.js.map} +0 -0
  259. /package/dist/{chunk-KQAFEZQX.js.map → chunk-IPLYGWQF.js.map} +0 -0
  260. /package/dist/{chunk-RKNJBZ55.js.map → chunk-JBPKEARU.js.map} +0 -0
  261. /package/dist/{chunk-WROKD3XC.js.map → chunk-K7I24ZO2.js.map} +0 -0
  262. /package/dist/{chunk-Z7KILAOU.js.map → chunk-KO6OL4I7.js.map} +0 -0
  263. /package/dist/{chunk-SB6CQTKP.js.map → chunk-MCV2DD6F.js.map} +0 -0
  264. /package/dist/{chunk-3FC6LW6T.js.map → chunk-MRFVMSTR.js.map} +0 -0
  265. /package/dist/{chunk-WDXCNJSF.js.map → chunk-MXZWKOOR.js.map} +0 -0
  266. /package/dist/{chunk-XKUKJIOY.js.map → chunk-NCRDCTEJ.js.map} +0 -0
  267. /package/dist/{chunk-RGNEARXW.js.map → chunk-NUZ3N445.js.map} +0 -0
  268. /package/dist/{chunk-CP2NZQLT.js.map → chunk-OOO7ZKOD.js.map} +0 -0
  269. /package/dist/{chunk-PHZKALOE.js.map → chunk-QFG23CRE.js.map} +0 -0
  270. /package/dist/{chunk-UDJLF3BO.js.map → chunk-QLRYXOAD.js.map} +0 -0
  271. /package/dist/{chunk-ZU7N3S6V.js.map → chunk-QNG35H27.js.map} +0 -0
  272. /package/dist/{chunk-A4HH2EWA.js.map → chunk-QVG4LAQO.js.map} +0 -0
  273. /package/dist/{chunk-54PVJDO5.js.map → chunk-SAC5V6JT.js.map} +0 -0
  274. /package/dist/{chunk-OMKUJTVJ.js.map → chunk-TSGREOYY.js.map} +0 -0
  275. /package/dist/{chunk-2N6UNJSX.js.map → chunk-U2OBZSGG.js.map} +0 -0
  276. /package/dist/{chunk-BKAMHZYR.js.map → chunk-UOCLRM74.js.map} +0 -0
  277. /package/dist/{chunk-TYF3D4MS.js.map → chunk-UUMYB3FR.js.map} +0 -0
  278. /package/dist/{chunk-46URPRE6.js.map → chunk-VH2DHBHG.js.map} +0 -0
  279. /package/dist/{chunk-UD5OKH4J.js.map → chunk-W4ELOUNX.js.map} +0 -0
  280. /package/dist/{chunk-GR77Z2BM.js.map → chunk-WIKNVFBS.js.map} +0 -0
  281. /package/dist/{chunk-67MMWC74.js.map → chunk-ZLXGFAML.js.map} +0 -0
@@ -101,6 +101,40 @@ export function isValidAsOf(
101
101
  return invalidAtMs > asOfMs;
102
102
  }
103
103
 
104
+ /**
105
+ * Bi-temporal injection filter (issue #1578).
106
+ *
107
+ * Returns `true` when the fact's event-time interval has already ended before
108
+ * `nowMs` — i.e. it is no longer *true in the world* and should leave the
109
+ * default injection candidate set (it remains findable by explicit search
110
+ * and `as_of` queries, mirroring the lifecycle-filter escape-hatch principle
111
+ * in AGENTS.md §16). Gated by `temporalBiTemporal`; the escape hatch
112
+ * `temporalExpiredInInjection` re-admits expired facts when a deployment
113
+ * prefers the older always-inject behavior.
114
+ *
115
+ * Semantics: a fact is expired-now when `invalid_at` is present and
116
+ * `invalid_at <= nowMs` (the exclusive upper bound has passed). Absent
117
+ * `invalid_at` means "still valid" — never expired. This is the
118
+ * status-orthogonal complement of `isValidAsOf` for the wall-clock instant:
119
+ * an `active` memory can be validity-expired, and a `superseded` one can
120
+ * still be validity-valid within its historical window (issue pitfall: the
121
+ * filter is status-orthogonal).
122
+ */
123
+ export function isValidityExpiredNow(
124
+ fm: Pick<MemoryFrontmatter, "invalid_at">,
125
+ nowMs: number,
126
+ ): boolean {
127
+ if (!Number.isFinite(nowMs)) return false;
128
+ const invalidAt = fm.invalid_at?.trim();
129
+ if (!invalidAt || invalidAt.length === 0) return false;
130
+ const invalidAtMs = Date.parse(invalidAt);
131
+ // Unparseable invalid_at — conservatively keep the fact (do not filter on
132
+ // corrupt data; the as_of path already handles malformed bounds).
133
+ if (!Number.isFinite(invalidAtMs)) return false;
134
+ // Half-open interval end has passed: [valid_at, invalid_at) ended.
135
+ return invalidAtMs <= nowMs;
136
+ }
137
+
104
138
  /**
105
139
  * Parse and validate an `as_of` value supplied at an input boundary
106
140
  * (CLI flag, HTTP query param, MCP field). Returns parsed milliseconds
package/src/types.ts CHANGED
@@ -788,6 +788,25 @@ export interface PluginConfig {
788
788
  * filtered out.
789
789
  */
790
790
  temporalSupersessionIncludeInRecall: boolean;
791
+ /**
792
+ * Bi-temporal validity master gate (issue #1578). When `false` (default),
793
+ * the recall validity-injection filter and `asOf` semantics behave
794
+ * byte-identically to pre-#1578.
795
+ *
796
+ * Turn on to exclude validity-expired facts from default injection
797
+ * candidates (they remain findable by explicit search and `as_of`
798
+ * queries). Storage round-trips `observedAt`/`eventTimeSource`; the
799
+ * extraction prompt → `resolveEventTime` write-time wiring lands in a
800
+ * follow-on PR, so new extractions are not yet event-time-resolved.
801
+ */
802
+ temporalBiTemporal: boolean;
803
+ /**
804
+ * Escape hatch for the bi-temporal injection filter (issue #1578). When
805
+ * `true`, facts whose `[valid_at, invalid_at)` interval ended before now
806
+ * are kept in injection candidates even with `temporalBiTemporal` on — some
807
+ * deployments prefer the older (always-inject) behavior. Default `false`.
808
+ */
809
+ temporalExpiredInInjection: boolean;
791
810
  // Direct-answer retrieval tier (issue #518)
792
811
  /**
793
812
  * When true, recall checks whether a single validated memory in a
@@ -2423,6 +2442,25 @@ export interface MemoryFrontmatter {
2423
2442
  * point in time.
2424
2443
  */
2425
2444
  invalid_at?: string;
2445
+ /**
2446
+ * Ingestion time (issue #1578) — when Remnic *learned* this fact.
2447
+ * Distinct from `created` (file creation) and `valid_at` (event-time
2448
+ * start). Aligns with the source turn timestamp (#1575
2449
+ * `sources[].observedAt`). When `eventTimeSource === "assumed"`,
2450
+ * `valid_at` is copied from this value.
2451
+ */
2452
+ observedAt?: string;
2453
+ /**
2454
+ * Provenance of the event-time interval (issue #1578).
2455
+ * - `"extracted"` — a per-fact `eventTime` expression was resolved
2456
+ * against the source turn's timestamp and produced `valid_at` /
2457
+ * `invalid_at`.
2458
+ * - `"assumed"` — no resolvable expression; `valid_at` was copied from
2459
+ * `observedAt` (the ingestion anchor).
2460
+ * Absent on memories written before #1578; readers treat absent as
2461
+ * `"assumed"` for display purposes.
2462
+ */
2463
+ eventTimeSource?: "extracted" | "assumed";
2426
2464
  /**
2427
2465
  * Timestamp when the operator explicitly forgot this memory
2428
2466
  * (issue #686 PR 4/6). Set by `remnic forget <id>`. Memories with