Skip to content

feat(mobile): full-screen simulator viewer with on-demand controls - #15551

Merged
juliusmarminge merged 2 commits into
mainfrom
t3code/fullscreen-simulator-controls
Oct 4, 2026
Merged

juliusmarminge merged 2 commits into
mainfrom
t3code/fullscreen-simulator-controls

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Oct 4, 2026 •

Copy link
Copy Markdown
Member

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:

  • It shows while the stream connects, then hides once touch input connects.
  • Tapping the dimmed area hides it again.
  • To bring it back, tap the small handle at the top centre, or shake the phone. A shake is two strong jolts within 0.6s, with a light haptic tap.
  • On Android, the back button first reveals the controls rather than leaving.

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.

Before After (controls hidden) After (controls shown) After (menu)
Before: header and padding around the stream After: stream fills the screen After: controls overlay After: device options menu

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:

Connecting with controls visible

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.
  • Driven end to end on an iOS simulator. The simulator has no accelerometer, so shake itself is not verified there; its "Shake" opens the Expo dev menu in dev builds. EAS preview builds for iOS and Android went out for on-device testing.

Claude Opus 5.5 (1M context) in Claude Code.

🤖 Generated with Claude Code


Devin Review

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>
@juliusmarminge juliusmarminge added the macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews label Oct 4, 2026
@github-actions github-actions Bot added size:L 100-499 changed lines (additions + deletions). 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Oct 4, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: 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>
@juliusmarminge
juliusmarminge merged commit d60a71e into main Oct 4, 2026
30 checks passed
@juliusmarminge
juliusmarminge deleted the t3code/fullscreen-simulator-controls branch October 4, 2026 07:48
@github-actions

github-actions Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 4.9 KiB 4.9 KiB −40 B (−0.8%) 6.8 KiB ✅
Codex Thread snapshot wire 3.7 KiB 3.7 KiB 0 B (0.0%) 4.9 KiB ✅
Codex Live turn WebSocket wire 1.2 KiB 1.1 KiB −40 B (−3.3%) 2.0 KiB ✅
Codex Live turn WebSocket decoded 20.4 KiB 20.4 KiB −41 B (−0.2%) 29.3 KiB ✅
Codex Live turn messages 2 1 −1 (−50.0%) 8 ✅
Claude Total thread wire 4.9 KiB 4.9 KiB −41 B (−0.8%) 6.8 KiB ✅
Claude Thread snapshot wire 3.7 KiB 3.7 KiB 0 B (0.0%) 4.9 KiB ✅
Claude Live turn WebSocket wire 1.2 KiB 1.2 KiB −41 B (−3.4%) 2.0 KiB ✅
Claude Live turn WebSocket decoded 20.8 KiB 20.7 KiB −41 B (−0.2%) 29.3 KiB ✅
Claude Live turn messages 2 1 −1 (−50.0%) 8 ✅

Baseline: 1302cca · PR result: 3bbec85 · Source CI: success

Scenario and decoded snapshot size

10 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.

  • Codex decoded thread snapshot: 106.1 KiB
  • Claude decoded thread snapshot: 106.4 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

ohbentos pushed a commit to ohbentos/t3code that referenced this pull request Oct 4, 2026
…ingdotgg#15551)

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Oct 4, 2026
## 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
github-actions Bot added a commit to davidvanderklay/t3code-flake that referenced this pull request Oct 4, 2026
## 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. size:L 100-499 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant