Repository navigation
Follow the Grove Page Scaffold - #31
Conversation
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: Organization UI 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 |
There was a problem hiding this comment.
🟡 Changes recommended
There are confirmed issues affecting filename determinism (calendar-dependent formatting) and HealthKitPermissions UX/accessibility state handling that should be corrected before approval.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Updates onboarding screens to the newer Grove page scaffold components and improves study report discoverability by generating human-readable, time-sorted report file names (study/participant/local timestamp + UUID), including preserving the prefix across upload retries.
Changes:
- Add
StudyReport.fileName(...)andStudyReport.uploadName(for:)utilities plus unit tests for deterministic report naming. - Switch report generation/storage/upload paths to use the new naming strategy (including retry behavior).
- Migrate onboarding pages (Welcome/Disclaimer/HealthKit) to Grove’s
PageView/PageHeader/PageActions, and pin Grove to a feature branch (plus updatetextualto 0.6.4 in the resolved file).
File summaries
| File | Description |
|---|---|
| PlainlyShared/Tests/PlainlySharedTests/StudyReportFileNameTests.swift | Adds unit tests covering report file naming and upload retry naming behavior. |
| PlainlyShared/Sources/PlainlyShared/Chat/StudyReport+FileName.swift | Introduces shared filename and upload-name helpers plus sanitization. |
| PlainlyShared/Package.swift | Pins Grove dependency to consent-and-documentation-grid branch. |
| Plainly/Study/Chat/StudyChatViewModel.swift | Generates report temp files using the new StudyReport.fileName(...) format. |
| Plainly/Onboarding/Welcome.swift | Migrates Welcome screen to PageView and symbol-based onboarding areas. |
| Plainly/Onboarding/HealthKitPermissions.swift | Migrates HealthKit permissions screen to page scaffold and PageActions. |
| Plainly/Onboarding/Disclaimer.swift | Migrates Disclaimer screen to PageView and symbol-based onboarding areas. |
| Plainly/Modules/PendingReportStore.swift | Retains failed uploads under the report’s own filename instead of a fresh UUID filename. |
| Plainly/Modules/FirebaseUpload.swift | Uploads using StudyReport.uploadName(for:) to keep prefix and rotate UUID per attempt. |
| Plainly.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved | Updates resolved pins (Grove branch+revision, textual 0.6.4). |
| Plainly.xcodeproj/project.pbxproj | Updates SwiftPM package requirement and adds GroveOnboarding product dependency. |
Review details
Suppressed comments (1)
Plainly/Onboarding/HealthKitPermissions.swift:79
- primaryButtonTitle treats
.recoveryAvailableas "waiting" because it usesauthorizationState.isProcessing, butprimaryViewStateswitches back to.idlein that state. This can produce an enabled primary action that still reads as "waiting".
private var primaryButtonTitle: LocalizedStringResource {
authorizationState.isProcessing ? "HEALTHKIT_PERMISSIONS_WAITING" : "HEALTHKIT_PERMISSIONS_BUTTON"
}
- Files reviewed: 11/11 changed files
- Comments generated: 3
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
affba0f to
8ba6ad1
Compare
### ♻️ Current situation & Problem The onboarding pages are built on Grove's old onboarding views, which Grove has replaced with one page scaffold. On the HealthKit page the primary button had to be disabled by hand while the permission sheet is up, with Skip staying live underneath. ### ⚙️ Release Notes - Welcome, Disclaimer and HealthKit use `PageView`, `PageHeader` and `PageActions`. - While the Health permission request waits, the primary button reads "Waiting" and is held back with `actionButtonDisabled(.primary)`; Skip stays live once recovery is offered. - Grove follows its `consent-and-documentation-grid` branch until the next release; Textual moves to 0.6.4. ### 📚 Documentation None. ### ✅ Testing The app builds against the pinned revision and the onboarding UI tests pass on iOS 26.5. ### Code of Conduct & Contributing Guidelines By creating and submitting this pull request, you agree to follow our [Code of Conduct](https://github.com/SchmiedmayerLab/.github/blob/main/CODE_OF_CONDUCT.md) and [Contributing Guidelines](https://github.com/SchmiedmayerLab/.github/blob/main/CONTRIBUTING.md): - [x] I agree to follow the [Code of Conduct](https://github.com/SchmiedmayerLab/.github/blob/main/CODE_OF_CONDUCT.md) and [Contributing Guidelines](https://github.com/SchmiedmayerLab/.github/blob/main/CONTRIBUTING.md).
♻️ Current situation & Problem
The onboarding pages are built on Grove's old onboarding views, which Grove has replaced with one page scaffold. On the HealthKit page the primary button had to be disabled by hand while the permission sheet is up, with Skip staying live underneath.
⚙️ Release Notes
PageView,PageHeaderandPageActions.actionButtonDisabled(.primary); Skip stays live once recovery is offered.consent-and-documentation-gridbranch until the next release; Textual moves to 0.6.4.📚 Documentation
None.
✅ Testing
The app builds against the pinned revision and the onboarding UI tests pass on iOS 26.5.
Code of Conduct & Contributing Guidelines
By creating and submitting this pull request, you agree to follow our Code of Conduct and Contributing Guidelines: