Skip to content

Deck pages at phone width: row menus clear of the tab bar, zone columns aligned, previews true (#326) - #334

Merged
plainprogrammer merged 28 commits into
mainfrom
074-deck-pages-phone-width
Nov 12, 2026
Merged

plainprogrammer merged 28 commits into
mainfrom
074-deck-pages-phone-width

Conversation

@plainprogrammer

Copy link
Copy Markdown
Owner

Closes #326

Spec 074 (spec, v0.6.1; verification). Factory data, placeholder card images; all phone shots are a 360px viewport in the narrow frame, light and dark.

What changed

  1. A row menu opened near the bottom of a phone is no longer behind the tab bar (every Menu, fixed once in the component). Below 640px, on a page with a tab bar, opening a menu scrolls the page just far enough that the list ends 8px above the bar (the controller's reveal; scroll-margin-top/-bottom on .c-menu__list). An empty ::after room box under the open list lets the page scroll that far at its end (a prototype showed the last rows need it); a list taller than the room starts under the app bar. Nothing moves when the list is already clear, at 640px and wider, or with no tab bar; instant scroll under prefers-reduced-motion. A menu is closed before Turbo caches the page, so Back restores with every menu closed (AC-1.13).
  2. The missing tab bar in spec 071's shots 04 and 05 was the frame, not the page. A narrow frame taller than the window's viewport is clipped and loses the fixed bar (an 815px frame in a 1280x800 window reproduces the picture exactly). Recorded in the screenshots workflow note; a guard example keeps the bar on the fourteen deck-family pages. No page change.
  3. The DeckPage previews match the page. DeckPage.html and DeckPagePhone.html drew "Move copies" on 12 rows each that have no proxy; they now draw the empty menu cell the page builds. menu_cell in the design-system fixture too.
  4. Found while doing 3, ruled in by the coordinator under the maintainer's delegation (Option 1): the real deck page misaligned its zones' columns at phone width (menu column 46px in a zone with proxies, 16px in one without, so Cost and Total sat 30px apart): spec 068's empty cell had broken spec 060 AC-3.11, hidden by a fixture that drew a menu on every row. The zone tables' menu column now has a floor of 4rem (64px, the wide layout's own width) below 640px of the container. Restores 060's rule; no criterion of 060 or 068 changes.

Owed to the maintainer

  • The floor's cost (ruled, recorded in the spec's Decision 6): the Card column is 18px narrower in a zone with a row menu (48px in a zone with none) at a fine pointer. Only the pathological worst case, a 60-character name with no space, six pips and 1,234 proxies, is affected visibly: its table spills 19px past its container (1px before at a fine pointer, about 13px at a coarse one); the page never scrolls sideways and realistic rows fit. Wrapping the unbroken proxy tag in the zone tables would remove the spill; it is a ProxyTag ruling, listed under Out of Scope.
  • components.css:127 still says the menu controller adds "arrow keys" (it never did); it is the design export's file, left alone; Menu.md corrects the claim and says so, so the next export fixes it.
  • Headless Firefox has a fine pointer, so the coarse-pointer sizes (44px rows, the coarse trigger) are not shown or measured here; the committed AC-1.15 example injects every coarse rule.

Verification

  • New spec/system/menu_tab_bar_clearance_spec.rb: 29 examples, written first; the red run is in verification.md (menus 50 to 137px behind the bar, margins 0px, list top 465 vs 65, menu column 16px vs 64px, the Back case restoring an open menu). Eight hand mutation checks each fail the example that guards them. After merging main: the file with design_system_files_spec, design_system_deck_components_spec and select_touch_floor_spec, 99 examples, 0 failures. The wider neighbours (deck page, proxies, shape panel, the examples that open menus in a narrow frame): 144 and 45 examples, 0 failures. RuboCop, YARD and Brakeman clean; the full bin/ci ran at the push (see the CI run below).
  • Spec reviewed twice (Opus, read-only), plan twice, the 0.6.0 change once, implementation review (Mode B): SPEC-ALIGNED WITH MINOR FINDINGS, all taken.

Screenshots (360px viewport; "before" is emulated by switching the new margins, room box and scroll off, not built from main)

Menu opened with its trigger 40px above the bar. Before (the last three items are behind the bar) and after (all four items end 8px above it):

before, light after, light after, dark
before light after light after dark

The last row of the page with proxies of two finishes (eight items), before and after (dark):

before, dark after, dark
before dark after dark

The zones' columns (Main with a proxy row, Sideboard with an owned card), before and after (light):

before after
zones before zones after

The worst case after the floor (its table spills 19px; the page does not scroll sideways) and the phone preview (dark):

worst case, after phone preview, dark
worst case preview

The workflow, a menu opening near the bottom (the first frames after the click show the list behind the bar before the page scrolls it clear):

menu opening

All 24 images and the GIF: docs/specs/074-deck-pages-phone-width/screenshots/ (also the card page's and the collection table's menus, the deck page at 1280px with a menu open, unchanged, and the desktop preview), listed in verification.md.

🤖 Generated with Claude Code

plainprogrammer and others added 28 commits November 11, 2026 22:12
Row menus scroll clear of the phone tab bar, the missing tab bar in spec 071's shots is the narrow frame's, and the DeckPage previews match the page. Two Opus review rounds taken (v0.3.0).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds AC-1.11 (the room box adds no height and sits in no scrolling container) and AC-1.12 (an untabbed shell gets no margin or room box); AC-3.2 notes the export's stale comment.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Found while writing the plan: a mid-page row passes 'scrolled to its end' trivially, and a click can't be aimed at the room box inside a frame without risking a link.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nine tasks in three batches: the system spec first, the CSS block and menu controller method, previews and documents, then mutation checks, shots and the record. Two Opus plan review rounds taken.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… caches the page

From the coordinator at Gate B: a details restored with open fires toggle again, so Back to a cached page with a menu open would scroll on restore.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A Back example in the system spec, a turbo:before-cache handler in the controller, the Menu.md sentence and a mutation check in Task 7.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ins and a room box (spec 074)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ons, TabBar, DeckPage and the README (spec 074)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…(spec 074)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Making the preview true showed the real deck page misaligns its zones' columns at 360px (46px against 16px menu column): spec 068's empty cell broke spec 060 AC-3.11. AC-1.14 and AC-1.15, Decision 6 and the Supersedes entry; ruled in by the coordinator.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
From the review of 0.6.0 and the coordinator's ruling (Option A): the worst-case row spills 19px past its container, the page does not scroll sideways; AC-1.15 becomes a committed example; own heading for the floor; Out of Scope notes wrapping the proxy tag.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…x so every zone's columns align (spec 074)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…n rows with no proxy (spec 074)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…d TableActions (spec 074)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
24 JPEGs and a GIF at a 360px viewport, light and dark: menus near the bottom, the last row's eight items, the zone columns, the worst case, the previews. Factory data, placeholder card images; before is emulated.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Red run, mutation checks, runs, the measured costs and the screenshots list.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… and the current tab (spec 074)

From the implementation review (F1, F2): both examples could pass without proving what they claim.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…-key claim, add the README's App additions entry

From the implementation review (F3 to F6).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…D WITH MINOR FINDINGS)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
No docs/architecture area doc covers menus or the deck zone tables' column widths (the implementation review found none owed); the rules are in the design system's README and components, which this branch already updated. The index row is Frozen by the design system with the plan's retirement owed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…pec 027 D4)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…t note

Three lessons (a corrected fixture can expose the page's bug, scroll range at the page end, a column floor measured at both pointers and on the worst row) and one reference memory, approved by the coordinator.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…width

Kept both sides of docs/specs/README.md: the retired-plan rows of 070 and 071 from main, this branch's 074 row, and main's 076 row.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@plainprogrammer
plainprogrammer marked this pull request as ready for review November 12, 2026 04:56
@plainprogrammer plainprogrammer self-assigned this Nov 12, 2026
@plainprogrammer
plainprogrammer merged commit 099dddc into main Nov 12, 2026
9 checks passed
@plainprogrammer
plainprogrammer deleted the 074-deck-pages-phone-width branch November 12, 2026 11:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Deck pages at phone width: row menu behind the tab bar, missing tab bar, stale DeckPage preview

1 participant