tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCallbackGrammar::test_callback_data_is_compact_and_contains_no_answer tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCallbackGrammar::test_callback_data_rejects_oversize_or_personal_value_actions tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCallbackGrammar::test_customer_nutrition_steps_fit_the_opaque_callback_contract tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCallbackGrammar::test_callback_grammar_accepts_only_canonical_adaptive_steps[Q-SLEEP-CAUSE] tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCallbackGrammar::test_callback_grammar_accepts_only_canonical_adaptive_steps[Q-SLEEP-ADJUST] tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCallbackGrammar::test_callback_grammar_accepts_only_canonical_adaptive_steps[Q-COND-SYMPTOM] tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCallbackGrammar::test_callback_grammar_accepts_only_canonical_adaptive_steps[Q-COND-INTENSITY] tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCallbackGrammar::test_callback_grammar_accepts_only_canonical_adaptive_steps[Q-PERF-REASON] tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCallbackGrammar::test_callback_grammar_accepts_only_canonical_adaptive_steps[Q-PERF-NEXT] tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_finalized_snapshot_exports_branch_state_for_grounding tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_urgent_text_reaches_safety_transition_during_button_only_step tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_all_fixed_coach_prompts_use_honorific_korean[morning] tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_all_fixed_coach_prompts_use_honorific_korean[workout] tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_all_fixed_coach_prompts_use_honorific_korean[nutrition_daily] tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_customer_nutrition_edit_menu_uses_compact_korean_fields tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_summary_uses_three_compact_actions_and_a_flow_specific_two_column_edit_menu tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_edit_tab_changes_the_same_binding_screen_and_field_callback_enters_correction tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_disabled_config_is_a_true_noop tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_optional_topic_allowlists_must_match_the_exact_wizard_target tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_start_binds_exact_owner_chat_topic_and_message tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_recovery_command_boundary_requires_exact_owner_chat_and_topic tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_replay_and_expiry_are_rejected_without_mutating_service tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_typed_value_requires_exact_active_binding_then_bypasses_agent tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_model_can_mark_missing_bodyweight_and_advance_without_creating_a_trend_value tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_model_can_rewrite_the_current_sleep_quality_prompt_without_advancing_the_draft tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_all_rendered_callbacks_are_opaque_and_telegram_sized tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_typed_action_replaces_buttons_with_the_exact_expected_question tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_fresh_bridge_rehydrates_persisted_active_draft_and_consumes_typed_value tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueCheckinBridge::test_trainer_bridge_start_to_save_scopes_event_to_registered_customer tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_nutrition_private_dm_address_uses_registry_topic_zero tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_completed_customer_checkin_publishes_generation_card_only_to_operator_topic tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_dedicated_operator_topic_maps_to_canonical_owner_actor tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_operator_draft_view_lists_every_final_checkin_field tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_natural_language_source_approval_consumes_the_latest_notified_candidate tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_today_feedback_replay_uses_saved_checkin_after_a_new_launcher_replaces_active_session tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_source_review_callback_requires_the_exact_owner_topic_and_approves_one_candidate tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_summary_keyboard_keeps_three_actions_in_one_telegram_row tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_disabled_pc1_callback_falls_through_existing_router tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_enabled_pc1_text_is_consumed_before_generic_aggregation tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_invalid_anonymous_natural_language_wizard_text_uses_model_without_generic_ingress tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_active_natural_language_turn_uses_model_action_instead_of_static_invalid_template tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_anonymous_sleep_quality_feedback_rewrites_the_active_card_without_generic_ingress tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_target_topic_conversation_uses_isolated_chos_coach_model_without_generic_ingress tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_anonymous_typed_value_uses_owner_only_for_the_exact_opted_in_topic tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_anonymous_typed_value_uses_sender_chat_when_telegram_supplies_a_fake_user tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_expired_target_numeric_answer_reopens_checkin_instead_of_reaching_generic_agent tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_expired_real_binding_numeric_answer_is_recovered_before_generic_ingress tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_owner_recovery_command_sends_one_topic_bound_card_before_generic_ingress tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_foreign_or_wrong_topic_recovery_command_is_denied_before_generic_ingress tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_failed_scheduled_launch_recovers_once_by_owner_command_without_automatic_retry tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_enabled_pc1_callback_is_consumed_before_existing_callbacks tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_typed_action_edits_the_same_topic_prompt_to_a_direct_question tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_save_callback_records_once_and_replaces_summary_with_confirmation tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_saved_checkin_defers_model_feedback_to_worker_without_generic_ingress tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_final_feedback_request_includes_profile_doctrine_and_verified_history tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_launcher_shows_kst_date_and_korean_weekday_in_its_topic_card tests/gateway/test_telegram_physique_checkin.py::TestPhysiqueTelegramAdapterIngress::test_inline_card_capability_is_inert_when_profile_feature_is_disabled tests/gateway/test_telegram_physique_checkin.py::TestNutritionCopySurfaces::test_daily_copy_keeps_the_approved_sections_and_spacing tests/gateway/test_telegram_physique_checkin.py::TestNutritionCopySurfaces::test_daily_copy_fails_closed_when_facts_or_model_are_missing tests/gateway/test_telegram_physique_checkin.py::TestNutritionCopySurfaces::test_weekly_copy_renders_averages_rate_judgment_and_actions tests/gateway/test_telegram_physique_checkin.py::TestNutritionCopySurfaces::test_weekly_copy_fails_closed_when_no_report_data_exists tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_tick_success_persists_audited_receipt tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_provider_timeout_is_unknown_and_never_retried tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_delivered_receipt_restarts_into_audit_without_provider tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_duplicate_tick_has_one_provider_delivery tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_concurrent_ticks_share_one_durable_provider_authority tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_orphan_tombstone_recovery_is_terminal_and_never_calls_provider tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_invalid_cutover_fence_sends_nothing[preparing] tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_invalid_cutover_fence_sends_nothing[corrupt] tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_daily_customer_and_weekly_owner_destinations_are_pinned tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_dual_coach_reminder_is_static_pinned_and_exactly_once tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_terminal_response_after_sending_abandons_without_provider_or_review tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_dual_coach_reminder_stale_authority_never_calls_provider[registration] tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_dual_coach_reminder_stale_authority_never_calls_provider[destination] tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_dual_coach_reminder_stale_authority_never_calls_provider[config] tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_dual_coach_reminder_provider_unknown_is_never_retried tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_dual_coach_reminder_explicit_no_send_rejection_is_replaceable tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_dual_coach_reminder_ambiguous_rejection_remains_unknown tests/gateway/test_telegram_physique_checkin.py::TestNutritionScheduleDelivery::test_dual_coach_reminder_expired_audited_delivery_creates_one_review tests/gateway/test_telegram_physique_checkin.py::test_coaching_stage_uses_resolved_provider_token_parameter tests/gateway/test_telegram_physique_checkin.py::TestStrictCoachingClosure::test_malformed_grounding_containers_are_canonical_with_empty_binding tests/gateway/test_telegram_physique_checkin.py::TestStrictCoachingClosure::test_revision_drift_before_stage_one_skips_grounding_and_model tests/gateway/test_telegram_physique_checkin.py::TestStrictCoachingClosure::test_revision_drift_between_stages_discards_model_output tests/gateway/test_telegram_physique_checkin.py::TestStrictCoachingClosure::test_adaptive_payload_requires_exact_proposal_revision_and_digest tests/gateway/test_telegram_physique_checkin.py::TestStrictCoachingClosure::test_daily_publication_rechecks_revision_before_edit tests/gateway/test_telegram_physique_checkin.py::TestStrictCoachingClosure::test_adaptive_publication_rechecks_revision_before_reservation tests/gateway/test_telegram_physique_checkin.py::test_dual_coach_review_recovery_is_topic_bound_and_deduplicated tests/gateway/test_telegram_physique_checkin.py::test_topic_59_dual_coach_drain_coexists_with_adaptive_operator tests/gateway/test_telegram_physique_checkin.py::test_dual_coach_review_runtime_drain_requires_topic_59_and_persists_receipt tests/gateway/test_telegram_physique_checkin.py::test_normal_adaptive_card_redacts_lifecycle_diagnostics