@@ -114,3 +114,30 @@ def test_unified_market_regime_requires_an_explicit_policy_to_mount_the_guard()
114114 assert payload ["position_control" ]["risk_asset_scalar" ] == 0.5
115115 with pytest .raises (ValueError , match = "explicit frozen policy" ):
116116 _build_market_regime_control_payload (_prices ([100.0 ] * 30 ), {"benchmark_drawdown_guard_enabled" : True })
117+
118+
119+ def test_unified_market_regime_preserves_fail_closed_scalars_when_guard_data_is_unavailable () -> None :
120+ config = {
121+ "crisis_enabled" : False ,
122+ "macro_enabled" : False ,
123+ "taco_enabled" : False ,
124+ "panic_reversal_enabled" : False ,
125+ "benchmark_drawdown_guard_enabled" : True ,
126+ "benchmark_guard_benchmark_symbol" : "QQQ" ,
127+ "benchmark_guard_drawdown_lookback_sessions" : 20 ,
128+ "benchmark_guard_soft_drawdown_threshold" : - 0.05 ,
129+ "benchmark_guard_hard_drawdown_threshold" : - 0.10 ,
130+ "benchmark_guard_soft_risk_asset_scalar" : 0.50 ,
131+ "benchmark_guard_hard_risk_asset_scalar" : 0.0 ,
132+ "benchmark_guard_max_price_age_days" : 3 ,
133+ "as_of" : "2026-02-12" ,
134+ }
135+
136+ payload = _build_market_regime_control_payload (pd .DataFrame (), config )
137+
138+ assert payload ["canonical_route" ] == ROUTE_BLOCKED
139+ assert payload ["position_control" ]["risk_budget_scalar" ] == 0.0
140+ assert payload ["position_control" ]["leverage_scalar" ] == 0.0
141+ assert payload ["position_control" ]["risk_asset_scalar" ] == 0.0
142+ assert payload ["position_control" ]["crisis_defense_required" ] is True
143+ assert payload ["execution_controls" ]["broker_order_allowed" ] is False
0 commit comments