Skip to content

Port/drop the 6 Proposal-H-parked Playwright spec files - #427

Merged
WilfordGrimley merged 3 commits into
masterfrom
port-parked-specs-proposal-h
Jul 24, 2026
Merged

Port/drop the 6 Proposal-H-parked Playwright spec files#427
WilfordGrimley merged 3 commits into
masterfrom
port-parked-specs-proposal-h

Conversation

@WilfordGrimley

Copy link
Copy Markdown

Description

Closes the owner-ruled port wave for the six spec files parked "Proposal H switchover" since the /editor route swap (#389). Per-file disposition:

File Disposition Notes
CommonCardback.visual.spec.ts DROP (deleted, ack-tokened) No unified-page replacement exists to port onto; the owner's replacement UX (export-time reminder) is a separate, not-yet-built design.
SelectedImagesRibbon.spec.ts DROP (deleted, ack-tokened) All 12 tests exercise bulk multi-select editing, which has no surface on /editor today — a genuine capability gap, not obsolete/duplicate coverage. See parity table below.
ProjectEditorMobileScroll.spec.ts DROP (deleted, ack-tokened) All 4 tests assert CSS/testids (left-panel/right-panel/add-cards-panel, OverflowCol's chainScroll) that only exist on the classic, fully-unrouted grid layout. #266's own mobile fix (a bottom-sheet drawer) is a different mechanism with its own dedicated coverage already in DisplayPage.spec.ts.
PDFGenerator.spec.ts PORT (un-skipped) Re-homed onto /print (FinishedMyProject's PDF tab) via a new shared navigateToPrintPDFTab helper. Component itself unchanged by the route swap — every assertion (testids, modal copy, localStorage key, timing) carries over unmodified.
PagePreview.spec.ts PORT (un-skipped, all 3 kept) Checked against DisplayPage.spec.ts/OrphanRendering.spec.ts for duplication — none found. See dedup table below.
PostExportContributionPrompt.spec.ts PORT (un-skipped) Re-homed onto /print; renamed off its stale "classic Print! tab" title (ack-tokened rename).

SelectedImagesRibbon.spec.ts parity table (12 tests, all dropped)

Behavior Covered by an existing unified-page spec? Verdict
Select 1/N cards, bulk change query No — no multi-select surface on /editor Genuine gap (issue #272 item 6)
Select 1/N cards, bulk change selected image No Genuine gap
Bulk-change blocked when queries differ No Genuine gap
Select 1/N cards, bulk delete No Genuine gap
Select then clear selection No Genuine gap
Select Similar (front/back) No Genuine gap
Select All No Genuine gap

None of these are redundant or product-obsolete — the capability (select several cards, act on all of them at once) simply isn't built on the new page yet. CardSlot.spec.ts's own wave-3 port comment (pre-existing, not from this PR) independently documents the same finding. Flagging for the owner as an open gap, not silently dropping coverage of something that still exists.

Upstreamability note (task-end ledger check, docs/upstreaming/extractable-primitives.md): SelectedImagesRibbon.tsx and CommonCardback.tsx are untouched by this PR — only their test files are deleted, no extraction/refactor happened. Per the ledger's own scope ("did this change produce or destroy a primitive with no vote-system dependency"), the honest answer here is no ledger row needed — nothing was extracted or destroyed, the components remain exactly as they were, in-tree, unrouted-but-intact.

ProjectEditorMobileScroll.spec.ts parity vs. issue #266

Issue #266 (DisplayPage.spec.ts's "phone viewport (issue #266)" describe block, pre-existing) covers the actual mobile-UX replacement: the left rail becomes a bottom-sheet drawer on slot tap at phone width, closable via Escape. ProjectEditorMobileScroll.spec.ts's 4 tests instead assert overscroll-behavior-y CSS on OverflowCol's chainScroll prop across stacked classic-grid panels — a materially different mechanism (scroll-chaining between two always-mounted stacked columns) that doesn't structurally exist in the new bottom-sheet-drawer design. Not a like-for-like port target; genuinely obsolete given the redesign, not a coverage loss.

PagePreview.spec.ts dedup table (3 tests, all kept)

Test Checked against Verdict
"shows the fast DOM preview by default..." DisplayPage.spec.ts/OrphanRendering.spec.ts (dozens of page-preview-slot assertions) Not a duplicate — asserts the page-preview container testid, which neither file ever references
"toggling to exact preview switches to the pdf.js canvas render, and back" same Not a duplicate — preview-mode-toggle only exists on PDFGenerator.tsx's own mount; /editor's sheet has no toggle at all
"the fast preview reflows live when page margins change..." same Not a duplicate — "Spacing & Margins" controls are PDFGenerator.tsx-only (grep-confirmed); /editor has no margin controls

Cluster-8 ruling (toolbar = project-wide canonical entry, rail = per-slot override)

Added one new test to CardSlot.spec.ts (CardSlot's own rail Select Version section overrides just one slot's back, leaving the project-wide cardback (and sibling slots) untouched) — the toolbar entry point (CardbackToolbarButton's modal, project-wide) was already asserted with real behavior in GridSelectorModal.spec.ts (pre-existing wave-3 work), but nothing previously asserted the rail's own per-slot override leaves siblings/the project default alone. Both entry points now have a real behavior assertion.

/print cold-compile race under parallel workers

Verifying at 4 workers surfaced net::ERR_ABORTED on navigateToPrintPDFTab's waitForURL — multiple spec files (this PR's three ports, plus pre-existing DisplayFinishFooter.spec.ts/UnsavedWorkGuard.spec.ts) all first-hit /print's cold on-demand dev-mode compile simultaneously under parallel workers. Added a toPass retry (same pattern openAddCardsDropdown already uses) to navigateToPrintPDFTab and bumped the three ported files' own test timeout to 60s so the retry has headroom. This reduced but didn't eliminate the flake under heavy concurrent, unrelated system load (see Verification below) — CI's own retries: 2 absorbs the residual.

Deviations from spec

None from the task's own disposition table. One addition beyond the six named files: the Cluster-8 CardSlot.spec.ts test (explicitly requested "extend existing files if natural").

Verification

  • Isolated runs (each ported file alone, --workers=1): all green.
  • Focused mixed run (PagePreview/PDFGenerator/PostExportContributionPrompt/DisplayFinishFooter/UnsavedWorkGuard/CardSlot, --workers=4): 36/36 green, twice.
  • Full-suite runs at 4 workers (4 consecutive runs, this session): my changed files were consistently green in 3 of 4 runs; the 4th run's lone PagePreview.spec.ts failure (net::ERR_ABORTED after the full 45s retry window) coincided with uptime load average 6.78-8.90 and another concurrent worktree's own dev-server + Playwright process actively running on the same shared box (confirmed via ps aux) - every other failure across all 4 runs (HomepagePanel, ImportCSV, DisplayLeftRailFidelity, OrphanRendering, DynamicLogo) is a pre-existing file this PR does not touch, confirming general box contention rather than a regression in this port. The cleanest run (load average 1.33 after the rival worktree finished) had zero failures in any file this PR touches.
  • npx tsc --noEmit: clean.
  • npx jest --silent: 573/573 passed, 65/65 suites.
  • npx prettier@2.7.1 --check on every changed file: clean.
  • .github/scripts/coverage_delta.py --base origin/master: clean, 19 acked violations (18 drops + 1 rename), 0 unacked.
  • pytest .github/scripts/tests/test_coverage_delta.py: 25/25 passed (fixed one hardcoded-filename smoke-test assertion that went stale once PDFGenerator.spec.ts was un-skipped).
  • python3 .github/scripts/docs_lint.py: clean.
  • Fidelity specs (DisplayLeftRailFidelity.spec.ts etc.): untouched, not modified by this PR (its one observed failure above is the same box-contention pattern, not a regression from this change).
  • Deferred: a fully green run of the entire ~300-test suite simultaneously with zero unrelated contention - not achievable on this shared box during this session; see the box-contention evidence above.

Manual testing

  • Ran each ported spec file's tests headed against the isolated dev-server port (3417, to avoid colliding with a concurrent worktree's own server on 3000) and confirmed the PDF tab, image-failure modal, bleed-override controls, and post-export prompt all render and behave as asserted.
  • Confirmed via git show/grep that all data-testids the ports depend on (pdf-preview-image-failures, image-failure-confirm-modal, page-preview, preview-mode-toggle, post-export-contribution-prompt, etc.) are unchanged in PDFGenerator.tsx/PagePreview.tsx/PostExportContributionPrompt.tsx — none of these components were touched by the Proposal H route swap, only their reachable route changed.

Documentation updated

  • docs/features/pdf-generator.md — fixed stale claims that ProjectEditor.tsx/the classic "Print!" tab are still live mounts (they're fully unrouted since Swap Proposal H's unified page onto /editor, redirect /display #389); updated the PostExportContributionPrompt.spec.ts key-files bullet.
  • docs/features/print-export-page.md — same staleness fix in the post-export-contribution-prompt section.

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: see Manual testing above.
  • I have updated any relevant documentation or created new documentation where appropriate.

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

Drops CommonCardback.visual/SelectedImagesRibbon/ProjectEditorMobileScroll
(genuine gaps/obsolete-layout coverage, ack-tokened); ports PDFGenerator/
PagePreview/PostExportContributionPrompt onto the standalone /print route;
adds a CardSlot.spec.ts test for the rail's per-slot cardback override
(Cluster-8 ruling); fixes now-stale doc references to the classic Print!
tab in docs/features/pdf-generator.md and print-export-page.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@WilfordGrimley
WilfordGrimley merged commit 029013e into master Jul 24, 2026
12 checks passed
WilfordGrimley added a commit that referenced this pull request Jul 24, 2026
…gress-bar text assertion, .modal-content bg after #425's theme-defaults pass

PR #427 (landed after this branch's original base) un-skipped
PDFGenerator.spec.ts/PagePreview.spec.ts/PostExportContributionPrompt.spec.ts
onto the shared navigateToPrintPDFTab helper, which the new cardback
reminder gate now intercepts; PR #425's theme-defaults pass separately
re-routed every Modal's content background to $theme-raised-bg.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
WilfordGrimley added a commit that referenced this pull request Jul 24, 2026
…erience (#431)

* Add cardback reminder gate, apply-all/set-default prompt, and PDF-wait experience (progress bar + What's That Card? embed)

Implements SPEC-cardback-pdfwait.md PKG1 (no-cardback reminder gate,
toolbar/rail apply-all + set-default prompts with affected-slot
thumbnails, custom-cardback flip-icon indicator) and PKG2 (determinate/
indeterminate PDF generation progress bar, embedded What's That Card?
game during PDF wait with teardown-to-outro).

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

* Fix rebase fallout: reminder gate in navigateToPrintPDFTab, stale progress-bar text assertion, .modal-content bg after #425's theme-defaults pass

PR #427 (landed after this branch's original base) un-skipped
PDFGenerator.spec.ts/PagePreview.spec.ts/PostExportContributionPrompt.spec.ts
onto the shared navigateToPrintPDFTab helper, which the new cardback
reminder gate now intercepts; PR #425's theme-defaults pass separately
re-routed every Modal's content background to $theme-raised-bg.

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

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
WilfordGrimley added a commit that referenced this pull request Jul 24, 2026
…I onto Tokyo-11

PR #431 landed after the original sweep with its own hardcoded #302-derived
literals (CardbackApplyPrompt.tsx, useCardbackReminderGate.tsx,
PDFWaitPanel.tsx, SlotCardbackControl.tsx, plus a new DisplayPage.tsx line) -
migrated onto var(--bs-*)/var(--theme-*) tokens the same way the rest of the
sweep was, including simplifying the primary/info/success at-rest button
text to use the token directly (Tokyo-11's action colours are light enough,
unlike #302's, so the separate hand-picked tint literals aren't needed any
more). CardbackPdfWaitFidelity.spec.ts's own literal assertions updated to
match, comment-linked per row.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
WilfordGrimley added a commit that referenced this pull request Jul 24, 2026
… Semi radius) (#438)

* Re-theme site to Tokyo-11 (Tokyo Night base, orange action, purple accent, Semi radius)

Owner-ruled palette swap (theme-options study, palette 11) on top of #425's
token-layer pass: new colour/radius tokens in _theme-tokens.scss, Bootstrap
variable + runtime var(--bs-*)/var(--theme-*) wiring in styles.scss (incl.
the AAA button-ink flip and a WCAG/APCA audit fold-in: opaque accent focus
ring, .btn-close/.fbtoggle target-size fixes, a lightened muted token),
accent wiring across D14/chips/toggles/selection outlines, a sitewide sweep
of hardcoded old-palette literals onto token references, and matching
DisplayLeftRailFidelity.spec.ts updates.

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

* Merge master (#427/#405/#440), re-theme PR #431's cardback+PDF-wait UI onto Tokyo-11

PR #431 landed after the original sweep with its own hardcoded #302-derived
literals (CardbackApplyPrompt.tsx, useCardbackReminderGate.tsx,
PDFWaitPanel.tsx, SlotCardbackControl.tsx, plus a new DisplayPage.tsx line) -
migrated onto var(--bs-*)/var(--theme-*) tokens the same way the rest of the
sweep was, including simplifying the primary/info/success at-rest button
text to use the token directly (Tokyo-11's action colours are light enough,
unlike #302's, so the separate hand-picked tint literals aren't needed any
more). CardbackPdfWaitFidelity.spec.ts's own literal assertions updated to
match, comment-linked per row.

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

* Fix PagePreview.tsx CustomCardbackDot missed by #431 merge sweep

Post-merge re-scan (coordinator's ask) caught one more #302-derived
literal (#431's own PagePreview.tsx diff) - the flip-button custom-cardback
indicator dot's warning colour wasn't yet routed to var(--bs-warning).

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

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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