qa-channel is a bundled synthetic message transport for automated OpenClaw QA.
It is not a production channel. It exists to exercise the same channel plugin
boundary used by real transports while keeping state deterministic and fully
inspectable.
What it does today
- Slack-class target grammar:
dm:<user>channel:<room>thread:<room>/<thread>
- HTTP-backed synthetic bus for:
- inbound message injection
- outbound transcript capture
- thread creation
- reactions
- edits
- deletes
- search and read actions
- Bundled host-side self-check runner that writes a Markdown report
Config
baseUrlbotUserIdbotDisplayNamepollTimeoutMsallowFromdefaultToactions.messagesactions.reactionsactions.searchactions.threads
Runner
Current vertical slice:qa-lab extension. It starts the in-repo
QA bus, boots the bundled qa-channel runtime slice, runs a deterministic
self-check, and writes a Markdown report under .artifacts/qa-e2e/.
Private debugger UI:
Scope
Current scope is intentionally narrow:- bus + plugin transport
- threaded routing grammar
- channel-owned message actions
- Markdown reporting
- Docker-backed QA site with run controls
- provider/model matrix execution
- richer scenario discovery
- OpenClaw-native orchestration later