Public: anyone can read this; the crew can change it.

One trunk: merge upstream-main into main (10 known conflicts: keep the fork's shape, bring over the three release entries and the few upstream-only fixes) #1433

Merged opened this in answer to

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

Merged

This pull merges `upstream-main` (`8b41446`) into `main` (`e6d9bc0`) as a single merge commit that keeps both histories. Once it lands, `git merge-base --is-ancestor upstream-main main` is true, so upstream can be fast-forwarded to this trunk and the two stop diverging. `bun x tsc --noEmit` is clean. 18 test files covering the changed areas pass, including `check-list` and the 7 run before resolvi…

shipped production is serving it deploy 84c60a0

opened this

This pull merges upstream-main (8b41446) into main (e6d9bc0) as a single merge commit that keeps both histories. Once it lands, git merge-base --is-ancestor upstream-main main is true, so upstream can be fast-forwarded to this trunk and the two stop diverging. bun x tsc --noEmit is clean. 18 test files covering the changed areas pass, including check-list and the 7 run before resolving; the full gate has not been run here. In this sandbox the socket-based suites need FORGE_TEST_SOCKET=port. Every one of the 265 test files appears exactly once, in either the gate or the excluded list.

Where the same feature existed twice, the fork's version stays:

  • Review loop: src/crew/review.ts and src/crew/dispatch.ts keep the three-round "Handed to a person" card, the reviewerId field and the sweep's once-per-stall skip log. Upstream's skipped() helper and its actorId field are dropped.
  • Gate list: scripts/gate.ts keeps the fork's list, which already had chaos, fuzz-found, fuzz-parsers and themes.
  • Review test: test/review-from-check.test.ts stays the fork's (#1237).

Brought over from upstream:

  • Release entries: src/core/releases.json gets 0.7.66 through 0.7.71, newest first. That is six entries, not three: the fork's list also stopped at 0.7.65.
  • Small fixes: the spawn-first-boot 500 ms bound, test/themes.test.ts (the fork's gate already named it but the file was missing), docs/BACKLOG.md, and the two observability steps in check.yml (runner limits, and the heartbeat/CI_SUMMARY lines).
  • Review owed from the check's green, with one late send (#1216): this merged in from upstream, and the fork's 0.7.66 entry already announced it. src/web/studio/asks.ts shows both reasons a pull waits: the reviewer asked three times, and review ran late. Upstream's test for it is now test/review-from-green.test.ts and is in the gate, so it doesn't collide with the fork's file of the same name.

One upstream-only feature the issue didn't list, kept on purpose: release 0.7.70's merge check. A pull's fast check now runs on the pull merged into its base's tip, and a merge conflict turns the check red with the conflicting paths. A writer also gets a "Check again" button. This lives in src/checks/merged.ts and src/checks/again.ts, plus NO_MERGE in judgeFailedCheck, the button in src/web/pages/pull.ts, and the route. That release is already live upstream, so dropping it would roll production back and leave the 0.7.70 entry describing something that isn't there.

The cost is that src/checks/service.ts now uses upstream's code for this step. The fast tier's FORGE_CHECK_BASE is the base's tip, not the fork point, which is right because the checkout is already the merge. test/check-tiers.test.ts is upstream's version, including the base-tier ordering. That block is what to review most closely.

Not done here: moving upstream-main forward. That is a person's step after this lands, and the roll itself is #1424's.

To try it: open a pull on a repository whose forge.json has check.fast. The check log starts with merge of <head> into main@<tip>, and a conflicting pull shows does not merge into main: <paths>.

🤖 Generated with Claude Code

Closes #1431

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs