Bug type
Behavior bug (incorrect output/state without crash)
Beta release blocker
No
Summary
QQBot routing does not reflect updated bindings at runtime; new bindings appear in CLI but are not evaluated until gateway restart.
Steps to reproduce
- Start OpenClaw 2026.4.15 with QQBot configured
- Add a peer-specific binding to bindings[]
- Verify with:openclaw agents list --bindings
(peer binding is present)
- Send a QQBot C2C message
- Observe routing logs
Expected behavior
Routing evaluates all bindings and matches peer binding before account binding, consistent with CLI output.
Actual behavior
Runtime routing only evaluates one binding (account-level), peer binding is not included:
[routing] resolveAgentRoute ... bindings=1
[routing] binding: agentId=study accountPattern=study peer=none
[routing] match: matchedBy=binding.account agentId=study
After openclaw gateway restart, routing becomes correct:
bindings=2
binding: tutor_... (peer match)
binding: study (account match)
matchedBy=binding.peer
OpenClaw version
2026.4.15
Operating system
Ubuntu (Docker container)
Install method
Docker (Ubuntu image)
Model
modelstudio/qwen3.5-plus
Provider / routing chain
openclaw -> modelstudio/qwen3.5-plus
Additional provider/model setup details
QQBot channel configured with accountId=study.
Peer ID comes from event.author.user_openid (C2C message).
Logs, screenshots, and evidence
CLI output:
openclaw agents list --bindings
Shows peer binding:
qqbot accountId=study peer=direct:480562E9913A985D4A79822A643E27B6 → tutor_...
Runtime log before restart:
bindings=1
matchedBy=binding.account
Runtime log after restart:
bindings=2
matchedBy=binding.peer
Impact and severity
Affected: QQBot users with dynamic bindings
Severity: Medium (breaks expected routing behavior)
Frequency: Always reproducible after binding change without restart
Consequence: Messages routed to wrong agent until gateway restart
Additional information
Bindings are marked as dynamic (no restart required), but QQBot channel appears to use a config snapshot captured at startup, causing CLI and runtime to diverge.
Bug type
Behavior bug (incorrect output/state without crash)
Beta release blocker
No
Summary
QQBot routing does not reflect updated bindings at runtime; new bindings appear in CLI but are not evaluated until gateway restart.
Steps to reproduce
(peer binding is present)
Expected behavior
Routing evaluates all bindings and matches peer binding before account binding, consistent with CLI output.
Actual behavior
Runtime routing only evaluates one binding (account-level), peer binding is not included:
[routing] resolveAgentRoute ... bindings=1
[routing] binding: agentId=study accountPattern=study peer=none
[routing] match: matchedBy=binding.account agentId=study
After openclaw gateway restart, routing becomes correct:
bindings=2
binding: tutor_... (peer match)
binding: study (account match)
matchedBy=binding.peer
OpenClaw version
2026.4.15
Operating system
Ubuntu (Docker container)
Install method
Docker (Ubuntu image)
Model
modelstudio/qwen3.5-plus
Provider / routing chain
openclaw -> modelstudio/qwen3.5-plus
Additional provider/model setup details
QQBot channel configured with accountId=study.
Peer ID comes from event.author.user_openid (C2C message).
Logs, screenshots, and evidence
Impact and severity
Affected: QQBot users with dynamic bindings
Severity: Medium (breaks expected routing behavior)
Frequency: Always reproducible after binding change without restart
Consequence: Messages routed to wrong agent until gateway restart
Additional information
Bindings are marked as dynamic (no restart required), but QQBot channel appears to use a config snapshot captured at startup, causing CLI and runtime to diverge.