Skip to content

Test-suite audit

Generated by tools/audit_tests.py (just test-audit). Read-only signal for review — see selective-testing.md for the companion CI selector. CLAUDE.md §1.7/§1.11: tests are part of the contract; this report flags candidates, it does not delete.

  • Test files: 643
  • Test functions: 5967
  • Trivial (dead) tests: 0
  • Shadowed (dead) tests: 0
  • No-assertion candidates: 137
  • Duplicate-body groups: 12

Inventory by tier

Tier Functions
unit 4593
sim 418
pkg:observability 226
integration 135
ros:openral_rskill_ros 91
pkg:hal 62
pkg:dataset 55
hil 54
ros:openral_safety 53
ros:openral_foxglove_bringup 40
pkg:reasoner 39
ros:openral_slam_bringup 34
ros:openral_safety_watchdog 29
ros:openral_nav2_bringup 28
pkg:core 21
ros:openral_hal_node 21
pkg:cli 20
pkg:state_adapter 18
ros:openral_perception_ros 8
ros:openral_human_estop 7
ros:openral_prompt_router 5
ros:openral_reasoner_ros 5
ros:world_state 5

Inventory by marker

Marker Functions
parametrize 247
skipif 81
asyncio 37
sim 8
slow 2

Trivial tests (safe to delete)

None — no placeholder / pass-only tests in the tree.

Shadowed tests (dead — safe to delete)

Same name defined twice in one scope (file + class). Python keeps only the last; the earlier definition is never collected by pytest.

None — no test is silently shadowed by a later redefinition.

Duplicate-body groups (dedup / parametrize candidates)

  • 4 identical bodies:
    • packages/openral_human_estop/test/test_forwarder_node_sigint_shape.py::test_except_does_not_catch_broad_exceptions
    • packages/openral_safety/test/test_supervisor_node_sigint_shape.py::test_except_does_not_catch_broad_exceptions
    • packages/openral_safety_watchdog/test/test_deadman_watchdog_node_sigint_shape.py::test_except_does_not_catch_broad_exceptions
    • packages/openral_safety_watchdog/test/test_hardware_estop_node_sigint_shape.py::test_except_does_not_catch_broad_exceptions
  • 3 identical bodies:
    • tests/sim/test_aloha_bimanual_act_aloha.py::test_manifest_has_latency_budget
    • tests/sim/test_franka_panda_smolvla_libero.py::test_manifest_has_latency_budget
    • tests/sim/test_pusht_2d_diffusion_pusht.py::test_manifest_has_latency_budget
  • 2 identical bodies:
    • tests/sim/test_aloha_bimanual_hal_mujoco.py::test_joint_names_match_expected_layout
    • tests/unit/test_aloha.py::test_joint_order_left_arm_then_left_gripper_then_right_arm_then_right_gripper
  • 2 identical bodies:
    • tests/sim/test_aloha_bimanual_hal_mujoco.py::test_capabilities_bimanual
    • tests/unit/test_aloha.py::test_capabilities_declare_bimanual
  • 2 identical bodies:
    • tests/unit/test_eval_adapters_helpers.py::test_render_returns_none_before_step
    • tests/unit/test_eval_adapters_helpers.py::test_render_returns_none_without_pixels
  • 2 identical bodies:
    • tests/unit/test_eval_adapters_helpers.py::test_close_delegates_to_env
    • tests/unit/test_eval_adapters_helpers.py::test_close_delegates_to_env
  • 2 identical bodies:
    • tests/unit/test_franka_panda_real.py::test_send_action_before_connect_raises
    • tests/unit/test_sawyer_real.py::test_send_action_before_connect_raises
  • 2 identical bodies:
    • tests/unit/test_robocasa_sim_targets.py::test_targets_only_lists_files_that_exist
    • tests/unit/test_ros_live_targets.py::test_targets_only_lists_files_that_exist
  • 2 identical bodies:
    • tests/unit/test_runtime.py::test_device_property
    • tests/unit/test_runtime.py::test_device_property
  • 2 identical bodies:
    • tests/unit/test_runtime.py::test_initial_not_loaded
    • tests/unit/test_runtime.py::test_initial_not_loaded
  • 2 identical bodies:
    • tests/unit/test_runtime.py::test_infer_before_load_raises
    • tests/unit/test_runtime.py::test_infer_before_load_raises

