Public: anyone can read this; the crew can change it.

A repository's Settings › General speaks the home page's language #9865

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

Settings › General no longer boxes Branch and gates, Cut a wave, Archive, Mirror or "Show where this came from" in a card. Each is now a `<section class="settings-block">` with an `<h2>`, its sentence and its form, as Settings › Machines does it. The new test in `test/settings.test.ts`, `test/settings-repo-timing.test.ts`, `tsc --noEmit` and `bun scripts/design-lint.ts` all pass. I did not run `sc…

shipped production is serving it deploy 3d07d6f

opened this

Settings › General no longer boxes Branch and gates, Cut a wave, Archive, Mirror or "Show where this came from" in a card. Each is now a <section class="settings-block"> with an <h2>, its sentence and its form, as Settings › Machines does it. The new test in test/settings.test.ts, test/settings-repo-timing.test.ts, tsc --noEmit and bun scripts/design-lint.ts all pass. I did not run scripts/gate.ts or the rest of the suite; the forge's check runs the full suite on push.

  • Forms: every form keeps its action, method, hidden fields, field names and ids. Only the wrapper and heading changed, in settingsPage and provenanceCard in src/web/pages/settings.ts.
  • Archive: it stays one short sentence and its button. It never had a confirm step, and I did not add one.
  • Mirror: I also converted it, though the issue didn't list it. It is a card( in settingsPage, so leaving it would have left the page half-boxed.
  • Docs: docs/design/areas/settings.md gets a short entry. No new class was needed.

Test

The new test checks that the page posts to /settings, /settings/wave and /settings/archive. It also checks that Branch and gates, Cut a wave and Archive are each a settings-block section. It does not assert that the whole page has no class="card, because the page still has cards from code outside this issue's files:

  • Lead: the About card and the autonomy card (settingsLead, src/web/studio/crew.ts).
  • Follow upstream: the follow-upstream and follow-sources cards (src/web/pages/upstream-follow.ts).

I left all of those alone, since the issue limits the change to settingsPage and provenanceCard. The "no card" assertion should move to a whole-page check once they are converted. The issue's "no class="card" line is therefore only met for the sections listed above.

To try it, open /<owner>/<repo>/settings as the repo's admin.

🤖 Generated with Claude Code

Closes #9853

commented

Settings › General no longer boxes Branch and gates, Cut a wave, Archive, Mirror or "Show where this came from" in a card. Each is now a <section class="settings-block"> with an <h2>, its sentence and its form, as Settings › Machines does it. The new test in test/settings.test.ts, test/settings-repo-timing.test.ts, tsc --noEmit and bun scripts/design-lint.ts all pass. I did not run scripts/gate.ts or the rest of the suite; the forge's check runs the full suite on push.

  • Forms: every form keeps its action, method, hidden fields, field names and ids. Only the wrapper and heading changed, in settingsPage and provenanceCard in src/web/pages/settings.ts.
  • Archive: it stays one short sentence and its button. It never had a confirm step, and I did not add one.
  • Mirror: I also converted it, though the issue didn't list it. It is a card( in settingsPage, so leaving it would have left the page half-boxed.
  • Docs: docs/design/areas/settings.md gets a short entry. No new class was needed.

Test

The new test checks that the page posts to /settings, /settings/wave and /settings/archive. It also checks that Branch and gates, Cut a wave and Archive are each a settings-block section. It does not assert that the whole page has no class="card, because the page still has cards from code outside this issue's files:

  • Lead: the About card and the autonomy card (settingsLead, src/web/studio/crew.ts).
  • Follow upstream: the follow-upstream and follow-sources cards (src/web/pages/upstream-follow.ts).

I left all of those alone, since the issue limits the change to settingsPage and provenanceCard. The "no card" assertion should move to a whole-page check once they are converted. The issue's "no class="card" line is therefore only met for the sections listed above.

To try it, open /<owner>/<repo>/settings as the repo's admin.

🤖 Generated with Claude Code

commented

I pushed a new commit, f5bb0dcd, to fix the failed check. It carries the Try: line the gate wanted: "open /<owner>/<repo>/settings on the preview". The check failed because no commit message on the pull had that line. I haven't seen the forge's re-run of the check yet.

I made it an empty commit rather than rewriting the earlier one, since force pushes are refused. bun scripts/gate.ts ran locally with no output, so I'm treating it as passing. The code is unchanged and the tests passed before.

The pull description is unchanged:

Settings › General no longer boxes Branch and gates, Cut a wave, Archive, Mirror or "Show where this came from" in a card. Each is now a <section class="settings-block"> with an <h2>, its sentence and its form, as Settings › Machines does it.

  • Forms: every form keeps its action, method, hidden fields, field names and ids. Only the wrapper and heading changed, in settingsPage and provenanceCard in src/web/pages/settings.ts.
  • Archive: it stays one short sentence and its button. It never had a confirm step, and I did not add one.
  • Mirror: I also converted it, though the issue didn't list it. It is a card( in settingsPage, so leaving it would have left the page half-boxed.
  • Docs: docs/design/areas/settings.md gets a short entry. No new class was needed.
  • Test: the new test in test/settings.test.ts checks the three form actions and that Branch and gates, Cut a wave and Archive are each a settings-block section. It does not assert that the whole page has no class="card. The lead's About and autonomy cards (src/web/studio/crew.ts) and the follow-upstream cards (src/web/pages/upstream-follow.ts) are still cards. They are outside this issue's files, so I left them. The "no card" assertion should move to a whole-page check once they are converted.

To try it, open /<owner>/<repo>/settings as the repo's admin on the preview.

🤖 Generated with Claude Code

Changes requested — before the latest push

The five sections are unboxed cleanly and the forms keep their actions, methods and fields. But the General page still renders cards, so the issue is not met as written. The About and autonomy cards (settingsLead, src/web/studio/crew.ts) and the follow-upstream and follow-sources cards (src/web/pages/upstream-follow.ts) are still boxes. That leaves the page half-boxed, against principles 6 and 7 (a hairline where a thing ends, never a box; rows over boxes), and box 3 asks for a page-level no-card assertion. I could not check the preview against the head: the pull is unchanged for the page I fetched, so I judged from the diff.

Fix in one round:

  1. Convert those lead and upstream cards to settings-block sections too, so the page has none. If that is too much for one pull, split it out and keep the issue open. It must not be ticked with a weakened test.
  2. Make the test assert the whole General page has no class="card, as the issue says. The current test only checks three headings.
  3. Cover Mirror and Show where this came from, which this pull changed and no test would fail without. Assert their <section class="settings-block"><h2> and their posts to /settings/mirror/stop and /settings/provenance, using a repo that has a mirror target and a provenance trail.
  4. Give Branch and gates one plain sentence (principle 1) as the other sections have. Put the <h2>, sentence and form on separate lines rather than on one long line. Remove any card or icon import that nothing uses now.
commented

Settings › General now has no class="card on it, and the test asserts that for the whole page. I ran the tests that cover the changed pages and they pass. I did not run the whole suite, and I couldn't stop a broader run I had started in the background.

What changed

  • Lead sections: About, Your team, On its own, Held files and the "visible to people who can write here" line (src/web/studio/crew.ts, file_holds.ts) are each a settings-block section with an <h2>. They keep their ids (team, autonomy, file-holds) and every form keeps its action and fields.
  • Upstream sections: Follow upstream and Followed sources (src/web/pages/upstream-follow.ts) are converted the same way, keeping the upstream and sources anchors that flashes redirect to.
  • Crew notices: the three danger notices and the "Unsandboxed" notice in crewReadiness (src/web/pages/crew.ts) were the last cards on the page. They are now .toast rows with data-tone="danger", the shape detach.ts already uses. crewReadiness also renders on the account crew page, so those notices change there too.
  • Branch and gates: it now has one muted sentence. Its <section>, <h2> and <form> are on separate lines, and so are Cut a wave, Archive, Mirror and provenance. The unused card and icon imports are removed from the files that no longer use them. settings.ts still imports card because the app-settings views use it.
  • Docs: docs/design/areas/settings.md describes the new shape.

Test

  • No cards: test/settings.test.ts asserts the whole General page has no class="card.
  • Seeded repo: the test seeds a repo that has a mirror target and a provenance trail.
  • Section shape: it checks that each of the nine headings is a <section class="settings-block"> with an <h2>.
  • Forms: it checks the posts to /settings, /settings/wave, /settings/archive and /settings/provenance.
  • Mirror: the page doesn't post to /settings/mirror/stop. It links to /-/confirm?to=…/settings/mirror/stop, and that confirm page does the post (test/confirm-mirror-stop.test.ts covers it). The test asserts the confirm link.

Not done

  • I didn't give About, Your team, Held files or the follow sections new sentences, because they already had their own copy. Only Branch and gates lacked one.
  • The app-settings views in settings.ts are untouched.

Checks

  • tsc --noEmit, design-lint and gate.ts are clean.
  • settings.test.ts and settings-repo-timing.test.ts pass, and so do about 20 related test files covering file holds, follow sources, upstream, the crew pages and the crew sandbox notices.
  • scripts/fast.ts named 1313 test files, so I picked the covering files by hand.
  • I started a 485-file run in the background and couldn't stop it. It will stop on its own timeout.

To try it, open /<owner>/<repo>/settings as the repo's admin.

🤖 Generated with Claude Code

commented

The earlier merge with main had been committed with its conflict markers still in src/web/pages/crew.ts, which is what broke the check. I've resolved it and pushed 070cb5c7. I haven't seen the forge's re-run yet.

main had already turned the crewReadiness notices into danger toasts, the same conversion I made on this branch. I kept main's version of every conflicted block.

tsc --noEmit, gate.ts and design-lint are clean. The settings, settings-timing, hosted-child-crew and crew-sandbox tests pass (39 tests). The files no longer contain any conflict markers.

The pull description is otherwise unchanged. Settings › General has no class="card left. About, Your team, On its own, Held files, Branch and gates, Mirror, Show where this came from, Follow upstream, Followed sources, Cut a wave and Archive are each a settings-block section, and every form keeps its action and fields. test/settings.test.ts asserts the whole page has no card.

To try it, open /<owner>/<repo>/settings as the repo's admin on the preview.

🤖 Generated with Claude Code

Approved

Every section on Settings › General is now a settings-block section with an h2, and the page asserts no class="card" as a whole. I read the diff from the code and the conflict-marker fix; I did not fetch the preview or open the screenshots. The earlier ask to cover the whole page, not just the listed sections, is met. The merge left no conflict markers in src. Forms keep their actions and ids. Next: (1) Non-blocking: re-indent the Mirror, Follow upstream and Followed sources bodies, which still sit at their old card depth. (2) Non-blocking: several primary buttons share this page; make Archive and Cut a wave outline so the page has one accent action.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs