feat(swift-ios): add reliable text and code sizing - #7612
Conversation
|
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 new Text & Code settings workflow and propagates its effects across global text rendering, multiple code surfaces, and UIKit-hosted transcript cells. It also substantially changes settings persistence and rollback behavior, making the overall change broader than a small isolated UI adjustment. You can add or adjust custom eligibility rules. Learn more. |
e136164 to
f3634dc
Compare
f3634dc to
019c8b2
Compare
|
Ready for human review on rebuilt current-target head |
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 019c8b2. Configure here.
019c8b2 to
0eede8d
Compare

1. Observed problem and reproduction
In the native SwiftUI app, open Settings and look for a way to make prose or code easier to read. The app follows iOS Dynamic Type but has no independent in-app Text and Code controls. Earlier versions of this PR also allowed overlapping saves or a later connection republish to restore settings older than the most recently persisted slider choice.
2. Cause
FeatureSettingshad no text/code size preferences, and a root SwiftUIdynamicTypeSizevalue does not reliably cross sheet hosts or the transcript's UIKit hosting cells. Settings persistence writes full snapshots asynchronously, so rollback must distinguish the last successful snapshot from newer optimistic snapshots. The native client also persisted settings toUserDefaultswithout refreshing the cached snapshot used during connection republish.3. What changed and why this boundary
Settings gains one Text & Code section with two stepped sliders and a live preview. Text size shifts the reader's system Dynamic Type category through the window trait used by sheets and UIKit-hosted cells. Code size adds a relative shift only at monospaced leaves: Markdown code blocks, work-log output, command approvals, files, review diffs, and pull-request diffs.
The existing settings owner now serializes full-snapshot writes. Only a successful write advances the rollback point. Settings also serializes slider requests, ignores a stale failed response when a newer choice is visible, and waits for the latest slider save before the Save action completes.
NativeFeatureClientnow updates its cached snapshot after persistence so a connection republish cannot revive stale settings.The branch was rebased onto target
b67837984e5650888b1eed0e1cd7fff83625f696. Conflict resolution retained upstream'sFeatureWorkLogViewand thread-settlement invalidation behavior exactly, then applied code sizing within the new work-log component and carried settlement revision updates through this branch's optimistic save and rollback path.4. Intentionally unchanged and deferred
5. Affected surfaces
6. Validation
Current head:
0eede8d14d22aec0f77f1cf08a90d8bb8aba7346.upstream/t3code/rebuild-mobile-app-swiftatb67837984e5650888b1eed0e1cd7fff83625f696.git diff --check upstream/t3code/rebuild-mobile-app-swift...HEAD: passed.git range-diffverified that upstream's new work-log component and settlement invalidation were retained while this feature was adapted around them.FeatureRootModelTests,TextSizePreferenceTests, andNativeRetryIdentityTestscorrectly deferred with exit 75 because another active XcodeBuildMCP lease owned the native build lane. No competing lane was disturbed.testSavedSettingsSurviveAConnectionRepublish,settlementSettingsInvalidateHomePresentationOnSaveAndRollback, and all text/code-size preference tests.7. Risks, limitations, and untested paths
8. UI evidence
Historical proof for prior head
019c8b219d6fac4845f76ac06348bdc57446b7f3:Before — Settings without Text & Code controls, light
Before — Settings without Text & Code controls, dark
Before interaction video
After — Text & Code controls and live preview, light
After — Text & Code controls and live preview, dark
Interaction — change both sliders and verify persistence
Independent slider changes and relaunch persistence video
Known-gaps: exact-head light/dark screenshots and interaction video for
0eede8d14d22aec0f77f1cf08a90d8bb8aba7346could not be captured because another active XcodeBuildMCP hygiene lease owned the native build/proof lane; that lease was not broken or bypassed.9. Owning issue and relationship
Feature behavior and phone acceptance: saphid/t3code-personal#129. Failed-predecessor rollback repair: #152. Prior-head proof batch: #150.
This PR targets the live SwiftUI parent branch and remains the same review-history-preserving PR.
Checklist
Implemented by GPT-5.6 Sol in the Codex harness.