feat(swift-ios): show when a thread title is being regenerated - #10721
Conversation
The server marks a thread with titleRegeneration while it generates a new title, and web and React Native dim the row and disable the menu item from that field. The SwiftUI client did not decode it, so a tap on Regenerate title gave no feedback and could be repeated. A cached detail could also republish the pre-regeneration title because shell merges did not copy the title. Decode titleRegeneration on shell and detail threads, expose it as isRegeneratingTitle on FeatureThread, dim the row title and disable the Regenerate title actions while it is set, and copy the shell title into the cached detail when the shell is at least as new. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Bugbot is paused — on-demand spend limit reachedBugbot uses usage-based billing for this team and has hit its on-demand spend limit. A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue. |
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: unavailable · PR result: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a focused Swift iOS UI and model-state enhancement for an existing title-regeneration action, with no new integration or infrastructure impact. The additive wire decoding, stale-detail reconciliation, and state-preservation paths are covered by targeted tests. You can add or adjust custom eligibility rules. Learn more. |
…builds mergingOlderHistory and the settle/metadata reducers rebuild OrchestrationThread field by field and left titleRegeneration at its nil default, so loading an older page or settling a thread cleared the pending state and re-enabled Regenerate title while the server was still working. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Tapping "Regenerate title" in the SwiftUI client gave no feedback. The row did not change, the menu item stayed enabled so you could fire it again, and a cached thread detail could republish the old title after the server had already renamed it.
The server already marks a thread with
titleRegenerationwhile it works, and web and React Native drive their pending state from that one field. This does the same in Swift: decode the field, dim the row title and disable the Regenerate title actions while it is set, and copy the shell title into the cached detail when the shell snapshot is at least as new. No client-side request tracking, timers, or synthesized outcomes.Replaces #8623, which built the same feature with about 1,300 lines of tracker state, request IDs, a 60 second recovery timer, and error-string sniffing on top of a base that has since moved about 1,000 commits.
Tests: a wire fixture decode test for
titleRegenerationon shell and detail threads, and a client test that a newer shell title and regeneration state beat a stale cached detail. Ran the touched suites plusHomeThreadSwipeActionTestsandFeatureRootModelTestson the iPhone 17 Pro simulator, all green.Created with Claude Fable 5.1 in Claude Code.