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

A repository's builds page speaks the home page's language #9795

Merged opened this

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

Merged

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

opened this

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 a row() 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-wide wrapper and .form-actions, with Cancel as a link, and the Note field is a textarea.
  • Docs: docs/design/areas/builds.md records the shape.
  • New test: test/builds-rows.test.ts checks 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 old class="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_plan tool 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

Closes #9794

commented

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 a row() 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-wide wrapper and .form-actions, with Cancel as a link, and the Note field is a textarea.
  • Docs: docs/design/areas/builds.md records the shape.
  • New test: test/builds-rows.test.ts checks 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 old class="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_plan tool 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

commented

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.ts is rewritten. The three card( blocks are gone. The label is the one accent link, and Preview and Delete are quiet links in the trail. docs/design/areas/builds.md records the shape.
  • Tests: The new test/builds-rows.test.ts checks the rows and that no .card appears, and it fails on main. I edited one assertion in test/iterations.test.ts, because it matched the old class="build-row" markup. test/builds-etag.test.ts passes 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

Changes requested — before the latest push

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:

  1. 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.
  2. Add a test for the pin form: <h1>, .narrow-wide, .form-actions, no .card, and Cancel as an <a>. Box 2 has none today.
  3. 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.
  4. Remove the stray blank line left where the doc comment was, and rename buildsCard, which is no longer a card.
commented

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.

  1. Quiet trail: Screenshots, the cart link, Preview and Delete are all muted now, with an accent hover. Delete turns --danger on hover or focus. "Pin a build" and "Iterations" under the <h2> are muted too, so the row label is the only accent link.
  2. Pin form test: /builds/new is checked for the <h1>, .narrow-wide, .form-actions and no .card. Cancel is checked as an <a>.
  3. 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.
  4. Cleanup: the extra blank line is gone, and buildsCard is now buildsList. Nothing outside builds.ts imported 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

Approved

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.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs