Skip to content

feat: ride polish — cadence/torque HUD, rider-owned devices, auto-pause on trainer loss, standard NP + FIT power fields - #1

Merged
rlfleming93 merged 4 commits into
mainfrom
feat/ride-polish
Oct 19, 2026
Merged

rlfleming93 merged 4 commits into
mainfrom
feat/ride-polish

Conversation

@rlfleming93

Copy link
Copy Markdown
Owner

What

  • Ride HUD: cadence dial (0–130 rpm, 80–100 band, zone-colored) and crank torque in Nm (crankTorqueNm) on both the dashboard and the TV card. In ERG, faster pedaling now shows as lower torque.
  • Devices: device labels (Rename); kg/lb weight; profile form sets the rider's trainer/HRM through the existing registry assignment; session builder auto-fills both and shows live status + driver messages; Devices page shows a Garmin pairing hint.
  • Device status replay: the hub records each driver's last status and /ws replays it on connect (status was event-only, so late pages showed "unknown").
  • Disconnects: engine auto-pauses a rider when the trainer drops or goes stale (pauseReason: 'trainer') and auto-resumes on the next fresh sample; no 0 W dropout rows, clock frozen, no ERG guard trip. HR older than 5 s is dropped instead of repeated. Clear pause banners on both views.
  • Power math: standard NP (full 30 s windows only); summary workKj, non-zero avgCadenceRpm; FIT session gets normalizedPower, IF, TSS, totalWork, avgCadence.
  • OPENCYCLE_PORT for a side-by-side sim server.

Evidence

  • pnpm check clean; vitest 631/631.
  • Sim server (:4100, temp data dir): created rider with 115 lb → 52.2 kg + devices; builder auto-filled both, chips "Connected"; HUD screenshots game on/off at 1080p; manual pause banner; 47 s ride decoded with @garmin/fitsdk: NP 76, IF 0.507, TSS 0.3, totalWork 3438 J, timer 47 s (12 s pause excluded, no rows during pause).
  • Real KICKR CORE ride (read-only DB): avg 30.9 W, NP 53.4 W, 2.284 kJ.
  • NP fixture change 230 → 227 verified by an independent Python computation.

Note: branch also carries local main commit 4ccee4c (site move) that was never pushed.

@rlfleming93

rlfleming93 commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner Author

Review gate: PASS

  • Head: 09724a8a39c62f7e702cda0eed96e34c4ea64832
  • Reviewer: opus / claude-opus-5-5 (claude)
  • Rounds used: 2/2
ID Severity Status Location Finding Proof
— — — — None —
MINOR findings (0)

None.

@rlfleming93
rlfleming93 merged commit ffd7a58 into main Oct 19, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant