Add diagnostics and restore Headwind state - #44
Open
sbroenne wants to merge 4 commits into
Open
Conversation
added 4 commits
August 16, 2026 15:53
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2c3d711c-cb97-4bfa-a302-2d01fe5d2f1f
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2c3d711c-cb97-4bfa-a302-2d01fe5d2f1f
Keep the startup action fixed in place as trainer readiness changes, and document the physically reproduced build 11 regressions. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2c3d711c-cb97-4bfa-a302-2d01fe5d2f1f
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 2c3d711c-cb97-4bfa-a302-2d01fe5d2f1f
There was a problem hiding this comment.
Pull request overview
Adds an About & Diagnostics surface plus restores Wahoo Headwind pre-shifting state, while also hardening startup UI geometry so the primary action doesn’t shift position as trainer readiness changes. The PR also updates repository/user-facing documentation to match TestFlight 1.0 (11) compatibility and support guidance.
Changes:
- Add an About & Diagnostics screen (live connection state + user-initiated local-only “Copy Diagnostics” report) and supporting core diagnostics models/tests.
- Restore exact pre-shifting Headwind mode + remembered manual speed across stop/reconnect/failure via new restoration policy + lifecycle tracking.
- Stabilize startup “waiting” vs “ready” layout geometry (including Accessibility Dynamic Type), with new UI test fixtures and assertions; update README/docs/App Store copy accordingly.
Reviewed changes
Copilot reviewed 19 out of 19 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| VirtualGearsUITests/VirtualGearsUITests.swift | Adds UI coverage for primary-action geometry stability and About & Diagnostics navigation/copy behavior |
| VirtualGearsProduct/VirtualGearsHomeView.swift | Releases Headwind control on shifting failure; unifies waiting/ready layout to keep geometry stable |
| VirtualGearsProduct/VirtualGearsApp.swift | Adds screenshot fixtures for Accessibility startup states and wires coordinator into settings |
| VirtualGearsProduct/SetupView.swift | Introduces About & Diagnostics settings destination and copy-to-pasteboard diagnostics UX |
| VirtualGearsProduct/HeadwindCentralService.swift | Implements restoration lifecycle + reconciliation to restore exact pre-shifting Headwind state |
| Tests/VirtualGearsCoreTests/HeadwindControlPolicyTests.swift | Adds restoration/shifting/lifecycle policy tests for Headwind hand-back behavior |
| Tests/VirtualGearsCoreTests/DiagnosticsTests.swift | Adds unit tests for diagnostics identity/state/report formatting + redaction + clipboard policy |
| Sources/VirtualGearsCore/HeadwindControlPolicy.swift | Adds HeadwindState, restoration planning policy, shifting release policy, and lifecycle state machine |
| Sources/VirtualGearsCore/Diagnostics.swift | Adds core diagnostics models, report builder, redaction, and human-readable FTMS event descriptions |
| README.md | Updates compatibility messaging and documents About & Diagnostics + Headwind hand-back behavior |
| docs/support.md | Adds troubleshooting + bug-report guidance for Headwind hand-back and diagnostics report |
| docs/safety.md | Documents Headwind control scope and restoration guarantees as part of safety guidance |
| docs/requirements.md | Updates FulGaz-on-Windows status and documents service-contract validation + Headwind restoration details |
| docs/PRIVACY.md | Updates privacy policy with diagnostics-report behavior and guarantees |
| docs/index.md | Updates overview copy for Headwind restoration and diagnostics surface |
| docs/how-it-works.md | Documents Headwind hand-back semantics as part of shifting lifecycle explanation |
| docs/DEMO_VIDEO.md | Updates App Review demo script text to reflect current Windows FulGaz status |
| docs/APP_STORE.md | Updates App Store copy with diagnostics and Headwind restoration, plus compatibility clarifications |
| DEVELOPMENT.md | Updates test-count text and adds Headwind hand-back hardware evidence + compatibility narrative |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
447
to
+451
| ] | ||
| app.launch() | ||
| } | ||
|
|
||
| private func assertPrimaryActionKeepsPosition( |
Comment on lines
+160
to
+168
| static func redactingIdentifiers(in value: String) -> String { | ||
| let pattern = | ||
| #"\b[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}\b"# | ||
| return value.replacingOccurrences( | ||
| of: pattern, | ||
| with: "[identifier removed]", | ||
| options: .regularExpression | ||
| ) | ||
| } |
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
Compatibility status
TestFlight 1.0 (11) passes all 17 checks from a fresh macOS RideSim central and works with FulGaz on macOS. RealVelo and MyWhoosh work on Windows. FulGaz on Windows still intermittently discovers Virtual Gears but fails to connect despite the advertised FTMS + CPS, readable + notifiable measurement contract. This change adds diagnostics; it does not claim to fix that FulGaz behavior or alter Bluetooth behavior.
Coverage matrix
Validation
git diff --checkpassedXcode emitted
DebuggerLLDB.DebuggerVersionStore.StoreError: no debugger versionwhile launching UI tests, but the warning was non-fatal: all 32 tests executed and passed.Resolves #1