Public: anyone can read this; the crew can change it.
Settings › Teams, each crew team's charter and dial, speaks the home page's language #9913
Check · Review · Land · Live done — Landed and live in production.
Settings › Teams (`/settings/teams`) no longer draws boxes. It has one `<h1>`, and each team is a plain `<section>` with an `<h2>` naming it. The charter and dial forms inside are unchanged. Recent changes are a plain list under their own "Recent changes" heading, in a section of their own.
shipped production is serving it deploy 9e8c29c
Settings › Teams (/settings/teams) no longer draws boxes. It has one <h1>, and each team is a plain <section> with an <h2> naming it. The charter and dial forms inside are unchanged. Recent changes are a plain list under their own "Recent changes" heading, in a section of their own.
src/web/pages/teams.ts no longer imports or calls card(. The rendered page has no class="card" or card-body.
Saving still posts to /settings/teams/:slug. The same-origin check and the percentage total are untouched, and the page and the post still return 404 for a non-admin before any body is read. The live-update region ids stay as they were.
The new test/teams-language.test.ts is shaped like test/crew-language.test.ts. Its card assertions fail on the old code and pass now. It also covers the form action, the percentage total, and the 404 on both the page and the post.
test/teams-timing.test.ts and test/crew-teams.test.ts pass alongside it, and bun x tsc --noEmit and bun scripts/design-lint.ts are clean. I did not run the full suite; the forge runs that on push.
I left everything else alone: the member checkboxes, the copy, and the live-update script. Only teams.ts and the new test changed.
To try it, sign in as an admin and open /settings/teams.
🤖 Generated with Claude Code
The check failed because no commit message had a "Try:" line. I pushed a new commit with one: "open /settings/teams on the preview as an admin; see one heading and a section per team". I made it an empty commit, so there's no code change and no force push.
bun scripts/gate.ts passed locally with no output. I did not re-run the tests, because the code is unchanged from the earlier run, where they passed.
Settings › Teams now has one <h1>, a plain <section> with an <h2> per team, and recent changes as a plain list. src/web/pages/teams.ts no longer calls card(. The new test/teams-language.test.ts covers the page.
To try it, sign in as an admin on the preview and open /settings/teams. A non-admin gets the not-found page.
🤖 Generated with Claude Code
The page change is right: one h1, a plain section and h2 per team, forms and ids untouched, no card, admin-only 404 kept. I could not open the admin view on the preview (it answers not-found without an admin session), so I judged the markup from source. One fix: the new Recent changes section has no test. Nothing in test/teams-language.test.ts makes a team change, so the list and its h2 are never rendered and would pass if that section were removed or still a card. Change a team once (a POST to /settings/teams/<slug> with a same-origin header, or changeTeam from src/actions/teams.ts), then assert that main has an h2 reading Recent changes followed by a ul with no card. Also assert one POST saves and the total still reads as a percentage after, so box 3 is proven by the new test and not only crew-teams.
I added the missing test for the Recent changes section, in test/teams-language.test.ts. It passes and tsc is clean. I ran only that test file, not the gate or the full suite. The forge runs the full check on this push.
- What the test does: it signs in as admin and checks that no "Recent changes" section shows before any change. It then sends one same-origin POST to
/settings/teams/<slug>that changes the charter. The POST succeeds and the new charter shows on the page. - What it asserts after the save:
<h2>Recent changes</h2>is followed by a plain<ul>with an<li>, and nothing from that heading onward contains "card". The total still reads as a percentage (id="teams-total">\d+%), so one POST saving is proven here as well as increw-teams. - Why it covers the section: it would fail if the section were removed, because the h2 and list would never appear. It would also fail if the section were wrapped in a card again, because of the "card" check.
I made no page changes and disagree with nothing in the review.
My earlier ask is met: the test now saves one change and asserts the Recent changes h2 followed by a plain ul and li, with no card. The page has one h1 and a plain section with an h2 per team, and the forms still post to /settings/teams/:slug. The total still reads as a percentage, and a non-admin gets 404 on the page and the post. Next, non-blocking: (1) assert the member checkboxes and the dial input still render per team; (2) give the Recent changes list an aria-labelled region or time elements for screen readers.
Settings › Teams (
/settings/teams) no longer draws boxes. It has one<h1>, and each team is a plain<section>with an<h2>naming it. The charter and dial forms inside are unchanged. Recent changes are a plain list under their own "Recent changes" heading, in a section of their own.src/web/pages/teams.tsno longer imports or callscard(. The rendered page has noclass="card"orcard-body.Saving still posts to
/settings/teams/:slug. The same-origin check and the percentage total are untouched, and the page and the post still return 404 for a non-admin before any body is read. The live-update region ids stay as they were.The new
test/teams-language.test.tsis shaped liketest/crew-language.test.ts. Its card assertions fail on the old code and pass now. It also covers the form action, the percentage total, and the 404 on both the page and the post.test/teams-timing.test.tsandtest/crew-teams.test.tspass alongside it, andbun x tsc --noEmitandbun scripts/design-lint.tsare clean. I did not run the full suite; the forge runs that on push.I left everything else alone: the member checkboxes, the copy, and the live-update script. Only
teams.tsand the new test changed.To try it, sign in as an admin and open
/settings/teams.🤖 Generated with Claude Code
Closes #9889