@@ -6,6 +6,22 @@ matched image for a card slot, seeing them all at once in a grid
66image-loading/error states, since those apply to every card render
77across the app, not just inside this modal.
88
9+ ** Post-route-swap reachability (2026-07-24, issue #272 parity wave 3):**
10+ per-slot picking on the unified ` /editor ` page goes entirely through the
11+ rail's own Select Version section below (a different component,
12+ ` SelectVersionResults.tsx ` — no modal, no grouping/filters-sidebar/Jump-to-
13+ Version UI of its own). ` GridSelectorModal.tsx ` itself has exactly one
14+ surviving mount post-swap: ` CardbackToolbarButton ` /` CommonCardback.tsx ` 's
15+ project-wide cardback picker (testid ` cardback-grid-selector ` , title
16+ "Select Cardback"), reachable from the right rail's Cardback button once
17+ the project is non-empty. It's otherwise unchanged and fully generic (a
18+ bare ` imageIdentifiers ` array + ` onClick ` callback) — every grouping/
19+ filter/keyboard/mobile-viewport behavior below applies identically
20+ regardless of which caller's identifiers feed it. ` GridSelectorModal.spec.ts ` /
21+ ` GridSelectorModalVariants.spec.ts ` /` CardSlot.visual.spec.ts ` 's own two
22+ grid-selector snapshot tests were re-ported onto this cardback mount in
23+ that wave — see ` openDisplayCardbackGridSelector ` (` frontend/tests/ test-utils.ts ` ) for the helper and its own comment for the full rationale.
24+
925## Frontend-polish UX pass (PR-B, 2026-07-17)
1026
1127Presentation/interaction fixes from the frontend-polish package's
@@ -480,17 +496,28 @@ described above.
480496 half of PR #325 's backend contract)
481497- ` frontend/src/features/card/Card.tsx ` (+ new ` Card.test.tsx ` ),
482498 ` CardSlot.tsx `
483- - Tests: ` frontend/tests/GridSelectorModalVariants.spec.ts ` (keyboard nav
484- - a large-grid focus-perf check, autofocus fallback, mobile filters
485- default — merged from the former ` GridSelectorModalAccessibility.spec.ts `
486- and ` GridSelectorModalMobile.spec.ts ` ), ` frontend/tests/CardImageStates.spec.ts `
487- (error placeholder + slow-load hint), ` frontend/tests/SelectVersionSection.spec.ts `
488- (grouping/ordering, moment (a)/(b)/(c) behavior on the sidebar layout — issue
489- #167 — plus the funnel's implicit-cast/reset/ack and retract-on-reselect
490- end-to-end flows), ` frontend/src/features/gridSelector/SelectVersionResults.test.tsx `
491- (axis exclusivity, membership-driven axis rendering, disclosure tiers,
492- SUGGESTED-chip rendering, F5 votes-off completeness), ` frontend/tests/ DisplayPage.spec.ts ` (F6: right-click + the ` ⋯ ` cue opening the shared
493- context menu on the center sheet)
499+ - Tests: ` frontend/tests/GridSelectorModal.spec.ts ` (23 tests) +
500+ ` GridSelectorModalVariants.spec.ts ` (7 tests: keyboard nav, a large-grid
501+ focus-perf check, autofocus fallback, mobile filters default — merged
502+ from the former ` GridSelectorModalAccessibility.spec.ts ` and
503+ ` GridSelectorModalMobile.spec.ts ` ) — parity wave 3 (2026-07-24, issue
504+ #272 ) ported both onto the cardback mount (see the "Post-route-swap
505+ reachability" note above); ` frontend/tests/CardSlot.spec.ts ` (15 of 25
506+ tests ported the same wave — delete/duplicate/change-query/context-menu/
507+ auto-select coverage against the sheet's own slots, ` page-preview-slot ` +
508+ ` page-preview-slot-menu-cue ` ; see this doc's own "Known gaps" for what
509+ wasn't ported) and its ` visual/CardSlot.visual.spec.ts ` companion (2 of 6
510+ aria-snapshot tests ported, retargeted onto the cardback mount, regex-
511+ tolerant on a handful of pre-existing third-party icon-font/tree-select
512+ rendering leaves — see that file's own module comment),
513+ ` frontend/tests/CardImageStates.spec.ts `
514+ (error placeholder + slow-load hint), ` frontend/tests/SelectVersionSection.spec.ts `
515+ (grouping/ordering, moment (a)/(b)/(c) behavior on the sidebar layout — issue
516+ #167 — plus the funnel's implicit-cast/reset/ack and retract-on-reselect
517+ end-to-end flows), ` frontend/src/features/gridSelector/SelectVersionResults.test.tsx `
518+ (axis exclusivity, membership-driven axis rendering, disclosure tiers,
519+ SUGGESTED-chip rendering, F5 votes-off completeness), ` frontend/tests/ DisplayPage.spec.ts ` (F6: right-click + the ` ⋯ ` cue opening the shared
520+ context menu on the center sheet)
494521
495522## Known gaps
496523
@@ -509,3 +536,18 @@ described above.
509536 caller specifically; ` GridSelectorModal.tsx ` 's own sidebar layout is
510537 unchanged, so this is a rail-only fix, not a change to the shared
511538 column-breakpoint default itself).
539+ - ** Per-slot next/prev image-cycling has no unified-page equivalent**
540+ (found 2026-07-24, issue #272 parity wave 3). The classic grid's inline
541+ ❯/❮ arrows (` CardSlot.tsx ` ) let a user cycle a slot's selected image one
542+ step at a time, with wrap-around; the sheet's Select Version section is
543+ a browse-and-click surface only — no "next"/"previous" concept at all.
544+ ` CardSlot.spec.ts ` 's 3 cycling tests were dropped, not ported, for this
545+ reason (see that file's own module comment). Not tracked against any
546+ numbered gap in issue #272 's own checklist — a new finding, flagged for
547+ the owner alongside this same wave's ` card-dom-api.md ` gap below.
548+ - ** ` docs/features/card-dom-api.md ` 's DOM API contract (` data-card-* ` /
549+ ` mpc:card-selected ` ) is unimplemented on the sheet's own placed-card
550+ slots** (found 2026-07-24, same wave) — see that doc's own "Known gap"
551+ entry for the full detail; cross-referenced here since the dropped test
552+ that surfaced it ("selecting an image in a CardSlot via the grid
553+ selector") lives in this feature's own ` CardSlot.spec.ts ` .
0 commit comments