Skip to content

Design system: deck rules, navigation and pickers (#248) - #282

Merged
plainprogrammer merged 29 commits into
mainfrom
057-deck-design-rules
Nov 10, 2026
Merged

plainprogrammer merged 29 commits into
mainfrom
057-deck-design-rules

Conversation

@plainprogrammer

Copy link
Copy Markdown
Owner

Summary

Spec 057 / #248 (roadmap item 14a): the design system states the rules the deck issues build on, ships the CSS they need, and shows both in six updated previews. It is documents, additions.css, previews and one view class; it changes no helper, model, route, query, export or migration, and touches no tenant data.

  • Rules (README and component docs): navigation with Decks (header: Collection, Decks, Search, Scan, Locations; tab bar: Collection, Decks, Search, Scan, More), the mana-* colour rule and a Charts rule, the deck vocabulary (a new "Decks" section), grouped location pickers, the card page's three stats and full-width "In decks" table, Locations lists places only. The README's "≥6:1" is corrected to 5.5:1.
  • CSS, each block under its own (spec 057 …) heading and proved in headless Firefox (red first): grouped-select labels and options; the collection filter's location select up to 300px from a 640px collection (c-select--wide, the one view line; Set and Language selects stay 220px); c-stats--three; and the header's logo mark standing in for the wordmark from 640px to 719px while the nav holds five or more links (decision 19, below).
  • Owned in code: no file tells anyone to upstream a pattern or wait for a re-export (CLAUDE.md, the skill, README, additions.css, six component and area docs).
  • Guard: spec/design_system_tokens_spec.rb keeps ink-muted and line-strong at 3:1 on every surface in all three tokens.css blocks (lowest pair 3.010:1).

Spec 1.1.0, decision 19 (found by a guard)

The guard for "five header links fit at 640px", written against the app's own layouts/_appbar rather than the preview, failed: the account menu ended 54.6px past the bar. The maintainer ruled the logo mark from 640px to 719px (wordmark from 720px). Two calls inside the ruling, approved at the visual review: the swap applies only while the nav holds five or more links (today's four-link header is unchanged until #49), and it ends at 720px (five links plus the wordmark fit from a 695px viewport).

Verification

  • Targeted: spec/system/design_system_deck_rules_spec.rb (16), spec/design_system_tokens_spec.rb (6), spec/design_system_files_spec.rb (7), spec/requests/collection_location_select_spec.rb (15): 44 examples, 0 failures. The whole suite is 3103 examples; the pre-push bin/ci passed on 8ed34efe.
  • Document criteria are read against the text and recorded, with the AC-7.4 grep hits, in verification.md.
  • Implementation review (read-only Opus): SPEC-ALIGNED WITH MINOR FINDINGS (0 blocking, 0 major, 4 minor, 5 nits); fixed or recorded, see verification.md.
  • Spec, plan and plan reviews (two rounds) are under docs/specs/057-deck-design-rules/.

Screenshots

Real Collector CSS, headless Firefox. The maintainer's visual review approved them (with one change, the Collection tab uses the app's grid icon, shown below as re-shot).

Header at the swap's edges: 640px (mark), 719px (mark), 720px (wordmark)

Light Dark
header at 640px (light) header at 640px (dark)
header at 719px (light) header at 719px (dark)
header at 720px (light) header at 720px (dark)

Header and pages at 1280px

Light Dark
AppHeader preview (light) AppHeader preview (dark)
CollectionPage preview (light) CollectionPage preview (dark)
ItemPage preview (light) ItemPage preview (dark)

Phone width (390px frame): tab bar, collection, card page

Light Dark
TabBar (light) TabBar (dark)
CollectionPagePhone (light) CollectionPagePhone (dark)
ItemPagePhone (light) ItemPagePhone (dark)
ItemPage at 390px (light) ItemPage at 390px (dark)

Grouped select (the form select and the filter select as open lists; the real dropdown is the browser's own)

Light Dark
grouped select (light) grouped select (dark)

Location filter: 300px against the Set select at 220px (700px), both 220px (390px)

Light Dark
filter cap at 700px (light) filter cap at 700px (dark)
filter cap at 390px (light) filter cap at 390px (dark)

Notes

Closes #248.

🤖 Generated with Claude Code

plainprogrammer and others added 29 commits November 10, 2026 07:17
#248)

Version 0.3.1, Draft. Eight stories and eight requirements from the
maintainer's rulings of 2026-11-10 (decisions 1 to 13, 17 and 18), after
two read-only spec review rounds. Index rows added for 057, with the
supersessions recorded both ways for 004, 019, 021, 029 and 037.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Version 1.0.0, Status Approved. The maintainer approved at Gate A on
2026-11-10 (option A) with Q17 and Q18 ruled A and decisions 14 to 16
confirmed. The index row moves from Draft to Approved.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Sixteen phases: the filter's label class, the grouped-select, location cap and
three-stat CSS each after their failing browser example, the header and tab bar
guards, the contrast floor, the documents, six previews, then the verification
record. Draft, for the plan review and Gate B. The index row's Plan cell is
"present".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Round 1 (read-only Opus) found 0 blocking, 7 major and 8 minor; all fixed: font
longhands on the optgroup, a selected option in the probe, the batches, the
Decks icon in TabBar.md, the README and phone-page sentences, a missed
re-export line in an area doc, a header measure whose control can fail, and
the preview scripts. Round 2: APPROVED.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…C-4.6, #248)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… (spec 057 AC-4.2, AC-4.3, #248)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…om a 640px collection (spec 057 AC-4.4, #248)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…7 AC-5.2 to AC-5.4, #248)

Three equal columns with line dividers at 900px and at 328px, restating the
export's narrow rules for three. The four-up and single strips are unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… (spec 057 AC-2.3, #248)

Compares ink-muted and line-strong with the three surfaces in each colour block of
tokens.css, unrounded. The lowest pair is line-strong on the light surface-sunken at
3.010:1. A control example proves the check flags a lowered token.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…d its guard spec (spec 057 AC-7.3, #248)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…, three stats and Locations (spec 057 FR-2, FR-4 to FR-6, #248)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…the skill and CLAUDE.md follow the vocabulary and the ownership rule (spec 057 FR-3, FR-5, FR-7, #248)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…nedTile, ItemTile and two area docs (spec 057 FR-7, #248)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The guard for AC-1.3 found that the app's own header overflows with five
links from 640px: the account menu ends 54.6px past the bar. The maintainer
ruled option A (decision 19): the logo mark replaces the wordmark from 640px
to 719px while the nav holds five or more links. AC-1.3 is rewritten (it could
not pass), AC-1.5 and AC-1.6 added, a fourth CSS block planned, and Phase 5 of
the plan, the README's Navigation and AppHeader.md lines revised.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…e header holds five links (spec 057 decision 19, AC-1.3 to AC-1.6, #248)

From 640px to 719px, while the nav holds five or more links, the mark replaces the
wordmark so five links fit before the account menu. Four links keep the wordmark, and
from 720px the wordmark returns. Guards for five tabs at 360px and controls for both
fit measures are in the same spec.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…d mana rules, the new navigation and its own ownership (spec 057 FR-1 to FR-3, FR-7, #248)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…on order (spec 057 FR-1, #248)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
# Conflicts:
#	docs/specs/README.md
… Scan, Locations and the five tabs (spec 057 FR-8, #248)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…decks table and the new navigation (spec 057 FR-8, #248)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The red and green runs, the measurements, the document criteria read against
the text, the AC-7.4 grep hits with their readings, and 26 screenshots of the
previews, the header at the swap's edges, the grouped select and the filter's
cap, in both themes.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… icon (spec 057 FR-8, #248)

The maintainer's visual review: the phone tab bar's Collection tab in the
previews drew the export's layers icon; the app's tab bar draws
icons/_collection (a grid). The five previews with a tab bar now use the app's
icon, and the eight 390px screenshots that show it are re-shot.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Read-only Opus review: SPEC-ALIGNED WITH MINOR FINDINGS (0 blocking, 0 major,
4 minor, 5 nits). Fixed: AppHeader.md's logo sentence, SingleStat.md's
"switch back" bullet, spec 057 in the Sources of the two area docs, ManaCost.md's
repeated words, a comment's wrap in additions.css. The review is recorded in
verification.md; the stale memory files are left to session wrap.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The design system is owned in code (the memory says it as settled), the
retired spec 019 follow-ups memory is deleted (PR #66 merged 2026-10-12), a new
reference memory records the additions.css guard counts and the RuboCop traps of
a new browser spec, and a lesson records that five header links fit in the
previews but overflowed the app's header by 54.6px.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…and lots (#248)

Spec 057's rules live in docs/design-system/ (the design system is the area's own
reference); the two area docs get its decision 12 wording, a Spec 057 line in
their Sources and a Distillation log row. The architecture README lists the
spec in both rows and in the design-system note, and the specs index row reads
Frozen with its plan owed a retirement.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ocs (spec 027 D4)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…248)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
# Conflicts:
#	docs/architecture/catalog-core.md
#	docs/specs/README.md
# Conflicts:
#	docs/architecture/catalog-core.md
#	docs/specs/README.md
@plainprogrammer
plainprogrammer marked this pull request as ready for review November 10, 2026 15:03
@plainprogrammer plainprogrammer self-assigned this Nov 10, 2026
@plainprogrammer
plainprogrammer merged commit e90b3a2 into main Nov 10, 2026
9 checks passed
@plainprogrammer
plainprogrammer deleted the 057-deck-design-rules branch November 10, 2026 15:05
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.

Design system: deck rules, navigation and pickers

1 participant