Adds a background forward-test engine that records flat-stake "paper" bets
for directional anomalies as they fire and settles them when results arrive,
measuring the detector's live, out-of-sample edge — the antidote to backtest
overfitting. The results UI is a follow-up.
- Domain: PaperBet entity (Rate>1 / Stake>0 invariants, Open factory,
SettleAgainst — Won pays stake x rate, else Lost) + AnomalyEvidenceSide.RateFor.
- Application: OpenPaperBetsUseCase (directional + score gate, dedups by
AnomalyId, picks the post-flip favourite and its locked-in rate) and
SettlePaperBetsUseCase (Won when pick == winner else Lost; ungraded events
stay open; batched result lookup).
- Infrastructure: PaperBetEntity + config (TEXT decimals, unique AnomalyId index,
Outcome index), repository, mapping, additive AddPaperBets migration, and
PaperTradingWorker (config-gated, baseline since-marker, open+settle per cycle).
- Config: PaperTradingOptions / appsettings PaperTrading (Enabled:false default).
- 25 tests: domain settlement, both use cases, and a real-SQLite round-trip
incl. the unique-AnomalyId double-open backstop.