LearnNewsExamplesServices
Frontmatter
id13341
titleIsolate Codex wake matrix dry-run validation
stateClosed
labels
enhancementaitestingarchitecturemodel-experience
assigneesneo-gpt
createdAtJun 15, 2026, 2:31 PM
updatedAtJun 15, 2026, 3:59 PM
githubUrlhttps://github.com/neomjs/neo/issues/13341
authorneo-gpt
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[x] 13347 Research Codex wake submit path and retire one-shot harnesses
blocking[]
closedAtJun 15, 2026, 3:59 PM

Isolate Codex wake matrix dry-run validation

Closed v13.1.0/archive-v13-1-0-chunk-3 enhancementaitestingarchitecturemodel-experience
neo-gpt
neo-gpt commented on Jun 15, 2026, 2:31 PM

Context

This ticket exists because the #13287 residual Codex wake lane still requires L4 live Codex UI proof, but the implementation now ready for PR only delivers the narrower prerequisite: an isolated, repeatable dry-run validation harness that can prove backend route/isolation without dumping the production wake backlog or advancing production wake-daemon cursor state.

The split is required by the Evidence Ladder close-target gate: the harness PR should not use Resolves #13287, because #13287 still needs live prompt lands + submits + turn-start evidence for pure heartbeat, direct A2A message, and mixed message+heartbeat scenarios.

Release classification: post-release Agent Harness reliability hardening; boardless unless the operator explicitly promotes the parent Codex wake regression to a release blocker.

The Problem

#13287 needs controlled validation, but the live environment currently has active wake subscriptions, a live wake daemon, and mailbox backlog. Blindly firing a self-wake from the active session pollutes the matrix: it can mix old backlog, production cursor movement, and uncontrolled UI state with the single scenario being tested.

The parent issue already records that backend route success is not enough for L4 Codex UI proof. The missing prerequisite is a small harness path that can create exactly one matrix scenario in an isolated Memory Core graph, run one wake daemon subprocess against that graph, and produce a matrix-ready artifact with explicit dry-run vs live evidence fields.

The Architectural Reality

  • ai/docs/wake-prompt-landing-matrix.md is the authority for Codex wake prompt-landing validation. It requires inventorying subscriptions, stopping/neutralizing uncontrolled wake state, and running exactly one controlled delivery attempt.
  • ai/daemons/wake/daemon.mjs already owns wake scenario routing/logging and supports the test adapter for non-UI dispatch evidence.
  • package.json owns operator/agent script discovery through npm run ai:* commands.
  • The new harness belongs under ai/scripts/lifecycle/, matching the sibling one-shot Agent OS lifecycle utilities rather than long-running daemon placement.

The Fix

Add a Codex-specific validation command that:

  1. Reads the source Memory Core graph read-only.
  2. Loads exactly one active Codex bridge-daemon wake subscription for the requested identity.
  3. Copies that subscription into a temporary graph and forces adapter: test unless --live is explicitly passed.
  4. Injects exactly one requested scenario: pure-heartbeat, direct-message, or mixed-message-heartbeat.
  5. Starts one wake-daemon subprocess against the temporary graph and daemon data directory.
  6. Emits a JSON artifact with backend evidence, isolation fields, and explicit live Codex assertion placeholders.
  7. Documents the command in the wake prompt landing matrix without claiming L4 UI proof.

Contract Ledger

Target Surface Source of Authority Proposed Behavior Fallback / Edge Case Docs Evidence
npm run ai:validate-codex-wake package.json script registry + ai/scripts/lifecycle/ sibling lifecycle utilities Agent/operator command for isolated Codex wake matrix dry-runs and intentional live attempts. Without --live, force adapter:test; with multiple active subscriptions, require --subscription-id. ai/docs/wake-prompt-landing-matrix.md. Unit tests for CLI parsing, isolation, direct/mixed scenarios, and explicit-subscription guard.
Wake daemon test-adapter evidence label ai/daemons/wake/daemon.mjs#deliverDigest() scenario evidence label Test-adapter delivery logs include the same scenario=...; route=... label needed by matrix dry-runs. Existing tests that match the old prefix continue to pass because the prefix is preserved. Inline code remains self-explanatory; no public API change. Existing wake-daemon Codex/test-adapter focused tests remain green.
Matrix artifact shape #13287 evidence ledger + ai/docs/wake-prompt-landing-matrix.md Artifact separates backend evidence from live Codex assertions so dry-run evidence cannot be promoted to L4. --live marks live fields as manual-observation-required rather than auto-proving them. Matrix doc command note. New script unit coverage and CLI --help smoke check.

Decision Record impact

none — this is a narrow lifecycle validation utility aligned with the existing wake matrix authority and sibling lifecycle script placement.

Acceptance Criteria

  • Add an ai:validate-codex-wake npm script for the isolated Codex wake matrix harness.
  • The harness copies only one active Codex wake subscription into a temporary graph and does not advance production cursor or consume production backlog.
  • Dry-run mode is the default and forces the daemon test adapter; live Codex delivery requires explicit --live.
  • The harness supports pure-heartbeat, direct-message, and mixed-message-heartbeat scenario injection.
  • The emitted artifact records backend evidence separately from live Codex prompt/submit/start-turn assertions.
  • Unit coverage validates argument defaults, active subscription loading, inactive explicit-subscription rejection, dry-run adapter forcing, direct-message evidence, and mixed message+heartbeat evidence.
  • Existing focused wake-daemon Codex/test-adapter coverage remains green.
  • ai/docs/wake-prompt-landing-matrix.md points Codex validation at the harness while preserving #13287 as the live L4 close target.

Out of Scope

  • Closing #13287.
  • Running the live Codex Desktop L4 matrix.
  • Changing Codex adapter submit behavior.
  • Changing #13281/#13285 stale retry/read-state behavior.
  • Adding a public MCP tool surface for validation orchestration.

Avoided Traps

  • Do not treat wake-daemon backend delivery logs as proof of prompt submit/start-turn in Codex Desktop.
  • Do not run a blind self-wake from an active session with unread backlog and an uncontrolled live daemon.
  • Do not use Resolves #13287 for the dry-run harness PR; that would close the parent regression before L4 UI evidence exists.

Related

Related: #13287 Related: #13012

Duplicate sweep

Live latest-open sweep: checked latest 20 open issues on 2026-06-15; #13287 is the parent residual L4 bug, and no separate open leaf covers the isolated dry-run validation harness.

A2A recency sweep: the Memory Core MCP list_messages call failed because the shared graph path is read-only in this sandbox, so I queried the same graph read-only for the latest 30 MESSAGE nodes by sentAt. The only overlapping claim was my earlier [lane-claim] #13287 — isolated Codex L4 wake validation path on clean origin/dev; no peer claim or newly filed duplicate covered this split leaf.

Local exact sweep: rg for isolated Codex wake, Codex wake validation harness, validate-codex-wake, and wake matrix found only this in-progress branch's new files plus historical archived #106xx wake-matrix ancestors.

Semantic KB sweep: ask_knowledge_base(query='isolated Codex wake validation harness ticket #13287 dry-run matrix', type='ticket') returned older #10649/#10666/#11872/#13067/#10650 context, not an equivalent current ticket.

Origin Session ID: 019ec8a7-1f8e-75a3-b223-fe59cc444776

Retrieval Hint: "#13287 isolated Codex wake matrix dry-run validate-codex-wake temporary Memory Core graph adapter test live placeholder"