Skip to content

Workspace-wide: every DM returns recipient_unresolved while the fleet is healthy and every agent record reads offline #1541

Description

@khaliqgant

Summary

As of 2026-08-16 ~18:59Z, no agent in the workspace can be reached by DM. Every message dm send returns recipient_unresolved, while the fleet itself is healthy and the agents are demonstrably still working.

This is filed separately from #1539 because the symptom shape is distinct — there the agent's node_id was missing; here every field looks correct and resolution still fails — and because the blast radius is the whole workspace rather than one agent.

Measured, with controls

  • Every recipient tried fails, 8 of 8: fleet-spawned agents on two different mini nodes and locally-spawned agents on the laptop, including factory-lead, which had been reachable ~20 minutes earlier.
  • Control arm — a second sender identity gets the identical result. So this is not one agent's seat or token.
  • The sender's own credentials are fine: agent-relay agent me returns the record normally.
  • Inbound still works. Agents continue to deliver messages to the coordinator throughout. It is outbound recipient resolution that fails.
  • Every node is healthy. All four report online, live: true, heartbeating within 5 seconds, with agents attributed: 9, 21, 17, 2.
  • The work did not stop. Lanes kept pushing during the outage — a PR head moved at 19:05:18Z and issue comments continued to land. Only coordination is down.

The registry state that accompanies it

Zero of 1679 agent records read active. 1643 offline, 36 unknown.

Grouping every record by lastSeenAt shows repeated bulk stamps — one identical timestamp shared by many agents, which is the signature of a single UPDATE rather than many independent deaths:

agents identical lastSeen
221 2026-08-16T10:46:42Z
186 2026-08-16T12:29:32Z
77 2026-08-16T10:24:42Z
28 2026-08-16T18:59:15Z

The 18:59:15 stamp coincides with the onset of the outage. The earlier ones show this is recurrent, several times a day, not a one-off.

Why this is worse than it looks

If DM recipient resolution requires an active record, then every bulk stamp is a fleet-wide coordination outage — and nothing appears to restore the records afterwards. During this window a supervisor can watch its agents work and cannot send any of them a single instruction, a correction, or a stop.

That is not hypothetical: it happened during active incident response. Direction had to be delivered by posting GitHub issue comments instead, because that surface still worked in both directions.

Caveat on the status field, deliberately stated

status is known to be unreliable in this system — relaycast#312 records live agents rendering as not-active through the API while the column holds otherwise. So the counts above are corroborating evidence, not the finding. The finding is behavioural: sends fail, from two identities, to every recipient, reproducibly.

What would settle it

  1. Does DM recipient resolution require status = 'active'? If so, name the query, and that is the coupling to break or to guarantee.
  2. What writes a bulk stamp of N agents at one identical timestamp, and why does nothing restore them? The inventory.sync path is documented as the only restore route (see A live agent is permanently unroutable via --node when it is missing from the broker's fleet_inventory (workers/fleet_inventory divergence) #1539) — establish whether it runs and fails, or never runs.
  3. Is there a resolution path that does not depend on the liveness field at all? A supervisor being unable to reach a running agent is a worse failure than a stale status field.

Related: #1539 (a live agent unroutable via --node when missing from the broker's fleet_inventory), #1387 (surface injected-but-unprocessed per agent), #1531 (delivery over simulated keystrokes), #1310 (delivery_ack before echo verification), relaycast#312 (status rendering).

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