Skip to content

Keep shell chrome fixed while apps own local zoom - #241

Merged
hamzamerzic merged 1 commit into
mobius-os:mainfrom
hamzamerzic:fix/app-owned-zoom-boundary
Jul 27, 2026
Merged

Keep shell chrome fixed while apps own local zoom#241
hamzamerzic merged 1 commit into
mobius-os:mainfrom
hamzamerzic:fix/app-owned-zoom-boundary

Conversation

@hamzamerzic

@hamzamerzic hamzamerzic commented Jul 26, 2026

Copy link
Copy Markdown
Collaborator

Product contract

Möbius is the fixed platform surface. Browser-level pinch must not scale its toolbar, drawer, chats, workspace, and active app frame together. A mini-app remains free to implement zoom inside a map, image, canvas, diagram, or document by transforming that content locally.

The owner has explicitly chosen that app-like shell behavior. This means ordinary Möbius shell text does not use browser page-pinch zoom; the boundary is deliberate rather than an accidental side effect of an app gesture.

Implementation

  • lock only the top-level shell viewport with maximum-scale=1 and user-scalable=no
  • apply the page-level gesture policy once at the shell root, rather than repeating it across the logo, tabs, drawer, and other controls
  • keep the shared mini-app frame neutral: it carries no viewport lock and does not globally remove pinch gestures
  • document the local-zoom recipe for app builders: surface-scoped touch-action: none, Pointer Events, a content transform, and visible zoom/reset controls where zoom is part of the app
  • pin both sides of the boundary with one focused contract test

The earlier draft changed several child touch-action declarations even though browser gesture arbitration intersects them with the root policy. Those redundant edits and their e2e expectation change have been removed from the final branch.

Validation

  • 70 focused shell/workspace/zoom contract tests passed
  • the complete frontend test suite passed on the rebased, simplified branch
  • the production frontend build passed on the rebased, simplified branch
  • full-diff privacy, attribution, and whitespace checks passed

Device boundary

Hosted CI covers the mobile Chromium contract. A real-iPhone pinch remains the final device-specific check because headless Chromium cannot reproduce iOS browser chrome and native gesture arbitration exactly.

@hamzamerzic hamzamerzic added area: ui User interface and interaction design bug Something isn't working labels Jul 26, 2026
@hamzamerzic

Copy link
Copy Markdown
Collaborator Author

E2E triage found and fixed the branch inconsistency: the served PR CSS correctly computed drawerTouchAction: pan-y, while the test still expected the pre-change pan-y pinch-zoom. The unrelated pin-clamp test passed on retry.

I am holding this PR from merge despite that fix. maximum-scale=1, user-scalable=no removes browser page zoom from the shell and chat, which is a meaningful low-vision/accessibility behavior change; app-owned local zoom does not replace zoom for ordinary chat text and shell controls. That conflicts with the zero-regression bar for this stabilization pass. We should merge only after an explicit product decision and an equivalent text/reading-size affordance, or retain native browser zoom.

@hamzamerzic
hamzamerzic marked this pull request as draft July 26, 2026 01:24
@hamzamerzic
hamzamerzic force-pushed the fix/app-owned-zoom-boundary branch from 1ee1526 to 2536b45 Compare July 27, 2026 02:39
@hamzamerzic
hamzamerzic marked this pull request as ready for review July 27, 2026 02:51
…ocal zoom

Co-authored-by: Möbius Agent <mobius-agent@users.noreply.github.com>
@hamzamerzic
hamzamerzic force-pushed the fix/app-owned-zoom-boundary branch from 2536b45 to ca5add3 Compare July 27, 2026 10:30
@hamzamerzic

Copy link
Copy Markdown
Collaborator Author

The earlier accessibility hold is resolved by an explicit product decision: Möbius is a fixed app-like platform surface, while mini-apps own any local zoom they need. The refreshed branch is rebased on current main, removes the redundant per-control gesture edits, and—critically—leaves the shared mini-app frame unlocked. Final merge remains gated on this refreshed head’s CI.

@hamzamerzic
hamzamerzic merged commit f906f8d into mobius-os:main Jul 27, 2026
4 checks passed
@hamzamerzic
hamzamerzic deleted the fix/app-owned-zoom-boundary branch July 27, 2026 14:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ui User interface and interaction design bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant