Discovered 384 test files (8359 tests) under ['tests/gateway']; running with -j 12
[  0.1% |     5/8359 | ✓5 | ✗0] ✓ tests/gateway/relay/test_relay_roundtrip.py (5✓, 0.6s)
[  0.1% |     9/8359 | ✓9 | ✗0] ✓ tests/gateway/relay/test_relay_interrupt.py (4✓, 0.6s)
[  0.2% |    14/8359 | ✓14 | ✗ 0] ✓ tests/gateway/relay/test_descriptor.py (5✓, 0.6s)
[  0.2% |    18/8359 | ✓18 | ✗ 0] ✓ tests/gateway/relay/test_relay_follow_up.py (4✓, 0.7s)
[  0.3% |    26/8359 | ✓26 | ✗ 0] ✓ tests/gateway/relay/test_contract_doc_conformance.py (8✓, 0.7s)
[  0.3% |    28/8359 | ✓28 | ✗ 0] ✓ tests/gateway/platforms/test_yuanbao_recall_db_only.py (2✓, 0.7s)
[  0.4% |    32/8359 | ✓32 | ✗ 0] ✓ tests/gateway/relay/test_descriptor_from_entry.py (4✓, 0.7s)
[  0.5% |    43/8359 | ✓43 | ✗ 0] ✓ tests/gateway/relay/test_relay_adapter.py (11✓, 0.7s)
[  0.7% |    60/8359 | ✓60 | ✗ 0] ✓ tests/gateway/relay/test_auth.py (17✓, 0.7s)
[  0.7% |    61/8359 | ✓61 | ✗ 0] ✓ tests/gateway/relay/test_no_stub_leak.py (1✓, 0.7s)
[  0.8% |    67/8359 | ✓67 | ✗ 0] ✓ tests/gateway/relay/test_relay_roundtrip_telegram.py (6✓, 0.8s)
[  0.9% |    73/8359 | ✓73 | ✗ 0] ✓ tests/gateway/relay/test_relay_registration.py (6✓, 0.8s)
[  1.0% |    82/8359 | ✓82 | ✗ 0] ✓ tests/gateway/test_7100_transient_failure_transcript.py (9✓, 0.6s)
[  1.0% |    86/8359 | ✓86 | ✗ 0] ✓ tests/gateway/test_allowlist_startup_check.py (4✓, 0.5s)
[  1.2% |    98/8359 | ✓98 | ✗ 0] ✓ tests/gateway/relay/test_self_provision.py (12✓, 0.7s)
[  1.2% |   101/8359 | ✓101 | ✗  0] ✓ tests/gateway/relay/test_relay_sheds_crypto.py (3✓, 0.7s)
[  1.3% |   108/8359 | ✓108 | ✗  0] ✓ tests/gateway/relay/test_ws_transport.py (7✓, 0.7s)
[  1.3% |   112/8359 | ✓112 | ✗  0] ✓ tests/gateway/test_35809_auto_reset_clean_context.py (4✓, 1.1s)
[  1.5% |   129/8359 | ✓129 | ✗  0] ✓ tests/gateway/test_api_server_bind_guard.py (17✓, 0.8s)
[  1.8% |   147/8359 | ✓147 | ✗  0] ✓ tests/gateway/test_api_server_normalize.py (18✓, 0.8s)
[  1.9% |   162/8359 | ✓162 | ✗  0] ✓ tests/gateway/test_active_session_text_merge.py (15✓, 1.5s)
[  2.2% |   185/8359 | ✓185 | ✗  0] ✓ tests/gateway/test_api_server_multimodal.py (23✓, 0.8s)
[  2.3% |   189/8359 | ✓189 | ✗  0] ✓ tests/gateway/test_42039_duplicate_user_message.py (4✓, 1.5s)
[  2.6% |   216/8359 | ✓216 | ✗  0] ✓ tests/gateway/test_allowed_channels_widening.py (27✓, 1.4s)
[  3.1% |   256/8359 | ✓256 | ✗  0] ✓ tests/gateway/test_api_server_jobs.py (40✓, 1.0s)
[  3.1% |   259/8359 | ✓259 | ✗  0] ✓ tests/gateway/test_auth_fallback.py (3✓, 0.6s)
[  3.2% |   271/8359 | ✓271 | ✗  0] ✓ tests/gateway/test_auto_continue.py (12✓, 0.6s)
[  3.4% |   281/8359 | ✓281 | ✗  0] ✓ tests/gateway/test_base_topic_sessions.py (10✓, 0.6s)
[  3.5% |   293/8359 | ✓293 | ✗  0] ✓ tests/gateway/test_api_server_toolset.py (12✓, 1.2s)
[  3.5% |   295/8359 | ✓295 | ✗  0] ✓ tests/gateway/test_auto_voice_reply_format.py (2✓, 0.8s)
[  3.9% |   326/8359 | ✓326 | ✗  0] ✓ tests/gateway/test_background_process_notifications.py (31✓, 1.1s)
[  3.9% |   330/8359 | ✓330 | ✗  0] ✓ tests/gateway/test_bundles_command.py (4✓, 0.6s)
[  4.0% |   334/8359 | ✓334 | ✗  0] ✓ tests/gateway/test_busy_session_auth_bypass.py (4✓, 0.6s)
[  4.0% |   337/8359 | ✓337 | ✗  0] ✓ tests/gateway/test_cached_agent_max_iterations.py (3✓, 0.6s)
[  4.3% |   359/8359 | ✓359 | ✗  0] ✓ tests/gateway/test_background_command.py (22✓, 1.5s)
[  4.5% |   377/8359 | ✓377 | ✗  0] ✓ tests/gateway/test_busy_session_ack.py (18✓, 0.8s)
[  5.2% |   433/8359 | ✓433 | ✗  0] ✓ tests/gateway/test_bluebubbles.py (56✓, 1.1s)
[  5.4% |   454/8359 | ✓454 | ✗  0] ✓ tests/gateway/test_approve_deny_commands.py (21✓, 2.1s)
[  5.9% |   494/8359 | ✓494 | ✗  0] ✓ tests/gateway/test_channel_directory.py (40✓, 0.8s)
[  5.9% |   497/8359 | ✓497 | ✗  0] ✓ tests/gateway/test_cancel_background_drain.py (3✓, 0.8s)
[  6.0% |   504/8359 | ✓504 | ✗  0] ✓ tests/gateway/test_clean_shutdown_marker.py (7✓, 0.7s)
[  6.5% |   544/8359 | ✓544 | ✗  0] ✓ tests/gateway/test_command_bypass_active_session.py (40✓, 0.8s)
[  6.7% |   560/8359 | ✓560 | ✗  0] ✓ tests/gateway/test_commit_observer.py (16✓, 0.7s)
[  6.9% |   575/8359 | ✓575 | ✗  0] ✓ tests/gateway/test_complete_path_at_filter.py (15✓, 0.7s)
[  7.1% |   597/8359 | ✓597 | ✗  0] ✓ tests/gateway/test_api_server_runs.py (22✓, 3.2s)
[  9.0% |   755/8359 | ✓755 | ✗  0] ✓ tests/gateway/test_api_server.py (158✓, 4.0s)
[  9.1% |   759/8359 | ✓759 | ✗  0] ✓ tests/gateway/test_compress_command.py (4✓, 1.2s)
[  9.4% |   783/8359 | ✓783 | ✗  0] ✓ tests/gateway/test_config_cwd_bridge.py (24✓, 0.7s)
[  9.4% |   784/8359 | ✓784 | ✗  0] ✓ tests/gateway/test_compression_failure_session_sync.py (1✓, 1.0s)
[  9.4% |   786/8359 | ✓786 | ✗  0] ✓ tests/gateway/test_compress_focus.py (2✓, 1.2s)
[  9.4% |   788/8359 | ✓788 | ✗  0] ✓ tests/gateway/test_compress_plugin_engine.py (2✓, 1.2s)
[  9.5% |   792/8359 | ✓792 | ✗  0] ✓ tests/gateway/test_compression_session_id_persistence.py (4✓, 1.0s)
[ 10.0% |   837/8359 | ✓837 | ✗  0] ✓ tests/gateway/test_config_driven_access_policy.py (45✓, 1.0s)
[ 10.0% |   839/8359 | ✓839 | ✗  0] ✓ tests/gateway/test_debug_command.py (2✓, 0.6s)
[ 10.3% |   862/8359 | ✓862 | ✗  0] ✓ tests/gateway/test_delivery.py (23✓, 0.6s)
[ 10.4% |   867/8359 | ✓867 | ✗  0] ✓ tests/gateway/test_cron_fire_webhook.py (5✓, 0.8s)
[ 10.4% |   873/8359 | ✓873 | ✗  0] ✓ tests/gateway/test_destructive_slash_confirm.py (6✓, 0.7s)
[ 10.9% |   911/8359 | ✓911 | ✗  0] ✓ tests/gateway/test_delivery_silence_filter.py (38✓, 0.8s)
[ 11.1% |   926/8359 | ✓926 | ✗  0] ✓ tests/gateway/test_discord_allowed_channels.py (15✓, 0.6s)
[ 11.1% |   932/8359 | ✓932 | ✗  0] ✓ tests/gateway/test_config_env_bridge_authority.py (6✓, 1.6s)
[ 11.4% |   951/8359 | ✓951 | ✗  0] ✓ tests/gateway/test_discord_allowed_mentions.py (19✓, 0.7s)
[ 11.5% |   959/8359 | ✓959 | ✗  0] ✓ tests/gateway/test_discord_bot_filter.py (8✓, 0.5s)
[ 12.2% |  1022/8359 | ✓1022 | ✗   0] ✓ tests/gateway/test_diagnostic_isolation.py (63✓, 1.3s)
[ 13.0% |  1090/8359 | ✓1090 | ✗   0] ✓ tests/gateway/test_dingtalk.py (68✓, 1.1s)
[ 13.1% |  1099/8359 | ✓1099 | ✗   0] ✓ tests/gateway/test_discord_bot_auth_bypass.py (9✓, 0.7s)
[ 13.3% |  1113/8359 | ✓1113 | ✗   0] ✓ tests/gateway/test_discord_attachment_download.py (14✓, 0.8s)
[ 14.1% |  1181/8359 | ✓1181 | ✗   0] ✓ tests/gateway/test_agent_cache.py (68✓, 6.3s)
[ 14.2% |  1187/8359 | ✓1187 | ✗   0] ✓ tests/gateway/test_discord_channel_skills.py (6✓, 0.7s)
[ 14.4% |  1207/8359 | ✓1207 | ✗   0] ✓ tests/gateway/test_discord_clarify_buttons.py (20✓, 0.6s)
[ 14.8% |  1235/8359 | ✓1235 | ✗   0] ✓ tests/gateway/test_discord_component_auth.py (28✓, 0.7s)
[ 14.9% |  1249/8359 | ✓1249 | ✗   0] ✓ tests/gateway/test_discord_channel_controls.py (14✓, 1.0s)
[ 15.7% |  1316/8359 | ✓1316 | ✗   0] ✓ tests/gateway/test_config.py (67✓, 3.1s)
[ 15.9% |  1326/8359 | ✓1326 | ✗   0] ✓ tests/gateway/test_discord_channel_prompts.py (10✓, 1.0s)
[ 16.4% |  1369/8359 | ✓1369 | ✗   0] ✓ tests/gateway/test_discord_free_response.py (43✓, 0.8s)
[ 16.4% |  1370/8359 | ✓1370 | ✗   0] ✓ tests/gateway/test_discord_imports.py (1✓, 0.6s)
[ 16.4% |  1371/8359 | ✓1371 | ✗   0] ✓ tests/gateway/test_discord_media_metadata.py (1✓, 0.5s)
[ 16.4% |  1373/8359 | ✓1373 | ✗   0] ✓ tests/gateway/test_discord_lazy_install_views.py (2✓, 0.6s)
[ 16.5% |  1377/8359 | ✓1377 | ✗   0] ✓ tests/gateway/test_discord_opus.py (4✓, 0.6s)
[ 16.7% |  1397/8359 | ✓1397 | ✗   0] ✓ tests/gateway/test_discord_document_handling.py (20✓, 1.4s)
[ 16.9% |  1415/8359 | ✓1415 | ✗   0] ✓ tests/gateway/test_discord_connect.py (18✓, 1.4s)
[ 17.0% |  1422/8359 | ✓1422 | ✗   0] ✓ tests/gateway/test_discord_reactions.py (7✓, 0.7s)
[ 17.0% |  1423/8359 | ✓1423 | ✗   0] ✓ tests/gateway/test_discord_race_polish.py (1✓, 0.7s)
[ 17.2% |  1435/8359 | ✓1435 | ✗   0] ✓ tests/gateway/test_discord_roles_dm_scope.py (12✓, 0.6s)
[ 17.5% |  1467/8359 | ✓1467 | ✗   0] ✓ tests/gateway/test_discord_slash_auth.py (32✓, 0.8s)
[ 17.6% |  1475/8359 | ✓1475 | ✗   0] ✓ tests/gateway/test_discord_system_messages.py (8✓, 0.6s)
[ 17.7% |  1477/8359 | ✓1477 | ✗   0] ✓ tests/gateway/test_discord_model_picker.py (2✓, 1.3s)
[ 17.7% |  1477/8359 | ✓1477 | ✗   0] ✓ tests/gateway/test_discord_voice_mixer.py (1s, 0.5s)
[ 17.7% |  1479/8359 | ✓1479 | ✗   0] ✓ tests/gateway/test_compression_concurrent_sessions.py (2✓, 4.6s)
[ 17.9% |  1497/8359 | ✓1497 | ✗   0] ✓ tests/gateway/test_discord_send.py (18✓, 1.0s)
[ 18.0% |  1505/8359 | ✓1505 | ✗   0] ✓ tests/gateway/test_discord_thread_persistence.py (8✓, 0.7s)
[ 18.5% |  1545/8359 | ✓1545 | ✗   0] ✓ tests/gateway/test_display_config.py (40✓, 0.9s)
[ 18.9% |  1581/8359 | ✓1581 | ✗   0] ✓ tests/gateway/test_dm_topics.py (36✓, 0.8s)
[ 19.3% |  1614/8359 | ✓1614 | ✗   0] ✓ tests/gateway/test_discord_reply_mode.py (33✓, 1.6s)
[ 19.7% |  1646/8359 | ✓1646 | ✗   0] ✓ tests/gateway/test_document_cache.py (32✓, 0.7s)
[ 19.8% |  1655/8359 | ✓1655 | ✗   0] ✓ tests/gateway/test_dualcoach_activation_cutover.py (9✓, 0.7s)
[ 20.1% |  1679/8359 | ✓1679 | ✗   0] ✓ tests/gateway/test_duplicate_reply_suppression.py (24✓, 0.7s)
[ 20.5% |  1713/8359 | ✓1713 | ✗   0] ✓ tests/gateway/test_discord_slash_commands.py (34✓, 1.6s)
[ 20.6% |  1721/8359 | ✓1721 | ✗   0] ✓ tests/gateway/test_document_context_note.py (8✓, 1.0s)
[ 20.8% |  1740/8359 | ✓1740 | ✗   0] ✓ tests/gateway/test_dualcoach_tasks21_25_controller.py (19✓, 1.0s)
[ 21.0% |  1754/8359 | ✓1754 | ✗   0] ✓ tests/gateway/test_ephemeral_reply.py (14✓, 0.6s)
[ 21.0% |  1758/8359 | ✓1758 | ✗   0] ✓ tests/gateway/test_fallback_eviction.py (4✓, 0.5s)
[ 21.6% |  1806/8359 | ✓1806 | ✗   0] ✓ tests/gateway/test_extract_local_files.py (48✓, 0.8s)
[ 21.7% |  1810/8359 | ✓1810 | ✗   0] ✓ tests/gateway/test_fast_command.py (4✓, 1.0s)
[ 21.7% |  1816/8359 | ✓1816 | ✗   0] ✓ tests/gateway/test_feishu_bot_auth_bypass.py (6✓, 0.6s)
[ 21.8% |  1825/8359 | ✓1825 | ✗   0] ✓ tests/gateway/test_empty_model_recovery.py (9✓, 1.3s)
[ 22.1% |  1845/8359 | ✓1845 | ✗   0] ✓ tests/gateway/test_feishu_comment.py (20✓, 0.7s)
[ 22.4% |  1875/8359 | ✓1875 | ✗   0] ✓ tests/gateway/test_feishu_comment_rules.py (30✓, 0.8s)
[ 22.9% |  1913/8359 | ✓1913 | ✗   0] ✓ tests/gateway/test_feishu_approval_buttons.py (38✓, 1.0s)
[ 23.6% |  1973/8359 | ✓1973 | ✗   0] ✓ tests/gateway/test_feishu_bot_admission.py (60✓, 1.0s)
[ 24.0% |  2006/8359 | ✓2006 | ✗   0] ✓ tests/gateway/test_dualcoach_admin_provider_auth.py (33✓, 2.0s)
[ 24.8% |  2074/8359 | ✓2074 | ✗   0] ✓ tests/gateway/test_email.py (68✓, 1.9s)
[ 24.9% |  2083/8359 | ✓2083 | ✗   0] ✓ tests/gateway/test_feishu_meeting_invite.py (9✓, 0.8s)
[ 25.2% |  2108/8359 | ✓2108 | ✗   0] ✓ tests/gateway/test_gateway_command_line_matcher.py (25✓, 0.6s)
[ 25.3% |  2117/8359 | ✓2117 | ✗   0] ✓ tests/gateway/test_fresh_reset_skill_injection.py (9✓, 0.7s)
[ 25.4% |  2121/8359 | ✓2121 | ✗   0] ✓ tests/gateway/test_gateway_command_help.py (4✓, 0.7s)
[ 25.7% |  2148/8359 | ✓2148 | ✗   0] ✓ tests/gateway/test_feishu_onboard.py (27✓, 0.9s)
[ 25.7% |  2149/8359 | ✓2149 | ✗   0] ✓ tests/gateway/test_goal_max_turns_config.py (1✓, 0.8s)
[ 25.7% |  2152/8359 | ✓2152 | ✗   0] ✓ tests/gateway/test_goal_status_notice.py (3✓, 0.9s)
[ 28.2% |  2357/8359 | ✓2312 | ✗   0] ✓ tests/gateway/test_feishu.py (160✓ 45s, 2.2s)
[ 28.3% |  2362/8359 | ✓2317 | ✗   0] ✓ tests/gateway/test_goal_verdict_send.py (5✓, 0.9s)
[ 28.5% |  2383/8359 | ✓2338 | ✗   0] ✓ tests/gateway/test_hooks.py (21✓, 0.6s)
[ 28.6% |  2389/8359 | ✓2344 | ✗   0] ✓ tests/gateway/test_gateway_silence_tokens.py (6✓, 1.3s)
[ 28.7% |  2396/8359 | ✓2351 | ✗   0] ✓ tests/gateway/test_home_target_env_var.py (7✓, 1.0s)
[ 28.8% |  2408/8359 | ✓2363 | ✗   0] ✓ tests/gateway/test_insights_unicode_flags.py (12✓, 0.6s)
[ 29.3% |  2453/8359 | ✓2408 | ✗   0] ✓ tests/gateway/test_homeassistant.py (45✓, 1.1s)
[ 29.4% |  2459/8359 | ✓2414 | ✗   0] ✓ tests/gateway/test_interrupt_key_match.py (6✓, 0.6s)
[ 29.5% |  2463/8359 | ✓2418 | ✗   0] ✓ tests/gateway/test_kanban_watchers_mixin.py (4✓, 0.5s)
[ 29.6% |  2471/8359 | ✓2426 | ✗   0] ✓ tests/gateway/test_internal_event_bypass_pairing.py (8✓, 1.2s)
[ 29.9% |  2496/8359 | ✓2450 | ✗   1] ✗ tests/gateway/test_installed_golden_path_provenance.py (24✓ 1✗, 1.2s)

  ╔╍ Failed: tests/gateway/test_installed_golden_path_provenance.py ╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍
  ║                 str(binary),
  ║                 str(driver),
  ║                 "--installed-venv",
  ║                 str(venv),
  ║                 "--installed-site-packages",
  ║                 str(site),
  ║                 "--profile-wheel",
  ║                 str(profile_wheel),
  ║                 "--hermes-wheel",
  ║                 str(hermes_wheel),
  ║                 "--product-binding",
  ║                 str(product_binding_path),
  ║                 "--evidence-root",
  ║                 str(evidence),
  ║             ],
  ║             cwd=tmp_path,
  ║             env=environment,
  ║             text=True,
  ║             capture_output=True,
  ║             check=False,
  ║         )
  ║     
  ║ >       assert completed.returncode == 2
  ║ E       AssertionError: assert 1 == 2
  ║ E        +  where 1 = CompletedProcess(args=['/tmp/pytest-of-cube/pytest-6922/test_installed_driver_never_fa0/venv/bin/python', '/home/cube/...in <module>\n    from gateway.config import PlatformConfig\nModuleNotFoundError: No module named \'gateway.config\'\n').returncode
  ║ 
  ║ tests/gateway/test_installed_golden_path_provenance.py:716: AssertionError
  ║ =========================== short test summary info ============================
  ║ FAILED tests/gateway/test_installed_golden_path_provenance.py::test_installed_driver_never_falls_back_to_profile_source
  ║ ========================= 1 failed, 24 passed in 0.78s =========================
  ║
  ║  Repro: python -m pytest tests/gateway/test_installed_golden_path_provenance.py
  ╚╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍

[ 29.9% |  2502/8359 | ✓2456 | ✗   1] ✓ tests/gateway/test_kanban_notifier.py (6✓, 0.9s)
[ 30.0% |  2505/8359 | ✓2459 | ✗   1] ✓ tests/gateway/test_kanban_notifier_watcher_dispatch_gate.py (3✓, 0.9s)
[ 31.9% |  2665/8359 | ✓2619 | ✗   1] ✓ tests/gateway/test_google_chat.py (160✓, 2.0s)
[ 31.9% |  2666/8359 | ✓2620 | ✗   1] ✓ tests/gateway/test_load_transcript_db_only.py (1✓, 0.5s)
[ 32.9% |  2751/8359 | ✓2705 | ✗   1] ✓ tests/gateway/test_korean_humanizer.py (85✓, 1.1s)
[ 33.0% |  2755/8359 | ✓2709 | ✗   1] ✓ tests/gateway/test_matrix_approval_reaction_fail_closed.py (4✓, 0.5s)
[ 33.9% |  2831/8359 | ✓2785 | ✗   1] ✓ tests/gateway/test_line_plugin.py (76✓, 0.8s)
[ 33.9% |  2833/8359 | ✓2787 | ✗   1] ✓ tests/gateway/test_matrix_exec_approval.py (2✓, 0.5s)
[ 34.1% |  2847/8359 | ✓2801 | ✗   1] ✓ tests/gateway/test_loop_exception_handler.py (14✓, 0.9s)
[ 34.1% |  2847/8359 | ✓2801 | ✗   1] ✓ tests/gateway/test_matrix_voice.py (1s, 0.4s)
[ 34.3% |  2866/8359 | ✓2820 | ✗   1] ✓ tests/gateway/test_matrix_project_context_isolation.py (19✓, 0.6s)
[ 34.9% |  2918/8359 | ✓2872 | ✗   1] ✓ tests/gateway/test_matrix_mention.py (52✓, 0.8s)
[ 35.0% |  2924/8359 | ✓2878 | ✗   1] ✓ tests/gateway/test_max_tokens_propagation.py (6✓, 0.7s)
[ 35.0% |  2929/8359 | ✓2883 | ✗   1] ✓ tests/gateway/test_max_concurrent_sessions.py (5✓, 1.0s)
[ 35.6% |  2973/8359 | ✓2927 | ✗   1] ✓ tests/gateway/test_irc_adapter.py (44✓, 2.9s)
[ 35.7% |  2986/8359 | ✓2940 | ✗   1] ✓ tests/gateway/test_media_extraction.py (13✓, 0.6s)
[ 36.2% |  3022/8359 | ✓2976 | ✗   1] ✓ tests/gateway/test_media_download_retry.py (36✓, 0.8s)
[ 36.8% |  3080/8359 | ✓3034 | ✗   1] ✓ tests/gateway/test_mattermost.py (58✓, 1.4s)
[ 36.9% |  3088/8359 | ✓3042 | ✗   1] ✓ tests/gateway/test_message_deduplicator.py (8✓, 0.5s)
[ 37.1% |  3104/8359 | ✓3056 | ✗   1] ✓ tests/gateway/test_media_metadata_contract.py (14✓ 2s, 0.8s)
[ 37.2% |  3107/8359 | ✓3059 | ✗   1] ✓ tests/gateway/test_mcp_reload_refreshes_cached_agents.py (3✓, 1.4s)
[ 37.3% |  3122/8359 | ✓3074 | ✗   1] ✓ tests/gateway/test_mirror.py (15✓, 0.6s)
[ 37.5% |  3132/8359 | ✓3084 | ✗   1] ✓ tests/gateway/test_memory_monitor.py (10✓, 1.0s)
[ 37.6% |  3140/8359 | ✓3092 | ✗   1] ✓ tests/gateway/test_message_timestamps.py (8✓, 1.1s)
[ 37.6% |  3141/8359 | ✓3093 | ✗   1] ✓ tests/gateway/test_model_command_custom_providers.py (1✓, 1.0s)
[ 37.7% |  3150/8359 | ✓3102 | ✗   1] ✓ tests/gateway/test_model_switch_persistence.py (9✓, 0.6s)
[ 40.4% |  3380/8359 | ✓3332 | ✗   1] ✓ tests/gateway/test_matrix.py (230✓, 3.1s)
[ 40.5% |  3383/8359 | ✓3335 | ✗   1] ✓ tests/gateway/test_model_picker_persist.py (3✓, 0.8s)
[ 40.5% |  3387/8359 | ✓3339 | ✗   1] ✓ tests/gateway/test_model_command_expensive_confirm.py (4✓, 1.0s)
[ 40.6% |  3392/8359 | ✓3344 | ✗   1] ✓ tests/gateway/test_multiplex_lifecycle.py (5✓, 0.5s)
[ 40.7% |  3399/8359 | ✓3351 | ✗   1] ✓ tests/gateway/test_multiplex_http_routing.py (7✓, 0.7s)
[ 40.7% |  3404/8359 | ✓3356 | ✗   1] ✓ tests/gateway/test_model_command_flat_string_config.py (5✓, 1.3s)
[ 40.8% |  3413/8359 | ✓3365 | ✗   1] ✓ tests/gateway/test_multiplex_adapter_registry.py (9✓, 0.9s)
[ 41.2% |  3440/8359 | ✓3392 | ✗   1] ✓ tests/gateway/test_msgraph_webhook.py (27✓, 1.2s)
[ 41.5% |  3465/8359 | ✓3417 | ✗   1] ✓ tests/gateway/test_multiplex_phase0.py (25✓, 0.6s)
[ 41.5% |  3472/8359 | ✓3424 | ✗   1] ✓ tests/gateway/test_multiplex_credential_isolation.py (7✓, 0.9s)
[ 41.6% |  3474/8359 | ✓3426 | ✗   1] ✓ tests/gateway/test_native_image_buffer_isolation.py (2✓, 0.8s)
[ 41.6% |  3477/8359 | ✓3429 | ✗   1] ✓ tests/gateway/test_notice_delivery.py (3✓, 0.9s)
[ 41.7% |  3486/8359 | ✓3438 | ✗   1] ✓ tests/gateway/test_notice_rendering.py (9✓, 0.9s)
[ 42.7% |  3568/8359 | ✓3520 | ✗   1] ✓ tests/gateway/test_ntfy_plugin.py (82✓, 0.9s)
[ 43.6% |  3641/8359 | ✓3593 | ✗   1] ✓ tests/gateway/test_nutrition_coaching_judgment.py (73✓, 0.9s)
[ 43.6% |  3641/8359 | ✓3607 | ✗   1] ✓ tests/gateway/test_nutrition_onboarding_clarification_policy.py (14✓, 0.8s)
[ 43.6% |  3641/8359 | ✓3637 | ✗   1] ✓ tests/gateway/test_nutrition_onboarding_reconciliation.py (30✓, 0.9s)
[ 44.1% |  3684/8359 | ✓3680 | ✗   1] ✓ tests/gateway/test_pairing.py (43✓, 0.7s)
[ 44.1% |  3687/8359 | ✓3683 | ✗   1] ✓ tests/gateway/test_pending_drain_race.py (3✓, 0.6s)
[ 44.3% |  3703/8359 | ✓3699 | ✗   1] ✓ tests/gateway/test_pii_redaction.py (16✓, 0.5s)
[ 44.4% |  3709/8359 | ✓3705 | ✗   1] ✓ tests/gateway/test_pending_event_none.py (6✓, 0.8s)
[ 44.4% |  3713/8359 | ✓3709 | ✗   1] ✓ tests/gateway/test_per_platform_streaming_defaults.py (4✓, 0.9s)
[ 44.8% |  3748/8359 | ✓3743 | ✗   1] ✓ tests/gateway/test_platform_connected_checkers.py (34✓ 1s, 0.6s)
[ 44.9% |  3755/8359 | ✓3750 | ✗   1] ✓ tests/gateway/test_platform_http_client_limits.py (7✓, 0.7s)
[ 46.7% |  3905/8359 | ✓3898 | ✗   1] ✓ tests/gateway/test_platform_base.py (148✓ 2s, 1.1s)
[ 46.8% |  3912/8359 | ✓3898 | ✗   1] ✓ tests/gateway/test_plugin_platform_interface.py (7s, 0.4s)
[ 46.9% |  3917/8359 | ✓3903 | ✗   1] ✓ tests/gateway/test_keep_typing_timeout.py (5✓, 7.1s)
[ 46.9% |  3924/8359 | ✓3910 | ✗   1] ✓ tests/gateway/test_platform_reconnect_fd_leak.py (7✓, 0.8s)
[ 47.1% |  3933/8359 | ✓3919 | ✗   1] ✓ tests/gateway/test_post_delivery_callback_chaining.py (9✓, 0.5s)
[ 47.1% |  3938/8359 | ✓3924 | ✗   1] ✓ tests/gateway/test_pre_gateway_dispatch.py (5✓, 0.6s)
[ 47.2% |  3949/8359 | ✓3935 | ✗   1] ✓ tests/gateway/test_planned_stop_watcher.py (11✓, 2.4s)
[ 49.4% |  4126/8359 | ✓4112 | ✗   1] ✓ tests/gateway/test_nutrition_coaching.py (177✓, 3.6s)
[ 49.5% |  4140/8359 | ✓4126 | ✗   1] ✓ tests/gateway/test_queue_consumption.py (14✓, 0.9s)
[ 49.9% |  4170/8359 | ✓4156 | ✗   1] ✓ tests/gateway/test_platform_reconnect.py (30✓, 2.0s)
[ 50.5% |  4220/8359 | ✓4206 | ✗   1] ✓ tests/gateway/test_platform_registry.py (50✓, 1.7s)
[ 50.7% |  4242/8359 | ✓4228 | ✗   1] ✓ tests/gateway/test_proxy_mode.py (22✓, 1.2s)
[ 50.9% |  4258/8359 | ✓4244 | ✗   1] ✓ tests/gateway/test_raft_adapter.py (16✓, 0.7s)
[ 51.0% |  4262/8359 | ✓4248 | ✗   1] ✓ tests/gateway/test_relay_capability_surface.py (4✓, 0.6s)
[ 51.0% |  4266/8359 | ✓4252 | ✗   1] ✓ tests/gateway/test_reload_skills_command.py (4✓, 0.6s)
[ 51.1% |  4271/8359 | ✓4257 | ✗   1] ✓ tests/gateway/test_reload_skills_discord_resync.py (5✓, 0.6s)
[ 51.1% |  4274/8359 | ✓4260 | ✗   1] ✓ tests/gateway/test_response_filters.py (3✓, 0.5s)
[ 51.3% |  4290/8359 | ✓4276 | ✗   1] ✓ tests/gateway/test_replay_entry_fields.py (16✓, 0.9s)
[ 51.4% |  4296/8359 | ✓4282 | ✗   1] ✓ tests/gateway/test_reply_to_injection.py (6✓, 0.9s)
[ 51.5% |  4305/8359 | ✓4291 | ✗   1] ✓ tests/gateway/test_read_only_preflight_config.py (9✓, 1.4s)
[ 51.7% |  4323/8359 | ✓4309 | ✗   1] ✓ tests/gateway/test_reasoning_command.py (18✓, 1.3s)
[ 52.0% |  4350/8359 | ✓4336 | ✗   1] ✓ tests/gateway/test_restart_notification.py (27✓, 1.0s)
[ 52.3% |  4369/8359 | ✓4355 | ✗   1] ✓ tests/gateway/test_restart_drain.py (19✓, 1.2s)
[ 52.5% |  4386/8359 | ✓4372 | ✗   1] ✓ tests/gateway/test_resume_command.py (17✓, 0.8s)
[ 52.6% |  4395/8359 | ✓4381 | ✗   1] ✓ tests/gateway/test_restart_redelivery_dedup.py (9✓, 1.0s)
[ 52.6% |  4397/8359 | ✓4383 | ✗   1] ✓ tests/gateway/test_retry_replacement.py (2✓, 0.9s)
[ 52.6% |  4399/8359 | ✓4385 | ✗   1] ✓ tests/gateway/test_retry_response.py (2✓, 0.9s)
[ 54.6% |  4560/8359 | ✓4546 | ✗   1] ✓ tests/gateway/test_qqbot.py (161✓, 3.1s)
[ 54.6% |  4565/8359 | ✓4551 | ✗   1] ✓ tests/gateway/test_pending_drain_no_recursion.py (5✓, 5.2s)
[ 55.0% |  4596/8359 | ✓4582 | ✗   1] ✓ tests/gateway/test_run_tool_media_re.py (31✓, 0.6s)
[ 55.0% |  4601/8359 | ✓4587 | ✗   1] ✓ tests/gateway/test_running_agent_session_toggles.py (5✓, 0.6s)
[ 55.2% |  4610/8359 | ✓4596 | ✗   1] ✓ tests/gateway/test_runtime_config_env_expansion.py (9✓, 0.8s)
[ 55.4% |  4635/8359 | ✓4621 | ✗   1] ✓ tests/gateway/test_runtime_footer.py (25✓, 0.5s)
[ 55.5% |  4638/8359 | ✓4624 | ✗   1] ✓ tests/gateway/test_runner_fatal_adapter.py (3✓, 1.3s)
[ 55.5% |  4640/8359 | ✓4626 | ✗   1] ✓ tests/gateway/test_run_progress_interrupt.py (2✓, 1.5s)
[ 55.5% |  4643/8359 | ✓4629 | ✗   1] ✓ tests/gateway/test_runtime_env_reload_config_authority.py (3✓, 0.8s)
[ 55.6% |  4647/8359 | ✓4633 | ✗   1] ✓ tests/gateway/test_safe_adapter_disconnect.py (4✓, 0.8s)
[ 55.9% |  4670/8359 | ✓4656 | ✗   1] ✓ tests/gateway/test_send_image_file.py (23✓, 0.7s)
[ 56.3% |  4705/8359 | ✓4691 | ✗   1] ✓ tests/gateway/test_send_retry.py (35✓, 0.6s)
[ 56.5% |  4724/8359 | ✓4710 | ✗   1] ✓ tests/gateway/test_send_multiple_images.py (19✓, 0.8s)
[ 56.5% |  4726/8359 | ✓4712 | ✗   1] ✓ tests/gateway/test_send_voice_reply_notify.py (2✓, 0.7s)
[ 57.5% |  4805/8359 | ✓4791 | ✗   1] ✓ tests/gateway/test_session.py (79✓, 0.9s)
[ 57.5% |  4810/8359 | ✓4796 | ✗   1] ✓ tests/gateway/test_session_boundary_security_state.py (5✓, 0.5s)
[ 57.7% |  4822/8359 | ✓4808 | ✗   1] ✓ tests/gateway/test_session_api.py (12✓, 0.7s)
[ 57.8% |  4832/8359 | ✓4818 | ✗   1] ✓ tests/gateway/test_session_dm_thread_seeding.py (10✓, 0.6s)
[ 57.9% |  4836/8359 | ✓4822 | ✗   1] ✓ tests/gateway/test_session_list_allowed_sources.py (4✓, 0.5s)
[ 57.9% |  4841/8359 | ✓4827 | ✗   1] ✓ tests/gateway/test_run_cleanup_progress.py (5✓, 3.6s)
[ 58.2% |  4864/8359 | ✓4850 | ✗   1] ✓ tests/gateway/test_session_hygiene.py (23✓, 0.8s)
[ 58.4% |  4878/8359 | ✓4864 | ✗   1] ✓ tests/gateway/test_session_env.py (14✓, 0.9s)
[ 58.5% |  4889/8359 | ✓4875 | ✗   1] ✓ tests/gateway/test_runner_startup_failures.py (11✓, 3.5s)
[ 58.5% |  4892/8359 | ✓4878 | ✗   1] ✓ tests/gateway/test_session_model_reset.py (3✓, 0.5s)
[ 58.7% |  4908/8359 | ✓4894 | ✗   1] ✓ tests/gateway/test_session_reset_notify.py (16✓, 0.5s)
[ 58.8% |  4912/8359 | ✓4898 | ✗   1] ✓ tests/gateway/test_session_model_override_routing.py (4✓, 1.0s)
[ 58.9% |  4921/8359 | ✓4907 | ✗   1] ✓ tests/gateway/test_session_info.py (9✓, 1.6s)
[ 58.9% |  4925/8359 | ✓4911 | ✗   1] ✓ tests/gateway/test_session_override_thread_recovery.py (4✓, 0.8s)
[ 59.1% |  4937/8359 | ✓4923 | ✗   1] ✓ tests/gateway/test_session_state_cleanup.py (12✓, 0.6s)
[ 59.3% |  4955/8359 | ✓4941 | ✗   1] ✓ tests/gateway/test_session_store_prune.py (18✓, 0.5s)
[ 59.4% |  4968/8359 | ✓4954 | ✗   1] ✓ tests/gateway/test_session_split_brain_11016.py (13✓, 0.9s)
[ 59.7% |  4988/8359 | ✓4974 | ✗   1] ✓ tests/gateway/test_gateway_shutdown.py (20✓, 16.7s)
[ 59.8% |  5002/8359 | ✓4988 | ✗   1] ✓ tests/gateway/test_setup_feishu.py (14✓, 0.7s)
[ 59.9% |  5004/8359 | ✓4990 | ✗   1] ✓ tests/gateway/test_shared_group_sender_prefix.py (2✓, 0.8s)
[ 59.9% |  5011/8359 | ✓4997 | ✗   1] ✓ tests/gateway/test_shutdown_memory_provider_messages.py (7✓, 0.5s)
[ 60.0% |  5019/8359 | ✓5005 | ✗   1] ✓ tests/gateway/test_shutdown_cache_cleanup.py (8✓, 0.9s)
[ 60.3% |  5037/8359 | ✓5023 | ✗   1] ✓ tests/gateway/test_signal_rate_limit.py (18✓, 0.6s)
[ 60.9% |  5091/8359 | ✓5077 | ✗   1] ✓ tests/gateway/test_signal_format.py (54✓, 0.7s)
[ 61.3% |  5121/8359 | ✓5107 | ✗   1] ✓ tests/gateway/test_shutdown_forensics.py (30✓, 1.2s)
[ 61.3% |  5128/8359 | ✓5114 | ✗   1] ✓ tests/gateway/test_slack_channel_session_scope.py (7✓, 0.5s)
[ 61.7% |  5154/8359 | ✓5140 | ✗   1] ✓ tests/gateway/test_slack_approval_buttons.py (26✓, 0.7s)
[ 63.2% |  5280/8359 | ✓5266 | ✗   1] ✓ tests/gateway/test_signal.py (126✓, 1.4s)
[ 63.3% |  5291/8359 | ✓5277 | ✗   1] ✓ tests/gateway/test_slack_channel_skills.py (11✓, 0.5s)
[ 63.7% |  5321/8359 | ✓5307 | ✗   1] ✓ tests/gateway/test_simplex_plugin.py (30✓, 1.2s)
[ 63.8% |  5335/8359 | ✓5321 | ✗   1] ✓ tests/gateway/test_slack_plugin_action_handlers.py (14✓, 0.7s)
[ 64.1% |  5356/8359 | ✓5342 | ✗   1] ✓ tests/gateway/test_slash_access.py (21✓, 0.6s)
[ 64.3% |  5374/8359 | ✓5360 | ✗   1] ✓ tests/gateway/test_slash_access_dispatch.py (18✓, 0.9s)
[ 64.8% |  5413/8359 | ✓5399 | ✗   1] ✓ tests/gateway/test_sms.py (39✓, 0.9s)
[ 65.4% |  5468/8359 | ✓5454 | ✗   1] ✓ tests/gateway/test_slack_mention.py (55✓, 1.4s)
[ 65.5% |  5474/8359 | ✓5460 | ✗   1] ✓ tests/gateway/test_sse_agent_cancel.py (6✓, 0.6s)
[ 65.6% |  5480/8359 | ✓5466 | ✗   1] ✓ tests/gateway/test_session_boundary_hooks.py (6✓, 5.7s)
[ 65.6% |  5482/8359 | ✓5468 | ✗   1] ✓ tests/gateway/test_ssl_cert_detection.py (2✓, 0.5s)
[ 65.6% |  5485/8359 | ✓5471 | ✗   1] ✓ tests/gateway/test_ssl_certs.py (3✓, 0.5s)
[ 65.7% |  5490/8359 | ✓5476 | ✗   1] ✓ tests/gateway/test_steer_command.py (5✓, 0.6s)
[ 66.6% |  5563/8359 | ✓5549 | ✗   1] ✓ tests/gateway/test_status.py (73✓, 0.8s)
[ 66.8% |  5580/8359 | ✓5566 | ✗   1] ✓ tests/gateway/test_sticker_cache.py (17✓, 0.5s)
[ 67.0% |  5597/8359 | ✓5583 | ✗   1] ✓ tests/gateway/test_status_command.py (17✓, 0.8s)
[ 67.0% |  5601/8359 | ✓5587 | ✗   1] ✓ tests/gateway/test_step_callback_compat.py (4✓, 0.8s)
[ 69.4% |  5797/8359 | ✓5783 | ✗   1] ✓ tests/gateway/test_slack.py (196✓, 3.1s)
[ 69.4% |  5804/8359 | ✓5790 | ✗   1] ✓ tests/gateway/test_stop_thread_sibling.py (7✓, 0.8s)
[ 69.6% |  5817/8359 | ✓5803 | ✗   1] ✓ tests/gateway/test_stream_events.py (13✓, 0.5s)
[ 69.7% |  5826/8359 | ✓5812 | ✗   1] ✓ tests/gateway/test_stream_consumer_thread_routing.py (9✓, 0.6s)
[ 69.9% |  5845/8359 | ✓5831 | ✗   1] ✓ tests/gateway/test_session_race_guard.py (19✓, 6.0s)
[ 70.0% |  5853/8359 | ✓5839 | ✗   1] ✓ tests/gateway/test_gateway_inactivity_timeout.py (8✓, 21.4s)
[ 70.2% |  5871/8359 | ✓5857 | ✗   1] ✓ tests/gateway/test_stream_consumer_draft.py (18✓, 1.2s)
[ 70.3% |  5878/8359 | ✓5864 | ✗   1] ✓ tests/gateway/test_stt_config.py (7✓, 0.8s)
[ 70.7% |  5906/8359 | ✓5892 | ✗   1] ✓ tests/gateway/test_stream_consumer_fresh_final.py (28✓, 1.6s)
[ 70.8% |  5915/8359 | ✓5901 | ✗   1] ✓ tests/gateway/test_stuck_loop.py (9✓, 0.9s)
[ 70.9% |  5924/8359 | ✓5910 | ✗   1] ✓ tests/gateway/test_task26_candidate_derivation.py (9✓, 0.5s)
[ 70.9% |  5928/8359 | ✓5914 | ✗   1] ✓ tests/gateway/test_task26_final_authority.py (4✓, 0.5s)
[ 71.1% |  5945/8359 | ✓5931 | ✗   1] ✓ tests/gateway/test_subagent_protection_30170.py (17✓, 1.1s)
[ 71.3% |  5959/8359 | ✓5945 | ✗   1] ✓ tests/gateway/test_task26_runtime_authority.py (14✓, 0.6s)
[ 71.3% |  5962/8359 | ✓5948 | ✗   1] ✓ tests/gateway/test_task26_ty_surface_gate.py (3✓, 0.5s)
[ 71.5% |  5977/8359 | ✓5963 | ✗   1] ✓ tests/gateway/test_task26_telegram_startup_authority.py (15✓, 0.7s)
[ 71.5% |  5978/8359 | ✓5964 | ✗   1] ✓ tests/gateway/test_task26_telegram_local_socket_authority.py (1✓, 1.2s)
[ 71.9% |  6009/8359 | ✓5995 | ✗   1] ✓ tests/gateway/test_task26_final_state.py (31✓, 2.0s)
[ 71.9% |  6014/8359 | ✓6000 | ✗   1] ✓ tests/gateway/test_task26_frozen_bootstrap.py (5✓, 1.9s)
[ 72.6% |  6071/8359 | ✓6057 | ✗   1] ✓ tests/gateway/test_teams.py (57✓, 0.9s)
[ 73.1% |  6108/8359 | ✓6094 | ✗   1] ✓ tests/gateway/test_task7_generation_hardening.py (37✓, 1.1s)
[ 73.2% |  6115/8359 | ✓6101 | ✗   1] ✓ tests/gateway/test_task26_independent_candidate_verifier.py (7✓, 2.0s)
[ 73.2% |  6122/8359 | ✓6108 | ✗   1] ✓ tests/gateway/test_teams_pipeline_runtime_wiring.py (7✓, 0.8s)
[ 73.4% |  6132/8359 | ✓6118 | ✗   1] ✓ tests/gateway/test_telegram_activation_notice.py (10✓, 0.6s)
[ 73.4% |  6137/8359 | ✓6123 | ✗   1] ✓ tests/gateway/test_telegram_audio_vs_voice.py (5✓, 0.6s)
[ 73.5% |  6142/8359 | ✓6128 | ✗   1] ✓ tests/gateway/test_telegram_callback_auth_fail_closed.py (5✓, 0.6s)
[ 73.6% |  6155/8359 | ✓6141 | ✗   1] ✓ tests/gateway/test_telegram_caption_merge.py (13✓, 0.7s)
[ 73.9% |  6175/8359 | ✓6161 | ✗   1] ✓ tests/gateway/test_telegram_approval_buttons.py (20✓, 0.9s)
[ 74.3% |  6208/8359 | ✓6194 | ✗   1] ✓ tests/gateway/test_run_progress_topics.py (33✓, 12.9s)
[ 74.3% |  6211/8359 | ✓6197 | ✗   1] ✓ tests/gateway/test_telegram_channel_posts.py (3✓, 0.8s)
[ 74.4% |  6223/8359 | ✓6209 | ✗   1] ✓ tests/gateway/test_telegram_clarify_buttons.py (12✓, 0.8s)
[ 74.5% |  6229/8359 | ✓6215 | ✗   1] ✓ tests/gateway/test_telegram_customer_bootstrap.py (6✓, 0.8s)
[ 74.6% |  6234/8359 | ✓6220 | ✗   1] ✓ tests/gateway/test_telegram_forum_commands.py (5✓, 0.7s)
[ 74.8% |  6253/8359 | ✓6239 | ✗   1] ✓ tests/gateway/test_telegram_customer_surface_receipts.py (19✓, 0.9s)
[ 74.9% |  6263/8359 | ✓6249 | ✗   1] ✓ tests/gateway/test_telegram_conflict.py (10✓, 1.3s)
[ 76.1% |  6364/8359 | ✓6350 | ✗   1] ✓ tests/gateway/test_telegram_format.py (101✓, 1.3s)
[ 76.2% |  6367/8359 | ✓6353 | ✗   1] ✓ tests/gateway/test_telegram_max_doc_bytes.py (3✓, 0.6s)
[ 76.2% |  6370/8359 | ✓6356 | ✗   1] ✓ tests/gateway/test_telegram_mock_bootstrap.py (3✓, 0.6s)
[ 76.4% |  6389/8359 | ✓6375 | ✗   1] ✓ tests/gateway/test_telegram_mention_boundaries.py (19✓, 0.7s)
[ 76.6% |  6404/8359 | ✓6390 | ✗   1] ✓ tests/gateway/test_telegram_network_reconnect.py (15✓, 0.7s)
[ 76.9% |  6424/8359 | ✓6410 | ✗   1] ✓ tests/gateway/test_telegram_nutrition_addresses.py (20✓, 0.6s)
[ 76.9% |  6430/8359 | ✓6416 | ✗   1] ✓ tests/gateway/test_telegram_model_picker.py (6✓, 1.2s)
[ 77.0% |  6436/8359 | ✓6422 | ✗   1] ✓ tests/gateway/test_telegram_noise_filter.py (6✓, 0.9s)
[ 78.1% |  6531/8359 | ✓6517 | ✗   1] ✓ tests/gateway/test_telegram_group_gating.py (95✓, 1.9s)
[ 78.7% |  6577/8359 | ✓6563 | ✗   1] ✓ tests/gateway/test_telegram_network.py (46✓, 1.2s)
[ 78.8% |  6590/8359 | ✓6576 | ✗   1] ✓ tests/gateway/test_telegram_nutrition_onboarding_copy.py (13✓, 0.6s)
[ 78.8% |  6590/8359 | ✓6591 | ✗   1] ✓ tests/gateway/test_telegram_nutrition_onboarding_callback_observability.py (15✓, 0.9s)
[ 79.9% |  6683/8359 | ✓6684 | ✗   1] ✓ tests/gateway/test_stream_consumer.py (93✓, 7.3s)
[ 79.9% |  6683/8359 | ✓6689 | ✗   1] ✓ tests/gateway/test_telegram_nutrition_onboarding_direct_entry.py (5✓, 0.7s)
[ 79.9% |  6683/8359 | ✓6697 | ✗   1] ✓ tests/gateway/test_telegram_nutrition_onboarding_preview.py (8✓, 0.9s)
[ 79.9% |  6683/8359 | ✓6706 | ✗   1] ✓ tests/gateway/test_telegram_nutrition_onboarding_preview_runtime.py (9✓, 0.9s)
[ 80.0% |  6687/8359 | ✓6710 | ✗   1] ✓ tests/gateway/test_telegram_overflow_partial.py (4✓, 0.6s)
[ 80.5% |  6728/8359 | ✓6751 | ✗   1] ✓ tests/gateway/test_telegram_documents.py (41✓, 3.7s)
[ 81.4% |  6803/8359 | ✓6826 | ✗   1] ✓ tests/gateway/test_restart_resume_pending.py (75✓, 17.4s)
[ 81.5% |  6816/8359 | ✓6839 | ✗   1] ✓ tests/gateway/test_telegram_nutrition_operator_console.py (13✓, 1.0s)
[ 81.5% |  6816/8359 | ✓6903 | ✗   1] ✓ tests/gateway/test_telegram_nutrition_onboarding.py (64✓, 1.8s)
[ 81.6% |  6819/8359 | ✓6906 | ✗   1] ✓ tests/gateway/test_telegram_polling_receipts_multiprocess.py (3✓, 0.6s)
[ 81.6% |  6820/8359 | ✓6907 | ✗   1] ✓ tests/gateway/test_telegram_photo_interrupts.py (1✓, 1.0s)
[ 81.8% |  6837/8359 | ✓6924 | ✗   1] ✓ tests/gateway/test_telegram_polling_receipts.py (17✓, 1.0s)
[ 82.1% |  6859/8359 | ✓6946 | ✗   1] ✓ tests/gateway/test_telegram_progress_edit_transient.py (22✓, 0.7s)
[ 82.1% |  6863/8359 | ✓6950 | ✗   1] ✓ tests/gateway/test_telegram_reply_quote.py (4✓, 0.6s)
[ 82.1% |  6866/8359 | ✓6953 | ✗   1] ✓ tests/gateway/test_telegram_send_draft_format.py (3✓, 0.7s)
[ 83.7% |  6994/8359 | ✓7081 | ✗   1] ✓ tests/gateway/test_telegram_physique_checkin.py (128✓, 1.7s)
[ 83.9% |  7015/8359 | ✓7102 | ✗   1] ✓ tests/gateway/test_telegram_reactions.py (21✓, 1.1s)
[ 84.0% |  7019/8359 | ✓7106 | ✗   1] ✓ tests/gateway/test_telegram_room_bootstrap_adversarial.py (4✓, 0.9s)
[ 84.6% |  7074/8359 | ✓7161 | ✗   1] ✓ tests/gateway/test_telegram_rich_messages.py (55✓, 1.1s)
[ 84.7% |  7077/8359 | ✓7164 | ✗   1] ✓ tests/gateway/test_telegram_slash_confirm.py (3✓, 0.7s)
[ 84.8% |  7088/8359 | ✓7175 | ✗   1] ✓ tests/gateway/test_telegram_staff_membership_gate.py (11✓, 0.7s)
[ 85.3% |  7128/8359 | ✓7215 | ✗   1] ✓ tests/gateway/test_telegram_reply_mode.py (40✓, 1.7s)
[ 85.3% |  7130/8359 | ✓7217 | ✗   1] ✓ tests/gateway/test_telegram_staff_membership_polling.py (2✓, 0.6s)
[ 85.4% |  7139/8359 | ✓7226 | ✗   1] ✓ tests/gateway/test_telegram_status_indicator.py (9✓, 0.7s)
[ 85.5% |  7144/8359 | ✓7231 | ✗   1] ✓ tests/gateway/test_telegram_status_update.py (5✓, 0.7s)
[ 85.6% |  7156/8359 | ✓7243 | ✗   1] ✓ tests/gateway/test_telegram_text_batch_perf.py (12✓, 0.6s)
[ 85.7% |  7161/8359 | ✓7248 | ✗   1] ✓ tests/gateway/test_telegram_webhook_secret.py (5✓, 0.5s)
[ 85.8% |  7169/8359 | ✓7256 | ✗   1] ✓ tests/gateway/test_tool_response_drop_recovery.py (8✓, 0.6s)
[ 86.0% |  7185/8359 | ✓7272 | ✗   1] ✓ tests/gateway/test_title_command.py (16✓, 0.7s)
[ 86.5% |  7229/8359 | ✓7316 | ✗   1] ✓ tests/gateway/test_telegram_topic_mode.py (44✓, 1.1s)
[ 86.5% |  7231/8359 | ✓7318 | ✗   1] ✓ tests/gateway/test_telegram_voice_v0_regressions.py (2✓, 1.0s)
[ 86.6% |  7237/8359 | ✓7324 | ✗   1] ✓ tests/gateway/test_trainer_free_v1_contract.py (6✓, 0.9s)
[ 86.6% |  7243/8359 | ✓7330 | ✗   1] ✓ tests/gateway/test_telegram_text_batching.py (6✓, 1.9s)
[ 86.7% |  7248/8359 | ✓7335 | ✗   1] ✓ tests/gateway/test_unavailable_skill_hint.py (5✓, 0.6s)
[ 87.1% |  7281/8359 | ✓7368 | ✗   1] ✓ tests/gateway/test_unauthorized_dm_behavior.py (33✓, 0.7s)
[ 87.2% |  7289/8359 | ✓7376 | ✗   1] ✓ tests/gateway/test_transcript_offset.py (8✓, 0.9s)
[ 87.3% |  7296/8359 | ✓7383 | ✗   1] ✓ tests/gateway/test_tts_media_routing.py (7✓, 0.9s)
[ 87.4% |  7302/8359 | ✓7389 | ✗   1] ✓ tests/gateway/test_undo_rewind_session.py (6✓, 0.5s)
[ 87.5% |  7310/8359 | ✓7397 | ✗   1] ✓ tests/gateway/test_usage_command.py (8✓, 0.7s)
[ 87.6% |  7321/8359 | ✓7408 | ✗   1] ✓ tests/gateway/test_unknown_command.py (11✓, 1.0s)
[ 87.6% |  7322/8359 | ✓7409 | ✗   1] ✓ tests/gateway/test_version_command.py (1✓, 0.6s)
[ 88.0% |  7357/8359 | ✓7444 | ✗   1] ✓ tests/gateway/test_update_command.py (35✓, 1.1s)
[ 88.1% |  7365/8359 | ✓7452 | ✗   1] ✓ tests/gateway/test_verbose_command.py (8✓, 1.0s)
[ 88.1% |  7366/8359 | ✓7453 | ✗   1] ✓ tests/gateway/test_video_context_note.py (1✓, 0.6s)
[ 88.2% |  7369/8359 | ✓7456 | ✗   1] ✓ tests/gateway/test_vision_memory_leak.py (3✓, 0.6s)
[ 88.3% |  7380/8359 | ✓7467 | ✗   1] ✓ tests/gateway/test_weak_credential_guard.py (11✓, 0.7s)
[ 88.4% |  7390/8359 | ✓7477 | ✗   1] ✓ tests/gateway/test_voice_mode_platform_isolation.py (10✓, 0.9s)
[ 88.6% |  7404/8359 | ✓7491 | ✗   1] ✓ tests/gateway/test_webhook_deliver_only.py (14✓, 0.8s)
[ 88.7% |  7416/8359 | ✓7503 | ✗   1] ✓ tests/gateway/test_task26_ty_wheel_builder.py (12✓, 11.3s)
[ 89.5% |  7484/8359 | ✓7571 | ✗   1] ✓ tests/gateway/test_webhook_adapter.py (68✓, 1.1s)
[ 89.7% |  7497/8359 | ✓7584 | ✗   1] ✓ tests/gateway/test_webhook_dynamic_routes.py (13✓, 0.7s)
[ 89.7% |  7500/8359 | ✓7587 | ✗   1] ✓ tests/gateway/test_webhook_signature_rate_limit.py (3✓, 0.7s)
[ 89.8% |  7504/8359 | ✓7591 | ✗   1] ✓ tests/gateway/test_webhook_integration.py (4✓, 0.8s)
[ 89.8% |  7507/8359 | ✓7594 | ✗   1] ✓ tests/gateway/test_telegram_send_path_health.py (3✓, 5.8s)
[ 90.0% |  7519/8359 | ✓7606 | ✗   1] ✓ tests/gateway/test_wecom_callback.py (12✓, 0.7s)
[ 90.5% |  7565/8359 | ✓7652 | ✗   1] ✓ tests/gateway/test_wecom.py (46✓, 0.9s)
[ 90.7% |  7578/8359 | ✓7665 | ✗   1] ✓ tests/gateway/test_weixin_typing.py (13✓, 0.6s)
[ 91.9% |  7683/8359 | ✓7770 | ✗   1] ✓ tests/gateway/test_whatsapp_cloud.py (105✓, 1.1s)
[ 92.2% |  7709/8359 | ✓7796 | ✗   1] ✓ tests/gateway/test_whatsapp_group_gating.py (26✓, 1.0s)
[ 92.3% |  7717/8359 | ✓7804 | ✗   1] ✓ tests/gateway/test_whatsapp_reply_prefix.py (8✓, 0.9s)
[ 92.5% |  7728/8359 | ✓7815 | ✗   1] ✓ tests/gateway/test_whatsapp_stale_bridge.py (11✓, 0.6s)
[ 92.8% |  7755/8359 | ✓7842 | ✗   1] ✓ tests/gateway/test_whatsapp_connect.py (27✓, 1.7s)
[ 93.0% |  7778/8359 | ✓7865 | ✗   1] ✓ tests/gateway/test_text_batching.py (23✓, 6.5s)
[ 95.3% |  7962/8359 | ✓8049 | ✗   1] ✓ tests/gateway/test_voice_command.py (184✓, 4.0s)
[ 95.3% |  7968/8359 | ✓8055 | ✗   1] ✓ tests/gateway/test_ws_auth_retry.py (6✓, 0.7s)
[ 95.4% |  7974/8359 | ✓8061 | ✗   1] ✓ tests/gateway/test_whatsapp_text_batching.py (6✓, 1.0s)
[ 96.2% |  8043/8359 | ✓8130 | ✗   1] ✓ tests/gateway/test_weixin.py (69✓, 2.6s)
[ 96.2% |  8044/8359 | ✓8131 | ✗   1] ✓ tests/gateway/test_yolo_command.py (1✓, 0.7s)
[ 96.6% |  8071/8359 | ✓8158 | ✗   1] ✓ tests/gateway/test_whatsapp_formatting.py (27✓, 2.7s)
[ 96.8% |  8092/8359 | ✓8179 | ✗   1] ✓ tests/gateway/test_update_streaming.py (21✓, 8.1s)
[ 97.5% |  8151/8359 | ✓8238 | ✗   1] ✓ tests/gateway/test_source_golden_path_verifier.py (59✓, 22.1s)
[ 98.1% |  8197/8359 | ✓8284 | ✗   1] ✓ tests/gateway/test_telegram_thread_fallback.py (46✓, 18.5s)
[100.0% |  8359/8359 | ✓8446 | ✗   1] ✓ tests/gateway/test_adaptive_nutrition.py (162✓, 331.4s)

=== Summary: 384 files, 8446 tests passed, 1 failed (100% complete) in 332.1s (12 workers) ===
  Durations cached to test_durations.json (384 files)

=== Per-file subprocess time distribution ===
  Files:   384
  Total subprocess CPU-wall: 868.9s  (runner wall: 332.1s, parallelism: 12x)
  P50: 0.82s  P90: 2.01s  P95: 4.03s  P99: 18.48s  Max: 331.38s
  <1s: 270 files (70%)  <2s: 345 files (90%)
  Top 10 slowest:
    331.38s  tests/gateway/test_adaptive_nutrition.py
     22.14s  tests/gateway/test_source_golden_path_verifier.py
     21.45s  tests/gateway/test_gateway_inactivity_timeout.py
     18.48s  tests/gateway/test_telegram_thread_fallback.py
     17.37s  tests/gateway/test_restart_resume_pending.py
     16.75s  tests/gateway/test_gateway_shutdown.py
     12.91s  tests/gateway/test_run_progress_topics.py
     11.33s  tests/gateway/test_task26_ty_wheel_builder.py
      8.14s  tests/gateway/test_update_streaming.py
      7.33s  tests/gateway/test_stream_consumer.py

=== Failure output ===

--- tests/gateway/test_installed_golden_path_provenance.py ---
============================= test session starts ==============================
platform linux -- Python 3.12.9, pytest-9.0.2, pluggy-1.6.0
rootdir: /home/cube/projects/richard/hermes-agent
configfile: pyproject.toml
plugins: anyio-4.12.1, asyncio-1.3.0
asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=function, asyncio_default_test_loop_scope=function
collected 25 items

tests/gateway/test_installed_golden_path_provenance.py ................. [ 68%]
......F.                                                                 [100%]

=================================== FAILURES ===================================
___________ test_installed_driver_never_falls_back_to_profile_source ___________

tmp_path = PosixPath('/tmp/pytest-of-cube/pytest-6922/test_installed_driver_never_fa0')

    def test_installed_driver_never_falls_back_to_profile_source(
        tmp_path: Path,
    ) -> None:
        venv = tmp_path / "venv"
        venv.mkdir(mode=0o700)
        binary = venv / "bin/python"
        binary.parent.mkdir()
        binary.symlink_to(Path(sys.executable).resolve())
        site, profile_wheel, _ = _distribution(
            venv, name="physique-checkin-cli", package="checkin_cli"
        )
        _, hermes_wheel, _ = _distribution(
            venv, name="hermes-agent", package="gateway"
        )
        evidence = tmp_path / "evidence"
        driver = SCRIPT.with_name("source_golden_path.py")
        repo = SCRIPT.parents[1]
        tools = qualification_tool_hashes(
            scripts_dir=repo / "scripts", package_root=repo
        )
        product_binding = build_product_binding(
            {
                "schema": "task26-preexecution-product-derivation-inputs-v1",
                "generation": 1,
                "hermes_wheel_sha256": hashlib.sha256(hermes_wheel.read_bytes()).hexdigest(),
                "profile_wheel_sha256": hashlib.sha256(profile_wheel.read_bytes()).hexdigest(),
                "wheelhouse_inventory_sha256": EMPTY_WHEELHOUSE_INVENTORY_SHA256,
                "wheelhouse_entry_count": 0,
                "trust_boundary_sha256": trust_boundary_digest(TRUST_BOUNDARY),
                "qualification_tool_sha256": tools,
                "hermetic_ty": {
                    "schema": "task26-preexecution-hermetic-ty-binding-v1",
                    "corrected_ty_wheel_sha256": "1" * 64,
                    "ty_version": "0.0.21",
                    "binary_member": "ty-0.0.21.data/scripts/ty",
                    "binary_member_sha256": "2" * 64,
                    "builder_tool_sha256": tools["ty_wheel_builder"],
                    "runner_tool_sha256": tools["ty_hermetic_runner"],
                },
            }
        )
        product_binding_path = tmp_path / "product-binding.json"
        product_binding_path.write_bytes(
            json.dumps(product_binding, sort_keys=True, separators=(",", ":")).encode()
            + b"\n"
        )
        product_binding_path.chmod(0o600)
        environment = dict(os.environ)
        environment["PYTHONPATH"] = str(site)
        completed = __import__("subprocess").run(
            [
                str(binary),
                str(driver),
                "--installed-venv",
                str(venv),
                "--installed-site-packages",
                str(site),
                "--profile-wheel",
                str(profile_wheel),
                "--hermes-wheel",
                str(hermes_wheel),
                "--product-binding",
                str(product_binding_path),
                "--evidence-root",
                str(evidence),
            ],
            cwd=tmp_path,
            env=environment,
            text=True,
            capture_output=True,
            check=False,
        )
    
>       assert completed.returncode == 2
E       AssertionError: assert 1 == 2
E        +  where 1 = CompletedProcess(args=['/tmp/pytest-of-cube/pytest-6922/test_installed_driver_never_fa0/venv/bin/python', '/home/cube/...in <module>\n    from gateway.config import PlatformConfig\nModuleNotFoundError: No module named \'gateway.config\'\n').returncode

tests/gateway/test_installed_golden_path_provenance.py:716: AssertionError
=========================== short test summary info ============================
FAILED tests/gateway/test_installed_golden_path_provenance.py::test_installed_driver_never_falls_back_to_profile_source
========================= 1 failed, 24 passed in 0.78s =========================

=== 1 file with test failures (1 test failed) ===
  tests/gateway/test_installed_golden_path_provenance.py  (1 test failed)
