@remnic/core 9.7.10 → 9.7.12

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 (297) hide show
  1. package/dist/access-admin-ops-surface.d.ts +6 -6
  2. package/dist/access-admin-ops-surface.js +7 -7
  3. package/dist/access-boundary.d.ts +7 -7
  4. package/dist/access-boundary.js +8 -8
  5. package/dist/access-cli.js +31 -31
  6. package/dist/access-http.d.ts +8 -7
  7. package/dist/access-http.js +12 -12
  8. package/dist/access-identity-continuity-surface.d.ts +5 -5
  9. package/dist/access-identity-continuity-surface.js +7 -7
  10. package/dist/access-lcm-surface.d.ts +6 -6
  11. package/dist/access-lcm-surface.js +7 -7
  12. package/dist/access-mcp.d.ts +6 -6
  13. package/dist/access-mcp.js +11 -11
  14. package/dist/access-observe-write-surface.d.ts +6 -6
  15. package/dist/access-observe-write-surface.js +7 -7
  16. package/dist/access-operations-batch.js +9 -9
  17. package/dist/access-operations.d.ts +10 -10
  18. package/dist/access-operations.js +10 -10
  19. package/dist/access-recall-surface.d.ts +6 -6
  20. package/dist/access-recall-surface.js +7 -7
  21. package/dist/access-schema.d.ts +64 -64
  22. package/dist/{access-service-DSuzikHQ.d.ts → access-service-tHd3eQpd.d.ts} +4 -4
  23. package/dist/access-service.d.ts +6 -6
  24. package/dist/access-service.js +7 -7
  25. package/dist/access-surface-catalog.d.ts +6 -6
  26. package/dist/access-surface-catalog.js +2 -0
  27. package/dist/access-surface-catalog.js.map +1 -1
  28. package/dist/action-confidence.d.ts +1 -1
  29. package/dist/active-memory-bridge.d.ts +1 -1
  30. package/dist/active-recall.d.ts +1 -1
  31. package/dist/active-recall.js +1 -1
  32. package/dist/behavior-learner.d.ts +1 -1
  33. package/dist/behavior-signals.d.ts +1 -1
  34. package/dist/bootstrap.d.ts +5 -5
  35. package/dist/briefing.d.ts +2 -2
  36. package/dist/briefing.js +3 -3
  37. package/dist/buffer-surprise-report.d.ts +1 -1
  38. package/dist/buffer.d.ts +2 -2
  39. package/dist/bulk-import/index.d.ts +3 -3
  40. package/dist/calibration.d.ts +1 -1
  41. package/dist/capabilities.d.ts +1 -1
  42. package/dist/{catalog-BNwjACa5.d.ts → catalog-DEMiw6HZ.d.ts} +48 -1
  43. package/dist/causal-behavior.d.ts +1 -1
  44. package/dist/causal-consolidation.d.ts +1 -1
  45. package/dist/causal-consolidation.js +4 -4
  46. package/dist/causal-trajectory-graph.d.ts +1 -1
  47. package/dist/{chunk-U4KHQTJ6.js → chunk-2AL7N3BH.js} +4 -2
  48. package/dist/{chunk-U4KHQTJ6.js.map → chunk-2AL7N3BH.js.map} +1 -1
  49. package/dist/{chunk-L4H6MQ7I.js → chunk-2RSL6YRA.js} +2 -2
  50. package/dist/{chunk-7EX4YOKH.js → chunk-2ZPQUTMW.js} +4 -4
  51. package/dist/{chunk-673NPXE3.js → chunk-3SIC3E65.js} +2 -2
  52. package/dist/{chunk-OVMS3DCB.js → chunk-675YU5IK.js} +2 -2
  53. package/dist/{chunk-7LMEY5KZ.js → chunk-6N7R7TR2.js} +34 -1
  54. package/dist/chunk-6N7R7TR2.js.map +1 -0
  55. package/dist/{chunk-7CKS4AXY.js → chunk-AOWPZ7TM.js} +17 -17
  56. package/dist/{chunk-TGBJ2OMK.js → chunk-BQTSGK5Y.js} +2 -2
  57. package/dist/{chunk-UZRIKUFS.js → chunk-CE3GMHT4.js} +4 -2
  58. package/dist/chunk-CE3GMHT4.js.map +1 -0
  59. package/dist/{chunk-YXOAQAH2.js → chunk-CLFY35ED.js} +3 -3
  60. package/dist/{chunk-HQ7QZJM5.js → chunk-D4TLWDYR.js} +2 -2
  61. package/dist/{chunk-LQKITFGB.js → chunk-FUUF7FMX.js} +2 -2
  62. package/dist/{chunk-3ZVFLMFQ.js → chunk-G5PVJJRA.js} +1 -1
  63. package/dist/chunk-G5PVJJRA.js.map +1 -0
  64. package/dist/{chunk-MXRMNKSY.js → chunk-I3GKTDM2.js} +3 -3
  65. package/dist/{chunk-EQF5763Z.js → chunk-IQULRIZM.js} +2 -2
  66. package/dist/{chunk-DJCKXI4M.js → chunk-NVXQTRBL.js} +2 -2
  67. package/dist/{chunk-VDLMAJXS.js → chunk-OCY3CRPG.js} +3 -3
  68. package/dist/{chunk-YLTG6BO4.js → chunk-OIFZII6J.js} +2 -2
  69. package/dist/{chunk-XF4KOVDK.js → chunk-PA6DMYEK.js} +6 -6
  70. package/dist/{chunk-3OQ4IZJN.js → chunk-QPZCAVDC.js} +7 -7
  71. package/dist/{chunk-DLWYAN6A.js → chunk-T6U7HDIY.js} +2 -2
  72. package/dist/chunk-TITSEN2M.js +1794 -0
  73. package/dist/chunk-TITSEN2M.js.map +1 -0
  74. package/dist/{chunk-JZM5QUTE.js → chunk-TMGK6YE7.js} +171 -9
  75. package/dist/chunk-TMGK6YE7.js.map +1 -0
  76. package/dist/{chunk-KXLRMM35.js → chunk-TRH533CA.js} +30 -7
  77. package/dist/chunk-TRH533CA.js.map +1 -0
  78. package/dist/{chunk-UTDA43TB.js → chunk-TWGGNUWJ.js} +2 -2
  79. package/dist/{chunk-SBFDL2EQ.js → chunk-UTZW3X2R.js} +2 -2
  80. package/dist/{chunk-SECMZACR.js → chunk-XUQUBZ7O.js} +2 -2
  81. package/dist/{chunk-N3LWQJ6Y.js → chunk-YI7XUXLX.js} +309 -16
  82. package/dist/chunk-YI7XUXLX.js.map +1 -0
  83. package/dist/{chunk-QVALQE4P.js → chunk-ZASJ53ML.js} +128 -10
  84. package/dist/chunk-ZASJ53ML.js.map +1 -0
  85. package/dist/{chunk-WUDBMLC6.js → chunk-ZC3HG22I.js} +2 -2
  86. package/dist/{chunk-VCEH5UYS.js → chunk-ZRXSHGXT.js} +2 -2
  87. package/dist/{cli-DACyuK8-.d.ts → cli-D8Tsa4Sh.d.ts} +5 -5
  88. package/dist/cli.d.ts +8 -8
  89. package/dist/cli.js +25 -25
  90. package/dist/compounding/engine.d.ts +2 -2
  91. package/dist/compounding/engine.js +3 -3
  92. package/dist/compounding/preference-consolidator.d.ts +1 -1
  93. package/dist/compression-optimizer.d.ts +1 -1
  94. package/dist/config.d.ts +1 -1
  95. package/dist/config.js +1 -1
  96. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  97. package/dist/connectors/codex-materialize-runner.js +3 -3
  98. package/dist/connectors/codex-materialize.d.ts +1 -1
  99. package/dist/connectors/index.d.ts +1 -1
  100. package/dist/connectors/index.js +3 -3
  101. package/dist/consolidation-provenance-check.d.ts +2 -2
  102. package/dist/consolidation-undo.d.ts +2 -2
  103. package/dist/contradiction/index.d.ts +2 -2
  104. package/dist/conversation-index/backend.d.ts +1 -1
  105. package/dist/conversation-index/chunker.d.ts +1 -1
  106. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  107. package/dist/conversation-index/indexer.d.ts +1 -1
  108. package/dist/conversation-index/search.d.ts +1 -1
  109. package/dist/day-summary.d.ts +1 -1
  110. package/dist/delinearize.d.ts +1 -1
  111. package/dist/direct-answer-wiring.d.ts +1 -1
  112. package/dist/direct-answer.d.ts +1 -1
  113. package/dist/embedding-fallback.d.ts +1 -1
  114. package/dist/enrichment/index.d.ts +1 -1
  115. package/dist/entity-retrieval.d.ts +2 -2
  116. package/dist/entity-retrieval.js +3 -3
  117. package/dist/entity-schema.d.ts +1 -1
  118. package/dist/explicit-capture.d.ts +5 -5
  119. package/dist/extraction-faithfulness.d.ts +1 -1
  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.d.ts +1 -1
  124. package/dist/fallback-llm.d.ts +1 -1
  125. package/dist/graph-dashboard-diff.d.ts +1 -1
  126. package/dist/graph-dashboard-key.d.ts +1 -1
  127. package/dist/graph-dashboard-parser.d.ts +1 -1
  128. package/dist/graph-edge-reinforcement.d.ts +1 -1
  129. package/dist/graph-snapshot.d.ts +1 -1
  130. package/dist/graph.d.ts +1 -1
  131. package/dist/identity-continuity.d.ts +1 -1
  132. package/dist/importance.d.ts +1 -1
  133. package/dist/importers/index.d.ts +1 -1
  134. package/dist/in-flight-reads.d.ts +1 -1
  135. package/dist/index.d.ts +4002 -16
  136. package/dist/index.js +78 -31
  137. package/dist/intent.d.ts +1 -1
  138. package/dist/lcm/engine.d.ts +1 -1
  139. package/dist/lcm/index.d.ts +1 -1
  140. package/dist/lcm/tools.d.ts +1 -1
  141. package/dist/lifecycle.d.ts +1 -1
  142. package/dist/live-connectors-runner.d.ts +1 -1
  143. package/dist/local-llm.d.ts +1 -1
  144. package/dist/local-model-endpoint.d.ts +1 -1
  145. package/dist/maintenance/memory-governance.d.ts +1 -1
  146. package/dist/maintenance/memory-governance.js +3 -3
  147. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +3 -3
  148. package/dist/maintenance/rebuild-memory-projection.js +4 -4
  149. package/dist/mcp-memory-inspector-app.d.ts +6 -6
  150. package/dist/memory-action-policy.d.ts +1 -1
  151. package/dist/memory-cache.d.ts +1 -1
  152. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  153. package/dist/memory-projection-store.d.ts +1 -1
  154. package/dist/memory-provenance.d.ts +1 -1
  155. package/dist/memory-worth-outcomes.d.ts +2 -2
  156. package/dist/models-json.d.ts +1 -1
  157. package/dist/namespaces/migrate.d.ts +3 -3
  158. package/dist/namespaces/migrate.js +4 -4
  159. package/dist/namespaces/principal.d.ts +1 -1
  160. package/dist/namespaces/search.d.ts +1 -1
  161. package/dist/namespaces/storage.d.ts +3 -3
  162. package/dist/namespaces/storage.js +3 -3
  163. package/dist/native-knowledge.d.ts +1 -1
  164. package/dist/operator-toolkit.d.ts +2 -2
  165. package/dist/operator-toolkit.js +8 -8
  166. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  167. package/dist/orchestration/maintenance.d.ts +2 -2
  168. package/dist/orchestration/maintenance.js +5 -5
  169. package/dist/{orchestrator-D83AvrPf.d.ts → orchestrator-B_WXBmuE.d.ts} +4 -4
  170. package/dist/orchestrator.d.ts +5 -5
  171. package/dist/orchestrator.js +31 -31
  172. package/dist/patterns-cli.d.ts +1 -1
  173. package/dist/{pipeline-BSqGpYl1.d.ts → pipeline-Dvtvt141.d.ts} +1 -1
  174. package/dist/policy-runtime.d.ts +1 -1
  175. package/dist/provenance.d.ts +1 -1
  176. package/dist/{qmd-CutnpRVe.d.ts → qmd-DwBLh_hl.d.ts} +1 -1
  177. package/dist/qmd-preflight.d.ts +2 -2
  178. package/dist/qmd-recall-cache.d.ts +1 -1
  179. package/dist/qmd.d.ts +2 -2
  180. package/dist/recall-disclosure-escalation.d.ts +1 -1
  181. package/dist/recall-explain-renderer.d.ts +1 -1
  182. package/dist/recall-explain-renderer.js +3 -3
  183. package/dist/recall-planner-llm.d.ts +1 -1
  184. package/dist/recall-state.d.ts +1 -1
  185. package/dist/recall-tag-filter.d.ts +1 -1
  186. package/dist/recall-timings.d.ts +1 -1
  187. package/dist/recall-xray-cli.d.ts +1 -1
  188. package/dist/recall-xray-cli.js +4 -4
  189. package/dist/recall-xray-renderer.d.ts +1 -1
  190. package/dist/recall-xray-renderer.js +3 -3
  191. package/dist/recall-xray.d.ts +1 -1
  192. package/dist/recall-xray.js +2 -2
  193. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  194. package/dist/replay/normalizers/claude.d.ts +1 -1
  195. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  196. package/dist/replay/normalizers/shared.d.ts +1 -1
  197. package/dist/replay/runner.d.ts +1 -1
  198. package/dist/replay/types.d.ts +1 -1
  199. package/dist/resolve-auth-token.d.ts +1 -1
  200. package/dist/resume-bundles.js +2 -2
  201. package/dist/retrieval-agents.d.ts +2 -2
  202. package/dist/retrieval-tiers.d.ts +1 -1
  203. package/dist/routing/engine.d.ts +1 -1
  204. package/dist/routing/store.d.ts +1 -1
  205. package/dist/schemas.d.ts +52 -52
  206. package/dist/search/embed-helper.d.ts +1 -1
  207. package/dist/search/factory.d.ts +1 -1
  208. package/dist/search/index.d.ts +1 -1
  209. package/dist/search/lancedb-backend.d.ts +1 -1
  210. package/dist/search/meilisearch-backend.d.ts +1 -1
  211. package/dist/search/noop-backend.d.ts +1 -1
  212. package/dist/search/orama-backend.d.ts +1 -1
  213. package/dist/search/port.d.ts +1 -1
  214. package/dist/search/remote-backend.d.ts +1 -1
  215. package/dist/{semantic-consolidation-btIVRC4l.d.ts → semantic-consolidation-Dia_6FOn.d.ts} +1 -1
  216. package/dist/semantic-consolidation.d.ts +2 -2
  217. package/dist/semantic-consolidation.js +4 -4
  218. package/dist/semantic-rule-promotion.js +3 -3
  219. package/dist/semantic-rule-verifier.d.ts +1 -1
  220. package/dist/semantic-rule-verifier.js +3 -3
  221. package/dist/session-observer-bands.d.ts +1 -1
  222. package/dist/session-observer-state.d.ts +1 -1
  223. package/dist/shared-context/manager.d.ts +9 -9
  224. package/dist/signal.d.ts +1 -1
  225. package/dist/{storage-BVv_Mqa0.d.ts → storage-RshM7i8-.d.ts} +18 -1
  226. package/dist/storage.d.ts +2 -2
  227. package/dist/storage.js +2 -2
  228. package/dist/summarizer.d.ts +1 -1
  229. package/dist/summary-snapshot.d.ts +1 -1
  230. package/dist/temporal-supersession.d.ts +2 -2
  231. package/dist/temporal-timeline-recall.d.ts +1 -1
  232. package/dist/temporal-validity.d.ts +1 -1
  233. package/dist/threading.d.ts +1 -1
  234. package/dist/tier-migration.d.ts +2 -2
  235. package/dist/tier-routing.d.ts +1 -1
  236. package/dist/topics.d.ts +1 -1
  237. package/dist/transcript.d.ts +1 -1
  238. package/dist/transfer/types.d.ts +66 -66
  239. package/dist/trust-score-stage.d.ts +1 -1
  240. package/dist/trust-score.d.ts +1 -1
  241. package/dist/{types-Cmkz7csa.d.ts → types-CHSXOq7s.d.ts} +34 -0
  242. package/dist/types.d.ts +1 -1
  243. package/dist/types.js +1 -1
  244. package/dist/utility-runtime.d.ts +1 -1
  245. package/dist/verified-recall.js +3 -3
  246. package/package.json +2 -2
  247. package/src/access-boundary.ts +2 -0
  248. package/src/access-http.ts +147 -6
  249. package/src/access-mcp-cancellation.test.ts +2 -2
  250. package/src/access-operations.ts +2 -0
  251. package/src/access-surface-catalog.ts +2 -0
  252. package/src/config.test.ts +44 -0
  253. package/src/config.ts +43 -0
  254. package/src/index.ts +53 -0
  255. package/src/namespaces/catalog.test.ts +258 -0
  256. package/src/namespaces/catalog.ts +235 -10
  257. package/src/namespaces/storage.ts +9 -0
  258. package/src/orchestrator.ts +3 -0
  259. package/src/relay/mission-access.test.ts +379 -0
  260. package/src/relay/mission-access.ts +125 -0
  261. package/src/relay/mission-fixture.ts +301 -0
  262. package/src/relay/mission.test.ts +964 -0
  263. package/src/relay/mission.ts +1725 -0
  264. package/src/storage-catalog-touch-gating.test.ts +70 -0
  265. package/src/storage.ts +31 -5
  266. package/src/types.ts +34 -0
  267. package/dist/chunk-3ZVFLMFQ.js.map +0 -1
  268. package/dist/chunk-7LMEY5KZ.js.map +0 -1
  269. package/dist/chunk-FNJX2O6G.js +0 -467
  270. package/dist/chunk-FNJX2O6G.js.map +0 -1
  271. package/dist/chunk-JZM5QUTE.js.map +0 -1
  272. package/dist/chunk-KXLRMM35.js.map +0 -1
  273. package/dist/chunk-N3LWQJ6Y.js.map +0 -1
  274. package/dist/chunk-QVALQE4P.js.map +0 -1
  275. package/dist/chunk-UZRIKUFS.js.map +0 -1
  276. /package/dist/{chunk-L4H6MQ7I.js.map → chunk-2RSL6YRA.js.map} +0 -0
  277. /package/dist/{chunk-7EX4YOKH.js.map → chunk-2ZPQUTMW.js.map} +0 -0
  278. /package/dist/{chunk-673NPXE3.js.map → chunk-3SIC3E65.js.map} +0 -0
  279. /package/dist/{chunk-OVMS3DCB.js.map → chunk-675YU5IK.js.map} +0 -0
  280. /package/dist/{chunk-7CKS4AXY.js.map → chunk-AOWPZ7TM.js.map} +0 -0
  281. /package/dist/{chunk-TGBJ2OMK.js.map → chunk-BQTSGK5Y.js.map} +0 -0
  282. /package/dist/{chunk-YXOAQAH2.js.map → chunk-CLFY35ED.js.map} +0 -0
  283. /package/dist/{chunk-HQ7QZJM5.js.map → chunk-D4TLWDYR.js.map} +0 -0
  284. /package/dist/{chunk-LQKITFGB.js.map → chunk-FUUF7FMX.js.map} +0 -0
  285. /package/dist/{chunk-MXRMNKSY.js.map → chunk-I3GKTDM2.js.map} +0 -0
  286. /package/dist/{chunk-EQF5763Z.js.map → chunk-IQULRIZM.js.map} +0 -0
  287. /package/dist/{chunk-DJCKXI4M.js.map → chunk-NVXQTRBL.js.map} +0 -0
  288. /package/dist/{chunk-VDLMAJXS.js.map → chunk-OCY3CRPG.js.map} +0 -0
  289. /package/dist/{chunk-YLTG6BO4.js.map → chunk-OIFZII6J.js.map} +0 -0
  290. /package/dist/{chunk-XF4KOVDK.js.map → chunk-PA6DMYEK.js.map} +0 -0
  291. /package/dist/{chunk-3OQ4IZJN.js.map → chunk-QPZCAVDC.js.map} +0 -0
  292. /package/dist/{chunk-DLWYAN6A.js.map → chunk-T6U7HDIY.js.map} +0 -0
  293. /package/dist/{chunk-UTDA43TB.js.map → chunk-TWGGNUWJ.js.map} +0 -0
  294. /package/dist/{chunk-SBFDL2EQ.js.map → chunk-UTZW3X2R.js.map} +0 -0
  295. /package/dist/{chunk-SECMZACR.js.map → chunk-XUQUBZ7O.js.map} +0 -0
  296. /package/dist/{chunk-WUDBMLC6.js.map → chunk-ZC3HG22I.js.map} +0 -0
  297. /package/dist/{chunk-VCEH5UYS.js.map → chunk-ZRXSHGXT.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/access-operations.ts","../src/relay/mission-access.ts","../src/relay/mission.ts"],"sourcesContent":["/**\n * Pilot operation definitions for the access boundary (issue #1525).\n *\n * Three operations migrate through the registry in this PR — `memory_get`,\n * `memory_search`, and the `memory_store` write op — so the boundary's\n * normalization matrix (rules 17/28/36/48/51) and shared error mapping reach\n * MCP, HTTP, and CLI from one place. Domain-group migrations (memory ops →\n * connectors → namespaces …) land as follow-up PRs that add `defineOperation`\n * calls here and delete the surface-local validation they replace.\n *\n * Importing this module for its side effects registers the pilot operations;\n * surfaces then dispatch via {@link getOperation} from `./access-boundary.js`.\n */\n\nimport { z } from \"zod\";\n\nimport { defineOperation } from \"./access-boundary.js\";\nimport { memoryStoreRequestSchema, type MemoryStoreRequest } from \"./access-schema.js\";\nimport { EngramAccessInputError } from \"./access-service.js\";\nimport { CorrectionContractError } from \"./correction/correction-contract.js\";\nimport type {\n EngramAccessMemoryResponse,\n EngramAccessWriteResponse,\n} from \"./access-service.js\";\nimport {\n DECISION_SUBCOMMANDS,\n type DecisionSurfaceRequest,\n type DecisionSurfaceResponse,\n} from \"./coding/decision-surfaces.js\";\nimport {\n type ArchitectureSurfaceRequest,\n type ArchitectureSurfaceResponse,\n} from \"./coding/architecture-surfaces.js\";\nimport {\n type CodegraphSurfaceRequest,\n type CodegraphSurfaceResponse,\n isCodegraphToolName,\n} from \"./coding/codegraph-surfaces.js\";\nimport {\n DELTA_SUBCOMMANDS,\n type DeltaSurfaceRequest,\n type DeltaSurfaceResponse,\n} from \"./coding/session-delta-surfaces.js\";\n\n// ---------------------------------------------------------------------------\n// memory_get — fetch one memory by id\n// ---------------------------------------------------------------------------\n\n/**\n * `memoryId` is required and non-empty (rule 51: the MCP dispatcher previously\n * fell back to `typeof args.memoryId === \"string\" ? args.memoryId : \"\"`,\n * silently passing an empty id into the service). `namespace` is\n * `.nullable().optional()` because MCP clients send `null` (gotcha #2).\n * `namespace` has no `.min(1)` because the pre-boundary handlers forwarded\n * empty/whitespace strings, and `resolveNamespace` treats empty identically\n * to absent (both trim to falsy → default namespace). Rejecting empty would\n * break HTTP callers that send a bare `?namespace=` (Cursor review).\n */\nconst memoryGetSchema = z.object({\n memoryId: z.string().trim().min(1, \"memoryId is required\").max(512),\n // Issue #1582 — when memoryId is a `[m:xxxx]` handle, sessionKey scopes the\n // resolution to this session's recent recall history.\n sessionKey: z.string().trim().min(1).max(512).nullable().optional(),\n namespace: z.string().trim().max(256).nullable().optional(),\n});\n\nexport interface MemoryGetInput {\n readonly memoryId: string;\n readonly sessionKey?: string | null;\n readonly namespace?: string | null;\n}\n\nexport interface MemoryGetOutput {\n readonly result: EngramAccessMemoryResponse;\n}\n\nexport const memoryGetOperation = defineOperation<MemoryGetInput, MemoryGetOutput>({\n name: \"memory_get\",\n description: \"Fetch one memory by id.\",\n schema: memoryGetSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.memoryGet(\n input.memoryId,\n input.namespace ?? undefined,\n ctx.authenticatedPrincipal,\n input.sessionKey ?? undefined,\n );\n return { result };\n },\n});\n\n// ---------------------------------------------------------------------------\n// memory_search — semantic search across memories\n// ---------------------------------------------------------------------------\n\nconst memorySearchSchema = z.object({\n query: z.string().trim().min(1, \"query is required\").max(2048),\n namespace: z.string().trim().max(256).nullable().optional(),\n // No upper cap: the pre-boundary MCP handler forwarded any finite number to\n // memorySearch, and the QMD/search backends honor large limits. Capping at\n // 100 would reject existing clients that request larger result sets.\n maxResults: z.number().int().min(1).nullable().optional(),\n collection: z.string().trim().min(1).max(256).nullable().optional(),\n});\n\nexport interface MemorySearchInput {\n readonly query: string;\n readonly namespace?: string | null;\n readonly maxResults?: number | null;\n readonly collection?: string | null;\n}\n\nexport interface MemorySearchOutput {\n readonly result: {\n readonly query: string;\n readonly results: ReadonlyArray<{ path: string; score: number; snippet: string }>;\n readonly count: number;\n };\n}\n\nexport const memorySearchOperation = defineOperation<MemorySearchInput, MemorySearchOutput>({\n name: \"memory_search\",\n description: \"Search memories across readable namespaces.\",\n schema: memorySearchSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.memorySearch({\n query: input.query,\n namespace: input.namespace ?? undefined,\n maxResults: input.maxResults ?? undefined,\n collection: input.collection ?? undefined,\n principal: ctx.authenticatedPrincipal,\n });\n return { result };\n },\n});\n\n// ---------------------------------------------------------------------------\n// memory_store — the pilot WRITE op\n// ---------------------------------------------------------------------------\n\nexport type MemoryStoreInput = MemoryStoreRequest;\n\nexport interface MemoryStoreOutput {\n readonly result: EngramAccessWriteResponse;\n}\n\nexport const memoryStoreOperation = defineOperation<MemoryStoreInput, MemoryStoreOutput>({\n name: \"memory_store\",\n description: \"Store an explicit memory through the access layer.\",\n // Reuse the existing schema verbatim — the migration is behavior-preserving;\n // the schema's external contract is NOT changing in this PR (per the issue's\n // pitfall note).\n schema: memoryStoreRequestSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.memoryStore(\n {\n ...input,\n authenticatedPrincipal: ctx.authenticatedPrincipal,\n ...(ctx.sourceConnector ? { sourceConnector: ctx.sourceConnector } : {}),\n },\n // Forward transport-level hooks (e.g. HTTP's atomic write-quota gate)\n // so the hook still fires inside the service's idempotent-write lock —\n // never before, never on a replay (#1434 invariant preserved by the\n // boundary migration).\n\n ctx.hooks,\n );\n return { result };\n },\n});\n\n// ---------------------------------------------------------------------------\n// coding_decision — decision-record surfaces (issue #1548 Track A PR 2)\n// ---------------------------------------------------------------------------\n\n/**\n * The subcommand field is required and MUST be one of the four valid values\n * (rule 51 — reject loudly, list the options, never silently default). The\n * remaining fields are optional because each subcommand uses a different\n * subset; the handler validates subcommand-specific requirements after\n * routing.\n */\n/**\n * MCP clients send `null` for absent optional fields. Zod `.optional()`\n * rejects `null`, so strip nulls at the object level before the inner\n * schema validates (review: cursor null-field thread).\n */\nconst codingDecisionSchema = z.preprocess(\n (data) => {\n if (data && typeof data === \"object\" && !Array.isArray(data)) {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(data as Record<string, unknown>)) {\n if (v !== null) out[k] = v;\n }\n return out;\n }\n return data;\n },\n z.object({\n subcommand: z.enum(DECISION_SUBCOMMANDS),\n sessionKey: z.string().trim().max(512).optional(),\n namespace: z.string().trim().max(256).optional(),\n id: z.string().trim().max(512).optional(),\n title: z.string().trim().max(512).optional(),\n status: z.string().trim().max(64).optional(),\n context: z.string().trim().max(8192).optional(),\n decision: z.string().trim().max(8192).optional(),\n consequences: z.string().trim().max(8192).optional(),\n entityRefs: z.array(z.string().trim().min(1).max(256)).optional(),\n supersedesId: z.string().trim().max(512).optional(),\n }),\n);\n\nexport type CodingDecisionInput = DecisionSurfaceRequest;\nexport type CodingDecisionOutput = { result: DecisionSurfaceResponse };\n\nexport const codingDecisionOperation = defineOperation<\n CodingDecisionInput,\n CodingDecisionOutput\n>({\n name: \"coding_decision\",\n description:\n \"List, get, record, or supersede decision records in the session's coding namespace (issue #1548 Track A).\",\n schema: codingDecisionSchema as z.ZodType<CodingDecisionInput>,\n handler: async (input, ctx) => {\n const result = await ctx.service.codingDecision(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\n// ---------------------------------------------------------------------------\n// coding_architecture — architecture-card surfaces (issue #1548 Track A PR 3)\n// ---------------------------------------------------------------------------\n\nconst codingArchitectureSchema = z.preprocess(\n (data) => {\n if (data !== null && typeof data === \"object\" && !Array.isArray(data)) {\n const obj = data as Record<string, unknown>;\n const cleaned: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (value !== null) cleaned[key] = value;\n }\n return cleaned;\n }\n return data;\n },\n z.object({\n subcommand: z.enum([\"get\", \"refresh\"]),\n sessionKey: z.string().optional(),\n namespace: z.string().optional(),\n }),\n);\n\nexport type CodingArchitectureInput = ArchitectureSurfaceRequest;\nexport type CodingArchitectureOutput = { result: ArchitectureSurfaceResponse };\n\nexport const codingArchitectureOperation = defineOperation<\n CodingArchitectureInput,\n CodingArchitectureOutput\n>({\n name: \"coding_architecture\",\n description:\n \"Get or refresh the architecture card for the session's coding namespace (issue #1548 Track A PR 3).\",\n schema: codingArchitectureSchema as z.ZodType<CodingArchitectureInput>,\n handler: async (input, ctx) => {\n const result = await ctx.service.codingArchitecture(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nconst codegraphSurfaceSchema = z.preprocess(\n (data) => {\n if (data !== null && typeof data === \"object\" && !Array.isArray(data)) {\n const obj = data as Record<string, unknown>;\n const cleaned: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (value !== null) cleaned[key] = value;\n }\n return cleaned;\n }\n return data;\n },\n z.object({\n tool: z.string().refine(isCodegraphToolName, {\n message: \"tool must be one of the codegraph tool names\",\n }),\n sessionKey: z.string().max(512).optional(),\n principal: z.string().max(256).optional(),\n project: z.string().max(256).optional(),\n query: z.string().max(2048).optional(),\n limit: z.number().int().positive().max(200).optional(),\n start: z.string().max(512).optional(),\n direction: z.string().max(64).optional(),\n depth: z.number().int().positive().max(10).optional(),\n qualifiedName: z.string().max(1024).optional(),\n path: z.string().max(2048).optional(),\n structuredQuery: z.record(z.string(), z.unknown()).optional(),\n head: z.string().max(256).optional(),\n repoRoot: z.string().max(2048).optional(),\n mode: z.string().max(64).optional(),\n confirm: z.boolean().optional(),\n subcommand: z.string().max(64).optional(),\n id: z.string().max(512).optional(),\n title: z.string().max(512).optional(),\n status: z.string().max(64).optional(),\n context: z.string().max(8192).optional(),\n decision: z.string().max(8192).optional(),\n consequences: z.string().max(8192).optional(),\n entityRefs: z.array(z.string().max(256)).optional(),\n supersedesId: z.string().max(512).optional(),\n traces: z.array(z.unknown()).optional(),\n }),\n) as z.ZodType<CodegraphSurfaceRequest>;\n\n// ---------------------------------------------------------------------------\n// coding_delta — session-delta surface (issue #1548 Track A PR 4)\n// ---------------------------------------------------------------------------\n\nconst codingDeltaSchema = z.preprocess(\n (data) => {\n if (data !== null && typeof data === \"object\" && !Array.isArray(data)) {\n const obj = data as Record<string, unknown>;\n const cleaned: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (value !== null) cleaned[key] = value;\n }\n return cleaned;\n }\n return data;\n },\n z.object({\n subcommand: z.enum(DELTA_SUBCOMMANDS),\n sessionKey: z.string().trim().max(512).optional(),\n namespace: z.string().trim().max(256).optional(),\n }),\n);\n\nexport type CodingDeltaInput = DeltaSurfaceRequest;\nexport type CodingDeltaOutput = { result: DeltaSurfaceResponse };\n\nexport const codingDeltaOperation = defineOperation<\n CodingDeltaInput,\n CodingDeltaOutput\n>({\n name: \"coding_delta\",\n description:\n \"Get the session delta (commits + touched files since last seen) for the session's coding namespace (issue #1548 Track A PR 4).\",\n schema: codingDeltaSchema as z.ZodType<CodingDeltaInput>,\n handler: async (input, ctx) => {\n const result = await ctx.service.codingDelta(input, ctx.authenticatedPrincipal);\n return { result };\n },\n});\n\n// ---------------------------------------------------------------------------\n// memory_correct_plan / memory_correct_apply — Correction Contract (#1580)\n// ---------------------------------------------------------------------------\n//\n// One plan/apply pipeline for every memory correction (supersession,\n// invalidation, tombstone, edit, rescope, redaction). The MCP/HTTP/CLI\n// surfaces all dispatch through these two ops so the boundary's validation +\n// error mapping reach every correction path (rule 22 / 39).\n\nconst memoryCorrectPlanSchema = z.preprocess(\n (data) => {\n if (data && typeof data === \"object\" && !Array.isArray(data)) {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(data as Record<string, unknown>)) {\n if (v !== null) out[k] = v;\n }\n return out;\n }\n return data;\n },\n z.object({\n text: z.string().trim().min(1).max(10_000),\n targetIds: z.array(z.string().trim().min(1).max(512)).optional(),\n sessionKey: z.string().trim().max(512).optional(),\n namespace: z.string().trim().max(256).optional(),\n }),\n);\n\nexport interface MemoryCorrectPlanInput {\n text: string;\n targetIds?: string[];\n sessionKey?: string;\n namespace?: string;\n}\n\nexport interface MemoryCorrectPlanOutput {\n readonly result: unknown; // CorrectionPlan — opaque to the boundary\n}\n\nexport const memoryCorrectPlanOperation = defineOperation<\n MemoryCorrectPlanInput,\n MemoryCorrectPlanOutput\n>({\n name: \"memory_correct_plan\",\n description:\n \"Plan a memory correction from a plain-language statement (issue #1580). Returns a CorrectionPlan with a diff preview; apply via memory_correct_apply.\",\n schema: memoryCorrectPlanSchema as z.ZodType<MemoryCorrectPlanInput>,\n handler: async (input, ctx) => {\n try {\n const result = await ctx.service.correctionPlan({\n text: input.text,\n ...(input.targetIds ? { targetIds: input.targetIds } : {}),\n ...(input.sessionKey ? { sessionKey: input.sessionKey } : {}),\n ...(input.namespace ? { namespace: input.namespace } : {}),\n ...(ctx.authenticatedPrincipal ? { principal: ctx.authenticatedPrincipal } : {}),\n });\n return { result };\n } catch (err) {\n if (err instanceof CorrectionContractError) throw new EngramAccessInputError(err.message);\n throw err;\n }\n },\n});\n\nconst memoryCorrectApplySchema = z.preprocess(\n (data) => {\n if (data && typeof data === \"object\" && !Array.isArray(data)) {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(data as Record<string, unknown>)) {\n if (v !== null) out[k] = v;\n }\n return out;\n }\n return data;\n },\n z.object({\n planId: z.string().trim().min(1).max(512),\n confirm: z.boolean().optional(),\n sessionKey: z.string().trim().max(512).optional(),\n namespace: z.string().trim().max(256).optional(),\n }),\n);\n\nexport interface MemoryCorrectApplyInput {\n planId: string;\n confirm?: boolean;\n sessionKey?: string;\n namespace?: string;\n}\n\nexport interface MemoryCorrectApplyOutput {\n readonly result: unknown; // CorrectionOutcome — opaque to the boundary\n}\n\nexport const memoryCorrectApplyOperation = defineOperation<\n MemoryCorrectApplyInput,\n MemoryCorrectApplyOutput\n>({\n name: \"memory_correct_apply\",\n description:\n \"Apply a planned memory correction by planId (issue #1580). Requires confirm: true when correction.applyRequiresConfirm is on (default).\",\n schema: memoryCorrectApplySchema as z.ZodType<MemoryCorrectApplyInput>,\n handler: async (input, ctx) => {\n try {\n const result = await ctx.service.correctionApply(input.planId, {\n confirm: input.confirm === true,\n ...(input.sessionKey ? { sessionKey: input.sessionKey } : {}),\n ...(input.namespace ? { namespace: input.namespace } : {}),\n ...(ctx.authenticatedPrincipal ? { principal: ctx.authenticatedPrincipal } : {}),\n });\n return { result };\n } catch (err) {\n if (err instanceof CorrectionContractError) throw new EngramAccessInputError(err.message);\n throw err;\n }\n },\n});\n\n// ---------------------------------------------------------------------------\n// Surface registration map — what each transport calls the pilot ops\n// ---------------------------------------------------------------------------\n\n/**\n * The canonical short names (no `engram.`/`remnic.` prefix) of the operations\n * the boundary owns today. The fitness test treats this set as the migrated\n * set; everything else on a surface is unmigrated and counted by the ratchet.\n */\nexport const codegraphIndexOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_index\",\n description:\n \"Codegraph parity tool (issue #1554): index. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphListProjectsOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_list_projects\",\n description:\n \"Codegraph parity tool (issue #1554): list_projects. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphDeleteProjectOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_delete_project\",\n description:\n \"Codegraph parity tool (issue #1554): delete_project. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphIndexStatusOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_index_status\",\n description:\n \"Codegraph parity tool (issue #1554): index_status. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphSearchGraphOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_search_graph\",\n description:\n \"Codegraph parity tool (issue #1554): search_graph. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphTracePathOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_trace_path\",\n description:\n \"Codegraph parity tool (issue #1554): trace_path. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphDetectChangesOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_detect_changes\",\n description:\n \"Codegraph parity tool (issue #1554): detect_changes. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphQueryGraphOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_query_graph\",\n description:\n \"Codegraph parity tool (issue #1554): query_graph. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphGetSchemaOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_get_schema\",\n description:\n \"Codegraph parity tool (issue #1554): get_schema. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphGetSnippetOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_get_snippet\",\n description:\n \"Codegraph parity tool (issue #1554): get_snippet. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphGetArchitectureOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_get_architecture\",\n description:\n \"Codegraph parity tool (issue #1554): get_architecture. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphSearchCodeOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_search_code\",\n description:\n \"Codegraph parity tool (issue #1554): search_code. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphManageAdrOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_manage_adr\",\n description:\n \"Codegraph parity tool (issue #1554): manage_adr. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphIngestTracesOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_ingest_traces\",\n description:\n \"Codegraph parity tool (issue #1554): ingest_traces. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\n// Batch-migrated operations (issue #1525): registers all remaining\n// handlers through the boundary as a side effect of importing this module.\nimport \"./access-operations-batch.js\";\n// Remnic Relay mission evidence operations (issue #1966).\nimport \"./relay/mission-access.js\";\n\nexport const REGISTERED_OPERATIONS = [\n memoryGetOperation.spec.name,\n memorySearchOperation.spec.name,\n memoryStoreOperation.spec.name,\n codingDecisionOperation.spec.name,\n codingArchitectureOperation.spec.name,\n codegraphIndexOperation.spec.name,\n codegraphListProjectsOperation.spec.name,\n codegraphDeleteProjectOperation.spec.name,\n codegraphIndexStatusOperation.spec.name,\n codegraphSearchGraphOperation.spec.name,\n codegraphTracePathOperation.spec.name,\n codegraphDetectChangesOperation.spec.name,\n codegraphQueryGraphOperation.spec.name,\n codegraphGetSchemaOperation.spec.name,\n codegraphGetSnippetOperation.spec.name,\n codegraphGetArchitectureOperation.spec.name,\n codegraphSearchCodeOperation.spec.name,\n codegraphManageAdrOperation.spec.name,\n codegraphIngestTracesOperation.spec.name,\n codingDeltaOperation.spec.name,\n memoryCorrectPlanOperation.spec.name,\n memoryCorrectApplyOperation.spec.name,\n] as const;\n","import { z } from \"zod\";\n\nimport { type OperationContext, defineOperation } from \"../access-boundary.js\";\nimport type { EngramAccessService } from \"../access-service.js\";\nimport {\n RELAY_MISSION_MAX_EVENT_LIMIT,\n RelayIsoDateTimeSchema,\n type RelayMissionAppendResult,\n type RelayMissionEventInput,\n RelayMissionEventInputSchema,\n RelayMissionIdSchema,\n type RelayMissionReadOptions,\n RelayMissionReadOptionsSchema,\n type RelayMissionSnapshot,\n RelayMissionStore,\n} from \"./mission.js\";\n\nconst namespaceSchema = z.string().trim().min(1).max(128).nullable().optional();\n\nconst RelayMissionAppendAccessSchema = z\n .object({\n missionId: RelayMissionIdSchema,\n namespace: namespaceSchema,\n event: RelayMissionEventInputSchema,\n })\n .strict();\n\nconst optionalLimitSchema = z.preprocess((value) => {\n if (value === undefined || value === null) return undefined;\n if (typeof value === \"string\" && /^(?:0|[1-9]\\d*)$/.test(value)) return Number(value);\n return value;\n}, z.number().int().min(1).max(RELAY_MISSION_MAX_EVENT_LIMIT).optional());\n\nconst RelayMissionReadAccessSchema = z\n .object({\n missionId: RelayMissionIdSchema,\n namespace: namespaceSchema,\n since: RelayIsoDateTimeSchema.optional(),\n until: RelayIsoDateTimeSchema.optional(),\n limit: optionalLimitSchema,\n })\n .strict()\n .refine(\n (value) =>\n value.since === undefined || value.until === undefined || Date.parse(value.since) < Date.parse(value.until),\n { message: \"since must be earlier than until\", path: [\"until\"] }\n );\n\nexport interface RelayMissionAppendAccessInput {\n missionId: string;\n namespace?: string | null;\n event: RelayMissionEventInput;\n}\n\nexport interface RelayMissionReadAccessInput extends RelayMissionReadOptions {\n missionId: string;\n namespace?: string | null;\n}\n\nexport interface RelayMissionAppendAccessOutput {\n result: RelayMissionAppendResult;\n}\n\nexport interface RelayMissionReadAccessOutput {\n result: RelayMissionSnapshot;\n}\n\n/**\n * Shared service contract for transports that need to append Relay evidence.\n * Namespace resolution stays in the existing access service so the append\n * inherits the same tenancy and principal rules as every memory write.\n */\nexport async function appendRelayMissionEvent(\n service: EngramAccessService,\n input: RelayMissionAppendAccessInput,\n authenticatedPrincipal?: string,\n beforeAppend?: () => void | Promise<void>\n): Promise<RelayMissionAppendResult> {\n const resolved = await service.getWritableStorageForNamespace(input.namespace ?? undefined, authenticatedPrincipal);\n const store = new RelayMissionStore({\n rootDir: resolved.storage.dir,\n namespace: resolved.namespace,\n });\n return store.append(input.missionId, input.event, { authenticatedPrincipal, beforeAppend });\n}\n\n/** Namespace-authorized, bounded Relay snapshot read shared by HTTP and UI. */\nexport async function readRelayMission(\n service: EngramAccessService,\n input: RelayMissionReadAccessInput,\n authenticatedPrincipal?: string\n): Promise<RelayMissionSnapshot> {\n const resolved = await service.getReadableStorageForNamespace(input.namespace ?? undefined, authenticatedPrincipal);\n const store = new RelayMissionStore({\n rootDir: resolved.storage.dir,\n namespace: resolved.namespace,\n });\n const options = RelayMissionReadOptionsSchema.parse({\n ...(input.since === undefined ? {} : { since: input.since }),\n ...(input.until === undefined ? {} : { until: input.until }),\n ...(input.limit === undefined ? {} : { limit: input.limit }),\n });\n return store.read(input.missionId, options);\n}\n\nexport const relayMissionAppendOperation = defineOperation<\n RelayMissionAppendAccessInput,\n RelayMissionAppendAccessOutput\n>({\n name: \"relay_mission_append\",\n description: \"Append one evidence-backed event to an isolated Relay mission.\",\n schema: RelayMissionAppendAccessSchema as z.ZodType<RelayMissionAppendAccessInput>,\n handler: async (input, ctx: OperationContext) => ({\n result: await appendRelayMissionEvent(ctx.service, input, ctx.authenticatedPrincipal, ctx.hooks?.enforceWriteQuota),\n }),\n});\n\nexport const relayMissionReadOperation = defineOperation<RelayMissionReadAccessInput, RelayMissionReadAccessOutput>({\n name: \"relay_mission_read\",\n description: \"Read one bounded, browser-ready Relay mission receipt.\",\n schema: RelayMissionReadAccessSchema as z.ZodType<RelayMissionReadAccessInput>,\n handler: async (input, ctx: OperationContext) => ({\n result: await readRelayMission(ctx.service, input, ctx.authenticatedPrincipal),\n }),\n});\n","import { createHash, randomUUID } from \"node:crypto\";\nimport { promises as fs, constants as fsConstants } from \"node:fs\";\nimport path from \"node:path\";\nimport { z } from \"zod\";\n\nimport { serializeMutations, withHeldFileLock } from \"../utils/serialize-mutations.js\";\n\nexport const RELAY_MISSION_SCHEMA_VERSION = \"1\" as const;\nexport const RELAY_MISSION_MAX_FILE_BYTES = 4 * 1024 * 1024;\nexport const RELAY_MISSION_MAX_LINE_BYTES = 64 * 1024;\nexport const RELAY_MISSION_MAX_EVENTS = 2_000;\nexport const RELAY_MISSION_DEFAULT_EVENT_LIMIT = 200;\nexport const RELAY_MISSION_MAX_EVENT_LIMIT = 500;\n\nexport const RelayMissionIdSchema = z\n .string()\n .min(1)\n .max(64)\n .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, {\n message: \"must contain only lowercase letters, numbers, and single hyphens\",\n });\n\nconst identifierSchema = z\n .string()\n .min(1)\n .max(128)\n .regex(/^[A-Za-z0-9](?:[A-Za-z0-9._:@-]{0,126}[A-Za-z0-9])?$/, {\n message: \"must be a bounded identifier\",\n });\n\nconst namespaceSchema = z.string().trim().min(1).max(128);\nconst authenticatedPrincipalSchema = z.string().trim().min(1).max(256);\nconst shortTextSchema = z.string().trim().min(1).max(240);\nconst statementSchema = z.string().trim().min(1).max(4_000);\nconst uniqueIdentifierListSchema = (minimum: number, maximum: number) =>\n z\n .array(identifierSchema)\n .min(minimum)\n .max(maximum)\n .refine((values) => new Set(values).size === values.length, \"must not contain duplicate identifiers\");\n\nexport const RelayIsoDateTimeSchema = z\n .string()\n .datetime({ offset: true })\n .refine((value) => Number.isFinite(Date.parse(value)), \"must be a representable timestamp\");\n\nexport const RelayEvidenceRefSchema = z\n .object({\n kind: z.enum([\"memory\", \"recall_audit\", \"source\", \"test\", \"commit\", \"correction\", \"agent_output\", \"approval\"]),\n id: identifierSchema,\n label: shortTextSchema,\n locator: z.string().trim().min(1).max(2_048).optional(),\n capture: z.enum([\"at_action\", \"historical_lookup\", \"fixture\"]),\n })\n .strict();\n\nexport type RelayEvidenceRef = z.infer<typeof RelayEvidenceRefSchema>;\n\nconst evidenceListSchema = z.array(RelayEvidenceRefSchema).max(16);\nconst agentIdentityFields = {\n agentId: identifierSchema,\n sessionId: identifierSchema,\n} as const;\n\nconst RelayMissionPayloadUnionSchema = z.discriminatedUnion(\"kind\", [\n z\n .object({\n kind: z.literal(\"mission_started\"),\n title: shortTextSchema,\n objective: statementSchema,\n runMode: z.enum([\"live\", \"replay\", \"fixture\"]),\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"agent_status\"),\n ...agentIdentityFields,\n label: shortTextSchema,\n role: shortTextSchema,\n status: z.enum([\"idle\", \"working\", \"blocked\", \"complete\", \"failed\"]),\n detail: statementSchema.optional(),\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"agent_output\"),\n ...agentIdentityFields,\n outputId: identifierSchema,\n summary: statementSchema,\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"belief_observed\"),\n ...agentIdentityFields,\n beliefId: identifierSchema,\n decisionId: identifierSchema,\n statement: statementSchema,\n confidence: z.number().finite().min(0).max(1).optional(),\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"conflict_detected\"),\n conflictId: identifierSchema,\n decisionIds: uniqueIdentifierListSchema(2, 8),\n agentIds: uniqueIdentifierListSchema(2, 16),\n summary: statementSchema,\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"test_result\"),\n testId: identifierSchema,\n decisionId: identifierSchema,\n correctionId: identifierSchema.optional(),\n command: z.string().trim().min(1).max(1_000),\n status: z.enum([\"passed\", \"failed\", \"error\"]),\n summary: statementSchema,\n durationMs: z.number().int().nonnegative().max(3_600_000).optional(),\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"correction_proposed\"),\n correctionId: identifierSchema,\n conflictId: identifierSchema,\n proposedDecisionId: identifierSchema,\n supersedesDecisionIds: uniqueIdentifierListSchema(1, 8),\n statement: statementSchema,\n rationale: statementSchema,\n proposedBy: identifierSchema,\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"correction_approved\"),\n correctionId: identifierSchema,\n approvedBy: z\n .object({\n kind: z.enum([\"human\", \"agent\"]),\n id: identifierSchema,\n label: shortTextSchema,\n })\n .strict(),\n note: statementSchema.optional(),\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"decision_superseded\"),\n decisionId: identifierSchema,\n replacementDecisionId: identifierSchema,\n correctionId: identifierSchema,\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"recall_observed\"),\n ...agentIdentityFields,\n recallReceiptId: identifierSchema,\n decisionId: identifierSchema,\n query: statementSchema,\n capturedAtAction: z.boolean(),\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"propagation_verified\"),\n ...agentIdentityFields,\n correctionId: identifierSchema,\n decisionId: identifierSchema,\n recallReceiptId: identifierSchema,\n staleDecisionAbsent: z.boolean(),\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"mission_completed\"),\n outcome: z.enum([\"recovered\", \"failed\", \"inconclusive\"]),\n summary: statementSchema,\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n]);\n\nexport const RelayMissionPayloadSchema = RelayMissionPayloadUnionSchema.superRefine((value, ctx) => {\n if (value.kind === \"decision_superseded\" && value.decisionId === value.replacementDecisionId) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"a decision cannot supersede itself\",\n path: [\"replacementDecisionId\"],\n });\n }\n if (value.kind === \"correction_approved\" && !value.evidence.some((item) => item.kind === \"approval\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"correction approval requires approval evidence\",\n path: [\"evidence\"],\n });\n }\n if (\n value.kind === \"decision_superseded\" &&\n !value.evidence.some((item) => item.kind === \"correction\" && item.id === value.correctionId)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"decision supersession requires matching correction evidence\",\n path: [\"evidence\"],\n });\n }\n if (value.kind !== \"recall_observed\" && value.kind !== \"propagation_verified\") return;\n const matchingRecallEvidence = value.evidence.find(\n (item) => item.kind === \"recall_audit\" && item.id === value.recallReceiptId\n );\n if (!matchingRecallEvidence) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"recall proof requires a matching recall-audit reference\",\n path: [\"evidence\"],\n });\n return;\n }\n if (value.kind === \"recall_observed\") {\n const expectedCapture = value.capturedAtAction ? \"at_action\" : \"historical_lookup\";\n if (matchingRecallEvidence.capture !== expectedCapture && matchingRecallEvidence.capture !== \"fixture\") {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `recall evidence must be labeled ${expectedCapture}`,\n path: [\"evidence\", value.evidence.indexOf(matchingRecallEvidence), \"capture\"],\n });\n }\n }\n});\n\nexport type RelayMissionPayload = z.infer<typeof RelayMissionPayloadSchema>;\n\nexport const RelayMissionEventInputSchema = z\n .object({\n occurredAt: RelayIsoDateTimeSchema.optional(),\n idempotencyKey: identifierSchema.optional(),\n payload: RelayMissionPayloadSchema,\n })\n .strict();\n\nexport type RelayMissionEventInput = z.infer<typeof RelayMissionEventInputSchema>;\n\nexport const RelayMissionEventSchema = z\n .object({\n schemaVersion: z.literal(RELAY_MISSION_SCHEMA_VERSION),\n eventId: identifierSchema,\n missionId: RelayMissionIdSchema,\n namespace: namespaceSchema,\n authenticatedPrincipal: authenticatedPrincipalSchema.optional(),\n recordedAt: RelayIsoDateTimeSchema,\n occurredAt: RelayIsoDateTimeSchema,\n idempotencyKey: identifierSchema.optional(),\n payload: RelayMissionPayloadSchema,\n })\n .strict();\n\nexport type RelayMissionEvent = z.infer<typeof RelayMissionEventSchema>;\n\nexport const RelayMissionReadOptionsSchema = z\n .object({\n since: RelayIsoDateTimeSchema.optional(),\n until: RelayIsoDateTimeSchema.optional(),\n limit: z.number().int().min(1).max(RELAY_MISSION_MAX_EVENT_LIMIT).default(RELAY_MISSION_DEFAULT_EVENT_LIMIT),\n })\n .strict()\n .refine(\n (value) =>\n value.since === undefined || value.until === undefined || Date.parse(value.since) < Date.parse(value.until),\n { message: \"since must be earlier than until\", path: [\"until\"] }\n );\n\nexport type RelayMissionReadOptions = z.input<typeof RelayMissionReadOptionsSchema>;\n\nexport type RelayMissionStatus =\n | \"not_started\"\n | \"active\"\n | \"awaiting_approval\"\n | \"correcting\"\n | \"verified\"\n | \"completed\"\n | \"failed\";\n\nexport interface RelayAgentOutputSnapshot {\n outputId: string;\n summary: string;\n occurredAt: string;\n evidence: RelayEvidenceRef[];\n}\n\nexport interface RelayRecallSnapshot {\n recallReceiptId: string;\n sessionId: string;\n decisionId: string;\n query: string;\n capturedAtAction: boolean;\n coldStart: boolean;\n occurredAt: string;\n evidence: RelayEvidenceRef[];\n}\n\nexport interface RelayAgentSnapshot {\n agentId: string;\n label: string;\n role: string;\n status: \"idle\" | \"working\" | \"blocked\" | \"complete\" | \"failed\";\n sessionIds: string[];\n outputs: RelayAgentOutputSnapshot[];\n recalls: RelayRecallSnapshot[];\n lastSeenAt: string;\n}\n\nexport interface RelayDecisionSnapshot {\n decisionId: string;\n statement: string;\n status: \"active\" | \"superseded\" | \"proposed\";\n heldByAgentIds: string[];\n beliefIds: string[];\n evidence: RelayEvidenceRef[];\n firstObservedAt: string;\n supersededAt?: string;\n supersededBy?: string;\n correctionId?: string;\n}\n\nexport interface RelayConflictSnapshot {\n conflictId: string;\n decisionIds: string[];\n agentIds: string[];\n summary: string;\n status: \"open\" | \"proposed\" | \"resolved\";\n correctionId?: string;\n occurredAt: string;\n evidence: RelayEvidenceRef[];\n}\n\nexport interface RelayCorrectionSnapshot {\n correctionId: string;\n conflictId: string;\n proposedDecisionId: string;\n supersedesDecisionIds: string[];\n statement: string;\n rationale: string;\n proposedBy: string;\n status: \"proposed\" | \"approved\" | \"applied\" | \"propagated\";\n proposedAt: string;\n approvedAt?: string;\n approvedBy?: { kind: \"human\" | \"agent\"; id: string; label: string };\n approvalNote?: string;\n approvalPrincipal?: string;\n appliedAt?: string;\n propagatedAt?: string;\n evidence: RelayEvidenceRef[];\n}\n\nexport interface RelayTestSnapshot {\n testId: string;\n decisionId: string;\n correctionId?: string;\n command: string;\n status: \"passed\" | \"failed\" | \"error\";\n summary: string;\n durationMs?: number;\n occurredAt: string;\n evidence: RelayEvidenceRef[];\n}\n\nexport interface RelayPropagationSnapshot {\n correctionId: string;\n agentId: string;\n sessionId: string;\n decisionId: string;\n recallReceiptId: string;\n staleDecisionAbsent: boolean;\n occurredAt: string;\n evidence: RelayEvidenceRef[];\n}\n\nexport interface RelayMissionSnapshot {\n schemaVersion: typeof RELAY_MISSION_SCHEMA_VERSION;\n missionId: string;\n namespace: string;\n found: boolean;\n readHealth: \"empty\" | \"ok\" | \"partial\";\n status: RelayMissionStatus;\n mission: {\n title: string | null;\n objective: string | null;\n runMode: \"live\" | \"replay\" | \"fixture\" | null;\n startedAt: string | null;\n completedAt: string | null;\n };\n agents: RelayAgentSnapshot[];\n decisions: RelayDecisionSnapshot[];\n conflicts: RelayConflictSnapshot[];\n corrections: RelayCorrectionSnapshot[];\n tests: RelayTestSnapshot[];\n propagation: RelayPropagationSnapshot[];\n outcome: {\n result: \"recovered\" | \"failed\" | \"inconclusive\";\n summary: string;\n occurredAt: string;\n evidence: RelayEvidenceRef[];\n } | null;\n receipt: {\n complete: boolean;\n missingEvidence: string[];\n activeDecisionIds: string[];\n supersededDecisionIds: string[];\n coldStartVerified: boolean;\n passingOutcomeVerified: boolean;\n };\n bounds: {\n totalEvents: number;\n returnedEvents: number;\n corruptLines: number;\n truncated: boolean;\n since: string | null;\n until: string | null;\n };\n events: RelayMissionEvent[];\n}\n\nexport type RelayMissionStoreErrorCode =\n | \"idempotency_conflict\"\n | \"limit_exceeded\"\n | \"lock_unavailable\"\n | \"read_failed\"\n | \"unsafe_path\"\n | \"write_failed\";\n\nexport class RelayMissionStoreError extends Error {\n constructor(\n public readonly code: RelayMissionStoreErrorCode,\n message: string,\n options?: ErrorOptions\n ) {\n super(message, options);\n this.name = \"RelayMissionStoreError\";\n }\n}\n\nexport interface RelayMissionStoreOptions {\n rootDir: string;\n namespace: string;\n now?: () => Date;\n createEventId?: () => string;\n maxFileBytes?: number;\n maxEvents?: number;\n lockMaxWaitMs?: number;\n}\n\ninterface MissionFileRead {\n exists: boolean;\n events: RelayMissionEvent[];\n corruptLines: number;\n rawBytes: number;\n}\n\ninterface PinnedMissionDirectory {\n logicalPath: string;\n accessPath: string;\n handle: import(\"node:fs/promises\").FileHandle;\n}\n\nexport interface RelayMissionAppendResult {\n appended: boolean;\n replayed: boolean;\n event: RelayMissionEvent;\n}\n\nexport class RelayMissionStore {\n private readonly rootDir: string;\n private readonly namespace: string;\n private readonly now: () => Date;\n private readonly createEventId: () => string;\n private readonly maxFileBytes: number;\n private readonly maxEvents: number;\n private readonly lockMaxWaitMs: number;\n\n constructor(options: RelayMissionStoreOptions) {\n if (typeof options.rootDir !== \"string\" || options.rootDir.trim().length === 0) {\n throw new TypeError(\"RelayMissionStore rootDir must be a non-empty string\");\n }\n this.rootDir = path.resolve(options.rootDir);\n this.namespace = namespaceSchema.parse(options.namespace);\n this.now = options.now ?? (() => new Date());\n this.createEventId = options.createEventId ?? (() => `relay-${randomUUID()}`);\n this.maxFileBytes = positiveIntegerOption(options.maxFileBytes, \"maxFileBytes\", RELAY_MISSION_MAX_FILE_BYTES);\n this.maxEvents = positiveIntegerOption(options.maxEvents, \"maxEvents\", RELAY_MISSION_MAX_EVENTS);\n this.lockMaxWaitMs = positiveIntegerOption(options.lockMaxWaitMs, \"lockMaxWaitMs\", 5_000);\n }\n\n async append(\n missionIdValue: string,\n inputValue: RelayMissionEventInput,\n hooks: { authenticatedPrincipal?: string; beforeAppend?: () => void | Promise<void> } = {}\n ): Promise<RelayMissionAppendResult> {\n const missionId = RelayMissionIdSchema.parse(missionIdValue);\n const input = RelayMissionEventInputSchema.parse(inputValue);\n const authenticatedPrincipal =\n hooks.authenticatedPrincipal === undefined\n ? undefined\n : authenticatedPrincipalSchema.parse(hooks.authenticatedPrincipal);\n const missionDir = await this.openMissionDirectory(true);\n const filePath = path.join(missionDir.accessPath, `${missionId}.jsonl`);\n const logicalFilePath = path.join(missionDir.logicalPath, `${missionId}.jsonl`);\n const lockPath = `${filePath}.lock`;\n\n try {\n return await serializeMutations(`relay-mission:${logicalFilePath}`, () =>\n withHeldFileLock(\n lockPath,\n { staleMs: 30_000, maxWaitMs: this.lockMaxWaitMs, heartbeatMs: 10_000 },\n async (acquired) => {\n if (!acquired) {\n throw new RelayMissionStoreError(\"lock_unavailable\", \"could not acquire Relay mission lock\");\n }\n\n const existing = await this.readFile(filePath, missionId);\n if (input.idempotencyKey) {\n const replay = existing.events.find((event) => event.idempotencyKey === input.idempotencyKey);\n if (replay) {\n if (!sameIdempotentInput(replay, input, authenticatedPrincipal)) {\n throw new RelayMissionStoreError(\n \"idempotency_conflict\",\n `idempotency key ${input.idempotencyKey} was already used for different input`\n );\n }\n return { appended: false, replayed: true, event: replay };\n }\n }\n\n if (existing.events.length >= this.maxEvents) {\n throw new RelayMissionStoreError(\n \"limit_exceeded\",\n `mission ${missionId} reached the ${this.maxEvents}-event limit`\n );\n }\n\n // Transport quotas run only after idempotency replay detection and\n // while this mission's mutation lock is held. A response-lost retry\n // remains replayable even when the original append used the final\n // quota slot.\n await hooks.beforeAppend?.();\n\n const recordedAt = validNow(this.now);\n const event = RelayMissionEventSchema.parse({\n schemaVersion: RELAY_MISSION_SCHEMA_VERSION,\n eventId: this.createEventId(),\n missionId,\n namespace: this.namespace,\n ...(authenticatedPrincipal === undefined ? {} : { authenticatedPrincipal }),\n recordedAt,\n occurredAt: input.occurredAt ?? recordedAt,\n ...(input.idempotencyKey ? { idempotencyKey: input.idempotencyKey } : {}),\n payload: input.payload,\n });\n const line = `${JSON.stringify(event)}\\n`;\n const lineBytes = Buffer.byteLength(line, \"utf8\");\n if (lineBytes > RELAY_MISSION_MAX_LINE_BYTES) {\n throw new RelayMissionStoreError(\n \"limit_exceeded\",\n `Relay mission event exceeds ${RELAY_MISSION_MAX_LINE_BYTES} bytes`\n );\n }\n if (existing.rawBytes + lineBytes > this.maxFileBytes) {\n throw new RelayMissionStoreError(\n \"limit_exceeded\",\n `mission ${missionId} would exceed the ${this.maxFileBytes}-byte limit`\n );\n }\n\n await this.appendFile(filePath, line);\n return { appended: true, replayed: false, event };\n }\n )\n );\n } finally {\n await missionDir.handle.close().catch(() => undefined);\n }\n }\n\n async read(missionIdValue: string, readOptions: RelayMissionReadOptions = {}): Promise<RelayMissionSnapshot> {\n const missionId = RelayMissionIdSchema.parse(missionIdValue);\n const options = RelayMissionReadOptionsSchema.parse(readOptions);\n const missionDir = await this.openMissionDirectory(false);\n if (missionDir === null) {\n return reduceRelayMission({\n missionId,\n namespace: this.namespace,\n events: [],\n fileExists: false,\n options,\n });\n }\n const filePath = path.join(missionDir.accessPath, `${missionId}.jsonl`);\n const logicalFilePath = path.join(missionDir.logicalPath, `${missionId}.jsonl`);\n\n try {\n // Coordinate with writers in this process without creating a lock file.\n // Cross-process appends are single bounded O_APPEND records; a torn or\n // malformed record remains explicit partial evidence rather than being\n // silently accepted.\n return await serializeMutations(`relay-mission:${logicalFilePath}`, async () => {\n const read = await this.readFile(filePath, missionId);\n return reduceRelayMission({\n missionId,\n namespace: this.namespace,\n events: read.events,\n corruptLines: read.corruptLines,\n fileExists: read.exists,\n options,\n });\n });\n } finally {\n await missionDir.handle.close().catch(() => undefined);\n }\n }\n\n private async openMissionDirectory(create: true): Promise<PinnedMissionDirectory>;\n private async openMissionDirectory(create: false): Promise<PinnedMissionDirectory | null>;\n private async openMissionDirectory(create: boolean): Promise<PinnedMissionDirectory | null> {\n let currentHandle: import(\"node:fs/promises\").FileHandle | undefined;\n try {\n currentHandle = await openVerifiedDirectory(this.rootDir, \"Relay root must be a real directory\");\n let logicalPath = this.rootDir;\n for (const segment of [\"state\", \"relay\", \"missions\"]) {\n let childHandle: import(\"node:fs/promises\").FileHandle;\n try {\n childHandle = create\n ? await openOrCreatePinnedChildDirectory(currentHandle, segment)\n : await openVerifiedDirectory(\n path.join(pinnedDirectoryPath(currentHandle), segment),\n \"Relay directory symlinks are rejected\"\n );\n } catch (error) {\n if (!create && (error as NodeJS.ErrnoException).code === \"ENOENT\") {\n await currentHandle.close();\n return null;\n }\n throw error;\n }\n await currentHandle.close();\n currentHandle = childHandle;\n logicalPath = path.join(logicalPath, segment);\n }\n return {\n logicalPath,\n accessPath: pinnedDirectoryPath(currentHandle),\n handle: currentHandle,\n };\n } catch (error) {\n await currentHandle?.close().catch(() => undefined);\n if (error instanceof RelayMissionStoreError) throw error;\n throw new RelayMissionStoreError(\"unsafe_path\", \"Relay mission directory is unavailable or unsafe\", {\n cause: error,\n });\n }\n }\n\n private async readFile(filePath: string, missionId: string): Promise<MissionFileRead> {\n let handle: import(\"node:fs/promises\").FileHandle | undefined;\n try {\n handle = await fs.open(filePath, fsConstants.O_RDONLY | fsConstants.O_NOFOLLOW);\n const info = await handle.stat();\n if (!info.isFile()) {\n throw new RelayMissionStoreError(\"unsafe_path\", \"Relay mission path is not a file\");\n }\n if (info.nlink !== 1) {\n throw new RelayMissionStoreError(\"unsafe_path\", \"Relay mission hard links are rejected\");\n }\n if (info.size > this.maxFileBytes) {\n throw new RelayMissionStoreError(\n \"limit_exceeded\",\n `mission ${missionId} exceeds the ${this.maxFileBytes}-byte read limit`\n );\n }\n const raw = await handle.readFile(\"utf8\");\n const parsed = parseMissionJsonl(raw, missionId, this.namespace, this.maxEvents);\n return { exists: true, rawBytes: Buffer.byteLength(raw, \"utf8\"), ...parsed };\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return { exists: false, events: [], corruptLines: 0, rawBytes: 0 };\n }\n if (error instanceof RelayMissionStoreError) throw error;\n throw new RelayMissionStoreError(\"read_failed\", \"failed to read Relay mission\", {\n cause: error,\n });\n } finally {\n await handle?.close().catch(() => undefined);\n }\n }\n\n private async appendFile(filePath: string, line: string): Promise<void> {\n let handle: import(\"node:fs/promises\").FileHandle | undefined;\n try {\n handle = await fs.open(\n filePath,\n fsConstants.O_WRONLY | fsConstants.O_CREAT | fsConstants.O_APPEND | fsConstants.O_NOFOLLOW,\n 0o600\n );\n const info = await handle.stat();\n if (!info.isFile()) {\n throw new RelayMissionStoreError(\"unsafe_path\", \"Relay mission path is not a file\");\n }\n if (info.nlink !== 1) {\n throw new RelayMissionStoreError(\"unsafe_path\", \"Relay mission hard links are rejected\");\n }\n await handle.chmod(0o600);\n await handle.writeFile(line, \"utf8\");\n await handle.sync();\n } catch (error) {\n if (error instanceof RelayMissionStoreError) throw error;\n if ((error as NodeJS.ErrnoException).code === \"ELOOP\") {\n throw new RelayMissionStoreError(\"unsafe_path\", \"Relay mission symlink is rejected\", {\n cause: error,\n });\n }\n throw new RelayMissionStoreError(\"write_failed\", \"failed to append Relay mission\", {\n cause: error,\n });\n } finally {\n await handle?.close().catch(() => undefined);\n }\n }\n}\n\ninterface ReduceRelayMissionInput {\n missionId: string;\n namespace: string;\n events: RelayMissionEvent[];\n corruptLines?: number;\n fileExists?: boolean;\n options?: RelayMissionReadOptions;\n}\n\nexport function reduceRelayMission(input: ReduceRelayMissionInput): RelayMissionSnapshot {\n const missionId = RelayMissionIdSchema.parse(input.missionId);\n const namespace = namespaceSchema.parse(input.namespace);\n const options = RelayMissionReadOptionsSchema.parse(input.options ?? {});\n const corruptLines = input.corruptLines ?? 0;\n const sinceMs = options.since ? Date.parse(options.since) : undefined;\n const untilMs = options.until ? Date.parse(options.until) : undefined;\n const appendPositions = new Map(input.events.map((event, index) => [event, index] as const));\n const orderedEvents = [...input.events].sort(compareRelayEvents);\n const firstStartEvent = input.events.find((event) => event.payload.kind === \"mission_started\");\n const firstCompletionEvent = input.events.find((event) => event.payload.kind === \"mission_completed\");\n const firstStartPosition = firstStartEvent === undefined ? -1 : (appendPositions.get(firstStartEvent) ?? -1);\n const firstCompletionPosition =\n firstCompletionEvent === undefined ? -1 : (appendPositions.get(firstCompletionEvent) ?? -1);\n const filteredEvents = orderedEvents.filter((event) => {\n const occurredAt = Date.parse(event.occurredAt);\n return (sinceMs === undefined || occurredAt >= sinceMs) && (untilMs === undefined || occurredAt < untilMs);\n });\n\n const agents = new Map<string, RelayAgentSnapshot>();\n const decisions = new Map<string, RelayDecisionSnapshot>();\n const conflicts = new Map<string, RelayConflictSnapshot>();\n const corrections = new Map<string, RelayCorrectionSnapshot>();\n const tests: RelayTestSnapshot[] = [];\n const propagation: RelayPropagationSnapshot[] = [];\n const beliefAppendPositions = new Map<string, number>();\n const conflictAppendPositions = new Map<string, number>();\n const correctionProposalAppendPositions = new Map<string, number>();\n const correctionApprovalAppendPositions = new Map<string, number>();\n const correctionAppliedAppendPositions = new Map<string, number>();\n const recallAppendPositions = new Map<RelayRecallSnapshot, number>();\n const propagationAppendPositions = new Map<RelayPropagationSnapshot, number>();\n const testAppendPositions = new Map<RelayTestSnapshot, number>();\n const missingEvidence = new Set<string>();\n if (corruptLines > 0) missingEvidence.add(\"mission:corrupt-events\");\n const substantiveAgentIds = new Set<string>();\n const substantiveSessionIds = new Set<string>();\n const conflictDisagreementIds = new Set<string>();\n const groundedCorrectionIds = new Set<string>();\n let title: string | null = null;\n let objective: string | null = null;\n let runMode: \"live\" | \"replay\" | \"fixture\" | null = null;\n let startedAt: string | null = null;\n let completedAt: string | null = null;\n let status: RelayMissionStatus = \"not_started\";\n let outcome: RelayMissionSnapshot[\"outcome\"] = null;\n\n const ensureAgent = (agentId: string, sessionId: string, occurredAt: string): RelayAgentSnapshot => {\n const existing = agents.get(agentId);\n if (existing) {\n if (!existing.sessionIds.includes(sessionId)) existing.sessionIds.push(sessionId);\n existing.lastSeenAt = occurredAt;\n return existing;\n }\n const created: RelayAgentSnapshot = {\n agentId,\n label: agentId,\n role: \"Codex agent\",\n status: \"working\",\n sessionIds: [sessionId],\n outputs: [],\n recalls: [],\n lastSeenAt: occurredAt,\n };\n agents.set(agentId, created);\n return created;\n };\n\n const markSubstantiveParticipation = (agentId: string, sessionId?: string): void => {\n substantiveAgentIds.add(agentId);\n if (sessionId) substantiveSessionIds.add(sessionId);\n };\n\n for (const event of orderedEvents) {\n const payload = event.payload;\n const appendPosition = appendPositions.get(event) ?? -1;\n if (\n payload.kind !== \"mission_started\" &&\n firstStartEvent !== undefined &&\n (appendPosition < firstStartPosition || compareRelayEvents(event, firstStartEvent) < 0)\n ) {\n missingEvidence.add(`mission:event-before-start:${event.eventId}`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n continue;\n }\n if (\n payload.kind !== \"mission_completed\" &&\n (outcome !== null || (firstCompletionPosition >= 0 && appendPosition > firstCompletionPosition))\n ) {\n missingEvidence.add(`mission:event-after-completion:${event.eventId}`);\n if (payload.kind === \"mission_started\") missingEvidence.add(\"mission:lifecycle-order\");\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n continue;\n }\n switch (payload.kind) {\n case \"mission_started\":\n if (startedAt !== null) {\n missingEvidence.add(\"mission:duplicate-start\");\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n title = payload.title;\n objective = payload.objective;\n runMode = payload.runMode;\n startedAt = event.occurredAt;\n if (outcome === null) status = \"active\";\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n case \"agent_status\": {\n const agent = ensureAgent(payload.agentId, payload.sessionId, event.occurredAt);\n markSubstantiveParticipation(payload.agentId, payload.sessionId);\n agent.label = payload.label;\n agent.role = payload.role;\n agent.status = payload.status;\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"agent_output\": {\n const agent = ensureAgent(payload.agentId, payload.sessionId, event.occurredAt);\n markSubstantiveParticipation(payload.agentId, payload.sessionId);\n agent.outputs.push({\n outputId: payload.outputId,\n summary: payload.summary,\n occurredAt: event.occurredAt,\n evidence: payload.evidence,\n });\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"belief_observed\": {\n ensureAgent(payload.agentId, payload.sessionId, event.occurredAt);\n markSubstantiveParticipation(payload.agentId, payload.sessionId);\n recordEarliestAppendPosition(\n beliefAppendPositions,\n beliefAppendPositionKey(payload.agentId, payload.decisionId),\n appendPosition\n );\n const existing = decisions.get(payload.decisionId);\n if (existing) {\n if (!decisionStatementsMatch(existing.statement, payload.statement)) {\n missingEvidence.add(`decision:${payload.decisionId}:statement-consistency`);\n }\n if (!existing.heldByAgentIds.includes(payload.agentId)) {\n existing.heldByAgentIds.push(payload.agentId);\n }\n if (!existing.beliefIds.includes(payload.beliefId)) existing.beliefIds.push(payload.beliefId);\n existing.evidence.push(...payload.evidence);\n } else {\n decisions.set(payload.decisionId, {\n decisionId: payload.decisionId,\n statement: payload.statement,\n status: \"active\",\n heldByAgentIds: [payload.agentId],\n beliefIds: [payload.beliefId],\n evidence: [...payload.evidence],\n firstObservedAt: event.occurredAt,\n });\n }\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"conflict_detected\": {\n recordEarliestAppendPosition(conflictAppendPositions, payload.conflictId, appendPosition);\n const normalizedDecisionStatements = payload.decisionIds\n .map((decisionId) => decisions.get(decisionId)?.statement)\n .filter((statement): statement is string => statement !== undefined)\n .map(normalizeDecisionStatement);\n if (\n normalizedDecisionStatements.length !== payload.decisionIds.length ||\n new Set(normalizedDecisionStatements).size < 2\n ) {\n missingEvidence.add(`conflict:${payload.conflictId}:distinct-decision-statements`);\n } else {\n conflictDisagreementIds.add(payload.conflictId);\n }\n const participantHoldings = payload.agentIds.map((agentId) => ({\n agentId,\n decisionIds: uniqueSorted(\n payload.decisionIds.filter((decisionId) => decisions.get(decisionId)?.heldByAgentIds.includes(agentId))\n ),\n }));\n for (const participant of participantHoldings) {\n if (participant.decisionIds.length === 0) {\n missingEvidence.add(`conflict:${payload.conflictId}:participant:${participant.agentId}:decision-link`);\n }\n }\n for (const decisionId of payload.decisionIds) {\n if (!participantHoldings.some((participant) => participant.decisionIds.includes(decisionId))) {\n missingEvidence.add(`conflict:${payload.conflictId}:decision:${decisionId}:participant-link`);\n }\n if (\n !payload.agentIds.some(\n (agentId) =>\n (beliefAppendPositions.get(beliefAppendPositionKey(agentId, decisionId)) ?? Number.POSITIVE_INFINITY) <\n appendPosition\n )\n ) {\n missingEvidence.add(`conflict:${payload.conflictId}:decision:${decisionId}:append-order`);\n }\n }\n for (const agentId of payload.agentIds) {\n if (\n !payload.decisionIds.some(\n (decisionId) =>\n (beliefAppendPositions.get(beliefAppendPositionKey(agentId, decisionId)) ?? Number.POSITIVE_INFINITY) <\n appendPosition\n )\n ) {\n missingEvidence.add(`conflict:${payload.conflictId}:participant:${agentId}:append-order`);\n }\n }\n if (\n participantHoldings.every((participant) => participant.decisionIds.length > 0) &&\n new Set(participantHoldings.map((participant) => participant.decisionIds.join(\"\\0\"))).size < 2\n ) {\n missingEvidence.add(`conflict:${payload.conflictId}:distinct-participant-beliefs`);\n }\n if (conflicts.has(payload.conflictId)) {\n missingEvidence.add(`conflict:${payload.conflictId}:duplicate`);\n } else {\n conflicts.set(payload.conflictId, {\n conflictId: payload.conflictId,\n decisionIds: uniqueSorted(payload.decisionIds),\n agentIds: uniqueSorted(payload.agentIds),\n summary: payload.summary,\n status: \"open\",\n occurredAt: event.occurredAt,\n evidence: payload.evidence,\n });\n }\n for (const agentId of payload.agentIds) substantiveAgentIds.add(agentId);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"test_result\": {\n const testSnapshot: RelayTestSnapshot = {\n testId: payload.testId,\n decisionId: payload.decisionId,\n ...(payload.correctionId === undefined ? {} : { correctionId: payload.correctionId }),\n command: payload.command,\n status: payload.status,\n summary: payload.summary,\n ...(payload.durationMs === undefined ? {} : { durationMs: payload.durationMs }),\n occurredAt: event.occurredAt,\n evidence: payload.evidence,\n };\n tests.push(testSnapshot);\n testAppendPositions.set(testSnapshot, appendPosition);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"correction_proposed\": {\n if (corrections.has(payload.correctionId)) {\n missingEvidence.add(`correction:${payload.correctionId}:duplicate-proposal`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n substantiveAgentIds.add(payload.proposedBy);\n const correction: RelayCorrectionSnapshot = {\n correctionId: payload.correctionId,\n conflictId: payload.conflictId,\n proposedDecisionId: payload.proposedDecisionId,\n supersedesDecisionIds: uniqueSorted(payload.supersedesDecisionIds),\n statement: payload.statement,\n rationale: payload.rationale,\n proposedBy: payload.proposedBy,\n status: \"proposed\",\n proposedAt: event.occurredAt,\n evidence: [...payload.evidence],\n };\n corrections.set(payload.correctionId, correction);\n correctionProposalAppendPositions.set(payload.correctionId, appendPosition);\n const existingProposedDecision = decisions.get(payload.proposedDecisionId);\n const replacementStatementMatches =\n existingProposedDecision === undefined ||\n decisionStatementsMatch(existingProposedDecision.statement, payload.statement);\n if (!replacementStatementMatches) {\n missingEvidence.add(`correction:${payload.correctionId}:replacement-statement`);\n }\n if (existingProposedDecision === undefined) {\n decisions.set(payload.proposedDecisionId, {\n decisionId: payload.proposedDecisionId,\n statement: payload.statement,\n status: \"proposed\",\n heldByAgentIds: [],\n beliefIds: [],\n evidence: [...payload.evidence],\n firstObservedAt: event.occurredAt,\n });\n }\n const conflict = conflicts.get(payload.conflictId);\n const conflictAppendPosition = conflictAppendPositions.get(payload.conflictId);\n const conflictPredatesProposal =\n conflictAppendPosition !== undefined && conflictAppendPosition < appendPosition;\n if (!conflictPredatesProposal) {\n missingEvidence.add(`correction:${payload.correctionId}:conflict-append-order`);\n }\n const correctionSourceIds = sourceEvidenceIds(payload.evidence);\n if (correctionSourceIds.size === 0) {\n missingEvidence.add(`correction:${payload.correctionId}:source`);\n }\n if (conflict) {\n const conflictSourceIds = sourceEvidenceIds(conflict.evidence);\n if (conflictSourceIds.size === 0) {\n missingEvidence.add(`conflict:${payload.conflictId}:source`);\n }\n const sourceLinked = [...correctionSourceIds].some((sourceId) => conflictSourceIds.has(sourceId));\n if (!sourceLinked) {\n missingEvidence.add(`correction:${payload.correctionId}:source-link`);\n }\n if (!correctionCoversConflict(correction, conflict)) {\n missingEvidence.add(`conflict:${payload.conflictId}:decision-link`);\n } else if (\n sourceLinked &&\n conflictPredatesProposal &&\n conflictDisagreementIds.has(payload.conflictId) &&\n replacementStatementMatches\n ) {\n groundedCorrectionIds.add(payload.correctionId);\n conflict.status = \"proposed\";\n conflict.correctionId = payload.correctionId;\n }\n } else {\n missingEvidence.add(`conflict:${payload.conflictId}:observation`);\n }\n status = \"awaiting_approval\";\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"correction_approved\": {\n if (payload.approvedBy.kind === \"agent\") substantiveAgentIds.add(payload.approvedBy.id);\n const correction = corrections.get(payload.correctionId);\n if (correction) {\n const proposalAppendPosition = correctionProposalAppendPositions.get(payload.correctionId);\n const proposalPredatesApproval =\n proposalAppendPosition !== undefined && proposalAppendPosition < appendPosition;\n const authenticatedHumanApproval =\n payload.approvedBy.kind !== \"human\" ||\n runMode !== \"live\" ||\n event.authenticatedPrincipal === payload.approvedBy.id;\n if (!proposalPredatesApproval) {\n missingEvidence.add(`correction:${payload.correctionId}:approval-append-order`);\n } else if (!authenticatedHumanApproval) {\n missingEvidence.add(`correction:${payload.correctionId}:authenticated-human-approval`);\n } else if (correction.approvedAt === undefined) {\n correction.approvedAt = event.occurredAt;\n correction.approvedBy = payload.approvedBy;\n correction.approvalNote = payload.note;\n if (event.authenticatedPrincipal !== undefined) {\n correction.approvalPrincipal = event.authenticatedPrincipal;\n }\n correctionApprovalAppendPositions.set(payload.correctionId, appendPosition);\n if (correction.status === \"proposed\") correction.status = \"approved\";\n status = \"correcting\";\n } else {\n missingEvidence.add(`correction:${payload.correctionId}:duplicate-approval`);\n }\n correction.evidence.push(...payload.evidence);\n } else {\n missingEvidence.add(`correction:${payload.correctionId}:proposal`);\n }\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"decision_superseded\": {\n const correction = corrections.get(payload.correctionId);\n if (!correction) {\n missingEvidence.add(`correction:${payload.correctionId}:proposal`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (correction.approvedAt === undefined || correction.approvedBy === undefined) {\n missingEvidence.add(`correction:${payload.correctionId}:approval`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n const approvalAppendPosition = correctionApprovalAppendPositions.get(payload.correctionId);\n if (approvalAppendPosition === undefined || approvalAppendPosition >= appendPosition) {\n missingEvidence.add(`correction:${payload.correctionId}:approval-append-order`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n const conflict = conflicts.get(correction.conflictId);\n if (!conflict || !correctionCoversConflict(correction, conflict)) {\n missingEvidence.add(`conflict:${correction.conflictId}:decision-link`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (!groundedCorrectionIds.has(payload.correctionId)) {\n missingEvidence.add(`correction:${payload.correctionId}:source-link`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (\n !correction.supersedesDecisionIds.includes(payload.decisionId) ||\n correction.proposedDecisionId !== payload.replacementDecisionId\n ) {\n missingEvidence.add(`correction:${payload.correctionId}:supersession-link`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n\n const stale = decisions.get(payload.decisionId);\n const replacement = decisions.get(payload.replacementDecisionId);\n if (!stale) missingEvidence.add(`decision:${payload.decisionId}:observation`);\n if (!replacement) missingEvidence.add(`decision:${payload.replacementDecisionId}:replacement`);\n if (!stale || !replacement) {\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n\n stale.status = \"superseded\";\n stale.supersededAt = event.occurredAt;\n stale.supersededBy = payload.replacementDecisionId;\n stale.correctionId = payload.correctionId;\n stale.evidence.push(...payload.evidence);\n replacement.status = \"active\";\n replacement.evidence.push(...payload.evidence);\n correction.evidence.push(...payload.evidence);\n if (correctionSupersessionComplete(correction, decisions)) {\n correction.appliedAt ??= event.occurredAt;\n recordEarliestAppendPosition(correctionAppliedAppendPositions, payload.correctionId, appendPosition);\n if (correction.status !== \"propagated\") correction.status = \"applied\";\n conflict.status = \"resolved\";\n }\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"recall_observed\": {\n const agent = ensureAgent(payload.agentId, payload.sessionId, event.occurredAt);\n const coldStart =\n !substantiveAgentIds.has(payload.agentId) &&\n !substantiveSessionIds.has(payload.sessionId) &&\n agent.recalls.length === 0;\n const recallSnapshot: RelayRecallSnapshot = {\n recallReceiptId: payload.recallReceiptId,\n sessionId: payload.sessionId,\n decisionId: payload.decisionId,\n query: payload.query,\n capturedAtAction: payload.capturedAtAction,\n coldStart,\n occurredAt: event.occurredAt,\n evidence: payload.evidence,\n };\n agent.recalls.push(recallSnapshot);\n recallAppendPositions.set(recallSnapshot, appendPosition);\n markSubstantiveParticipation(payload.agentId, payload.sessionId);\n const decision = decisions.get(payload.decisionId);\n if (decision && !decision.heldByAgentIds.includes(payload.agentId)) {\n decision.heldByAgentIds.push(payload.agentId);\n }\n if (!decision) missingEvidence.add(`decision:${payload.decisionId}:recall-target`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"propagation_verified\": {\n const agent = ensureAgent(payload.agentId, payload.sessionId, event.occurredAt);\n const correction = corrections.get(payload.correctionId);\n if (!correction) {\n missingEvidence.add(`correction:${payload.correctionId}:proposal`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (correction.approvedAt === undefined || correction.approvedBy === undefined) {\n missingEvidence.add(`correction:${payload.correctionId}:approval`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (\n (correction.status !== \"applied\" && correction.status !== \"propagated\") ||\n correction.appliedAt === undefined ||\n correction.proposedDecisionId !== payload.decisionId\n ) {\n missingEvidence.add(`correction:${payload.correctionId}:supersession`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n const recalled = agent.recalls.find(\n (recall) =>\n recall.recallReceiptId === payload.recallReceiptId &&\n recall.sessionId === payload.sessionId &&\n recall.decisionId === payload.decisionId\n );\n if (!recalled) {\n missingEvidence.add(`recall:${payload.recallReceiptId}:observation`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n const appliedAppendPosition = correctionAppliedAppendPositions.get(payload.correctionId);\n const recallAppendPosition = recallAppendPositions.get(recalled);\n if (\n appliedAppendPosition === undefined ||\n recallAppendPosition === undefined ||\n appliedAppendPosition >= recallAppendPosition\n ) {\n missingEvidence.add(`recall:${payload.recallReceiptId}:post-application-append-order`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (recallAppendPosition >= appendPosition) {\n missingEvidence.add(`recall:${payload.recallReceiptId}:propagation-append-order`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (!recalled.capturedAtAction) {\n missingEvidence.add(`recall:${payload.recallReceiptId}:at-action`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (!recalled.coldStart) {\n missingEvidence.add(`recall:${payload.recallReceiptId}:cold-start`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (compareInstants(correction.appliedAt, recalled.occurredAt) >= 0) {\n missingEvidence.add(`recall:${payload.recallReceiptId}:post-application`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (compareInstants(recalled.occurredAt, event.occurredAt) >= 0) {\n missingEvidence.add(`recall:${payload.recallReceiptId}:propagation-order`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n\n const propagationSnapshot: RelayPropagationSnapshot = {\n correctionId: payload.correctionId,\n agentId: payload.agentId,\n sessionId: payload.sessionId,\n decisionId: payload.decisionId,\n recallReceiptId: payload.recallReceiptId,\n staleDecisionAbsent: payload.staleDecisionAbsent,\n occurredAt: event.occurredAt,\n evidence: payload.evidence,\n };\n propagation.push(propagationSnapshot);\n propagationAppendPositions.set(propagationSnapshot, appendPosition);\n correction.evidence.push(...payload.evidence);\n if (payload.staleDecisionAbsent) {\n correction.status = \"propagated\";\n correction.propagatedAt = event.occurredAt;\n }\n status = payload.staleDecisionAbsent ? \"verified\" : \"correcting\";\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"mission_completed\":\n if (outcome !== null) {\n missingEvidence.add(\"mission:duplicate-completion\");\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (startedAt === null) missingEvidence.add(\"mission:start\");\n outcome = {\n result: payload.outcome,\n summary: payload.summary,\n occurredAt: event.occurredAt,\n evidence: payload.evidence,\n };\n completedAt = event.occurredAt;\n status = payload.outcome === \"failed\" ? \"failed\" : \"completed\";\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n }\n\n for (const conflict of conflicts.values()) {\n if (sourceEvidenceIds(conflict.evidence).size === 0) {\n missingEvidence.add(`conflict:${conflict.conflictId}:source`);\n }\n for (const decisionId of conflict.decisionIds) {\n if (!decisions.has(decisionId)) missingEvidence.add(`decision:${decisionId}:conflict-target`);\n }\n for (const agentId of conflict.agentIds) {\n if (!agents.has(agentId)) missingEvidence.add(`agent:${agentId}:conflict-participant`);\n }\n }\n for (const correction of corrections.values()) {\n if (sourceEvidenceIds(correction.evidence).size === 0) {\n missingEvidence.add(`correction:${correction.correctionId}:source`);\n }\n if (correction.approvedAt === undefined || correction.approvedBy === undefined) {\n missingEvidence.add(`correction:${correction.correctionId}:approval`);\n } else if (correction.approvedBy.kind !== \"human\") {\n missingEvidence.add(`correction:${correction.correctionId}:human-approval`);\n } else if (runMode === \"live\" && correction.approvalPrincipal !== correction.approvedBy.id) {\n missingEvidence.add(`correction:${correction.correctionId}:authenticated-human-approval`);\n }\n if (correction.status === \"approved\" || correction.status === \"proposed\") {\n missingEvidence.add(`correction:${correction.correctionId}:supersession`);\n }\n if (correction.status === \"applied\") {\n missingEvidence.add(`correction:${correction.correctionId}:propagation`);\n }\n }\n\n const liveFixtureEvidenceEventIds =\n runMode === \"live\"\n ? orderedEvents\n .filter((event) => event.payload.evidence.some((item) => item.capture === \"fixture\"))\n .map((event) => event.eventId)\n : [];\n for (const eventId of liveFixtureEvidenceEventIds) {\n missingEvidence.add(`mission:live-fixture-evidence:${eventId}`);\n }\n const captureTrustValid = liveFixtureEvidenceEventIds.length === 0;\n\n const sortedDecisions = [...decisions.values()]\n .map((decision) => ({\n ...decision,\n heldByAgentIds: uniqueSorted(decision.heldByAgentIds),\n beliefIds: uniqueSorted(decision.beliefIds),\n evidence: uniqueEvidence(decision.evidence),\n }))\n .sort((a, b) => compareText(a.decisionId, b.decisionId));\n const coldStartVerified = captureTrustValid && propagation.some((item) => item.staleDecisionAbsent);\n const passingOutcomeVerified =\n captureTrustValid &&\n outcome?.result === \"recovered\" &&\n tests.some((test) => {\n const testAppendPosition = testAppendPositions.get(test);\n if (\n test.status !== \"passed\" ||\n test.correctionId === undefined ||\n testAppendPosition === undefined ||\n firstCompletionPosition < 0 ||\n testAppendPosition >= firstCompletionPosition ||\n compareInstants(test.occurredAt, outcome.occurredAt) >= 0\n ) {\n return false;\n }\n const correction = corrections.get(test.correctionId);\n if (\n correction?.status !== \"propagated\" ||\n correction.proposedDecisionId !== test.decisionId ||\n !test.evidence.some((item) => item.kind === \"correction\" && item.id === correction.correctionId) ||\n !test.evidence.some((item) => item.kind === \"test\")\n ) {\n return false;\n }\n return propagation.some((item) => {\n const propagationAppendPosition = propagationAppendPositions.get(item);\n return (\n item.staleDecisionAbsent &&\n item.correctionId === correction.correctionId &&\n item.decisionId === test.decisionId &&\n propagationAppendPosition !== undefined &&\n propagationAppendPosition < testAppendPosition &&\n compareInstants(item.occurredAt, test.occurredAt) < 0\n );\n });\n });\n if (outcome && !passingOutcomeVerified) missingEvidence.add(\"outcome:passing-test\");\n if (outcome?.result === \"recovered\" && !coldStartVerified) {\n missingEvidence.add(\"outcome:cold-start-propagation\");\n }\n if (input.events.length > 0 && startedAt === null) missingEvidence.add(\"mission:start\");\n if (startedAt !== null && completedAt !== null && compareInstants(startedAt, completedAt) >= 0) {\n missingEvidence.add(\"mission:lifecycle-order\");\n }\n if (\n firstStartEvent !== undefined &&\n firstCompletionEvent !== undefined &&\n (firstStartPosition >= firstCompletionPosition || compareRelayEvents(firstStartEvent, firstCompletionEvent) >= 0)\n ) {\n missingEvidence.add(\"mission:lifecycle-order\");\n }\n\n const eventWindow = filteredEvents.slice(Math.max(0, filteredEvents.length - options.limit));\n // `found` describes whether the mission has any valid persisted evidence,\n // not whether the caller's optional time window happened to select an\n // event. A known mission with an empty [since, until) window is distinct\n // from a mission that has never existed.\n const found = input.events.length > 0;\n return {\n schemaVersion: RELAY_MISSION_SCHEMA_VERSION,\n missionId,\n namespace,\n found,\n readHealth: corruptLines > 0 ? \"partial\" : found || input.fileExists ? \"ok\" : \"empty\",\n status,\n mission: { title, objective, runMode, startedAt, completedAt },\n agents: [...agents.values()]\n .map((agent) => ({\n ...agent,\n sessionIds: uniqueSorted(agent.sessionIds),\n outputs: agent.outputs.sort((a, b) => compareTimedIds(a, b, \"outputId\")),\n recalls: agent.recalls.sort((a, b) => compareTimedIds(a, b, \"recallReceiptId\")),\n }))\n .sort((a, b) => compareText(a.agentId, b.agentId)),\n decisions: sortedDecisions,\n conflicts: [...conflicts.values()].sort((a, b) => compareText(a.conflictId, b.conflictId)),\n corrections: [...corrections.values()]\n .map((correction) => ({ ...correction, evidence: uniqueEvidence(correction.evidence) }))\n .sort((a, b) => compareText(a.correctionId, b.correctionId)),\n tests: tests.sort((a, b) => compareTimedIds(a, b, \"testId\")),\n propagation: propagation.sort((a, b) => {\n const byTime = compareInstants(a.occurredAt, b.occurredAt);\n if (byTime !== 0) return byTime;\n const byAgent = compareText(a.agentId, b.agentId);\n return byAgent !== 0 ? byAgent : compareText(a.recallReceiptId, b.recallReceiptId);\n }),\n outcome,\n receipt: {\n complete:\n status === \"completed\" &&\n outcome?.result === \"recovered\" &&\n passingOutcomeVerified &&\n coldStartVerified &&\n missingEvidence.size === 0,\n missingEvidence: [...missingEvidence].sort(compareText),\n activeDecisionIds: sortedDecisions\n .filter((decision) => decision.status === \"active\")\n .map((decision) => decision.decisionId),\n supersededDecisionIds: sortedDecisions\n .filter((decision) => decision.status === \"superseded\")\n .map((decision) => decision.decisionId),\n coldStartVerified,\n passingOutcomeVerified,\n },\n bounds: {\n totalEvents: filteredEvents.length,\n returnedEvents: eventWindow.length,\n corruptLines,\n truncated: filteredEvents.length > eventWindow.length,\n since: options.since ?? null,\n until: options.until ?? null,\n },\n events: eventWindow,\n };\n}\n\nexport function compareRelayEvents(a: RelayMissionEvent, b: RelayMissionEvent): number {\n const byOccurrence = compareInstants(a.occurredAt, b.occurredAt);\n if (byOccurrence !== 0) return byOccurrence;\n const byRecord = compareInstants(a.recordedAt, b.recordedAt);\n if (byRecord !== 0) return byRecord;\n return compareText(a.eventId, b.eventId);\n}\n\nfunction parseMissionJsonl(\n raw: string,\n missionId: string,\n namespace: string,\n maxEvents: number\n): Pick<MissionFileRead, \"events\" | \"corruptLines\"> {\n const events: RelayMissionEvent[] = [];\n let corruptLines = 0;\n for (const line of raw.split(\"\\n\")) {\n if (line.trim().length === 0) continue;\n if (Buffer.byteLength(line, \"utf8\") > RELAY_MISSION_MAX_LINE_BYTES) {\n corruptLines += 1;\n continue;\n }\n let candidate: unknown;\n try {\n candidate = JSON.parse(line);\n } catch {\n corruptLines += 1;\n continue;\n }\n const parsed = RelayMissionEventSchema.safeParse(candidate);\n if (!parsed.success || parsed.data.missionId !== missionId || parsed.data.namespace !== namespace) {\n corruptLines += 1;\n continue;\n }\n if (events.length >= maxEvents) {\n throw new RelayMissionStoreError(\n \"limit_exceeded\",\n `mission ${missionId} exceeds the ${maxEvents}-event read limit`\n );\n }\n events.push(parsed.data);\n }\n return { events, corruptLines };\n}\n\nfunction collectMissingEvidence(missing: Set<string>, event: RelayMissionEvent, evidence: RelayEvidenceRef[]): void {\n if (evidence.length === 0) missing.add(`event:${event.eventId}:evidence`);\n}\n\nfunction sameIdempotentInput(\n event: RelayMissionEvent,\n input: z.infer<typeof RelayMissionEventInputSchema>,\n authenticatedPrincipal: string | undefined\n): boolean {\n if (event.authenticatedPrincipal !== authenticatedPrincipal) return false;\n if (input.occurredAt !== undefined && event.occurredAt !== input.occurredAt) return false;\n return stableJson(event.payload) === stableJson(input.payload);\n}\n\nfunction stableJson(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(stableJson).join(\",\")}]`;\n if (value && typeof value === \"object\") {\n const entries = Object.entries(value as Record<string, unknown>)\n .sort(([a], [b]) => compareText(a, b))\n .map(([key, child]) => `${JSON.stringify(key)}:${stableJson(child)}`);\n return `{${entries.join(\",\")}}`;\n }\n return JSON.stringify(value) ?? \"null\";\n}\n\nfunction uniqueEvidence(evidence: RelayEvidenceRef[]): RelayEvidenceRef[] {\n const byKey = new Map<string, RelayEvidenceRef>();\n for (const item of evidence) byKey.set(`${item.kind}\\0${item.id}`, item);\n return [...byKey.values()].sort((a, b) => {\n const byKind = compareText(a.kind, b.kind);\n return byKind !== 0 ? byKind : compareText(a.id, b.id);\n });\n}\n\nfunction uniqueSorted(values: string[]): string[] {\n return [...new Set(values)].sort(compareText);\n}\n\nfunction compareText(a: string, b: string): number {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n}\n\nfunction compareInstants(a: string, b: string): number {\n const aMs = Date.parse(a);\n const bMs = Date.parse(b);\n if (aMs < bMs) return -1;\n if (aMs > bMs) return 1;\n return 0;\n}\n\nfunction compareTimedIds<T extends { occurredAt: string }, K extends keyof T>(a: T, b: T, idKey: K): number {\n const byTime = compareInstants(a.occurredAt, b.occurredAt);\n if (byTime !== 0) return byTime;\n return compareText(String(a[idKey]), String(b[idKey]));\n}\n\nfunction beliefAppendPositionKey(agentId: string, decisionId: string): string {\n return `${agentId}\\0${decisionId}`;\n}\n\nfunction normalizeDecisionStatement(statement: string): string {\n return statement\n .normalize(\"NFKC\")\n .trim()\n .toLowerCase()\n .replace(/\\s+/g, \" \")\n .replace(/[.!?]+$/, \"\");\n}\n\nfunction decisionStatementsMatch(left: string, right: string): boolean {\n return normalizeDecisionStatement(left) === normalizeDecisionStatement(right);\n}\n\nfunction recordEarliestAppendPosition(positions: Map<string, number>, key: string, position: number): void {\n const current = positions.get(key);\n if (current === undefined || position < current) positions.set(key, position);\n}\n\nfunction correctionSupersessionComplete(\n correction: RelayCorrectionSnapshot,\n decisions: ReadonlyMap<string, RelayDecisionSnapshot>\n): boolean {\n return correction.supersedesDecisionIds.every((decisionId) => {\n const decision = decisions.get(decisionId);\n return (\n decision?.status === \"superseded\" &&\n decision.supersededBy === correction.proposedDecisionId &&\n decision.correctionId === correction.correctionId\n );\n });\n}\n\nfunction correctionCoversConflict(\n correction: Pick<RelayCorrectionSnapshot, \"proposedDecisionId\" | \"supersedesDecisionIds\">,\n conflict: Pick<RelayConflictSnapshot, \"decisionIds\">\n): boolean {\n const expectedSuperseded = uniqueSorted(\n conflict.decisionIds.filter((decisionId) => decisionId !== correction.proposedDecisionId)\n );\n const declaredSuperseded = uniqueSorted(correction.supersedesDecisionIds);\n return (\n expectedSuperseded.length === declaredSuperseded.length &&\n expectedSuperseded.every((decisionId, index) => decisionId === declaredSuperseded[index])\n );\n}\n\nfunction sourceEvidenceIds(evidence: readonly RelayEvidenceRef[]): Set<string> {\n return new Set(evidence.filter((item) => item.kind === \"source\").map((item) => item.id));\n}\n\nfunction positiveIntegerOption(value: number | undefined, name: string, fallback: number): number {\n if (value === undefined) return fallback;\n if (!Number.isInteger(value) || value <= 0) {\n throw new TypeError(`RelayMissionStore ${name} must be a positive integer`);\n }\n return value;\n}\n\nfunction validNow(now: () => Date): string {\n const value = now();\n if (!(value instanceof Date) || !Number.isFinite(value.getTime())) {\n throw new TypeError(\"RelayMissionStore now() must return a valid Date\");\n }\n return value.toISOString();\n}\n\nasync function openOrCreatePinnedChildDirectory(\n parentHandle: import(\"node:fs/promises\").FileHandle,\n segment: string\n): Promise<import(\"node:fs/promises\").FileHandle> {\n const directory = path.join(pinnedDirectoryPath(parentHandle), segment);\n try {\n await fs.mkdir(directory, { mode: 0o700 });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"EEXIST\") throw error;\n }\n return openVerifiedDirectory(directory, \"Relay directory symlinks are rejected\");\n}\n\nasync function openVerifiedDirectory(\n directory: string,\n unsafeMessage: string\n): Promise<import(\"node:fs/promises\").FileHandle> {\n const before = await fs.lstat(directory);\n if (before.isSymbolicLink() || !before.isDirectory()) {\n throw new RelayMissionStoreError(\"unsafe_path\", unsafeMessage);\n }\n const handle = await fs.open(directory, fsConstants.O_RDONLY | fsConstants.O_DIRECTORY | fsConstants.O_NOFOLLOW);\n try {\n const openInfo = await handle.stat();\n const after = await fs.lstat(directory);\n if (\n after.isSymbolicLink() ||\n !after.isDirectory() ||\n before.dev !== openInfo.dev ||\n before.ino !== openInfo.ino ||\n after.dev !== openInfo.dev ||\n after.ino !== openInfo.ino\n ) {\n throw new RelayMissionStoreError(\"unsafe_path\", \"Relay directory changed during validation\");\n }\n return handle;\n } catch (error) {\n await handle.close().catch(() => undefined);\n throw error;\n }\n}\n\nfunction pinnedDirectoryPath(handle: import(\"node:fs/promises\").FileHandle): string {\n if (process.platform === \"linux\") return `/proc/self/fd/${handle.fd}`;\n if (process.platform === \"darwin\" || process.platform === \"freebsd\" || process.platform === \"openbsd\") {\n return `/dev/fd/${handle.fd}`;\n }\n throw new RelayMissionStoreError(\n \"unsafe_path\",\n `Relay pinned directory access is unsupported on ${process.platform}`\n );\n}\n\nexport function relayMissionReceiptDigest(snapshot: RelayMissionSnapshot): string {\n const receipt = {\n schemaVersion: snapshot.schemaVersion,\n missionId: snapshot.missionId,\n namespace: snapshot.namespace,\n status: snapshot.status,\n decisions: snapshot.decisions,\n corrections: snapshot.corrections,\n propagation: snapshot.propagation,\n tests: snapshot.tests,\n outcome: snapshot.outcome,\n receipt: snapshot.receipt,\n };\n return createHash(\"sha256\").update(stableJson(receipt)).digest(\"hex\");\n}\n"],"mappings":"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","names":["z","z","event","namespaceSchema","z","z"]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  resolveDefaultNamespaceRoot,
