diff --git a/.github/workflows/qa-live-telegram-convex.yml b/.github/workflows/qa-live-telegram-convex.yml index 81a5b904562..fe333e3bb8f 100644 --- a/.github/workflows/qa-live-telegram-convex.yml +++ b/.github/workflows/qa-live-telegram-convex.yml @@ -161,6 +161,7 @@ jobs: OPENCLAW_QA_CONVEX_SITE_URL: ${{ secrets.OPENCLAW_QA_CONVEX_SITE_URL }} OPENCLAW_QA_CONVEX_SECRET_CI: ${{ secrets.OPENCLAW_QA_CONVEX_SECRET_CI }} OPENCLAW_QA_REDACT_PUBLIC_METADATA: "1" + OPENCLAW_QA_TELEGRAM_CAPTURE_CONTENT: "1" INPUT_SCENARIO: ${{ inputs.scenario }} run: | set -euo pipefail diff --git a/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.test.ts b/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.test.ts index f4481b0e984..a5ab455d020 100644 --- a/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.test.ts +++ b/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.test.ts @@ -436,7 +436,7 @@ describe("telegram live qa runtime", () => { ]); }); - it("redacts observed message metadata in public mode even when content capture is requested", () => { + it("keeps observed message content in public mode when capture is requested", () => { const redacted = __testing.buildObservedMessagesArtifact({ includeContent: true, redactMetadata: true, @@ -463,12 +463,14 @@ describe("telegram live qa runtime", () => { senderIsBot: true, inlineButtonCount: 1, mediaKinds: ["photo"], + text: "secret text", + caption: "secret caption", }, ]); expect(redacted[0]).not.toHaveProperty("timestamp"); expect(redacted[0]).not.toHaveProperty("inlineButtons"); - expect(redacted[0]).not.toHaveProperty("text"); - expect(redacted[0]).not.toHaveProperty("caption"); + expect(redacted[0]).not.toHaveProperty("senderId"); + expect(redacted[0]).not.toHaveProperty("senderUsername"); }); it("keeps raw timestamp and inline button text when metadata redaction is disabled", () => { @@ -566,6 +568,7 @@ describe("telegram live qa runtime", () => { expect(message).toContain("- sutBotId: "); expect(message).toContain("- sutUsername: "); expect(message).toContain("- driverMessageId: "); + expect(message).toContain("timed out"); expect(message).not.toContain("-100123"); expect(message).not.toContain("driver_bot"); expect(message).not.toContain("sut_bot"); diff --git a/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts b/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts index 3fa82a35a49..c41a47de653 100644 --- a/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts +++ b/extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts @@ -639,7 +639,7 @@ function buildObservedMessagesArtifact(params: { senderUsername: message.senderUsername, replyToMessageId: message.replyToMessageId, }; - if (!params.includeContent || params.redactMetadata) { + if (!params.includeContent) { return base; } return { @@ -803,9 +803,7 @@ function canaryFailureMessage(params: { sutUsername: string; }) { const error = params.error; - const details = params.redactMetadata - ? "details redacted (OPENCLAW_QA_REDACT_PUBLIC_METADATA=1)" - : formatErrorMessage(error); + const details = formatErrorMessage(error); const phase = isTelegramQaCanaryError(error) ? error.phase : "unknown"; const canonicalContext = new Set([ "groupId", @@ -906,8 +904,7 @@ export async function runTelegramQaLive(params: { const scenarios = findScenario(params.scenarioIds); const observedMessages: TelegramObservedMessage[] = []; const redactPublicMetadata = isTruthyOptIn(process.env[QA_REDACT_PUBLIC_METADATA_ENV]); - const includeObservedMessageContent = - !redactPublicMetadata && isTruthyOptIn(process.env[TELEGRAM_QA_CAPTURE_CONTENT_ENV]); + const includeObservedMessageContent = isTruthyOptIn(process.env[TELEGRAM_QA_CAPTURE_CONTENT_ENV]); const startedAt = new Date().toISOString(); const scenarioResults: TelegramQaScenarioResult[] = []; const cleanupIssues: string[] = []; @@ -1038,9 +1035,7 @@ export async function runTelegramQaLive(params: { id: scenario.id, title: scenario.title, status: "fail", - details: redactPublicMetadata - ? "details redacted (OPENCLAW_QA_REDACT_PUBLIC_METADATA=1)" - : formatErrorMessage(error), + details: formatErrorMessage(error), }); } assertLeaseHealthy();