6.5 KiB
created, status, requirements, system_design, legacy_specs
| created | status | requirements | system_design | legacy_specs | |||
|---|---|---|---|---|---|---|---|
| 2026-08-24 | implemented |
|
|
|
Implementation Plan: Mobile Task Topbar Cleanup
Overview
Remove Saved layouts and the Git ellipsis from the phone task top bar. Keep the hamburger task drawer as the only task-level action entry, keep Git capability in Changes, delete the resulting mobile-only Git/layout branches, and retarget existing mobile tests to the surviving paths.
Scope
In scope
- Remove phone rendering of
LayoutPresetSelectorand Git action controls. - Make the retained phone task-drawer trigger touch-sized.
- Remove mobile-only layout-selector branches and orphaned phone Git modules.
- Preserve branch and diff summary data in the phone title.
- Retarget Git and remote-contribution mobile E2E flows through Changes.
- Preserve task movement through the existing task drawer.
Out of scope
- New task-level overflow or duplicated task actions.
- Changes-panel redesign or changed Git eligibility/operation semantics.
- Desktop/tablet top-bar or Dockview layout changes.
- Backend, API, store, persistence, permission, or localization changes.
- Reorganizing unrelated phone top-bar controls.
Technical approach
Phone top bar
Update apps/web/components/task/mobile/session-mobile-top-bar.tsx to stop
mounting LayoutPresetSelector, GitActionsDropdown, its dialogs, and
remote-contribution drawer. Remove their props, state, hooks, and callbacks
from the top-bar action composition. Keep useMobileGitMetrics for the visible
branch/diff summary, relocating its small file-stat aggregation from the deleted
Git-controls module. Give mobile-session-menu an explicit 44-by-44 hitbox.
Desktop layout selector
Update apps/web/components/task/layout-preset-selector.tsx to remove the now
unused mobile prop and conditional branches. Keep desktop presets, custom
layout application, reset, save, deletion, coarse-pointer confirmation, and
settings behavior unchanged. Remove only the component test that asserted the
retired phone top-bar variant.
Orphan cleanup
Delete mobile-only Git action modules and tests once rg confirms no remaining
production consumers:
apps/web/components/task/mobile/mobile-git-actions-dropdown.tsxapps/web/components/task/mobile/mobile-git-push-submenu.tsxapps/web/components/task/mobile/session-mobile-top-bar-git-controls.tsxapps/web/components/task/mobile/session-mobile-top-bar-git-controls.test.tsxapps/web/components/task/mobile/session-mobile-top-bar-dialog-parts.tsxapps/web/components/task/mobile/mobile-contribution-resolution-drawer.tsxapps/web/components/task/mobile/mobile-contribution-resolution-drawer.test.tsx
Update apps/web/components/vcs/vcs-dialog-fields.test.tsx to cover only the
surviving shared VCS fields. Do not remove shared Changes/VCS action policy,
dialogs, or remote-contribution components.
Tests
apps/web/components/task/mobile/session-mobile-top-bar-repository.test.tsxdrops the obsolete remote-contribution mock while retaining repository-title coverage for the simplified header.apps/web/components/task/layout-preset-selector.test.tsxretains desktop and coarse-pointer saved-layout behavior while dropping the retired mobile-mode case.- Existing shared Changes and VCS component tests remain green after orphan cleanup. Phone Playwright coverage asserts the retired controls are absent and the task-drawer control remains.
E2E tests
- Top-bar composition (
AC-UI-MOBILE-TASK-CHROME-001.1,.2,.5): extendapps/web/e2e/tests/task/mobile-task-topbar-long-title.spec.tsto assert no layout/Git triggers, a 44-by-44 task-drawer trigger, retained title truncation, action containment, and no document horizontal overflow. - Task action (
AC-UI-MOBILE-TASK-CHROME-001.3): retain and annotate the active-task move scenario inapps/web/e2e/tests/task/mobile-sidebar-task-actions.spec.ts. - Git operation (
AC-UI-MOBILE-TASK-CHROME-001.4): retargetapps/web/e2e/tests/git/mobile-local-base-operations.spec.tsfrom the removed top-bar menu to the Changes Pull menu and complete Rebase. - Remote safety (
AC-UI-MOBILE-TASK-CHROME-001.4): retargetapps/web/e2e/tests/git/mobile-pr-checkout-drift.spec.tsto the Changes warning menu and shared confirmation, preserving version, safety, scrolling, containment, and action-outcome assertions. - Provider terminology (
AC-UI-MOBILE-TASK-CHROME-001.4): retarget the GitLab MR-creation scenario inapps/web/e2e/tests/gitlab/mobile-gitlab-parity.spec.tsthrough Changes and preserve auto-link and viewport assertions.
Work orders
Verification results
- Four focused component files passed: 11 tests.
- Frontend TypeScript typecheck passed.
- Phone top-bar composition and long-title geometry passed: 1 Playwright test.
- Phone task movement through the retained drawer passed: 1 Playwright test.
- Phone local rebase and remote-contribution recovery through Changes passed: 2 Playwright tests.
- Review remediation added a 700px touch-viewport regression proving the recovery warning and confirmation actions stay at least 44 CSS pixels through the full phone breakpoint.
- Phone GitLab MR creation through Changes passed: 1 Playwright test.
- A captured Pixel 5 Changes state was inspected for top-bar composition, action placement, and horizontal containment; generated capture artifacts were then cleaned.
- The first build-backed task-movement run encountered a fixture startup
ECONNREFUSEDbefore reaching UI assertions. Its immediate no-build retry passed.
Documentation impact
No public documentation changes are required. This changes responsive control placement without changing a public command, setting, API, or documented operator workflow.
Risks
- Deleting phone-only dialogs must not delete the shared
VcsDialogsProviderused by Changes. - Existing Git E2E setup may assume the always-visible top-bar trigger. Each retargeted test must wait for the Changes state that makes its contextual action available, then prove the operation result rather than visibility alone.
- Remote-contribution confirmation changes entry path from the retired mobile drawer to the shared Changes confirmation. The test must preserve exact-head safety and phone viewport containment.