# Sim-to-real · rack motor twins

The rack's eight motor twins against the real motors on one page: twin error against the measurement floor per motor,
the model ladders (which modelling rung buys how much), the twin's error run by run, the improvement rounds, and
every model-card term. Click a motor anywhere and every panel shows only it.

- **App:** BAM rig
- **Replaces:** the rack motor models report's tables and its per-motor JSON
  (bam_ws `reports/media/rack-motor-models-2026-10-23/report.html`, built by `bam_rack_twin/docs/`)
  and the model cards' markdown tables (`model_cards/*.md`), for browsing; the report keeps the figures and video.
- **Shows:** five datasets linked by `motor` to one `motors` dataset; KPI cards with the delta to a property of the
  same row (`compare.against: floor`); two charts kept apart because they use different rulers; a run-by-run line
  chart; rounds filtered by a view `filters:` expression; a model-card table grouped by motor with the full toolbar;
  per-dataset rails (part and board; model family; run kind and speed; term status).
- **Data:** written by `source/build.py`, read-only from `/archive/datasets/bam_rig/rack_2026-10-23/analysis/`
  (`budget_can*.json`, `model_cards/*.json`), `rack_2026-10-24/analysis/` (`acceptance.json`, `floors.json`,
  `friction_study.json`) and `rack_2026-10-25/analysis/twin_round{4..7,9,10}.json`. **Real** hardware runs. Only CAN
  14's floor is a measured repeat floor; the other seven are a sine cycle-to-cycle proxy, drawn as a stand-in. Every
  budget run is held out, so there is no train/test split to show.
