@@ -114,6 +114,7 @@ interface QualificationReporterOptions {
114114 baseUrl : string ;
115115 outputFile : string ;
116116 qualificationRequested : boolean ;
117+ requireCleanTelemetry : boolean ;
117118 releaseBinding : z . infer < typeof PublicationReleaseBindingSchema > | null ;
118119 repositoryRoot : string ;
119120 runtimeRoot : string ;
@@ -399,6 +400,65 @@ function exactViewportCoverage(journeys: readonly CapturedJourney[]): boolean {
399400 ) ;
400401}
401402
403+ export function hasCleanAttemptZeroTelemetry (
404+ journey : CapturedJourney ,
405+ expectedAuthority : "CLOAK_CDP_ENDPOINT" | "stock-chromium-design-review" ,
406+ ) : boolean {
407+ const expectedHttpErrors =
408+ REQUIRED_CLOAK_EXPECTED_HTTP_ERRORS_BY_ID [
409+ journey . id as keyof typeof REQUIRED_CLOAK_EXPECTED_HTTP_ERRORS_BY_ID
410+ ] ;
411+ const expectedRequestFailures =
412+ REQUIRED_CLOAK_EXPECTED_REQUEST_FAILURES_BY_ID [
413+ journey . id as keyof typeof REQUIRED_CLOAK_EXPECTED_REQUEST_FAILURES_BY_ID
414+ ] ;
415+ return (
416+ expectedHttpErrors !== undefined &&
417+ expectedRequestFailures !== undefined &&
418+ journey . status === "passed" &&
419+ journey . expectedStatus === "passed" &&
420+ journey . attempt === 0 &&
421+ journey . durationMs > 0 &&
422+ journey . assertionCount > 0 &&
423+ journey . unexpectedConsoleErrors === 0 &&
424+ JSON . stringify ( journey . expectedHttpErrorResponses ) ===
425+ JSON . stringify ( expectedHttpErrors ) &&
426+ JSON . stringify ( journey . observedHttpErrorResponses ) ===
427+ JSON . stringify ( journey . expectedHttpErrorResponses ) &&
428+ journey . unexpectedHttpErrorResponses === 0 &&
429+ JSON . stringify ( journey . expectedRequestFailures ) ===
430+ JSON . stringify ( expectedRequestFailures ) &&
431+ journey . expectedRequestFailures . length === journey . expectedFailedRequests &&
432+ JSON . stringify ( journey . observedRequestFailures ) ===
433+ JSON . stringify ( journey . expectedRequestFailures ) &&
434+ journey . observedFailedRequests === journey . expectedFailedRequests &&
435+ journey . unexpectedFailedRequests === 0 &&
436+ journey . browserVersion . trim ( ) !== "" &&
437+ journey . browserVersion !== "unavailable" &&
438+ journey . browserAuthority === expectedAuthority &&
439+ journey . telemetryValid
440+ ) ;
441+ }
442+
443+ export function hasCleanProductionLane ( input : {
444+ authority : RawRunAuthority ;
445+ journeys : readonly CapturedJourney [ ] ;
446+ playwrightStatus : FullResult [ "status" ] ;
447+ rootErrors : number ;
448+ } ) : boolean {
449+ return (
450+ input . playwrightStatus === "passed" &&
451+ input . rootErrors === 0 &&
452+ input . journeys . length === 1 &&
453+ hasCleanAttemptZeroTelemetry (
454+ input . journeys [ 0 ] ! ,
455+ input . authority === "CLOAKBROWSER"
456+ ? "CLOAK_CDP_ENDPOINT"
457+ : "stock-chromium-design-review" ,
458+ )
459+ ) ;
460+ }
461+
402462export function buildCloakBrowserRawRun ( input : BuildRawRunInput ) {
403463 const expectedJourneyAuthority =
404464 input . authority === "CLOAKBROWSER"
@@ -414,39 +474,8 @@ export function buildCloakBrowserRawRun(input: BuildRawRunInput) {
414474 ( input . rootErrors ?? 0 ) === 0 &&
415475 exactJourneyRegistry ( input . journeys ) &&
416476 exactViewportCoverage ( input . journeys ) &&
417- input . journeys . every (
418- ( journey ) =>
419- journey . status === "passed" &&
420- journey . expectedStatus === "passed" &&
421- journey . attempt === 0 &&
422- journey . durationMs > 0 &&
423- journey . assertionCount > 0 &&
424- journey . unexpectedConsoleErrors === 0 &&
425- JSON . stringify ( journey . expectedHttpErrorResponses ) ===
426- JSON . stringify (
427- REQUIRED_CLOAK_EXPECTED_HTTP_ERRORS_BY_ID [
428- journey . id as keyof typeof REQUIRED_CLOAK_EXPECTED_HTTP_ERRORS_BY_ID
429- ] ,
430- ) &&
431- JSON . stringify ( journey . observedHttpErrorResponses ) ===
432- JSON . stringify ( journey . expectedHttpErrorResponses ) &&
433- journey . unexpectedHttpErrorResponses === 0 &&
434- JSON . stringify ( journey . expectedRequestFailures ) ===
435- JSON . stringify (
436- REQUIRED_CLOAK_EXPECTED_REQUEST_FAILURES_BY_ID [
437- journey . id as keyof typeof REQUIRED_CLOAK_EXPECTED_REQUEST_FAILURES_BY_ID
438- ] ,
439- ) &&
440- journey . expectedRequestFailures . length ===
441- journey . expectedFailedRequests &&
442- JSON . stringify ( journey . observedRequestFailures ) ===
443- JSON . stringify ( journey . expectedRequestFailures ) &&
444- journey . observedFailedRequests === journey . expectedFailedRequests &&
445- journey . unexpectedFailedRequests === 0 &&
446- journey . browserVersion . trim ( ) !== "" &&
447- journey . browserVersion !== "unavailable" &&
448- journey . browserAuthority === expectedJourneyAuthority &&
449- journey . telemetryValid ,
477+ input . journeys . every ( ( journey ) =>
478+ hasCleanAttemptZeroTelemetry ( journey , expectedJourneyAuthority ) ,
450479 ) &&
451480 new Set ( input . journeys . map ( ( journey ) => journey . browserVersion ) ) . size === 1 ;
452481
@@ -562,7 +591,8 @@ export default class CounterLabQualificationReporter implements Reporter {
562591 ) : Promise < { status ?: FullResult [ "status" ] } | undefined > {
563592 if (
564593 this . capturedJourneys . length === 0 &&
565- ! this . options . qualificationRequested
594+ ! this . options . qualificationRequested &&
595+ ! this . options . requireCleanTelemetry
566596 ) {
567597 return undefined ;
568598 }
@@ -593,7 +623,18 @@ export default class CounterLabQualificationReporter implements Reporter {
593623 flag : "wx" ,
594624 mode : 0o600 ,
595625 } ) ;
596- if ( this . options . qualificationRequested && report . status !== "PASSED" ) {
626+ const cleanTelemetryPassed =
627+ ! this . options . requireCleanTelemetry ||
628+ hasCleanProductionLane ( {
629+ authority : this . options . authority ,
630+ journeys : this . capturedJourneys ,
631+ playwrightStatus : result . status ,
632+ rootErrors : this . rootErrors ,
633+ } ) ;
634+ if (
635+ ( this . options . qualificationRequested && report . status !== "PASSED" ) ||
636+ ! cleanTelemetryPassed
637+ ) {
597638 return { status : "failed" } ;
598639 }
599640 return undefined ;
0 commit comments