Stop re-typing the layout audit into a console every round #53
Closed
jheaps
wants to merge 1 commits from
feature/casino-holdem-layout-audit into feature/casino-holdem-blind-fairness
pull from: feature/casino-holdem-layout-audit
merge into: :feature/casino-holdem-blind-fairness
:master
:feature/socialism
:polish/holdem-seats-one-size
:fix/holdem-dealer-chip-eats-its-seat
:polish/holdem-game-night-ready
:polish/holdem-round-next
:polish/holdem-seat-collisions
:polish/holdem-offline-and-render
:fix/naming-a-blind-deals-the-hand
:release/casino-holdem-polish
:fix/casino-holdem-phone-look
:fix/casino-holdem-sidebar-crowding
:fix/casino-holdem-contribution-rule
:fix/casino-holdem-one-stack-rule
:fix/casino-holdem-default-stack-buyin
:feat/casino-holdem-waiting-list
:feat/casino-holdem-misdeal
:feat/casino-holdem-cash-out
:feat/casino-holdem-clock
:feat/casino-holdem-rake
:fix/casino-holdem-stadium-ring
:fix/casino-holdem-phone-felt-shape
:fix/casino-holdem-audit-runs-everything
:feat/casino-holdem-straddle
:fix/casino-holdem-landscape-ring
:feat/casino-holdem-table-file
:fix/casino-holdem-touch-targets
:fix/casino-holdem-audit-modal-blindspot
:fix/casino-holdem-quicksplit-chop
:fix/casino-holdem-buildable-bet-sizes
:fix/casino-holdem-pot-sized-raise
:fix/casino-holdem-chips-to-count-out
:fix/casino-holdem-first-buy-in
:fix/casino-holdem-seating-a-table
:fix/casino-holdem-showdown-order
:fix/casino-holdem-hand-log-filter
:fix/casino-holdem-posting-in
:fix/casino-holdem-dead-button
:fix/casino-holdem-discarded-pot
:fix/casino-holdem-honest-tank-clock
:fix/casino-holdem-export-the-notes
:fix/casino-holdem-stacks-in-chips
:fix/casino-holdem-close-audit-blind-spots
:fix/casino-holdem-readable-dim-states
:fix/casino-holdem-drop-broken-watermark
:fix/casino-holdem-two-tabs
:fix/casino-holdem-unreadable-save
:fix/casino-holdem-say-when-not-saving
:fix/casino-holdem-shortcut-discovery
:fix/casino-holdem-rulings-index-compact
:fix/casino-holdem-rulings-index
:fix/casino-holdem-payout-in-chips
:fix/casino-holdem-move-seat-on-touch
:fix/casino-holdem-amount-fields-select
:fix/casino-holdem-touch-targets-by-pointer
:fix/casino-holdem-button-box-model
:fix/casino-holdem-blind-badge-placement
:fix/casino-holdem-buyin-deals-in
:fix/casino-holdem-bet-vs-raise
:fix/casino-holdem-deal-around-broke
:fix/casino-holdem-settle-up
:fix/casino-holdem-allin-and-bar
:fix/casino-holdem-one-dealer-button
:fix/casino-holdem-manual-deal
:fix/casino-holdem-less-guessing
:feature/casino-holdem-seat-editor
:fix/casino-holdem-landscape-table
:feature/casino-holdem-acting-seat
:feature/casino-holdem-raise-guard
:feature/casino-holdem-first-run
:feature/casino-holdem-contrast-audit
:feature/casino-holdem-layout-audit
:feature/casino-holdem-blind-fairness
:feature/casino-holdem-rulings-depth
:feature/casino-holdem-bank-audit
:feature/casino-holdem-fewer-taps
:feature/casino-holdem-render-perf
:feature/casino-holdem-keyboard-focus
:feature/casino-holdem-resilience
:feature/casino-holdem-messy-tables
:feature/casino-holdem-touch-mobile
:chore/casino-holdem-tech-debt
:feature/casino-holdem-dealer-batch
:feature/casino-holdem-seat-count-safety
:feature/casino-holdem-odd-chip
:feature/casino-holdem-button-moves
:feature/casino-holdem-allin-runout
:feature/casino-holdem-heads-up
:feature/casino-holdem-contrast
:feature/casino-holdem-touch-audit
:feature/casino-holdem-wizard-polish
:feature/casino-quicksplit-side-pots
:feature/casino-holdem-rebuys
:feature/casino-holdem-rulings
:feature/casino-holdem-sidebar-polish
:feature/casino-holdem-keyboard
:feature/casino-holdem-action-undo
:feature/casino-holdem-pace
:feature/casino-holdem-side-pot-breakdown
:feature/casino-holdem-gestures
:feature/casino-holdem-card-picker
:feature/casino-holdem-live-betting
:feature/casino-holdem-bet-chips
:feature/casino-holdem-seat-legibility
:feature/casino-holdem-undo-toasts
:feature/casino-holdem-quick-split
:feature/casino-holdem-mobile-table
:feature/casino-holdem-hand-history
:feature/casino-texas-holdem
:feature/casino-holdem-dealer-mode-polish
:feature/fractional-learned-weights
:fix/stockfish-dispose-hang
:fix/blog-cache-staleness
:fix/workflows
:gitea/workflows
:echo-acoustic-ranging
:chess-ui-overhaul
:feature/customChessEngine
:feature/blog
:AddProject
:feature/generalUpdate
:tech-debt/chess-cleanup
:tests/CreatePlaywrightTests
:UpdateParticleSimulatorButton
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Last round I found a regression I'd shipped two rounds earlier — the standings table's player-name column at zero pixels wide, at every viewport. It survived because the audit that would have caught it only existed in a previous session's scrollback. These checks have been re-written by hand at least six times, and each time they covered only whatever had just changed. Stacked on #52.
So they're a file now.
uiAudit.jsruns in the page — no build step, nopackage.json, no dependency — andrunUiAudit.jsdrives it over the table, all five overlays and Quick Split at thirteen viewports.Deliberately outside CI: the unit suite is dependency-free and runs in a second, this needs a browser and a running site. No Playwright to hand? Paste
uiAudit.jsinto devtools and callLayoutAudit.runAll().Three real faults it found on its first run
Fields were 13.3px on every iPad. The 16px minimum that stops iOS zooming the page on focus went in inside a
max-width: 700pxblock — and every iPad is wider than that. So a dealer on a tablet, the device this is most likely to be propped up on, got the table zoomed every time they touched the blind amount. The reason for that rule was never "narrow screen", it was "iOS". Font size applies at all widths now, and the 44px touch targets key offhover: none, which is what actually distinguishes a finger from a mouse.The seat menu couldn't be scrolled. No height limit, no overflow — so on a phone held sideways its first two actions, Fold and All-in, sat below the bottom of the screen with no way to reach them. A dealer in landscape could long-press a seat and then not fold it.
The pot wizard sat under the action bar. Every other overlay is z-index 90–98; the wizard alone was at 50, below both the action bar (55) and the toast (80). In landscape one of its inputs was completely covered by the Fold button, and a toast could sit over "Confirm Winner(s)". The odd one out rather than a decision.
Three faults in the audit itself
Recording these because each would have had me "fix" something that wasn't broken:
Rangemeasures laid-out text, which runs past the element whileoverflow: hiddenquietly clips it. Only overflow that's actually visible can paint over a neighbour.elementFromPointreturns null for a point outside a scrollable ancestor's clip — scrolled out of view, not covered by anything.A toast partly over a control is a warning now rather than a failure: it dismisses itself, carries a close button, and on a desktop necessarily lands over a table that fills the content column. Fully covered by a toast is still a failure — that was a real bug once, where a seat sat exactly under the Undo button.
Validation
Final sweep: 13 viewports · 65 overlay checks · 13 full-page audits · 4 Quick Split audits — zero failures, one warning (the desktop toast overlap above, correctly classified). 137 unit tests still passing. No console errors.
Pull request closed