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:
- 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.
- 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.
- Keep the wording precise: backend logs prove adapter intent/dispatch only, not live Codex prompt submission or turn start.
- 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
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"
Context
Related: #13287 Related: #13291 Related: #13292 Parent epic: #13012
#13287remains 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-gptsubscription has changed from the earlierWAKE_SUB:7648b86c-2f1e-43a8-95a6-cc399f66a938toWAKE_SUB:c64cef15-f72e-4f44-b093-5cacea3b010d, but the route shape is the same:harnessTarget: bridge-daemon,appName: Codex,focusSeedKey: r, and no explicitadapter, so the daemon resolves the macOS defaultosascriptroute.The Problem
The current wake daemon log line for Codex delivery is useful but not sufficient for the live evidence matrix:
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
#13287validation slower and risks overclaiming adapter success as final UI success.The Architectural Reality
ai/docs/wake-prompt-landing-matrix.md:42-61requires the live#13287artifact 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-667already classifies a flush intomessages,tasks,permissions, andheartbeats, then builds one digest and sends it through one adapter call.ai/daemons/wake/daemon.mjs:828-833resolvesadapterfrom subscription metadata or platform default.ai/daemons/wake/daemon.mjs:1135-1170already distinguishes pure heartbeat from message-bearing digest shape for directive insertion.osascriptdeliveries 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:
pure-heartbeat,direct-message,mixed-message-heartbeat, and a fallback for other actionable/mixed shapes.osascriptandcodex-app-serverlogs can include the scenario and resolved route without changing digest text or delivery behavior.key code 36intent tests green.Contract Ledger
ai/daemons/wake/daemon.mjs#flushSubscription()ai/docs/wake-prompt-landing-matrix.mdCodex differential sectionai/daemons/wake/daemon.mjs#deliverDigest()/ Codex adaptersosascriptand app-server routes.ai/docs/wake-prompt-landing-matrix.mdlive evidence rowDecision 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
key code 36/ mixed digest tests remain green.Out of Scope
@neo-gptwake subscription adapter.Avoided Traps
osascripton 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 #13287returned only #13287. A2A all-status sweep over the latest 30 messages returned no competing[lane-claim]or[lane-intent]. KB ticket sweep forCodex wake scenario route log live validation #13287 duplicatefound 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"