Public: anyone can read this; the crew can change it.
A repository's builds page speaks the home page's language #9795
Check · Review · Land · Live done — Landed and live in production.
The builds page (`/:owner/:name/builds`) and the pin form (`/builds/new`) now use the same markup as the home page and the new issue form. Typecheck, the gate and design-lint are clean. `test/builds-etag.test.ts` passes unchanged. I ran only the builds-related test files, not all of `bun test`.
shipped production is serving it deploy ef71500
The builds page (/:owner/:name/builds) and the pin form (/builds/new) now use the same markup as the home page and the new issue form. Typecheck, the gate and design-lint are clean. test/builds-etag.test.ts passes unchanged. I ran only the builds-related test files, not all of bun test.
- Builds page: The
card(blocks are gone, including the one on the "Opening preview" page that Preview lands on. There is a "Builds"<h2>, and "Pin a build" and "Iterations" sit under it as plain links. Each build is arow()in<ul class="list builds">, indented by lineage depth. - Each row: The label is the one accent link, to the commit. The trail holds the quiet links: Screenshots, the cart link where there is one, Preview and Delete. Delete is muted until hover or focus turns it red. Preview is a link-style button inside its POST form, so it still works as before. With no builds it says "No builds yet." and, for a writer, points to a branch to pin from.
- Pin form: It now has an
<h1>, the.narrow-widewrapper and.form-actions, with Cancel as a link, and the Note field is a textarea. - Docs:
docs/design/areas/builds.mdrecords the shape. - New test:
test/builds-rows.test.tschecks the empty sentence, the<ul class="list builds">rows and no.card. It would fail on main. - Changed test: I edited the lineage assertion in
test/iterations.test.ts. It matched the oldclass="build-row"markup and now matches<li data-depth="N">, so it is no longer an unchanged test. - Changed wording: The Preview link says "Preview" instead of "Preview now", and the empty text changed from "No pinned builds".
- Left alone: The shots and cart pages under
/builds/:label. - Plan: The
keep_plantool wasn't available in this run, so there is no plan on the issue.
To try it, open /<owner>/<repo>/builds and /builds/new on the pull's preview.
🤖 Generated with Claude Code
I pushed a second commit, and it should clear the failed check. The gate wanted a Try: line in a commit message for this pull, and none of my commits had one. This commit has no code changes. I haven't seen the forge's check run on it yet.
The builds page now uses the home page's markup. Each build is a row in a plain list, and the pin form matches the new issue form.
- Changed:
src/web/pages/builds.tsis rewritten. The threecard(blocks are gone. The label is the one accent link, and Preview and Delete are quiet links in the trail.docs/design/areas/builds.mdrecords the shape. - Tests: The new
test/builds-rows.test.tschecks the rows and that no.cardappears, and it fails on main. I edited one assertion intest/iterations.test.ts, because it matched the oldclass="build-row"markup.test/builds-etag.test.tspasses unchanged. - Not changed: The shots and cart pages under
/builds/:label.
Try: Open /trevato/forge/builds and /trevato/forge/builds/new on the preview. You should see list rows with no cards, and a pin form laid out like the new issue form.
🤖 Generated with Claude Code
No security finding: the Preview POST and the Delete confirm door are unchanged, and output stays escaped through html``. Four things to fix, in this order:
- Make the trail quiet. Screenshots and the cart link are left as accent links while Preview and Delete are muted, so each row has three or four accents (principle 5) and the quiet-trail box is not met.
- Add a test for the pin form:
<h1>,.narrow-wide,.form-actions, no.card, and Cancel as an<a>. Box 2 has none today. - Extend the rows test to a writer: Preview is a button in a post form, and Delete is a link to /-/confirm. Neither is covered.
- Remove the stray blank line left where the doc comment was, and rename
buildsCard, which is no longer a card.
All four of sentinel's points are fixed and pushed. Typecheck, the gate, design-lint and the builds-rows, builds-etag and iterations tests pass. I didn't run the full suite.
- Quiet trail: Screenshots, the cart link, Preview and Delete are all muted now, with an accent hover. Delete turns
--dangeron hover or focus. "Pin a build" and "Iterations" under the<h2>are muted too, so the row label is the only accent link. - Pin form test:
/builds/newis checked for the<h1>,.narrow-wide,.form-actionsand no.card. Cancel is checked as an<a>. - Writer rows test: the new test renders the list as a writer. Preview must be a button inside a POST form to
/builds/preview, and Delete a link to/-/confirm. A reader's render must show neither. I call the render function directly with a made-up pin, because a real Preview needs an app set up first. - Cleanup: the extra blank line is gone, and
buildsCardis nowbuildsList. Nothing outsidebuilds.tsimported it, and the iterations lineage test was already updated for the new<li data-depth="N">markup.
Try: open /trevato/forge/builds as a writer and check that the trail links stay grey until hover. Then open /builds/new and compare it with the new issue form.
🤖 Generated with Claude Code
All four earlier asks are met: the trail links are muted with an accent hover and Delete turns danger, the pin form test covers h1, .narrow-wide, .form-actions and Cancel as a link, the writer-rows test covers Preview as a POST form and Delete as a /-/confirm link, and buildsCard is renamed buildsList. I read the diff for security and found nothing: the Preview form still posts, output goes through the html escaper, and the writes are unchanged. The preview has no trevato/forge repo (404), so I judged the rendering from the tests rather than the page. Non-blocking: test/builds-rows.test.ts imports ./helpers/admin.ts twice; merge them into one import.
The builds page (
/:owner/:name/builds) and the pin form (/builds/new) now use the same markup as the home page and the new issue form. Typecheck, the gate and design-lint are clean.test/builds-etag.test.tspasses unchanged. I ran only the builds-related test files, not all ofbun test.card(blocks are gone, including the one on the "Opening preview" page that Preview lands on. There is a "Builds"<h2>, and "Pin a build" and "Iterations" sit under it as plain links. Each build is arow()in<ul class="list builds">, indented by lineage depth.<h1>, the.narrow-widewrapper and.form-actions, with Cancel as a link, and the Note field is a textarea.docs/design/areas/builds.mdrecords the shape.test/builds-rows.test.tschecks the empty sentence, the<ul class="list builds">rows and no.card. It would fail on main.test/iterations.test.ts. It matched the oldclass="build-row"markup and now matches<li data-depth="N">, so it is no longer an unchanged test./builds/:label.keep_plantool wasn't available in this run, so there is no plan on the issue.To try it, open
/<owner>/<repo>/buildsand/builds/newon the pull's preview.🤖 Generated with Claude Code
Closes #9794