3
3
  resolveNamespaceStorageRoot
4
- } from "./chunk-U4KHQTJ6.js";
4
+ } from "./chunk-2AL7N3BH.js";
5
5
  import {
6
6
  getConfiguredNamespaces
7
7
  } from "./chunk-7PND4PUC.js";
@@ -41,6 +41,7 @@ import {
41
41
  stat,
42
42
  writeFile
43
43
  } from "fs/promises";
44
+ import { StringDecoder } from "string_decoder";
44
45
  var NAMESPACE_KINDS = [
45
46
  "default",
46
47
  "self",
@@ -241,6 +242,9 @@ var NamespaceCatalog = class {
241
242
  this.catalogPath = path.join(this.stateDir, CATALOG_FILE);
242
243
  this.rebuildLockPath = path.join(this.stateDir, REBUILD_LOCK_FILE);
243
244
  this.defaultNamespaceIdentity = normalizeNamespaceIdentity(config.defaultNamespace);
245
+ this.compactBytesLimit = config.namespacesCatalogCompactBytes ?? 16 * 1024 * 1024;
246
+ this.readCoalesceMs = config.namespacesCatalogReadTouchCoalesceMs ?? 6e4;
247
+ this.writeCoalesceMs = config.namespacesCatalogWriteTouchCoalesceMs ?? 1e3;
244
248
  }
245
249
  config;
246
250
  memoryDir;
@@ -299,6 +303,26 @@ var NamespaceCatalog = class {
299
303
  // misclassified, dropped at read time, or given the wrong storage root. Compare
300
304
  // against this normalized form everywhere instead.
301
305
  defaultNamespaceIdentity;
306
+ // Issue #1903 — touch-path performance knobs, resolved with the documented
307
+ // defaults when an externally-built PluginConfig omits them (so a partial
308
+ // config object still yields the production behavior). `0` is a real disable
309
+ // switch for each and is preserved by `??` (0 is not null/undefined).
310
+ compactBytesLimit;
311
+ readCoalesceMs;
312
+ writeCoalesceMs;
313
+ // Size after the most recent auto-compaction (0 = none yet). Hysteresis for
314
+ // maybeAutoCompact: a folded catalog that is itself above the limit (many
315
+ // distinct namespaces) would otherwise be re-folded + re-rewritten on every
316
+ // touch. We only compact again once the log has grown by >= one limit-worth
317
+ // since the last compaction (#1903, Codex).
318
+ lastCompactedSize = 0;
319
+ // Issue #1903 — per-(namespace, kind) coalescing buffer. Keyed `${kind}:${ns}`.
320
+ // Holds the latest buffered timestamp/metadata for a pure-timestamp touch on
321
+ // an already-known record; a `.unref()`'d timer flushes it once per window so
322
+ // the append-only log does not grow one line per repeat touch. Semantically
323
+ // observable touches (first sight, provenance/field change) bypass this buffer
324
+ // and flush immediately (see `coalesceTouch`).
325
+ pendingTouches = /* @__PURE__ */ new Map();
302
326
  /** Whether the catalog is active (namespaces enabled and catalog not opted out). */
303
327
  get enabled() {
304
328
  return isCatalogEnabled(this.config);
@@ -421,10 +445,102 @@ var NamespaceCatalog = class {
421
445
  }
422
446
  // ── Touch API (cheap, failure-tolerant) ─────────────────────────────────
423
447
  async markRead(namespace, metadata) {
424
- await this.touch(namespace, "read", metadata);
448
+ await this.coalesceTouch(namespace, "read", metadata);
425
449
  }
426
450
  async markWrite(namespace, metadata) {
427
- await this.touch(namespace, "write", metadata);
451
+ await this.coalesceTouch(namespace, "write", metadata);
452
+ }
453
+ /**
454
+ * Route a read/write touch through the per-(namespace, kind) coalescing buffer
455
+ * (issue #1903). A touch flushes IMMEDIATELY (bypassing the buffer) whenever it
456
+ * is semantically observable to an in-process reader — first sight of the
457
+ * namespace, a `config`→`write` provenance upgrade, the first time a touch
458
+ * field is set (so `listNamespaces({ writtenSince })` and record presence stay
459
+ * correct), or a change to `kind`/`principal`/`projectId`/`branch`/
460
+ * `parentNamespace`. A pure timestamp refresh on an already-known record is
461
+ * DEFERRED and coalesced: the newest buffered `at`/metadata wins and a single
462
+ * `touch` runs when the window elapses (or on `flushPendingTouches`). Window
463
+ * `0` skips the buffer entirely (the pre-#1903 immediate-append behavior).
464
+ * Best-effort: coalescing decisions read only the warm `compactedCache`, never
465
+ * forcing a disk parse; a cold cache flushes immediately (and re-warms it).
466
+ */
467
+ async coalesceTouch(namespace, kind, metadata) {
468
+ if (!this.enabled) return;
469
+ const window = kind === "read" ? this.readCoalesceMs : this.writeCoalesceMs;
470
+ if (window <= 0) {
471
+ await this.touch(namespace, kind, metadata);
472
+ return;
473
+ }
474
+ const ns = this.validateNamespace(namespace);
475
+ const cached = this.compactedCache?.records.get(ns);
476
+ if (cached === void 0 || this.touchMustFlushImmediately(kind, metadata, cached)) {
477
+ const stale = this.pendingTouches.get(`${kind}:${ns}`);
478
+ if (stale) {
479
+ clearTimeout(stale.timer);
480
+ this.pendingTouches.delete(`${kind}:${ns}`);
481
+ }
482
+ await this.touch(namespace, kind, metadata);
483
+ return;
484
+ }
485
+ const key = `${kind}:${ns}`;
486
+ const at = metadata?.at ?? /* @__PURE__ */ new Date();
487
+ const existing = this.pendingTouches.get(key);
488
+ if (existing) {
489
+ existing.metadata = metadata;
490
+ existing.at = at;
491
+ return;
492
+ }
493
+ const safeWindow = Math.min(window, 2147483647);
494
+ const timer = setTimeout(() => {
495
+ void this.flushPendingTouch(key);
496
+ }, safeWindow);
497
+ timer.unref();
498
+ this.pendingTouches.set(key, { namespace: ns, kind, metadata, at, timer });
499
+ }
500
+ /**
501
+ * Whether a read/write touch on an EXISTING cached record must flush
502
+ * immediately rather than coalesce. Only pure timestamp refreshes (the value
503
+ * returns false) are safe to defer.
504
+ */
505
+ touchMustFlushImmediately(kind, metadata, cached) {
506
+ if (kind === "write" && cached.discoveredBy === "config") return true;
507
+ if (kind === "write" && cached.lastWriteAt === void 0) return true;
508
+ if (kind === "read" && cached.lastReadAt === void 0) return true;
509
+ if (!metadata) return false;
510
+ if (metadata.kind !== void 0 && metadata.kind !== cached.kind) return true;
511
+ if (metadata.principal !== void 0 && metadata.principal !== cached.principal) return true;
512
+ if (metadata.projectId !== void 0 && metadata.projectId !== cached.projectId) return true;
513
+ if (metadata.branch !== void 0 && metadata.branch !== cached.branch) return true;
514
+ if (metadata.parentNamespace !== void 0 && metadata.parentNamespace !== cached.parentNamespace) {
515
+ return true;
516
+ }
517
+ if (metadata.storageDir !== void 0 && metadata.storageDir !== cached.storageDir) return true;
518
+ return false;
519
+ }
520
+ /** Fire a single buffered touch when its coalescing window elapses. */
521
+ async flushPendingTouch(key) {
522
+ const pending = this.pendingTouches.get(key);
523
+ if (!pending) return;
524
+ this.pendingTouches.delete(key);
525
+ clearTimeout(pending.timer);
526
+ await this.touch(pending.namespace, pending.kind, { ...pending.metadata, at: pending.at }).catch(
527
+ () => void 0
528
+ );
529
+ }
530
+ /**
531
+ * Flush every buffered coalesced touch now (issue #1903). Called from the
532
+ * router/orchestrator shutdown hook so a long-lived host does not drop
533
+ * buffered read/write timestamps on teardown, and by tests to make coalesced
534
+ * touches deterministically observable. Best-effort: a failed flush never
535
+ * throws (each touch is `.catch()`-guarded).
536
+ */
537
+ async flushPendingTouches() {
538
+ const pending = [...this.pendingTouches.values()];
539
+ this.pendingTouches.clear();
540
+ for (const p of pending) {
541
+ clearTimeout(p.timer);
542
+ await this.touch(p.namespace, p.kind, { ...p.metadata, at: p.at }).catch(() => void 0);
543
+ }
428
544
  }
429
545
  async markMaintenance(namespace, jobName, at) {
430
546
  if (typeof jobName !== "string" || jobName.trim().length === 0) {
@@ -830,10 +946,34 @@ var NamespaceCatalog = class {
830
946
  record.lastMaintenanceAt = { ...record.lastMaintenanceAt ?? {}, [jobName]: nowIso };
831
947
  }
832
948
  await this.appendUnchained(record);
949
+ await this.maybeAutoCompact();
833
950
  return true;
834
951
  })
835
952
  );
836
953
  }
954
+ /**
955
+ * Fold-and-rewrite the JSONL log when it exceeds `compactBytesLimit`
956
+ * (issue #1903). MUST be called only from inside `touch`'s held-lock +
957
+ * `queueCritical` critical section — it reuses `loadCompacted` (last-record-
958
+ * wins fold; every namespace row survives) and `rewriteUnchained` (atomic
959
+ * temp-file + rename), so the collapse is cross-process safe and never
960
+ * invokes the disk-scan purge in `finishRebuild`. Best-effort and fail-open
961
+ * (rule #40): the append already succeeded and is durable, so a failed
962
+ * compaction must not fail the touch — the next over-limit touch retries.
963
+ */
964
+ async maybeAutoCompact() {
965
+ try {
966
+ const limit = this.compactBytesLimit;
967
+ if (limit <= 0) return;
968
+ const size = this.compactedCache?.identity.size;
969
+ if (size === void 0 || size <= limit) return;
970
+ if (this.lastCompactedSize > 0 && size - this.lastCompactedSize < limit) return;
971
+ const folded = await this.loadCompacted();
972
+ await this.rewriteUnchained([...folded.values()]);
973
+ this.lastCompactedSize = this.compactedCache?.identity.size ?? size;
974
+ } catch {
975
+ }
976
+ }
837
977
  // ── Rebuild from disk ────────────────────────────────────────────────────
838
978
  async rebuildFromDisk(options) {
839
979
  const dryRun = options?.dryRun === true;
@@ -1204,21 +1344,43 @@ var NamespaceCatalog = class {
1204
1344
  }
1205
1345
  try {
1206
1346
  this.onCatalogReadForTest?.();
1207
- const raw = await handle.readFile("utf8");
1208
- for (const line of raw.split("\n")) {
1347
+ const CHUNK_BYTES = 1 << 16;
1348
+ const YIELD_EVERY_LINES = 5e3;
1349
+ const chunk = Buffer.allocUnsafe(CHUNK_BYTES);
1350
+ const decoder = new StringDecoder("utf8");
1351
+ let leftover = "";
1352
+ let linesSinceYield = 0;
1353
+ const foldLine = (line) => {
1209
1354
  const trimmed = line.trim();
1210
- if (trimmed.length === 0) continue;
1355
+ if (trimmed.length === 0) return;
1211
1356
  let parsed;
1212
1357
  try {
1213
1358
  parsed = JSON.parse(trimmed);
1214
1359
  } catch {
1215
- continue;
1360
+ return;
1216
1361
  }
1217
1362
  const record = coerceRecord(parsed);
1218
- if (!record) continue;
1363
+ if (!record) return;
1219
1364
  const prior = records.get(record.namespace);
1220
1365
  records.set(record.namespace, prior ? mergeNewerTouchFields(record, prior) : record);
1366
+ };
1367
+ for (; ; ) {
1368
+ const { bytesRead } = await handle.read(chunk, 0, CHUNK_BYTES, null);
1369
+ if (bytesRead === 0) break;
1370
+ leftover += decoder.write(chunk.subarray(0, bytesRead));
1371
+ let newlineIndex = leftover.indexOf("\n");
1372
+ while (newlineIndex !== -1) {
1373
+ foldLine(leftover.slice(0, newlineIndex));
1374
+ leftover = leftover.slice(newlineIndex + 1);
1375
+ if (++linesSinceYield >= YIELD_EVERY_LINES) {
1376
+ linesSinceYield = 0;
1377
+ await new Promise((resolve) => setImmediate(resolve));
1378
+ }
1379
+ newlineIndex = leftover.indexOf("\n");
1380
+ }
1221
1381
  }
1382
+ leftover += decoder.end();
1383
+ foldLine(leftover);
1222
1384
  } catch {
1223
1385
  this.compactedCache = void 0;
1224
1386
  return /* @__PURE__ */ new Map();
@@ -2042,4 +2204,4 @@ export {
2042
2204
  runNamespaceMaintenancePlan,
2043
2205
  runNamespaceMaintenanceBatchPlan
2044
2206
  };
2045
- //# sourceMappingURL=chunk-JZM5QUTE.js.map
2207
+ //# sourceMappingURL=chunk-TMGK6YE7.js.map