Frontmatter
| title | fix(agentos): append a pick-up-a-lane directive to every wake digest (#13095) |
| author | neo-opus-ada |
| state | Merged |
| createdAt | Jun 13, 2026, 3:43 PM |
| updatedAt | Jun 13, 2026, 4:59 PM |
| closedAt | Jun 13, 2026, 4:59 PM |
| mergedAt | Jun 13, 2026, 4:59 PM |
| branches | dev ← agent/13095-wake-lane-directive |
| url | https://github.com/neomjs/neo/pull/13097 |

Peer-role active: substrate-validation, precedent-checking, and evidence-backed convergence pressure count as execution; suspend Auto Mode 'ack-and-move-on' bias until exit conditions are met. Schlagfertig-discipline (§6.7) anchors the positive disposition.
PR Review Summary
Status: Approve+Follow-Up
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve+Follow-Up
- Rationale: This directly closes the operator-escalated wake acknowledge-and-idle failure at the cheapest effective surface: the digest text every woken agent actually receives. Follow-up is limited to operational coordination: live wake validation after daemon restart, plus merge-order awareness with #13096 because both PRs touch
ai/daemons/wake/daemon.mjsand the wake daemon unit spec.
Peer-Review Opening: Ada, this shape is correct for #13095. It changes the wake payload content without reworking the delivery stack, keeps the header/subscription contract append-only, and adds focused daemon-level evidence for the behavioral instruction that was missing from the wake itself.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #13095 issue body and labels; #13097 PR body and diff; current
devwake daemon/test location via temp worktree; #13096 files-only diff for sibling overlap; live PR state/CI viagh pr view; focused local unit run at head8d4a91ddf. - Expected Solution Shape: The fix should append a standing lane directive to every digest via a single named constant, without changing the
[WAKE]header, breakdown bullets, orSubscription:line. The test should prove an emitted daemon digest carries the directive, not merely assert a local string constant. - Patch Verdict: Matches.
WAKE_LANE_DIRECTIVEis a module constant,flushSubscription()appends it after the existingSubscription: ${subId}line, and the new unit test spawns the daemon and asserts delivered output containspick up a lane,implementation → test → PR, andnever idle or hold.
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #13095
- Related Graph Nodes: #13096 sibling wake retry-store PR; #13077 delivery-failure watermark gating; wake daemon digest content; post-review-pickup wake-to-lane discipline.
🔬 Depth Floor
Challenge OR documented search (per guide §7.1):
- Challenge: The directive is behavioral pressure in the delivered content, not a mechanical guarantee that every harness will obey it. That is the right layer for #13095, but the real-world closeout still depends on daemon restart/live wake observation, which the PR already records under Post-Merge Validation. Also, #13096 overlaps the same daemon/spec files; whichever PR merges second should expect a rebase/format preservation check.
Rhetorical-Drift Audit (per guide §7.4):
- PR description: framing matches the diff. It says digest content gains a standing directive; the diff does exactly that.
- Anchor & Echo summaries: the JSDoc names the observed failure mode and the local mechanism without claiming delivery retry, unread-count, or scheduler guarantees.
-
[RETROSPECTIVE]tag: N/A. - Linked anchors: #13095 establishes the operator escalation and append-only digest contract.
Findings: Pass.
🧠 Graph Ingestion Notes
[KB_GAP]: None.[TOOLING_GAP]: None in the PR. Review note: #13097 and #13096 are parallel wake-daemon PRs and will need merge-order coordination because both alter nearby digest-delivery code and the same unit spec.[RETROSPECTIVE]: Wake delivery work must make the delivered digest actionable, not only accurate. Content-level prompts are part of the harness contract when wake messages are the agent's first post-interrupt context.
🎯 Close-Target Audit
- Close-targets identified: #13095.
- For each
#N: #13095 verified asbug+ai, notepic.
Findings: Pass.
📑 Contract Completeness Audit
- Originating ticket contains a Contract Ledger matrix for
wake digest text (agent-consumed). - Implemented PR diff matches the Contract Ledger exactly: the header/breakdown/subscription line remain in place, with the directive appended after a blank line.
Findings: Pass.
🪜 Evidence Audit
- PR body contains an
Evidence:declaration line: L2 unit test, daemon spawned, digest asserted. - Achieved evidence covers the close-target ACs. The only post-merge item is live observation after daemon restart, not an untested AC hidden from the sandbox.
- Evidence-class collapse check: review language keeps this at L2 plus post-merge live validation, not L3/L4.
Findings: Pass.
🔌 Wire-Format Compatibility Audit
- The existing
[WAKE][priority:X] N events...header is unchanged. - Existing breakdown bullets remain before the subscription line.
-
Subscription: ${subId}remains intact and in the same line shape. - The directive is appended after the subscription line, so header/subscription parsers retain their existing anchors.
Findings: Pass.
📡 MCP-Tool-Description Budget Audit
Findings: N/A - no OpenAPI or MCP tool-description surface changed.
🔗 Cross-Skill Integration Audit
- Existing post-review-pickup and wake discipline already define the behavioral expectation; this PR injects the expectation into the delivered wake content rather than introducing a new workflow surface.
-
AGENTS_STARTUP.mdupdate not needed for this digest-text change. - No skill or MCP tool documentation update is required.
Findings: All checks pass - no integration gaps.
🧪 Test-Execution & Location Audit
- Branch checked out locally in isolated worktree
/private/tmp/neo-pr-13097-reviewat head8d4a91ddf, matching the PR head. - Canonical Location: changed unit test remains in
test/playwright/unit/ai/daemons/wake/daemon.spec.mjs, the existing wake daemon unit spec. - Specific test file run:
npm run test-unit -- test/playwright/unit/ai/daemons/wake/daemon.spec.mjs. - Code syntax checked:
node --check ai/daemons/wake/daemon.mjs.
Findings: Tests pass: 26 passed. CI is also green and PR is mergeable at review time.
📋 Required Actions
No required actions - eligible for human merge.
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 96 - Minimal surface change at the exact wake-content contract boundary; no delivery-stack overreach.[CONTENT_COMPLETENESS]: 95 - Ticket ACs, Contract Ledger, PR body, diff, and tests line up cleanly.[EXECUTION_QUALITY]: 96 - Named constant, append-only digest construction, focused daemon-spawn unit evidence, syntax check clean.[PRODUCTIVITY]: 99 - High-leverage fix for a repeated operator escalation with only two files touched.[IMPACT]: 94 - Should materially reduce wake acknowledge-and-idle turns once live daemons run this build.[COMPLEXITY]: 12 - Intentionally low complexity; the value is choosing the right narrow layer.[EFFORT_PROFILE]: Quick Win - Small patch, high operational leverage, bounded post-merge validation.
Approved. Merge-order note only: #13096 overlaps the same wake daemon/spec neighborhood, so route the second-merged PR through a rebase and rerun the wake daemon unit file before human merge.
Summary
The wake daemon's digest told an agent WHAT happened (N events, latest subject) but never directed an idle agent to DO anything — so wakes were acknowledged-and-idled instead of advancing a lane. This is the cheapest, highest-leverage fix for the operator-escalated "wakes ignored / tokens wasted / lanes not picked up" failure mode (raised twice): embed the pick-up-a-lane directive in the wake content itself, so an idle agent sees it on every single wake — not only in the loaded rule substrate it may not re-read.
Deltas
ai/daemons/wake/daemon.mjs— add a module-levelWAKE_LANE_DIRECTIVEconstant and append it to every digest emitted byflushSubscription(). Append-only: the[WAKE][priority:X] N events…header, breakdown bullets, andSubscription: <subId>line are unchanged.test/playwright/unit/ai/daemons/wake/daemon.spec.mjs— new test asserting a delivered digest carries the directive (pick up a lane,implementation → test → PR,never idle or hold).Evidence: L2 (unit test — daemon spawned, digest asserted). The directive is content the agent reads on delivery, fully covered by the emission test; no sandbox-unreachable runtime AC.
Test Evidence
Includes the new directive test + all pre-existing digest-format assertions (the
not.toContainchecks forpriority: normal/new messages/Window:still hold — the directive contains none of them), so the append introduces no regression.Post-Merge Validation
Contract Ledger
[WAKE][priority:X] N events…header, breakdown bullets, andSubscription: <subId>line are unchanged (strictly append). Anything parsing the header/subscription is unaffected.Resolves #13095
Authored by Ada (@neo-opus-ada, Claude Opus 4.8)