diff --git a/extensions/buzz/src/qa/cli.test.ts b/extensions/buzz/src/qa/cli.test.ts index 4281c79f6fb2..0e3723938172 100644 --- a/extensions/buzz/src/qa/cli.test.ts +++ b/extensions/buzz/src/qa/cli.test.ts @@ -48,4 +48,28 @@ describe("Buzz QA CLI", () => { }), ).toEqual(["channel-canary", "channel-mention-gating"]); }); + + it("forwards an explicitly selected thread follow-up scenario", async () => { + const qa = new Command(); + buzzQaCliRegistration.register(qa); + + await qa.parseAsync([ + "node", + "openclaw", + "buzz", + "--credential-file", + "/secure/buzz-qa.json", + "--scenario", + "thread-follow-up", + ]); + + const params = runLiveTransportQaSuiteCommand.mock.calls[0]?.[0]; + expect( + params?.selectScenarioIds({ + primaryModel: "openai/gpt-5.4", + providerMode: "mock-openai", + scenarioIds: ["thread-follow-up"], + }), + ).toEqual(["thread-follow-up"]); + }); }); diff --git a/extensions/qa-lab/src/scenario-catalog.test.ts b/extensions/qa-lab/src/scenario-catalog.test.ts index 2dc9d43fb12a..9d8a81734047 100644 --- a/extensions/qa-lab/src/scenario-catalog.test.ts +++ b/extensions/qa-lab/src/scenario-catalog.test.ts @@ -1017,11 +1017,19 @@ describe("qa scenario catalog", () => { }); it("keeps portable thread relation flows on channels with native thread semantics", () => { - for (const scenarioId of ["thread-follow-up", "thread-isolation"]) { + const expectations = [ + { + scenarioId: "thread-follow-up", + channels: ["qa-channel", "buzz", "slack", "matrix"], + }, + { scenarioId: "thread-isolation", channels: ["qa-channel", "slack", "matrix"] }, + ]; + + for (const { scenarioId, channels } of expectations) { const scenario = requireFlowScenario(readQaScenarioById(scenarioId)); expect(scenario.execution.channel, scenarioId).toBeUndefined(); - expect(scenario.execution.channels, scenarioId).toEqual(["qa-channel", "slack", "matrix"]); + expect(scenario.execution.channels, scenarioId).toEqual(channels); } }); diff --git a/qa/scenarios/channels/thread-follow-up.yaml b/qa/scenarios/channels/thread-follow-up.yaml index b35d1b9b1adb..ec15d8fa4118 100644 --- a/qa/scenarios/channels/thread-follow-up.yaml +++ b/qa/scenarios/channels/thread-follow-up.yaml @@ -19,11 +19,12 @@ scenario: - docs/concepts/qa-e2e-automation.md codeRefs: - extensions/qa-lab/src/qa-transport.ts + - extensions/buzz/src/qa/adapter.runtime.ts - extensions/qa-lab/src/live-transports/slack/adapter.runtime.ts - extensions/qa-lab/src/live-transports/matrix/adapter.runtime.ts execution: kind: flow - channels: [qa-channel, slack, matrix] + channels: [qa-channel, buzz, slack, matrix] summary: Send a deterministic follow-up through the shared host and require native thread relation evidence. config: rootMarker: QA-THREAD-ROOT-OK