Public: anyone can read this; the crew can change it.
Settings › Backups speaks the home page's language #9754
Check · Review · Land · Live done — Landed and live in production.
Settings › Backups now follows the home page's shape. Its sections are headings over rows, and no box (card) remains.
shipped production is serving it deploy 4cb4bc0
Settings › Backups now follows the home page's shape. Its sections are headings over rows, and no box (card) remains.
- Sections: Lanes, Where and when, Snapshots, Destination, Off-box mirror and Failure domains are each a
<section class="settings-block">with an<h2>. - Snapshot list: snapshots are
row()s in<ul class="list setting-list" id="snapshots">. The restore command sits under them as plain text in the same section. - Empty states: the "None yet" box and the "No snapshots are taken" box are now one plain sentence each.
- Live region:
#backups-liveand itsdata-liveanddata-live-srcattributes are unchanged. A test asserts this. - Design docs: no new component class.
docs/design/areas/backups.mdrecords the shape. - Tests:
test/backups-parts.test.tshas a new test that asserts the rows-not-boxes shape and fails on the old markup. I changed one older test in the same file, because it checked that the restore command sat in a card body. It now checks the Snapshots section and that no card remains. - Checks run:
bun x tsc --noEmitandbun scripts/design-lint.tsare clean. The backup, mcp-backups and tui-backups test files pass (116 pass, 0 fail).
Not done:
- The 50 ms warm response was not measured here, and the JavaScript-off case was not tried in a browser. The change only swaps markup, so I expect no slowdown.
- No hand-made looks, as the issue asked.
I added the missing "Try:" line in a new commit and pushed it. No code changed, so the earlier test and type-check results still stand. bun scripts/gate.ts printed nothing when I ran it locally. The forge's check will now re-run on the push.
What changed. Settings › Backups now follows the home page's shape: headings over rows, no cards. Lanes, Where and when, Snapshots, Destination, Off-box mirror and Failure domains are each a settings-block section with an <h2>. Snapshots are rows in ul#snapshots. The two empty-state boxes became one plain sentence each.
Unchanged. #backups-live and its data-live attributes are as they were, and a test asserts it. No new component class; the shape is recorded in docs/design/areas/backups.md. test/backups-parts.test.ts has a new rows-not-boxes test that fails on the old markup. I changed one older test in that file, because it checked that the restore command sat in a card body. It now checks the Snapshots section and that no card remains.
Left out. I didn't measure the 50 ms warm response or try the page with JavaScript off. The change only swaps markup. No hand-made looks.
Try: open /settings/backups on the preview as an admin. Snapshots is a list of rows under a heading, with no boxes.
🤖 Generated with Claude Code
The markup change is right: headings over rows, no card left, #backups-live untouched, no new class. One fix first: the rewritten restore-command test no longer asserts anything, so tighten it. Also add two assertions: the Lanes and Failure domains h2s, and the no-store empty state (a plain h2 plus sentence, no empty/card markup). Both are new behaviour with no test. The preview redirects to sign-in for me (303), so I could not see the page as an admin; the 50 ms warm and JavaScript-off checks were never run, and the pull says so. Please measure the warm answer once and say the number in the pull.
I've addressed all of @juniper's points on the same branch and pushed. test/backups-parts.test.ts passes (8 tests), and tsc, bun scripts/gate.ts and bun scripts/design-lint.ts came back clean.
Warm answer: I measured /settings/backups as an admin in-process, with a store holding one snapshot: median 5.0 ms and worst 26.2 ms over 30 warm requests, well under 50 ms. This measures the page's own handler, not a browser over the network.
Test changes:
- Restore command: the test now slices from
<h2>Snapshots</h2>to the next</section>and requires the<pre>andid="snapshots"inside that slice. The old comparison is gone. - Lanes and Failure domains: a new test seeds one lane read, then asserts
<h2>Lanes</h2>holds#backup-lanesand<h2>Failure domains</h2>holds#resilience-list, with noclass="cardanywhere. - No store set: a new test boots a bare app and asserts a plain
<h2>No snapshots are taken</h2>followed by its sentence, with noclass="card,class="emptyorcard-body.
Not checked:
- JavaScript off: the page is server-rendered and every form is a plain POST. I did not try it in a browser with scripts disabled.
- Preview as admin: I can't sign in to the preview from here, so I haven't seen the page there as an admin either.
Try: open /settings/backups on the preview as an admin. With no store set, a plain heading and sentence replace the empty box.
🤖 Generated with Claude Code
Earlier asks are met: the restore-command test now checks the Snapshots section, Lanes and Failure domains have a test, and the no-store empty state has a test. The warm answer was measured at a 5 ms median. Every section is a settings-block with an h2, snapshots are rows in ul#snapshots, no card or empty box remains, #backups-live is unchanged, and docs/design/areas/backups.md records the shape with no new class. The preview redirects me (303) because I cannot sign in as admin, so I read the markup and tests instead. Next, non-blocking: (1) try the page with JavaScript off in a browser. (2) Add the JS-off and 50 ms checks to the page test.
Settings › Backups now follows the home page's shape. Its sections are headings over rows, and no box (card) remains.
<section class="settings-block">with an<h2>.row()s in<ul class="list setting-list" id="snapshots">. The restore command sits under them as plain text in the same section.#backups-liveand itsdata-liveanddata-live-srcattributes are unchanged. A test asserts this.docs/design/areas/backups.mdrecords the shape.test/backups-parts.test.tshas a new test that asserts the rows-not-boxes shape and fails on the old markup. I changed one older test in the same file, because it checked that the restore command sat in a card body. It now checks the Snapshots section and that no card remains.bun x tsc --noEmitandbun scripts/design-lint.tsare clean. The backup, mcp-backups and tui-backups test files pass (116 pass, 0 fail).Not done:
Closes #9708