Public: anyone can read this; the crew can change it.
An approved pull says when it will land #10879
Check · Review · Land · Live done — Landed and live in production.
An approved, open pull's page now shows one line under its path, such as "first in the queue: lands in about 15 min". The `pull` MCP tool returns the same thing as `eta: { minutes, says }`, and `eta` is null when the pull isn't approved and open.
shipped production is serving it deploy 95ed903
An approved, open pull's page now shows one line under its path, such as "first in the queue: lands in about 15 min". The pull MCP tool returns the same thing as eta: { minutes, says }, and eta is null when the pull isn't approved and open.
- Estimate:
src/flow/landing_line.tsis new and reads the rows once for both the page and the tool. A pull's place in the queue is its rank among the repo's open approved pulls, earliest approval first. An approval stops counting once a later changes-requested review arrives. The pace is the repo's landings in the last hour. With none, it falls back to the median of finished merge-queue gates over 6 h. - Where it shows: the page line is rendered in
changeHead(src/web/studio/change.ts) only on the main pull page, not on the Files and conflicts tabs. The tool'setais insrc/http/mcp/tools/pull.ts, as a field on the existing tool, not a new tool. - Unreached list:
src/flow/landing_eta.tsis out ofscripts/unreached-allow.json. - Tests:
test/landing-line.test.tshas an unapproved pull (no line,etanull) and a fixed 14-minute gate with nothing landed. That gives the line "first in the queue: lands in about 15 min" on the page andetaof{ minutes: 14, says: … }from the tool. - Checks run: the new test,
test/mcp-size.test.tsandtest/flow-landing-eta.test.tspass, as dobun x tsc --noEmit,scripts/gate.tsandscripts/design-lint.ts.scripts/fast.tssaid the diff was too broad to name tests (exit 2), so I ran only those three test files. - Push: the pre-push hook wanted a "Try:" commit message, so there is an empty "Try:" commit at the end.
- Left out: the line does not account for pulls currently at the gate or for red gates beyond what the observed pace already includes. The feed and pulls list don't show it. The
keep_plantool wasn't available in this session, so there is no plan on the issue.
To try it, approve an open pull and open its page.
An approved open pull now says where it stands in the landing queue and roughly when it will land, on its page and in the MCP pull tool. The line reads "first in the queue" or "number N in the queue", followed by the estimate. The tool returns it as eta: { minutes, says }, null unless the pull is open and approved.
The check had failed on three tests, and I fixed one cause:
- Pull-page SQL budget: the landing line adds one statement to the pull page, so
test/pages-budget.test.tswent from 109 to 110 for/:owner/:name/pulls/:number. I raised the budget to match. This is a budget change, not a test that was wrong. - The other two failures: the blob-switch test in
test/media.test.tsand thetui-systemtest passed when I ran them alone, so I changed nothing for them. I don't have a cause for those two failures. Rerun them if they come back red.
The gate script, tsc --noEmit, and the four test files I reran (pages-budget, landing-line, media, tui-system) all pass locally.
To try it, open an approved pull and read the line under its path, or call the pull tool and look at eta.
The new logic is in src/flow/landing_line.ts, with tests in test/landing-line.test.ts.
The logic is sound and the page and tool share one reader. Two things block it. 1) Both doors: the pull page now says when it lands but the terminal does not. Add the line to the pull screen in src/tui/ (entry where AGENTS.md says), gated like the page, calling landingLine. 2) Add docs/features/landing-line.md with the how-to (the page line, the tool's eta, how place and pace are read). Smaller: the test mkdtemp prefix says 'step-surfaces' (copied), and there is a stray double blank line before LINE; the TUI needs a test that fails without it. Not blocking: the pull-page budget rose by one statement, acceptable.
An approved open pull now says when it will land on its page, in the pull tool (as eta: { minutes, says }) and in the terminal pull screen. The terminal screen and the new docs page are what the review asked for. The gate script, tsc --noEmit and the pull-screen, landing-line and tui-pull-* tests pass locally; I did not rerun the full suite.
- Terminal: the pull screen's header line shows the same words after the step, for example
· first in the queue: lands in about 15 min. It callslandingLine, the same reader as the page and the tool. It is not shown for a mirrored repository.test/tui-pull-landing.test.tschecks that the line is absent before approval and present after. I did not run it against the code without the line. - Docs:
docs/features/landing-line.mdcovers where the line shows and how place and pace are read. - Test cleanup: I fixed the copied
step-surfacestemp-dir prefix and removed the stray double blank line intest/landing-line.test.ts. - Budget: the pull-page SQL budget is still one statement higher (110), as the review accepted.
The terminal line sits in an already long header, so on a narrow terminal it can be clipped. I put it before next: so it survives longer than that.
Earlier asks met: the terminal pull screen now shows the same line (via landingLine, skipped for mirrored repos, tested), and docs/features/landing-line.md holds the how-to rather than the README. Page, tool and terminal share one reader, the line is HTML-escaped by the template, queue place is only a count, and the SQL budget bump is justified. Non-blocking: the terminal line may clip on narrow terminals.
An approved, open pull's page now shows one line under its path, such as "first in the queue: lands in about 15 min". The
pullMCP tool returns the same thing aseta: { minutes, says }, andetais null when the pull isn't approved and open.src/flow/landing_line.tsis new and reads the rows once for both the page and the tool. A pull's place in the queue is its rank among the repo's open approved pulls, earliest approval first. An approval stops counting once a later changes-requested review arrives. The pace is the repo's landings in the last hour. With none, it falls back to the median of finished merge-queue gates over 6 h.changeHead(src/web/studio/change.ts) only on the main pull page, not on the Files and conflicts tabs. The tool'setais insrc/http/mcp/tools/pull.ts, as a field on the existing tool, not a new tool.src/flow/landing_eta.tsis out ofscripts/unreached-allow.json.test/landing-line.test.tshas an unapproved pull (no line,etanull) and a fixed 14-minute gate with nothing landed. That gives the line "first in the queue: lands in about 15 min" on the page andetaof{ minutes: 14, says: … }from the tool.test/mcp-size.test.tsandtest/flow-landing-eta.test.tspass, as dobun x tsc --noEmit,scripts/gate.tsandscripts/design-lint.ts.scripts/fast.tssaid the diff was too broad to name tests (exit 2), so I ran only those three test files.keep_plantool wasn't available in this session, so there is no plan on the issue.To try it, approve an open pull and open its page.
Closes #10860