test: stabilize release qa gates · openclaw/openclaw@af62fd4
steipete
·
2026-05-18
·
via Recent Commits to openclaw:main
| Original file line number | Diff line number | Diff line change |
|---|
@@ -660,7 +660,7 @@ jobs:
|
660 | 660 | published_upgrade_survivor_baselines: ${{ needs.resolve_target.outputs.run_release_soak == 'true' && 'last-stable-4 2026.4.23 2026.5.2 2026.4.15' || '' }} |
661 | 661 | published_upgrade_survivor_scenarios: ${{ needs.resolve_target.outputs.run_release_soak == 'true' && 'reported-issues' || '' }} |
662 | 662 | telegram_mode: mock-openai |
663 | | -telegram_scenarios: telegram-help-command,telegram-commands-command,telegram-tools-compact-command,telegram-whoami-command,telegram-status-command,telegram-other-bot-command-gating,telegram-context-command,telegram-mentioned-message-reply,telegram-reply-chain-exact-marker,telegram-stream-final-single-message,telegram-long-final-reuses-preview,telegram-mention-gating |
| 663 | +telegram_scenarios: telegram-help-command,telegram-commands-command,telegram-tools-compact-command,telegram-whoami-command,telegram-status-command,telegram-other-bot-command-gating,telegram-context-command,telegram-mentioned-message-reply,telegram-long-final-reuses-preview,telegram-mention-gating |
664 | 664 | secrets: |
665 | 665 | OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} |
666 | 666 | OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }} |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -483,8 +483,6 @@ describe("telegram live qa runtime", () => {
|
483 | 483 | "telegram-other-bot-command-gating", |
484 | 484 | "telegram-context-command", |
485 | 485 | "telegram-mentioned-message-reply", |
486 | | -"telegram-reply-chain-exact-marker", |
487 | | -"telegram-stream-final-single-message", |
488 | 486 | "telegram-long-final-reuses-preview", |
489 | 487 | "telegram-mention-gating", |
490 | 488 | ], |
@@ -500,8 +498,11 @@ describe("telegram live qa runtime", () => {
|
500 | 498 | false, |
501 | 499 | ); |
502 | 500 | const streamSingle = requireScenario(catalog, "telegram-stream-final-single-message"); |
503 | | -expect(streamSingle.defaultEnabled).toBe(true); |
| 501 | +expect(streamSingle.defaultEnabled).toBe(false); |
504 | 502 | expect(streamSingle.regressionRefs).toEqual(["openclaw/openclaw#39905"]); |
| 503 | +expect(requireScenario(catalog, "telegram-reply-chain-exact-marker").defaultEnabled).toBe( |
| 504 | +false, |
| 505 | +); |
505 | 506 | }); |
506 | 507 | |
507 | 508 | it("tracks Telegram live coverage against the shared transport contract", () => { |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -396,8 +396,10 @@ const TELEGRAM_QA_SCENARIOS: TelegramQaScenarioDefinition[] = [
|
396 | 396 | { |
397 | 397 | id: "telegram-reply-chain-exact-marker", |
398 | 398 | title: "Telegram reply-chain exact marker", |
| 399 | +defaultEnabled: false, |
399 | 400 | defaultProviderModes: ["mock-openai"], |
400 | | -rationale: "Mock-backed exact-marker check proves Telegram final text survives reply handling.", |
| 401 | +rationale: |
| 402 | +"Opt-in mock-backed exact-marker check for Telegram final text through reply handling.", |
401 | 403 | timeoutMs: 75_000, |
402 | 404 | buildRun: (sutUsername) => |
403 | 405 | telegramQaStepRun({ |
@@ -412,8 +414,9 @@ const TELEGRAM_QA_SCENARIOS: TelegramQaScenarioDefinition[] = [
|
412 | 414 | { |
413 | 415 | id: "telegram-stream-final-single-message", |
414 | 416 | title: "Telegram streamed final stays one message", |
| 417 | +defaultEnabled: false, |
415 | 418 | defaultProviderModes: ["mock-openai"], |
416 | | -rationale: "Regression guard for duplicate final replies from Telegram streaming paths.", |
| 419 | +rationale: "Opt-in regression guard for duplicate final replies from Telegram streaming paths.", |
417 | 420 | regressionRefs: ["openclaw/openclaw#39905"], |
418 | 421 | timeoutMs: 75_000, |
419 | 422 | buildRun: (sutUsername) => |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -303,11 +303,19 @@ export async function runThreadIsolationScenario(context: MatrixQaScenarioContex
|
303 | 303 | export async function runSubagentThreadSpawnScenario(context: MatrixQaScenarioContext) { |
304 | 304 | const { client, startSince } = await primeMatrixQaDriverScenarioClient(context); |
305 | 305 | const childToken = buildMatrixQaToken("MATRIX_QA_SUBAGENT_CHILD"); |
| 306 | +const spawnArgs = { |
| 307 | +task: `Finish with exactly ${childToken}.`, |
| 308 | +label: "matrix-thread-subagent", |
| 309 | +thread: true, |
| 310 | +mode: "session", |
| 311 | +runTimeoutSeconds: 120, |
| 312 | +}; |
306 | 313 | const triggerBody = [ |
307 | | -`${context.sutUserId} For this QA check, call the sessions_spawn tool now.`, |
308 | | -`Use exactly these arguments: task="Finish with exactly ${childToken}.", label="matrix-thread-subagent", thread=true, mode="session", runTimeoutSeconds=120.`, |
| 314 | +`${context.sutUserId} Run this exact OpenClaw Matrix thread-spawn QA check. Use tool calls, not prose.`, |
| 315 | +`Step 1: call sessions_spawn with exactly this JSON input: ${JSON.stringify(spawnArgs)}.`, |
| 316 | +'Step 2: after spawn returns status="accepted", wait for the child session reply in the spawned Matrix thread.', |
309 | 317 | "Do not omit thread=true; the child must bind to this Matrix thread.", |
310 | | -"Do not write the child token in the parent response.", |
| 318 | +`Do not write ${childToken} in the parent response.`, |
311 | 319 | ].join(" "); |
312 | 320 | const driverEventId = await client.sendTextMessage({ |
313 | 321 | body: triggerBody, |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -2694,7 +2694,7 @@ describe("matrix live qa scenarios", () => {
|
2694 | 2694 | })) |
2695 | 2695 | .mockImplementationOnce(async () => { |
2696 | 2696 | const childToken = |
2697 | | -/task="Finish with exactly ([^".]+)\./.exec( |
| 2697 | +/"task":"Finish with exactly ([^".]+)\./.exec( |
2698 | 2698 | mockMessageBody(sendTextMessage, "sendTextMessage"), |
2699 | 2699 | )?.[1] ?? "MATRIX_QA_SUBAGENT_CHILD_FIXED"; |
2700 | 2700 | return { |
@@ -2766,7 +2766,11 @@ describe("matrix live qa scenarios", () => {
|
2766 | 2766 | expect(artifacts.threadRootEventId).toBe("$subagent-thread-root"); |
2767 | 2767 | |
2768 | 2768 | expectSentTextMessage(sendTextMessage, { |
2769 | | -bodyIncludes: ["call the sessions_spawn tool now", "thread=true", "runTimeoutSeconds=120"], |
| 2769 | +bodyIncludes: [ |
| 2770 | +"call sessions_spawn with exactly this JSON input", |
| 2771 | +'"thread":true', |
| 2772 | +'"runTimeoutSeconds":120', |
| 2773 | +], |
2770 | 2774 | mentionUserIds: ["@sut:matrix-qa.test"], |
2771 | 2775 | roomId: "!main:matrix-qa.test", |
2772 | 2776 | }); |
|
| Original file line number | Diff line number | Diff line change |
|---|
@@ -614,7 +614,7 @@ describe("package artifact reuse", () => {
|
614 | 614 | ); |
615 | 615 | expect(workflow).toContain("telegram_mode: mock-openai"); |
616 | 616 | expect(workflow).toContain( |
617 | | -"telegram_scenarios: telegram-help-command,telegram-commands-command,telegram-tools-compact-command,telegram-whoami-command,telegram-status-command,telegram-other-bot-command-gating,telegram-context-command,telegram-mentioned-message-reply,telegram-reply-chain-exact-marker,telegram-stream-final-single-message,telegram-long-final-reuses-preview,telegram-mention-gating", |
| 617 | +"telegram_scenarios: telegram-help-command,telegram-commands-command,telegram-tools-compact-command,telegram-whoami-command,telegram-status-command,telegram-other-bot-command-gating,telegram-context-command,telegram-mentioned-message-reply,telegram-long-final-reuses-preview,telegram-mention-gating", |
618 | 618 | ); |
619 | 619 | expect(workflow).toContain("ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}"); |
620 | 620 | expect(workflow).toContain("ANTHROPIC_API_TOKEN: ${{ secrets.ANTHROPIC_API_TOKEN }}"); |
|
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。