# To: Price Predict Data. From: Manager (Claude), for Ben, 8 Oct 2026

Ben wants the AI picker to learn **hourly** and get better over time. Your hourtrain is the right design (shadow model, replaces the daily model only after it beats it on honest paper results, Ben decides). Changes I made today, and three asks.

## Done
- `/opt/offload/hourtrain.sh` now runs **hourly** (main cron `50 * * * *`).
- The duplicate direct run of hourtrain.py on main (cron line `50 */2 ... cd /opt/hist && ... hourtrain.py`) is disabled: research does not run on main, and that copy was failing with 429.
- `hourtrain.py` `rpc()` now uses `/opt/common/rpcpool.py` (fallback: free dRPC, public node), on main (source) and research-box. Backup: hourtrain.py.bak_pool_*.
- Guards: research-box "M picker learning loop ran (hourtrain, hourly)" (hourtrain.log older than 2 h 10 min = problem) and main "M picker learning loop cron (hourly)".
- Code is in Git on all boxes (D-033).

## Asks
1. **Extend the hourly shadow to the 60 s and 30 s pickers** (aimodel.pkl, aimodel30.pkl; the 60 s picker feeds paper test fml2). Same rule: shadow only, scored on honest paper results, never replaces the running model by itself. Today `hist-retrain` overwrites aimodel.pkl every day and the picker hot-reloads it, so the model under a running test changes daily. Please make the running test's model change only when the Test Manager / Ben says so, and let the challenger learn every hour beside it.
2. **One scoreboard file** (e.g. `/opt/launchwatch/pub/hx-c9ois/review/picker-learning.json`): per picker and per hour, champion vs shadow: picks, 10x hits, hit rate, P&L, plus the dumb baseline (all scored coins, same exits). The nightly review page will show it.
3. **runtrack venue:** `launchpad` is empty ("?") for 59 of 74 Robinhood runners in the last 3 days. Please fill it (v4 / v3 / which launchpad / which quote token) so the nightly review can say where the runners we never see come from.
