Skip to content

feat(mobile): thread titles roll to dots while regenerating - #16947

Open
flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3/title-slot-roll-mobile
Open

flamboh wants to merge 2 commits into
pingdotgg:mainfrom
flamboh:t3/title-slot-roll-mobile

Conversation

@flamboh

@flamboh flamboh commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

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.

  • ThreadTitleSlotRoll swaps the title and the dots under a clipping View, using Reanimated entering and exiting animations that slide by the measured height. LayoutAnimationConfig skipEntering keeps 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.
  • The dots slot is one title line tall. A new thread's title starts as the seed (the whole first message), which often wraps to two lines, so holding the title's height made new rows extra tall until the short generated title landed. An existing two-line card title shrinks to one line while the dots show.
  • The dots pulse with withRepeat only while regenerating and are cancelled on unmount. Every timing honors the system Reduce Motion setting.
  • The row is a single accessible element whose nested text is never read, so its accessibility label becomes "<title>, regenerating title" while regenerating.

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's react-native-screens install 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 --noEmit for apps/mobile reports no errors in the changed files. On this checkout it still fails in src/native/*, because the local react-native-screens install predates feat(mobile): adopt v5 navigation and native iPad columns #16733. That is unrelated to this change.
  • vp lint on the changed files reports no errors.
  • Not checked: Android (no Android SDK on the test machine) and VoiceOver output.

Made with Claude Opus 5.5 in Claude Code (via T3 Code).

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Oct 7, 2026
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Oct 7, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 04b1a3e

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.

@coderabbitai

coderabbitai Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Path: .coderabbit.config.ts
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 94080a50-dd8e-41b3-89ff-980f3b502ec8
📥 Commits

Reviewing files that changed from the base of the PR and between 0817b95 and 04b1a3e.

📒 Files selected for processing (1)
  • apps/mobile/src/features/threads/thread-title-slot-roll.tsx

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 4 remain after this review.


📝 Walkthrough

Walkthrough

Thread 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.

Changes

Thread title display

Layer / File(s) Summary
Animated title slot
apps/mobile/src/features/threads/thread-title-slot-roll.tsx
Adds reduced-motion-aware vertical transitions and three staggered dots that pulse while title regeneration is active.
Thread row integration
apps/mobile/src/features/threads/thread-list-v2-items.tsx
Uses the animated slot for card and slim-row titles with selected-aware colors. A shared accessibility label includes the thread title, queued-message status when present, and active regeneration status.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Feature

Merge Risk: ⚪ Minimal · up to 04b1a

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)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description includes the required Problem, Change, Scope and approval, and Verification sections. It clearly explains the behavior, implementation, recordings, test results, and limitations. Howev… Link a triaged issue or maintainer approval that covers the feature direction and scope. If an exemption applies, explain why this focused change qualifies without prior approval.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Approvability ✅ Passed Pass. The PR is a focused mobile thread-title display bug fix in two feature files. It does not change product defaults, static-analysis directives, dependencies, contracts, authentication, external s…
Title check ✅ Passed The title clearly and concisely describes the main mobile UI change: thread titles roll to dots during regeneration.
Full details: Description check

Explanation

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.

  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@macroscopeapp
macroscopeapp Bot dismissed their stale review October 8, 2026 01:32

Dismissing prior approval to re-evaluate 04b1a3e

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant