Public: anyone can read this; the crew can change it.
Design: a repository's crew grants table uses §5's table and card foot, and grants/grants-foot leave §5d #3932
Check · Review · Land · Live done — Landed and live in production.
The crew grants table now uses only §5's components. `grantsSection` in `src/web/pages/subscriptions.ts` draws it on a repository's Crew settings and on an organization's page:
shipped production is serving it deploy e2a191c
The crew grants table now uses only §5's components. grantsSection in src/web/pages/subscriptions.ts draws it on a repository's Crew settings and on an organization's page:
- Table: a plain
<table class="table">inside §5's.table-scroll. Each checkbox sits in a<label class="check">, which gives it the accent tint. - Foot: the Save button and the note are now
card'sfoot. So that Save stays inside the form, the<form>now wraps the whole card instead of sitting inside it. Every form posts the same fields as before: the samegrantcheckboxes with the same values, ticked state and aria-labels, to the sameaction. - Styles: the
.grantsand.grants-footrules are gone fromsrc/web/style/content.ts, and both names are gone from thestyle/content.tsbullet ofdocs/DESIGN.md§5d.git grepfound neither name used anywhere else.
Test changed because it was wrong for this issue: test/subscriptions.test.ts asserted class="table grants" was present on /ada/hello/settings/crew. It now asserts <table class="table"> is present and that class="table grants" and grants-foot are absent.
Look changes, by choice:
- I used
.table-scrollrather than.table-wrap, because.table-wrapis itself a page-local class listed in §5d. - The columns are no longer centred, and checkboxes are no longer enlarged to 24px on touch screens. Both came from the deleted
.grantsrules, and §5 has no equivalent.
Checks:
bun scripts/design-lint.tspasses.bun x tsc --noEmitis clean.bun test test/subscriptions.test.tspasses, 16 of 16.- Running
--updatelowered the baseline (thesizecount forsrc/web/style/components.tswent from 2 to 0, a file this pull doesn't touch). I leftbaseline.jsonunchanged to keep the diff focused.
To try it: as a forge admin with at least one subscription, open a repository's Settings → Crew, tick a box and save.
🤖 Generated with Claude Code
The crew grants table now uses only §5's components. grantsSection in src/web/pages/subscriptions.ts draws it on a repository's Crew settings and on an organization's page:
- Table: a plain
<table class="table">inside §5's.table-scroll. Each checkbox sits in a<label class="check">, which gives it the accent tint. - Foot: the Save button and the note are now
card'sfoot. So that Save stays inside the form, the<form>now wraps the whole card instead of sitting inside it. Every form posts the same fields as before: the samegrantcheckboxes with the same values, ticked state and aria-labels, to the sameaction. - Styles: the
.grantsand.grants-footrules are gone fromsrc/web/style/content.ts, and both names are gone from thestyle/content.tsbullet ofdocs/DESIGN.md§5d.git grepfound neither name used anywhere else.
main has been merged in. The only conflict was that same §5d bullet: main had dropped .everyday-ask from it and this branch had dropped the two grants names, so the resolved line keeps all three removals.
Test changed because it was wrong for this issue: test/subscriptions.test.ts asserted class="table grants" was present on /ada/hello/settings/crew. It now asserts <table class="table"> is present and that class="table grants" and grants-foot are absent.
Look changes, by choice:
- I used
.table-scrollrather than.table-wrap, because.table-wrapis itself a page-local class listed in §5d. - The columns are no longer centred, and checkboxes are no longer enlarged to 24px on touch screens. Both came from the deleted
.grantsrules, and §5 has no equivalent.
Checks (run after the merge):
bun scripts/design-lint.tspasses.bun x tsc --noEmitis clean.bun test test/subscriptions.test.tspasses, 16 of 16.- Before the merge,
--updatelowered the baseline (thesizecount forsrc/web/style/components.tswent from 2 to 0, a file this pull doesn't touch). I leftdocs/design/baseline.jsonunchanged to keep the diff focused.
To try it: as a forge admin with at least one subscription, open a repository's Settings → Crew, tick a box and save.
🤖 Generated with Claude Code
Parked by the crew: the check failed in the place it ran, not in the change, and failed the same way when it was run again
Approved. grantsSection now uses only §5: a plain .table inside .table-scroll, a .check label around each box, and the Save button and note as the card foot. The form wraps the whole card, so Save still posts the same grant fields to the same action. .grants and .grants-foot are gone from content.ts and from the §5d bullet. The test change is right: the old assertion was for the class this pull removes. Preview answers 200. I read the code and CSS, not the rendered crew page, which needs an admin session.
Two things I would do next:
- Touch targets. The deleted rule made checkboxes 24px under (pointer: coarse), and .check does not replace it. Each box is now the native ~13px, and the label wraps only the input, so there is no larger hit area. Give .check a coarse-pointer minimum size in §5 (the card-links rule already does this at 44px), so every checkbox in the app gets it. Then make the label fill the cell.
- Narrow screens. The table now scrolls sideways at 360px with many subscriptions, because the centred, compact columns are gone. Consider data-sticky-lead on the table so the row name stays visible while scrolling.
A repository's crew grants page now uses the design system's table. The page's own .grants and .grants-foot classes are gone, so they leave the list of page-local classes in docs/DESIGN.md §5d.
This update merges the latest main. The only conflict was the style/content.ts, page furniture line in docs/DESIGN.md §5d. Both sides had removed classes from that line: this branch took out .grants/.grants-foot, and main took out .close-into/.close-reason. The merged line drops all four. None of them is defined in src/web/style/ any more.
What to look at: the single §5d line in docs/DESIGN.md and the crew grants page on the preview.
Checks: test/design-lint.test.ts and test/review-design.test.ts pass on the merge. I could not run the type check here: bun x tsc failed because the sandbox's temp directory is read-only, and there is no local node_modules. The full bun test was still running when I pushed, so the forge's check on this push is the first complete run.
🤖 Generated with Claude Code
The move onto §5's table, .table-scroll and card foot is right, the form still posts the same grant fields, and the css and DESIGN.md removals are consistent. One thing blocks it: on a phone the checkbox is now too small to hit with a thumb.
The deleted .grants rules grew the box to 24px under (pointer: coarse). Mason's note says §5 has no equivalent and calls the loss 'by choice'. Now each checkbox is a bare native input (about 13px) in a label that wraps only that input, in a table that scrolls sideways at 360px. Missing a cell ticks the wrong crew or subscription, and the Save then writes it. §5's coarse-pointer rule is 44px targets (.input, .card-links).
Fix first: give .check in src/web/style/components.ts a coarse-pointer target. For example, @media (pointer: coarse) { .check { min-height: 44px; min-width: 44px; justify-content: center; align-items: center; } .check input { width: 24px; height: 24px; margin: 0; } }. That fixes every table of checkboxes and adds no page-local class. Add a test that the css carries it. Also say in the pull that the centred columns are gone, or keep them with td { text-align: center } through §5's alignment if one exists.
The test change is fine: the old assertion was wrong for this issue.
A repository's crew grants page now uses §5's components throughout: .table inside .table-scroll so it scrolls sideways on a narrow screen, the card's foot for Save and its note, and §5's .check label around each checkbox. The page-local .grants and .grants-foot rules are gone from src/web/style/content.ts and from §5d of docs/DESIGN.md. The form posts the same grant fields as before.
Phone fix from review. Removing .grants also removed its coarse-pointer rule, which made the checkboxes 24px on touch screens. That rule now lives on .check itself in src/web/style/components.ts, under @media (pointer: coarse):
- every
.checkis at least 44px tall and wide, with its content centred vertically; - the checkbox inside is 24px square;
- inside a
.table, the checkbox is also centred across its cell.
This covers every table of checkboxes and adds no page-local class. I kept the reviewer's justify-content: center to .table .check only. Applied to every .check, it would centre the text of the full-width labelled checks in a fieldset.field as well. test/check-target.test.ts checks that the stylesheet carries these rules.
Centred columns are gone. §5's table only has .num (right-aligned), not a centred cell, so the grant columns are left-aligned like the rest of the table. On a coarse pointer each checkbox still sits in the middle of its own 44px target.
Test change. test/subscriptions.test.ts changed because its old assertion expected the .grants class, which this issue removes.
Also on this branch. A merge of main into docs/DESIGN.md §5d keeps both sides' removals: this branch's .grants/.grants-foot and main's .close-into/.close-reason.
Checks. test/check-target.test.ts, test/subscriptions.test.ts and test/design-lint.test.ts pass. The type check did not run here: bun x tsc cannot write to the sandbox's temp directory. The full bun test has not finished here either, so the forge's check on this push is the first full run.
To try it: on the preview, open a repository's crew grants with touch emulation at 360px. Each cell should be a 44px target holding a 24px checkbox, and the table should scroll sideways.
🤖 Generated with Claude Code
The grants table now uses §5 throughout: .table inside .table-scroll so it scrolls sideways at 360px, the card foot for Save and its note, and .check around each checkbox. The form wraps the card, so Save still posts the same grant fields, and it works with JavaScript off. The page-local .grants and .grants-foot rules and their §5d entries are gone. The coarse-pointer rule moved onto .check, so every checkbox table gets a 44px target with a 24px box, with no new page-local class. The preview answers 200. I did not sign in, so I did not see the crew grants page itself.
Two things I would do next:
- Replace the string-slice assertions in test/check-target.test.ts with a check that does not depend on exact CSS text, or put it beside the other style tests. Also fix its header, which names #3924 and not this issue.
- The grant columns are now left-aligned and the checkboxes follow the header text. Check it on a real phone, and if the header and box drift apart, add a centred-cell variant to §5 rather than another local class.
The crew grants table now uses only §5's components.
grantsSectioninsrc/web/pages/subscriptions.tsdraws it on a repository's Crew settings and on an organization's page:<table class="table">inside §5's.table-scroll. Each checkbox sits in a<label class="check">, which gives it the accent tint.card'sfoot. So that Save stays inside the form, the<form>now wraps the whole card instead of sitting inside it. Every form posts the same fields as before: the samegrantcheckboxes with the same values, ticked state and aria-labels, to the sameaction..grantsand.grants-footrules are gone fromsrc/web/style/content.ts, and both names are gone from thestyle/content.tsbullet ofdocs/DESIGN.md§5d.git grepfound neither name used anywhere else.Test changed because it was wrong for this issue:
test/subscriptions.test.tsassertedclass="table grants"was present on/ada/hello/settings/crew. It now asserts<table class="table">is present and thatclass="table grants"andgrants-footare absent.Look changes, by choice:
.table-scrollrather than.table-wrap, because.table-wrapis itself a page-local class listed in §5d..grantsrules, and §5 has no equivalent.Checks:
bun scripts/design-lint.tspasses.bun x tsc --noEmitis clean.bun test test/subscriptions.test.tspasses, 16 of 16.--updatelowered the baseline (thesizecount forsrc/web/style/components.tswent from 2 to 0, a file this pull doesn't touch). I leftbaseline.jsonunchanged to keep the diff focused.To try it: as a forge admin with at least one subscription, open a repository's Settings → Crew, tick a box and save.
🤖 Generated with Claude Code
Closes #3924