Frontmatter
| title | feat(ai): replay message WAL into mailbox graph (#13892) |
| author | neo-gpt |
| state | Merged |
| createdAt | Jun 23, 2026, 1:08 PM |
| updatedAt | Jun 23, 2026, 5:33 PM |
| closedAt | Jun 23, 2026, 5:33 PM |
| mergedAt | Jun 23, 2026, 5:33 PM |
| branches | dev ← codex/13892-message-wal-projection |
| url | https://github.com/neomjs/neo/pull/13921 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |
Merged

neo-gpt
commented on Jun 23, 2026, 1:17 PM
[review-request] #13921 is ready for primary review.
Review role: primary-reviewer Requested action: use /pr-review on PR #13921 Reviewer: @neo-opus-grace Current head: 05a4027d99297c34167f5e844779f1c7640f565f CI: all checks green as of 2026-06-23T11:16:40Z
Scope: #13892 message WAL graph projection replay/idempotency under #13889. The PR wires marker-based pending reads, mailbox projection replay, local/in-process daemon processors, and focused replay tests.
A2A note: the current Codex harness exposes no add_message tool; GitHub review request + this public handoff comment are the lifecycle route.

tobiu
APPROVED reviewed on Jun 23, 2026, 5:33 PM
No review body provided.
Resolves #13892 Related: #13889
Projects accepted A2A message WAL records into the mailbox graph idempotently. The message WAL now has graph-projection marker files, pending-record reads skip already-projected rows,
MailboxService.addMessage()shares the replay projection path, and both local daemon and in-process Memory Core drain hosts now wire the mailbox projection processor.Evidence: L2 (focused unit coverage over JSONL WAL markers, SQLite-backed mailbox graph projection, daemon processor wiring, and config/server import coverage) -> L2 required (idempotent replay, pending retention on required-edge failure, send-time broadcast fan-out, and host-loop wiring). Residual: A2A message vector/search indexing remains outside #13892 and stays deferred to the parent epic.
Deltas from ticket
SENT_BY,SENT_TO, and broadcastDELIVERED_TOstill fail loudly and leave the WAL row pending.Test Evidence
node --check ai/services/memory-core/helpers/messageWalStore.mjsnode --check ai/services/memory-core/MailboxService.mjsnode --check ai/daemons/message/drainCycle.mjsnode --check ai/daemons/message/daemon.mjsnode --check ai/mcp/server/memory-core/Server.mjsnode --check test/playwright/unit/ai/services/memory-core/MailboxService.spec.mjsnode --check test/playwright/unit/ai/daemons/message/drainCycle.spec.mjsgit diff --checknpm run agent-preflight -- ai/services/memory-core/helpers/messageWalStore.mjs ai/services/memory-core/MailboxService.mjs ai/daemons/message/drainCycle.mjs ai/daemons/message/daemon.mjs ai/mcp/server/memory-core/Server.mjs test/playwright/unit/ai/services/memory-core/MailboxService.spec.mjs test/playwright/unit/ai/daemons/message/drainCycle.spec.mjsnpm run test-unit -- test/playwright/unit/ai/daemons/message/drainCycle.spec.mjs test/playwright/unit/ai/services/memory-core/MailboxService.spec.mjs test/playwright/unit/ai/mcp/server/memory-core/Server.spec.mjs test/playwright/unit/ai/mcp/server/memory-core/config.template.spec.mjs test/playwright/unit/ai/daemons/message/drainLock.spec.mjs(107 passed)Post-Merge Validation
Authored by Euclid (GPT-5, Codex Desktop). Session 019ef378-527d-7393-bc74-ec3a1d3f2ddf.