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: 361
  • Test functions: 3276
  • Trivial (dead) tests: 0
  • Shadowed (dead) tests: 0
  • No-assertion candidates: 111
  • Duplicate-body groups: 29

Inventory by tier

Tier Functions
unit 2522
sim 307
pkg:observability 113
integration 65
pkg:dataset 53
pkg:hal 48
hil 36
ros:openral_safety 30
ros:openral_rskill_ros 25
pkg:state_adapter 11
ros:openral_hal_panda_mobile 8
ros:openral_perception_ros 8
pkg:wam 6
pkg:reasoner 5
ros:openral_prompt_router 5
ros:openral_reasoner_ros 5
pkg:core 4
ros:world_state 4
ros:openral_hal_ur5e 3
ros:openral_safety_watchdog 3
ros:openral_slam_bringup 3
ros:openral_hal_so100 2
ros:openral_human_estop 2
ros:openral_nav2_bringup 2
ros:openral_hal_aloha 1
ros:openral_hal_franka 1
ros:openral_hal_g1 1
ros:openral_hal_h1 1
ros:openral_hal_rizon4 1
ros:openral_hal_ur10e 1

Inventory by marker

Marker Functions
parametrize 98
skipif 45
asyncio 15
filterwarnings 8
slow 1

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:
    • 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_panda_mobile_pi05_robocasa.py::test_manifest_has_latency_budget
    • tests/sim/test_pusht_2d_diffusion_pusht.py::test_manifest_has_latency_budget
  • 4 identical bodies:
    • tests/sim/test_hal_protocol_contracts.py::test_satisfies_hal_protocol
    • tests/unit/test_aloha.py::test_satisfies_hal_protocol
    • tests/unit/test_franka_panda_real.py::test_satisfies_hal_protocol
    • tests/unit/test_sawyer_real.py::test_satisfies_hal_protocol
  • 4 identical bodies:
    • tests/sim/test_hal_protocol_contracts.py::test_disconnect_idempotent
    • tests/unit/test_aloha.py::test_disconnect_idempotent
    • tests/unit/test_franka_panda_real.py::test_disconnect_idempotent
    • tests/unit/test_sawyer_real.py::test_disconnect_idempotent
  • 3 identical bodies:
    • tests/sim/test_g1_hal_mujoco.py::test_send_action_holds_zero_pose
    • tests/sim/test_h1_hal_mujoco.py::test_send_action_holds_zero_pose
    • tests/sim/test_openarm_hal_mujoco.py::test_hold_zero_pose
  • 3 identical bodies:
    • tests/unit/test_aloha.py::test_read_state_before_connect_raises
    • tests/unit/test_franka_panda_real.py::test_read_state_before_connect_raises
    • tests/unit/test_sawyer_real.py::test_read_state_before_connect_raises
  • 3 identical bodies:
    • tests/unit/test_aloha.py::test_estop_always_raises
    • tests/unit/test_franka_panda_real.py::test_estop_always_raises
    • tests/unit/test_sawyer_real.py::test_estop_always_raises
  • 3 identical bodies:
    • tests/unit/test_aloha.py::test_estop_is_safety_violation
    • tests/unit/test_franka_panda_real.py::test_estop_is_safety_violation
    • tests/unit/test_sawyer_real.py::test_estop_is_safety_violation
  • 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/sim/test_aloha_bimanual_hal_mujoco.py::test_connect_loads_mujoco_model
    • tests/sim/test_openarm_hal_mujoco.py::test_connect_loads_mujoco_model
  • 2 identical bodies:
    • tests/sim/test_franka_isaac_deploy_hal.py::test_connect_resolves_action_dim
    • tests/sim/test_franka_urdf_isaac.py::test_connect_resolves_action_dim
  • 2 identical bodies:
    • tests/sim/test_franka_isaac_deploy_hal.py::test_read_images_returns_isaac_frame
    • tests/sim/test_franka_urdf_isaac.py::test_read_images_returns_isaac_frame
  • 2 identical bodies:
    • tests/sim/test_franka_panda_hal_mujoco.py::test_estop_raises_safety_violation
    • tests/sim/test_hal_protocol_contracts.py::test_estop_raises_safety_violation
  • 2 identical bodies:
    • tests/sim/test_franka_panda_smolvla_libero.py::test_manifest_declares_two_rgb_sensors
    • tests/sim/test_panda_mobile_pi05_robocasa.py::test_manifest_declares_two_rgb_sensors
  • 2 identical bodies:
    • tests/sim/test_g1_hal_mujoco.py::test_initial_positions_are_zero
    • tests/sim/test_h1_hal_mujoco.py::test_initial_positions_are_zero
  • 2 identical bodies:
    • tests/sim/test_rizon4_hal_mujoco.py::test_initial_positions_are_zero
    • tests/sim/test_ur5e_hal_mujoco.py::test_initial_positions_are_zero
  • 2 identical bodies:
    • tests/sim/test_so100_follower_hal_mujoco.py::test_embodiment_tags_include_so100
    • tests/unit/test_so100_follower_hal.py::test_embodiment_tag
  • 2 identical bodies:
    • tests/sim/test_so100_follower_hal_mujoco.py::test_connect_loads_mujoco_model
    • tests/sim/test_ur5e_hal_mujoco.py::test_connect_loads_mujoco_model
  • 2 identical bodies:
    • tests/sim/test_so100_follower_hal_mujoco.py::test_rejects_wrong_joint_count
    • tests/sim/test_ur5e_hal_mujoco.py::test_rejects_wrong_joint_count
  • 2 identical bodies:
    • tests/unit/test_action_representation_slots.py::test_joint_positions_returns_none_canonical_slots
    • tests/unit/test_skill_runner_representation_dispatch.py::test_joint_representation_returns_none
  • 2 identical bodies:
    • tests/unit/test_doctor.py::test_check_gpu_absent_non_mac
    • tests/unit/test_doctor.py::test_check_gpu_nvsmi_query_fails
  • 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_franka_panda_real.py::test_after_estop_send_action_fails
    • tests/unit/test_sawyer_real.py::test_after_estop_send_action_fails
  • 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
  • 2 identical bodies:
    • packages/openral_hal_ur10e/test/test_lifecycle_node.py::test_lifecycle_smoke
    • packages/openral_hal_ur5e/test/test_lifecycle_node.py::test_lifecycle_smoke

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 122)
  • 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 137)
  • tests/sim/test_hal_protocol_contracts.py::test_disconnect_without_connect_is_noop (line 143)
  • tests/sim/test_openarm_scene_pnp.py::test_openarm_tabletop_scene_loads_and_steps (line 74)
  • tests/unit/test_aloha.py::test_disconnect_idempotent (line 177)
  • tests/unit/test_benchmark_schemas.py::test_raise_on_invalid_suite_happy_path (line 141)
  • tests/unit/test_benchmark_schemas.py::test_raise_on_invalid_suite_allows_mixed_max_steps_per_task (line 202)
  • tests/unit/test_benchmark_schemas.py::test_raise_on_invalid_suite_allows_mixed_success_key_per_task (line 211)
  • tests/unit/test_cartesian_rskill_contracts.py::test_swept_skill_declares_cartesian_action_contract (line 77)
  • tests/unit/test_cartesian_rskill_contracts.py::test_reference_widowx_skill_already_declares_cartesian_contract (line 81)
  • tests/unit/test_cli_deploy_sim.py::test_bh_preflight_palette_deps_silent_when_no_capability_match (line 495)
  • tests/unit/test_cli_deploy_sim.py::test_bh_preflight_palette_deps_returns_silent_when_no_rskills_dir (line 510)
  • tests/unit/test_collision_geometry_contracts.py::test_capsule_rejects_nonpositive_radius (line 49)
  • tests/unit/test_eval_adapters_helpers.py::test_reset_no_op_without_policy_reset (line 405)
  • tests/unit/test_franka_panda_real.py::test_disconnect_idempotent (line 132)
  • 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 315)
  • tests/unit/test_install_command.py::test_no_conflict_no_raise (line 88)
  • tests/unit/test_install_command.py::test_dispatch_repl_line_handles_quoted_args (line 149)
  • tests/unit/test_isaac_sim_sidecar_wire.py::test_connect_pings_existing_sidecar (line 167)
  • tests/unit/test_lifecycle_autostart.py::test_drive_transition_succeeds_when_state_advances_despite_no_response (line 143)
  • tests/unit/test_lifecycle_autostart.py::test_drive_transition_polls_grace_window_before_success (line 162)
  • tests/unit/test_molmoact2_offline_gate.py::test_allowed_with_env_pinned (line 34)
  • tests/unit/test_molmoact2_offline_gate.py::test_allowed_with_env_unpinned (line 38)
  • tests/unit/test_mujoco_arm.py::test_disconnect_when_never_connected_is_noop (line 169)
  • tests/unit/test_quantization_meta_init_helpers.py::test_module_without_reset_is_noop (line 47)
  • tests/unit/test_quantize_rskill_remote_code_gate.py::test_default_trusted_org_passes (line 31)
  • tests/unit/test_quantize_rskill_remote_code_gate.py::test_env_allowlist_extends_trust (line 42)
  • tests/unit/test_quantize_rskill_remote_code_gate.py::test_local_path_exempt (line 61)
  • tests/unit/test_rskill_loader.py::test_apache_always_passes (line 386)
  • tests/unit/test_rskill_loader.py::test_nvidia_passes_when_env_set (line 403)
  • tests/unit/test_rskill_loader.py::test_nvidia_passes_when_non_commercial_use (line 412)
  • tests/unit/test_rskill_loader.py::test_proprietary_does_not_raise (line 422)
  • tests/unit/test_rskill_loader.py::test_rlwrld_passes_when_env_set (line 438)
  • tests/unit/test_rskill_loader.py::test_rlwrld_passes_when_non_commercial_use (line 447)
  • tests/unit/test_rskill_loader.py::test_permissive_research_passes_when_env_set (line 473)
  • tests/unit/test_rskill_loader.py::test_nvidia_open_model_always_passes (line 482)
  • tests/unit/test_rskill_loader.py::test_unknown_does_not_raise (line 493)
  • tests/unit/test_rskill_loader.py::test_tag_match_passes (line 610)
  • tests/unit/test_rskill_loader.py::test_bool_flag_satisfied_passes (line 625)
  • tests/unit/test_rskill_loader.py::test_numeric_flag_at_threshold_passes (line 638)
  • tests/unit/test_rskill_loader.py::test_empty_requirements_always_passes (line 651)
  • tests/unit/test_rskill_loader.py::test_runtime_supported_passes (line 692)
  • tests/unit/test_rskill_loader.py::test_runtime_unknown_skips_check (line 700)
  • tests/unit/test_rskill_loader.py::test_quantization_dtype_supported_passes (line 721)
  • tests/unit/test_rskill_loader.py::test_quantization_dtype_unknown_skips_check (line 731)
  • tests/unit/test_rskill_loader.py::test_no_requirements_always_passes (line 791)
  • tests/unit/test_rskill_loader.py::test_keyed_match_passes (line 795)
  • tests/unit/test_rskill_loader.py::test_modality_count_satisfied (line 857)
  • tests/unit/test_rskill_loader.py::test_passes_when_both_tags_and_sensors_match (line 897)
  • tests/unit/test_runtime.py::test_quantize_is_noop (line 156)
  • tests/unit/test_runtime.py::test_warmup_is_noop (line 160)
  • tests/unit/test_runtime.py::test_invalidate_miss_is_noop (line 437)
  • tests/unit/test_sawyer_real.py::test_disconnect_idempotent (line 180)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_intrinsics_pinhole (line 300)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_sensor_spec (line 307)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_sensor_bundle (line 314)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_joint_spec (line 321)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_end_effector_spec (line 328)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_robot_capabilities (line 335)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_safety_envelope (line 342)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_hal_entrypoints (line 349)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_robot_description (line 356)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_joint_state (line 363)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_pose6d (line 370)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_detected_object (line 377)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_world_state (line 384)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_capsule_shape (line 391)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_sphere_shape (line 398)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_link_collision_geometry (line 405)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_world_collision_primitive (line 412)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_occupancy_grid_ref (line 419)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_collision_evidence (line 426)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_action (line 433)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_quantization_config (line 463)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_device_info (line 470)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_rskill_latency_budget (line 669)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_rskill_manifest (line 676)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_scene_spec (line 738)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_vla_spec (line 745)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_task_spec (line 752)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_hal_config (line 871)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_tick_result (line 937)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_run_result (line 958)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_spatial_node (line 1072)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_spatial_edge (line 1079)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_scene_graph (line 1086)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_recall_object_query (line 1093)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_approach_viewpoint (line 1100)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_recall_object_match (line 1107)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_recall_object_result (line 1114)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_resolve_place_query (line 1121)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_resolve_place_result (line 1128)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_recall_object_tool (line 1151)
  • tests/unit/test_schemas_fuzz.py::test_fuzz_resolve_place_tool (line 1158)
  • tests/unit/test_smolvla_adapter.py::test_stop_is_idempotent (line 194)
  • tests/unit/test_smolvla_adapter.py::test_shutdown_is_idempotent (line 331)
  • 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 413)
  • python/observability/tests/test_sdk_init.py::test_shutdown_is_safe_when_unconfigured (line 51)