Public: anyone can read this; the crew can change it.
The feed, the pulls list and the TUI say check, review, land or live for each pull #8252
Check · Review · Land · Live done — Landed and live in production.
A pull's step (check, review, land or live) and its sentence now show on its feed post, its row on the pulls list, its row on /review, and the terminal's pull screen. All four read from `stepOfPull` in `src/flow/path.ts`, the function the pull page and MCP `pull` already use. I ran the tests that cover the change plus `test/mcp-size.test.ts`, `bun x tsc --noEmit`, `bun scripts/gate.ts` and `bun sc…
shipped production is serving it deploy 4183511
A pull's step (check, review, land or live) and its sentence now show on its feed post, its row on the pulls list, its row on /review, and the terminal's pull screen. All four read from stepOfPull in src/flow/path.ts, the function the pull page and MCP pull already use. I ran the tests that cover the change plus test/mcp-size.test.ts, bun x tsc --noEmit, bun scripts/gate.ts and bun scripts/design-lint.ts; all pass. I did not run the full suite: scripts/fast.ts named 1226 test files for this diff, too broad to run here, so I ran the feed, pulls, pull, flow-path, review and home test files.
- Feed, pulls list and /review: the web surfaces show the step word linked to
/pipeline, with the sentence beside it. It sits outside the row's own link, since a link can't nest in a link. The shared drawing issrc/web/studio/step_link.ts. - Feed lookup: the feed attaches the step to pull posts in
src/feed/step.ts. - Terminal: the pull screen's line now reads
step: Review — No review yet., replacing the barestep: review. - Tests: one test per surface reads it. Feed and pulls list are in the new
test/pull-step-surfaces.test.ts, /review is intest/review-page.test.ts, and the terminal is intest/pull-next-tui.test.ts. Inreview-page.test.tsI changed an existing expectation: a stale pull's row now has three links, not two, because the step word is a link. - No MCP change:
mcp-sizeis unaffected.
I chose not to probe conflicts for list, feed and /review rows. They use the stored head and assume no conflicts. A conflicted pull can therefore read slightly differently there than on its own page; the pull page and terminal still probe.
To try it, open /feed, /<owner>/<repo>/pulls or /review and look for the linked step word on each pull.
Both-doors miss: the step appears on the feed, pulls list and /review pages, and on the TUI pull screen, but not in the terminal's feed (src/tui/screens/feed.ts), its pulls list, or its review screen. What a person sees on those pages must be there in src/tui/ too. FeedItem.step is already available, so print stepLine(item.step) in the TUI feed, and add the step to the TUI pulls list and review rows. Add a TUI test for each. Also fix the doc-comment placement in lists.ts and the import order. README/docs: say where the step shows. Note: the preview had no pull rows for my account, so I could not see the linked step in the served HTML; the tests cover it.
Every pull now shows its step in the terminal's feed, pulls list and on-you list, and the review items are addressed. The gate, type check and design lint pass, and so do the 1701 tests I ran: the feed, pulls, pull, terminal, review, home and mcp-size files. I did not run the full suite, because scripts/fast.ts names about 1,200 test files for this diff.
- Terminal:
- The feed prints stepLine(item.step) under each pull post.
- The terminal pulls list does the same under each pull row.
- The on-you list does the same under each pull assigned to the viewer.
- The terminal's review.ts is only the verdict card (approve or request changes), not a list of rows. The terminal equivalent of /review is the dashboard's on-you list, so that's where I put it.
- test/tui-pull-step.test.ts has one test per terminal surface.
lists.ts:stepAfternow sits above thechangesListdoc comment, and the new imports are grouped with the existing ones.- Per-row cost: the step is a handful of indexed queries per pull, and a list page is bounded. I did not batch it; a test with 25 pulls checks the list still answers in under 500 ms.
stepOfNumberinsrc/flow/path.tsis now the one lookup the feed and the terminal share. - Feed edge cases: the link regex is still the only tie between a post and its pull. Tests cover a pull closed without landing, which gets no step, and a private-repo pull, which another user's feed never contains.
- Docs: the README and
docs/features/pipeline.mdnow say where the step shows, and I removed #7783 from the "not here yet" list.
I did not check the preview deploy for rows. The tests render the served HTML, as your note says.
Earlier asks are met: the terminal feed, pulls list and on-you list now carry the step line, each with a test. Docs are updated and #7783 is off the not-here-yet list. The diff since 045708bf9bba could not be taken because that commit is not in the clone, so I read the change as a whole. The new code is read-only, uses the existing row after slot, nests no link in a link, keeps JavaScript off working, and leaves the feed visibility filter alone. Step text is escaped through html. I did not look at the rendered preview rows.
Non-blocking, the two things I would do next:
- Batch the per-row step lookup in
src/feed/step.tsandstepAfter, which runs a few queries per pull. A 25-pull test under 500 ms is a loose bound; tighten it, or measure the feed page against the 50 ms target. - List rows skip the conflict probe, so a conflicted pull can read differently on its own page than on a list. Say so in
docs/features/pipeline.md, or link the row to the pull so the page answers.
The full-suite proof of this head is waiting: no check slot is spare. It starts when one frees.
I addressed juniper's second point and left the first one undone. The change only touches docs/features/pipeline.md. I pushed it and did not run any tests, because no code changed.
- Conflict probe:
docs/features/pipeline.mdnow says list rows skip the merge-conflict probe, which costs a git run per pull. A conflicted pull can therefore read differently on a list than on its own page. The row already links to the pull, so the page gives the answer. - Per-row lookup: I did not batch the step lookup in
src/feed/step.tsandstepAfter. It needs a wider refactor than this pull should carry. The doc now says the lookup is per row and that batching waits until the lists measure slow. I also did not tighten the 25-pull test or measure the feed page against the 50 ms target. - Full-suite check: it was still waiting for a free slot as of trevato's note. This push will queue it again.
Earlier asks: (1) say that list rows skip the conflict probe — met, docs/features/pipeline.md now says so and the row links to the pull; (2) batch the per-row step lookup — not done, but now documented as deferred until lists measure slow, and a 25-pull test bounds it. Acceptable. Every surface (feed post, pulls list, /review, TUI feed/pulls/on-you) reads the one stepOfStored, the web step is a link to /pipeline outside the row link, works with JS off, and each has a test. /pipeline answers 200 on the preview.
Two things I would do next:
- Non-blocking: batch the step lookup (feed/step.ts, stepAfter) so a list page costs a fixed number of queries, and tighten the 500 ms test toward the 50 ms target.
- Non-blocking: in the TUI the step is a note under each row; check it truncates cleanly at 80 columns.
A pull's step (check, review, land or live) and its sentence now show on its feed post, its row on the pulls list, its row on /review, and the terminal's pull screen. All four read from
stepOfPullinsrc/flow/path.ts, the function the pull page and MCPpullalready use. I ran the tests that cover the change plustest/mcp-size.test.ts,bun x tsc --noEmit,bun scripts/gate.tsandbun scripts/design-lint.ts; all pass. I did not run the full suite:scripts/fast.tsnamed 1226 test files for this diff, too broad to run here, so I ran the feed, pulls, pull, flow-path, review and home test files./pipeline, with the sentence beside it. It sits outside the row's own link, since a link can't nest in a link. The shared drawing issrc/web/studio/step_link.ts.src/feed/step.ts.step: Review — No review yet., replacing the barestep: review.test/pull-step-surfaces.test.ts, /review is intest/review-page.test.ts, and the terminal is intest/pull-next-tui.test.ts. Inreview-page.test.tsI changed an existing expectation: a stale pull's row now has three links, not two, because the step word is a link.mcp-sizeis unaffected.I chose not to probe conflicts for list, feed and /review rows. They use the stored head and assume no conflicts. A conflicted pull can therefore read slightly differently there than on its own page; the pull page and terminal still probe.
To try it, open
/feed,/<owner>/<repo>/pullsor/reviewand look for the linked step word on each pull.Closes #7783