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: 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_exceptionspackages/openral_safety/test/test_supervisor_node_sigint_shape.py::test_except_does_not_catch_broad_exceptionspackages/openral_safety_watchdog/test/test_deadman_watchdog_node_sigint_shape.py::test_except_does_not_catch_broad_exceptionspackages/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_budgettests/sim/test_franka_panda_smolvla_libero.py::test_manifest_has_latency_budgettests/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_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/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_robocasa_sim_targets.py::test_targets_only_lists_files_that_existtests/unit/test_ros_live_targets.py::test_targets_only_lists_files_that_exist
- 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
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)