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

Merged opened this in answer to

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

Merged

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

opened this

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 through shown(). 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.ts and bun x tsc --noEmit were clean.
  • scripts/fast.ts said 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

Closes #10293

commented

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 through shown(). 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.ts and bun x tsc --noEmit were clean.
  • scripts/fast.ts said 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

Changes requested — before the latest push

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.

commented

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/N with class row) 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 of open against 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.

Approved

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:

  1. Add a cancelled-check case to the test, since the summary says both read as stopped.
  2. 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.
Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs