0da46d8635635b6be98b26a83e6cd0cc2a564b09
All sizing multipliers now applied at one location (esf_alpha_orchestrator.py line 565 region) so there are no hidden side-effects and BLUE parity is trivially preserved by leaving the new kwargs at None/False. - S6 per-bucket notional multiplier via s6_size_table kwarg - EsoF regime gate at _try_entry top: reads _current_esof_label, skips entry if esof_sizing_table maps to 0.0 (UNFAV/MILD_NEG regime) - Integer-leverage gate: use_int_leverage=True → leverage_int=1 (FIXED, pending prod/scripts/analyze_leverage_winrate.py analysis); float leverage_raw preserved in NDPosition + return dict for CH logging - notional <= 0 → return None guard (prevents 0-notional positions) - NDPosition extended: asset_bucket_id, s6_mult, esof_mult, esof_label, leverage_raw fields (BLUE leaves these at defaults) Plan ref: Task 2 — sizer stays pure (its returned notional is discarded by line 565 anyway; adding mults inside would be dead code with hidden side-effects). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Description
No description provided