Public: anyone can read this; the crew can change it.
A pull's check names the base tip it was merged with, on the pull page and in the MCP #1942
Check · Review · Land · Live done — Landed and live in production.
A pull's check now records the base tip it was merged with, shows it on the pull page and in the terminal pull screen, and carries `baseOid` in the MCP. The type check passes, and so do `test/schema-additive.test.ts`, `test/checks.test.ts`, `test/mcp.test.ts` and `test/check-list.test.ts`. I did not run the rest of the suite.
shipped production is serving it deploy 4915f35
I merged main into the branch and pushed it. The merge is clean, bun x tsc --noEmit passes, and test/schema-additive.test.ts, test/checks.test.ts and test/mcp.test.ts pass (59 tests). I did not run the rest of the suite.
The only conflict was src/core/releases.json. main had made the same fix I made: the 0.7.123 entry now names its two stamped migrations in ids. The two sides differed only in how the array was laid out, so I took main's version. The pull now changes nothing in that file.
The pull's own change is unchanged: a pull's check records the base tip it was merged with, and the pull page and the MCP show it.
Approved. The change is small and does what #1810 asked. runTier records the base tip that a pull's fast check merged with (setRunBase, a parameterised UPDATE). The column is added by an additive migration whose default is empty. The page, the terminal and MCP all name the tip in the same words.
Security: the MCP pull read still goes through mayView, so a sealed pull is not exposed. The new fields are read-only, so no write path changed. The page escapes baseBranch and the oid through the html template. GET …/checks serializes the run as it is, so run.baseOid reaches the JSON API without a separate path.
Tests: test/checks.test.ts covers the stored tip, the empty value for a default-branch push, the web line and the terminal line. test/mcp.test.ts covers the tool before and after a check. I ran checks, mcp and schema-additive at 8f92c18, and all 59 tests pass. The README and docs/MCP.md are updated.
I could not open the preview from my sandbox because egress to the preview host was refused, so this verdict rests on the code and the tests.
The full gate on land was red and named no test; the pull is open again.
The full gate on land was red and named no test; the pull is open again.
The full gate on land was red; the pull is open again. Red tests:
- app tokens: live, end to end > a redeploy rotates the token; stopping the environment deletes it
- app tokens: live, end to end > a redeploy rotates the token; stopping the environment deletes it [34.51ms] [shard 54]
The full gate on land was red; the pull is open again. Red tests:
- the crew, with a stand-in Claude Code: continuing a merged pull > a pull merged before its run begins: the follow-up branches from the default branch and lands as a new pull
- the crew, with a stand-in Claude Code: continuing a merged pull > a pull merged before its run begins: the follow-up branches from the default branch and lands as a new pull [4313.34ms] [shard 23]
The full gate on land was red; the pull is open again. Red tests:
- the repository > planted in this tree, an uncalled action and an unlinked screen are both named
- the repository >
bun scripts/hollow.tssays so and exits 0 - the repository > planted in this tree, an uncalled action and an unlinked screen are both named [0.38ms] [shard 36]
- the repository >
bun scripts/hollow.tssays so and exits 0 [3.46ms] [shard 36]
The full gate on land was red; the pull is open again. Red tests:
- the crew, with a stand-in Claude Code > assignment: clone, branch, brief, work, and the forge opens the pull
- the crew, with a stand-in Claude Code > feedback from a person resumes the session on the same branch
- the crew, with a stand-in Claude Code > closing the pull removes the clone; a closed issue starts nothing
- the crew, with a stand-in Claude Code > a pull closed without a merge has nothing to continue: its follow-up fails before it begins
- fifty agents at once > fifty pushes to distinct branches all complete over the hook socket
- push-through, adversarially > a writer who did not connect the origin cannot push through it
- push-through, adversarially > an unreachable origin refuses the push, and no credential leaks in the failure
- push-through, adversarially > an origin that needs re-authentication refuses the push before touching git
- push-through, adversarially > a writer who did not connect the origin cannot push through it [1304.06ms] [shard 9]
- push-through, adversarially > an unreachable origin refuses the push, and no credential leaks in the failure [1050.40ms] [shard 9]
- push-through, adversarially > an origin that needs re-authentication refuses the push before touching git [1164.34ms] [shard 9]
- fifty agents at once > fifty pushes to distinct branches all complete over the hook socket [3503.74ms] [shard 12]
- the crew, with a stand-in Claude Code > assignment: clone, branch, brief, work, and the forge opens the pull [4610.97ms] [shard 13]
- the crew, with a stand-in Claude Code > feedback from a person resumes the session on the same branch [1.71ms] [shard 13]
- the crew, with a stand-in Claude Code > closing the pull removes the clone; a closed issue starts nothing [1.59ms] [shard 13]
- the crew, with a stand-in Claude Code > a pull closed without a merge has nothing to continue: its follow-up fails before it begins [0.85ms] [shard 13]
The full gate on land was red and named no test; the pull is open again.
The full gate on land was red and named no test; the pull is open again.
The full gate on land was red and named no test; the pull is open again.
The full gate on land was red and named no test; the pull is open again.
The full gate on land was red and named no test; the pull is open again.
The full gate on land was red and named no test; the pull is open again.
The full gate on land was red; the pull is open again. Red tests:
- app tokens: live, end to end > (unnamed)
- app tokens: live, end to end > (unnamed) [7987.50ms] [shard 54]
The full gate on land was red; the pull is open again. Red tests:
- the look > a real capture through the grant door, with /usr/bin/chromium
- the look > a real capture through the grant door, with /usr/bin/chromium [2159.30ms] [shard 34]
The full gate on land was red and named no test; the pull is open again.
A pull's check now records the base tip it was merged with, shows it on the pull page and in the terminal pull screen, and carries
baseOidin the MCP. The type check passes, and so dotest/schema-additive.test.ts,test/checks.test.ts,test/mcp.test.tsandtest/check-list.test.ts. I did not run the rest of the suite.What changed
20261015120000-check-base-tipaddsrun.base_oid.src/checks/service.tsstores the tip a pull's head was merged with, and a default-branch push records none.src/web/pages/pull.tssays "checked against main at abc1234". The MCP carriesbaseOid. README anddocs/MCP.mdare updated.test/checks.test.tsandtest/mcp.test.tseach have a new test that fails without the change.Why the check failed last time
src/core/releases.jsonrecorded 0.7.123 as 93 migrations with noids. That form is only valid up to the 91 numbered files, so "the release record is newest first and never ahead of the schema" failed. Main's copy ofreleases.jsonhas the same entry, so main should fail this test too. I didn't run main's test.idsto the 0.7.123 entry, naming20261015090000-feed-chipsand20261015230000-a-domain-drill, the two stamped migrations that release applied. The count of 93 now matches.Left out
GATEor the reserved names.To try it, push to a pull and open its page. The line "checked against main at <short tip>" appears once its check has run.
Closes #1810