test(qa): annotate live transport RTT measurements
Some checks are pending
CI / -1 (push) Blocked by required conditions
CI / preflight (push) Waiting to run
CI / security-fast (push) Waiting to run
CI / build-artifacts (push) Blocked by required conditions
CI / (push) Blocked by required conditions
CI / -2 (push) Blocked by required conditions
CI / checks-node-compat-node22 (push) Blocked by required conditions
CI / -3 (push) Blocked by required conditions
CI / check-dependencies (push) Blocked by required conditions
CI / check-guards (push) Blocked by required conditions
CI / check-lint (push) Blocked by required conditions
CI / check-prod-types (push) Blocked by required conditions
CI / check-test-types (push) Blocked by required conditions
CI / check-additional-boundaries-a (push) Blocked by required conditions
CI / check-additional-boundaries-bcd (push) Blocked by required conditions
CI / check-additional-extension-bundled (push) Blocked by required conditions
CI / check-additional-extension-channels (push) Blocked by required conditions
CI / check-additional-extension-package-boundary (push) Blocked by required conditions
CI / check-additional-runtime-topology-architecture (push) Blocked by required conditions
CI / check-docs (push) Blocked by required conditions
CI / skills-python (push) Blocked by required conditions
CI / -4 (push) Blocked by required conditions
CI / -5 (push) Blocked by required conditions
CI / macos-swift (push) Blocked by required conditions
CI / -6 (push) Blocked by required conditions
ClawSweeper Dispatch / dispatch (push) Waiting to run
Docs Sync Publish Repo / sync-publish-repo (push) Waiting to run
Docs / docs (push) Waiting to run
Plugin NPM Release / preview_plugins_npm (push) Waiting to run
Plugin NPM Release / Validate release publish approval (push) Blocked by required conditions
Plugin NPM Release / preview_plugin_pack (push) Blocked by required conditions
Plugin NPM Release / publish_plugins_npm (push) Blocked by required conditions
Website Installer Sync / static (push) Waiting to run
Website Installer Sync / linux-docker (push) Waiting to run
Website Installer Sync / macos-installer (push) Waiting to run
Website Installer Sync / windows-installer (push) Waiting to run
Website Installer Sync / sync-website (push) Blocked by required conditions
Workflow Sanity / no-tabs (push) Waiting to run
Workflow Sanity / actionlint (push) Waiting to run
Workflow Sanity / generated-doc-baselines (push) Waiting to run

This commit is contained in:
Peter Steinberger 2026-05-25 15:54:29 +01:00
parent aa702cf3db
commit bb6f37e777
No known key found for this signature in database
4 changed files with 74 additions and 2 deletions

View file

