Repository navigation
feat(mobile): full-screen simulator viewer with on-demand controls - #15551
Conversation
The device viewer now gives the stream the whole screen. The header, status bar, home indicator and Android navigation bar are hidden; close, Home and the device menu live in a glass overlay that shows while the stream connects, then hides. Tap the top handle or shake the phone to bring it back. Android back reveals the controls before leaving. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — The PR changes the existing device-preview route into a full-screen experience with hidden system UI, auto-hidden controls, accelerometer-triggered toggling, and new native sensor configuration. These are default production behavior and interaction changes rather than an isolated opt-in addition. You can add or adjust custom eligibility rules. Learn more. |
Only the accelerometer is used. Compile out the pedometer on iOS and block ACTIVITY_RECOGNITION on Android. 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. |
…ingdotgg#15551) Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
## What's Changed * fix(server): registry test stubs no longer outlive the test run by @yordis in pingdotgg/t3code#15457 * test(server): the registry's fake Claude CLI is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15463 * refactor(clients): share opening a machine's No project folder by @bmdavis419 in pingdotgg/t3code#14759 * test(server): the git-ssh wrapper's fake SSH script is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15480 * test(server): the ACP registry's fake npm is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15483 * test(server): the ACP registry's fake uv is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15484 * feat(clients): step a new thread to the next machine from the keyboard by @juliusmarminge in pingdotgg/t3code#15391 * fix(web): promoting a draft thread no longer logs a React key warning by @yordis in pingdotgg/t3code#15458 * test(server): the text generation's fake Claude CLI is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15479 * fix(mobile): keep dictation running across navigation behind an edge pill by @juliusmarminge in pingdotgg/t3code#15502 * fix(client-runtime): relay disconnects no longer show as thread errors by @juliusmarminge in pingdotgg/t3code#15470 * fix(web): subagent cards name the provider account by @SunkenInTime in pingdotgg/t3code#15493 * fix(server): read paginated review replies when watching PRs by @eimexdev in pingdotgg/t3code#15427 * fix(server): offer one-click provider updates for every install by @maria-rcks in pingdotgg/t3code#15416 * fix(mobile): keep the dictation timer from shifting width by @juliusmarminge in pingdotgg/t3code#15504 * fix(relay): T3 Connect links no longer fail on colliding prepared statements by @juliusmarminge in pingdotgg/t3code#15411 * fix(server): sqlite transactions wait for the write lock instead of failing by @juliusmarminge in pingdotgg/t3code#15488 * fix(web): unpin button shows the pin-off icon on hover by @flamboh in pingdotgg/t3code#15425 * fix(mobile): make queued message removal tappable by @PixPMusic in pingdotgg/t3code#15417 * fix(web): keep workspace panels below dialogs by @maria-rcks in pingdotgg/t3code#15454 * fix(clients): Working section keeps its order while agents finish and wake by @t3dotgg in pingdotgg/t3code#15418 * feat(mobile): full-screen simulator viewer with on-demand controls by @juliusmarminge in pingdotgg/t3code#15551 * fix(client-runtime): closing a busy stream no longer drops the connection by @t3dotgg in pingdotgg/t3code#15563 * feat(web): add shift-held pull request quick actions by @maria-rcks in pingdotgg/t3code#15549 * fix: expanded tool calls show their output, empty ones don't expand by @maria-rcks in pingdotgg/t3code#15505 **Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261004.2644...v0.0.46-nightly.20261004.2648 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261004.2648
## What's Changed * fix(server): registry test stubs no longer outlive the test run by @yordis in pingdotgg/t3code#15457 * test(server): the registry's fake Claude CLI is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15463 * refactor(clients): share opening a machine's No project folder by @bmdavis419 in pingdotgg/t3code#14759 * test(server): the git-ssh wrapper's fake SSH script is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15480 * test(server): the ACP registry's fake npm is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15483 * test(server): the ACP registry's fake uv is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15484 * feat(clients): step a new thread to the next machine from the keyboard by @juliusmarminge in pingdotgg/t3code#15391 * fix(web): promoting a draft thread no longer logs a React key warning by @yordis in pingdotgg/t3code#15458 * test(server): the text generation's fake Claude CLI is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15479 * fix(mobile): keep dictation running across navigation behind an edge pill by @juliusmarminge in pingdotgg/t3code#15502 * fix(client-runtime): relay disconnects no longer show as thread errors by @juliusmarminge in pingdotgg/t3code#15470 * fix(web): subagent cards name the provider account by @SunkenInTime in pingdotgg/t3code#15493 * fix(server): read paginated review replies when watching PRs by @eimexdev in pingdotgg/t3code#15427 * fix(server): offer one-click provider updates for every install by @maria-rcks in pingdotgg/t3code#15416 * fix(mobile): keep the dictation timer from shifting width by @juliusmarminge in pingdotgg/t3code#15504 * fix(relay): T3 Connect links no longer fail on colliding prepared statements by @juliusmarminge in pingdotgg/t3code#15411 * fix(server): sqlite transactions wait for the write lock instead of failing by @juliusmarminge in pingdotgg/t3code#15488 * fix(web): unpin button shows the pin-off icon on hover by @flamboh in pingdotgg/t3code#15425 * fix(mobile): make queued message removal tappable by @PixPMusic in pingdotgg/t3code#15417 * fix(web): keep workspace panels below dialogs by @maria-rcks in pingdotgg/t3code#15454 * fix(clients): Working section keeps its order while agents finish and wake by @t3dotgg in pingdotgg/t3code#15418 * feat(mobile): full-screen simulator viewer with on-demand controls by @juliusmarminge in pingdotgg/t3code#15551 * fix(client-runtime): closing a busy stream no longer drops the connection by @t3dotgg in pingdotgg/t3code#15563 * feat(web): add shift-held pull request quick actions by @maria-rcks in pingdotgg/t3code#15549 * fix: expanded tool calls show their output, empty ones don't expand by @maria-rcks in pingdotgg/t3code#15505 **Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261004.2644...v0.0.46-nightly.20261004.2648 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261004.2648
The mobile device viewer spent a lot of the screen on chrome: a stack header with close, Home and the menu, safe-area padding, and the app's status bar. That left the simulator stream small and letterboxed.
The stream now takes the whole screen at the device's own aspect ratio. The header, status bar, home indicator and Android navigation bar are hidden. Close, the device name, Home and the
…menu (device switching, reload, back, app switcher, rotate, tool versions, shut down) live in a glass overlay:Shake detection uses
expo-sensors(new native module, so a new binary rather than an OTA update). The detector is a pure function with tests.Before / after
Captured on an iOS simulator streaming another simulator from an isolated backend.
The "after" captures are from a second iPhone 17 Pro simulator, whose own status bar and notch sit at the top of the stream. The connecting state:
Flow recording (open viewer, show/hide controls, menu, close):
https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f0067dc2a27692df/flow.mp4
Verification
vp test run src/features/devices/shakeDetector.test.ts, mobile typecheck, and lint on changed files.Claude Opus 5.5 (1M context) in Claude Code.
🤖 Generated with Claude Code