Skip to content

Normalize /display left rail dividers to #16202b (O1 fidelity round) - #401

Merged
WilfordGrimley merged 2 commits into
masterfrom
worktree-agent-a4c20296d80c4c102
Jul 24, 2026
Merged

Normalize /display left rail dividers to #16202b (O1 fidelity round)#401
WilfordGrimley merged 2 commits into
masterfrom
worktree-agent-a4c20296d80c4c102

Conversation

@WilfordGrimley

Copy link
Copy Markdown

Description

Corrected SPEC-display-left-rail.md fidelity round (Quorra's owner-approved corrected spec + mockup). Most of the corrected round's binding table was already shipped in PR #352 (Sources disclosure, unified Frame+Treatment filter, preferred-sources pin with the #353 seam, artist support button, the D14 Y/N consensus treatment, the buttons-look-like-buttons sweep) — verified against the corrected spec and left untouched where it already matched. This PR ships the one genuinely new binding change (O1) plus the doc/test/mockup sync the corrected round requires.

Per-item mapping to the corrected spec:

  1. Sources disclosure (~247 rows) — already shipped (SourcesAccordion.tsx): summary count, pinned-source chips, filter input, bulk enable/disable/invert, 38px toggle rows. Verified matches §D.1, no changes needed.
  2. Frame + Treatment unified filter block — already shipped (SelectVersionResults.tsx's .ufilter fieldset, Border its own row above). Only its border color changed this round (see O1).
  3. Preferred-sources pin ★ (38×38) — already shipped, persists to localStorage (getLocalStoragePinnedSourcePks/setLocalStoragePinnedSourcePks), disabled #353 "Save as my defaults" seam present. Added a new Playwright test asserting the pin survives a real reload.
  4. Artist support link — already shipped as btn-outline-primary "Support on MTG Artist Connection ↗" (ArtistSection.tsx).
  5. Buttons-look-like-buttons sweep — already shipped across the rail's offender list (Slot Actions, D14 ✗, Sources bulk/pin/save-defaults, artist link).
  6. O1 — divider normalization to #16202bimplemented this PR. .rail-head/.artist-line/.sources (previously the ambiguous Bootstrap .border-bottom utility), the Select Version wrapper (previously no boundary at all), and the unified filter fieldset + its internal Frame↔Treatment divider (previously an unthemed rgba(0,0,0,.22)) all now carry the explicit #16202b hairline .d14 already used.
  7. Y/N consensus treatment (§C) — already shipped exactly as specced: confirmed = green ✓ + "Confirmed" pill (no number); suggested = score/qualitative pill + amber "N% confident"/"Suggested"; ✗ not this printing is a real vote that stays visible at opacity:.6 on a confirmed printing (owner answer Promote PringlePrints to a full ordering tab #2). No standalone Y/N block anywhere in the rail.

Docs updated in place (no dated appendix): docs/proposals/mockups/proposal-h/SPEC-display-left-rail.md rewritten to the corrected binding tables (§A–§J, including a refreshed source-map addendum); docs/proposals/mockups/proposal-h/display-left-rail-mockup.html replaced with the corrected mockup; docs/features/display-left-rail.md gained an "O1 — divider normalization" section.

frontend/tests/DisplayLeftRailFidelity.spec.ts updated to assert the new #16202b = rgb(22, 32, 43) border values (comment-linked to the spec's §D.1/O1), and to flag the one spec row deliberately NOT implemented (see Deviations).

Deviations from spec

  • .btn-sm sizing (14px / 4px 8px, spec §A item 2 / §D.1's final row) — NOT implemented. The corrected spec's own §A explicitly flags this specific row as "needs owner sign-off" (denser-vs-standard tradeoff) separately from O1's already-confirmed divider normalization. It directly conflicts with a more specific, already-shipped owner directive on the exact same controls ("the buttons are too big" — CompactButton/CompactToggleButton/CompactLinkButton/TreatmentChip, currently ~12px/0.2rem 0.5rem). Left as shipped pending an explicit owner call; flagged in the spec (§A/§H "O5"), the source-map addendum (§J), the fidelity test's own comment at the funnel-filters-toggle assertion, and docs/features/display-left-rail.md.
  • Everything else in the corrected spec's binding table (§D.0/§D.1) was already shipped via PR Shrink Select Version rail's medium/hero card tile widths #352 and verified to match on inspection — no other deviations.

Verification

  • DisplayLeftRailFidelity.spec.ts — 2/2 passed (asserts the new #16202b border values).
  • DisplayPage.spec.ts — 32/32 passed (includes the existing Sources/D14 coverage plus the new pin-persists-across-reload test).
  • SelectVersionSection.spec.ts — 6/6 passed. DisplaySlotStates.spec.ts — 4/4 passed in isolation (one test flaked once under 4-worker CPU contention in a combined run, unrelated to this change — passed cleanly re-run alone, matching this repo's documented CI shard-contention pattern).
  • Full jest — 568/568 passed.
  • tsc --noEmit — clean.
  • npx prettier@2.7.1 --check — clean on all changed files.
  • Screenshots (desktop 1400px + phone 390px) captured locally via a throwaway Playwright script and inspected — rail composition, divider hairlines, Sources accordion (expanded + collapsed), D14, and the unified filter block all render as expected; not committed (gitignored test-results/).
  • Deferred: full visual re-baseline against the mockup's own shot.js screenshots (mockup-side tooling, not part of this repo) — the CSS-fidelity guard's getComputedStyle assertions are the binding check for this repo per its own established convention.

Checklist

  • I have installed pre-commit and installed the hooks with pre-commit install before creating any commits.
  • I have updated any related tests for code I modified or added new tests where appropriate.
  • I have manually tested my changes as follows:
    • Ran the full targeted Playwright suite (fidelity guard + DisplayPage + SelectVersionSection + DisplaySlotStates) plus full jest, tsc --noEmit, and prettier - all listed above.
    • Captured and visually reviewed desktop (1400px) and phone (390px) screenshots of the rail (idle, Sources expanded, D14 suggested state).
  • I have updated any relevant documentation or created new documentation where appropriate.
    • docs/proposals/mockups/proposal-h/SPEC-display-left-rail.md (rewritten in place), docs/proposals/mockups/proposal-h/display-left-rail-mockup.html (replaced), docs/features/display-left-rail.md (O1 section added).
    • Merge-time checklist: wiki: unified-page docs need the new Sources/filters/pin controls documented.

Do not merge - for owner review.

Corrected SPEC-display-left-rail.md round: retires the ambiguous
Bootstrap .border-bottom utility on .rail-head/.artist-line/.sources,
adds a boundary to the Select Version wrapper, and normalizes the
unified filter fieldset + its internal divider - all to the explicit
#16202b hairline .d14 already used. Spec doc + mockup updated in place;
DisplayLeftRailFidelity.spec.ts asserts the new values; adds a pin
localStorage-persists-across-reload Playwright test. Leaves the spec's
.btn-sm 14px/4x8 row unimplemented pending an explicit owner call (it
conflicts with the already-shipped "buttons are too big" fix) - flagged
in the spec/docs/tests.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Throwaway computed-style diff against the corrected mockup caught 63
mismatches beyond the O1 divider round: mostly Bootstrap body-default
(16px) font-size fall-throughs on bespoke rail classnames that never had
their own font-size rule (rail-head .slot/.name, artist-line,
select-version-heading, Sources filter input, all fixed component-scoped
per the #400 rule), plus the Source row's own border-bottom (missed by
O1's named list), the tile corner tag (8px/alpha .9 -> 7px/.92), and the
Ghost tile's UA-default button padding.

Per explicit owner ruling, also resolves the three rows held back
pending sign-off: AutofillCollapse header background reverts to #4E5D6B
(#400 mis-corrected this to #4e5d6c - deliberately distinct token, not a
typo), the Source toggle is restyled (scoped to a new
rail-source-toggle class) from react-bootstrap-toggle's stock sliding
switch into the mockup's static two-cell segmented look, and the
Filters disclosure toggle returns to real Bootstrap sm metrics (14px/4px
8px), superseding the earlier "buttons are too big" shrink for that one
control only.

Also removes the stray border-light Bootstrap utility from
AutofillCollapse's header (no spec calls for it).

DisplayLeftRailFidelity.spec.ts asserts every fixed value. Deliberately
left open: "Demoted body" 13px (blast radius across four other
untested demoted sections not verified this round).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@WilfordGrimley

Copy link
Copy Markdown
Author

Follow-up round: machine-diff fix pass

A throwaway computed-style diff against the corrected mockup (bundle-401) caught 63 property mismatches beyond the O1 divider round. Fixed every unambiguous one this round (mostly Bootstrap body-default font-size fall-throughs on bespoke rail classnames, plus the Source row's own border-bottom and the tile corner tag's font-size/alpha), all component-scoped per the #400 rule.

Per explicit owner ruling, also resolved the three rows previously held back pending sign-off:

  • AutofillCollapse header background reverts to #4E5D6B (PR Add /display left-rail CSS source map and permanent fidelity guard test #400 mis-corrected this to #4e5d6c — deliberately distinct token, not a typo)
  • Source toggle restyled (scoped to a new rail-source-toggle class, ~10 other react-bootstrap-toggle mounts sitewide unaffected) from the library's stock sliding switch into the mockup's static two-cell segmented look
  • Filters disclosure toggle returns to real Bootstrap sm metrics (14px/4px 8px), superseding the earlier "buttons are too big" shrink for that one control only

Re-measured after the fix: 63 → 44 raw mismatches (re-diff via the same diff.js tool against a fresh built-page extraction). Of the remaining 44: most are pre-existing, already-documented caveats (fixture/measurement limitations — suggested-variant Frame chip, RequestedPrintingBadge wrapper-vs-badge, the confirm-ribbon's fundamentally different implementation, tile density-tier sizing) or deliberately-deferred items flagged in the spec doc (Demoted body font-size — blast radius across four unmeasured sections not verified; the Sources/Slot-Actions header's own border-bottom, left at Bootstrap's stock Card border once the stray border-light utility was removed, since no spec pins a literal value there). A couple of the remaining "Source toggle"/"Source pin star" rows are artifacts of my own diagnostic re-extraction script's fixture state (e.g. comparing an unpinned built row against the mockup's demo data, which hardcodes its first row as pinned) — not real defects; the toggle's visible cells were verified pixel-correct via screenshot and the fidelity guard's own getComputedStyle assertions.

DisplayLeftRailFidelity.spec.ts asserts every value fixed this round. Full verification (tsc, prettier, eslint, jest 568/568, and the DisplayLeftRailFidelity/DisplayPage/SelectVersionSection/DisplaySlotStates/PDFGenerator/GridSelectorModal Playwright suites, 76 tests) all green — see commit 980b6cb1.

@WilfordGrimley
WilfordGrimley merged commit 1017723 into master Jul 24, 2026
11 checks passed
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.

1 participant