Supersedes the exploratory stack #111–#127 and the integration preview #116.
TL;DR - 🚀 just play it.
Reviewing on desktop? 🕹️ ?mode=dev forces the touch shell (D-pad + action UI) without a phone · ?mode=debug adds turn/perf diagnostics.
What this tracks
The mobile and responsive-shell work is going up as 11 focused PRs, each scoped to a single concern and stacked linearly. The assembled set reproduces the tree already on #116: the re-slicing changes the commit shape, not the code, so each concern reviews and merges on its own.
Slices
All 11 carry the browser-mobile label — open the filtered PR list to review them together.
Shared-render (off main):
Mobile shell (stacks on topbar):
let-go dependency (shell lane only). The client shell binds let-go's host-frame mount, which let-go #378 renames #terminal → #app (and ships visible). So #135 bumps .let-go-version from v1.11.1 to cf195a6 (the #377 + #378 squash) and binds #app; #136–139 inherit the pin. #134 and the shared-render lane stay on v1.11.1 and are unaffected. The pin is a commit ahead of the next release, not a tag — a tagged release carrying #377+#378 can replace it once one is cut.
Tail:
Integration reference
integ/mobile-stack is a single squashed commit of the whole set: the diff to review the change as a whole without merging. Its tree matches #116's tip, except it drops #116's preview-only review doc.
Design reference
A visual walkthrough of the design — camera, layout collapse, touch shell, phone landscape, resize handling — with trigger conditions and the layout shape at each size: rendered HTML.
Landing order and independence
Linear by default, but the graph has slack:
- Shared-render: build-info, bench, render, topbar, and screens/reflow are all off
main. They don't depend on the mobile shell and can go in independently.
- Mobile shell: bridge, shell, fit, landscape, and screens/nudge-guard form one dependent chain on top of topbar, in that order.
- title-moat is order-free, disjoint from everything else.
- build-info must precede shell: the shell fetches
build-info.json, and without the generator the browser-smoke gate fails on the missing file.
So the shared-render slices and title-moat can merge whenever; the mobile lane goes in order.
Why re-slice
The previous stack grew by exploration: churn that was added and later removed, one concern spread across several PRs, and two unrelated concerns sharing a commit. This set regroups the same final tree into one PR per concern: a touch shell that arrives in one piece, a screens fix separated into its shared-render half and its shell-specific half, and build-info pulled out so its ordering constraint is explicit. Same code, reviewable in coherent pieces.
Supersedes the exploratory stack #111–#127 and the integration preview #116.
TL;DR - 🚀 just play it.
Reviewing on desktop? 🕹️
?mode=devforces the touch shell (D-pad + action UI) without a phone ·?mode=debugadds turn/perf diagnostics.What this tracks
The mobile and responsive-shell work is going up as 11 focused PRs, each scoped to a single concern and stacked linearly. The assembled set reproduces the tree already on #116: the re-slicing changes the commit shape, not the code, so each concern reviews and merges on its own.
Slices
All 11 carry the
browser-mobilelabel — open the filtered PR list to review them together.Shared-render (off
main):build-info.jsongenerator shared bymake wasmand CI · basemainxsofy.perfcoreMobile shell (stacks on
topbar):?mode=) + OPTIONS panelTail:
Integration reference
integ/mobile-stackis a single squashed commit of the whole set: the diff to review the change as a whole without merging. Its tree matches #116's tip, except it drops #116's preview-only review doc.Design reference
A visual walkthrough of the design — camera, layout collapse, touch shell, phone landscape, resize handling — with trigger conditions and the layout shape at each size: rendered HTML.
Landing order and independence
Linear by default, but the graph has slack:
main. They don't depend on the mobile shell and can go in independently.build-info.json, and without the generator the browser-smoke gate fails on the missing file.So the shared-render slices and title-moat can merge whenever; the mobile lane goes in order.
Why re-slice
The previous stack grew by exploration: churn that was added and later removed, one concern spread across several PRs, and two unrelated concerns sharing a commit. This set regroups the same final tree into one PR per concern: a touch shell that arrives in one piece, a screens fix separated into its shared-render half and its shell-specific half, and build-info pulled out so its ordering constraint is explicit. Same code, reviewable in coherent pieces.