<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="0" skipped="0" tests="118" time="1.283" timestamp="2026-08-15T15:40:28.967365+09:00" hostname="cube-B850M-AORUS-ELITE-WIFI6E-ICE"><testcase classname="tests.gateway.test_nutrition_coaching" name="test_telegram_customer_transport_rejects_wrong_customer_or_noncanonical_destination[user_id-other-user]" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_telegram_customer_transport_rejects_wrong_customer_or_noncanonical_destination[chat_id-other-chat]" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_telegram_customer_transport_rejects_wrong_customer_or_noncanonical_destination[topic_id-other-topic]" time="0.004" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_n3_callback_acknowledges_before_rejecting_stale_revision_or_render" time="0.004" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueTelegramAdapterIngress" name="test_n3_callback_rejects_stale_render_identity_before_business_mutation" time="0.004" /><testcase classname="tests.gateway.test_telegram_physique_checkin.TestPhysiqueCheckinBridge" name="test_replay_and_expiry_are_rejected_without_mutating_service" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_auth_failure_is_retryable_without_receipt_deletion" time="0.007" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_invalid_output_creates_no_draft" time="0.005" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_restart_reclaims_only_an_expired_lease" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_stale_provider_return_cannot_persist_over_reclaimed_claim" time="0.008" /><testcase classname="tests.gateway.test_telegram_room_bootstrap_adversarial" name="test_restart_preserves_every_nonterminal_phase[PREPARED]" time="0.005" /><testcase classname="tests.gateway.test_telegram_room_bootstrap_adversarial" name="test_restart_preserves_every_nonterminal_phase[REGISTERING]" time="0.008" /><testcase classname="tests.gateway.test_telegram_room_bootstrap_adversarial" name="test_restart_preserves_every_nonterminal_phase[AWAITING_CONSENT]" time="0.006" /><testcase classname="tests.gateway.test_telegram_room_bootstrap_adversarial" name="test_restart_preserves_every_nonterminal_phase[AWAITING_ACTIVATION]" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_review_callbacks_use_canonical_service_and_exact_role_route[op_rev-owner_review-review_as_owner-revise-owner-collecting-revision]" time="0.004" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_review_callbacks_use_canonical_service_and_exact_role_route[op_rej-owner_review-review_as_owner-rejected-owner-rejected-rejection]" time="0.004" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding" name="test_review_callback_rejects_wrong_user_before_service_mutation" time="0.004" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_stale_owner_review_callback_is_rejected_before_mutation" time="0.004" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_restart_authenticates_original_owner_update_and_records_terminal_receipt" time="0.006" /><testcase classname="tests.gateway.test_telegram_nutrition_onboarding_callback_observability" name="test_restart_recovers_committed_owner_approval_without_second_review" time="0.004" /><testcase classname="tests.gateway.test_task7_generation_hardening" name="test_delivery_restart_after_transport_before_receipt_does_not_resend" time="0.014" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_delivery_outbox_provider_timeout_callback_never_resends" time="0.008" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_approval_receipt_is_immutable_duplicate_idempotent_and_zero_delivery" time="0.006" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_coach_v2_request_strips_actions_and_bounds_history" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_customer_pause_resume_is_durable_idempotent_and_authority_neutral" time="0.041" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_malformed_finalization_journal_fails_before_checkin_finalization" time="0.009" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_card_activation_treats_unchanged_message_as_success" time="0.004" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_generation_worker_cancellation_releases_claim" time="0.005" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_arm_binds_all_prerequisites_without_service_or_telegram_actions" time="0.005" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_arm_fails_closed_when_a_prerequisite_is_not_satisfied[False-True-provider_auth_not_ready]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_arm_fails_closed_when_a_prerequisite_is_not_satisfied[True-False-service_not_inactive]" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_controller_accepts_immutable_historical_workspace_inputs" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_controller_rejects_read_only_provider_receipts" time="0.003" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_arm_requires_the_v2_nonpersistent_active_probe_evidence" time="0.003" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_arm_rejects_repository_status_drift" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_arm_requires_a_durable_owner_review_to_recover" time="0.004" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_launch_refuses_to_start_without_a_durable_owner_review_to_recover" time="0.005" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_launch_refuses_to_start_a_runtime_not_bound_to_the_candidate" time="0.005" /><testcase classname="tests.gateway.test_dualcoach_tasks21_25_controller" name="test_launch_requires_explicit_human_service_start_and_never_controls_telegram" time="0.005" /><testcase classname="tests.gateway.test_trainer_free_v1_contract" name="test_callback_v2_and_historical_non1_is_rejected" time="0.003" /><testcase classname="tests.gateway.test_trainer_free_v1_contract" name="test_owner_review_card_has_exact_v1_authority" time="0.003" /><testcase classname="tests.gateway.test_trainer_free_v1_contract" name="test_legacy_runtime_modules_are_absent" time="0.003" /><testcase classname="tests.gateway.test_trainer_free_v1_contract" name="test_owner_review_safety_notes_are_serialized_without_trainer_handoff_data" time="0.003" /><testcase classname="tests.gateway.test_trainer_free_v1_contract" name="test_v1_runtime_closure_has_no_trainer_scaffolding_or_projection_keys" time="0.016" /><testcase classname="tests.gateway.test_trainer_free_v1_contract" name="test_inventory_runtime_roots_have_no_trainer_token_or_namespace" time="0.224" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_write_pid_file_records_gateway_metadata" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_write_pid_file_is_atomic_against_concurrent_writers" time="0.004" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_rejects_live_non_gateway_pid" time="0.003" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_rejects_reused_pid_with_wrong_live_command" time="0.003" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_rejects_live_gateway_from_another_profile" time="0.003" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_runtime_status_rejects_symlinked_authority_file" time="0.004" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_runtime_status_rejects_symlinked_hermes_home" time="0.003" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_preserves_unverifiable_record_when_lock_is_inactive" time="0.003" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_open_running_process_refuses_different_expected_profile" time="0.003" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_open_running_process_refuses_pid_without_identity_match" time="0.003" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_pidfd_handle_signals_the_spawned_child" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_cleans_stale_record_from_dead_process" time="0.003" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_rejects_gateway_metadata_when_live_cmdline_is_unavailable" time="0.004" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_accepts_script_style_gateway_cmdline" time="0.004" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_accepts_explicit_pid_path_without_cleanup" time="0.004" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_runtime_lock_claims_and_releases_liveness" time="0.030" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_treats_pid_file_as_stale_without_runtime_lock" time="0.005" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_cleans_stale_metadata_from_dead_foreign_pid" time="0.004" /><testcase classname="tests.gateway.test_status.TestGatewayPidState" name="test_get_running_pid_falls_back_to_live_lock_record" time="0.004" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_write_json_file_uses_atomic_json_write" time="0.003" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_runtime_status_file_is_private" time="0.003" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_runtime_status_records_boot_and_profile_identity" time="0.004" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_unverifiable_live_identity_reports_degraded_without_mutation" time="0.003" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_dead_child_reconciles_runtime_status_once" time="0.006" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_dead_runtime_reconciliation_write_failure_is_visible" time="0.003" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_write_runtime_status_overwrites_stale_pid_on_restart" time="0.003" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_write_runtime_status_overwrites_stale_argv_on_restart" time="0.003" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_write_runtime_status_records_platform_failure" time="0.003" /><testcase classname="tests.gateway.test_status.TestGatewayRuntimeStatus" name="test_write_runtime_status_explicit_none_clears_stale_fields" time="0.004" /><testcase classname="tests.gateway.test_status.TestTerminatePid" name="test_force_uses_taskkill_on_windows" time="0.003" /><testcase classname="tests.gateway.test_status.TestTerminatePid" name="test_force_falls_back_to_sigterm_when_taskkill_missing" time="0.003" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_windows_file_lock_uses_high_offset" time="0.003" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_acquire_scoped_lock_rejects_live_other_process" time="0.021" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_acquire_scoped_lock_replaces_pid_reused_by_unrelated_process" time="0.004" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_acquire_scoped_lock_keeps_lock_when_cmdline_unreadable_but_record_is_gateway" time="0.003" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_acquire_scoped_lock_keeps_lock_when_pid_reused_by_gateway" time="0.003" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_acquire_scoped_lock_replaces_stale_record" time="0.004" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_acquire_scoped_lock_recovers_empty_lock_file" time="0.003" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_acquire_scoped_lock_recovers_corrupt_lock_file" time="0.003" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_release_scoped_lock_only_removes_current_owner" time="0.003" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_release_all_scoped_locks_can_target_single_owner" time="0.003" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_release_all_scoped_locks_skips_pid_reuse_mismatch" time="0.003" /><testcase classname="tests.gateway.test_status.TestScopedLocks" name="test_acquire_scoped_lock_replaces_reused_pid_even_with_matching_start_time" time="0.003" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_write_marker_records_target_identity" time="0.003" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_returns_true_when_marker_names_self" time="0.003" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_returns_false_for_different_pid" time="0.004" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_returns_false_on_start_time_mismatch" time="0.003" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_returns_true_on_windows_when_start_time_unavailable" time="0.004" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_returns_false_when_marker_missing" time="0.003" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_returns_false_for_stale_marker" time="0.003" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_handles_malformed_marker_gracefully" time="0.003" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_handles_marker_with_missing_fields" time="0.003" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_clear_takeover_marker_is_idempotent" time="0.003" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_write_marker_returns_false_on_write_failure" time="0.003" /><testcase classname="tests.gateway.test_status.TestTakeoverMarker" name="test_consume_ignores_marker_for_different_process_and_prevents_stale_grief" time="0.003" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_write_marker_records_target_identity" time="0.003" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_consume_returns_true_when_marker_names_self" time="0.003" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_consume_returns_false_for_different_pid" time="0.003" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_consume_rejects_marker_from_a_different_boot" time="0.003" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_consume_returns_false_for_stale_marker" time="0.003" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_clear_planned_stop_marker_is_idempotent" time="0.003" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_write_marker_returns_false_on_write_failure" time="0.003" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_consume_returns_true_on_windows_when_start_time_unavailable" time="0.003" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_consume_still_rejects_foreign_pid_when_start_time_unavailable" time="0.003" /><testcase classname="tests.gateway.test_status.TestPlannedStopMarker" name="test_consume_still_rejects_start_time_mismatch_when_both_known" time="0.004" /><testcase classname="tests.gateway.test_status.TestReadProcessCmdlinePsFallback" name="test_ps_fallback_when_proc_unavailable" time="0.003" /><testcase classname="tests.gateway.test_status.TestReadProcessCmdlinePsFallback" name="test_ps_fallback_returns_none_on_failure" time="0.003" /><testcase classname="tests.gateway.test_status.TestReadProcessCmdlinePsFallback" name="test_proc_cmdline_takes_priority_over_ps" time="0.003" /><testcase classname="tests.gateway.test_status.TestReadProcessCmdlinePsFallback" name="test_ps_fallback_used_when_proc_returns_empty" time="0.003" /><testcase classname="tests.gateway.test_status.TestCorruptStatusFiles" name="test_read_json_file_returns_none_on_binary_garbage" time="0.003" /><testcase classname="tests.gateway.test_status.TestCorruptStatusFiles" name="test_read_json_file_still_parses_valid_json" time="0.003" /><testcase classname="tests.gateway.test_status.TestCorruptStatusFiles" name="test_read_pid_record_returns_none_on_binary_garbage" time="0.003" /><testcase classname="tests.gateway.test_status.TestCorruptStatusFiles" name="test_read_pid_record_still_parses_bare_pid" time="0.004" /></testsuite></testsuites>