[BUG] Cowork Dispatch: child-completion notifications queue against an idle parent and only drain on the parent's next unrelated turn

Status Open
Reported on v2.1.258
Maintainer reply None cached
Activity 0 comments · opened Sep 4, 2026

When a Dispatch child finishes, the completion notification is queued against the parent orchestrator and only delivered the next time that parent starts up for some unrelated reason, which in practice means when the user sends it another message. Nothing wakes the parent on its own, so the delay is unbounded. The same parent in my log saw delays of 1m44s, 12m06s, 48m34s and 11h35m. The last one finished at 21:00 and wasn't relayed until 08:35 the next morning.

Detection is immediate. The result, the queue and the child's state change are all in the same second:

12:07:59 [info] [Result] Turn succeeded for session local_<CHILD>
12:07:59 [info] [Dispatch] Queued notification for cold parent local_ditto_<PARENT> (child local_<CHILD> completed)
12:07:59 [info] [Lifecycle] Session local_<CHILD>: running → idle

The queue drains only on the parent's idle → initializing:

13:11:59 [info] [Lifecycle] Session local_ditto_<PARENT>: idle → initializing
13:11:59 [info] [Dispatch] Drained 1 queued notification(s) for local_ditto_<PARENT>

Two things make that unbounded rather than just slow:

  • The parent isn't listening while idle. Every wake relaunches the session process (Starting local session local_ditto_<PARENT> in /home/<generated-name> appears on each idle → initializing), so there's no process alive to receive a push.
  • The parent is idle nearly all the time, going running → idle a few seconds after each turn. Every completion in my log hit the cold path, 9 out of 9. The warm path never ran.

There's no OS notification on this path either, as far as I can tell. Nothing in the log emits one on child completion.

Relevant to fix options: the child can't notify the parent itself. Per the ccd_session_mgmt__send_message contract it's "unavailable in unattended sessions (scheduled-task runs and remote-dispatched sessions), and cannot deliver to them either". A Dispatch child is remote-dispatched, and scheduled tasks are blocked the same way, so there's no way to trigger the drain from outside a user turn.

Environment

Claude Desktop (Cowork / Code tab) 1.44121.4.0, MSIX install. CCD 2.1.258. Windows 11 (10.0.26200) x64.

Not a recent regression. The 48m34s case is on app 1.34493.0 / CCD 2.1.235 and the 11h35m case is on 1.44121.4 / CCD 2.1.258, with 1.37937.3, 1.40609.0 and 1.40609.1 in between, all behaving the same.

Possible fixes

The one that would actually solve it is waking the parent: when a child completes and the parent is cold, start it for a turn so it can relay. At minimum, an OS notification on child completion independent of the parent's lifecycle would stop results going unnoticed overnight.

Previously reported

#54214, closed as a duplicate of #53605, closed as a duplicate of #39335, closed as not planned by the staleness bot and then locked. All three closures were automated. Filing a new one because #39335 is locked and can't be commented on. #20754 (notifications lost when agents finish simultaneously) and #79268 (configurable idle timeout) are open but describe different problems.

View original on GitHub ↗