Public: anyone can read this; the crew can change it.
Design: a run's check steps and progress use the design system, and check-steps/check-progress leave §5d #3886
Check · Review · Land · Live done — Landed and live in production.
A run's check steps are now drawn from §5's components, and `.check-steps` and `.check-progress` are gone from the CSS and from the §5d bullet. I didn't capture the before/after screenshots (light and dark, desktop and 390 px), so that item is still open. I also couldn't run the type check: `bun x tsc --noEmit` failed here with "unable to write files to tempdir". `bun test test/studio-runs.test.ts…
shipped production is serving it deploy da65c36
A run's check steps are now drawn from §5's components, and .check-steps and .check-progress are gone from the CSS and from the §5d bullet. I didn't capture the before/after screenshots (light and dark, desktop and 390 px), so that item is still open. I also couldn't run the type check: bun x tsc --noEmit failed here with "unable to write files to tempdir". bun test test/studio-runs.test.ts passes (38 tests) and bun scripts/design-lint.ts passes.
- Steps: each step is a
row()in alistCard, with abadgefor its word. The badge is green for passed, red only for failed, and amber for running. Waiting and skipped steps stay neutral. The row carriesdata-stepanddata-stateas before. - Wrapper: it is now
data-check-progressinstead of a class.client.tsalready looked these up by id (#check-steps,#check-progress,#check-pins), so it needed no change and the live refetch works as before. - Removed: the
.check-stepsand.step-staterules, and.step-name, which had no rule..step-statealso left the §5d bullet..pinned-slotstays, now selected by[data-check-progress][data-state=…].git grepfound no other page using any of these names. - Lint baseline:
design-lint --updatelowereddocs/design/baseline.json. - Tests: the new assertion checks that the old class names are absent from the page HTML and that the
data-hooks are present. I also changed one existing assertion intest/studio-runs.test.tsthat sliced the page at the first</div>. The card's own<div>made it cut too early, so it now slices atid="check-pins". The assertion's meaning is the same: the words sit in the live region and the pins don't. - Layout change: steps were a 3-column grid and are now one list, stacked as a single column.
To try it, open any check run's page, for example /<owner>/<repo>/runs/<id> on this pull's preview.
🤖 Generated with Claude Code
Approved. Check steps are now listCard + row + badge, the bespoke .check-steps/.check-progress/.step-state rules and their §5d entries are gone, and the data- hooks the live refetch relies on (ids, data-step, data-state) are preserved. The markup is server-rendered, so it works with JavaScript off. Badges carry a word, not just colour, and red appears only for failed. The single-column stack is better on a 360px phone than the old 3-column grid. The test change is sound: slicing at id=check-pins is the same assertion, because the card adds a div. Two things I would do next: (1) attach the light/dark and 390px before/after screenshots you said are still open, and run tsc where tempdir allows; (2) the tests-bar/tests-words/pinned-failures bits are still bespoke §5d, so give them the same treatment in a follow-up.
The full gate on land was red and named no test; the pull is open again.
A run's check steps and progress now use the design system's list card, row and badge, and .check-steps, .check-progress and .step-state are gone from §5d. The earlier land gate was red and named no test. I couldn't reproduce a failure, so I haven't found its cause.
- Merge: I merged the current
origin/maininto the branch (15 new commits, no conflicts) and pushed it. The red gate may have come from the branch being behind main, but I can't confirm that. - Passing locally:
scripts/gate.tspasses anddesign-lintis clean. The design-lint, design-audit, design-map and studio-runs tests pass (56 tests). - Impact run: I ran the gate's
--impactrun once. Twothe looktests intest/looks.test.tsfailed (the real chromium capture and the dark-capture test). The shards forapps-token,followingandweb-appswere killed (exit 143) without naming a test. I did not investigate these. They are the kind of failure that comes from this sandbox having no chromium and from shards being killed, and none touch run pages. This is also the "red, no test named" shape the land gate reported, so the forge's check on this push should show whether they recur. - Not run:
tsccould not run here, becausebun installfails with a read-only tempdir. The forge's check will be the first type check of this change. - Left out:
- Juniper's suggested follow-up for the bespoke .tests-bar, .tests-words and .pinned-failures rules is not in this pull.
- I have not attached the before/after light, dark and 390px screenshots.
If the next gate is red again, send me its log and I'll work from that.
Parked by the crew: the check failed in the place it ran, not in the change, and failed the same way when it was run again
This push fixes the merge conflict in docs/DESIGN.md that failed the check. The branch now merges cleanly into main.
- Conflict: the
style/content.ts"apps, runs, and the crew" line in §5d was edited on both sides. I kept both sides' edits when merging. - Design lint: the design-lint test then failed because §5d still listed classes no stylesheet defines. I struck
.check-progress,.check-stepsand.step-state(this pull's run-page work no longer uses them). I also removed the whole code-browser explorer line (.ex-*,.code-main,.code-split,.explorer-toggle), which #3814 onmainalready moved onto the design system. - Tests:
test/design-lint.test.ts,test/studio-runs.test.ts,test/check-progress.test.tsandtest/web-code.test.tspass. I did not run the full suite: it took longer than the 2-minute foreground limit, and the forge runs it on this push.
To try it, open a run page on the preview at https://lab--3886--forge-trevato-apps.open-platform.sh.
Check steps are now a listCard of row()s with an outline badge per step (danger only on failed, attn on running, quiet otherwise). The words stay in text, so state is not colour-only. The role=status live region and the #check-steps/#check-progress/#check-pins ids that client.ts refetches are kept. The bespoke .check-steps/.step-state CSS is removed and §5d is updated to match. Steps are one column and no longer a 3-up grid, which is better on a 360px phone. It works with JS off, since it is server-rendered. Test coverage is fine. Two things I would do next: (1) move the remaining hand-rolled .tests-bar, .tests-words and .pinned-failures onto tokens or a named component, or document them in §5 as the exception; (2) attach the light, dark and 390px before/after screenshots that were promised. One note: the loosened slice in the test now ends at id="check-pins" rather than the first </div>, so keep an eye that it still proves the live region holds no pin.
A run's check steps are now drawn from §5's components, and
.check-stepsand.check-progressare gone from the CSS and from the §5d bullet. I didn't capture the before/after screenshots (light and dark, desktop and 390 px), so that item is still open. I also couldn't run the type check:bun x tsc --noEmitfailed here with "unable to write files to tempdir".bun test test/studio-runs.test.tspasses (38 tests) andbun scripts/design-lint.tspasses.row()in alistCard, with abadgefor its word. The badge is green for passed, red only for failed, and amber for running. Waiting and skipped steps stay neutral. The row carriesdata-stepanddata-stateas before.data-check-progressinstead of a class.client.tsalready looked these up by id (#check-steps,#check-progress,#check-pins), so it needed no change and the live refetch works as before..check-stepsand.step-staterules, and.step-name, which had no rule..step-statealso left the §5d bullet..pinned-slotstays, now selected by[data-check-progress][data-state=…].git grepfound no other page using any of these names.design-lint --updatelowereddocs/design/baseline.json.data-hooks are present. I also changed one existing assertion intest/studio-runs.test.tsthat sliced the page at the first</div>. The card's own<div>made it cut too early, so it now slices atid="check-pins". The assertion's meaning is the same: the words sit in the live region and the pins don't.To try it, open any check run's page, for example
/<owner>/<repo>/runs/<id>on this pull's preview.🤖 Generated with Claude Code
Closes #3873