@@ -242,16 +242,38 @@ describe("qa scenario catalog", () => {
242242 expect ( readQaScenarioById ( "openai-web-search-minimal" ) . coverage ?. secondary ) . toContain (
243243 "runtime.reasoning-and-cache-controls" ,
244244 ) ;
245- expect (
246- readQaScenarioById ( "openai-web-search-native-assertions" ) . coverage ?. secondary ,
247- ) . toEqual (
248- expect . arrayContaining ( [ "web-search.openai-native-web-search" , "plugins.web-search-and-fetch" ] ) ,
245+ expect ( readQaScenarioById ( "openai-web-search-native-assertions" ) . coverage ?. secondary ) . toEqual (
246+ expect . arrayContaining ( [
247+ "web-search.openai-native-web-search" ,
248+ "plugins.web-search-and-fetch" ,
249+ ] ) ,
249250 ) ;
250251 expect ( readQaScenarioById ( "openwebui-openai-compatible" ) . coverage ?. secondary ) . toEqual (
251252 expect . arrayContaining ( [ "gateway.openai-compatible-apis" , "runtime.hosted-provider-turns" ] ) ,
252253 ) ;
253254 } ) ;
254255
256+ it ( "routes Docker runtime scenarios through the shared lane adapter" , ( ) => {
257+ const scenarioLanes = [
258+ [ "openai-compatible-chat-tools" , "openai-chat-tools" ] ,
259+ [ "openai-web-search-minimal" , "openai-web-search-minimal" ] ,
260+ [ "openai-web-search-native-assertions" , "openai-web-search-minimal" ] ,
261+ [ "openwebui-openai-compatible" , "openwebui" ] ,
262+ [ "plugin-lifecycle-probe" , "plugin-lifecycle-matrix" ] ,
263+ [ "packaged-bundled-plugin-install-uninstall" , "bundled-plugin-install-uninstall" ] ,
264+ ] as const ;
265+
266+ for ( const [ scenarioId , lane ] of scenarioLanes ) {
267+ const execution = readQaScenarioById ( scenarioId ) . execution ;
268+ expect ( execution . kind ) . toBe ( "script" ) ;
269+ if ( execution . kind !== "script" ) {
270+ throw new Error ( `expected script scenario, got ${ execution . kind } ` ) ;
271+ }
272+ expect ( execution . path ) . toBe ( "test/e2e/qa-lab/runtime/docker-e2e-lane.ts" ) ;
273+ expect ( execution . args ) . toStrictEqual ( [ "--lane" , lane ] ) ;
274+ }
275+ } ) ;
276+
255277 it ( "loads runtime parity tier metadata for first-hour and soak lanes" , ( ) => {
256278 const firstHour = readQaScenarioById ( "runtime-first-hour-20-turn" ) ;
257279 const soak = readQaScenarioById ( "runtime-soak-100-turn" ) ;
0 commit comments