Skip to content

Agents stop receiving DM injections after a few hours alive; sends still report recipientMatched #1593

Description

@khaliqgant

Corrected 2026-08-21. The original report claimed DMs to running agents are dropped fleet-wide, and cited flush returning 0 as evidence. Both were wrong: flush only applies to an agent in hold mode and none were held, so 0 was the expected answer and proved nothing; and every failed probe shared one sender, which I had not excluded. Re-tested with controls. The underlying bug is real but the mechanism is different and narrower.

Summary

An agent stops receiving DM injections after it has been alive for somewhere between 1h15m and 5h. Sends to it keep returning success — recipientMatched: true, resolvedRecipient correct, status: queued_unconfirmed — and nothing is delivered, queued, or dead-lettered. Reproduced on three nodes.

Evidence

Unique marker sent to each recipient, then its screen read via node agent attach --mode view and grepped for that marker. Process age from ps -o etime.

recipientnodeprocess agestatemarker arrived
dm-control-probe-0821chief-broker6m52sworkingYES
factory-314-rebase-0821chief-broker37m57sworkingYES
rfc155-repoint-0821chief-broker1h09mworkingYES
modal-15-threads-0821sf-mini1h15mworkingYES
relaycast-factory-identity-0821chief-broker5h09midleNO
rfc169-conflict-0821sf-mini5h47midleNO
sandbox14-conflict-0821finn-mini5h51midleNO
factory-relay-egress-0821chief-broker6h19midleNO
cloud-daytona-transitions-0821chief-broker9h57midleNO
dogfood-metrics-v0-0820chief-broker17hidleNO
marketing-leadchief-broker23h12midleNO
factory-leadchief-broker1d17hworkingNO

The boundary sits between 1h15m (delivers) and 5h09m (does not). I did not bisect it further.

Two confounds, both excluded by control

Not the sender. All my original probes went out as chief-voice-0819, an identity with no live seat. I spawned dm-control-probe-0821 and had it send from its own broker-registered identity to an 8-hour-old agent — same result, nothing delivered. Then sent from chief-voice-0819 to that fresh prober — delivered, and the prober confirmed the sender as chief-voice-0819. The sender identity is not the variable.

Not idleness.factory-lead was current_state: working with last_activity_ms: 3 at send time and still received nothing. Meanwhile fresh agents that were also working did receive. Age separates the groups; activity does not.

What the receipts look like

Identical for a delivering and a non-delivering recipient:

{"status": "queued_unconfirmed", "mode": "steer",
"requestedRecipient": "dogfood-metrics-v0-0820",
"resolvedRecipient": "dogfood-metrics-v0-0820",
"recipientMatched": true, "readConfirmed": false}

pending_messages is 0 on the affected recipients, so the message is not sitting queued at the node — it is lost before that. The field works: an unaffected agent showed pending_messages: 1 in the same listing. node deadletters shows nothing from today; newest entry is 5 days old.

Impact

A dispatcher cannot instruct any agent more than a few hours old. In our fleet this left 24 of 27 lanes parked at their prompts waiting on instructions that were accepted by the API and silently discarded — a full day of dispatch into a void, with every send reporting success. Task delivery at spawn time is unaffected, which is what makes this so hard to notice: newly spawned agents work perfectly, so the failure is invisible to anyone measuring spawns.

Asks

  1. Find what expires on the agent's delivery route between 1h and 5h — a session/route/connection generation is the obvious suspect — and either refresh it or fail the send.
  2. recipientMatched: true should mean a reachable seat, not just a resolved name. Today those are different claims with one field.
  3. An injection that cannot be delivered must dead-letter with a distinguishing reason. Silent discard is the expensive part.
  4. Ideally expose the route's last-confirmed-delivery so a dispatcher can tell a deaf agent from a quiet one.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions