Starting point - #1
Merged
Merged
Conversation
Persist explicit session timing and enforce the strict unreleased v1 schema. Unify active-time, lap, graph, summary, and FIT calculations while keeping main-window sensor cards on consistent averaged fields. Expand regression coverage and document the reproducible processing contract.
Keep live cards on averaged channels, render raw timestamp-aligned summary points, and retain averaged inputs for estimated power.
Remove dead and compatibility-only APIs, make sample weighting and power calibration explicit, enforce the strict v1 program schema with stable identifiers, and align tests and documentation with the release behavior.
ProgramRunner: - Validate the monotonic/non-overlap timing guard in integer milliseconds instead of float seconds. A window that exactly filled its elapsed gap (e.g. 2.251 - 2.0 == 0.2509999999999999) could fail the strict float comparison and raise inside the live BLE callback, aborting program progression mid-workout. Summary chart: - Planned-workout chart lines now break only at the same five-second meaningful-pause boundaries free workouts already use, instead of at every exact activity run (D019). At high cadence the ergometer can leave a one-second uncovered gap without the athlete ever stopping paddling; this no longer fragments a continuous effort into disconnected line segments. Exact runs, FIT timer events, active time, distance, and laps are unaffected. - Each run's chart line now begins at its run-start boundary on both axes: the FIT timer START (time axis) and the cumulative distance preceding its first sample window (distance axis) (D020). Points are plotted at window ends, so without this anchor a run's drawn span understated the lap table and a resume odometer jump appeared as dead space between segments instead of the start of the next one. Presentation only; raw series, hover, stats, laps, and FIT are unchanged. Tests: - Add regression coverage for the exact float-rounding values that crashed ProgramRunner, a planned high-cadence uncovered-gap continuity case, and run-start anchor alignment with lap distance/time. - Update test_program_lap_is_clipped_to_active_signal for the new chart-break grouping. - Fix test_each_active_signal_gap_fragments_chart_and_laps, a pre-existing stale test asserting a sub-five-second gap fragments a free-workout lap/chart; renamed to test_brief_active_signal_gaps_do_not_fragment_chart_or_laps with corrected expectations (1 lap, one continuous line). Docs: - Add D019 and D020 to DECISIONS.md; update AGENTS, ARCHITECTURE, DATA_TRANSFORMATIONS, and FEATURES accordingly.
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Initial version of the application, including build pipelines, automated tests, and project documentation.
This PR establishes the foundation for future development.