openclaw - ✅(Solved) Fix [Bug]: Text /steer can target slash lane instead of active direct lane [2 pull requests, 1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#81594Fetched 2026-05-14 03:30:37
View on GitHub
Comments
1
Participants
2
Timeline
4
Reactions
2
Author
Timeline (top)
cross-referenced ×3commented ×1

Text /steer can target a slash-command session lane even when the active embedded run lives on the sibling direct-message lane, causing a false "no active run" result.

Error Message

In a channel where normal user messages are handled on a direct lane and text slash commands are dispatched through a slash lane, a user can have an active embedded run in the direct lane. Sending /steer <message> from the same conversation may resolve the steer target to the slash lane instead of the direct lane. Since the slash lane has no active embedded run, /steer reports that there is no active run to steer.

Root Cause

I am not opening this as a PR yet because it changes cross-lane session targeting behavior and should have an upstream test that captures the intended session-key contract across Telegram and Discord/native command dispatch.

Fix Action

Fix / Workaround

In a channel where normal user messages are handled on a direct lane and text slash commands are dispatched through a slash lane, a user can have an active embedded run in the direct lane. Sending /steer <message> from the same conversation may resolve the steer target to the slash lane instead of the direct lane. Since the slash lane has no active embedded run, /steer reports that there is no active run to steer.

A local hotfix was validated by checking the raw steer target key before resolving the internal session key:

I am not opening this as a PR yet because it changes cross-lane session targeting behavior and should have an upstream test that captures the intended session-key contract across Telegram and Discord/native command dispatch.

PR fix notes

PR #81592: [codex] Route Telegram management commands to the control lane

Description (problem / solution / changelog)

Summary

Routes Telegram /steer, /tell, and /queue text commands onto the existing per-chat control sequentialization lane.

Why

Telegram updates are sequentialized by chat/thread so normal messages do not race with each other. That is correct for conversational messages, but management commands that are intended to affect an active run should not wait behind the same long-running message they are trying to control.

/stop and status commands already bypass the normal chat lane. This gives /steer, its /tell alias, and /queue the same immediate lane behavior.

Validation

  • vitest run extensions/telegram/src/sequential-key.test.ts
  • oxfmt --check --threads=1 extensions/telegram/src/sequential-key.ts extensions/telegram/src/sequential-key.test.ts

Changed files

  • extensions/telegram/src/sequential-key.test.ts (modified, +22/-0)
  • extensions/telegram/src/sequential-key.ts (modified, +20/-0)

PR #81613: fix(steer): fallback to sibling direct/DM lanes when slash lane has no active run

Description (problem / solution / changelog)

Summary

Fixes #81594

When /steer targets a slash-command session lane but no active embedded run exists there, the command reports "no active run" even though the user has an active run on the sibling direct/DM lane for the same peer.

Root Cause

resolveSteerSessionId() in src/auto-reply/reply/commands-steer.ts only checks the resolved target session key. When the key resolves to a :slash: lane (because the /steer text command is dispatched through the slash lane), it finds no active run and gives up immediately, without checking sibling lanes.

Fix

After the initial active-run lookup fails on the slash lane, check if the session key contains :slash: and try the corresponding :direct: and :dm: sibling keys. Return the first sibling with an active embedded run.

This matches the approach suggested in the issue and mirrors the pattern used by other channel dispatch paths (Telegram, Discord) where the active run lives on the direct/DM lane.

Testing

  • Code reviewed line-by-line against the existing session resolution pattern
  • Logic verified: only falls back when the original target is a slash lane AND has no active run
  • No side effects: if neither sibling has an active run, existing behavior (return undefined → fallback prompt) is preserved

AI-assisted

This PR was written with AI assistance. I have reviewed and understand every line of the change.

Changed files

  • src/auto-reply/reply/commands-steer.ts (modified, +14/-0)
RAW_BUFFERClick to expand / collapse

Summary

Text /steer can target a slash-command session lane even when the active embedded run lives on the sibling direct-message lane, causing a false "no active run" result.

Observed behavior

In a channel where normal user messages are handled on a direct lane and text slash commands are dispatched through a slash lane, a user can have an active embedded run in the direct lane. Sending /steer <message> from the same conversation may resolve the steer target to the slash lane instead of the direct lane. Since the slash lane has no active embedded run, /steer reports that there is no active run to steer.

Expected behavior

If the slash-lane session has no active embedded run but a sibling direct/DM lane for the same peer does, /steer should target the active sibling lane.

Notes

A local hotfix was validated by checking the raw steer target key before resolving the internal session key:

  • if the raw key already has an active embedded run, keep it
  • if it contains :slash:, try corresponding :direct: and :dm: sibling keys
  • use the first sibling with an active embedded run
  • otherwise preserve existing behavior

I am not opening this as a PR yet because it changes cross-lane session targeting behavior and should have an upstream test that captures the intended session-key contract across Telegram and Discord/native command dispatch.

Related: #81592 handles a separate Telegram sequentialization issue where /steer, /tell, and /queue were waiting behind normal per-chat message handling.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

If the slash-lane session has no active embedded run but a sibling direct/DM lane for the same peer does, /steer should target the active sibling lane.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - ✅(Solved) Fix [Bug]: Text /steer can target slash lane instead of active direct lane [2 pull requests, 1 comments, 2 participants]