Rail-delegacy: remove the nine grey /editor rail accordions - #413
Merged
Conversation
…y elements Rail-head gains a 66px subject preview + "More details" disclosure (RD6/RD8), D14 stays the one canonical printing-id occurrence with a conditional mismatch badge (RD7), Printing Tags hangs off D14 as an identify panel (item 6), the funnel's Border/Frame/Treatment chips become the one filter/vote surface inside a tier-conditional Filters panel (RD1/RD4), Sort becomes a plain Form.Select (RD2), and Print Options/Slot Actions/Report collapse into one bottom control stack (RD5). Attributes accordion is scrapped outright. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Implements the owner-approved rail-delegacy design (
SPEC-rail-delegacy.md+ mockup, binding §D token table) for the/editorunified left rail: every one of the nine greyAutofillCollapsesections is removed and its contents folded into designed elements, per the spec's ruled dispositions (§E RD1-RD8).Disposition -> implementation map
.achipexplicit-vote fieldset (AttributesSection.tsx) scrappedAttributesSectionimport/usage removed fromDisplayPage.tsx'sRail; funnel chips (FunnelAxisRow/TreatmentChipRow, already implementingsuggestedFilterTagNames-driven SUGGESTED state +castImplicitVoteon pick) relocated into the shared Filters panel body inSelectVersionResults.tsxForm.Selectof the 6SortByOptions, inline in the SV header row.svheadrow inSelectVersionResults.tsx(funnel-sort-select), replacingNullableSortByFilterfor the rail pathGridSelectorFilters' own Jump section stays untouched for the sidebar/modal layout, just never reachable from the railCollapse; desktop inline rail + tablet drawer = a panel escaping the 380px column/drawer clippingSelectVersionResults.tsx: phone renders.fpanel.inlinein-tree; desktop/tablet renders.fpanel.float+.fscrimviaReactDOM.createPortal(..., document.body)- seeFloatFiltersPortalRoot's own comment for why a plain in-treeposition:fixednode wasn't enough (LeftRailOffcanvas'sposition:stickytraps descendant z-index in a local stacking context; caught live via a blocked Playwright click before switching to a portal).cstack; Report = smallbtn-outline-dangerexpanding to reason chips in placeControlStackcomponent inDisplayPage.tsx;ReportCardPanelalready implements the expand-in-place behavior verbatim, no changes needed thereRailHeaderrewritten:.rhead-row+.detmoretoggle +.detbody(CardMetaTable+CardDownloadFavorite)RequestedPrintingBadgebecomes conditional-on-mismatch only; also required droppingCardMetaTable's own "Canonical Card" row in the rail context (not explicitly listed in the spec's component table but required by the "exactly once" rule -CardMetaTablegained an additiveshowCanonicalCardprop, defaulttrue, unaffected everywhere else)RequestedPrintingBadgegained additiveshowOnlyOnMismatch/resolvedPrintingprops;CardMetaTablegained additiveshowCanonicalCardprop.subject/.subject.emptyinRailHeader, reusing the selected image's ownsmallThumbnailUrlIdentifyPanelinDisplayPage.tsx, wrapping the existingPrintingTagsBlock(PrintingTagPicker+ conditionalAttributeVotingPanel) verbatim - no fork.lrail/.lscrollflex trap inside the Offcanvas drawer.offcanvas-body{flex-grow:1;overflow-y:auto}already owns the scroll (no custom.lrail/.lscrollwrapper divs exist here) - confirmed via the new phone bottom-stack-reachability Playwright test, not just assertedDeviations (documented)
awarenessCopycallback names active tags, which has nothing to describe with zero active chips. Existing tested behavior preserved..svheadhas no pills row) - chip active state is now shown via each chip's owndata-active/data-stateattribute inside the Filters panel instead.FilterSettings.tsxunchanged (not re-skinned to the mockup's literal.frange/.ftree/.swtracktoken values) - re-styling those shared components would touch the Search Settings modal andGridSelectorModaltoo, which is out of scope for a rail-only round and would risk drift; flagged as a residual visual-fidelity gap, not silently dropped..idcol).Dropped tests (with justification)
DisplayPage.spec.ts: "the Attributes section casts a real tag vote when a chip is tapped" dropped outright (not replaced) -AttributesSection.tsx'suseTagVoting/submitTagVoteexplicit-vote fieldset is scrapped per RD1/O1, not relocated. The funnel chips' own implicit-vote path already has dedicated coverage (SelectVersionSection.spec.ts,SelectVersionResults.test.tsx); explicit attribute voting now lives only inAttributeVotingPanel(inside the identify panel), which keeps its own pre-existing, unmoved coverage.Two further tests were adapted, not dropped (kept in the report for completeness since their shape changed materially): the two
requested-printing-badgetests now assert the new mismatch-only contract (one asserts absence for a matched printing, the other asserts the single.mismatchstyle for a genuine mismatch) instead of the old plain/degraded two-look contract; the "clicking a collapsed section expands it" / "selecting a different slot resets the accordion" pair now exercise "More details" + the identify panel instead of the retired Attributes accordion.Measured delta (css-diff harness)
Built a computed-style extraction harness (
extract-mockup.js+ a throwaway Playwright spec +diff.js, pattern from the prior corrected-bundle round's own harness) comparing the built/editorrail againstrail-delegacy-mockup.html's own computed styles, at both 1400px (desktop, float Filters panel) and 390px (phone, inline Filters panel), across every introduced (§D.2) element type plus a sample of inherited (§D.1) ones: rail-head, subject preview, slot/name text, "More details" toggle/body, D14, identify panel band,.svhead, Sort select, Filters toggle, the Filters panel container, the filter fieldset legend, and the control stack + its legend.Result: 42/42 rows matched, 0 mismatches, 0 skipped (1400px: 26/26; 390px: 16/16).
Verification
tsc --noEmit: clean (one pre-existing, unrelatedmarkedmodule error indocsSite.ts, confirmed present before this change).npx prettier@2.7.1 --checkon every changed file: clean.npx jest: 568/568 passing (64 suites) - includes ajest.setup.tsfix (global.matchMediapolyfill gainedaddEventListener/removeEventListeneralongside the deprecatedaddListener/removeListenerpair it already had, sinceuseViewportTier.ts's modern API call was previously an unhandled crash under Jest the moment any component using it mounted - a real, previously-latent test-infra gap this round exposed).--project=chromium --workers=4, isolated port (never 3000;playwright.config.tsreverted to its original:3000/npm run devconfig before this commit - diff is clean):DisplayPage.spec.ts+DisplayLeftRailFidelity.spec.ts+SelectVersionSection.spec.ts= 44/44 passing. Also spot-checkedGridSelectorModal.spec.ts+CardDetailedViewModal.visual.spec.ts(shared-component blast-radius check forCardMetaTable's new prop and the sidebar/modalSelectVersionResultslayout) - 24/24 passing./home/ubuntu/.claude/jobs/e893dbef/tmp/rail-build/v-1400-rail-allopen-top.png,v-1400-rail-allopen-bottom.png,v-1400-more-details.png,v-1400-filters-float.png,v-390-top.png,v-390-bottom-stack.png./home/ubuntu/.claude/jobs/e893dbef/tmp/rail-build/delta-1400.md,delta-390.md.New test coverage added
Subject preview + dashed empty state; "More details" contents (and that the printing id is NOT duplicated there); single printing-id-occurrence dedup (both the "no art" and "has art" cases); mismatch badge conditional (present-only-on-mismatch, absent-when-matched); phone in-rail vs desktop/tablet float (float node provably absent at 390px, not just hidden); bottom-control-stack reachability at 390px (the §A phone-reachability hard requirement).
Checklist
pre-commitand installed the hooks withpre-commit installbefore creating any commits.Open items
docs/features/printing-tags.md/grid-selector.md's "Frontend consumer (funnel round)" sections still describe the funnel chips in their pre-rail-delegacy arrangement (always-visible above the grid, not inside a Filters panel); should be updated to reflect RD1/RD4 before/at merge. No priorSPEC-display-left-rail.md-tracking doc file exists indocs/to supersede (the spec lives only in the job tmp dir passed to this task)./editor(rail layout) - add "wiki:/editorleft-rail page needs updating for the rail-delegacy layout (accordions removed, More details/identify panel/Filters panel/control stack)" to the merge-time checklist..frange/.ftree/.swtrackvalues - flagged for a follow-up pass if the owner wants those shared components re-skinned.Co-Authored-By: Claude Fable 5 noreply@anthropic.com