Repository navigation
feat(companion): ride timeline with zones, and the profile above the ledger - #2205
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A route and a trip day lead with the profile under the title and the device state, so it is no longer below the ledger. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
RideTimeline builds elevation, speed, heart rate, power and cadence from the tracklog. It downsamples each channel to drawing columns, and it takes zones, time in zones and the time-weighted mean from every sample. RideZoneLimits exposes its edge percents for zone bands. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The effort set holds a climb with heart rate, power, cadence and zone limits, a ride with a strap but no limits, and a ride without sensors. Fixture fixes can carry a time and sensor values, and the ride summary takes its sensor totals from them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The ride page shows the map, the title, a timeline of stacked channel strips with one cursor, the time in zones and the ledger. A sideways drag or a tap on a strip moves the cursor and a dot on the map. A tap on a strip label opens that channel in a sheet: elevation coloured by grade, zone bands behind heart rate and power, min, avg and max. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The time-in-zones and grade legends sit side by side and start a new row only where the next item does not fit, instead of one item per line. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The detail chart draws the line in zone colours segment by segment, as the timeline strips do, and no longer shades zone bands behind it. The zone edge percents return to private in RideZoneLimits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A ride that the device rewrote at a new revision can keep every sample and change only its summary, such as its zone limits. The page now keys on the ride's revision as well, so a sync that replaces the ride shows the new zones at once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ords A receipt that gets no answer is sent once more at the end of the sync run, after a three-second pause, and only a second failure shows the banner. Each unanswered receipt is logged with its error, which the app discarded before. The banner says what happened in plain words, and its action reads Try again instead of Resume when there is no download to continue. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The legend takes its full width, so placement uses the rows it measured, and tighter spacing fits all five zones on one row at the default text size. A wrap spreads the items evenly across the rows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The ride page keeps the approved order: map, title and date, timeline, zones, ledger. The Replay ride button follows the ledger. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The ride page shows the timeline before the ledger, and the imported route shows its profile above the ledger. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The ride page gets a ride timeline, and the elevation profile moves up on the route and trip-day pages.
Ride.zoneLimits, feat(firmware): record each ride's effort limits, v6 ride footer #2199). If a ride has no limits, one plain line says which limit was not set.RideTimelineinOBCDomainbuilds the channels, downsamples them for drawing, and computes zones, time in zones and min/avg/max from every sample.specs/Ride_Archive_Contract.mddescribes the resend.effort.jsonhas a ride with all sensors and limits, a ride with sensors but no limits, and a ride with no sensors.Public docs
Changed.
ride-detail.webpandroute-imported.webpare captured again for the new order, in their owndocs:commit.Checks
swift testinPackages/OBCKit: pass. This includes new tests for the timeline model, zone parity, time in zones and the receipt resend.capture-website-screenshots.sh --check: pass.Requirements: none
🤖 Generated with Claude Code