Improve mobile conversation responsiveness - #11387
Conversation
Failure-Class: none
Disable local Crashlytics mapping uploads and address review findings around iOS beta OAuth, plist generation, setup defaults, and profile-isolated Firebase validation.\n\nFailure-Class: none
There was a problem hiding this comment.
2 issues found across 45 files
Confidence score: 3/5
- In
app/scripts/generate_ios_dev_info_plist.sh(and theINFOPLIST_FILEchange toRunner/Info-Dev.plist), dev/raybanDat iOS builds can fail on machines that do not runsetup.shfirst, because the plist is not generated during Xcode build steps; this creates a concrete local/CI regression risk—add an Xcode build phase (or commit a fallback plist) so the file always exists at build time. - In
app/android/app/src/dev/AndroidManifest.xml, only theomi-devscheme is registered, so a dev flavor built withOMI_APP_PROFILE=mobile_betamay not match its OAuth redirect URI and auth can break for that profile—add the missing scheme mapping (or profile-specific manifest handling) to keep redirects consistent.
Prompt for AI agents (unresolved issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="app/android/app/src/dev/AndroidManifest.xml">
<violation number="1" location="app/android/app/src/dev/AndroidManifest.xml:8">
P2: This dev manifest registers only the `omi-dev` scheme, which covers the localDev profile. If the dev flavor is ever built with OMI_APP_PROFILE=mobile_beta (the profile referenced for the device build), its OAuth redirect_uri is `omi-beta://auth/callback`, but `omi-beta` is declared only in the prod manifest and won't be merged into the dev build, so the callback would never be delivered. Consider also registering the `omi-beta` scheme here to match the prod manifest.</violation>
</file>
<file name="app/scripts/generate_ios_dev_info_plist.sh">
<violation number="1" location="app/scripts/generate_ios_dev_info_plist.sh:5">
P2: The dev/raybanDat iOS builds now point INFOPLIST_FILE at `Runner/Info-Dev.plist`, but that file is only produced by the new script via `setup.sh` and is not generated by any Xcode build phase. On any machine that builds the dev flavor without first (re)running `bash setup.sh ios` — a fresh checkout, a CI job, or after `Info.plist` edits — the build will fail to find the plist or, worse, silently use a stale copy that omits newer `Info.plist` settings. Consider wiring `generate_ios_dev_info_plist.sh` into the build as a Run Script phase (generating the derived plist in a build artifact directory before the Info.plist processing step) instead of depending on a one-time setup invocation, so dev builds are self-contained and always reflect the source `Info.plist`.</violation>
</file>
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
| <action android:name="android.intent.action.VIEW" /> | ||
| <category android:name="android.intent.category.DEFAULT" /> | ||
| <category android:name="android.intent.category.BROWSABLE" /> | ||
| <data android:scheme="omi-dev" /> |
There was a problem hiding this comment.
P2: This dev manifest registers only the omi-dev scheme, which covers the localDev profile. If the dev flavor is ever built with OMI_APP_PROFILE=mobile_beta (the profile referenced for the device build), its OAuth redirect_uri is omi-beta://auth/callback, but omi-beta is declared only in the prod manifest and won't be merged into the dev build, so the callback would never be delivered. Consider also registering the omi-beta scheme here to match the prod manifest.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At app/android/app/src/dev/AndroidManifest.xml, line 8:
<comment>This dev manifest registers only the `omi-dev` scheme, which covers the localDev profile. If the dev flavor is ever built with OMI_APP_PROFILE=mobile_beta (the profile referenced for the device build), its OAuth redirect_uri is `omi-beta://auth/callback`, but `omi-beta` is declared only in the prod manifest and won't be merged into the dev build, so the callback would never be delivered. Consider also registering the `omi-beta` scheme here to match the prod manifest.</comment>
<file context>
@@ -0,0 +1,12 @@
+ <action android:name="android.intent.action.VIEW" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+ <data android:scheme="omi-dev" />
+ </intent-filter>
+ </activity>
</file context>
Addresses Cubic P2 review feedback: wrap the unawaited _loadApps() body in try/catch so a future provider error cannot surface as an unhandled async exception from initState's post-frame callback.
|
Monitor review-fix pass for commit Code fix (1 commit):
Threads resolved:
Threads left open (reviewed at stale commit
Verification:
|
Summary
mobile_betaprofile explicit while keeping production Firebase/Auth and beta OAuth routing.Root cause
Physical-device Time Profiler captured six severe main-thread hangs lasting 3.22-3.74 seconds. The dominant sampled frame was
RenderSlider.paint. A numeric goal with a target near 1,000,000,000 created one slider division per target unit, so Flutter walked roughly one billion divisions during every repaint even though tick marks were hidden. Scrolling Conversations and opening either a goal or conversation repainted that source page and hit the same pathological loop.Large and fractional goals now use a continuous slider. Small integral goals up to 100 retain exact one-unit divisions. The Goals section is also isolated behind a repaint boundary.
User impact
David verified the final Profile-prod
mobile_betabuild on a physical iPhone 15 Pro Max and confirmed the lag is fixed.Validation
flutter test --no-pub test/widgets/bottom_nav_bar_test.dart test/widgets/conversation_list_item_performance_test.dart test/widgets/conversation_markdown_widget_test.dart test/widgets/daily_summary_detail_page_test.dart test/widgets/goals_widget_performance_test.dart test/widgets/home_conversations_preview_test.dart test/providers/conversation_provider_tap_test.dart test/pages/conversations_group_widget_test.dart(14 passed)bash scripts/analyze_ratchet.sh(passed)flutter build ios --profile --flavor prod --dart-define=OMI_APP_PROFILE=mobile_beta --dart-define=OMI_API_BASE_URL=https://api.omiapi.com/com.friend-app-with-wearable.ios12,omi-beta, andhttps://api.omiapi.com/.Failure-Class: none