Shared encoder. Produces a latent representation from a sequence input (candles + features). One backbone is shared across actor and critic to keep representation consistent.
Per-task adapters. LatentReadoutAdapters — stacks of ResidualMLPBlocks with pre-LN — specialise the shared latent for actor and critic heads independently.
Cross-symbol context. _apply_obs_context_residual aggregates state across the trading symbols, so each per-symbol decision can condition on the others.
Heads. Actor outputs a continuous per-symbol position; critic outputs quantiles of the Q distribution for CVaR-aware loss.
World model (optional). Dynamics + reward prediction for latent rollout, with KL, recon, sigma and latent_rel_err diagnostics.
Production runtime. policy_runtime.py — separate inference path with fixed core_prefixes to keep weight compatibility between training and production.