<?xml version="1.0" encoding="utf-8"?><testsuites name="pytest tests"><testsuite name="pytest" errors="0" failures="0" skipped="0" tests="45" time="0.954" timestamp="2026-08-15T14:37:20.194859+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.012" /><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.005" /><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.015" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_delivery_outbox_provider_timeout_callback_never_resends" time="0.009" /><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.042" /><testcase classname="tests.gateway.test_nutrition_coaching" name="test_malformed_finalization_journal_fails_before_checkin_finalization" time="0.010" /><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.005" /><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.223" /></testsuite></testsuites>