@@ -64,8 +64,13 @@ class PlatformRuntimeSettings:
6464 market_signal_consumption_audit_uri : str | None = None
6565 market_signal_cache_dir : str | None = None
6666 market_signal_required : bool = False
67+ market_signal_fallback_mode : str | None = None
68+ market_signal_max_stale_days : int | None = None
6769 feature_snapshot_path : str | None = None
6870 feature_snapshot_manifest_path : str | None = None
71+ feature_snapshot_fallback_mode : str | None = None
72+ feature_snapshot_fallback_cache_dir : str | None = None
73+ feature_snapshot_fallback_max_stale_days : int | None = None
6974 strategy_config_path : str | None = None
7075 strategy_config_source : str | None = None
7176 strategy_plugin_mounts_json : str | None = None
@@ -207,8 +212,36 @@ def load_platform_runtime_settings(
207212 "false" ,
208213 )
209214 ),
215+ market_signal_fallback_mode = _first_non_empty (
216+ os .getenv ("FIRSTRADE_MARKET_SIGNAL_FALLBACK_MODE" ),
217+ os .getenv ("MARKET_SIGNAL_FALLBACK_MODE" ),
218+ ),
219+ market_signal_max_stale_days = _optional_int (
220+ _first_non_empty (
221+ os .getenv ("FIRSTRADE_MARKET_SIGNAL_MAX_STALE_DAYS" ),
222+ os .getenv ("FIRSTRADE_MARKET_SIGNAL_FALLBACK_MAX_STALE_DAYS" ),
223+ os .getenv ("MARKET_SIGNAL_MAX_STALE_DAYS" ),
224+ os .getenv ("MARKET_SIGNAL_FALLBACK_MAX_STALE_DAYS" ),
225+ )
226+ ),
210227 feature_snapshot_path = runtime_paths .feature_snapshot_path ,
211228 feature_snapshot_manifest_path = runtime_paths .feature_snapshot_manifest_path ,
229+ feature_snapshot_fallback_mode = _first_non_empty (
230+ os .getenv ("FIRSTRADE_FEATURE_SNAPSHOT_FALLBACK_MODE" ),
231+ os .getenv ("FEATURE_SNAPSHOT_FALLBACK_MODE" ),
232+ ),
233+ feature_snapshot_fallback_cache_dir = _first_non_empty (
234+ os .getenv ("FIRSTRADE_FEATURE_SNAPSHOT_FALLBACK_CACHE_DIR" ),
235+ os .getenv ("FEATURE_SNAPSHOT_FALLBACK_CACHE_DIR" ),
236+ ),
237+ feature_snapshot_fallback_max_stale_days = _optional_int (
238+ _first_non_empty (
239+ os .getenv ("FIRSTRADE_FEATURE_SNAPSHOT_MAX_STALE_DAYS" ),
240+ os .getenv ("FIRSTRADE_FEATURE_SNAPSHOT_FALLBACK_MAX_STALE_DAYS" ),
241+ os .getenv ("FEATURE_SNAPSHOT_MAX_STALE_DAYS" ),
242+ os .getenv ("FEATURE_SNAPSHOT_FALLBACK_MAX_STALE_DAYS" ),
243+ )
244+ ),
212245 strategy_config_path = runtime_paths .strategy_config_path ,
213246 strategy_config_source = runtime_paths .strategy_config_source ,
214247 strategy_plugin_mounts_json = (
@@ -400,6 +433,13 @@ def _first_non_empty(*raw_values: str | None) -> str | None:
400433 return None
401434
402435
436+ def _optional_int (raw_value : str | None ) -> int | None :
437+ value = str (raw_value or "" ).strip ()
438+ if not value :
439+ return None
440+ return int (value )
441+
442+
403443def _split_env_list (raw_value : str | None ) -> tuple [str , ...]:
404444 if raw_value is None :
405445 return ()
0 commit comments