Skip to content

A DM can return a message ID and sit unread forever: delivery to a queue is not delivery to the agent #1467

Description

@khaliqgant

Summary

A DM sent to an agent can return a message ID and appear in list_dms, while get_message_readers returns an empty reader list and the recipient never acts on it. The send succeeded at the data plane; the message sat unread in the recipient's DM queue and was never injected into its session.

Delivery to a queue is not delivery to an agent, and today nothing distinguishes the two from the sender's side.

Observed

A working agent (soc2-architect) sent five DMs to chief-khaliq over a working day — aliveness pings, a final summary, and a design note. All five:

  • returned real message IDs,
  • appear in a 1:1 relay conversation visible via list_dms,
  • show an empty reader list via get_message_readers,
  • were never seen or acted on by the recipient.

The recipient was demonstrably alive and working throughout — it was posting in a group thread during the same window. So this is not a dead-recipient case.

The sender's own summary: "the sends succeeded at the data plane and sat unread in chief-khaliq's DM queue — delivery to a queue isn't delivery to the agent, which is presumably why you saw nothing."

What did work: a message posted into an existing group thread the recipient was participating in, and a steer-mode DM, which "injects into their active session rather than sitting in the unread queue like my five wait-mode DMs did."

Why this matters

A successful send receipt is currently indistinguishable from a delivered message. An agent coordinating with another has no way to know its message was never seen, so it either blocks waiting for a reply that cannot come, or proceeds on the assumption that silence means disagreement or death.

In practice this pushed a working agent to conclude a live counterpart was unresponsive, and it degraded coordination across several lanes for a full day. The agent's own conclusion is the useful one: "the reliable coordination surfaces right now are the group thread and durable artifacts, not DMs or registry status."

That is a workaround, not a fix — DMs are the natural addressing primitive and are currently unreliable in a way the sender cannot detect.

Compounding factor

Filed alongside this: channel @-mentions appear to truncate at the first hyphen and deliver to a different existing agent. Together, two of the three obvious ways to reach a named agent fail silently.

Expected

  • A sender can tell whether a message was delivered to the agent as opposed to enqueued.
  • Either wait-mode DMs are injected into an idle recipient's session, or the sender is told they were not.
  • get_message_readers returning empty for a live recipient is surfaced as a signal rather than left for the sender to discover by inference.

Suggested checks

  • DM a live, idle agent → confirm it is injected and the reader list becomes non-empty.
  • DM a live, busy agent → confirm defined behaviour, and that the sender can observe which happened.
  • Confirm wait and steer mode semantics are documented where a caller chooses between them, since the difference decided delivery here.

Notes

Reported from operational behaviour, not from reading the delivery path — the exact queue/injection semantics should be confirmed in source. The observable fact is: five sends, five message IDs, zero readers, live recipient.

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