fix(mobile): preserve chat rows when toggling commands - #10492
Conversation
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a narrowly scoped mobile UI bug fix that stabilizes the LegendList animation configuration to preserve existing chat rows while retaining the intended disclosure animation. It introduces no new capability, schema change, product-default change, or static-analysis suppression. You can add or adjust custom eligibility rules. Learn more. |
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: 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. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (1)
Included review availability: 4 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 10 reviews per hour. 📝 WalkthroughWalkthroughThe thread feed now applies a zero-duration ChangesThread feed transitions
Estimated code review effort: 1 (Trivial) | ~5 minutes Merge Risk: ⚪ Minimal · up to Thread-feed updates now keep a stable immediate layout transition outside disclosure changes, preventing mobile conversation blanking and remounting while preserving disclosure animations. No current merge-blocking risk is identified. Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
## What's Changed * fix(mobile): keep pending messages in the chat timeline by @juliusmarminge in pingdotgg/t3code#10449 * fix(mobile): show connection status in the floating pill instead of a second one by @juliusmarminge in pingdotgg/t3code#10440 * fix: use Pierre icons consistently for attachments by @juliusmarminge in pingdotgg/t3code#10475 * feat(mobile): open the thread screen as soon as a new task is submitted by @juliusmarminge in pingdotgg/t3code#10435 * fix(devcontainer): make repository setup work by @saphid in pingdotgg/t3code#7875 * fix(projects): prevent invalid script IDs from crashing threads by @saphid in pingdotgg/t3code#10019 * fix(mobile): hide changed-files navigator and restore refresh in raw diff fallback by @lnieuwenhuis in pingdotgg/t3code#9828 * fix(ios): scroll short source files from blank space by @juliusmarminge in pingdotgg/t3code#10178 * feat(mobile): start a new thread on an existing branch by @StiensWout in pingdotgg/t3code#10359 * fix(mobile): improve font-size slider performance and prevent maximum update depth errors by @bbernag in pingdotgg/t3code#7138 * fix(web): keep composer toolbar controls anchored during transitions by @juliusmarminge in pingdotgg/t3code#10478 * fix(web): resize the floating preview from any edge by @juliusmarminge in pingdotgg/t3code#10467 * fix(mobile): prevent chat from disappearing when scrolling by @juliusmarminge in pingdotgg/t3code#10479 * fix(mobile): smooth composer status pill resizing by @juliusmarminge in pingdotgg/t3code#10484 * fix(mobile): release initial scroll target after dragging by @juliusmarminge in pingdotgg/t3code#10483 * fix(mobile): animate thread lifecycle transitions consistently by @juliusmarminge in pingdotgg/t3code#10487 * fix(mobile): restore assistant message bottom padding by @juliusmarminge in pingdotgg/t3code#10491 * fix(mobile): preserve chat rows when toggling commands by @juliusmarminge in pingdotgg/t3code#10492 ## New Contributors * @bbernag made their first contribution in pingdotgg/t3code#7138 **Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260907.1332...v0.0.40-nightly.20260907.1346 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.40-nightly.20260907.1346
* origin/main: (675 commits) fix(web): tolerate servers that predate git identity in project import (pingdotgg#10547) chore(mobile): bump app version to 1.1.0 fix(mobile): wait for native thread scroll before reveal (pingdotgg#10486) fix(mobile): match Working status color to desktop fix(web): remove inserted citations on cancel (pingdotgg#10518) feat(web): group onboarding project import by repository (pingdotgg#10493) fix(mobile): preserve chat rows when toggling commands (pingdotgg#10492) fix(mobile): restore assistant message bottom padding (pingdotgg#10491) fix(mobile): animate thread lifecycle transitions consistently (pingdotgg#10487) fix(mobile): release initial scroll target after dragging (pingdotgg#10483) fix(mobile): smooth composer status pill resizing (pingdotgg#10484) fix(mobile): prevent chat from disappearing when scrolling (pingdotgg#10479) fix(web): resize the floating preview from any edge (pingdotgg#10467) fix(web): keep composer toolbar controls anchored during transitions (pingdotgg#10478) fix(mobile): improve font-size slider performance and prevent maximum update depth errors (pingdotgg#7138) feat(mobile): start a new thread on an existing branch (pingdotgg#10359) fix(ios): scroll short source files from blank space (pingdotgg#10178) fix(mobile): hide changed-files navigator and restore refresh in raw diff fallback (pingdotgg#9828) fix(projects): prevent invalid script IDs from crashing threads (pingdotgg#10019) fix(devcontainer): make repository setup work (pingdotgg#7875) ... # Conflicts: # apps/server/src/provider/builtInDrivers.ts # docs/README.md # docs/user/install.md # packages/contracts/src/settings.test.ts # packages/contracts/src/settings.ts
Expanding a command can briefly blank the entire mobile conversation and remount unrelated messages. This regressed in #10449, merged September 6 at 10:24 p.m. Pacific, when
itemLayoutAnimationstarted switching between a transition andundefined. LegendList uses that presence to select its position and size component types, so a disclosure can replace the containers around the feed and replay row entrance animations.Keep a zero-duration transition installed outside disclosure changes. The component types stay stable, ordinary updates remain immediate, and disclosures retain their existing transition.
Verified on an iOS 26.5 simulator with disposable showcase data. Expanding the same command remounted all five rendered rows on the base, including the unchanged user message and assistant answer; with this fix it remounted none. Temporary mount instrumentation was removed before the evidence captures. Repeated group and individual command expansion/collapse passed. Android shares this component but was not exercised separately.
Mobile typecheck, targeted lint and formatting passed. Lint reports existing warnings. All 29 tests in
thread-feed-live-follow.test.tsandpending-thread-feed.test.tspassed.Recording, before on the left and after on the right:
Before/after command expansion recording
Model: GPT-6. Harness: Codex.
Note
Preserve
ThreadFeedrow layout animation when toggling commandsTHREAD_FEED_IMMEDIATE_TRANSITION, a zero-durationLinearTransition, to keep the LegendList item layout animation container mounted during ordinary feed updates.itemLayoutAnimationnow uses the timed disclosure transition while disclosure is settling, and the zero-duration transition otherwise. Previously the prop becameundefinedoutside disclosure settling, causing LegendList to swap component types, remount the feed, and replay row entrances.undefinedoutside disclosure settling will see a zero-duration transition object instead.Macroscope summarized a34b15c.
Summary by CodeRabbit