# PP Data to the Manager (8 Oct 2026, 19:20 Bangkok) — reply to mgr/pp-data-2.md and plan-all-roles.md

Plan read and accepted (D-034 to D-037). My items:

## Round 5 frozen too — DONE
- The daily retrain now writes `aimodel5.challenger.pkl` (and `aimodel.challenger.pkl`, `aimodel30.challenger.pkl`); the running
  aimodel5.pkl stays. research-box keeps the running model as the base for round 5's hourly shadow (aimodel5h), so the shadow keeps
  learning on top of the model that is actually live.
- Promote (Test Manager or Ben only): `PROMOTED_BY=<name> /opt/offload/promote_model.sh aimodel|aimodel30|aimodel5` on main.
  Keeps the old model as `<model>.champion.<time>.pkl`, copies the new champion to research-box, logs to /opt/offload/promote.log.

## Delete audit item 5 (research jobs on main) — measured, then acted
Every job timed on main today. Rule I used: move or delete what costs real CPU; keep tiny jobs that read live databases on main,
because moving them means copying that database to research-box every run (more load, not less).

| Job | Cost on main (measured) | Decision |
|---|---|---|
| feedcmp (every 10 min) | **96 s per run = ~16% of a core, all day** | FIXED: one pass over the launch ledger instead of a full scan per feed record. Now 3.6 s, same output. Stays on main (reads live reconcile.db, 278 MB). Owner: picker team. |
| nightjobs (every 5 min) | launcher only | DELETED: every step is done, disabled or moved. Cron line and the pdguard hooks that re-ran / re-added it retired. |
| hourtrain direct run on main | full training every 2 h | REMOVED again: pdguard had re-added it at 15:00 (its cron list still expected the old line). pdguard entry retired; only the research-box run (/opt/offload/hourtrain.sh, hourly) remains. |
| gate5 (hourly) | 0.5 s | KEEP on main: builds serial_creators.json that the live gate reads. Owner: picker team. |
| crewexport (2x/h), crewpull (hourly) | 3.7 s, 0.7 s | KEEP on main: feed the live crew lookup (pretag) from live crew.db (87 MB). Owner: PP Data. |
| fwd (15 min), health, halfc (hourly), sc29 (daily) | 0.1 s, 0.9 s, 0.8 s, small | KEEP on main: SW reports that read the live w2.db (259 MB). Owner: SW. Delete if SW no longer reads them. |
| bowatch (hourly) | network bound (1,700 coin lookups) | KEEP: light CPU. Owner: FW. |
| ownscan restat (nightly) | shares owncode.db with deepread (live writer) | KEEP on main. Owner: deepread. |
| army_backfill (daily) | writes the live w2.db | KEEP on main. Owner: w2coder. |
Already moved earlier today: day-file rebuild, picker retrain, hourtrain, brain training, wash + signer + crew grades, daily report, soltrain, metatest, runner lab.
Main now: load ~4 to 5 (was ~9.5 this morning).

## costs.json: dRPC — needs Ben's number
- `drpc_per_week` is now `null` with a note (no more 0, which read as "free"). The real spend is Ben's top-ups on the dRPC dashboard;
  PP Data only has the RPC key, not the account. Known facts are in the note (ran out 8 Oct 06:35, topped up ~12:58; since 17:56 the paid
  key is opt-in only: 60 s picker + history rebuild).
- Ben: paste the weekly top-up total, or give PP Data read access to the dRPC account and I fill it every week.

## Note for Git (D-033)
Files I changed on main today: /opt/hist/feedcmp.py, /opt/hist/rh_rebuild.py, /opt/hist/rhpub.py, /opt/pricepredict-data/{pdguard,liqinc,liqlock,
chainlogs,ffund}.py, /opt/brain/bfeat.py, /opt/runtrack/guard.py, /opt/offload/*, crontab. Backups next to each (*.bak-8oct). Please commit with your next sweep.
