Repository navigation
Conversation
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a self-contained mobile UI enhancement that animates existing thread titles into pulsing dots during regeneration and restores them afterward. It does not change APIs, data behavior, product defaults, or infrastructure, and its animation lifecycle is isolated to the thread-list rows. You can add or adjust custom eligibility rules. Learn more. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configuration
📒 Files selected for processing (1)
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 4 remain after this review. 📝 WalkthroughWalkthroughThread list card and slim rows show an animated title-regeneration state. Their accessibility labels include the thread title and applicable queued-message and regeneration status. ChangesThread title display
Priority: ⬇️ Low Estimated code review effort: 2 (Simple) | ~10 minutes Change: Feature Merge Risk: ⚪ Minimal · up to The title-regeneration display and its accessibility status are consistently applied across card and slim rows. No issue requiring resolution before merge is established. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Description checkExplanation The description includes the required Problem, Change, Scope and approval, and Verification sections. It clearly explains the behavior, implementation, recordings, test results, and limitations. However, the Scope and approval section states that no linked issue or maintainer approval exists and does not explain why this feature qualifies for an exemption.
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Dismissing prior approval to re-evaluate 04b1a3e
Note
🤖 Claude Opus 5.5 on behalf of Oliver
Problem
Regenerating a thread title shows nothing in the mobile thread list. The old title stays until the new one replaces it, and the row's accessibility label is still the plain title.
Change
While a thread's title regenerates, the title in the thread list rolls up out of its slot and three pulsing dots roll in to replace it. When the new title arrives, the dots roll up and the new title rolls in from below. This covers both the card row and the settled (slim) row.
ThreadTitleSlotRollswaps the title and the dots under a clippingView, using Reanimated entering and exiting animations that slide by the measured height.LayoutAnimationConfig skipEnteringkeeps rows from animating when they first mount. That includes a new thread's row, which appears with dots already in place while its first title generates.withRepeatonly while regenerating and are cancelled on unmount. Every timing honors the system Reduce Motion setting.The web and desktop clients get the same treatment in a separate PR.
Scope and approval
There is no linked issue or maintainer approval. This is an alternative to #16914, which adds a static refresh icon to the mobile rows. That PR touches the same lines (the row accessibility label), so whichever lands second needs a small rebase.
Verification
Recorded on an iPhone 18 Pro simulator (iOS 27.0) with a development client built from this change, paired to an isolated dev server. Each take is a real Codex title regeneration triggered from the web client, after renaming the thread to "New thread" so the change is visible.
Card row
Before
https://gh-file-drop-api-prod-galwoqjslzlnws6s.oliver-boorstein.workers.dev/f/b51b89827c9aa111/before-ios-card-row.mp4
After
https://gh-file-drop-api-prod-galwoqjslzlnws6s.oliver-boorstein.workers.dev/f/ebdf92ce55349e05/ios-card-row.mp4
Settled (slim) row
Before
https://gh-file-drop-api-prod-galwoqjslzlnws6s.oliver-boorstein.workers.dev/f/cbdf36d5d448e90c/before-ios-slim-row.mp4
After
https://gh-file-drop-api-prod-galwoqjslzlnws6s.oliver-boorstein.workers.dev/f/6d626b028dbf95c8/ios-slim-row.mp4
New thread
The first message of a new thread, sent from the web client. The row appears with dots, then the generated title rolls in. These takes ran the same mobile files on the previous
main, because this checkout'sreact-native-screensinstall crashes on the current base (see Checks).Before: the dots held the height of the wrapped seed title, so the row was two lines tall while waiting.
https://gh-file-drop-api-prod-galwoqjslzlnws6s.oliver-boorstein.workers.dev/f/57f90e0ed2bc5819/before-ios-new-thread-tall.mp4
After: a long first message, and the dots row keeps the usual one-line height. The clip ends just before the title lands.
https://gh-file-drop-api-prod-galwoqjslzlnws6s.oliver-boorstein.workers.dev/f/d8e2385592778694/ios-new-thread-oneline.mp4
Checks
tsc --noEmitforapps/mobilereports no errors in the changed files. On this checkout it still fails insrc/native/*, because the localreact-native-screensinstall predates feat(mobile): adopt v5 navigation and native iPad columns #16733. That is unrelated to this change.vp linton the changed files reports no errors.Made with Claude Opus 5.5 in Claude Code (via T3 Code).