LearnNewsExamplesServices
Frontmatter
id13320
titleLog Codex wake scenario and route for validation
stateClosed
labels
enhancementaitestingregressionarchitecturemodel-experience
assigneesneo-gpt
createdAtJun 15, 2026, 10:53 AM
updatedAtJun 15, 2026, 12:10 PM
githubUrlhttps://github.com/neomjs/neo/issues/13320
authorneo-gpt
commentsCount0
parentIssue13012
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 15, 2026, 12:10 PM

Log Codex wake scenario and route for validation

Closed v13.1.0/archive-v13-1-0-chunk-3 enhancementaitestingregressionarchitecturemodel-experience
neo-gpt
neo-gpt commented on Jun 15, 2026, 10:53 AM

Context

Related: #13287 Related: #13291 Related: #13292 Parent epic: #13012

#13287 remains open after PR #13290 and PR #13293 because those PRs deliberately pinned the L2 backend boundary and documentation protocol without claiming the L4 Codex Desktop prompt-submit / turn-start behavior is fixed. The updated matrix now requires every live Codex validation attempt to name the subscription id, adapter metadata, resolved adapter route, payload scenario, prompt landing result, submit/start-turn result, and whether a human Enter key was required.

Current live V-B-A on 2026-06-15 shows the active @neo-gpt subscription has changed from the earlier WAKE_SUB:7648b86c-2f1e-43a8-95a6-cc399f66a938 to WAKE_SUB:c64cef15-f72e-4f44-b093-5cacea3b010d, but the route shape is the same: harnessTarget: bridge-daemon, appName: Codex, focusSeedKey: r, and no explicit adapter, so the daemon resolves the macOS default osascript route.

The Problem

The current wake daemon log line for Codex delivery is useful but not sufficient for the live evidence matrix:

[Wake Daemon] Delivered WAKE_SUB:<id> via osascript to Codex

That line does not state whether the delivered digest was pure heartbeat, direct A2A message, or mixed message + heartbeat. It also does not preserve the resolved route/metadata snapshot in the same evidence line. When the operator observes "submitted" or "landed without submitting" in Codex, the backend log is hard to correlate to the exact matrix scenario. This makes #13287 validation slower and risks overclaiming adapter success as final UI success.

The Architectural Reality

  • ai/docs/wake-prompt-landing-matrix.md:42-61 requires the live #13287 artifact to record subscription id, adapter metadata, resolved adapter route, payload scenario, prompt landing, submit/start-turn result, and human-Enter requirement.
  • ai/daemons/wake/daemon.mjs:631-667 already classifies a flush into messages, tasks, permissions, and heartbeats, then builds one digest and sends it through one adapter call.
  • ai/daemons/wake/daemon.mjs:828-833 resolves adapter from subscription metadata or platform default.
  • ai/daemons/wake/daemon.mjs:1135-1170 already distinguishes pure heartbeat from message-bearing digest shape for directive insertion.
  • Wake-daemon logs around 2026-06-15 include many Codex osascript deliveries and at least one post-submit draft-restore warning, but without scenario classification in the delivery line.

Memory Core context surfaced Ada's same-day daemon-side V-B-A: heartbeat and message wakes use the same osascript keystroke path with unconditional Enter; the remaining unknown is UI/runtime behavior. This ticket makes the backend half of future live evidence mechanically auditable.

The Fix

Add a small Codex wake delivery evidence envelope in the wake daemon:

  1. Derive a stable scenario label from the event counts already present at flush time, at least pure-heartbeat, direct-message, mixed-message-heartbeat, and a fallback for other actionable/mixed shapes.
  2. Pass delivery evidence metadata into the adapter path so Codex osascript and codex-app-server logs can include the scenario and resolved route without changing digest text or delivery behavior.
  3. Keep the wording precise: backend logs prove adapter intent/dispatch only, not live Codex prompt submission or turn start.
  4. Add focused wake-daemon unit coverage proving direct-message and mixed-message Codex deliveries emit scenario/route evidence while keeping existing key code 36 intent tests green.

Contract Ledger

Target Surface Source of Authority Proposed Behavior Fallback / Edge Case Docs Evidence
ai/daemons/wake/daemon.mjs#flushSubscription() ai/docs/wake-prompt-landing-matrix.md Codex differential section Computes and passes a payload-scenario evidence label for each coalesced wake flush. Unknown or non-Codex mixes use a conservative generic label rather than guessing UI behavior. JSDoc/comment only if helper is non-obvious. Focused unit test for direct-message and mixed-message scenario classification.
ai/daemons/wake/daemon.mjs#deliverDigest() / Codex adapters Current wake daemon adapter routing Delivery logs include subscription id, resolved adapter route, target app, and payload scenario for Codex validation. Logs remain backend evidence only; no log line may claim prompt submission or turn start. Existing matrix remains authority; no doc change required unless terminology changes. Unit test captures daemon stdout/log output for Codex osascript and app-server routes.
ai/docs/wake-prompt-landing-matrix.md live evidence row PR #13293 / #13292 The matrix can be satisfied by pairing the enriched backend log with live UI observation. If Codex UI still lands without submit, the live artifact records backend as partial delivery. No matrix rewrite expected. PR body declares this as L2 evidence that enables, but does not close, L4 validation on #13287.

Decision Record impact

Aligned with ADR 0002 wake-substrate standards and ADR 0020 Agent Harness concept. No ADR amendment: this is observability for an existing validation matrix, not a wake architecture change.

Acceptance Criteria

  • Codex wake delivery logs include the payload scenario and resolved adapter route for pure heartbeat, direct A2A message, and mixed message + heartbeat shapes.
  • The new evidence wording cannot be mistaken for live prompt-submit / turn-start proof.
  • Focused wake-daemon unit coverage validates direct-message and mixed-message Codex scenario/route logging.
  • Existing Codex key code 36 / mixed digest tests remain green.
  • #13287 remains open for L4 live Codex validation; this ticket only closes the L2 backend-evidence observability slice.

Out of Scope

  • Changing the active @neo-gpt wake subscription adapter.
  • Proving Codex Desktop prompt submission or turn start.
  • Reworking stale retry/read-state behavior from #13281 / PR #13285.
  • Adding a submit-capable Codex app-server command.
  • Closing #13287.

Avoided Traps

  • Do not overclaim the log. The enriched log is route/scenario evidence only; the live UI result still has to be observed and recorded.
  • Do not duplicate #13290/#13291. Those already test the Enter intent and app-server dispatch wording.
  • Do not infer adapter divergence. Current live subscription metadata still has no explicit adapter, so the default route is osascript on macOS.

Related

Related: #13287 Related: #13291 Related: #13292 Parent epic: #13012

Release classification: post-release Agent Harness reliability; attach to Project 13 because it belongs to the Agent Harness live-validation lane, not the v13 release board.

Duplicate sweep: live latest-open sweep on 2026-06-15 checked the latest 20 open issues and found #13287 as the live parent behavior ticket but no separate route/scenario logging leaf. Live GitHub search for Codex wake scenario route log validation #13287 returned only #13287. A2A all-status sweep over the latest 30 messages returned no competing [lane-claim] or [lane-intent]. KB ticket sweep for Codex wake scenario route log live validation #13287 duplicate found older adjacent wake/app-server tickets (#13067, #10649, #10664, #11872, #10666, #10517, #10650, #10636) but no current equivalent leaf.

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

Retrieval Hint: "Codex wake scenario route log validation #13287 osascript payload scenario mixed heartbeat direct message"