@ -181,7 +181,15 @@ type DiscordQaScenarioResult = {
title: string;
status: "pass" | "fail";
details: string;
requestStartedAt?: string;
responseObservedAt?: string;
rttMs?: number;
rttMeasurement?: {
finalMatchedReplyRttMs: number;
requestStartedAt: string;
responseObservedAt: string;
source: "request-to-observed-message";
};
};
type DiscordQaRunResult = {
@ -1779,7 +1787,9 @@ export async function runDiscordQaLive(params: {
expectedTextIncludes: scenarioRun.expectedTextIncludes,
message: matched.message,
});
const rttMs = computeDiscordRttMs(sent.timestamp, matched.message.timestamp);
const requestStartedAt = sent.timestamp;
const responseObservedAt = matched.message.timestamp;
const rttMs = computeDiscordRttMs(requestStartedAt, responseObservedAt);
scenarioResults.push({
id: scenario.id,
title: scenario.title,
@ -1787,7 +1797,21 @@ export async function runDiscordQaLive(params: {
details: redactPublicMetadata
? "reply matched"
: `reply message ${matched.message.messageId} matched`,
...(rttMs === undefined ? {} : { rttMs }),
...(requestStartedAt === undefined ? {} : { requestStartedAt }),
...(responseObservedAt === undefined ? {} : { responseObservedAt }),
...(rttMs === undefined ||
requestStartedAt === undefined ||
responseObservedAt === undefined
? {}
: {
rttMs,
rttMeasurement: {
finalMatchedReplyRttMs: rttMs,
requestStartedAt,
responseObservedAt,
source: "request-to-observed-message",
},
}),
});
} catch (error) {
if (scenarioRun.kind === "channel-message" && !scenarioRun.expectReply) {

View file

@ -200,6 +200,12 @@ type SlackQaScenarioResult = {
requestStartedAt?: string;
responseObservedAt?: string;
rttMs?: number;
rttMeasurement?: {
finalMatchedReplyRttMs: number;
requestStartedAt: string;
responseObservedAt: string;
source: "approval-request-to-resolution" | "request-to-observed-message";
};
status: "fail" | "pass";
title: string;
};
@ -1859,6 +1865,12 @@ export async function runSlackQaLive(params: {
rttMs: approval.rttMs,
requestStartedAt: approval.requestStartedAt.toISOString(),
responseObservedAt: approval.responseObservedAt.toISOString(),
rttMeasurement: {
finalMatchedReplyRttMs: approval.rttMs,
requestStartedAt: approval.requestStartedAt.toISOString(),
responseObservedAt: approval.responseObservedAt.toISOString(),
source: "approval-request-to-resolution",
},
});
break;
}
@ -1911,6 +1923,12 @@ export async function runSlackQaLive(params: {
rttMs,
requestStartedAt: requestStartedAt.toISOString(),
responseObservedAt: responseObservedAt.toISOString(),
rttMeasurement: {
finalMatchedReplyRttMs: rttMs,
requestStartedAt: requestStartedAt.toISOString(),
responseObservedAt: responseObservedAt.toISOString(),
source: "request-to-observed-message",
},
});
} else {
await waitForSlackNoReply({

View file

@ -133,6 +133,12 @@ type TelegramQaScenarioResult = {
rttMs?: number;
requestStartedAt?: string;
responseObservedAt?: string;
rttMeasurement?: {
finalMatchedReplyRttMs: number;
requestStartedAt: string;
responseObservedAt: string;
source: "request-to-observed-message";
};
sentMessageId?: number;
responseMessageId?: number;
};
@ -1743,6 +1749,12 @@ export async function runTelegramQaLive(params: {
rttMs: canaryTiming.rttMs,
requestStartedAt: canaryTiming.requestStartedAt,
responseObservedAt: canaryTiming.responseObservedAt,
rttMeasurement: {
finalMatchedReplyRttMs: canaryTiming.rttMs,
requestStartedAt: canaryTiming.requestStartedAt,
responseObservedAt: canaryTiming.responseObservedAt,
source: "request-to-observed-message",
},
sentMessageId: redactPublicMetadata ? undefined : canaryTiming.sentMessageId,
responseMessageId: redactPublicMetadata ? undefined : canaryTiming.responseMessageId,
});
@ -1885,6 +1897,12 @@ export async function runTelegramQaLive(params: {
rttMs,
requestStartedAt: firstRequestStartedAt,
responseObservedAt: new Date(lastMatched.observedAtMs).toISOString(),
rttMeasurement: {
finalMatchedReplyRttMs: rttMs,
requestStartedAt: new Date(lastRequestStartedAtMs).toISOString(),
responseObservedAt: new Date(lastMatched.observedAtMs).toISOString(),
source: "request-to-observed-message",
},
sentMessageId: redactPublicMetadata ? undefined : lastSentMessageId,
responseMessageId: redactPublicMetadata ? undefined : lastMatched.message.messageId,
} satisfies TelegramQaScenarioResult;

View file

@ -100,6 +100,12 @@ type WhatsAppQaScenarioResult = {
requestStartedAt?: string;
responseObservedAt?: string;
rttMs?: number;
rttMeasurement?: {
finalMatchedReplyRttMs: number;
requestStartedAt: string;
responseObservedAt: string;
source: "request-to-observed-message";
};
status: "fail" | "pass" | "skip";
title: string;
};
@ -647,6 +653,12 @@ async function runWhatsAppScenario(params: {
rttMs,
requestStartedAt: requestStartedAt.toISOString(),
responseObservedAt: responseObservedAt.toISOString(),
rttMeasurement: {
finalMatchedReplyRttMs: rttMs,
requestStartedAt: requestStartedAt.toISOString(),
responseObservedAt: responseObservedAt.toISOString(),
source: "request-to-observed-message",
},
};
} catch (error) {
preservedGatewayDebug = true;