SwiftUI thread rows: regenerate a thread title - #8623
Conversation
Squash-merge of the accepted title-regeneration window (22b22f1..b1ad17bbd) onto the current maintainer branch head.
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This PR adds a user-facing title-regeneration workflow across the SwiftUI iOS client, including new concurrency/state tracking, server-backed request identity, refresh reconciliation, and a public client protocol change. The production scope is substantially more than a small UI adjustment, so the runtime and API interactions warrant human review. You can add or adjust custom eligibility rules. Learn more. |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 030cc83. Configure here.

What users observed
In the SwiftUI iOS client, thread titles never regenerate after the first (often mediocre) auto-title. There is no way to ask for a better title from the home screen, and regeneration that does happen can collide with itself — duplicate requests, stale overwrites of a freshly regenerated title, or recovery attempts that never settle.
What changed
Affected: SwiftUI iOS client only — server, contracts, web/desktop, and React Native are unchanged.
Base:
t3code/rebuild-mobile-app-swiftatb67837984e5650888b1eed0e1cd7fff83625f696.UI changes
Before (thread row menu without regeneration, light)
After (regenerate action, in-progress state, duplicate suppressed)
Interaction video (duplicate failure path)
Play the duplicate-failure video
Dark-mode captures and the full set are embedded in the tracking issue.
Intentionally unchanged
Verification
T3CodeTests/FeatureRootModelTests,T3CodeTests/ThreadTitleRegenerationMenuTests,T3CodeTests/HomeThreadSwipeActionTests,T3CodeTests/WireFixtureContractTests— 205 test cases passed, 0 failed across the four suites (xcodebuild exit 0).xcodebuild test, exit 0).git diff --checkclean.Known gaps / honest disclosures
Affected: SwiftUI iOS client only.
Note
Medium Risk
Medium risk from a breaking
FeatureClientsignature change, non-trivial concurrency between regeneration, rename, shell vs detail metadata, and optimistic UI state that must stay aligned with server snapshots.Overview
Adds end-to-end thread title regeneration on the Swift iOS client: users can trigger it from home and thread detail menus, see in-progress state on rows, and get VoiceOver announcements for start, success, and failure.
The
FeatureClientAPI now takes a client-generatedrequestIDand returnsFeatureTitleRegenerationDispatchReceiptinstead of firing-and-forgetting.NativeFeatureClientdispatches with thatcommandID, refreshes (including archived threads when needed), and classifies the outcome from snapshot sequence, servertitleRegenerationmetadata, and whether the title actually changed. Shell snapshots are treated as the authority for title and regeneration fields so stale detail loads cannot revert a new title.FeatureRootModeladdsFeatureTitleRegenerationTrackerto block duplicate requests, reconcile against shell updates (including another client’s request ID), survive ambiguous timeouts, and expire with a bounded recovery timer.renameThreadwaits for an in-flight regeneration dispatch so server-side cancellation ordering stays correct.Wire models gain
ThreadTitleRegenerationand thread fieldsisRegeneratingTitle/titleRegenerationRequestID. Home and detail UIs useThreadTitleRegenerationMenuStateto hide, enable, or disable regeneration actions and show a smallProgressViewon thread rows.Reviewed by Cursor Bugbot for commit ba8a1d2. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Add title regeneration tracking and UI progress to SwiftUI thread rows
FeatureTitleRegenerationTrackerin FeatureRootModel.swift to track per-thread in-flight regenerations via request IDs, resolve them against server snapshots or a 60-second timeout, and emit VoiceOver announcements.regenerateThreadTitleonFeatureClientandNativeFeatureClientto accept arequestIDand return aFeatureTitleRegenerationDispatchReceiptindicating regenerating, completed, failed, or refresh-unavailable status.deferringToShellMetadatain FeatureRootModel.swift andemitCachedSnapshotin NativeFeatureClient.swift.FeatureClient.regenerateThreadTitlenow requires arequestIDparameter and returnsFeatureTitleRegenerationDispatchReceiptinstead ofVoid; conformers outside the tree must update their implementation.Macroscope summarized ba8a1d2.