Fix resumable learning-plan creation flow#242
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughChangesLearning plan creation flow
iOS appearance observation
Validation analytics
Theme variable validation
Mobile dependency guidance
Estimated code review effort: 4 (Complex) | ~60 minutes Sequence Diagram(s)sequenceDiagram
participant User
participant QuizScreen
participant CreationNavigation
participant ActionModal
participant LearningPlansScreen
User->>QuizScreen: press back or swipe right
QuizScreen->>CreationNavigation: resolve back intent
CreationNavigation-->>QuizScreen: previous question or pause confirmation
QuizScreen->>ActionModal: display pause options
User->>ActionModal: choose continue later
ActionModal->>LearningPlansScreen: navigate to learning plans
Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0019300de9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/app/learning-plans/`[planId]/quiz/[questionIndex].tsx:
- Around line 165-177: Update the backSwipeGesture definition to constrain
recognition with a left-edge hitSlop of 28 pixels. Remove the absolute left-edge
overlay View from the root layout, and wrap the root View returned by the screen
component with GestureDetector using backSwipeGesture; keep the existing non-iOS
disabled behavior unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: e740518a-27fa-41af-9738-fd9c410ac2ee
⛔ Files ignored due to path filters (6)
docs/evidence/day-169/android-pause-confirmation.pngis excluded by!**/*.pngdocs/evidence/day-169/android-resume-flow.mp4is excluded by!**/*.mp4docs/evidence/day-169/android-unfinished-card.pngis excluded by!**/*.pngdocs/evidence/day-169/ios-pause-confirmation.pngis excluded by!**/*.pngdocs/evidence/day-169/ios-resume-flow.mp4is excluded by!**/*.mp4docs/evidence/day-169/ios-unfinished-card.pngis excluded by!**/*.png
📒 Files selected for processing (10)
convex/learningPlans.test.tsconvex/learningPlans.tsdocs/contexts/product/CONTEXT.mdsrc/app/(app)/learning-plans.tsxsrc/app/(app)/plans.tsxsrc/app/learning-plans/[planId]/quiz/[questionIndex].tsxsrc/features/learning-plans/creation-navigation.test.tssrc/features/learning-plans/creation-navigation.tssrc/features/learning-plans/creation-overview.test.tssrc/features/learning-plans/creation-overview.ts
|
@CodeRabbit review |
✅ Action performedReview finished.
|
|
Working in Darkmode? |
Gamius00
left a comment
There was a problem hiding this comment.
Please clarify if its working in darkmode
|
@Gamius00 Yes — and your question uncovered a real runtime-theme issue that is now fixed in c78cbf4. The React theme context and native-only colors could switch to dark while semantic NativeWind variables remained on the light palette. The root theme provider now applies an explicit runtime light/dark variable scope, so the same semantic colors update consistently across the shared iOS/Android tree. I verified the relevant flow hands-on in dark appearance on iOS:
Evidence: The runtime-scope fix lives in the shared theme provider used by both native platforms. |
|
@CodeRabbit review |
✅ Action performedReview finished.
|
c78cbf4 to
005337c
Compare
|
@Gamius00 Update after PR #300 merged: I rebased this branch onto #300 and removed the temporary feature-branch theme workaround mentioned in my earlier reply. Dark mode now comes entirely from #300’s shared SDK 57 theme architecture. I reverified this exact flow in dark appearance on both platforms after the rebase: the In Erstellung card, Noch nicht erstellt, exact 1 von 5 Fragen beantwortet progress, restored answer, and the shared pause sheet all render correctly. The refreshed iOS/Android screenshots and Android SDK 57 recording are embedded in the PR description. |
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
solve merge conflicts |
Summary
questionsReadyplans in the overview and render them above created plans under In ErstellungPR #300 / SDK 57
This branch is rebased on merged PR #300 and does not contain the earlier custom runtime-theme workaround. The shared SDK 57 theme architecture from #300 is the source of truth. The feature was reverified against that merged implementation in dark appearance on iOS and Android.
The branch is also rebased on PR #305's Node 24 toolchain baseline.
Validation
pnpm test— 34 files / 156 tests passedpnpm check— Biome, ESLint, and TypeScript passedpnpm format:check— passedpnpm check:unused— passedgit diff --check— passedAPP_VARIANT=development pnpm exec expo install --check— dependencies alignedMobile evidence
Recording audit
Coverage: 42.50-second video; 42 full-timeline frames sampled at 1 fps (1-second interval); 3 contact sheet(s); no audio stream.Coverage: 16.76-second video; 34 full-timeline frames sampled at 2 fps (0.5-second interval); 3 contact sheet(s); no audio stream.Sampling resolves the demonstrated transitions to 1-second granularity on iOS and 0.5-second granularity on Android; neither recording contains audio.
Generation interruption audit
The generation screen can be left or the app can close, while an already accepted Convex action may still finish server-side. If the request never starts or fails, the plan remains
questionsReady; the 5-of-5 card now routes back to generation.Durable generation state, leases, and idempotency remain intentionally separate in #243. Reminder notifications remain separate in #244.
Tracker
Closes #221
Closes #222
Summary by CodeRabbit