Skip to content

WhatsApp 1:1: inbound image wedges main lane ~3min before processing — multimodal run strands active_reply_work/queued_work_without_active_run (repro on 2026.6.10, post-#95039) #96834

Description

@aleps001

Bug type

Behavior bug (incorrect output/state without crash)

Summary

On WhatsApp direct (1:1), sending an image to the main agent wedges the message lane for ~3 minutes before any real processing of the prompt starts. The inbound image is injected as a native multimodal image block into the main agent's run, so the run that ingests it is itself an embedded_run. When that run reaches run:completed, its active-reply marker is not cleared: the lane stays state=processing with reason=queued_work_without_active_run, and the stuck-session recovery skips with active_reply_work (action=keep_lane) for ~3 min before finally escalating to abort_embedded_run and releasing the lane. Only after that does the agent route the request to a worker.

This is the same reason-code signature as the canonical follow-up-drain race #91909 (queued_work_without_active_runkeep_lane/active_reply_workabort_embedded_run), which was closed as fixed by #95039. However:

Filing as a focused, image/multimodal-specific variant and cross-referencing #91909 / #95039 so maintainers can either fold it into the canonical tracker or treat it as a surviving variant of the same race.

Environment

  • OpenClaw 2026.6.10 (aa69b12d), self-hosted Linux, systemd user gateway, loopback bind
  • Channel: WhatsApp direct (1:1)
  • messages.visibleReplies=automatic
  • Main agent model: gpt-5.5
  • Queue mode: default (steer)
  • openclaw tasks list: 0 queued · 0 running · 0 issues during the wedge (the wedge is invisible to the task subsystem)

Steps to reproduce

  1. In a WhatsApp direct chat, send the main agent an image (no caption / "what is this?" style).
  2. The agent receives the image as a native multimodal block, replies once (e.g. a clarifying question), and the run reaches run:completed.
  3. Observe: the lane stays processing; subsequent inbound (and internal queue work) does not start a new run.
  4. ~3 min later the stuck-session watchdog fires and abort_embedded_run releases the lane; only then does real routing/processing begin.

Observed log evidence (BRT timestamps)

13:37:18  inbound image (no caption) -> injected as native multimodal image block into main's run
13:37:26  main replies (text), run:completed ~13:37:27

13:40:36  WARN stuck session: sessionKey=agent:main:whatsapp:direct:+<redacted>
          state=processing age=136s queueDepth=5
          reason=queued_work_without_active_run classification=stale_session_state
          lastProgress=run:completed lastProgressAge=189s terminalProgressStale=true recovery=checking

13:40:36 .. 13:43:35  (repeated)
          stuck session recovery outcome: status=skipped action=keep_lane
          activeSessionId=<same> activeWorkKind=embedded_run reason=active_reply_work

13:43:51  stuck session recovery outcome: action=abort_embedded_run   -> lane released
13:43:52+ queued messages finally processed; main then spawns the worker correctly

Trajectory confirms the inbound image was present in the model context as a type:image multimodal block (no separate vision/OCR tool call) — i.e. the wedging embedded_run is the main agent's own multimodal run, not a Codex app-server / subprocess (distinguishing this from the Codex-embedded-runner reports #85251 / #85532).

Expected

Receiving an image on a 1:1 lane should not strand the lane. Either the multimodal run's active-reply marker must be cleared on run:completed so the followup drain can start, or recovery must treat lastProgress=run:completed + terminalProgressStale=true as authoritative over a stale embedded_run active_reply_work marker and release the lane immediately instead of waiting ~3 min.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High-priority user-facing bug, regression, or broken workflow.clawsweeper:needs-live-reproClawSweeper needs live local, crabbox, or manual validation to confirm this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.impact:message-lossChannel message delivery can be lost, duplicated, or misrouted.impact:session-stateSession, memory, transcript, context, or agent state can drift or corrupt.issue-rating: 🐚 platinum hermitGood issue quality with a plausible reproduction path needing some confirmation.

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions