Test-suite audit
Generated by
tools/audit_tests.py(just test-audit). Read-only signal for review — seeselective-testing.mdfor 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_budgettests/sim/test_franka_panda_smolvla_libero.py::test_manifest_has_latency_budgettests/sim/test_panda_mobile_pi05_robocasa.py::test_manifest_has_latency_budgettests/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_protocoltests/unit/test_aloha.py::test_satisfies_hal_protocoltests/unit/test_franka_panda_real.py::test_satisfies_hal_protocoltests/unit/test_sawyer_real.py::test_satisfies_hal_protocol
- 4 identical bodies:
tests/sim/test_hal_protocol_contracts.py::test_disconnect_idempotenttests/unit/test_aloha.py::test_disconnect_idempotenttests/unit/test_franka_panda_real.py::test_disconnect_idempotenttests/unit/test_sawyer_real.py::test_disconnect_idempotent
- 3 identical bodies:
tests/sim/test_g1_hal_mujoco.py::test_send_action_holds_zero_posetests/sim/test_h1_hal_mujoco.py::test_send_action_holds_zero_posetests/sim/test_openarm_hal_mujoco.py::test_hold_zero_pose
- 3 identical bodies:
tests/unit/test_aloha.py::test_read_state_before_connect_raisestests/unit/test_franka_panda_real.py::test_read_state_before_connect_raisestests/unit/test_sawyer_real.py::test_read_state_before_connect_raises
- 3 identical bodies:
tests/unit/test_aloha.py::test_estop_always_raisestests/unit/test_franka_panda_real.py::test_estop_always_raisestests/unit/test_sawyer_real.py::test_estop_always_raises
- 3 identical bodies:
tests/unit/test_aloha.py::test_estop_is_safety_violationtests/unit/test_franka_panda_real.py::test_estop_is_safety_violationtests/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_layouttests/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_bimanualtests/unit/test_aloha.py::test_capabilities_declare_bimanual
- 2 identical bodies:
tests/sim/test_aloha_bimanual_hal_mujoco.py::test_connect_loads_mujoco_modeltests/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_dimtests/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_frametests/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_violationtests/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_sensorstests/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_zerotests/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_zerotests/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_so100tests/unit/test_so100_follower_hal.py::test_embodiment_tag
- 2 identical bodies:
tests/sim/test_so100_follower_hal_mujoco.py::test_connect_loads_mujoco_modeltests/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_counttests/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_slotstests/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_mactests/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_steptests/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_envtests/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_raisestests/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_failstests/unit/test_sawyer_real.py::test_after_estop_send_action_fails
- 2 identical bodies:
tests/unit/test_runtime.py::test_device_propertytests/unit/test_runtime.py::test_device_property
- 2 identical bodies:
tests/unit/test_runtime.py::test_initial_not_loadedtests/unit/test_runtime.py::test_initial_not_loaded
- 2 identical bodies:
tests/unit/test_runtime.py::test_infer_before_load_raisestests/unit/test_runtime.py::test_infer_before_load_raises
- 2 identical bodies:
packages/openral_hal_ur10e/test/test_lifecycle_node.py::test_lifecycle_smokepackages/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)