Adds two new public methods to LobSimCuda + bumps TRADE_LOG_CAP to
prevent eval-phase ring-buffer wrap at cluster scale.
- read_per_backtest_trade_counts() -> Vec<u32>: cumulative trade
counters per backtest (length n_backtests). Replaces the broken
pattern in alpha_rl_train.rs where head_before_eval = aggregate
across batch was compared against all_records = single-account ring.
- read_trade_records_all() -> Vec<Vec<TradeRecord>>: all backtests'
rings in one call. Mapped-pinned staging per
feedback_no_htod_htoh_only_mapped_pinned: allocate
MappedRecordBuffer<u8> for the payload + MappedRecordBuffer<u32>
for heads, DtoD copy from device buffers into mapped-pinned
dev_ptrs, sync, read host_ptrs.
- TRADE_LOG_CAP 1024 → 4096: cluster v11 (alpha-rl-8ll7j) showed
~342 eval trades/account mean with peaks toward 1000. 4096 gives
4× headroom; memory cost b=1024 × cap × 40 B = 167 MB (was 41 MB),
comfortable on L40S 48GB / H100 80GB.
Both methods synchronize after DtoD so host reads see the data.
E.4 (alpha_rl_train.rs aggregation block replacement) lands
separately after Phase A cluster validates to avoid alpha_rl_train.rs
conflict.
See spec docs/superpowers/specs/2026-05-31-eval-summary-trade-aggregation-design.md
and plan docs/superpowers/plans/2026-05-31-eval-summary-trade-aggregation.md.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>