Run the two checks the audit had and never used #103

Closed
jheaps wants to merge 1 commits from fix/casino-holdem-audit-runs-everything into feat/casino-holdem-straddle
Owner

runAll() did not include the contrast check — it simply wasn't in the list — and touch targets sat behind an opt-in flag nothing passed. "The audit is clean" has meant nine checks rather than eleven for a long run of rounds, and the two left out are the two whose faults a dealer meets in a dim room with their thumb. Both were written, tested, and then never called; the contrast checker was built across two rounds and every sweep since has been silent about colour.

The standalone runner had a second version of the same hole: the 44px rule stands itself down where hover: hover says there's a pointer, and a headless desktop browser is a pointer — so a single pass had never measured a touch target at any viewport. It now runs every viewport twice, once with a mouse and once with a thumb. And a check that decides it doesn't apply now says so, instead of reporting an empty offenders list, which reads exactly like a pass.

Faded text is measured now rather than filed as unchecked. opacity on a box fades the box and its text together onto whatever is behind it, so a dimmed seat is not grey text on a dark puck: it is a faded puck and faded text both landing on the page. Both halves are composited that way. Two exemptions remain and both say so out loud — a disabled control, which WCAG itself excuses, and a link inside a sentence, whose size is set by the line it sits in.

What running them found, and this round fixes

Found Was Now
Chair number on every seat #8a8a8a, 3.39:1 at 9px once the empty seat's fade is composited #aeaeae, passes AA
Quick Split amount field 37px tall 46px
Quick Split delete button 30px across, and it deletes a player's entry 46px
360x640 with the bar grown by a side pot bottom seat 38px inside the bar clears it by 50

That last one brings back a cap this project measured and rejected once: capping the felt to the room left fixed the six-seat ring and broke the nine-seat one, two covered seats traded for two stolen centres. That trade was real then and isn't now — since PR #100 seats are spaced by distance around the rim rather than by angle, so a shorter felt no longer piles them up. Where the rim still can't give each seat a puck's width, the pucks come down a size, measured from the rim itself rather than from a media query.

Validated

  • 164 audits — 82 with a mouse, 82 with a thumb — across 13 viewports, all five overlays and Quick Split: no failures, no console errors. The only notes printed are the two stated exemptions and "touch targets: not run here — pointer device", which is the point of the change.
  • The felt cap re-measured across 30 combinations: five phone sizes x 2, 6, 9, 10 and 12 seats. Every one clean except twelve seats at 360x640, where a 240px felt and a 64px puck cannot both be true — stated rather than suppressed.
  • A hand played end to end on a 360x640 phone after the cap: blinds, four calls, check, flop. Names unclipped, seats clear of the bar by 64px.
  • 12 new tests on the compositing arithmetic, suite at 450, 0 failures; the fade compositing was reverted on purpose to confirm 3 of them catch it. The washed-out-colour check was proved first too: a badge forced to 1.39:1 is reported, so a pass means something.

One honest note

The phone table is visibly smaller now — a 240px felt at 360x640 where it used to be 336px, with the pucks crowding it. That is the trade: a seat you can see and reach beats a bigger table with two seats behind the Fold button. Tightening how the ring uses the space it has is worth a round of its own.

