Polish: make the row treatment reachable, number every rule, and correct three comments that were wrong - #4
Merged
Merged
Conversation
`[data-row]` shipped on two elements, and neither could ever match its own `:focus-visible` rule: LedgerRow is a plain `<div>` and the Safe Mode row is a `<tr>`. So the claim in 21c32be that "keyboard users finally get row-level feedback" was false — nothing focusable carried the attribute. Worse on LedgerRow specifically: a ledger row is a definition list entry with nothing to activate, so tinting it on hover advertised an affordance that is not there. On the one row that *does* hold links — the ten comparison chips — the surrounding whitespace lit up more strongly than the links inside it. It moves to things you can genuinely click or select: the database tiles, which are links and therefore focusable, so hover and focus now resolve to the same treatment as intended. Safe Mode keeps it, where `aria-selected` is real. The comparison chips get their own hover instead — a 2px bar at `left: 0` is a row device and would have been clipped by their own border radius. Also in this pass: - AccentLine was not numbered. It draws a visually identical hairline, so skipping it made the ordinal the position of *some* rules rather than of the rule — the first one in every section was missing. 108 numbered rules become 124. - Two doc comments stated the wrong thing. The gutter columns are `md:block`, not lg, so the claim that they "are not rendered at all" below lg was false; and with a 96rem middle column the container stops filling it from 1360px, not the ~1616px both comments claimed. - `transition-delay` joins the reduced-motion block, for the same reason `animation-delay` did: collapsing a transition's duration still leaves it holding its start value for the whole delay. - Blog h2/h3 set their own font-size and inherited the wrapper's 1.75 leading, so they never touched the locked scale. They read from it now. - The last four arbitrary font sizes go: `text-[10px]` sat below the smallest rung and carried no line-height or tracking at all, and `text-[13px]` fell between two rungs. `rounded-[4px]` becomes `rounded-key`, which is the token added to stop that literal being retyped.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The remaining medium/low findings from the audit that preceded #3, minus the
ones #3 already fixed and one I refuted on inspection.
The row treatment could never fire on focus
[data-row]shipped on exactly two elements and neither is focusable: LedgerRowis a plain
<div>, the Safe Mode row is a<tr>. So the claim in 21c32be that"keyboard users finally get row-level feedback" was false — nothing carrying
the attribute could match
:focus-visible.LedgerRow was the wrong host for a second reason. A ledger row is a definition
list entry with nothing to activate, so tinting it on hover advertised an
affordance that does not exist — and on the one row that does hold links, the
ten comparison chips, the surrounding whitespace lit up more strongly than the
links themselves.
It moves onto things you can genuinely click or select: the database tiles,
which are links and therefore focusable, so hover and focus finally resolve to
the same treatment. Safe Mode keeps it, where
aria-selectedis real. The chipsget their own hover instead — a 2px bar at
left: 0is a row device and wouldhave been clipped by their own border radius.
Every rule is numbered now, or the claim was untrue
AccentLinedraws a visually identical hairline and was not counted, so theordinal was the position of some rules rather than of the rule — the first one
in every section was silently missing. 108 numbered rules become 124.
Three comments stated things that were not true
md:block; the comment claimed they "are not renderedat all" below lg. They render from 768px and simply do not carry numbers yet,
which is now what it says and why.
80rem of content plus two 40px gutters — not the ~1616px two comments claimed.
workbench.tsx's ladder justification is left alone; it is right about theratio even where it is loose about the measured width.
Smaller
transition-delayjoins the reduced-motion block, for exactly the reasonanimation-delaydid in Fix what the audit found: an unrun test job, two guards that could not fail, and 4.5 MB of PNG #1: collapsing a transition's duration still leaves itholding its start value for the whole delay.
h2/h3set their own font-size and inherited the wrapper's 1.75leading, so they never touched the locked type scale. They read from it now.
text-[10px]sat below the smallestrung and carried no line-height or tracking at all;
text-[13px]fell betweentwo rungs.
rounded-[4px]becomesrounded-key— the token added in Phase 2: make the design system enforceable, number the rules, and put a download within reach #2 tostop that literal being retyped, which nothing had used.
Refuted, so not changed
The audit claimed the workbench screenshots "render at 12% scale with no crop"
below lg. They do not: Tailwind's preflight sets
img { max-width: 100% }, sothe image fits its container at every width below the
lg:overrides.Still blocked, unchanged
Cold-start measurement (the EXPLAIN tree, and whether
"Under 1s"may stay onthe spec table at all), recaptured screenshots (hero, Plates, workbench
toggles), per-sponsor copy, the DepthGrid and FAQ cuts, an
h1for/faq, andthe nineteen-site button migration — which wants a human looking at the result,
since it is the conversion path and there is no visual check here.
Verification
typecheck, build and pint clean; 96 tests / 1827 assertions with
REQUIRE_SSR=1. Rendered HTML re-checked: 124 numbered rules,data-rowon 33focusable or selectable elements and none on a ledger row, and no arbitrary font
size anywhere in
resources/js.