@@ -451,6 +451,7 @@ async function runUnifiedQaSuite(params: {
451451 const sharedFlowPartitionTasks : QaUnifiedPartitionTask [ ] = [ ] ;
452452 const isolatedFlowPartitionTasks : QaUnifiedPartitionTask [ ] = [ ] ;
453453 const testFilePartitionTasks : QaUnifiedPartitionTask [ ] = [ ] ;
454+ const scriptPartitionTasks : QaUnifiedPartitionTask [ ] = [ ] ;
454455 if ( params . plan . flowScenarios . length > 0 ) {
455456 const sharedFlowScenarios = params . plan . flowScenarios . filter (
456457 ( scenario ) => ! scenarioRequiresIsolatedQaSuiteWorker ( scenario ) ,
@@ -535,13 +536,15 @@ async function runUnifiedQaSuite(params: {
535536 }
536537 }
537538 }
538- if ( params . plan . testFileScenariosByKind . size > 0 ) {
539- testFilePartitionTasks . push ( {
539+ const createTestFilePartitionTask = (
540+ scenariosByKind : ReadonlyMap < QaTestFileExecutionKind , QaTestFileScenario [ ] > ,
541+ ) =>
542+ ( {
540543 weight : 1 ,
541544 run : async ( ) => {
542545 const testFileEvidenceSummaries : QaEvidenceSummaryJson [ ] = [ ] ;
543546 const testFileScenarioResults : QaUnifiedPartitionResult [ "scenarioResults" ] = [ ] ;
544- for ( const [ kind , testFileScenarios ] of params . plan . testFileScenariosByKind ) {
547+ for ( const [ kind , testFileScenarios ] of scenariosByKind ) {
545548 const result = await runQaTestFileSuiteFromRuntime ( {
546549 runParams : {
547550 ...params . runParams ,
@@ -566,14 +569,30 @@ async function runUnifiedQaSuite(params: {
566569 scenarioResults : testFileScenarioResults ,
567570 } ;
568571 } ,
569- } ) ;
572+ } ) satisfies QaUnifiedPartitionTask ;
573+ const concurrentTestFileScenariosByKind = new Map (
574+ [ ...params . plan . testFileScenariosByKind ] . filter ( ( [ kind ] ) => kind !== "script" ) ,
575+ ) ;
576+ if ( concurrentTestFileScenariosByKind . size > 0 ) {
577+ testFilePartitionTasks . push ( createTestFilePartitionTask ( concurrentTestFileScenariosByKind ) ) ;
578+ }
579+ const scriptScenarios = params . plan . testFileScenariosByKind . get ( "script" ) ;
580+ if ( scriptScenarios ?. length ) {
581+ scriptPartitionTasks . push ( createTestFilePartitionTask ( new Map ( [ [ "script" , scriptScenarios ] ] ) ) ) ;
570582 }
571- const partitionTasks = [
583+ const concurrentPartitionTasks = [
572584 ...sharedFlowPartitionTasks ,
573585 ...testFilePartitionTasks ,
574586 ...isolatedFlowPartitionTasks ,
575587 ] ;
576- const partitionResults = await runWeightedUnifiedPartitionTasks ( partitionTasks , concurrency ) ;
588+ const concurrentPartitionResults = await runWeightedUnifiedPartitionTasks (
589+ concurrentPartitionTasks ,
590+ concurrency ,
591+ ) ;
592+ // Script scenarios may rebuild the checkout's shared dist tree. Wait until every
593+ // flow Gateway has stopped so package postbuild cannot invalidate its loaded chunks.
594+ const scriptPartitionResults = await runWeightedUnifiedPartitionTasks ( scriptPartitionTasks , 1 ) ;
595+ const partitionResults = [ ...concurrentPartitionResults , ...scriptPartitionResults ] ;
577596 for ( const partitionResult of partitionResults ) {
578597 for ( const scenarioResult of partitionResult . scenarioResults ) {
579598 scenarioResultsById . set ( scenarioResult . scenarioId , scenarioResult . result ) ;
0 commit comments