diff --git a/src/generated_scene/generator.rs b/src/generated_scene/generator.rs index bb8e0a7..5f2d1fc 100644 --- a/src/generated_scene/generator.rs +++ b/src/generated_scene/generator.rs @@ -405,16 +405,14 @@ fn infer_modes_from_facts(facts: &DeterministicSceneFacts) -> Vec { /// If modes are already non-empty, returns a clone as-is. /// If modes are empty but `api_endpoints` is non-empty, constructs a default mode from the first endpoint. fn ensure_modes_populated(scene_ir: &SceneIr) -> SceneIr { + if !scene_ir.modes.is_empty() { + return scene_ir.clone(); + } + if scene_ir.api_endpoints.is_empty() { + return scene_ir.clone(); + } + let mut adapted = scene_ir.clone(); - - if !adapted.modes.is_empty() { - return adapted; - } - - if adapted.api_endpoints.is_empty() { - return adapted; - } - let first_endpoint = adapted.api_endpoints[0].clone(); let default_mode = ModeIr { name: "default".to_string(), @@ -780,7 +778,12 @@ fn compile_scene(scene_ir: &SceneIr, analysis: &SceneSourceAnalysis, tool_name: _ => { // SingleRequestTable, PageStateEval — fallback to multi-mode with auto-wrapped default mode let adapted = ensure_modes_populated(scene_ir); - compile_multi_mode_request(&adapted) + if adapted.modes.is_empty() { + // PageStateEval or SingleRequestTable with no endpoints — generate a minimal skeleton + compile_simple_request_script(&adapted, "queryData") + } else { + compile_multi_mode_request(&adapted) + } } }; let browser_test = browser_script_test(tool_name, scene_ir);