design: record the owner walkthrough backlog and its three rulings (session 0) - #176
Conversation
A page-by-page walkthrough of every rendered surface with the project owner, conducted against production screenshots. `docs/design-walkthrough.md` carries the findings as seven self-contained sessions so each is startable from a cold context; this commit is session 0, the cross-cutting part the other six depend on. Three rulings, recorded in DESIGN.md so a later sweep does not undo them: R1, hit targets. The 28px in-row grade is now scoped by the density reason rather than by the tag it lands in, so a `Disclosure as="row"` drawer takes the 36px standalone grade despite rendering a literal `<tr>`. This resolves a contradiction rather than reversing a decision: e2e/sync.spec.ts:1095 has been pinning the /admin/sync drawer to the standalone grade all along, and payouts/[id]/notes-form.tsx:90-95 reasons the same way for a panel field. Only /admin/accounts read the settled-decisions row as forbidding it. That row is marked AMENDED rather than deleted, per that file's own contract. R2, rare destructive controls do not hold permanent width in a scanning table. Records the existing reveal-on-arm constraint (#112) as a reason to move such controls rather than to progressively disclose them where they sit. R4, information may not live only in the assistive-tech channel. Two instances found, both the inverse of the usual defect: a working role="status" save confirmation marked .visually-hidden, and an affordance named in aria-label and absent from the visible summary. Copy: removes the four em dashes from rendered strings (the glyph stays as this app's null-value marker, per error.tsx:239), and drops the /payouts lede's first sentence, which restated its own table columns. The flat-pool note label changed shape, so its 12 e2e assertions move with it. The equivalent /account lede is deliberately left to session 3. e2e/account.spec.ts:1583 uses it as the narrow-capped sibling proving the manifest opts out of the cap, and finding 3.1 changes what that anchor should be; deleting it here would mean editing that test twice. Gates: typecheck, lint, format:check, 1290 unit tests across 83 files, 297 e2e, production build, and check-node-version all pass.
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 57 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (9)
Comment |
A page-by-page walkthrough of every rendered surface, done with the project
owner against production screenshots.
docs/design-walkthrough.mdcarries thefindings as seven self-contained sessions so each is startable from a cold
context. This PR is session 0 — the cross-cutting part the other six depend
on. Sessions 1-6 follow as separate PRs.
Why a new doc rather than more rows in the sweep backlog
The August 5 sweep was eighteen AI reviewers reading code. This was the person
who runs the tool saying what bothers him when he uses it. The doc cross
references both existing records rather than competing with them:
SYNTHESIS.mditem 7 (/payoutscannot answer "was I paid?") is open andappears in neither the worked chain nor the deferred list. It fell out of
tracking. Re-verified against the current tree; filed as session 2.
SYNTHESIS.mditem 6 is already carried forward inSECOND-PASS.md;cross referenced, not restated.
SYNTHESIS.mditem 15 already shipped and is explicitly marked do-not-refile.Three rulings
Recorded in
DESIGN.mdso a later sweep does not undo the work that follows.R1 — hit targets. The 28px in-row grade is now scoped by the density
reason rather than by the tag it lands in, so a
Disclosure as="row"drawertakes the 36px standalone grade despite rendering a literal
<tr>.This resolves a contradiction rather than reversing a decision, which is the
part worth checking:
e2e/sync.spec.ts:1095has been pinning the/admin/syncdrawer to the standalone grade all along and passing, and
payouts/[id]/notes-form.tsx:90-95reasons the same way for a panel field. Only/admin/accountsread the settled-decisions row as forbidding the exception,having inherited 28px by structural accident. That row is marked AMENDED
rather than deleted, per that file's own contract.
R2 — rare destructive controls do not hold permanent width in a scanning
table. Records the reveal-on-arm constraint from #112 as a reason to move
such controls, not to progressively disclose them where they currently sit.
R4 — information may not live only in the assistive-tech channel. Two
instances, both the inverse of the usual defect: a working
role="status"saveconfirmation marked
.visually-hidden, and an affordance named inaria-labeland absent from the visible summary. This corrected one of my own findings
during review — the payout notes confirmation was reported as missing and is
actually just invisible, so the fix is to surface it, not to build it.
Copy
Removes the four em dashes from rendered strings. The glyph stays as this app's
null-value marker (
error.tsx:239); only prose changed. Drops the/payoutslede's first sentence, which restated its own table columns, promoting the
second, which routes to
/account.flat-pool-form's note label changed shape, so its 12e2e/payouts.spec.tsassertions move with it. That's the bulk of the diff line count.
One deferral, on evidence
The equivalent
/accountlede is deliberately left to session 3, filed as3.1b.
e2e/account.spec.ts:1583uses it as the narrow-capped sibling thatproves the manifest opts out of the cap, and finding 3.1 changes what the
correct anchor should be. Deleting it here would mean editing that test twice.
Where to focus review
The
settled-design-decisions.mdamendment. If R1 is wrong, session 4 builds ona bad premise, and the whole point of that file is that its rows are not
reopened casually.
Verification
npm run typechecknpm run lintnpm run format:checknpm testnpm run test:e2enpm run buildscripts/check-node-version.sh