Repository navigation
Conversation
…n the Activity tab The /activities/review deep link (emitted for detected naps and workouts) resolved to the Today domain, so tapping a "Did you nap?" notification pushed the review screen over Home instead of over the Activity tab where the suggestion cards live. domainForRoute now maps kRouteDetectedActivities to ShellDomain.activity; tap_router's table keeps the payload's base tab and app.dart decides, as with the other screen routes. Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
…oute doc Sourcery review on OpenStrap#668 flagged two issues: - _ShellState drove programmatic tab jumps (notification deep links) by re-keying AppShell (ValueKey(_rev)), which recreated the widget and wiped the IndexedStack — the Activity tab's scroll position and every other visited tab's state were lost when a detected-activity notification was tapped. AppShell now takes an optional ValueNotifier<ShellDomain> named selection and follows it without being recreated; _go writes the notifier instead of bumping the key. - The kRouteDetectedActivities doc still said the review 'lands on the Workouts tab'; it now says Activity (the old Workouts tab). Adds a regression test: switching tabs via the external notifier preserves a previously visited tab's state. Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
onSelect fired for user tab taps and Back navigation updated _domain but not the external selection notifier, so _selection.value could go stale. A later notification _go to the stale value then fired no change event and AppShell did not follow the deep link. Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
If AppShell is rebuilt with a different selection notifier, move the _followSelection listener from the old notifier to the new one and reconcile the shell to the new notifier's current value. Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
didUpdateWidget now reconciles a swapped selection notifier without invoking onSelect during the build phase (deferred via addPostFrameCallback, guarded by mounted), and _followSelection tolerates a removed (null) notifier instead of throwing on widget.selection!. Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
The post-frame callback scheduled in didUpdateWidget captured the domain at scheduling time; if the new notifier moved on before the callback ran, the stale domain was reported via onSelect, which writes back to the notifier in the real shell and would flip the tab back. The callback now only fires when the shell is still mounted and neither the notifier nor its value changed since scheduling. Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
Sample gains nullable spo2CandidateRaw (protocol inner[74]), mapped in sampleFromGen5Historical and logged nonzero in the gen5 history drain. Raw passthrough only — never stored as or displayed as a percentage. Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
…ation, whoop-rs deferred Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
…(both generations) Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
FileLog writes to Android external storage (file_log.dart), so a timestamped candidate/sleep line is CWE-532 sensitive-data exposure. The raw byte stays in memory only (Sample.spo2CandidateRaw). Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
…resholds Display gate requires MAE <= 2 pp, |bias| <= 1 pp, 95% LoA within +/-4 pp vs a reference oximeter (>=10 nights / 30 pairs); correlation reported separately, never as accuracy proof. Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
…yte in undecodable frames Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
…pairs Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
…e nightly gate Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
…ct PPG rationale, RAM-only nuance, encoding wording Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
…ero + null) Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
… future Gen4 nightly output like Gen5 Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
…verage checks, FileLog rationale, gen4 evidence wording, analytics in scope Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
…ad (Spo2Data refusal intact); field doc points to Spo2Data as the single publication path Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
…ed by import surface; spo2CandidateRaw feeds Spo2Data only after the gate Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
…2Data pct field/accessor/getter, UI via existing spo2 series with provenance Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
OpenStrap#675) from the spo2CandidateRaw field doc Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
…s no heartRate/spo2CandidateRaw override params Co-authored-by: BucciMobile <BucciMobile@users.noreply.github.com>
… fails without them)
…tion test timing, drop duplicate import and unrelated coderabbit change
…r minimum on the gate, FileLog claim corrected, drop unrelated coderabbit change
… comment-only block, test the wake state, drop unrelated coderabbit change
…ng, gallery case for it, taller surface for the picker search test
fix main's test run: missing translations and gallery case
…in-trend Weight trend: include scale weighings alongside the journal's weight
…vity-tab-7879a4 fix(notify): land detected-activity (nap/workout) notification taps on the Activity tab
…posal-7295e2 docs: WHOOP SpO2 evidence-review proposal with staged, self-critical plan
…5-candidate-7295e2 feat: carry gen5 v18 SpO2 candidate byte as raw diagnostic
The suite ran as one job for about 75 minutes, and a newer push to main cancels the run in progress, so runs on main were cancelled about as often as they finished. Each slice still runs its files one at a time. A final job keeps the check name `test`.
Owner
Author
|
Measurement done; the real PR is on OpenStrap/edge. |
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.
Opened inside the fork only to make GitHub run the new test workflow and measure it. Not for merging here; the real PR goes to OpenStrap/edge.