Skip to content

Proposal H pane migration: build the display rail's remaining sections - #194

Merged
WilfordGrimley merged 1 commit into
masterfrom
proposal-h-pane-migration
Jul 19, 2026
Merged

Proposal H pane migration: build the display rail's remaining sections#194
WilfordGrimley merged 1 commit into
masterfrom
proposal-h-pane-migration

Conversation

@WilfordGrimley

Copy link
Copy Markdown

Closes #164

Summary

Builds the four rail sections DisplayPage.tsx (/display) still had as
labeled stubs, per docs/proposals/proposal-h-unified-display-page.md's
§5 component-mapping table (the "left-panel unification" step of the pane
migration):

  • Attributes — the tri-state attribute-chip taxonomy
    (attributeChips.ts), now voted on via a shared useTagVoting hook
    extracted from AttributeChipPanel.tsx (unchanged public behavior,
    AttributeChipPanel.test.tsx still green). The rail renders the same
    Chip/vote-submission logic in a plain vertical stack instead of a ring
    around a card image, fetching this slot's tag consensus via the existing
    APIGetTagConsensus endpoint (same one bleedPriorResolution.ts already
    uses for the export-time bleed prior).
  • Print Options — the per-card bleed override (Auto / Force bleed /
    Force trimmed), reusing the exact projectSlice selector/action and a
    newly-exported isBleedNormalizationEligible (from PDF.tsx) so the
    classic PDF tab's BleedOverrideSettings panel and this rail section
    share one eligibility rule instead of two that could drift. (The
    original stub's "blocked on Proposal B PR-2" note is stale — that PR
    shipped; see docs/features/pdf-generator.md's Proposal B status.)
  • Artist — inherits ArtistSupportLink directly, exactly as
    docs/features/artist-support-links.md anticipated this surface would
    once built.
  • Slot Actions — the same getCardSlotMenuActions list CardSlot.tsx's
    3-dot dropdown/context menu use, rendered as a plain action list rather
    than a dropdown overlay, per the design doc's own instruction for this
    section.

Scope

This is #164 only (pane migration + left-panel unification). Explicitly
NOT touched, per the task's own scope fence:

Performance benchmark (owner condition: before AND after)

Reused the existing scroll/virtualization benchmark harness landed by PR
#178 (frontend/tests/perf/display-scroll.bench.spec.ts,
playwright.perf.config.ts) unmodified — a 120-card/15-sheet deck,
scrolled through in steps under 4x CPU throttling, sampling fps/heap/
mounted-<img>-count/long-tasks. Ran it on the untouched baseline first
(before any edit in this branch), then again after landing this change:

Metric Before (baseline) After (this PR)
Avg fps (target ~60) 58.7 59.8
p95 frame time 23.0ms 22.7ms
Peak JS heap 256.5 MB 256.5 MB
Max simultaneously-mounted <img> tags (of 120) 16 16
Long tasks (>50ms) during scroll 1 (86.0ms) 0

No regression — numbers are effectively flat, within normal run-to-run
noise. This is the expected result, not just a lucky one: this PR's
changes are confined to the rail (mounted per-slot on selection), and the
benchmark's own scroll flow never selects a slot — it exercises the sheet
stack's virtualization, which this PR doesn't touch. A flat result
confirms the rail work didn't regress sheet scroll performance; it isn't
evidence about the rail's own render cost under this harness, which wasn't
designed to measure that.

Verification

  • npx tsc --noEmit — clean.
  • npx jest — 43 suites / 402 tests passed (includes
    AttributeChipPanel.test.tsx, unchanged behavior after the
    useTagVoting extraction).
  • npx playwright test (full suite, 273 tests) — 272 passed, 1
    (ImportCSV.spec.ts) failed under full-suite resource contention and
    passed cleanly in isolation (pre-existing flake, unrelated to this
    change — not touched by this PR).
  • npx prettier@2.7.1 --check on every changed frontend file — clean.
  • Updated tests/DisplayPage.spec.ts: fixed 3 existing assertions that
    referenced the old Attributes stub text, added tagConsensusTwoUnresolvedTags
    to every slot-selecting test's mocks (the Attributes section fetches on
    slot-select regardless of whether it's expanded — same eager-fetch
    precedent ChooseImageSection already set), and added 4 new tests (one
    per newly-built section).

Docs

Open items for the owner

  1. Switchover (§6 step 3: making /display the default nav entry point
    over /editor) isn't part of "left-panel unification" by name — left
    undone and unguessed. Separate call needed on when/whether to flip it.
  2. No dedicated ineligible-source (e.g. non-Google-Drive/local-file)
    Playwright coverage for the Print Options section — every existing
    card fixture used in this PR's tests is Google-Drive-sourced, so the
    ineligible branch is exercised only by the pre-existing
    isBleedNormalizationEligible/BleedOverrideSettings coverage, not a
    new dedicated test. Flagging so it's a known, not silent, gap.

@WilfordGrimley

Copy link
Copy Markdown
Author

Wiki-maintenance check (CLAUDE.md's Tooling rules): confirmed against .github/wiki-publish-map.json and docs/documentation-process.md rather than assumed. docs/proposals/ is explicitly excluded from every publish target, so the proposal doc edit needs no wiki action. docs/features/artist-support-links.md and docs/README.md aren't in the publish map either. docs/features/pdf-generator.md and docs/features/printing-tags.md ARE mapped and will auto-publish to the wiki via the existing docs-wiki-publish.yml CI on merge to master — no manual wiki edit needed (docs/documentation-process.md: "Never hand-edit a wiki page this system manages").

Merge-time checklist:

  • No manual wiki edit required for this PR — see note above.

Full report (six-field standing format): https://github.com/ProxyPrints/ProxyPrints.github.io/blob/report-relay-proposal-h-pane-migration-99146/docs/reports/2026-07-19-proposal-h-pane-migration.md

@WilfordGrimley
WilfordGrimley marked this pull request as ready for review July 19, 2026 22:15
@WilfordGrimley
WilfordGrimley merged commit e8ad147 into master Jul 19, 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.

Proposal H: pane migration + left-panel unification (with before/after perf benchmark)

1 participant