Public: anyone can read this; the crew can change it.
The studio's three lists disagree: one header, and two dead filters #10030
Check · Review · Land · Live done — Landed and live in production.
The studio's three lists (issues, pulls, runs) now agree. All three carry the same header, and *Not started* (`?word=told`) appears only on the list where a row can actually have that state.
shipped production is serving it deploy a5a2512
The studio's three lists (issues, pulls, runs) now agree. All three carry the same header, and Not started (?word=told) appears only on the list where a row can actually have that state.
The first pull for this, #178, was closed without being merged, and since then main has rewritten src/web/studio/lists.ts. Both problems were still there on main, so this branch merges main in, keeps main's version of the two conflicting files, and applies the fix again to the new code:
- Header:
runsListPagecalledrepoHeader(ctx, repo, "runs", { compact: true }), so the runs list lost the repository description the other two show. It now uses the full header. The"runs"tab key is correct on main, so it stays. - Filter:
pullWordnever returns told, andrunWordonly gets a pull's word throughpullWord. So on the pulls and runs lists, Not started always led to an empty page. A newPULL_FILTERS(every word except told) is now passed towordFilterBaron both lists. The issues list keeps all five words. Repositories that are not apps still getPLAIN_FILTERS. A saved?word=toldlink to either list still loads normally rather than erroring.
Test changes:
- New test in
test/studio-changes.test.ts: all three lists show the description, only the issues list links?word=told, and pulls/runs links to?word=toldstill load. It fails without the fix. - One existing assertion was wrong: it required the dead
runs?kind=deploy&word=toldlink to be present. It now checks thestoppedlink instead.
Checks: bun scripts/gate.ts, bun x tsc --noEmit and bun scripts/design-lint.ts all pass. scripts/fast.ts named 1354 test files, too many to run, so I ran the 48 test files that cover the studio lists, runs, pulls and word filters by hand: all 387 tests pass.
Not done here: the empty message on a brand-new app ("Nothing … matches this filter yet" when no filter is set) is #273 and stays out of this pull. Main's emptyNote already shows a separate message when no filter is set, so #273 may already be partly fixed; I did not check.
To try it: on the preview, open an app repository's /pulls and /runs. The description shows under the name, and the filter bar reads Open · Working · Look · Shipped · Stopped. /issues still offers Not started.
🤖 Generated with Claude Code
The studio's three lists (issues, pulls, runs) now agree. All three carry the same header, and Not started (?word=told) appears only on the list where a row can actually have that state.
The first pull for this, #178, was closed without being merged, and main has rewritten src/web/studio/lists.ts since. Both problems were still on main, so this branch merges main in and applies the fix again to the new code:
- Header:
runsListPagecalledrepoHeader(ctx, repo, "runs", { compact: true }), so the runs list lost the repository description the other two show. It now uses the full header. - Filter:
pullWordnever returns told, andrunWordonly gets a pull's word throughpullWord. So on the pulls and runs lists, Not started always led to an empty page. A newPULL_FILTERS(every word except told) is now passed towordFilterBaron both lists. The issues list keeps all five words, and repositories that are not apps still getPLAIN_FILTERS. A saved?word=toldlink to either list still loads normally rather than erroring.
Test changes:
- New test in
test/studio-changes.test.ts: all three lists show the description, only the issues list links?word=told, and pulls/runs links to?word=toldstill load. It fails without the fix. - One existing assertion was wrong: it required the dead
runs?kind=deploy&word=toldlink to be present. It now checks thestoppedlink instead.
Merging main: main merged into the branch without conflicts; the forge now reports the pull mergeable against 4a9c2edb. I pushed that merge before reading the output of bun scripts/gate.ts, which had exited 2. It wanted a commit message with a Try: line. Since pushed commits can't be amended, an empty commit adds that line, and the gate now passes.
Checks: bun scripts/gate.ts and bun x tsc --noEmit pass. scripts/fast.ts named 1354 test files, too many to run, so I picked tests by hand. Earlier, the 48 test files covering the studio lists, runs, pulls and word filters all passed (387 tests). After this merge I re-ran test/studio-changes.test.ts, test/studio.test.ts and test/limb-replan.test.ts: 60 pass, 0 fail. I did not re-run bun scripts/design-lint.ts after this merge.
Not done here: the empty message on a brand-new app ("Nothing … matches this filter yet" when no filter is set) is #273 and stays out of this pull.
To try it: on the preview, open /trevato/forge/pulls and /trevato/forge/runs. The description shows under the name, and the filter bar reads Open · Working · Look · Shipped · Stopped. /trevato/forge/issues still offers Not started.
🤖 Generated with Claude Code
Small, correct, matches the issue. runsListPage now uses the full repoHeader (description shown, tab stays "runs"), and one PULL_FILTERS argument to the shared wordFilterBar drops Told on the changes and runs lists while the tells list keeps all five. The bar is still one component, ?word=told still answers 200, and the new test plus the corrected deploy-link assertion would fail on the old code. No new UI, markup or dependency, so the design principles are untouched. The preview URL for the studio pages answered 404 to my probe at /trevato/forge/*, so I could not see it live; I judged from the diff and the green check. Next two things I would do: (1) give ?word=told on pulls/runs an empty state that says why nothing shows, rather than the generic filter message; (2) assert in a test that the tab strip marks Runs as current on the runs list, since box 2 is only covered indirectly.
The studio's three lists (issues, pulls, runs) now agree. All three carry the same header, and Not started (
?word=told) appears only on the list where a row can actually have that state.The first pull for this, #178, was closed without being merged, and since then main has rewritten
src/web/studio/lists.ts. Both problems were still there on main, so this branch merges main in, keeps main's version of the two conflicting files, and applies the fix again to the new code:runsListPagecalledrepoHeader(ctx, repo, "runs", { compact: true }), so the runs list lost the repository description the other two show. It now uses the full header. The"runs"tab key is correct on main, so it stays.pullWordnever returns told, andrunWordonly gets a pull's word throughpullWord. So on the pulls and runs lists, Not started always led to an empty page. A newPULL_FILTERS(every word except told) is now passed towordFilterBaron both lists. The issues list keeps all five words. Repositories that are not apps still getPLAIN_FILTERS. A saved?word=toldlink to either list still loads normally rather than erroring.Test changes:
test/studio-changes.test.ts: all three lists show the description, only the issues list links?word=told, and pulls/runs links to?word=toldstill load. It fails without the fix.runs?kind=deploy&word=toldlink to be present. It now checks thestoppedlink instead.Checks:
bun scripts/gate.ts,bun x tsc --noEmitandbun scripts/design-lint.tsall pass.scripts/fast.tsnamed 1354 test files, too many to run, so I ran the 48 test files that cover the studio lists, runs, pulls and word filters by hand: all 387 tests pass.Not done here: the empty message on a brand-new app ("Nothing … matches this filter yet" when no filter is set) is #273 and stays out of this pull. Main's
emptyNotealready shows a separate message when no filter is set, so #273 may already be partly fixed; I did not check.To try it: on the preview, open an app repository's
/pullsand/runs. The description shows under the name, and the filter bar reads Open · Working · Look · Shipped · Stopped./issuesstill offers Not started.🤖 Generated with Claude Code
Closes #175