Skip to content

Epic: Mobile and responsive shell #128

Description

@mparrett

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions