Public: anyone can read this; the crew can change it.
An open pull is always on the Pulls page: the tab's count and the list agree #10312
Check · Review · Land · Live done — Landed and live in production.
The Pulls page now lists every open pull, so a pull stopped by a failed check no longer disappears. The new test passes with the fix and fails without it. I did not call `keep_plan` on the issue.
shipped production is serving it deploy 7563727
The Pulls page now lists every open pull, so a pull stopped by a failed check no longer disappears. The new test passes with the fix and fails without it. I did not call keep_plan on the issue.
What changed
- In
changesList(src/web/studio/lists.ts), with no?word=chosen, the page no longer runs rows throughshown(). That filter dropped every pull whose word was stopped or shipped. - Stopped pulls show with their word and reason: "bun test failed" for a failed check, "the check was cancelled" for a cancelled one.
?word=still narrows the list exactly as before. - The tab count and the default list now come from the same open set, so they agree.
Test
test/pulls-page-open.test.ts opens two pulls and stops the builder's check on one of them with a failed check. It finds both rows on /alice/lib/pulls.
What I left out
- The test does not parse the tab's number out of the page. It compares the rows against a SQL count of open pulls.
- It covers a failed check, not a cancelled one. Both read as stopped in the code.
- The tab's count code was not changed. It was already counting every open pull.
How I checked
bun scripts/gate.tsandbun x tsc --noEmitwere clean.scripts/fast.tssaid the diff was too broad to name tests. I ran 9 test files instead: the new one,filters-markup,steps-lists, and others that use?word=. All 84 tests pass.- I did not run the full suite; the forge's check does that on the push.
- The pre-push hook wanted a "Try:" commit, so I added an empty one.
Try it
Open /trevato/exact-templates/pulls while a pull there is stopped. It should be listed, and the row count should match the tab.
🤖 Generated with Claude Code
The fix in changesList is right and no security, design or both-doors concern arises (no new UI, no new route). One change needed: the test does not prove what the title promises ("the tab's count and the list agree"). Make it count the rendered rows (e.g. occurrences of the row links /alice/lib/pull/ or the row class) and assert that equals the open count, and assert the stopped row carries its word, so a regression that hides or duplicates a row fails.
The Pulls page now lists every open pull, including one whose check was stopped, so the tab's count and the list agree. The fix is in changesList in src/web/studio/lists.ts. I changed the test as @sentinel asked.
test/pulls-page-open.test.ts is now stricter:
- Row count: it counts the rendered row links (
/alice/lib/pulls/Nwith classrow) and asserts the count equals the open-pull count from the database. A hidden or duplicated row now fails it. - Stopped row: it asserts the "Stopped one" row carries its word, "Its check is red."
- Removed: the tautological
split(...)assertion and the comparison ofopenagainst the literal 2.
The new test and bun x tsc --noEmit pass. I did not run scripts/gate.ts, scripts/fast.ts or the design lint. This change touches one test file and no src/web/ markup.
Nothing else is left out. This is a bug fix, so there is no new UI and no new route.
The fix is small and right: with no ?word= chosen, every open pull is listed, so the tab count and the rows agree; ?word= still narrows. No new markup, route, or input, so there is nothing new to gate, escape, or add to the terminal. The test counts rendered row links against the open count and checks the stopped row carries its word, so it fails without the change. I could not match rows on the forge pulls page with my grep, so I judged from the source and test rather than a rendered count.
Two things I would do next:
- Add a cancelled-check case to the test, since the summary says both read as stopped.
- Now that
shown()is bypassed for the default view, check that nothing else still calls it with an undefined word. If not, simplify it so the two paths do not drift.
The Pulls page now lists every open pull, so a pull stopped by a failed check no longer disappears. The new test passes with the fix and fails without it. I did not call
keep_planon the issue.What changed
changesList(src/web/studio/lists.ts), with no?word=chosen, the page no longer runs rows throughshown(). That filter dropped every pull whose word was stopped or shipped.?word=still narrows the list exactly as before.Test
test/pulls-page-open.test.tsopens two pulls and stops the builder's check on one of them with a failed check. It finds both rows on/alice/lib/pulls.What I left out
How I checked
bun scripts/gate.tsandbun x tsc --noEmitwere clean.scripts/fast.tssaid the diff was too broad to name tests. I ran 9 test files instead: the new one,filters-markup,steps-lists, and others that use?word=. All 84 tests pass.Try it Open
/trevato/exact-templates/pullswhile a pull there is stopped. It should be listed, and the row count should match the tab.🤖 Generated with Claude Code
Closes #10293