`runAll()` did not include the contrast check — it simply wasn't in the list — and touch targets sat behind an opt-in flag nothing passed. **"The audit is clean" has meant nine checks rather than eleven** for a long run of rounds, and the two left out are the two whose faults a dealer meets in a dim room with their thumb. Both were written, tested, and then never called; the contrast checker was built across two rounds and every sweep since has been silent about colour. The standalone runner had a second version of the same hole: the 44px rule stands itself down where `hover: hover` says there's a pointer, and a headless desktop browser is a pointer — so a single pass had never measured a touch target at any viewport. It now runs every viewport twice, once with a mouse and once with a thumb. And a check that decides it doesn't apply now says so, instead of reporting an empty offenders list, which reads exactly like a pass. **Faded text is measured now rather than filed as unchecked.** `opacity` on a box fades the box and its text together onto whatever is behind it, so a dimmed seat is not grey text on a dark puck: it is a faded puck and faded text both landing on the page. Both halves are composited that way. Two exemptions remain and both say so out loud — a disabled control, which WCAG itself excuses, and a link inside a sentence, whose size is set by the line it sits in. ### What running them found, and this round fixes | Found | Was | Now | |---|---|---| | Chair number on every seat | #8a8a8a, **3.39:1** at 9px once the empty seat's fade is composited | #aeaeae, passes AA | | Quick Split amount field | **37px** tall | 46px | | Quick Split delete button | **30px** across, and it deletes a player's entry | 46px | | 360x640 with the bar grown by a side pot | bottom seat **38px inside the bar** | clears it by 50 | That last one brings back a cap this project measured and **rejected** once: capping the felt to the room left fixed the six-seat ring and broke the nine-seat one, two covered seats traded for two stolen centres. That trade was real then and isn't now — since PR #100 seats are spaced by distance around the rim rather than by angle, so a shorter felt no longer piles them up. Where the rim still can't give each seat a puck's width, the pucks come down a size, measured from the rim itself rather than from a media query. ### Validated - **164 audits** — 82 with a mouse, 82 with a thumb — across 13 viewports, all five overlays and Quick Split: no failures, no console errors. The only notes printed are the two stated exemptions and "touch targets: not run here — pointer device", which is the point of the change. - The felt cap re-measured across **30 combinations**: five phone sizes x 2, 6, 9, 10 and 12 seats. Every one clean except **twelve seats at 360x640**, where a 240px felt and a 64px puck cannot both be true — stated rather than suppressed. - A hand played end to end on a 360x640 phone after the cap: blinds, four calls, check, flop. Names unclipped, seats clear of the bar by 64px. - 12 new tests on the compositing arithmetic, suite at **450, 0 failures**; the fade compositing was reverted on purpose to confirm 3 of them catch it. The washed-out-colour check was proved first too: a badge forced to 1.39:1 is reported, so a pass means something. ### One honest note The phone table is visibly smaller now — a 240px felt at 360x640 where it used to be 336px, with the pucks crowding it. That is the trade: a seat you can see and reach beats a bigger table with two seats behind the Fold button. Tightening how the ring uses the space it has is worth a round of its own.
jheaps added 1 commit 2026-09-02 04:03:18 -06:00
runAll() did not include the contrast check — it simply wasn't in the list — and
touch targets sat behind an opt-in flag nothing passed. So "the audit is clean"
has meant nine checks rather than eleven for a long run of rounds, and the two
left out are the two whose faults a dealer meets in a dim room with their thumb.
Both were written, tested, and then never called; the contrast checker was built
across two rounds and every sweep since has been silent about colour.

The standalone runner had a second version of the same hole: the 44px rule
stands itself down where `hover: hover` says there's a pointer, and a headless
desktop browser is a pointer, so a single pass had never measured a touch target
at any viewport. It now runs every viewport twice, once with a mouse and once
with a thumb.

A check that decides it doesn't apply now says so, rather than reporting an empty
offenders list — which reads exactly like a pass.

Faded text is measured instead of filed as unchecked. `opacity` on a box fades
the box and its text together onto whatever is behind it, so a dimmed seat is not
grey text on a dark puck: it is a faded puck and faded text both landing on the
page. Both halves are composited that way now. Two exemptions remain and both say
so out loud: a disabled control, which WCAG itself excuses, and a link inside a
sentence, whose size is set by the line it sits in.

What running them found, and this round fixes:

  - the chair number on every seat: #8a8a8a at 9px, 3.39:1 once the empty seat's
    fade is composited, on the label that answers "which seat is that?";
  - Quick Split's amount field at 37px tall and its delete button at 30px across,
    on a page whose targets had never been measured;
  - and on a 360x640 phone with the bar grown by a side pot, the bottom seat
    sitting 38px inside it.

That last one brings back a cap this project measured and rejected once: capping
the felt to the room left fixed the six-seat ring and broke the nine-seat one.
That trade was real then and isn't now — seats are spaced by distance around the
rim rather than by angle, so a shorter felt no longer piles them up. Re-measured
across 30 combinations of five phone sizes and 2 to 12 seats: every one clean
except twelve seats at 360x640, where a 240px felt and a 64px puck cannot both be
true. Where the rim can't give each seat a puck's width, the pucks come down a
size, measured from the rim itself rather than from a media query.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_015bnp7xKUPFFSpwkYNFaPgb
jheaps closed this pull request 2026-09-02 09:58:04 -06:00

Pull request closed

Please reopen this pull request to perform a merge.
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jheaps/JoshHeaps.Net#103