No-assertion candidates (review, do not auto-delete)

These neither assert nor make a recognised validation call. Some are real (a side-effecting call that raises); others may be dead. Review individually.

  • tests/hil/test_aloha.py::test_disconnect_is_idempotent (line 127)
  • tests/hil/test_franka_panda.py::test_disconnect_is_idempotent (line 116)
  • tests/hil/test_sawyer.py::test_disconnect_is_idempotent (line 106)
  • tests/sim/test_hal_protocol_contracts.py::test_disconnect_idempotent (line 166)
  • tests/sim/test_hal_protocol_contracts.py::test_disconnect_without_connect_is_noop (line 172)
  • tests/sim/test_maniskill3_robot_uids.py::test_reconcile_accepts_directly_supported_robot (line 31)
  • tests/sim/test_maniskill3_robot_uids.py::test_reconcile_accepts_camera_variant_of_supported_base (line 36)
  • tests/sim/test_openarm_scene_pnp.py::test_openarm_tabletop_scene_loads_and_steps (line 74)
  • tests/unit/test_benchmark_schemas.py::test_raise_on_invalid_suite_happy_path (line 138)
  • tests/unit/test_benchmark_schemas.py::test_raise_on_invalid_suite_allows_mixed_max_steps_per_task (line 199)
  • tests/unit/test_benchmark_schemas.py::test_raise_on_invalid_suite_allows_mixed_success_key_per_task (line 208)
  • tests/unit/test_benchmark_task_compat.py::test_exact_task_id_match_is_allowed (line 31)
  • tests/unit/test_benchmark_task_compat.py::test_family_prefix_match_is_allowed (line 36)
  • tests/unit/test_benchmark_task_compat.py::test_undeclared_is_permissive (line 51)
  • tests/unit/test_cartesian_rskill_contracts.py::test_swept_skill_declares_cartesian_action_contract (line 73)
  • tests/unit/test_cartesian_rskill_contracts.py::test_reference_widowx_skill_already_declares_cartesian_contract (line 77)
  • tests/unit/test_cli_deploy_sim.py::test_bh_preflight_palette_deps_silent_when_no_capability_match (line 1097)
  • tests/unit/test_cli_deploy_sim.py::test_bh_preflight_palette_deps_returns_silent_when_no_rskills_dir (line 1112)
  • tests/unit/test_cli_deploy_sim.py::test_scene_asset_preflight_is_a_noop_without_a_config (line 2422)
  • tests/unit/test_cli_deploy_sim.py::test_scene_asset_preflight_is_advisory_when_provisioning_fails (line 2489)
  • tests/unit/test_collision_geometry_contracts.py::test_capsule_rejects_nonpositive_radius (line 138)
  • tests/unit/test_collision_geometry_contracts.py::test_collision_evidence_rejects_below_reactive_sentinel (line 217)
  • tests/unit/test_deploy_reward_pairing.py::test_preflight_skipped_when_gpu_budget_unreadable (line 72)
  • tests/unit/test_deploy_reward_pairing.py::test_preflight_skipped_when_no_reward_active (line 82)
  • tests/unit/test_deploy_reward_pairing.py::test_preflight_passes_on_8gb_card (line 92)
  • tests/unit/test_eval_adapters_helpers.py::test_reset_no_op_without_policy_reset (line 440)
  • tests/unit/test_gr00t_family_camera_gate.py::test_libero_layout_accepts_two_camera_scene (line 57)
  • tests/unit/test_gr00t_family_camera_gate.py::test_empty_cameras_is_adapter_default_not_a_mismatch (line 64)
  • tests/unit/test_gr00t_family_camera_gate.py::test_single_view_layout_allows_single_camera_scene (line 73)
  • tests/unit/test_hal.py::test_disconnect_without_connect_is_noop (line 175)
  • tests/unit/test_hal.py::test_allows_any_mode_when_supported_is_empty (line 274)
  • tests/unit/test_hal_protocol_conformance.py::test_hal_disconnect_is_idempotent (line 290)
  • tests/unit/test_install_command.py::test_no_conflict_no_raise (line 108)
  • tests/unit/test_install_command.py::test_dispatch_repl_line_handles_quoted_args (line 175)
  • tests/unit/test_isaac_sidecar_port_identity.py::test_assert_identity_accepts_matching_sidecar (line 131)
  • tests/unit/test_isaac_sidecar_port_identity.py::test_assert_identity_tolerates_missing_keys (line 150)
  • tests/unit/test_isaac_sidecar_port_identity.py::test_no_expected_identity_is_a_noop (line 157)
  • tests/unit/test_isaac_sidecar_version_probe.py::test_satisfied_floor_passes (line 40)
  • tests/unit/test_isaac_sidecar_version_probe.py::test_no_floors_is_a_noop (line 94)
  • tests/unit/test_lifecycle_autostart.py::test_drive_transition_succeeds_when_state_advances_despite_no_response (line 140)
  • tests/unit/test_lifecycle_autostart.py::test_drive_transition_polls_grace_window_before_success (line 159)
  • tests/unit/test_mujoco_arm.py::test_disconnect_when_never_connected_is_noop (line 171)
  • tests/unit/test_openvla_widowx_manifest.py::test_gate_accepts_declared_widowx_task (line 93)
  • tests/unit/test_quantization_meta_init_helpers.py::test_module_without_reset_is_noop (line 47)
  • tests/unit/test_quantize_rskill_auto_map.py::test_verify_passes_when_all_modules_present (line 90)
  • tests/unit/test_quantize_rskill_auto_map.py::test_verify_noop_when_no_auto_map (line 106)
  • tests/unit/test_quantize_rskill_remote_code_gate.py::test_default_trusted_org_passes (line 59)
  • tests/unit/test_quantize_rskill_remote_code_gate.py::test_env_allowlist_extends_trust (line 70)
  • tests/unit/test_quantize_rskill_remote_code_gate.py::test_local_path_exempt (line 89)
  • tests/unit/test_robotwin_backend.py::test_gate_accepts_rskill_on_every_robotwin_scene (line 312)
  • tests/unit/test_rskill_loader.py::test_apache_always_passes (line 403)
  • tests/unit/test_rskill_loader.py::test_nvidia_passes_when_env_set (line 420)
  • tests/unit/test_rskill_loader.py::test_nvidia_passes_when_non_commercial_use (line 429)
  • tests/unit/test_rskill_loader.py::test_proprietary_does_not_raise (line 439)
  • tests/unit/test_rskill_loader.py::test_rlwrld_passes_when_env_set (line 455)
  • tests/unit/test_rskill_loader.py::test_rlwrld_passes_when_non_commercial_use (line 464)
  • tests/unit/test_rskill_loader.py::test_permissive_research_passes_when_env_set (line 488)
  • tests/unit/test_rskill_loader.py::test_nvidia_open_model_always_passes (line 497)
  • tests/unit/test_rskill_loader.py::test_unknown_does_not_raise (line 508)
  • tests/unit/test_rskill_loader.py::test_tag_match_passes (line 625)
  • tests/unit/test_rskill_loader.py::test_bool_flag_satisfied_passes (line 654)
  • tests/unit/test_rskill_loader.py::test_numeric_flag_at_threshold_passes (line 667)
  • tests/unit/test_rskill_loader.py::test_empty_requirements_always_passes (line 680)
  • tests/unit/test_rskill_loader.py::test_runtime_supported_passes (line 729)
  • tests/unit/test_rskill_loader.py::test_runtime_unknown_skips_check (line 734)
  • tests/unit/test_rskill_loader.py::test_quantization_dtype_supported_passes (line 754)
  • tests/unit/test_rskill_loader.py::test_quantization_dtype_unknown_skips_check (line 762)
  • tests/unit/test_rskill_loader.py::test_no_requirements_always_passes (line 818)
  • tests/unit/test_rskill_loader.py::test_keyed_match_passes (line 822)
  • tests/unit/test_rskill_loader.py::test_modality_count_satisfied (line 884)
  • tests/unit/test_rskill_loader.py::test_passes_when_both_tags_and_sensors_match (line 924)
  • tests/unit/test_runtime.py::test_quantize_is_noop (line 126)
  • tests/unit/test_runtime.py::test_warmup_is_noop (line 130)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_clock_authority (line 422)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_intrinsics_pinhole (line 429)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_camera_sim_placement (line 436)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_sensor_spec (line 443)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_sensor_bundle (line 450)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_joint_spec (line 457)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_end_effector_spec (line 464)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_robot_capabilities (line 471)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_compute_spec (line 478)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_reasoner_model (line 485)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_safety_envelope (line 492)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_hal_entrypoints (line 499)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_robot_description (line 506)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_joint_state (line 513)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_pose6d (line 520)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_detected_object (line 527)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_world_state (line 534)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_capsule_shape (line 541)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_sphere_shape (line 548)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_link_collision_geometry (line 555)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_world_collision_primitive (line 562)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_attached_collision_object (line 593)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_occupancy_grid_ref (line 600)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_collision_evidence (line 607)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_action (line 614)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_quantization_config (line 644)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_device_info (line 651)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_rskill_latency_budget (line 852)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_rskill_manifest (line 859)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_segmenter_contract (line 875)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_scene_spec (line 936)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_vla_spec (line 943)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_task_spec (line 950)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_hal_config (line 1068)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_tick_result (line 1091)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_run_result (line 1112)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_spatial_node (line 1226)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_spatial_edge (line 1233)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_scene_graph (line 1240)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_recall_object_query (line 1247)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_approach_viewpoint (line 1254)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_recall_object_match (line 1261)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_recall_object_result (line 1268)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_resolve_place_query (line 1275)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_resolve_place_result (line 1282)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_recall_object_tool (line 1305)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_resolve_place_tool (line 1312)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_wait_tool (line 1325)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_deploy_runtime (line 1332)
  • tests/unit/test_sidecar_torch_aarch64_pins.py::test_sidecar_requirement_files_have_aarch64_wheels (line 128)
  • tests/unit/test_chunked_executor.py::test_stop_is_idempotent (line 176)
  • tests/unit/test_so100_follower_hal.py::test_disconnect_idempotent (line 203)
  • tests/unit/test_so100_follower_hal.py::test_disconnect_without_connect_is_noop (line 207)
  • tests/unit/test_so100_follower_hal.py::test_sends_zero_action (line 273)
  • tests/unit/test_spatial_memory_builder.py::test_resolve_place_unknown_raises (line 105)
  • tests/unit/test_spatial_memory_contracts.py::test_scene_graph_rejects_duplicate_node_ids (line 103)
  • tests/unit/test_spatial_memory_contracts.py::test_scene_graph_rejects_dangling_edge (line 113)
  • tests/unit/test_spatial_memory_contracts.py::test_node_rejects_last_seen_before_first_seen (line 129)
  • tests/unit/test_spatial_memory_contracts.py::test_node_occludes_contents_requires_container (line 145)
  • tests/unit/test_spatial_memory_contracts.py::test_recall_object_query_requires_a_term (line 166)
  • tests/unit/test_world_state.py::test_clear_nonexistent_is_noop (line 465)
  • python/observability/tests/test_sdk_init.py::test_shutdown_is_safe_when_unconfigured (line 51)
  • packages/openral_hal_node/test/test_lifecycle_estop_safety.py::test_estopped_node_does_not_poll_disconnected_real_hal (line 83)