


























@@ -107,53 +107,22 @@ pnpm openclaw qa matrix --profile fast --fail-fast
107107108108The full CLI reference, profile/scenario catalog, env vars, and artifact layout for this lane live in [Matrix QA](/concepts/qa-matrix). At a glance: it provisions a disposable Tuwunel homeserver in Docker, registers temporary driver/SUT/observer users, runs the real Matrix plugin inside a child QA gateway scoped to that transport (no `qa-channel`), then writes a Markdown report, JSON summary, observed-events artifact, and combined output log under `.artifacts/qa-e2e/matrix-<timestamp>/`.
109109110-For a transport-real Telegram smoke lane, run:
110+For transport-real Telegram and Discord smoke lanes:
111111112112```bash
113113pnpm openclaw qa telegram
114+pnpm openclaw qa discord
114115```
115116116-That lane targets one real private Telegram group instead of provisioning a
117-disposable server. It requires `OPENCLAW_QA_TELEGRAM_GROUP_ID`,
118-`OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN`, and
119-`OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`, plus two distinct bots in the same
120-private group. The SUT bot must have a Telegram username, and bot-to-bot
121-observation works best when both bots have Bot-to-Bot Communication Mode
122-enabled in `@BotFather`. Set `OPENCLAW_QA_TELEGRAM_CAPTURE_CONTENT=1` to keep
123-message bodies in observed-message artifacts (default redacts).
124-The command exits non-zero when any scenario fails. Use `--allow-failures` when
125-you want artifacts without a failing exit code.
126-The Telegram report and summary include per-reply RTT from the driver message
127-send request to the observed SUT reply, starting with the canary.
117+Both target a pre-existing real channel with two bots (driver + SUT). Required env vars, scenario lists, output artifacts, and the Convex credential pool are documented in [Telegram and Discord QA reference](#telegram-and-discord-qa-reference) below.
128118129119Before using pooled live credentials, run:
130120131121```bash
132122pnpm openclaw qa credentials doctor
133123```
134124135-The doctor checks Convex broker env, validates endpoint settings, and verifies
136-admin/list reachability when the maintainer secret is present. It reports only
137-set/missing status for secrets.
138-139-For a transport-real Discord smoke lane, run:
140-141-```bash
142-pnpm openclaw qa discord
143-```
144-145-That lane targets one real private Discord guild channel with two bots: a
146-driver bot controlled by the harness and a SUT bot started by the child
147-OpenClaw gateway through the bundled Discord plugin. It requires
148-`OPENCLAW_QA_DISCORD_GUILD_ID`, `OPENCLAW_QA_DISCORD_CHANNEL_ID`,
149-`OPENCLAW_QA_DISCORD_DRIVER_BOT_TOKEN`, `OPENCLAW_QA_DISCORD_SUT_BOT_TOKEN`,
150-and `OPENCLAW_QA_DISCORD_SUT_APPLICATION_ID` when using env credentials. Set
151-`OPENCLAW_QA_DISCORD_CAPTURE_CONTENT=1` to keep message bodies in
152-observed-message artifacts (default redacts).
153-The lane verifies channel mention handling and checks that the SUT bot has
154-registered the native `/help` command with Discord.
155-The command exits non-zero when any scenario fails. Use `--allow-failures` when
156-you want artifacts without a failing exit code.
125+The doctor checks Convex broker env, validates endpoint settings, and verifies admin/list reachability when the maintainer secret is present. It reports only set/missing status for secrets.
157126158127## Live transport coverage
159128@@ -190,6 +159,106 @@ guest: env-based provider keys, the QA live provider config path, and
190159`CODEX_HOME` when present. Keep `--output-dir` under the repo root so the guest
191160can write back through the mounted workspace.
192161162+## Telegram and Discord QA reference
163+164+Matrix has a [dedicated page](/concepts/qa-matrix) because of its scenario count and Docker-backed homeserver provisioning. Telegram and Discord are smaller — a handful of scenarios each, no profile system, against pre-existing real channels — so their reference lives here.
165+166+### Shared CLI flags
167+168+Both lanes register through `extensions/qa-lab/src/live-transports/shared/live-transport-cli.ts` and accept the same flags:
169+170+| Flag | Default | Description |
171+| ------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
172+| `--scenario <id>` | — | Run only this scenario. Repeatable. |
173+| `--output-dir <path>` | `<repo>/.artifacts/qa-e2e/{telegram,discord}-<timestamp>` | Where reports/summary/observed messages and the output log are written. Relative paths resolve against `--repo-root`. |
174+| `--repo-root <path>` | `process.cwd()` | Repository root when invoking from a neutral cwd. |
175+| `--sut-account <id>` | `sut` | Temporary account id inside the QA gateway config. |
176+| `--provider-mode <mode>` | `live-frontier` | `mock-openai` or `live-frontier` (legacy `live-openai` still works). |
177+| `--model <ref>` / `--alt-model <ref>` | provider default | Primary/alternate model refs. |
178+| `--fast` | off | Provider fast mode where supported. |
179+| `--credential-source <env\|convex>` | `env` | See [Convex credential pool](#convex-credential-pool). |
180+| `--credential-role <maintainer\|ci>` | `ci` in CI, `maintainer` otherwise | Role used when `--credential-source convex`. |
181+182+Both exit non-zero on any failed scenario. `--allow-failures` writes artifacts without setting a failing exit code.
183+184+### Telegram QA
185+186+```bash
187+pnpm openclaw qa telegram
188+```
189+190+Targets one real private Telegram group with two distinct bots (driver + SUT). The SUT bot must have a Telegram username; bot-to-bot observation works best when both bots have **Bot-to-Bot Communication Mode** enabled in `@BotFather`.
191+192+Required env when `--credential-source env`:
193+194+- `OPENCLAW_QA_TELEGRAM_GROUP_ID` — numeric chat id (string).
195+- `OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN`
196+- `OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`
197+198+Optional:
199+200+- `OPENCLAW_QA_TELEGRAM_CAPTURE_CONTENT=1` keeps message bodies in observed-message artifacts (default redacts).
201+202+Scenarios (`extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts:44`):
203+204+- `telegram-canary`
205+- `telegram-mention-gating`
206+- `telegram-mentioned-message-reply`
207+- `telegram-help-command`
208+- `telegram-commands-command`
209+- `telegram-tools-compact-command`
210+- `telegram-whoami-command`
211+- `telegram-context-command`
212+213+Output artifacts:
214+215+- `telegram-qa-report.md`
216+- `telegram-qa-summary.json` — includes per-reply RTT (driver send → observed SUT reply) starting with the canary.
217+- `telegram-qa-observed-messages.json` — bodies redacted unless `OPENCLAW_QA_TELEGRAM_CAPTURE_CONTENT=1`.
218+219+### Discord QA
220+221+```bash
222+pnpm openclaw qa discord
223+```
224+225+Targets one real private Discord guild channel with two bots: a driver bot controlled by the harness and a SUT bot started by the child OpenClaw gateway through the bundled Discord plugin. Verifies channel mention handling and that the SUT bot has registered the native `/help` command with Discord.
226+227+Required env when `--credential-source env`:
228+229+- `OPENCLAW_QA_DISCORD_GUILD_ID`
230+- `OPENCLAW_QA_DISCORD_CHANNEL_ID`
231+- `OPENCLAW_QA_DISCORD_DRIVER_BOT_TOKEN`
232+- `OPENCLAW_QA_DISCORD_SUT_BOT_TOKEN`
233+- `OPENCLAW_QA_DISCORD_SUT_APPLICATION_ID` — must match the SUT bot user id returned by Discord (the lane fails fast otherwise).
234+235+Optional:
236+237+- `OPENCLAW_QA_DISCORD_CAPTURE_CONTENT=1` keeps message bodies in observed-message artifacts.
238+239+Scenarios (`extensions/qa-lab/src/live-transports/discord/discord-live.runtime.ts:36`):
240+241+- `discord-canary`
242+- `discord-mention-gating`
243+- `discord-native-help-command-registration`
244+245+Output artifacts:
246+247+- `discord-qa-report.md`
248+- `discord-qa-summary.json`
249+- `discord-qa-observed-messages.json` — bodies redacted unless `OPENCLAW_QA_DISCORD_CAPTURE_CONTENT=1`.
250+251+### Convex credential pool
252+253+Both Telegram and Discord lanes can lease credentials from a shared Convex pool instead of reading the env vars above. Pass `--credential-source convex` (or set `OPENCLAW_QA_CREDENTIAL_SOURCE=convex`); QA Lab acquires an exclusive lease, heartbeats it for the duration of the run, and releases it on shutdown. Pool kinds are `"telegram"` and `"discord"`.
254+255+Payload shapes the broker validates on `admin/add`:
256+257+- Telegram (`kind: "telegram"`): `{ groupId: string, driverToken: string, sutToken: string }` — `groupId` must be a numeric chat-id string.
258+- Discord (`kind: "discord"`): `{ guildId: string, channelId: string, driverBotToken: string, sutBotToken: string, sutApplicationId: string }`.
259+260+Operational env vars and the Convex broker endpoint contract live in [Testing → Shared Telegram credentials via Convex](/help/testing#shared-telegram-credentials-via-convex-v1) (the section name predates Discord support; the broker semantics are identical for both kinds).
261+193262## Repo-backed seeds
194263195264Seed assets live in `qa/`:
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。