[
  "tests/test_ai_json_parsing.py::test_brace_fallback_when_no_fence",
  "tests/test_ai_json_parsing.py::test_empty_string_returns_empty",
  "tests/test_ai_json_parsing.py::test_fence_no_language_tag",
  "tests/test_ai_json_parsing.py::test_fence_single_line",
  "tests/test_ai_json_parsing.py::test_fence_uppercase_json_tag",
  "tests/test_ai_json_parsing.py::test_fence_with_json_tag",
  "tests/test_ai_json_parsing.py::test_fence_with_leading_whitespace",
  "tests/test_ai_json_parsing.py::test_fence_with_prose_both_sides",
  "tests/test_ai_json_parsing.py::test_fence_with_prose_prefix",
  "tests/test_ai_json_parsing.py::test_fence_with_prose_suffix",
  "tests/test_ai_json_parsing.py::test_malformed_json_inside_fence_extracts_but_loads_fails",
  "tests/test_ai_json_parsing.py::test_markdown_chain_of_thought_no_json",
  "tests/test_ai_json_parsing.py::test_missing_closing_fence_brace_fallback",
  "tests/test_ai_json_parsing.py::test_no_fence_raw_json",
  "tests/test_ai_json_parsing.py::test_none_input_returns_empty",
  "tests/test_ai_json_parsing.py::test_prose_only_no_json_returns_stripped",
  "tests/test_ai_json_parsing.py::test_real_incident_shape_6c",
  "tests/test_ai_json_parsing.py::test_whitespace_only_returns_empty",
  "tests/test_bias_resolver.py::test_ai_garbage_bias_fallback",
  "tests/test_bias_resolver.py::test_ai_h1_compatibility_clamped",
  "tests/test_bias_resolver.py::test_ai_neutro_with_both_coerced_to_none",
  "tests/test_bias_resolver.py::test_bias_data_to_entry_roundtrip",
  "tests/test_bias_resolver.py::test_cache_hit_within_ttl",
  "tests/test_bias_resolver.py::test_cache_miss_after_ttl",
  "tests/test_bias_resolver.py::test_invalidate_all_clears_cache",
  "tests/test_bias_resolver.py::test_invalidate_symbol_forces_recompute",
  "tests/test_bias_resolver.py::test_no_h4_data_returns_neutro_both",
  "tests/test_bias_resolver.py::test_resolve_ambiguous_ai_credit_fallback",
  "tests/test_bias_resolver.py::test_resolve_ambiguous_ai_parse_error_fallback",
  "tests/test_bias_resolver.py::test_resolve_ambiguous_ai_timeout_fallback",
  "tests/test_bias_resolver.py::test_resolve_ambiguous_calls_ai_happy",
  "tests/test_bias_resolver.py::test_resolve_unambiguous_skips_ai",
  "tests/test_brain_mr.py::test_ai_rejection_missing_details_safe",
  "tests/test_brain_mr.py::test_ai_rejection_with_details_logged",
  "tests/test_brain_mr.py::test_entry_happy_with_pattern",
  "tests/test_brain_mr.py::test_entry_happy_without_pattern_high_conf",
  "tests/test_brain_mr.py::test_exit_ai_error_holds",
  "tests/test_brain_mr.py::test_exit_ai_says_exit",
  "tests/test_brain_mr.py::test_exit_ai_says_partial",
  "tests/test_brain_mr.py::test_exit_auto_partial_50",
  "tests/test_brain_mr.py::test_exit_auto_partial_65",
  "tests/test_brain_mr.py::test_exit_grace_period_indices_active",
  "tests/test_brain_mr.py::test_exit_grace_period_indices_expired",
  "tests/test_brain_mr.py::test_exit_rsi50_partial_with_set_be",
  "tests/test_brain_mr.py::test_exit_same_candle_dedup",
  "tests/test_brain_mr.py::test_exit_time_stop_breakeven_failed",
  "tests/test_brain_mr.py::test_exit_time_stop_deep_loss",
  "tests/test_brain_mr.py::test_exit_trailing_emergency",
  "tests/test_brain_mr.py::test_generic_profile_warning",
  "tests/test_brain_mr.py::test_mr_tp_floor_applied_when_raw_too_small",
  "tests/test_brain_mr.py::test_mr_tp_floor_metadata_propagated",
  "tests/test_brain_mr.py::test_mr_tp_floor_overrides_cap_when_collision",
  "tests/test_brain_mr.py::test_post_val_c95_h4_weak",
  "tests/test_brain_mr.py::test_post_val_conf_below_with_pattern",
  "tests/test_brain_mr.py::test_post_val_conf_below_without_pattern",
  "tests/test_brain_mr.py::test_post_val_rr_below_min",
  "tests/test_brain_mr.py::test_post_val_rr_out_of_range",
  "tests/test_brain_mr.py::test_post_val_sl_out_of_profile_range",
  "tests/test_brain_mr.py::test_post_val_tp_direction_wrong",
  "tests/test_brain_mr.py::test_pre_val_atr_too_high",
  "tests/test_brain_mr.py::test_pre_val_indices_not_pro_trend",
  "tests/test_brain_mr.py::test_pre_val_indices_ranging",
  "tests/test_brain_mr.py::test_pre_val_macd_accelerating_against_buy",
  "tests/test_brain_mr.py::test_pre_val_macd_accelerating_against_sell",
  "tests/test_brain_mr.py::test_pre_val_macd_accelerating_in_favor_passes",
  "tests/test_brain_mr.py::test_pre_val_macd_decelerating_passes_either_sign",
  "tests/test_brain_mr.py::test_pre_val_rsi_not_extreme_buy",
  "tests/test_brain_mr.py::test_pre_val_rsi_not_extreme_sell",
  "tests/test_brain_mr.py::test_rejection_logging_rsi_not_extreme",
  "tests/test_brain_mr.py::test_rr_below_min_post_clamp",
  "tests/test_brain_mr.py::test_rr_below_min_post_clamp_logs_warning_but_accepts",
  "tests/test_brain_mr.py::test_tp_atr_spike_cap_applied_mr",
  "tests/test_brain_mr.py::test_tp_intraday_cap_applied_mr",
  "tests/test_brain_tf.py::test_ai_rejection_missing_details_safe",
  "tests/test_brain_tf.py::test_ai_rejection_with_details_logged",
  "tests/test_brain_tf.py::test_entry_happy_path",
  "tests/test_brain_tf.py::test_exit_ai_error_holds",
  "tests/test_brain_tf.py::test_exit_ai_says_exit",
  "tests/test_brain_tf.py::test_exit_ai_says_hold",
  "tests/test_brain_tf.py::test_exit_auto_partial_50_be_price_tick_aligned",
  "tests/test_brain_tf.py::test_exit_auto_partial_50_below_threshold_no_fire",
  "tests/test_brain_tf.py::test_exit_auto_partial_50_fires_before_dedup",
  "tests/test_brain_tf.py::test_exit_auto_partial_50_fires_with_set_be",
  "tests/test_brain_tf.py::test_exit_auto_partial_50_skipped_if_partial_done",
  "tests/test_brain_tf.py::test_exit_auto_partial_50_threshold_exact",
  "tests/test_brain_tf.py::test_exit_same_candle_dedup",
  "tests/test_brain_tf.py::test_exit_short_symmetry",
  "tests/test_brain_tf.py::test_exit_struct_flip_detected",
  "tests/test_brain_tf.py::test_exit_time_stop_negative_pnl",
  "tests/test_brain_tf.py::test_generic_profile_warning",
  "tests/test_brain_tf.py::test_post_val_c95_h4_weak",
  "tests/test_brain_tf.py::test_post_val_confidence_below_floor",
  "tests/test_brain_tf.py::test_post_val_rr_below_min",
  "tests/test_brain_tf.py::test_post_val_rr_missing",
  "tests/test_brain_tf.py::test_post_val_rr_out_of_range",
  "tests/test_brain_tf.py::test_post_val_sl_out_of_profile_range",
  "tests/test_brain_tf.py::test_post_val_tp_direction_wrong",
  "tests/test_brain_tf.py::test_pre_val_atr_below_floor",
  "tests/test_brain_tf.py::test_pre_val_capitulation_candle",
  "tests/test_brain_tf.py::test_pre_val_macd_accelerating_against_buy_tf",
  "tests/test_brain_tf.py::test_pre_val_macd_accelerating_against_sell_tf",
  "tests/test_brain_tf.py::test_pre_val_macd_accelerating_in_favor_passes_tf",
  "tests/test_brain_tf.py::test_pre_val_macd_decelerating_passes_tf",
  "tests/test_brain_tf.py::test_pre_val_rsi_outside_zone",
  "tests/test_brain_tf.py::test_prompt_consecutive_sl_warning",
  "tests/test_brain_tf.py::test_prompt_no_sl_no_warning",
  "tests/test_brain_tf.py::test_rejection_logging_post_val",
  "tests/test_brain_tf.py::test_rejection_logging_pullback_zone",
  "tests/test_brain_tf.py::test_rejection_logs_radar_tech_fields",
  "tests/test_brain_tf.py::test_rr_below_min_post_clamp_logs_warning_but_accepts",
  "tests/test_brain_tf.py::test_rr_below_min_post_clamp_rejected_with_diagnostics",
  "tests/test_brain_tf.py::test_sl_floored_false_when_above_min",
  "tests/test_brain_tf.py::test_sl_floored_false_when_symbol_has_no_min_config",
  "tests/test_brain_tf.py::test_sl_floored_mym_min_sl_ticks",
  "tests/test_brain_tf.py::test_tp_cap_collision_with_rr_floor_accepts",
  "tests/test_brain_tf.py::test_tp_floor_applied_when_raw_too_small",
  "tests/test_brain_tf.py::test_tp_floor_metadata_propagated",
  "tests/test_brain_tf.py::test_tp_floor_not_applied_when_above",
  "tests/test_brain_tf.py::test_tp_floor_overrides_cap_when_collision",
  "tests/test_brain_tf.py::test_tp_intraday_cap_applied",
  "tests/test_brain_tf.py::test_tp_no_cap_when_below_thresholds",
  "tests/test_dashboard_writer.py::test_asset_stats_today_filters_by_full_close_ts",
  "tests/test_dashboard_writer.py::test_asset_stats_today_filters_by_ts_prefix",
  "tests/test_dashboard_writer.py::test_asset_stats_ts_prefix_respects_utc_midnight_boundary",
  "tests/test_dashboard_writer.py::test_broker_pnl_ignored_when_source_is_tick_math",
  "tests/test_dashboard_writer.py::test_broker_pnl_overrides_partial_tick_math",
  "tests/test_dashboard_writer.py::test_broker_pnl_overrides_stale_balance_delta",
  "tests/test_dashboard_writer.py::test_broker_pnl_preferred_any_source_over_stale_delta",
  "tests/test_dashboard_writer.py::test_in_flight_partial_without_full_close_is_excluded",
  "tests/test_dashboard_writer.py::test_partial_plus_be_residual_counts_as_one_win",
  "tests/test_dashboard_writer.py::test_trade_history_daily_buckets_by_utc_date",
  "tests/test_dashboard_writer.py::test_trade_history_daily_empty_when_no_rows",
  "tests/test_dashboard_writer.py::test_trade_history_fuses_partial_with_full_close",
  "tests/test_dashboard_writer.py::test_trade_history_mixes_partial_and_full",
  "tests/test_entry_dedup.py::test_ai_permanent_failure_updates_cache",
  "tests/test_entry_dedup.py::test_ai_transient_failure_does_not_update_cache",
  "tests/test_entry_dedup.py::test_candle_age_calculation_open_time_convention",
  "tests/test_entry_dedup.py::test_candle_time_zero_treated_as_not_closed",
  "tests/test_entry_dedup.py::test_dedup_cache_persists_across_restart",
  "tests/test_entry_dedup.py::test_evaluate_entry_proceeds_when_candle_settled",
  "tests/test_entry_dedup.py::test_evaluate_entry_skips_when_candle_not_closed",
  "tests/test_entry_dedup.py::test_evaluate_entry_skips_when_candle_stabilizing",
  "tests/test_entry_dedup.py::test_evaluate_entry_skips_when_candle_too_old",
  "tests/test_entry_dedup.py::test_mr_same_candle_skips_ai",
  "tests/test_entry_dedup.py::test_pre_val_rejection_does_not_update_cache",
  "tests/test_entry_dedup.py::test_tf_first_call_invokes_ai",
  "tests/test_entry_dedup.py::test_tf_same_candle_skips_ai",
  "tests/test_indicators.py::test_absorption_atr_zero_safe",
  "tests/test_indicators.py::test_absorption_insufficient_bars",
  "tests/test_indicators.py::test_absorption_tick_volume_fallback",
  "tests/test_indicators.py::test_atr_constant_range",
  "tests/test_indicators.py::test_atr_spike_increases_ratio",
  "tests/test_indicators.py::test_bear_engulfing_detection",
  "tests/test_indicators.py::test_bull_engulfing_detection",
  "tests/test_indicators.py::test_buy_absorption_classic",
  "tests/test_indicators.py::test_candle_strength_giant",
  "tests/test_indicators.py::test_candle_strength_normal",
  "tests/test_indicators.py::test_divergence_bearish_on_saturated_uptrend",
  "tests/test_indicators.py::test_divergence_bullish",
  "tests/test_indicators.py::test_divergence_none_on_sideways",
  "tests/test_indicators.py::test_doji_detection",
  "tests/test_indicators.py::test_hammer_detection",
  "tests/test_indicators.py::test_macd_decel_decelerating_trend",
  "tests/test_indicators.py::test_no_absorption_doji_body",
  "tests/test_indicators.py::test_no_absorption_normal_volume",
  "tests/test_indicators.py::test_no_absorption_wide_range",
  "tests/test_indicators.py::test_no_pattern_on_clean_uptrend",
  "tests/test_indicators.py::test_rsi_downtrend_low",
  "tests/test_indicators.py::test_rsi_sideways_mid",
  "tests/test_indicators.py::test_rsi_uptrend_high",
  "tests/test_indicators.py::test_sell_absorption_classic",
  "tests/test_indicators.py::test_shooting_star_detection",
  "tests/test_indicators.py::test_structure_bearish_expansion",
  "tests/test_indicators.py::test_structure_bullish_expansion",
  "tests/test_indicators.py::test_structure_ranging",
  "tests/test_indicators.py::test_structure_uses_asset_threshold",
  "tests/test_indicators.py::test_swing_filtered_by_entry_side",
  "tests/test_indicators.py::test_swing_high_found_for_sell",
  "tests/test_indicators.py::test_swing_low_found_for_buy",
  "tests/test_indicators.py::test_swing_not_found_on_monotonic",
  "tests/test_indicators.py::test_volume_weak",
  "tests/test_indicators.py::test_volume_weak_false_on_normal",
  "tests/test_indicators.py::test_vwap_simple_no_session",
  "tests/test_indicators.py::test_vwap_zero_on_empty",
  "tests/test_move_sl_tick_alignment.py::test_brain_mr_trailing_emits_aligned_sl_price",
  "tests/test_move_sl_tick_alignment.py::test_brain_round_to_tick_aligns_off_grid_price",
  "tests/test_move_sl_tick_alignment.py::test_broker_topstepx_modify_stop_aligns_to_tick_as_safety_net",
  "tests/test_move_sl_tick_alignment.py::test_orchestrator_handle_move_sl_logs_move_sl_failed_event",
  "tests/test_move_sl_tick_alignment.py::test_orchestrator_handle_move_sl_skips_state_mutation_on_broker_reject",
  "tests/test_news_filter.py::test_429_fail_open_serves_existing_cache",
  "tests/test_news_filter.py::test_429_with_no_cache_returns_zero",
  "tests/test_news_filter.py::test_block_window_boundary_inclusive_after",
  "tests/test_news_filter.py::test_block_window_boundary_inclusive_before",
  "tests/test_news_filter.py::test_blocking_event_payload_complete",
  "tests/test_news_filter.py::test_blocks_post_event_within_after_window",
  "tests/test_news_filter.py::test_blocks_pre_event_within_before_window",
  "tests/test_news_filter.py::test_cache_hit_within_same_utc_day",
  "tests/test_news_filter.py::test_cache_reload_from_disk_after_restart",
  "tests/test_news_filter.py::test_disabled_filter_never_blocks",
  "tests/test_news_filter.py::test_disabled_filter_skips_sync_entirely",
  "tests/test_news_filter.py::test_disk_cache_loaded_when_memory_empty_and_no_http_needed",
  "tests/test_news_filter.py::test_eur_event_blocks_only_6e",
  "tests/test_news_filter.py::test_irrelevant_currency_does_not_block_usd_only_asset",
  "tests/test_news_filter.py::test_low_impact_does_not_block",
  "tests/test_news_filter.py::test_medium_impact_does_not_block",
  "tests/test_news_filter.py::test_not_blocked_post_event_outside_window",
  "tests/test_news_filter.py::test_not_blocked_pre_event_outside_window",
  "tests/test_news_filter.py::test_parse_invalid_payload_raises",
  "tests/test_news_filter.py::test_parse_iso8601_with_offset_converted_to_utc",
  "tests/test_news_filter.py::test_parse_real_ff_json_shape",
  "tests/test_news_filter.py::test_retry_throttle_skips_repeat_fetch_within_hour",
  "tests/test_news_filter.py::test_unknown_symbol_fail_open",
  "tests/test_news_filter.py::test_unsynced_fail_open",
  "tests/test_news_filter.py::test_usd_event_blocks_all_usd_quoted_assets",
  "tests/test_orchestrator_freeze_guard.py::test_build_tech_returns_none_when_provider_hangs",
  "tests/test_orchestrator_freeze_guard.py::test_fetch_h4_returns_none_on_timeout",
  "tests/test_orchestrator_freeze_guard.py::test_maintenance_heartbeat_can_be_disabled",
  "tests/test_orchestrator_freeze_guard.py::test_maintenance_heartbeat_emitted_each_tick",
  "tests/test_orchestrator_freeze_guard.py::test_refresh_balance_keeps_cached_on_timeout",
  "tests/test_orchestrator_phase_a.py::test_brain_selector_bias_none_returns_none",
  "tests/test_orchestrator_phase_a.py::test_brain_selector_breakout_returns_none",
  "tests/test_orchestrator_phase_a.py::test_brain_selector_indices_ranging_skipped",
  "tests/test_orchestrator_phase_a.py::test_brain_selector_mr_excluded_blocks_mr",
  "tests/test_orchestrator_phase_a.py::test_brain_selector_ranging_extreme_rsi_picks_mr",
  "tests/test_orchestrator_phase_a.py::test_brain_selector_trending_pullback_picks_tf",
  "tests/test_orchestrator_phase_a.py::test_dry_run_does_not_mutate_active_trades",
  "tests/test_orchestrator_phase_a.py::test_dry_run_logs_proposal_when_brain_emits",
  "tests/test_orchestrator_phase_a.py::test_iteration_order_and_save_each_tick",
  "tests/test_orchestrator_phase_a.py::test_no_h4_data_path_does_not_crash_loop",
  "tests/test_orchestrator_phase_a.py::test_orchestrator_skips_when_no_brain_dispatch",
  "tests/test_orchestrator_phase_a.py::test_run_completes_max_iterations",
  "tests/test_orchestrator_phase_a.py::test_stop_event_breaks_loop_early",
  "tests/test_orchestrator_phase_b.py::test_candle_dedup_runtime_field_updated_on_move_sl",
  "tests/test_orchestrator_phase_b.py::test_entry_approved_carries_radar_tech_fields",
  "tests/test_orchestrator_phase_b.py::test_entry_approved_event_emitted_in_brain_log",
  "tests/test_orchestrator_phase_b.py::test_entry_approved_propagates_tp_cap_metadata",
  "tests/test_orchestrator_phase_b.py::test_entry_brain_none_no_state_change",
  "tests/test_orchestrator_phase_b.py::test_entry_happy_path_creates_active_trade",
  "tests/test_orchestrator_phase_b.py::test_entry_increments_counters",
  "tests/test_orchestrator_phase_b.py::test_entry_opener_failure_no_state_mutation",
  "tests/test_orchestrator_phase_b.py::test_entry_skipped_when_daily_loss_hard_stop_hit",
  "tests/test_orchestrator_phase_b.py::test_entry_skipped_when_max_open_trades_reached",
  "tests/test_orchestrator_phase_b.py::test_entry_skipped_when_risk_halted",
  "tests/test_orchestrator_phase_b.py::test_entry_skipped_when_sizing_skip",
  "tests/test_orchestrator_phase_b.py::test_exit_action_closes_trade",
  "tests/test_orchestrator_phase_b.py::test_exit_closer_failure_keeps_active_trade",
  "tests/test_orchestrator_phase_b.py::test_exit_loss_calls_register_sl_hit_with_cooldown",
  "tests/test_orchestrator_phase_b.py::test_exit_win_calls_register_tp_hit",
  "tests/test_orchestrator_phase_b.py::test_external_close_loss_recovers_pnl_and_registers_sl_hit",
  "tests/test_orchestrator_phase_b.py::test_external_close_no_match_skips_risk_hooks",
  "tests/test_orchestrator_phase_b.py::test_external_close_win_calls_register_tp_hit_and_resets_consecutive_sl",
  "tests/test_orchestrator_phase_b.py::test_hold_persists_runtime_last_exit_eval_time",
  "tests/test_orchestrator_phase_b.py::test_manage_runs_brain_when_position_still_open",
  "tests/test_orchestrator_phase_b.py::test_manage_skips_external_check_for_paper_trades",
  "tests/test_orchestrator_phase_b.py::test_manage_skips_when_position_closed_externally",
  "tests/test_orchestrator_phase_b.py::test_move_sl_breakeven_updates_runtime_sl_price",
  "tests/test_orchestrator_phase_b.py::test_move_sl_trailing_updates_runtime_sl_price",
  "tests/test_orchestrator_phase_b.py::test_news_block_skips_before_brain",
  "tests/test_orchestrator_phase_b.py::test_news_filter_disabled_passes_to_brain",
  "tests/test_orchestrator_phase_b.py::test_partial_50_failure_sets_partial_done_to_block_retries",
  "tests/test_orchestrator_phase_b.py::test_partial_50_live_rewires_bracket_ids_on_success",
  "tests/test_orchestrator_phase_b.py::test_partial_50_with_set_be_modifies_stop_and_runtime",
  "tests/test_orchestrator_phase_b.py::test_partial_50_without_set_be",
  "tests/test_orchestrator_phase_b.py::test_state_persists_across_iterations",
  "tests/test_orchestrator_phase_b.py::test_techsnapshot_to_dict_provides_opener_fields",
  "tests/test_orchestrator_phase_b.py::test_tp_resolved_event_emitted_post_sizing",
  "tests/test_orchestrator_phase_b.py::test_trading_hours_18_utc_cap_applied",
  "tests/test_orchestrator_phase_b.py::test_trading_hours_inside_passes_to_brain",
  "tests/test_orchestrator_phase_b.py::test_trading_hours_outside_skips_before_brain",
  "tests/test_orchestrator_phase_b.py::test_trading_hours_per_asset_coverage_liquidity_tuned",
  "tests/test_orchestrator_phase_b.py::test_trading_hours_per_asset_coverage_v14_derived",
  "tests/test_orchestrator_phase_b.py::test_trading_hours_unknown_symbol_fail_open",
  "tests/test_orchestrator_phase_c1.py::test_connect_with_retry_fails_after_max_attempts",
  "tests/test_orchestrator_phase_c1.py::test_connect_with_retry_succeeds_on_2nd_attempt",
  "tests/test_orchestrator_phase_c1.py::test_dry_run_broker_delegates_get_account_balance",
  "tests/test_orchestrator_phase_c1.py::test_dry_run_broker_delegates_positions_get",
  "tests/test_orchestrator_phase_c1.py::test_dry_run_broker_intercepts_close_position",
  "tests/test_orchestrator_phase_c1.py::test_dry_run_broker_intercepts_modify_stop",
  "tests/test_orchestrator_phase_c1.py::test_dry_run_broker_intercepts_place_market_bracket",
  "tests/test_orchestrator_phase_c1.py::test_dry_run_logs_events_to_brain_log",
  "tests/test_orchestrator_phase_c1.py::test_keyboard_interrupt_path_returns_130",
  "tests/test_orchestrator_phase_c1.py::test_resolve_account_balance_live_failure_falls_back",
  "tests/test_orchestrator_phase_c1.py::test_resolve_account_balance_live_uses_broker",
  "tests/test_orchestrator_phase_c1.py::test_resolve_account_balance_paper_uses_dry_run_balance",
  "tests/test_orchestrator_phase_c1.py::test_signal_handler_sets_stop_event",
  "tests/test_orchestrator_phase_c1.py::test_stop_during_iteration_finishes_tick_then_saves",
  "tests/test_orchestrator_phase_c2a.py::test_no_reconciler_doesnt_call_watchdog_or_crash",
  "tests/test_orchestrator_phase_c2a.py::test_watchdog_cadence_every_n_iterations",
  "tests/test_orchestrator_phase_c2a.py::test_watchdog_failure_doesnt_break_loop",
  "tests/test_orchestrator_phase_c2b.py::test_broker_exception_marks_degraded",
  "tests/test_orchestrator_phase_c2b.py::test_classify_broker_error_auth",
  "tests/test_orchestrator_phase_c2b.py::test_classify_broker_error_connection",
  "tests/test_orchestrator_phase_c2b.py::test_degraded_defers_exit_action",
  "tests/test_orchestrator_phase_c2b.py::test_degraded_skips_scan",
  "tests/test_orchestrator_phase_c2b.py::test_degraded_skips_watchdog",
  "tests/test_orchestrator_phase_c2b.py::test_e2e_disconnect_defer_resume",
  "tests/test_orchestrator_phase_c2b.py::test_hard_timeout_exits_with_code_4",
  "tests/test_orchestrator_phase_c2b.py::test_mid_loop_reconnect_fails_stays_degraded",
  "tests/test_orchestrator_phase_c2b.py::test_mid_loop_reconnect_succeeds",
  "tests/test_orchestrator_phase_c2b.py::test_modify_stop_failure_runtime_unchanged",
  "tests/test_orchestrator_phase_c2b.py::test_now_utc_default_is_real_clock_not_self_reference",
  "tests/test_orchestrator_phase_c2b.py::test_post_reconnect_reconcile_failure_doesnt_break_loop",
  "tests/test_orchestrator_phase_c2b.py::test_reconcile_startup_called_with_post_reconnect_kwarg",
  "tests/test_price_action.py::test_bearish_adverse_to_buy",
  "tests/test_price_action.py::test_bullish_dominates",
  "tests/test_price_action.py::test_direction_inverts_favor_adverse",
  "tests/test_price_action.py::test_doji_split_by_type",
  "tests/test_price_action.py::test_empty_tech",
  "tests/test_price_action.py::test_render_explicit_active_marked",
  "tests/test_price_action.py::test_render_explicit_inactive_shown",
  "tests/test_price_action.py::test_render_explicit_two_lines",
  "tests/test_price_action.py::test_tied_scores_neutral",
  "tests/test_reconciliation.py::test_case_i_state_open_broker_open_match",
  "tests/test_reconciliation.py::test_case_ii_no_history_drops_trade_without_risk_update",
  "tests/test_reconciliation.py::test_case_ii_no_risk_manager_drops_without_recovery",
  "tests/test_reconciliation.py::test_case_ii_recent_trades_raises_falls_back",
  "tests/test_reconciliation.py::test_case_ii_recovered_via_history_loss",
  "tests/test_reconciliation.py::test_case_ii_recovered_via_history_win",
  "tests/test_reconciliation.py::test_case_iii_state_flat_broker_open_log_only",
  "tests/test_reconciliation.py::test_case_iv_size_mismatch_log_only",
  "tests/test_reconciliation.py::test_case_v_naked_position_logged",
  "tests/test_reconciliation.py::test_case_v_position_with_stop_not_naked",
  "tests/test_reconciliation.py::test_report_counts_mixed_cases",
  "tests/test_reconciliation.py::test_watchdog_flags_naked_after_pending_drop",
  "tests/test_reconciliation.py::test_watchdog_no_positions_returns_empty",
  "tests/test_regime_bias.py::test_bias_ambiguous_ema_struct_clash",
  "tests/test_regime_bias.py::test_bias_bearish_ema_struct_path",
  "tests/test_regime_bias.py::test_bias_bullish_ema_struct_path",
  "tests/test_regime_bias.py::test_bias_neutro_on_short_history",
  "tests/test_regime_bias.py::test_bias_rsi_h4_override_overbought",
  "tests/test_regime_bias.py::test_bias_rsi_h4_override_oversold",
  "tests/test_regime_bias.py::test_regime_atr_maturity_trending",
  "tests/test_regime_bias.py::test_regime_atr_moderate_soft",
  "tests/test_regime_bias.py::test_regime_breakout",
  "tests/test_regime_bias.py::test_regime_default_ranging",
  "tests/test_regime_bias.py::test_regime_ranging_with_diagnostics",
  "tests/test_regime_bias.py::test_regime_strong_bearish",
  "tests/test_regime_bias.py::test_regime_strong_bullish",
  "tests/test_regime_bias.py::test_regime_struct_bull_trending",
  "tests/test_risk_manager.py::test_4_friday_month_only_last_triggers",
  "tests/test_risk_manager.py::test_5_friday_month_only_last_triggers",
  "tests/test_risk_manager.py::test_audit_populated_on_rejection",
  "tests/test_risk_manager.py::test_check_entry_all_clear_approved",
  "tests/test_risk_manager.py::test_cooldown_active_blocks",
  "tests/test_risk_manager.py::test_cooldown_expired_passes_and_clears",
  "tests/test_risk_manager.py::test_correlation_blocked_equity_indices",
  "tests/test_risk_manager.py::test_correlation_disabled_passes",
  "tests/test_risk_manager.py::test_correlation_fx_majors_bundle",
  "tests/test_risk_manager.py::test_daily_loss_hard_stop_triggers_auto_halt",
  "tests/test_risk_manager.py::test_daily_loss_soft_stop_blocks_no_halt",
  "tests/test_risk_manager.py::test_daily_loss_soft_stop_recovers_passes",
  "tests/test_risk_manager.py::test_daily_profit_target_blocks_no_halt",
  "tests/test_risk_manager.py::test_force_flat_at_2107_passes",
  "tests/test_risk_manager.py::test_force_flat_at_2108_blocks",
  "tests/test_risk_manager.py::test_halted_blocks",
  "tests/test_risk_manager.py::test_last_friday_14_59_passes",
  "tests/test_risk_manager.py::test_last_friday_15_00_blocks",
  "tests/test_risk_manager.py::test_max_contracts_exceeded",
  "tests/test_risk_manager.py::test_max_daily_trades_reached",
  "tests/test_risk_manager.py::test_max_open_trades_reached",
  "tests/test_risk_manager.py::test_max_risk_vs_budget_exceeded",
  "tests/test_risk_manager.py::test_register_sl_hit_consecutive_2h_cooldown",
  "tests/test_risk_manager.py::test_register_sl_hit_first_30min_cooldown",
  "tests/test_risk_manager.py::test_register_tp_hit_resets_consecutive_sl",
  "tests/test_risk_manager.py::test_sizing_skip_propagates",
  "tests/test_risk_manager.py::test_update_daily_pnl_routes_to_brain_counters",
  "tests/test_sdk_patches.py::test_apply_idempotent_and_filters_unknown_kwargs",
  "tests/test_sdk_patches.py::test_required_fields_still_strict",
  "tests/test_sizing.py::test_budget_pre_check_hard_skip",
  "tests/test_sizing.py::test_budget_pre_check_invalid_inputs",
  "tests/test_sizing.py::test_budget_pre_check_ok",
  "tests/test_sizing.py::test_compute_contracts_base",
  "tests/test_sizing.py::test_compute_contracts_invalid_sl_zero",
  "tests/test_sizing.py::test_compute_contracts_size_too_small",
  "tests/test_sizing.py::test_min_contracts_floor_6a",
  "tests/test_sizing.py::test_min_contracts_floor_6j",
  "tests/test_sizing.py::test_min_contracts_floor_does_not_touch_mnq",
  "tests/test_sizing.py::test_no_floor_entry_unchanged",
  "tests/test_sizing.py::test_non_worst_case_6e_above_min_unchanged",
  "tests/test_sizing.py::test_non_worst_case_6e_floor_min_sl",
  "tests/test_sizing.py::test_points_to_dollars_mes",
  "tests/test_sizing.py::test_points_to_dollars_unknown_symbol_raises",
  "tests/test_sizing.py::test_points_to_ticks_mes",
  "tests/test_sizing.py::test_points_to_ticks_zero_raises",
  "tests/test_sizing.py::test_size_for_entry_6j_dollar_correctness",
  "tests/test_sizing.py::test_size_for_entry_6j_executable_size",
  "tests/test_sizing.py::test_size_for_entry_balance_zero_raises",
  "tests/test_sizing.py::test_size_for_entry_clamp_inactive_when_target_fits",
  "tests/test_sizing.py::test_size_for_entry_mes_base_case",
  "tests/test_sizing.py::test_size_for_entry_reads_risk_multiplier_from_metadata",
  "tests/test_sizing.py::test_size_for_entry_risk_exceeds_budget",
  "tests/test_sizing.py::test_size_for_entry_size_too_small_skip",
  "tests/test_sizing.py::test_size_for_entry_sl_distance_zero_raises",
  "tests/test_sizing.py::test_size_for_entry_unknown_symbol_raises",
  "tests/test_sizing.py::test_worst_case_mes_tight_sl_to_3ct",
  "tests/test_sizing.py::test_worst_case_mgc_already_max_sl",
  "tests/test_sizing.py::test_worst_case_mgc_tight_sl_to_2ct",
  "tests/test_sizing.py::test_worst_case_mnq_already_max_sl",
  "tests/test_sizing.py::test_worst_case_mnq_tight_sl_to_6ct",
  "tests/test_sizing.py::test_worst_case_mym_tight_sl_to_6ct",
  "tests/test_state_store.py::test_bias_cache_multi_symbol_roundtrip",
  "tests/test_state_store.py::test_bias_entry_frozen_and_roundtrip",
  "tests/test_state_store.py::test_brain_counters_bias_calls_count_roundtrip",
  "tests/test_state_store.py::test_cooldown_state_roundtrip",
  "tests/test_state_store.py::test_daily_counters_flags_roundtrip",
  "tests/test_state_store.py::test_entry_eval_cache_roundtrip",
  "tests/test_state_store.py::test_fresh_session_state_defaults",
  "tests/test_state_store.py::test_load_corrupt_json_raises",
  "tests/test_state_store.py::test_load_state_auto_daily_reset_on_stale_date",
  "tests/test_state_store.py::test_load_state_fresh_archives_existing_file",
  "tests/test_state_store.py::test_load_state_resume_fresh_when_missing",
  "tests/test_state_store.py::test_load_state_resume_loads_existing",
  "tests/test_state_store.py::test_migrate_future_version_raises",
  "tests/test_state_store.py::test_migrate_unknown_version_raises",
  "tests/test_state_store.py::test_migrate_v1_to_v2_preserves_all_data",
  "tests/test_state_store.py::test_migrate_v2_to_v3_adds_entry_eval_cache",
  "tests/test_state_store.py::test_save_creates_prev_backup_on_existing_file",
  "tests/test_state_store.py::test_session_state_roundtrip_empty",
  "tests/test_state_store.py::test_session_state_roundtrip_with_active_trade",
  "tests/test_tech_snapshot.py::test_bullish_h4_yields_non_bearish_bias",
  "tests/test_tech_snapshot.py::test_happy_path_full_snapshot",
  "tests/test_tech_snapshot.py::test_returns_none_on_insufficient_bars",
  "tests/test_tech_snapshot.py::test_returns_none_on_missing_timeframe",
  "tests/test_tech_snapshot.py::test_snapshot_is_frozen",
  "tests/test_tech_snapshot.py::test_swing_data_when_direction_requested",
  "tests/test_tech_snapshot_cache.py::test_cache_hit_skips_h1_h4_fetch",
  "tests/test_tech_snapshot_cache.py::test_cache_miss_when_candle_time_changes",
  "tests/test_tech_snapshot_cache.py::test_lru_evicts_oldest",
  "tests/test_topstepx_v16.py::test_cancel_all_for_symbol_returns_count",
  "tests/test_topstepx_v16.py::test_cancel_order_success_and_failure",
  "tests/test_topstepx_v16.py::test_close_position_failure",
  "tests/test_topstepx_v16.py::test_close_position_success",
  "tests/test_topstepx_v16.py::test_connect_disconnect_is_connected",
  "tests/test_topstepx_v16.py::test_get_last_price",
  "tests/test_topstepx_v16.py::test_modify_stop_success",
  "tests/test_topstepx_v16.py::test_place_market_bracket_adapter_native_keys_regression",
  "tests/test_topstepx_v16.py::test_place_market_bracket_exception",
  "tests/test_topstepx_v16.py::test_place_market_bracket_failure_dict",
  "tests/test_topstepx_v16.py::test_place_market_bracket_success",
  "tests/test_topstepx_v16.py::test_positions_get_translates_dict_to_position",
  "tests/test_tp_resolver.py::test_ai_suggested_no_cap_when_below_max",
  "tests/test_tp_resolver.py::test_ai_suggested_rr_capped_at_max",
  "tests/test_tp_resolver.py::test_ai_suggested_sell_cap",
  "tests/test_tp_resolver.py::test_asset_class_smoke[6E-1.085-20]",
  "tests/test_tp_resolver.py::test_asset_class_smoke[6J-0.00665-30]",
  "tests/test_tp_resolver.py::test_asset_class_smoke[MCL-75.0-40]",
  "tests/test_tp_resolver.py::test_asset_class_smoke[MES-5800.0-20]",
  "tests/test_tp_resolver.py::test_asset_class_smoke[MGC-2400.0-30]",
  "tests/test_tp_resolver.py::test_asset_class_smoke[MNQ-21000.0-16]",
  "tests/test_tp_resolver.py::test_basic_buy_mes",
  "tests/test_tp_resolver.py::test_basic_sell_mes",
  "tests/test_tp_resolver.py::test_contracts_does_not_affect_tp_price",
  "tests/test_tp_resolver.py::test_hard_clamp_lower",
  "tests/test_tp_resolver.py::test_hard_clamp_upper",
  "tests/test_tp_resolver.py::test_min_tp_ticks_inactive_when_above",
  "tests/test_tp_resolver.py::test_min_tp_ticks_lifts_short_tp",
  "tests/test_tp_resolver.py::test_raises_on_bad_inputs[kwargs0]",
  "tests/test_tp_resolver.py::test_raises_on_bad_inputs[kwargs1]",
  "tests/test_tp_resolver.py::test_raises_on_bad_inputs[kwargs2]",
  "tests/test_tp_resolver.py::test_raises_on_bad_inputs[kwargs3]",
  "tests/test_tp_resolver.py::test_raises_on_bad_inputs[kwargs4]",
  "tests/test_tp_resolver.py::test_raises_on_bad_inputs[kwargs5]",
  "tests/test_tp_resolver.py::test_raises_on_unknown_direction",
  "tests/test_tp_resolver.py::test_raises_on_unknown_symbol",
  "tests/test_tp_resolver.py::test_rr_fallback_cap_engages_only_when_min_tp_lifts_above_cap",
  "tests/test_tp_resolver.py::test_rr_fallback_normal_path_unchanged_no_cap",
  "tests/test_trade_opener_safety_check.py::test_no_orphan_position_returns_not_found",
  "tests/test_trade_opener_safety_check.py::test_orphan_recovered_naked_when_sl_reattach_fails",
  "tests/test_trade_opener_safety_check.py::test_orphan_recovered_with_bracket_reattached",
  "tests/test_tv_data_provider.py::test_anonymous_mode_when_no_creds_no_token",
  "tests/test_tv_data_provider.py::test_client_instantiated_lazily_and_reused",
  "tests/test_tv_data_provider.py::test_default_token_cache_path_is_apex_scoped",
  "tests/test_tv_data_provider.py::test_get_bars_forwards_correct_exchange_per_symbol",
  "tests/test_tv_data_provider.py::test_get_bars_forwards_correct_interval_per_timeframe",
  "tests/test_tv_data_provider.py::test_get_bars_happy_path_returns_normalized_df",
  "tests/test_tv_data_provider.py::test_normalize_drops_symbol_column",
  "tests/test_tv_data_provider.py::test_normalize_handles_unnamed_index",
  "tests/test_tv_data_provider.py::test_normalize_sorts_ascending",
  "tests/test_tv_data_provider.py::test_real_interval_map_has_three_entries",
  "tests/test_tv_data_provider.py::test_symbol_map_covers_all_v16_universe",
  "tests/test_tv_data_provider.py::test_tv_raises_yields_empty_df",
  "tests/test_tv_data_provider.py::test_tv_returns_empty_df_yields_empty_df",
  "tests/test_tv_data_provider.py::test_tv_returns_none_yields_empty_df",
  "tests/test_tv_data_provider.py::test_tv_token_pre_written_to_cache_file",
  "tests/test_tv_data_provider.py::test_unmapped_symbol_returns_empty_df",
  "tests/test_tv_data_provider.py::test_unsupported_timeframe_returns_empty_df"
]