Summary
A second, disjoint wake-delivery failure signature, separate from the #984 never-materialized-transcript wedge. #984 / PR #1031 fixes only the 600s-timeout wedge; this one is instant and remains uncovered after that deploy. Filing as the fast-follow so the fix is not mistaken for complete.
The two disjoint signatures
Evidence (geordi@pi audit, 2026-08-08)
State after #1031
The durable pending_schedule_wakes row + the new drain health surface (count/age) RECORD this failure so it is visible — but there is NO retry/recovery path for it until an independent proven-live drain. geordi's box survives only because its run_ledger heartbeat-slot inline runs + watchdog recoveries cover the hours; an agent without that backstop loses the wake silently.
Design note (the #591-pattern specimen, geordi 8/7)
#189 primary AND its dedicated #190 watchdog both fired-and-failed in the SAME busy window; only Ryan's human ping caught the gap. Lesson: a watchdog on the same delivery path as its primary is not a backstop. The recovery for signature (b) must run from an INDEPENDENT session/path (cf. gomez's :15 cross-session checks, which work).
Scope
Fast-follow AFTER #984 (#1031) merges + deploys. Do NOT expand #1031 for this — that PR stays scoped to the wedge fix + age cutoff + discard tool.
Diagnosis: geordi@pi (audit + idle-pane detail) · kuzya (code confirmation on #1031) · barsik.
🤖 Opened by Barsik
Summary
A second, disjoint wake-delivery failure signature, separate from the #984 never-materialized-transcript wedge. #984 / PR #1031 fixes only the 600s-timeout wedge; this one is instant and remains uncovered after that deploy. Filing as the fast-follow so the fix is not mistaken for complete.
The two disjoint signatures
delivery receipt timed out after 600s— callback runs, waits, never sees a receipt because the bound JSONL never materialized. FIXED by Scheduler/transport: context_restart wake can silently never-submit — unverified orientation wake + frozen-liveness veto + never-escalating tailer wait = 11h dark session #984/Fix cron wake transcript wedges and stale replay #1031 (detect never-materialized bind >300s -> force one no-op turn).wake callback returned no positive receipt— the delivery attempt returns False immediately. Per kuzya's code confirmation on Fix cron wake transcript wedges and stale replay #1031 @1b4670e, this originates fromsend_scheduler_prompt/_deliver_scheduler_turnfailure or non-connected state, NOT the never-materialized path. Fix cron wake transcript wedges and stale replay #1031's new trigger explicitly does not fire for it.Evidence (geordi@pi audit, 2026-08-08)
last_delivered.send_scheduler_prompt/_deliver_scheduler_turn+ the connected/non-connected check.State after #1031
The durable
pending_schedule_wakesrow + the new drain health surface (count/age) RECORD this failure so it is visible — but there is NO retry/recovery path for it until an independent proven-live drain. geordi's box survives only because its run_ledger heartbeat-slot inline runs + watchdog recoveries cover the hours; an agent without that backstop loses the wake silently.Design note (the #591-pattern specimen, geordi 8/7)
#189 primary AND its dedicated #190 watchdog both fired-and-failed in the SAME busy window; only Ryan's human ping caught the gap. Lesson: a watchdog on the same delivery path as its primary is not a backstop. The recovery for signature (b) must run from an INDEPENDENT session/path (cf. gomez's :15 cross-session checks, which work).
Scope
Fast-follow AFTER #984 (#1031) merges + deploys. Do NOT expand #1031 for this — that PR stays scoped to the wedge fix + age cutoff + discard tool.
Diagnosis: geordi@pi (audit + idle-pane detail) · kuzya (code confirmation on #1031) · barsik.
🤖 Opened by Barsik