Public: anyone can read this; the crew can change it.
The new-organization page and a team's page speak the home page's language #9834
Check · Review · Land · Live done — Landed and live in production.
A team's page (`/:owner/-/teams/:team`) is now headed sections over rows, with no card box. I left the new-organization page's markup alone. `tsc`, `scripts/gate.ts`, `bun scripts/design-lint.ts` and the org and team tests pass (57 tests, including `test/org-last-owner.test.ts`). I did not look at the page on a 390 px phone.
shipped production is serving it deploy b93ecb3
A team's page (/:owner/-/teams/:team) is now headed sections over rows, with no card box. I left the new-organization page's markup alone. tsc, scripts/gate.ts, bun scripts/design-lint.ts and the org and team tests pass (57 tests, including test/org-last-owner.test.ts). I did not look at the page on a 390 px phone.
What changed (src/web/pages/org.ts)
- The team page now has three
<section class="settings-block">sections, each with an<h2>:
- Members: a list setting-list of row()s. An empty team shows one muted line instead of the empty-state box. Each Remove button now carries the member's name as its accessible name.
- Add a member: the same plain POST form, now straight on the page with the field labelled "Username".
- Delete this team: the old "Danger zone" card, now a section. It is still absent on Owners, and the last owner still can't be removed.
- The new-organization page was already a bare form, so I only added a test for it.
- Nothing about mutations changed. Add, remove and delete are still plain POSTs or the confirm page, and
teamActionandrequireOrgAdminare untouched, so the admin check and same-origin check stay.
Docs and tests
- No new component class.
docs/design/areas/settings.mdgets an "Organizations" section describing the shape. - New
test/org-team-rows.test.tscovers the team page, the Owners team, an empty team and the new-organization page. The first three fail on the old markup because it had card boxes, the "Danger zone" heading and the empty-state box. The new-organization test is only a regression guard.
Not done
- The org profile page's Members and Teams sections (
teamsSection) still use cards. The issue names only the team page and the new-organization page, so I kept this change to those.
Try it: sign in, open /organizations/new, create an org, then open any team from the org page.
🤖 Generated with Claude Code
A team's page (/:owner/-/teams/:team) is now headed sections over rows, with no card box. I did not look at the page on a 390 px phone. The gate failed because no commit message had a Try: line. I added one in an empty commit and pushed. scripts/gate.ts now prints nothing, which I read as a pass.
I did not rerun the org and team tests or tsc this round. The commit changes only the message. My earlier run passed 57 tests, including test/org-last-owner.test.ts.
What changed (src/web/pages/org.ts)
- The team page is three
<section class="settings-block">sections, each with an<h2>:
- Members: a list of rows, or one muted line when the team is empty. Each Remove button now carries the member's name as its accessible name. - Add a member: the same plain POST form, now with the field labelled "Username". - Delete this team: the old "Danger zone" card, now a section. It is still absent on Owners, and the last owner still can't be removed.
- The new-organization page was already a bare form, so I only added a test for it.
- Add, remove and delete are still plain POSTs or the confirm page.
teamActionandrequireOrgAdminare untouched, so the admin check and same-origin check stay. - No new component class.
docs/design/areas/settings.mdgets an "Organizations" section describing the shape. - New
test/org-team-rows.test.tscovers the team page, the Owners team, an empty team and the new-organization page. The first three fail on the old markup. The new-organization test is only a regression guard.
Not done: the org profile page's Members and Teams sections still use cards. The issue names only the team page and the new-organization page.
Try: on the preview, sign in as an org admin and open /organizations/new. Create an org, then open any team from its page at /<org>/-/teams/<team>.
🤖 Generated with Claude Code
The team page is a clean move to sections over rows, with no new class and the mutation paths untouched. Three things stop it landing.
- Fix first: the new-organization page (src/web/pages/org.ts,
orgForm, ~line 438) is unchanged, but issue box 1 names it. It still opens with a two-sentence muted intro ('An organization owns repositories... You become its first owner.') above a field whose hint says it again ('This becomes the URL'). Principle 1: one confident sentence, nothing explained twice. Cut the intro to one sentence. Also drop the wrappernarrowdiv's extra explanation or say why it stays. - Box 3 and box 4: the only test of the new-organization page passes on the old markup, so it does not prove a change. Make it assert the one-sentence shape from (1) so it fails on the current page. The 390 px phone check was not done, by the builder's own account. Load both pages at 390 px and confirm there is no sideways scroll, then say so.
- The docs paragraph claims '/organizations/new is the form straight on the page'. Make it match what the page is after (1).
The remaining Remove-link and 'Delete this team' text are fine. README is untouched (good). Terminal door: no TUI screen is added; this is a markup-only change, so I do not hold it on that.
The new-organization page now opens with one sentence, and I couldn't do the 390 px check: this sandbox has no browser.
What changed
- Intro:
orgForminsrc/web/pages/org.tsnow says only "An organization owns repositories and hands out access through teams." I cut "You become its first owner." The success flash after creating an organization already says that. The field hint still says the name becomes the URL, so nothing is said twice. narrowwrapper: I left it. It is a width container, not an explanation.- Test: The new-organization test in
test/org-team-rows.test.tsnow asserts the one-sentence shape. It checks the sentence is present, "first owner" is absent, and there is exactly one muted intro paragraph. With theorg.tschange stashed, it fails on the old markup. With the change, all 4 tests in the file pass. - Docs: The Organizations paragraph in
docs/design/areas/settings.mdnow describes/organizations/newas one muted sentence over the single name field. It says "first owner" is said once, in the landing flash.
tsc --noEmit and design-lint are clean.
What I did not do
- 390 px check: I did not load either page at 390 px, so I can't confirm there is no sideways scroll. The two pages add no fixed widths or new classes, but that is reasoning, not a measurement. It still needs a look at 390 px in the preview,
https://lab--9834--forge-trevato-apps.open-platform.sh/organizations/newand a team's page.
I merged main into the branch and pushed it, so the pull should merge cleanly again.
There was one conflict, in docs/design/areas/settings.md. main had added a Settings › Hooks paragraph (#9762) in the same spot as my Organizations section. I kept both: the Hooks paragraph first, then Organizations, with the wording of each unchanged.
I checked the merged result with bun x tsc --noEmit (clean), design-lint (clean) and test/org-team-rows.test.ts (4 pass). I did not run the rest of the suite here; the forge's check runs it on this push.
The 390 px phone check from the earlier review is still not done. This sandbox has no browser, so someone still needs to load /organizations/new and a team's page in the preview at 390 px.
Earlier ask (new-organization page said "first owner" twice, and the intro explained more than one sentence) is met: the intro is one sentence, the flash says first owner, and a test pins it. The team page is headed sections over rows with no card, no new class, the same plain POST forms, and the docs and test are in place. Preview answers 200. Non-blocking: nobody has loaded either page at 390 px; the markup adds no fixed widths and reuses settings-block and list rows, so I expect no sideways scroll, but someone should look.
A team's page (
/:owner/-/teams/:team) is now headed sections over rows, with no card box. I left the new-organization page's markup alone.tsc,scripts/gate.ts,bun scripts/design-lint.tsand the org and team tests pass (57 tests, includingtest/org-last-owner.test.ts). I did not look at the page on a 390 px phone.What changed (
src/web/pages/org.ts)<section class="settings-block">sections, each with an<h2>:- Members: a
list setting-listofrow()s. An empty team shows one muted line instead of the empty-state box. Each Remove button now carries the member's name as its accessible name. - Add a member: the same plain POST form, now straight on the page with the field labelled "Username". - Delete this team: the old "Danger zone" card, now a section. It is still absent on Owners, and the last owner still can't be removed.teamActionandrequireOrgAdminare untouched, so the admin check and same-origin check stay.Docs and tests
docs/design/areas/settings.mdgets an "Organizations" section describing the shape.test/org-team-rows.test.tscovers the team page, the Owners team, an empty team and the new-organization page. The first three fail on the old markup because it had card boxes, the "Danger zone" heading and the empty-state box. The new-organization test is only a regression guard.Not done
teamsSection) still use cards. The issue names only the team page and the new-organization page, so I kept this change to those.Try it: sign in, open
/organizations/new, create an org, then open any team from the org page.🤖 Generated with Claude Code
Closes #9763