Skip to content

Commit 2b22414

Browse files
authored
Merge pull request #283 from RivianTrackr/rollback-rolling-resistance
Revert per-tire rolling resistance feature (v1.50.2)
2 parents 27b18ea + 612dde4 commit 2b22414

16 files changed

Lines changed: 35 additions & 189 deletions

CHANGELOG.md

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,10 @@ All notable changes to the Rivian Tire Guide plugin will be documented in this f
44

55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
66

7-
## [1.50.1] - 2026-06-17
7+
## [1.50.2] - 2026-06-17
88

9-
### Added
10-
- **"Rolling Resistance: Low → High" sort option.** The tire-guide sort dropdown can now order tires by their estimated rolling-resistance coefficient (`roamer_crr`), lowest first. Tires without a Crr estimate sort to the bottom in both client-side and server-side pagination (`(roamer_crr = 0) ASC, roamer_crr ASC`). Added to the allowed-sort lists (client URL state, AJAX, and the shortcode `sort=""` attribute); mirrors the existing "Real-World Efficiency" sort and, like it, is not exposed in the REST API sort enum.
11-
12-
## [1.50.0] - 2026-06-17
13-
14-
### Added
15-
- **Per-tire rolling resistance (Crr), derived from real-world Rivian Roamer data.** A new estimated rolling-resistance coefficient now appears on tire cards ("Rolling Resistance") and the compare page ("Rolling Resistance (Crr)", lowest = best). It is computed by *differential anchoring*: absolute Crr can't be isolated from aggregate mi/kWh (aero, auxiliary loads, and driving style dominate and aren't separable), so each tire's Crr is derived from differences in measured energy use relative to the fleet mean, holding vehicle and conditions roughly constant — `Crr = 0.0095 + (Wh/mi − fleet_mean) · η / (m·g·k)`. The fleet mean is pegged to a typical all-season light-truck Crr (0.0095); model constants (mass 3250 kg, drivetrain efficiency 0.85, clamp 0.005–0.025) live in `RTG_Database`. Shown only for tires with a trustworthy sample (≥2 vehicles and ≥1,609 km / ~1,000 mi tracked); others store `0` and display nothing. The card/compare tooltips state plainly that it's a comparative estimate, not a lab measurement, and note the `×1000 = kg/tonne` shorthand.
16-
- Stored as a derived `roamer_crr` column (DB v15 migration; existing Roamer-linked tires backfilled on upgrade) and exposed in the REST API. Recomputed fleet-wide automatically after every Roamer mutation (bulk sync, manual assign, unlink) and whenever efficiency is recalculated, since each tire's value depends on the whole fleet.
9+
### Removed
10+
- **Reverted the per-tire rolling-resistance feature (added in 1.50.0, sort option in 1.50.1).** The estimate was derived from Roamer real-world efficiency, which conflates rolling resistance with aerodynamic drag, vehicle mass, HVAC/accessory load, terrain, temperature, and driver behavior — too many variables to represent the actual rolling resistance of the tread. Rather than present an energy-derived estimate as a measured tire property, the feature is removed: the "Rolling Resistance" card/compare rows, the "Rolling Resistance: Low → High" sort, the REST `roamer_crr` field, and the `RTG_Database` calculation are all gone. Real rolling resistance is a lab-measured value (ISO 28580 / EU tyre label); a sourcing assessment showed coverage is too partial for this catalog (US-market brands and large Rivian sizes are largely absent from EU label / lab-test data) to build on now. The `roamer_crr` DB column is dropped via migration 16. Roamer real-world efficiency (mi/kWh) is unaffected.
1711

1812
## [1.49.3] - 2026-06-12
1913

frontend/js/compare.js

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,7 @@ const COL = {
6464
loadIndex: 11, maxLoad: 12, loadRange: 13, speedRating: 14,
6565
psi: 15, utqg: 16, tags: 17, link: 18, image: 19,
6666
effScore: 20, effGrade: 21, reviewLink: 22, createdAt: 23,
67-
roamerEfficiency: 24, roamerTotalKm: 25, roamerVehicleCount: 26, roamerVehicleBreakdown: 27,
68-
roamerCrr: 28
67+
roamerEfficiency: 24, roamerTotalKm: 25, roamerVehicleCount: 26, roamerVehicleBreakdown: 27
6968
};
7069

7170
// --- Efficiency badge colors ---
@@ -93,10 +92,6 @@ function findBestValues(tires) {
9392
const roamerVals = tires.map(t => parseFloat(t[COL.roamerEfficiency])).filter(n => !isNaN(n) && n > 0);
9493
if (roamerVals.length > 1) best.roamerEfficiency = Math.max(...roamerVals);
9594

96-
// Lower rolling resistance is better.
97-
const crrVals = tires.map(t => parseFloat(t[COL.roamerCrr])).filter(n => !isNaN(n) && n > 0);
98-
if (crrVals.length > 1) best.roamerCrr = Math.min(...crrVals);
99-
10095
return best;
10196
}
10297

@@ -254,10 +249,6 @@ function renderComparison(rows, indexes) {
254249
return '<span style="display:inline-block;background:rgba(59,130,246,0.15);border-radius:6px;padding:2px 8px;font-weight:700;color:#60a5fa;">' + miPerKwh + ' mi/kWh</span>' +
255250
'<br><span style="font-size:11px;color:#a19e97;">' + mi.toLocaleString() + ' mi tracked, ' + veh + ' vehicle' + (veh !== 1 ? 's' : '') + '</span>';
256251
}, 'roamerEfficiency'],
257-
['Rolling Resistance (Crr)', t => {
258-
const c = parseFloat(t[COL.roamerCrr]);
259-
return (!c || c <= 0) ? '-' : c.toFixed(4);
260-
}, 'roamerCrr'],
261252
['Speed Rating', t => t[COL.speedRating] || "-"],
262253
['UTQG', t => t[COL.utqg] || "None"],
263254
['3PMS Rated', t => {

0 commit comments

Comments
 (0)