Microduck Training Studio R1.5.18 verification — 2026-10-07

Scope: portable numerical tests, real loopback HTTP, model-identity guards, mocked runtime orchestration, action-hook contract fixture, Node DOM/HTTP fixtures and existing workflow regressions.
This run did NOT execute Torch/MuJoCo/mjlab physics, GPU policy inference, browser rendering, training or a physical robot. Real A/B rollout results are produced only when the user runs the feature in the pinned training environment.

Additional completed checks: the provided 17,534,234-byte runtime recording parsed successfully (479 frames; 120 active StandUp frames; 14 policy joints). Its numeric ID21 example maps -50 deg to -22 deg, encoder 2426 and -21.97265625 deg. The recording itself is not included.
Independent-worker imports and the durable worker payload include all new modules.

COMMAND: python3 -m unittest tests.test_target_limit_profile tests.test_target_limit_api tests.test_limit_comparison_runtime tests.test_recovery_api tests.test_event_protocol tests.test_remote_training tests.test_training_queue tests.test_action_filter tests.test_recovery_evaluation.RecoveryResultsTests tests.test_eval_push_dependencies -v
test_frame_counts_and_active_frame_requirement (tests.test_target_limit_profile.TargetLimitProfileTests.test_frame_counts_and_active_frame_requirement) ... ok
test_named_mapping_excludes_mouth_and_keeps_source_unchanged (tests.test_target_limit_profile.TargetLimitProfileTests.test_named_mapping_excludes_mouth_and_keeps_source_unchanged) ... ok
test_raw_boundaries_use_rust_rounding_and_never_wrap (tests.test_target_limit_profile.TargetLimitProfileTests.test_raw_boundaries_use_rust_rounding_and_never_wrap) ... ok
test_rejects_invalid_numeric_types_and_malformed_active_fields (tests.test_target_limit_profile.TargetLimitProfileTests.test_rejects_invalid_numeric_types_and_malformed_active_fields) ... ok
test_rejects_missing_duplicate_unknown_and_extra_joint_rows (tests.test_target_limit_profile.TargetLimitProfileTests.test_rejects_missing_duplicate_unknown_and_extra_joint_rows) ... ok
test_rejects_model_calibration_or_fixed_runtime_change (tests.test_target_limit_profile.TargetLimitProfileTests.test_rejects_model_calibration_or_fixed_runtime_change) ... ok
test_rejects_nonfinite_and_overflow_numbers (tests.test_target_limit_profile.TargetLimitProfileTests.test_rejects_nonfinite_and_overflow_numbers) ... ok
test_requires_matching_model_hash_and_standup_task (tests.test_target_limit_profile.TargetLimitProfileTests.test_requires_matching_model_hash_and_standup_task) ... ok
test_http_profile_launch_progress_result_download_and_auth (tests.test_target_limit_api.TargetLimitApiTests.test_http_profile_launch_progress_result_download_and_auth) ... ok
test_mapping_cannot_leak_into_training_or_other_operations (tests.test_target_limit_api.TargetLimitApiTests.test_mapping_cannot_leak_into_training_or_other_operations) ... ok
test_ordinary_onnx_keeps_its_original_path (tests.test_target_limit_api.TargetLimitApiTests.test_ordinary_onnx_keeps_its_original_path) ... ok
test_selected_export_identity_is_bound_and_recipe_is_untouched (tests.test_target_limit_api.TargetLimitApiTests.test_selected_export_identity_is_bound_and_recipe_is_untouched) ... ok
test_wrong_model_and_invalid_profile_do_not_create_jobs (tests.test_target_limit_api.TargetLimitApiTests.test_wrong_model_and_invalid_profile_do_not_create_jobs) ... ok
test_automatic_a_then_b_with_same_profile_and_exact_fingerprint (tests.test_limit_comparison_runtime.ComparisonOrchestrationTests.test_automatic_a_then_b_with_same_profile_and_exact_fingerprint) ... ok
test_mismatched_start_stops_before_policy_action_and_closes_env (tests.test_limit_comparison_runtime.ComparisonOrchestrationTests.test_mismatched_start_stops_before_policy_action_and_closes_env) ... ok
test_model_replacement_between_a_and_b_rejected (tests.test_limit_comparison_runtime.ComparisonOrchestrationTests.test_model_replacement_between_a_and_b_rejected) ... ok
test_none_profile_never_falls_back_to_ordinary_viewer (tests.test_limit_comparison_runtime.ComparisonOrchestrationTests.test_none_profile_never_falls_back_to_ordinary_viewer) ... ok
test_physics_history_difference_invalidates_comparison (tests.test_limit_comparison_runtime.ComparisonOrchestrationTests.test_physics_history_difference_invalidates_comparison) ... ok
test_runtime_rechecks_actual_bytes_and_non_onnx_is_rejected (tests.test_limit_comparison_runtime.ComparisonOrchestrationTests.test_runtime_rechecks_actual_bytes_and_non_onnx_is_rejected) ... ok
test_unexpected_auto_reset_pose_cannot_be_recorded_as_success (tests.test_limit_comparison_runtime.ComparisonOrchestrationTests.test_unexpected_auto_reset_pose_cannot_be_recorded_as_success) ... ok
test_action_hook_preserves_raw_and_unclipped_ema_history (tests.test_limit_comparison_runtime.TargetMappingTests.test_action_hook_preserves_raw_and_unclipped_ema_history) ... ok
test_encoder_actuals_sum_named_backlash_and_bias (tests.test_limit_comparison_runtime.TargetMappingTests.test_encoder_actuals_sum_named_backlash_and_bias) ... ok
test_names_resolve_independent_of_profile_row_order (tests.test_limit_comparison_runtime.TargetMappingTests.test_names_resolve_independent_of_profile_row_order) ... ok
test_pi_is_clipped_not_wrapped_and_stages_remain_visible (tests.test_limit_comparison_runtime.TargetMappingTests.test_pi_is_clipped_not_wrapped_and_stages_remain_visible) ... ok
test_real_id21_calibration_encoder_roundtrip_and_no_a_change (tests.test_limit_comparison_runtime.TargetMappingTests.test_real_id21_calibration_encoder_roundtrip_and_no_a_change) ... ok
test_roundtrip_may_exceed_endpoint_without_second_clip (tests.test_limit_comparison_runtime.TargetMappingTests.test_roundtrip_may_exceed_endpoint_without_second_clip) ... ok
test_rust_round_ties_and_no_encoder_wrap (tests.test_limit_comparison_runtime.TargetMappingTests.test_rust_round_ties_and_no_encoder_wrap) ... ok
test_vertical_pose_is_not_false_side_crossing (tests.test_limit_comparison_runtime.TargetMappingTests.test_vertical_pose_is_not_false_side_crossing) ... ok
test_flag_does_not_start_training_or_apply_to_preview_export (tests.test_recovery_api.RecoveryLaunchTests.test_flag_does_not_start_training_or_apply_to_preview_export) ... ok
test_invalid_flags_never_enqueue_a_viewer (tests.test_recovery_api.RecoveryLaunchTests.test_invalid_flags_never_enqueue_a_viewer) ... ok
test_normal_play_remains_normal_and_training_has_no_eval_flag (tests.test_recovery_api.RecoveryLaunchTests.test_normal_play_remains_normal_and_training_has_no_eval_flag) ... ok
test_onnx_check_uses_export_bound_source_and_sha (tests.test_recovery_api.RecoveryLaunchTests.test_onnx_check_uses_export_bound_source_and_sha) ... ok
test_pt_check_binds_source_task_and_mapping_and_disables_pushes (tests.test_recovery_api.RecoveryLaunchTests.test_pt_check_binds_source_task_and_mapping_and_disables_pushes) ... ok
test_walking_model_cannot_enter_check_by_spoofing_task (tests.test_recovery_api.RecoveryLaunchTests.test_walking_model_cannot_enter_check_by_spoofing_task) ... ok
test_emit_uses_one_shared_writer_and_one_write_per_frame (tests.test_event_protocol.EventProtocolTests.test_emit_uses_one_shared_writer_and_one_write_per_frame) ... ok
test_joined_json_and_plain_logs_are_recovered_in_order (tests.test_event_protocol.EventProtocolTests.test_joined_json_and_plain_logs_are_recovered_in_order) ... ok
test_malformed_message_does_not_hide_following_good_event (tests.test_event_protocol.EventProtocolTests.test_malformed_message_does_not_hide_following_good_event) ... ok
test_prefix_and_braces_inside_json_strings_are_not_split (tests.test_event_protocol.EventProtocolTests.test_prefix_and_braces_inside_json_strings_are_not_split) ... ok
test_private_worker_bundle_imports_new_module_without_installed_training_package (tests.test_event_protocol.EventProtocolTests.test_private_worker_bundle_imports_new_module_without_installed_training_package) ... ok
test_real_child_continues_after_extra_data_but_actual_exit_failure_surfaces (tests.test_event_protocol.EventProtocolTests.test_real_child_continues_after_extra_data_but_actual_exit_failure_surfaces) ... ok
test_renderer_pipe_is_relayed_through_parent_reporter (tests.test_event_protocol.EventProtocolTests.test_renderer_pipe_is_relayed_through_parent_reporter) ... ok
test_close_and_disconnect_only_close_local_tunnels (tests.test_remote_training.RemoteTests.test_close_and_disconnect_only_close_local_tunnels) ... ok
test_deploy_starts_remote_environment_preparation (tests.test_remote_training.RemoteTests.test_deploy_starts_remote_environment_preparation) ... ok
test_failed_connection_stays_remote_and_retains_local_configuration (tests.test_remote_training.RemoteTests.test_failed_connection_stays_remote_and_retains_local_configuration) ... ok
test_input_validation_and_safe_ssh_arguments (tests.test_remote_training.RemoteTests.test_input_validation_and_safe_ssh_arguments) ... ok
test_legacy_export_envelope_reads_saved_parameters_and_actual_p (tests.test_remote_training.RemoteTests.test_legacy_export_envelope_reads_saved_parameters_and_actual_p) ... ok
test_model_mismatches_and_size_are_rejected (tests.test_remote_training.RemoteTests.test_model_mismatches_and_size_are_rejected) ... ok
test_model_transport_keeps_physical_contract_and_iteration (tests.test_remote_training.RemoteTests.test_model_transport_keeps_physical_contract_and_iteration) ... ok
test_restart_preserves_target_without_starting_or_falling_back (tests.test_remote_training.RemoteTests.test_restart_preserves_target_without_starting_or_falling_back) ... ok
test_server_proxy_keeps_browser_token_local_and_remote_payload_exact (tests.test_remote_training.RemoteTests.test_server_proxy_keeps_browser_token_local_and_remote_payload_exact) ... ok
test_viewers_get_separate_loopback_tunnels (tests.test_remote_training.RemoteTests.test_viewers_get_separate_loopback_tunnels) ... ok
test_wsl_deploy_only_inspects_existing_engine (tests.test_remote_training.RemoteTests.test_wsl_deploy_only_inspects_existing_engine) ... ok
test_complete_event_without_owner_exit_is_reconnected (tests.test_training_queue.TrainingQueueTests.test_complete_event_without_owner_exit_is_reconnected) ... ok
test_cuda_600_message_does_not_guess_oom_or_hide_trace (tests.test_training_queue.TrainingQueueTests.test_cuda_600_message_does_not_guess_oom_or_hide_trace) ... ok
test_early_pt_pruning_keeps_pending_queue_resume_source (tests.test_training_queue.TrainingQueueTests.test_early_pt_pruning_keeps_pending_queue_resume_source) ... ok
test_existing_manual_training_is_waited_for_and_never_stopped (tests.test_training_queue.TrainingQueueTests.test_existing_manual_training_is_waited_for_and_never_stopped) ... ok
test_failure_pauses_or_skips_and_stop_always_pauses (tests.test_training_queue.TrainingQueueTests.test_failure_pauses_or_skips_and_stop_always_pauses) ... ok
test_invalid_future_teacher_and_no_saved_pt_fail_clearly (tests.test_training_queue.TrainingQueueTests.test_invalid_future_teacher_and_no_saved_pt_fail_clearly) ... ok
test_missing_launch_recovers_once_and_closed_never_starts (tests.test_training_queue.TrainingQueueTests.test_missing_launch_recovers_once_and_closed_never_starts) ... ok
test_next_waits_for_owner_exit_not_complete_event (tests.test_training_queue.TrainingQueueTests.test_next_waits_for_owner_exit_not_complete_event) ... ok
test_pause_does_not_stop_current_and_resume_continues (tests.test_training_queue.TrainingQueueTests.test_pause_does_not_stop_current_and_resume_continues) ... ok
test_persisted_launch_link_recovers_without_duplicate (tests.test_training_queue.TrainingQueueTests.test_persisted_launch_link_recovers_without_duplicate) ... ok
test_reorder_remove_and_manual_train_guard (tests.test_training_queue.TrainingQueueTests.test_reorder_remove_and_manual_train_guard) ... ok
test_snapshot_and_add_are_not_launch_or_checks (tests.test_training_queue.TrainingQueueTests.test_snapshot_and_add_are_not_launch_or_checks) ... ok
test_stop_after_complete_event_does_not_dispatch_next (tests.test_training_queue.TrainingQueueTests.test_stop_after_complete_event_does_not_dispatch_next) ... ok
test_stop_persists_barrier_before_stopping_only_training (tests.test_training_queue.TrainingQueueTests.test_stop_persists_barrier_before_stopping_only_training) ... ok
test_stop_waiting_queue_survives_restart_without_launch (tests.test_training_queue.TrainingQueueTests.test_stop_waiting_queue_survives_restart_without_launch) ... ok
test_teachers_latest_pt_and_order_and_deletion (tests.test_training_queue.TrainingQueueTests.test_teachers_latest_pt_and_order_and_deletion) ... ok
test_joint_teachers_must_match_filter_semantics (tests.test_action_filter.ActionFilterContractTests.test_joint_teachers_must_match_filter_semantics) ... ok
test_legacy_missing_settings_do_not_acquire_new_filter (tests.test_action_filter.ActionFilterContractTests.test_legacy_missing_settings_do_not_acquire_new_filter) ... ok
test_play_export_and_resume_use_saved_filter_even_when_page_differs (tests.test_action_filter.ActionFilterContractTests.test_play_export_and_resume_use_saved_filter_even_when_page_differs) ... ok
test_remote_and_durable_worker_bundles_contain_filter_implementation (tests.test_action_filter.ActionFilterContractTests.test_remote_and_durable_worker_bundles_contain_filter_implementation) ... ok
test_request_validation_keeps_new_filter_and_legacy_passthrough (tests.test_action_filter.ActionFilterContractTests.test_request_validation_keeps_new_filter_and_legacy_passthrough) ... ok
test_resolved_filter_controls_export_not_mutable_request (tests.test_action_filter.ActionFilterContractTests.test_resolved_filter_controls_export_not_mutable_request) ... ok
test_selected_scale_reaches_new_training_request (tests.test_action_filter.ActionFilterContractTests.test_selected_scale_reaches_new_training_request) ... ok
test_task_scales_and_profiles_do_not_change_unrelated_runtime_branches (tests.test_action_filter.ActionFilterContractTests.test_task_scales_and_profiles_do_not_change_unrelated_runtime_branches) ... ok
test_validation_rejects_nonfinite_zero_and_unsupported_values (tests.test_action_filter.ActionFilterContractTests.test_validation_rejects_nonfinite_zero_and_unsupported_values) ... ok
test_height_and_tilt_must_hold_together_for_a_full_second (tests.test_recovery_evaluation.RecoveryResultsTests.test_height_and_tilt_must_hold_together_for_a_full_second) ... ok
test_mixed_observation_and_cancelled_trials_do_not_inflate_success (tests.test_recovery_evaluation.RecoveryResultsTests.test_mixed_observation_and_cancelled_trials_do_not_inflate_success) ... ok
test_reset_pose_cannot_create_success (tests.test_recovery_evaluation.RecoveryResultsTests.test_reset_pose_cannot_create_success) ... ok
test_all_dependent_terms_removed (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_all_dependent_terms_removed) ... ok
test_all_four_evaluation_operations_clean_dependencies (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_all_four_evaluation_operations_clean_dependencies) ... ok
test_already_absent_event_not_restored_when_push_flag_true (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_already_absent_event_not_restored_when_push_flag_true) ... ok
test_idempotent_and_keeps_disabled_placeholders (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_idempotent_and_keeps_disabled_placeholders) ... ok
test_matches_dependency_not_curriculum_key (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_matches_dependency_not_curriculum_key) ... ok
test_none_event_is_inactive (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_none_event_is_inactive) ... ok
test_onnx_path_cleans_before_environment_construction (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_onnx_path_cleans_before_environment_construction) ... ok
test_other_configuration_errors_are_not_hidden (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_other_configuration_errors_are_not_hidden) ... ok
test_push_enabled_keeps_event_and_curricula (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_push_enabled_keeps_event_and_curricula) ... ok
test_real_bundled_baseline_dependency_tables (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_real_bundled_baseline_dependency_tables) ... ok
test_reproduces_original_crash_then_cleans_orphan (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_reproduces_original_crash_then_cleans_orphan) ... ok
test_saved_policy_pushes_off_is_reconciled_even_with_eval_pushes_true (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_saved_policy_pushes_off_is_reconciled_even_with_eval_pushes_true) ... ok
test_training_preflight_describe_requests_do_nothing (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_training_preflight_describe_requests_do_nothing) ... ok
test_turn_off_removes_event_and_dependent_term (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_turn_off_removes_event_and_dependent_term) ... ok
test_unrelated_events_rewards_and_curricula_unchanged (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_unrelated_events_rewards_and_curricula_unchanged) ... ok
test_v2_cleans_both_push_dependencies (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_v2_cleans_both_push_dependencies) ... ok
test_v2_push_enabled_retains_both_events_and_courses (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_v2_push_enabled_retains_both_events_and_courses) ... ok
test_wrapper_cleanup_runs_after_recipe_overrides (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_wrapper_cleanup_runs_after_recipe_overrides) ... ok
test_wrapper_forwards_play_mode_and_keeps_registry_snapshot (tests.test_eval_push_dependencies.EvaluationDependencyTests.test_wrapper_forwards_play_mode_and_keeps_registry_snapshot) ... ok

----------------------------------------------------------------------
Ran 99 tests in 4.412s

OK

EXIT: 0

COMMAND: node --check training/static/training.js

EXIT: 0

COMMAND: node tests/test_target_limit_ui.cjs
TARGET_LIMIT_UI_OK: visible entry; ONNX/role/file-size guards; upload and bound launch; duplicate/offline guards; same page progress, settings, stop, result validity and JSON download; normal viewer restored.
SCOPE: Node DOM/HTTP fixture; no browser rendering, hardware or physics inference.

EXIT: 0

COMMAND: node tests/test_recovery_ui.cjs
RECOVERY_UI_OK: 4 official stand variants × PT/ONNX; selected-model role and resolved_task; normal/recovery payloads; no automatic POST/train; offline/pending/in-flight guards.
SCOPE: Node DOM/HTTP fixture only; no real browser rendering, 4K screenshots, WebGL, training, or policy inference.

EXIT: 0

Python source syntax: PASS.
