fix(web): size the Android fold model from the inner display - #13574
Conversation
The fold body used one fixed near-square shape, so a natively landscape inner panel such as the first Pixel Fold's 2208x1840 was stretched onto it. The viewer now builds the body from the unfolded frame's aspect and keeps that shape through cover frames and hinge turns. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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. |
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — The PR changes Android fold previews from fixed geometry to source-derived geometry and introduces a new fallback default, affecting sizing, framing, cover rendering, and touch mapping. Because the product default behavior changes, the default geometry warrants human review despite the localized scope and added tests. You can add or adjust custom eligibility rules. Learn more. |
A landscape cover frame passed the inner-display check and widened the closed model, and an unfolded frame seen before fold mode was ignored. Bound the inner aspect range and record it from every frame. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository: pingdotgg/t3code/.coderabbit.yaml Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (4)
Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review. 📝 WalkthroughWalkthroughThe Android fold scene now sizes its geometry from an inner-display aspect ratio. The phone viewer derives that ratio from source-canvas dimensions and updates active fold scenes when a valid ratio changes. ChangesFoldable display aspect
Priority: ➖ Normal Estimated code review effort: 3 (Moderate) | ~20 minutes Change: Bug fix Sequence Diagram(s)sequenceDiagram
participant SourceCanvas
participant PhoneViewer
participant createAndroidFoldScene
SourceCanvas->>PhoneViewer: Provide dimensions for aspect calculation
PhoneViewer->>PhoneViewer: Validate aspect and read visible hinge angle
PhoneViewer->>createAndroidFoldScene: Create or rebuild scene with aspect and angle
Merge Risk: ⚪ Minimal · up to The foldable viewer appears ready to merge after normal checks; no actionable sizing or hinge-animation issue remains. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Comment |
## What's Changed * feat(web): control Android foldables in the Device panel by @juliusmarminge in pingdotgg/t3code#13534 * fix(mcp): preview snapshots fit in the agent's tool output again by @t3dotgg in pingdotgg/t3code#13558 * fix(web): paste after clicking away from the composer lands in it again by @t3dotgg in pingdotgg/t3code#13553 * feat(desktop): keep running threads synced in the background by @t3dotgg in pingdotgg/t3code#13554 * fix(mcp): preview errors tell agents what to do instead by @t3dotgg in pingdotgg/t3code#13559 * feat(web): agents working banner links to the Agents panel by @t3dotgg in pingdotgg/t3code#13572 * fix(web): size the Android fold model from the inner display by @juliusmarminge in pingdotgg/t3code#13574 * fix(clients): a preview app no longer knocks the desktop's own server offline by @t3dotgg in pingdotgg/t3code#13577 * fix(web): keep nested task states out of parent bullets by @dominic-r in pingdotgg/t3code#11477 * feat(release): ship a Linux .deb that updates itself by @t3dotgg in pingdotgg/t3code#13575 * perf(desktop): cache compiled JavaScript between launches by @t3dotgg in pingdotgg/t3code#13501 * fix(dev): one t3.json setup action that works on every OS by @t3dotgg in pingdotgg/t3code#13589 * fix(web): new worktree threads no longer say "checkout" during setup by @t3dotgg in pingdotgg/t3code#13590 * fix(desktop): `t3 app` keeps working after a second desktop app quits by @t3dotgg in pingdotgg/t3code#13585 * fix(usage): price Claude fast-mode requests at the fast rate by @t3dotgg in pingdotgg/t3code#13599 * fix: update OpenAI logo to current brand asset by @aaditagrawal in pingdotgg/t3code#13611 * fix(mobile): render assigned project icons in chat list by @SunkenInTime in pingdotgg/t3code#12810 ## New Contributors * @aaditagrawal made their first contribution in pingdotgg/t3code#13611 **Full Changelog**: pingdotgg/t3code@v0.0.43-nightly.20260925.2237...v0.0.43-nightly.20260925.2251 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.43-nightly.20260925.2251
Follow-up to #13534. The Android fold model used one fixed near-square body. That matches the Pixel 9/10 Pro Fold (2076×2152 inner display), but a natively landscape inner panel such as the first-generation Pixel Fold (2208×1840) was stretched onto it.
The fold scene now takes the inner display's aspect and builds the body, bezels, hinge and cover around it. The viewer reads that aspect from the unfolded raw frame. It keeps the last unfolded shape while the cover frame streams, and rebuilds the body at the visible hinge angle when a different inner shape arrives. UVs and touch mapping stay in raw-frame space, so no rotation is added.
Verification
packages/client-runtime/src/devicetests: 125 passed. Targeted lint and client-runtime TypeScript checks passed.No landscape-panel emulator was available, so the 2208×1840 case is covered by tests only.
Visual evidence
Pixel 10 Pro Fold, unfolded (unchanged shape, no stretch)
UI-visible behavior only changes for landscape inner panels; the Pixel 10 Pro Fold renders as before.
Model: Claude Opus 5.5. Harness: Claude Code.
🤖 Generated with Claude Code
Summary by CodeRabbit