<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="0" skipped="1" tests="105" time="88.916" timestamp="2026-08-12T22:45:51.321512-04:00" hostname="pop-os"><testcase classname="deployment.test_kubernetes_restart" name="test_kind_pod_restart_preserves_run_and_becomes_ready" file="deployment/test_kubernetes_restart.py" line="21" time="0.002"><properties><property name="scenario_id" value="WH-K8S-001" /></properties><skipped type="pytest.skip" message="destructive local kind run is opt-in: use --suite deployment --k8s-runtime">/home/natebiddle/Desktop/ROS2WarehouseCell/test/deployment/test_kubernetes_restart.py:30: destructive local kind run is opt-in: use --suite deployment --k8s-runtime</skipped></testcase><testcase classname="e2e.test_action_fulfillment" name="test_action_reports_feedback_and_returns_completed_pallet" file="e2e/test_action_fulfillment.py" line="12" time="5.384"><properties><property name="scenario_id" value="WH-ACTION-001" /></properties></testcase><testcase classname="e2e.test_nominal_fulfillment" name="test_multi_sku_order_moves_cases_and_builds_pallet" file="e2e/test_nominal_fulfillment.py" line="12" time="5.527"><properties><property name="scenario_id" value="WH-NOM-001" /></properties></testcase><testcase classname="e2e.test_nominal_fulfillment" name="test_two_orders_can_flow_to_independent_picker_stations" file="e2e/test_nominal_fulfillment.py" line="60" time="4.098"><properties><property name="scenario_id" value="WH-NOM-002" /></properties></testcase><testcase classname="e2e.test_routing_resilience" name="test_surge_wave_routes_all_orders_without_collision_or_deadlock" file="e2e/test_routing_resilience.py" line="9" time="14.497"><properties><property name="scenario_id" value="WH-ROUTE-001" /></properties></testcase><testcase classname="e2e.test_safety_and_recovery" name="test_emergency_stop_halts_motion_then_allows_order_to_resume" file="e2e/test_safety_and_recovery.py" line="22" time="6.794"><properties><property name="scenario_id" value="WH-SAFE-001" /></properties></testcase><testcase classname="e2e.test_safety_and_recovery" name="test_stalled_vehicle_is_cleared_and_order_recovers" file="e2e/test_safety_and_recovery.py" line="72" time="6.806"><properties><property name="scenario_id" value="WH-FAULT-001" /></properties></testcase><testcase classname="e2e.test_safety_and_recovery" name="test_timed_picker_jam_self_clears_without_losing_the_case" file="e2e/test_safety_and_recovery.py" line="132" time="2.646"><properties><property name="scenario_id" value="WH-FAULT-002" /></properties></testcase><testcase classname="integration.test_distributed_semantics" name="test_simultaneous_competing_orders_reserve_scarce_inventory_atomically" file="integration/test_distributed_semantics.py" line="55" time="0.149"><properties><property name="scenario_id" value="WH-TXN-001" /></properties></testcase><testcase classname="integration.test_distributed_semantics" name="test_live_event_stream_is_causal_unique_and_reconciles_to_state" file="integration/test_distributed_semantics.py" line="140" time="3.348"><properties><property name="scenario_id" value="WH-STREAM-001" /></properties></testcase><testcase classname="integration.test_distributed_semantics" name="test_late_subscriber_gets_latest_state_but_not_volatile_event_history" file="integration/test_distributed_semantics.py" line="209" time="0.899"><properties><property name="scenario_id" value="WH-QOS-001" /></properties></testcase><testcase classname="integration.test_fleet_scalability" name="test_surge_wave_characterizes_fleet_scaling_and_picker_saturation" file="integration/test_fleet_scalability.py" line="23" time="0.813"><properties><property name="scenario_id" value="WH-SCALE-001" /><property name="scalability_baseline_json" value="{&quot;cycle_median_sec&quot;: {&quot;1&quot;: 217.25, &quot;2&quot;: 116.1, &quot;4&quot;: 115.6}, &quot;deterministic_repeats_per_fleet&quot;: 5, &quot;failure_count&quot;: 0, &quot;gains&quot;: {&quot;one_to_two_cycle_reduction_percent&quot;: 46.559, &quot;two_to_four_cycle_reduction_percent&quot;: 0.431}, &quot;interpretation&quot;: &quot;The second AGV removes transport capacity pressure; four AGVs then approach the fixed two-picker/dock bottleneck.&quot;, &quot;throughput_median_items_per_min&quot;: {&quot;1&quot;: 3.314, &quot;2&quot;: 6.202, &quot;4&quot;: 6.228}, &quot;workload&quot;: &quot;surge_wave: 3 orders / 12 cases / 2 pickers&quot;}" /><property name="measurement.deterministic_repeats_per_fleet" value="5" /><property name="measurement.fleet_1_cycle_median_sec" value="217.25" /><property name="measurement.fleet_2_cycle_median_sec" value="116.1" /><property name="measurement.fleet_4_cycle_median_sec" value="115.6" /><property name="measurement.fleet_1_throughput_median_items_per_min" value="3.314" /><property name="measurement.fleet_2_throughput_median_items_per_min" value="6.202" /><property name="measurement.fleet_4_throughput_median_items_per_min" value="6.228" /><property name="measurement.one_to_two_cycle_reduction_percent" value="46.559" /><property name="measurement.two_to_four_cycle_reduction_percent" value="0.431" /></properties></testcase><testcase classname="integration.test_gazebo_pose_convergence" name="test_stopped_agv_pose_converges_from_ros_state_into_gazebo" file="integration/test_gazebo_pose_convergence.py" line="114" time="4.472"><properties><property name="scenario_id" value="WH-GZ-CONVERGE-001" /></properties></testcase><testcase classname="integration.test_health_gateway" name="test_gateway_readiness_state_and_metrics_follow_ros_projection" file="integration/test_health_gateway.py" line="25" time="0.693"><properties><property name="scenario_id" value="WH-K8S-GATEWAY-001" /></properties></testcase><testcase classname="integration.test_idempotent_retry_contract" name="test_abandoned_success_response_is_reconciled_by_idempotent_retry" file="integration/test_idempotent_retry_contract.py" line="13" time="0.497"><properties><property name="scenario_id" value="WH-DIST-001" /></properties></testcase><testcase classname="integration.test_live_cell_contract" name="test_state_stream_contains_populated_unique_cell" file="integration/test_live_cell_contract.py" line="12" time="0.030"><properties><property name="scenario_id" value="WH-INT-LIVE-001" /></properties></testcase><testcase classname="integration.test_live_cell_contract" name="test_reset_is_deterministic_for_same_seed" file="integration/test_live_cell_contract.py" line="35" time="0.012"><properties><property name="scenario_id" value="WH-INT-LIVE-002" /></properties></testcase><testcase classname="integration.test_live_cell_contract" name="test_invalid_order_is_rejected_without_mutating_cell" file="integration/test_live_cell_contract.py" line="65" time="0.109"><properties><property name="scenario_id" value="WH-INT-LIVE-003" /></properties></testcase><testcase classname="integration.test_performance_characterization" name="test_seeded_wave_records_non_gating_percentile_baseline" file="integration/test_performance_characterization.py" line="23" time="0.580"><properties><property name="scenario_id" value="WH-PERF-001" /><property name="performance_baseline_json" value="{&quot;cycle_sec&quot;: {&quot;p50&quot;: 115.6, &quot;p95&quot;: 115.6, &quot;p99&quot;: 115.6}, &quot;failure_count&quot;: 0, &quot;failure_rate&quot;: 0.0, &quot;gating&quot;: false, &quot;sample_count&quot;: 10, &quot;throughput_items_per_min&quot;: {&quot;p50&quot;: 6.228, &quot;p95&quot;: 6.228, &quot;p99&quot;: 6.228}, &quot;wall_ms&quot;: {&quot;p50&quot;: 54.449, &quot;p95&quot;: 55.692, &quot;p99&quot;: 55.692}, &quot;workload&quot;: &quot;surge_wave: 3 orders / 12 cases / 4 AGVs / 2 pickers&quot;}" /><property name="performance_gating" value="false" /><property name="measurement.sample_count" value="10" /><property name="measurement.wall_p50_ms" value="54.449" /><property name="measurement.wall_p95_ms" value="55.692" /><property name="measurement.wall_p99_ms" value="55.692" /><property name="measurement.cycle_p95_sec" value="115.6" /><property name="measurement.throughput_p50_items_per_min" value="6.228" /><property name="measurement.failure_rate" value="0.0" /></properties></testcase><testcase classname="integration.test_ros_interface_contract" name="test_cell_state_message_composes_all_entity_types" file="integration/test_ros_interface_contract.py" line="16" time="0.000"><properties><property name="scenario_id" value="WH-INT-001" /></properties></testcase><testcase classname="integration.test_ros_interface_contract" name="test_order_service_and_action_keep_sku_quantity_pairs_aligned" file="integration/test_ros_interface_contract.py" line="52" time="0.000"><properties><property name="scenario_id" value="WH-INT-002" /></properties></testcase><testcase classname="integration.test_ros_interface_contract" name="test_fault_and_estop_services_expose_diagnostic_responses" file="integration/test_ros_interface_contract.py" line="77" time="0.000"><properties><property name="scenario_id" value="WH-INT-003" /></properties></testcase><testcase classname="system.test_controller_pause_recovery" name="test_sigstop_exposes_stale_state_and_sigcont_recovers_coherently" file="system/test_controller_pause_recovery.py" line="58" time="3.651"><properties><property name="scenario_id" value="WH-PAUSE-001" /></properties></testcase><testcase classname="system.test_controller_restart_recovery" name="test_inflight_order_survives_controller_restart_exactly_once" file="system/test_controller_restart_recovery.py" line="54" time="8.179"><properties><property name="scenario_id" value="WH-RESTART-001" /></properties></testcase><testcase classname="system.test_gdb_observability" name="test_gdb_captures_ros_python_and_dds_full_thread_stacks" file="system/test_gdb_observability.py" line="29" time="2.120"><properties><property name="scenario_id" value="WH-OBS-GDB-001" /><property name="evidence.gdb_full_stack" value="/home/natebiddle/Desktop/ROS2WarehouseCell/artifacts/final-validation-wave2/gdb-cell-controller-full-stack.txt" /></properties></testcase><testcase classname="system.test_netem_packet_faults" name="test_udp_packets_receive_real_latency_loss_timeout_and_partition" file="system/test_netem_packet_faults.py" line="31" time="6.807"><properties><property name="scenario_id" value="WH-NETEM-001" /><property name="measurement.packet_latency_round_trip_sec" value="0.374048" /><property name="measurement.packet_timeout_deadline_sec" value="0.45" /><property name="evidence.netem_json" value="/home/natebiddle/Desktop/ROS2WarehouseCell/artifacts/final-validation-wave2/netem-evidence.json" /><property name="network_evidence_json" value="{&quot;boundary&quot;: &quot;Linux loopback packets inside a disposable network namespace&quot;, &quot;dds_transport&quot;: &quot;Fast DDS builtin UDPv4 only; shared-memory transport disabled by FASTDDS_BUILTIN_TRANSPORTS&quot;, &quot;impairment&quot;: &quot;tc netem&quot;, &quot;latency&quot;: {&quot;committed_orders&quot;: 1, &quot;configured_one_way_ms&quot;: 180, &quot;observed_round_trip_sec&quot;: 0.374048}, &quot;partition&quot;: {&quot;configured_packet_loss_percent&quot;: 100, &quot;observation_window_sec&quot;: 0.4, &quot;order_count_after_recovery&quot;: 1, &quot;order_visible_during_partition&quot;: 0, &quot;recovery_disposition&quot;: &quot;REPLAYED&quot;}, &quot;rmw_implementation&quot;: &quot;rmw_fastrtps_cpp&quot;, &quot;ros_domain_id&quot;: 147, &quot;schema_version&quot;: 1, &quot;unknown_outcome_timeout&quot;: {&quot;authoritative_commit_observed&quot;: true, &quot;client_deadline_sec&quot;: 0.45, &quot;configured_one_way_ms&quot;: 300, &quot;deadline_observation_sec&quot;: 0.464104, &quot;order_count&quot;: 1, &quot;retry_disposition&quot;: &quot;REPLAYED&quot;}}" /></properties></testcase><testcase classname="system.test_network_fault_relay" name="test_latency_is_injected_before_the_authoritative_call" file="system/test_network_fault_relay.py" line="291" time="1.097"><properties><property name="scenario_id" value="WH-NET-001" /><property name="measurement.rpc_latency_sec" value="0.36700899101560935" /></properties></testcase><testcase classname="system.test_network_fault_relay" name="test_timeout_after_commit_has_unknown_outcome_and_retry_is_idempotent" file="system/test_network_fault_relay.py" line="316" time="1.532"><properties><property name="scenario_id" value="WH-NET-002" /><property name="measurement.client_deadline_sec" value="0.2" /><property name="measurement.deadline_observation_sec" value="0.21656331297708675" /><property name="measurement.authoritative_order_count" value="1" /></properties></testcase><testcase classname="system.test_network_fault_relay" name="test_drop_and_partition_do_not_commit_and_recovery_accepts_retry" file="system/test_network_fault_relay.py" line="365" time="1.503"><properties><property name="scenario_id" value="WH-NET-003" /><property name="measurement.pre_forward_drop_commits" value="0" /><property name="measurement.partition_commits_before_recovery" value="0" /><property name="measurement.recovery_retry_commits" value="1" /></properties></testcase><testcase classname="system.test_outbox_duplicate_delivery" name="test_publish_before_mark_crash_replays_event_and_consumer_deduplicates" file="system/test_outbox_duplicate_delivery.py" line="56" time="5.990"><properties><property name="scenario_id" value="WH-OUTBOX-CRASH-001" /></properties></testcase><testcase classname="unit.test_cli_scripts" name="test_run_tests_help_documents_visual_headless_and_gdb_modes" file="unit/test_cli_scripts.py" line="17" time="0.012" /><testcase classname="unit.test_cli_scripts" name="test_run_demo_help_exposes_explicit_persistence_and_restart_controls" file="unit/test_cli_scripts.py" line="44" time="0.022" /><testcase classname="unit.test_cli_scripts" name="test_gdb_stack_capture_help_describes_full_thread_evidence" file="unit/test_cli_scripts.py" line="80" time="0.036" /><testcase classname="unit.test_cli_scripts" name="test_generate_report_cli_writes_markdown_and_json" file="unit/test_cli_scripts.py" line="129" time="0.052" /><testcase classname="unit.test_cli_scripts" name="test_generate_report_can_fail_ci_after_still_writing_artifacts" file="unit/test_cli_scripts.py" line="167" time="0.041" /><testcase classname="unit.test_deployment_assets" name="test_manifest_connects_deployment_service_storage_and_probes" file="unit/test_deployment_assets.py" line="20" time="0.009"><properties><property name="scenario_id" value="WH-K8S-STATIC-001" /></properties></testcase><testcase classname="unit.test_deployment_assets" name="test_container_is_non_root_and_runtime_smoke_is_bounded" file="unit/test_deployment_assets.py" line="56" time="0.006"><properties><property name="scenario_id" value="WH-K8S-STATIC-002" /></properties></testcase><testcase classname="unit.test_engine" name="test_nominal_multi_sku_order_completes_with_consistent_inventory" file="unit/test_engine.py" line="20" time="0.018"><properties><property name="scenario_id" value="WH-ENGINE-001" /></properties></testcase><testcase classname="unit.test_engine" name="test_default_mixed_wave_fulfills_both_pickers_without_collision" file="unit/test_engine.py" line="41" time="0.045"><properties><property name="scenario_id" value="WH-ENGINE-002" /></properties></testcase><testcase classname="unit.test_engine" name="test_insufficient_inventory_rejection_is_atomic" file="unit/test_engine.py" line="64" time="0.001"><properties><property name="scenario_id" value="WH-ENGINE-003" /></properties></testcase><testcase classname="unit.test_engine" name="test_invalid_orders_are_rejected_with_actionable_messages[-lines0-picker_01-order_id]" file="unit/test_engine.py" line="82" time="0.001"><properties><property name="scenario_id" value="WH-ENGINE-004" /></properties></testcase><testcase classname="unit.test_engine" name="test_invalid_orders_are_rejected_with_actionable_messages[bad-empty-lines1-picker_01-at least one]" file="unit/test_engine.py" line="82" time="0.001"><properties><property name="scenario_id" value="WH-ENGINE-004" /></properties></testcase><testcase classname="unit.test_engine" name="test_invalid_orders_are_rejected_with_actionable_messages[bad-zero-lines2-picker_01-positive]" file="unit/test_engine.py" line="82" time="0.001"><properties><property name="scenario_id" value="WH-ENGINE-004" /></properties></testcase><testcase classname="unit.test_engine" name="test_invalid_orders_are_rejected_with_actionable_messages[bad-picker-lines3-picker_99-unknown picker]" file="unit/test_engine.py" line="82" time="0.001"><properties><property name="scenario_id" value="WH-ENGINE-004" /></properties></testcase><testcase classname="unit.test_engine" name="test_duplicate_order_id_is_rejected_without_double_reservation" file="unit/test_engine.py" line="100" time="0.002"><properties><property name="scenario_id" value="WH-ENGINE-005" /></properties></testcase><testcase classname="unit.test_engine" name="test_emergency_stop_freezes_motion_and_processing_then_resumes" file="unit/test_engine.py" line="113" time="0.012"><properties><property name="scenario_id" value="WH-SAFE-UNIT-001" /></properties></testcase><testcase classname="unit.test_engine" name="test_timed_vehicle_stall_self_clears_and_order_recovers" file="unit/test_engine.py" line="144" time="0.006"><properties><property name="scenario_id" value="WH-FAULT-UNIT-001" /></properties></testcase><testcase classname="unit.test_engine" name="test_picker_jam_holds_case_until_manual_clear" file="unit/test_engine.py" line="162" time="0.008"><properties><property name="scenario_id" value="WH-FAULT-UNIT-002" /></properties></testcase><testcase classname="unit.test_engine" name="test_snapshot_is_a_deep_copy_suitable_for_ros_publication" file="unit/test_engine.py" line="178" time="0.001"><properties><property name="scenario_id" value="WH-ENGINE-006" /></properties></testcase><testcase classname="unit.test_engine" name="test_same_seed_and_inputs_produce_exactly_repeatable_trace" file="unit/test_engine.py" line="189" time="0.010"><properties><property name="scenario_id" value="WH-ENGINE-007" /></properties></testcase><testcase classname="unit.test_engine" name="test_event_drain_is_incremental_for_ros_event_publication" file="unit/test_engine.py" line="217" time="0.002"><properties><property name="scenario_id" value="WH-ENGINE-008" /></properties></testcase><testcase classname="unit.test_engine" name="test_supported_fleet_sizes_select_a_stable_vehicle_prefix[1-expected_vehicle_ids0]" file="unit/test_engine.py" line="230" time="0.001"><properties><property name="scenario_id" value="WH-SCALE-UNIT-001" /></properties></testcase><testcase classname="unit.test_engine" name="test_supported_fleet_sizes_select_a_stable_vehicle_prefix[2-expected_vehicle_ids1]" file="unit/test_engine.py" line="230" time="0.001"><properties><property name="scenario_id" value="WH-SCALE-UNIT-001" /></properties></testcase><testcase classname="unit.test_engine" name="test_supported_fleet_sizes_select_a_stable_vehicle_prefix[4-expected_vehicle_ids2]" file="unit/test_engine.py" line="230" time="0.000"><properties><property name="scenario_id" value="WH-SCALE-UNIT-001" /></properties></testcase><testcase classname="unit.test_engine" name="test_unsupported_fleet_size_is_rejected[0]" file="unit/test_engine.py" line="253" time="0.000"><properties><property name="scenario_id" value="WH-SCALE-UNIT-002" /></properties></testcase><testcase classname="unit.test_engine" name="test_unsupported_fleet_size_is_rejected[3]" file="unit/test_engine.py" line="253" time="0.000"><properties><property name="scenario_id" value="WH-SCALE-UNIT-002" /></properties></testcase><testcase classname="unit.test_engine" name="test_unsupported_fleet_size_is_rejected[5]" file="unit/test_engine.py" line="253" time="0.000"><properties><property name="scenario_id" value="WH-SCALE-UNIT-002" /></properties></testcase><testcase classname="unit.test_event_dedup" name="test_duplicate_event_id_is_applied_once" file="unit/test_event_dedup.py" line="15" time="0.000"><properties><property name="scenario_id" value="WH-STREAM-UNIT-003" /></properties></testcase><testcase classname="unit.test_event_dedup" name="test_claim_is_atomic_across_competing_callbacks" file="unit/test_event_dedup.py" line="44" time="0.002"><properties><property name="scenario_id" value="WH-STREAM-UNIT-004" /></properties></testcase><testcase classname="unit.test_event_dedup" name="test_empty_event_id_is_rejected" file="unit/test_event_dedup.py" line="62" time="0.000" /><testcase classname="unit.test_junit_to_jira" name="test_parses_nested_junit_and_computes_summary" file="unit/test_junit_to_jira.py" line="18" time="0.001" /><testcase classname="unit.test_junit_to_jira" name="test_markdown_is_jira_ready_and_escapes_tables" file="unit/test_junit_to_jira.py" line="52" time="0.001" /><testcase classname="unit.test_junit_to_jira" name="test_passed_report_has_no_ticket_drafts" file="unit/test_junit_to_jira.py" line="83" time="0.001" /><testcase classname="unit.test_junit_to_jira" name="test_characterization_measurements_are_visible_but_not_called_slos" file="unit/test_junit_to_jira.py" line="95" time="0.001" /><testcase classname="unit.test_junit_to_jira" name="test_raw_evidence_properties_render_as_ticket_attachments" file="unit/test_junit_to_jira.py" line="119" time="0.001" /><testcase classname="unit.test_junit_to_jira" name="test_json_summary_is_machine_readable" file="unit/test_junit_to_jira.py" line="142" time="0.001" /><testcase classname="unit.test_junit_to_jira" name="test_invalid_input_has_actionable_error[not xml-Invalid JUnit XML]" file="unit/test_junit_to_jira.py" line="158" time="0.001" /><testcase classname="unit.test_junit_to_jira" name="test_invalid_input_has_actionable_error[&lt;robot/&gt;-Unsupported JUnit root]" file="unit/test_junit_to_jira.py" line="158" time="0.001" /><testcase classname="unit.test_junit_to_jira" name="test_missing_input_has_actionable_error" file="unit/test_junit_to_jira.py" line="171" time="0.000" /><testcase classname="unit.test_junit_to_jira" name="test_very_large_trace_is_bounded_for_jira_but_keeps_both_ends" file="unit/test_junit_to_jira.py" line="176" time="0.001" /><testcase classname="unit.test_junit_to_jira" name="test_all_skipped_run_is_not_reported_as_a_pass" file="unit/test_junit_to_jira.py" line="196" time="0.001" /><testcase classname="unit.test_metrics_schema" name="test_current_metrics_document_round_trips" file="unit/test_metrics_schema.py" line="15" time="0.001"><properties><property name="scenario_id" value="WH-SCHEMA-001" /></properties></testcase><testcase classname="unit.test_metrics_schema" name="test_older_document_gets_defaults_and_additive_field_is_preserved" file="unit/test_metrics_schema.py" line="26" time="0.000"><properties><property name="scenario_id" value="WH-SCHEMA-001" /></properties></testcase><testcase classname="unit.test_metrics_schema" name="test_malformed_or_wrong_type_metrics_fail_actionably[not json-invalid warehouse metrics JSON]" file="unit/test_metrics_schema.py" line="47" time="0.001"><properties><property name="scenario_id" value="WH-SCHEMA-001" /></properties></testcase><testcase classname="unit.test_metrics_schema" name="test_malformed_or_wrong_type_metrics_fail_actionably[[]-must be a JSON object]" file="unit/test_metrics_schema.py" line="47" time="0.001"><properties><property name="scenario_id" value="WH-SCHEMA-001" /></properties></testcase><testcase classname="unit.test_metrics_schema" name="test_malformed_or_wrong_type_metrics_fail_actionably[{&quot;schema_version&quot;: 1}-missing required field 'scenario']" file="unit/test_metrics_schema.py" line="47" time="0.000"><properties><property name="scenario_id" value="WH-SCHEMA-001" /></properties></testcase><testcase classname="unit.test_metrics_schema" name="test_malformed_or_wrong_type_metrics_fail_actionably[{&quot;schema_version&quot;: 1, &quot;scenario&quot;: &quot;empty&quot;, &quot;simulation_time_sec&quot;: &quot;soon&quot;, &quot;completed_orders&quot;: 0, &quot;palletized_items&quot;: 0, &quot;throughput_items_per_min&quot;: 0.0, &quot;emergency_stop&quot;: false}-simulation_time_sec.*number]" file="unit/test_metrics_schema.py" line="47" time="0.000"><properties><property name="scenario_id" value="WH-SCHEMA-001" /></properties></testcase><testcase classname="unit.test_metrics_schema" name="test_malformed_or_wrong_type_metrics_fail_actionably[{&quot;schema_version&quot;: true, &quot;scenario&quot;: &quot;empty&quot;, &quot;simulation_time_sec&quot;: 0.0, &quot;completed_orders&quot;: 0, &quot;palletized_items&quot;: 0, &quot;throughput_items_per_min&quot;: 0.0, &quot;emergency_stop&quot;: false}-schema_version.*int]" file="unit/test_metrics_schema.py" line="47" time="0.001"><properties><property name="scenario_id" value="WH-SCHEMA-001" /></properties></testcase><testcase classname="unit.test_models" name="test_pose_moves_towards_target_without_overshooting" file="unit/test_models.py" line="14" time="0.001"><properties><property name="scenario_id" value="WH-UNIT-MODEL-001" /></properties></testcase><testcase classname="unit.test_models" name="test_pose_negative_motion_is_a_safe_noop" file="unit/test_models.py" line="30" time="0.000"><properties><property name="scenario_id" value="WH-UNIT-MODEL-002" /></properties></testcase><testcase classname="unit.test_models" name="test_yaw_quaternion_is_normalized" file="unit/test_models.py" line="40" time="0.000"><properties><property name="scenario_id" value="WH-UNIT-MODEL-003" /></properties></testcase><testcase classname="unit.test_models" name="test_order_derived_counts_track_completed_cases" file="unit/test_models.py" line="48" time="0.000"><properties><property name="scenario_id" value="WH-UNIT-MODEL-004" /></properties></testcase><testcase classname="unit.test_pallet_pattern" name="test_first_layer_has_six_unique_balanced_carton_positions" file="unit/test_pallet_pattern.py" line="15" time="0.000"><properties><property name="scenario_id" value="WH-UNIT-PALLET-001" /></properties></testcase><testcase classname="unit.test_pallet_pattern" name="test_second_layer_is_raised_and_rotated_for_interlock" file="unit/test_pallet_pattern.py" line="29" time="0.000"><properties><property name="scenario_id" value="WH-UNIT-PALLET-002" /></properties></testcase><testcase classname="unit.test_pallet_pattern" name="test_negative_pallet_index_is_rejected[placement]" file="unit/test_pallet_pattern.py" line="40" time="0.001"><properties><property name="scenario_id" value="WH-UNIT-PALLET-003" /></properties></testcase><testcase classname="unit.test_pallet_pattern" name="test_negative_pallet_index_is_rejected[layer_for]" file="unit/test_pallet_pattern.py" line="40" time="0.000"><properties><property name="scenario_id" value="WH-UNIT-PALLET-003" /></properties></testcase><testcase classname="unit.test_routing" name="test_straight_aisle_route_reaches_exact_requested_pose" file="unit/test_routing.py" line="13" time="0.000"><properties><property name="scenario_id" value="WH-ROUTE-UNIT-001" /></properties></testcase><testcase classname="unit.test_routing" name="test_route_detours_around_blocked_aisle_with_vehicle_clearance" file="unit/test_routing.py" line="26" time="0.001"><properties><property name="scenario_id" value="WH-ROUTE-UNIT-002" /></properties></testcase><testcase classname="unit.test_routing" name="test_route_is_deterministic_for_repeatable_failure_reproduction" file="unit/test_routing.py" line="46" time="0.002"><properties><property name="scenario_id" value="WH-ROUTE-UNIT-003" /></properties></testcase><testcase classname="unit.test_routing" name="test_obstructed_route_endpoints_fail_with_context[start0-goal0-start]" file="unit/test_routing.py" line="61" time="0.001"><properties><property name="scenario_id" value="WH-ROUTE-UNIT-004" /></properties></testcase><testcase classname="unit.test_routing" name="test_obstructed_route_endpoints_fail_with_context[start1-goal1-goal]" file="unit/test_routing.py" line="61" time="0.001"><properties><property name="scenario_id" value="WH-ROUTE-UNIT-004" /></properties></testcase><testcase classname="unit.test_routing" name="test_fully_dividing_barrier_reports_no_route" file="unit/test_routing.py" line="80" time="0.001"><properties><property name="scenario_id" value="WH-ROUTE-UNIT-005" /></properties></testcase><testcase classname="unit.test_routing" name="test_invalid_grid_resolution_is_rejected" file="unit/test_routing.py" line="92" time="0.000"><properties><property name="scenario_id" value="WH-ROUTE-UNIT-006" /></properties></testcase><testcase classname="unit.test_scenarios" name="test_each_scenario_is_populated_and_has_complete_topology[mixed_wave]" file="unit/test_scenarios.py" line="14" time="0.001"><properties><property name="scenario_id" value="WH-UNIT-SCENARIO-001" /></properties></testcase><testcase classname="unit.test_scenarios" name="test_each_scenario_is_populated_and_has_complete_topology[surge_wave]" file="unit/test_scenarios.py" line="14" time="0.000"><properties><property name="scenario_id" value="WH-UNIT-SCENARIO-001" /></properties></testcase><testcase classname="unit.test_scenarios" name="test_each_scenario_is_populated_and_has_complete_topology[fault_recovery]" file="unit/test_scenarios.py" line="14" time="0.000"><properties><property name="scenario_id" value="WH-UNIT-SCENARIO-001" /></properties></testcase><testcase classname="unit.test_scenarios" name="test_each_scenario_is_populated_and_has_complete_topology[empty]" file="unit/test_scenarios.py" line="14" time="0.000"><properties><property name="scenario_id" value="WH-UNIT-SCENARIO-001" /></properties></testcase><testcase classname="unit.test_scenarios" name="test_scenario_builds_are_independent_for_test_isolation" file="unit/test_scenarios.py" line="35" time="0.000"><properties><property name="scenario_id" value="WH-UNIT-SCENARIO-002" /></properties></testcase><testcase classname="unit.test_scenarios" name="test_unknown_scenario_reports_available_choices" file="unit/test_scenarios.py" line="46" time="0.000"><properties><property name="scenario_id" value="WH-UNIT-SCENARIO-003" /></properties></testcase><testcase classname="unit.test_state_store" name="test_identical_request_is_replayed_without_duplicate_business_effect" file="unit/test_state_store.py" line="15" time="0.003"><properties><property name="scenario_id" value="WH-DIST-UNIT-001" /></properties></testcase><testcase classname="unit.test_state_store" name="test_reused_idempotency_key_with_different_content_is_a_conflict" file="unit/test_state_store.py" line="38" time="0.004"><properties><property name="scenario_id" value="WH-DIST-UNIT-002" /></properties></testcase><testcase classname="unit.test_state_store" name="test_sqlite_checkpoint_restores_in_flight_work_and_completes_once" file="unit/test_state_store.py" line="61" time="0.040"><properties><property name="scenario_id" value="WH-RESTART-UNIT-001" /></properties></testcase><testcase classname="unit.test_state_store" name="test_event_outbox_is_ordered_replayable_and_marked_after_publication" file="unit/test_state_store.py" line="91" time="0.032"><properties><property name="scenario_id" value="WH-STREAM-UNIT-001" /></properties></testcase><testcase classname="unit.test_state_store" name="test_order_events_form_a_correlated_causation_chain_across_restart" file="unit/test_state_store.py" line="119" time="0.031"><properties><property name="scenario_id" value="WH-STREAM-UNIT-002" /></properties></testcase><testcase classname="unit.test_state_store" name="test_checkpoint_restores_the_configured_fleet_size" file="unit/test_state_store.py" line="155" time="0.080"><properties><property name="scenario_id" value="WH-SCALE-UNIT-003" /></properties></testcase></testsuite></testsuites>