use super::*;

pub(super) fn manifest_specs() -> Vec<FixtureSpec> {
    vec![
        FixtureSpec {
            id: "cantilever_gpu_provider",
            description: "canonical linear static fixture with provider-backed GPU residency",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::LinearStatic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(32),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "cantilever_gpu_fallback",
            description: "canonical linear static fixture with no provider fallback",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::LinearStatic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: Some(ParityTolerance {
                abs: 1e-12,
                rel: 1e-12,
            }),
            gpu_mode: Some(GpuMode::WithoutProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(0),
            min_solver_device_apply_k_ratio: Some(0.0),
            expected_solver_backend: Some("cpu_reference"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "cantilever_load_sweep_gpu_provider",
            description: "larger load sweep fixture with provider-backed GPU residency",
            model: || fixture_model(FixtureId::CantileverLoadSweep),
            run_kind: AnalysisRunKind::LinearStatic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(32),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "cantilever_large_load_sweep_gpu_provider",
            description: "extra-large load sweep fixture with provider-backed GPU residency",
            model: || fixture_model(FixtureId::CantileverLargeLoadSweep),
            run_kind: AnalysisRunKind::LinearStatic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(64),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "structural_axial_bar_reference_gpu_provider",
            description: "axial bar structural reference fixture with provider-backed GPU residency",
            model: || fixture_model(FixtureId::StructuralAxialBarReference),
            run_kind: AnalysisRunKind::LinearStatic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(32),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "structural_beam_bending_reference_gpu_provider",
            description:
                "beam bending structural reference fixture with provider-backed GPU residency",
            model: || fixture_model(FixtureId::StructuralBeamBendingReference),
            run_kind: AnalysisRunKind::LinearStatic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(32),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "structural_beam_cantilever_end_moment_reference_cpu",
            description: "beam cantilever end moment reference fixture with rotational DOFs",
            model: || fixture_model(FixtureId::StructuralBeamCantileverEndMomentReference),
            run_kind: AnalysisRunKind::LinearStatic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: Some("cpu_reference"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "structural_beam_torsion_reference_cpu",
            description: "beam torsion reference fixture with rotational DOFs",
            model: || fixture_model(FixtureId::StructuralBeamTorsionReference),
            run_kind: AnalysisRunKind::LinearStatic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: Some("cpu_reference"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "structural_beam_force_and_moment_reference_cpu",
            description: "beam force and moment superposition reference fixture",
            model: || fixture_model(FixtureId::StructuralBeamForceAndMomentReference),
            run_kind: AnalysisRunKind::LinearStatic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: Some("cpu_reference"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "structural_shell_plate_moment_reference_cpu",
            description: "shell plate moment reference fixture with rotational DOFs",
            model: || fixture_model(FixtureId::StructuralShellPlateMomentReference),
            run_kind: AnalysisRunKind::LinearStatic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: Some("cpu_reference"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "multi_material_assembly_gpu_provider",
            description:
                "multi-material, multi-load assembly fixture with provider-backed GPU residency",
            model: || fixture_model(FixtureId::MultiMaterialAssembly),
            run_kind: AnalysisRunKind::LinearStatic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(false),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(48),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "modal_large_cpu",
            description:
                "large modal fixture with thresholded orthogonality/separation diagnostics",
            model: || fixture_model(FixtureId::ModalLarge),
            run_kind: AnalysisRunKind::Modal,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(false),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: Some(8),
            transient_step_count: None,
            max_modal_orthogonality_offdiag: Some(5.0e-3),
            min_modal_relative_frequency_separation: Some(1.0e-5),
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "modal_large_gpu_provider",
            description: "large modal fixture with provider-backed field residency",
            model: || fixture_model(FixtureId::ModalLarge),
            run_kind: AnalysisRunKind::Modal,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(false),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(96),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: Some(8),
            transient_step_count: None,
            max_modal_orthogonality_offdiag: Some(5.0e-3),
            min_modal_relative_frequency_separation: Some(1.0e-5),
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: Some(2.8),
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "modal_large_gpu_fallback",
            description: "large modal fixture with no-provider host fallback",
            model: || fixture_model(FixtureId::ModalLarge),
            run_kind: AnalysisRunKind::Modal,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(false),
            parity_tolerance: Some(ParityTolerance {
                abs: 1e-12,
                rel: 1e-12,
            }),
            gpu_mode: Some(GpuMode::WithoutProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(0),
            min_solver_device_apply_k_ratio: Some(0.0),
            expected_solver_backend: Some("cpu_reference"),
            modal_mode_count: Some(8),
            transient_step_count: None,
            max_modal_orthogonality_offdiag: Some(5.0e-3),
            min_modal_relative_frequency_separation: Some(1.0e-5),
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "modal_large_cpu_stress16",
            description: "large modal fixture stress run at 16 modes",
            model: || fixture_model(FixtureId::ModalLarge),
            run_kind: AnalysisRunKind::Modal,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(false),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: Some(16),
            transient_step_count: None,
            max_modal_orthogonality_offdiag: Some(8.0e-3),
            min_modal_relative_frequency_separation: Some(5.0e-6),
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "modal_large_gpu_provider_stress16",
            description: "large modal fixture GPU provider stress run at 16 modes",
            model: || fixture_model(FixtureId::ModalLarge),
            run_kind: AnalysisRunKind::Modal,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(false),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(144),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: Some(16),
            transient_step_count: None,
            max_modal_orthogonality_offdiag: Some(8.0e-3),
            min_modal_relative_frequency_separation: Some(5.0e-6),
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: Some(2.2),
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "acoustic_harmonic_cpu",
            description: "acoustic harmonic Helmholtz fixture on cpu",
            model: || fixture_model(FixtureId::ModalLarge),
            run_kind: AnalysisRunKind::Acoustic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "acoustic_harmonic_gpu_provider",
            description: "acoustic harmonic Helmholtz fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::ModalLarge),
            run_kind: AnalysisRunKind::Acoustic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(48),
            min_solver_device_apply_k_ratio: Some(0.0),
            expected_solver_backend: Some("cpu_reference"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "acoustic_harmonic_gpu_fallback",
            description: "acoustic harmonic Helmholtz fixture with no-provider host fallback",
            model: || fixture_model(FixtureId::ModalLarge),
            run_kind: AnalysisRunKind::Acoustic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: Some(ParityTolerance {
                abs: 1e-12,
                rel: 1e-12,
            }),
            gpu_mode: Some(GpuMode::WithoutProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(0),
            min_solver_device_apply_k_ratio: Some(0.0),
            expected_solver_backend: Some("cpu_reference"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "acoustic_harmonic_missing_source",
            description: "acoustic harmonic fixture rejects models without acoustic pressure source loads",
            model: || fixture_model(FixtureId::ModalLarge),
            run_kind: AnalysisRunKind::Acoustic,
            expect_validate_error: None,
            expect_run_error: Some("RM.FEA.RUN_ACOUSTIC.MISSING_ACOUSTIC_SOURCE"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "acoustic_harmonic_missing_boundary",
            description: "acoustic harmonic fixture rejects models without acoustic boundary conditions",
            model: || fixture_model(FixtureId::ModalLarge),
            run_kind: AnalysisRunKind::Acoustic,
            expect_validate_error: None,
            expect_run_error: Some("RM.FEA.RUN_ACOUSTIC.MISSING_ACOUSTIC_BOUNDARY"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "transient_long_cpu",
            description: "long transient fixture with thresholded stability diagnostics",
            model: || fixture_model(FixtureId::TransientLong),
            run_kind: AnalysisRunKind::Transient,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: Some(24),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: Some(1.0e-2),
            max_transient_energy_growth_ratio: Some(5.0),
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "transient_long_gpu_provider",
            description: "long transient fixture with provider-backed field residency",
            model: || fixture_model(FixtureId::TransientLong),
            run_kind: AnalysisRunKind::Transient,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(48),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(24),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: Some(1.0e-2),
            max_transient_energy_growth_ratio: Some(5.0),
            min_gpu_speedup_ratio: Some(2.0),
            min_transient_cache_hit_ratio: Some(0.2),
            max_transient_cache_misses: Some(24.0),
        },
        FixtureSpec {
            id: "transient_long_gpu_fallback",
            description: "long transient fixture with no-provider host fallback",
            model: || fixture_model(FixtureId::TransientLong),
            run_kind: AnalysisRunKind::Transient,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: Some(ParityTolerance {
                abs: 1e-12,
                rel: 1e-12,
            }),
            gpu_mode: Some(GpuMode::WithoutProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(0),
            min_solver_device_apply_k_ratio: Some(0.0),
            expected_solver_backend: Some("cpu_reference"),
            modal_mode_count: None,
            transient_step_count: Some(24),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: Some(1.0e-2),
            max_transient_energy_growth_ratio: Some(5.0),
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "transient_shock_cpu",
            description: "challenging transient fixture with mixed-load shock profile",
            model: || fixture_model(FixtureId::TransientShock),
            run_kind: AnalysisRunKind::Transient,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: Some(48),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: Some(2.0e-2),
            max_transient_energy_growth_ratio: Some(8.0),
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "transient_shock_gpu_provider",
            description: "challenging transient fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::TransientShock),
            run_kind: AnalysisRunKind::Transient,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(96),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(48),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: Some(2.0e-2),
            max_transient_energy_growth_ratio: Some(8.0),
            min_gpu_speedup_ratio: Some(1.8),
            min_transient_cache_hit_ratio: Some(0.15),
            max_transient_cache_misses: Some(40.0),
        },
        FixtureSpec {
            id: "cfd_steady_cpu",
            description: "cfd steady finite-volume fixture on cpu with flow diagnostics",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Cfd,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "cfd_steady_gpu_provider",
            description: "cfd steady finite-volume fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Cfd,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(64),
            min_solver_device_apply_k_ratio: Some(0.0),
            expected_solver_backend: Some("cpu_reference"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "cfd_steady_gpu_fallback",
            description: "cfd steady finite-volume fixture with no-provider host fallback",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Cfd,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: Some(ParityTolerance {
                abs: 1e-12,
                rel: 1e-12,
            }),
            gpu_mode: Some(GpuMode::WithoutProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(0),
            min_solver_device_apply_k_ratio: Some(0.0),
            expected_solver_backend: Some("cpu_reference"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "cfd_transient_cpu",
            description: "cfd transient velocity-pressure fixture on cpu",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Cfd,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "cfd_transient_gpu_provider",
            description: "cfd transient velocity-pressure fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Cfd,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(64),
            min_solver_device_apply_k_ratio: Some(0.0),
            expected_solver_backend: Some("cpu_reference"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "cfd_transient_gpu_fallback",
            description: "cfd transient velocity-pressure fixture with no-provider host fallback",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Cfd,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: Some(ParityTolerance {
                abs: 1e-12,
                rel: 1e-12,
            }),
            gpu_mode: Some(GpuMode::WithoutProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(0),
            min_solver_device_apply_k_ratio: Some(0.0),
            expected_solver_backend: Some("cpu_reference"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "cfd_invalid_domain_options",
            description: "cfd fixture rejects invalid fluid domain parameters",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Cfd,
            expect_validate_error: None,
            expect_run_error: Some("RM.FEA.RUN_CFD.INVALID_OPTIONS"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "cfd_invalid_boundary_conditions",
            description: "cfd fixture rejects incomplete authored boundary conditions",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Cfd,
            expect_validate_error: None,
            expect_run_error: Some("RM.FEA.RUN_CFD.INVALID_BOUNDARY_CONDITIONS"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "cht_coupled_cpu",
            description: "cht coupled channel/interface fixture on cpu with coupled diagnostics",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Cht,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "cht_coupled_channel_slab_cpu",
            description: "cht channel/slab fixture with authored conjugate heat-transfer interface",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Cht,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "cht_coupled_gpu_provider",
            description: "cht coupled channel/interface fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Cht,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(64),
            min_solver_device_apply_k_ratio: Some(0.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "cht_coupled_gpu_fallback",
            description: "cht coupled channel/interface fixture with no-provider host fallback",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Cht,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: Some(ParityTolerance {
                abs: 1e-12,
                rel: 1e-12,
            }),
            gpu_mode: Some(GpuMode::WithoutProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(0),
            min_solver_device_apply_k_ratio: Some(0.0),
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "cht_coupled_invalid_interface_mapping",
            description: "cht coupled fixture rejects structural contact interface mappings",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Cht,
            expect_validate_error: None,
            expect_run_error: Some("RM.FEA.RUN_CHT.INVALID_INTERFACE_MAPPING"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "cht_coupled_invalid_cfd_domain",
            description: "cht coupled fixture rejects invalid fluid domain parameters",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Cht,
            expect_validate_error: None,
            expect_run_error: Some("RM.FEA.RUN_CHT.INVALID_OPTIONS"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "fsi_coupled_cpu",
            description: "fsi coupled partitioned-interface fixture on cpu with coupled diagnostics",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Fsi,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "fsi_coupled_pipe_plate_cpu",
            description: "fsi pipe/plate fixture with authored fluid-structure interface",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Fsi,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "fsi_coupled_gpu_provider",
            description: "fsi coupled partitioned-interface fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Fsi,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(0),
            min_solver_device_apply_k_ratio: Some(0.0),
            expected_solver_backend: Some("cpu_reference"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "fsi_coupled_invalid_interface_mapping",
            description: "fsi coupled fixture rejects structural contact interface mappings",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Fsi,
            expect_validate_error: None,
            expect_run_error: Some("RM.FEA.RUN_FSI.INVALID_INTERFACE_MAPPING"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "fsi_coupled_invalid_cfd_domain",
            description: "fsi coupled fixture rejects invalid fluid domain parameters",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Fsi,
            expect_validate_error: None,
            expect_run_error: Some("RM.FEA.RUN_FSI.INVALID_OPTIONS"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "fsi_coupled_gpu_fallback",
            description: "fsi coupled partitioned-interface fixture with no-provider host fallback",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Fsi,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: Some(ParityTolerance {
                abs: 1e-12,
                rel: 1e-12,
            }),
            gpu_mode: Some(GpuMode::WithoutProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(0),
            min_solver_device_apply_k_ratio: Some(0.0),
            expected_solver_backend: Some("cpu_reference"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "thermo_mech_kickoff_gpu_provider",
            description:
                "phase-1 thermo-mechanical kickoff fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::ThermoMechanicalKickoff),
            run_kind: AnalysisRunKind::Transient,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(96),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(24),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: Some(2.0e-2),
            max_transient_energy_growth_ratio: Some(10.0),
            min_gpu_speedup_ratio: Some(1.2),
            min_transient_cache_hit_ratio: Some(0.1),
            max_transient_cache_misses: Some(48.0),
        },
        FixtureSpec {
            id: "thermo_gradient_benign_gpu_provider",
            description: "thermo gradient benign fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::ThermoGradientBenign),
            run_kind: AnalysisRunKind::Transient,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(112),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(24),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: Some(2.0e-2),
            max_transient_energy_growth_ratio: Some(10.0),
            min_gpu_speedup_ratio: Some(1.2),
            min_transient_cache_hit_ratio: Some(0.1),
            max_transient_cache_misses: Some(52.0),
        },
        FixtureSpec {
            id: "thermo_gradient_pathological_gpu_provider",
            description: "thermo gradient pathological fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::ThermoGradientPathological),
            run_kind: AnalysisRunKind::Transient,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(144),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(28),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: Some(3.5e-2),
            max_transient_energy_growth_ratio: Some(14.0),
            min_gpu_speedup_ratio: Some(1.1),
            min_transient_cache_hit_ratio: Some(0.0),
            max_transient_cache_misses: Some(56.0),
        },
        FixtureSpec {
            id: "thermo_ramp_smooth_gpu_provider",
            description: "smooth thermo ramp fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::ThermoRampSmooth),
            run_kind: AnalysisRunKind::Transient,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(112),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(26),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: Some(2.5e-2),
            max_transient_energy_growth_ratio: Some(12.0),
            min_gpu_speedup_ratio: Some(1.1),
            min_transient_cache_hit_ratio: Some(0.0),
            max_transient_cache_misses: Some(60.0),
        },
        FixtureSpec {
            id: "thermo_ramp_smooth_field_artifact_gpu_provider",
            description: "smooth thermo ramp fixture using artifact-backed thermo field",
            model: || fixture_model(FixtureId::ThermoRampSmooth),
            run_kind: AnalysisRunKind::Transient,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(112),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(26),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: Some(2.5e-2),
            max_transient_energy_growth_ratio: Some(12.0),
            min_gpu_speedup_ratio: Some(1.1),
            min_transient_cache_hit_ratio: Some(0.0),
            max_transient_cache_misses: Some(60.0),
        },
        FixtureSpec {
            id: "thermo_shock_oscillatory_gpu_provider",
            description: "oscillatory thermo shock fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::ThermoShockOscillatory),
            run_kind: AnalysisRunKind::Transient,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(false),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(160),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(30),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: Some(4.5e-2),
            max_transient_energy_growth_ratio: Some(16.0),
            min_gpu_speedup_ratio: Some(1.05),
            min_transient_cache_hit_ratio: Some(0.0),
            max_transient_cache_misses: Some(64.0),
        },
        FixtureSpec {
            id: "thermo_shock_oscillatory_field_artifact_gpu_provider",
            description: "oscillatory thermo shock fixture using artifact-backed thermo field",
            model: || fixture_model(FixtureId::ThermoShockOscillatory),
            run_kind: AnalysisRunKind::Transient,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(false),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(160),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(30),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: Some(4.5e-2),
            max_transient_energy_growth_ratio: Some(16.0),
            min_gpu_speedup_ratio: Some(1.05),
            min_transient_cache_hit_ratio: Some(0.0),
            max_transient_cache_misses: Some(64.0),
        },
        FixtureSpec {
            id: "electro_thermal_joule_benign_gpu_provider",
            description: "benign electro-thermal joule fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::ElectroThermalJouleBenign),
            run_kind: AnalysisRunKind::Transient,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(112),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(24),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: Some(2.0e-2),
            max_transient_energy_growth_ratio: Some(10.0),
            min_gpu_speedup_ratio: Some(1.1),
            min_transient_cache_hit_ratio: Some(0.1),
            max_transient_cache_misses: Some(52.0),
        },
        FixtureSpec {
            id: "electro_thermal_joule_pathological_gpu_provider",
            description:
                "pathological electro-thermal joule fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::ElectroThermalJoulePathological),
            run_kind: AnalysisRunKind::Transient,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(144),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(30),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: Some(4.5e-2),
            max_transient_energy_growth_ratio: Some(16.0),
            min_gpu_speedup_ratio: Some(1.05),
            min_transient_cache_hit_ratio: Some(0.0),
            max_transient_cache_misses: Some(64.0),
        },
        FixtureSpec {
            id: "electro_thermal_invalid_voltage",
            description: "electro-thermal fixture rejects invalid applied voltage",
            model: || fixture_model(FixtureId::ElectroThermalJouleBenign),
            run_kind: AnalysisRunKind::Transient,
            expect_validate_error: None,
            expect_run_error: Some("RM.FEA.RUN_TRANSIENT.INVALID_ELECTRO_THERMAL_OPTIONS"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: Some(24),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "electro_thermal_invalid_conductivity_scale",
            description: "electro-thermal fixture rejects invalid regional conductivity scale",
            model: || fixture_model(FixtureId::ElectroThermalJouleBenign),
            run_kind: AnalysisRunKind::Transient,
            expect_validate_error: None,
            expect_run_error: Some("RM.FEA.RUN_TRANSIENT.INVALID_ELECTRO_THERMAL_OPTIONS"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: Some(24),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "electro_thermal_unmapped_region",
            description: "electro-thermal fixture rejects conductivity scales for unmapped regions",
            model: || fixture_model(FixtureId::ElectroThermalJouleBenign),
            run_kind: AnalysisRunKind::Transient,
            expect_validate_error: None,
            expect_run_error: Some("RM.FEA.RUN_TRANSIENT.INVALID_ELECTRO_THERMAL_OPTIONS"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: Some(24),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "electromagnetic_reference_homogeneous_gpu_provider",
            description: "electromagnetic homogeneous-material reference fixture",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Electromagnetic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(64),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "electromagnetic_reference_heterogeneous_gpu_provider",
            description: "electromagnetic heterogeneous-material reference fixture",
            model: || fixture_model(FixtureId::MultiMaterialAssembly),
            run_kind: AnalysisRunKind::Electromagnetic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(false),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(96),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "electromagnetic_reference_sparse_assignments_gpu_provider",
            description: "electromagnetic sparse-assignment reference fixture",
            model: || fixture_model(FixtureId::MultiMaterialAssembly),
            run_kind: AnalysisRunKind::Electromagnetic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(false),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(112),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "electromagnetic_reference_multiregion_assignments_gpu_provider",
            description: "electromagnetic multi-region assigned-material reference fixture",
            model: || fixture_model(FixtureId::MultiMaterialAssembly),
            run_kind: AnalysisRunKind::Electromagnetic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(false),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(112),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "electromagnetic_reference_overlap_interference_gpu_provider",
            description: "electromagnetic overlap/interference reference fixture",
            model: || fixture_model(FixtureId::MultiMaterialAssembly),
            run_kind: AnalysisRunKind::Electromagnetic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(false),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(112),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "electromagnetic_reference_boundary_kernel_gpu_provider",
            description: "electromagnetic boundary-kernel governance reference fixture",
            model: || fixture_model(FixtureId::MultiMaterialAssembly),
            run_kind: AnalysisRunKind::Electromagnetic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(false),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(128),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "electromagnetic_reference_boundary_penalty_stress_gpu_provider",
            description: "electromagnetic boundary-penalty stress governance fixture",
            model: || fixture_model(FixtureId::MultiMaterialAssembly),
            run_kind: AnalysisRunKind::Electromagnetic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(false),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(128),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "electromagnetic_reference_multi_region_phased_source_gpu_provider",
            description: "electromagnetic multi-region phased-source governance fixture",
            model: || fixture_model(FixtureId::MultiMaterialAssembly),
            run_kind: AnalysisRunKind::Electromagnetic,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(false),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(128),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "electromagnetic_missing_material",
            description: "electromagnetic fixture rejects models without electrical material data",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Electromagnetic,
            expect_validate_error: None,
            expect_run_error: Some(
                "RM.FEA.RUN_ELECTROMAGNETIC.MISSING_ELECTROMAGNETIC_MATERIAL",
            ),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "electromagnetic_missing_source",
            description: "electromagnetic fixture rejects models without current-source loads",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Electromagnetic,
            expect_validate_error: None,
            expect_run_error: Some(
                "RM.FEA.RUN_ELECTROMAGNETIC.MISSING_ELECTROMAGNETIC_SOURCE",
            ),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "electromagnetic_missing_boundary",
            description:
                "electromagnetic fixture rejects models without electromagnetic boundary conditions",
            model: || fixture_model(FixtureId::CantileverLinearStatic),
            run_kind: AnalysisRunKind::Electromagnetic,
            expect_validate_error: None,
            expect_run_error: Some(
                "RM.FEA.RUN_ELECTROMAGNETIC.MISSING_ELECTROMAGNETIC_BOUNDARY",
            ),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "nonlinear_assembly_cpu",
            description: "nonlinear assembly fixture CPU execution",
            model: || fixture_model(FixtureId::NonlinearAssembly),
            run_kind: AnalysisRunKind::Nonlinear,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: Some(24),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "nonlinear_create_model_cpu",
            description: "nonlinear fixture synthesized via fea.create_model",
            model: synthesized_nonlinear_model,
            run_kind: AnalysisRunKind::Nonlinear,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: Some(24),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "nonlinear_assembly_gpu_provider",
            description: "nonlinear assembly fixture provider-backed acceleration",
            model: || fixture_model(FixtureId::NonlinearAssembly),
            run_kind: AnalysisRunKind::Nonlinear,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(96),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(24),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: Some(1.6),
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "nonlinear_assembly_stress_gpu_provider",
            description: "nonlinear stress fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::NonlinearAssemblyStress),
            run_kind: AnalysisRunKind::Nonlinear,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(144),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(32),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: Some(1.4),
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "nonlinear_softening_benchmark_gpu_provider",
            description: "nonlinear softening fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::NonlinearSofteningBenchmark),
            run_kind: AnalysisRunKind::Nonlinear,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(176),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(40),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: Some(1.3),
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "nonlinear_load_path_mix_gpu_provider",
            description: "nonlinear mixed load-path fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::NonlinearLoadPathMix),
            run_kind: AnalysisRunKind::Nonlinear,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(176),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(36),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: Some(1.3),
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "nonlinear_plasticity_benchmark_gpu_provider",
            description: "nonlinear plasticity stress fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::NonlinearLoadPathMix),
            run_kind: AnalysisRunKind::Nonlinear,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(false),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(192),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(36),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: Some(1.2),
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "nonlinear_contact_benchmark_gpu_provider",
            description: "nonlinear contact stress fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::NonlinearLoadPathMix),
            run_kind: AnalysisRunKind::Nonlinear,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(false),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(196),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(36),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: Some(1.2),
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "nonlinear_invalid_plasticity_options",
            description: "nonlinear fixture rejects invalid plasticity constitutive options",
            model: || fixture_model(FixtureId::NonlinearLoadPathMix),
            run_kind: AnalysisRunKind::Nonlinear,
            expect_validate_error: None,
            expect_run_error: Some("RM.FEA.RUN_NONLINEAR.INVALID_OPTIONS"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: Some(36),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "nonlinear_invalid_contact_options",
            description: "nonlinear fixture rejects invalid contact interface options",
            model: || fixture_model(FixtureId::NonlinearLoadPathMix),
            run_kind: AnalysisRunKind::Nonlinear,
            expect_validate_error: None,
            expect_run_error: Some("RM.FEA.RUN_NONLINEAR.INVALID_OPTIONS"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: Some(36),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "nonlinear_contact_frictionless_reference_gpu_provider",
            description:
                "reference-backed frictionless contact fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::NonlinearContactFrictionlessReference),
            run_kind: AnalysisRunKind::Nonlinear,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(176),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(36),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: Some(1.2),
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "nonlinear_contact_frictionless_reference_complex_gpu_provider",
            description: "reference-backed frictionless contact complex fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::NonlinearContactFrictionlessReferenceComplex),
            run_kind: AnalysisRunKind::Nonlinear,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(188),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(40),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: Some(1.2),
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "nonlinear_plastic_hardening_reference_gpu_provider",
            description: "reference-backed elastic-plastic hardening fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::NonlinearPlasticHardeningReference),
            run_kind: AnalysisRunKind::Nonlinear,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(186),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(40),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: Some(1.2),
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "nonlinear_plastic_hardening_reference_complex_gpu_provider",
            description: "reference-backed elastic-plastic hardening complex fixture with provider-backed acceleration",
            model: || fixture_model(FixtureId::NonlinearPlasticHardeningReferenceComplex),
            run_kind: AnalysisRunKind::Nonlinear,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::DeviceRef),
            max_solver_host_sync_count: Some(194),
            min_solver_device_apply_k_ratio: Some(1.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(44),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: Some(1.2),
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "thermal_standalone_ramp_cpu",
            description: "standalone thermal profile fixture on cpu with heat-balance diagnostics",
            model: || {
                let mut model = fixture_model(FixtureId::ThermoRampSmooth);
                model.steps = vec![runmat_analysis_core::AnalysisStep {
                    step_id: "thermal_1".to_string(),
                    kind: runmat_analysis_core::AnalysisStepKind::Thermal,
                }];
                model
            },
            run_kind: AnalysisRunKind::Thermal,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: Some(12),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "thermal_standalone_ramp_gpu_provider",
            description: "standalone thermal profile fixture with provider-backed acceleration",
            model: || {
                let mut model = fixture_model(FixtureId::ThermoRampSmooth);
                model.steps = vec![runmat_analysis_core::AnalysisStep {
                    step_id: "thermal_1".to_string(),
                    kind: runmat_analysis_core::AnalysisStepKind::Thermal,
                }];
                model
            },
            run_kind: AnalysisRunKind::Thermal,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: None,
            gpu_mode: Some(GpuMode::WithProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(32),
            min_solver_device_apply_k_ratio: Some(0.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(12),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "thermal_standalone_ramp_gpu_fallback",
            description: "standalone thermal profile fixture with no-provider host fallback",
            model: || {
                let mut model = fixture_model(FixtureId::ThermoRampSmooth);
                model.steps = vec![runmat_analysis_core::AnalysisStep {
                    step_id: "thermal_1".to_string(),
                    kind: runmat_analysis_core::AnalysisStepKind::Thermal,
                }];
                model
            },
            run_kind: AnalysisRunKind::Thermal,
            expect_validate_error: None,
            expect_run_error: None,
            expected_publishable: Some(true),
            parity_tolerance: Some(ParityTolerance {
                abs: 1e-12,
                rel: 1e-12,
            }),
            gpu_mode: Some(GpuMode::WithoutProvider),
            residency_expectation: Some(ResidencyExpectation::HostFallback),
            max_solver_host_sync_count: Some(0),
            min_solver_device_apply_k_ratio: Some(0.0),
            expected_solver_backend: Some("runtime_tensor"),
            modal_mode_count: None,
            transient_step_count: Some(12),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "thermal_standalone_ramp_invalid_material",
            description: "standalone thermal fixture rejects invalid thermal material values",
            model: || {
                let mut model = fixture_model(FixtureId::ThermoRampSmooth);
                model.steps = vec![runmat_analysis_core::AnalysisStep {
                    step_id: "thermal_invalid_material".to_string(),
                    kind: runmat_analysis_core::AnalysisStepKind::Thermal,
                }];
                model
            },
            run_kind: AnalysisRunKind::Thermal,
            expect_validate_error: None,
            expect_run_error: Some("RM.FEA.RUN_THERMAL.INVALID_THERMAL_MATERIAL"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: Some(12),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "thermal_standalone_ramp_invalid_source",
            description: "standalone thermal fixture rejects invalid heat-source values",
            model: || {
                let mut model = fixture_model(FixtureId::ThermoRampSmooth);
                model.steps = vec![runmat_analysis_core::AnalysisStep {
                    step_id: "thermal_invalid_source".to_string(),
                    kind: runmat_analysis_core::AnalysisStepKind::Thermal,
                }];
                model
            },
            run_kind: AnalysisRunKind::Thermal,
            expect_validate_error: None,
            expect_run_error: Some("RM.FEA.RUN_THERMAL.INVALID_THERMAL_SOURCE"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: Some(12),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "thermal_standalone_ramp_invalid_boundary",
            description: "standalone thermal fixture rejects invalid thermal boundary values",
            model: || {
                let mut model = fixture_model(FixtureId::ThermoRampSmooth);
                model.steps = vec![runmat_analysis_core::AnalysisStep {
                    step_id: "thermal_invalid_boundary".to_string(),
                    kind: runmat_analysis_core::AnalysisStepKind::Thermal,
                }];
                model
            },
            run_kind: AnalysisRunKind::Thermal,
            expect_validate_error: None,
            expect_run_error: Some("RM.FEA.RUN_THERMAL.INVALID_THERMAL_BOUNDARY"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: Some(12),
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "missing_materials",
            description: "invalid fixture must fail validation and run with typed errors",
            model: || fixture_model(FixtureId::MissingMaterials),
            run_kind: AnalysisRunKind::LinearStatic,
            expect_validate_error: Some("RM.FEA.VALIDATE.MISSING_MATERIALS"),
            expect_run_error: Some("RM.FEA.RUN_LINEAR_STATIC.SOLVER_MODEL_INVALID"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "structural_invalid_moment_without_rotational_dofs",
            description: "moment load on a displacement-only structural fixture is rejected",
            model: || fixture_model(FixtureId::StructuralInvalidMomentWithoutRotationalDofs),
            run_kind: AnalysisRunKind::LinearStatic,
            expect_validate_error: None,
            expect_run_error: Some("RM.FEA.RUN_LINEAR_STATIC.SOLVER_MODEL_INVALID"),
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
        FixtureSpec {
            id: "unit_mismatch",
            description: "unit mismatch fixture must fail validation with mismatch code",
            model: || {
                let mut model = fixture_model(FixtureId::CantileverLinearStatic);
                model.units = UnitSystem::Inch;
                model
            },
            run_kind: AnalysisRunKind::LinearStatic,
            expect_validate_error: Some("RM.FEA.VALIDATE.UNIT_MISMATCH"),
            expect_run_error: None,
            expected_publishable: None,
            parity_tolerance: None,
            gpu_mode: None,
            residency_expectation: None,
            max_solver_host_sync_count: None,
            min_solver_device_apply_k_ratio: None,
            expected_solver_backend: None,
            modal_mode_count: None,
            transient_step_count: None,
            max_modal_orthogonality_offdiag: None,
            min_modal_relative_frequency_separation: None,
            max_transient_residual_norm: None,
            max_transient_energy_growth_ratio: None,
            min_gpu_speedup_ratio: None,
            min_transient_cache_hit_ratio: None,
            max_transient_cache_misses: None,
        },
    ]
}

pub(super) fn fixture_manifest(specs: &[FixtureSpec]) -> FixtureManifest {
    FixtureManifest {
        version: "fea-conformance/v1".to_string(),
        fixtures: specs
            .iter()
            .map(|spec| FixtureManifestEntry {
                id: spec.id.to_string(),
                description: spec.description.to_string(),
                run_kind: match spec.run_kind {
                    AnalysisRunKind::LinearStatic => "linear_static".to_string(),
                    AnalysisRunKind::Modal => "modal".to_string(),
                    AnalysisRunKind::Acoustic => "acoustic".to_string(),
                    AnalysisRunKind::Thermal => "thermal".to_string(),
                    AnalysisRunKind::Transient => "transient".to_string(),
                    AnalysisRunKind::Cfd => "cfd".to_string(),
                    AnalysisRunKind::Cht => "cht".to_string(),
                    AnalysisRunKind::Fsi => "fsi".to_string(),
                    AnalysisRunKind::Nonlinear => "nonlinear".to_string(),
                    AnalysisRunKind::Electromagnetic => "electromagnetic".to_string(),
                },
                expect_validate_error: spec.expect_validate_error.map(|s| s.to_string()),
                expect_run_error: spec.expect_run_error.map(|s| s.to_string()),
                expected_publishable: spec.expected_publishable,
                parity_tolerance_abs: spec.parity_tolerance.map(|tol| tol.abs),
                parity_tolerance_rel: spec.parity_tolerance.map(|tol| tol.rel),
                gpu_mode: spec.gpu_mode.map(|mode| match mode {
                    GpuMode::WithProvider => "with_provider".to_string(),
                    GpuMode::WithoutProvider => "without_provider".to_string(),
                }),
                residency_expectation: spec.residency_expectation.map(|value| match value {
                    ResidencyExpectation::DeviceRef => "device_ref".to_string(),
                    ResidencyExpectation::HostFallback => "host_fallback".to_string(),
                }),
                max_solver_host_sync_count: spec.max_solver_host_sync_count,
                min_solver_device_apply_k_ratio: spec.min_solver_device_apply_k_ratio,
                expected_solver_backend: spec.expected_solver_backend.map(|s| s.to_string()),
                modal_mode_count: spec.modal_mode_count,
                transient_step_count: spec.transient_step_count,
                max_modal_orthogonality_offdiag: spec.max_modal_orthogonality_offdiag,
                min_modal_relative_frequency_separation: spec
                    .min_modal_relative_frequency_separation,
                max_transient_residual_norm: spec.max_transient_residual_norm,
                max_transient_energy_growth_ratio: spec.max_transient_energy_growth_ratio,
                min_gpu_speedup_ratio: spec.min_gpu_speedup_ratio,
                min_transient_cache_hit_ratio: spec.min_transient_cache_hit_ratio,
                max_transient_cache_misses: spec.max_transient_cache_misses,
            })
            .collect(),
    }
}

pub(super) fn default_options() -> AnalysisRunOptions {
    AnalysisRunOptions {
        deterministic_mode: true,
        precision_mode: PrecisionMode::Fp64,
        preconditioner_mode: PreconditionerMode::Auto,
        quality_policy: QualityPolicy::Balanced,
        prep_context: None,
        prep_artifact_id: None,
        prep_calibration_profile: None,
    }
}
