Skip to content

ci: land main through GitHub's merge queue - #7613

Merged
kixelated merged 6 commits into
mainfrom
quest/m0/ci/land
Nov 2, 2026
Merged

kixelated merged 6 commits into
mainfrom
quest/m0/ci/land

Conversation

@kixelated

@kixelated kixelated commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

main still lands through the batched host gate (quest land serve). The land quest moves it to GitHub's merge queue, one PR at a time, with moq-dev/quest's queue watcher fixing and re-enqueuing dropped PRs. moq-dev/moq#7612 added the merge_group build (Queue on [self-hosted, moq-queue]).

Approach

This is the repository half of the cutover. It lands right before the ruleset switches.

  • quest pin: bumped to moq-dev/quest main, whose quest merge --land enqueues into GitHub's merge queue (moq-dev/quest#385) and still queues for the host gate while a base requires quest land.
  • Dependabot: requests landing with the one-step quest merge "$PR_URL" --land "$PR_HEAD" (#326 dropped the hold token). sh/gh/queue.test.ts asserts it. Its moq-bot token also gets merge-queues: write, which the App now holds, so it can enqueue.
  • Docs: CONTRIBUTING's landing section, README, doc/setup/dev.md, infra/README.md and nix/runner/README.md now describe the merge queue, its self-hosted Queue build, and the watcher, in place of the batched gate.
  • Quest: quest/m0/ci/land.md's Remaining drops the Dependabot item, says the host switches moq's daemon to quest land watch (watch = true), and notes that open PRs report Queue only after their next event.

Impact

  • No public API or wire change.

Alternatives

  • Bumping quest separately. The Dependabot step must change with the pin, since the pinned CLI changed quest merge's arguments.

Follow-ups

The cutover itself:

  1. moq-dev/quest's fix.md (the fixer and re-enqueue) lands.
  2. kixelated/nixos pins it and runs the watcher for moq.
  3. This PR lands.
  4. The main ruleset requires Queue and the merge queue (squash, build concurrency 1, merge limit 1), drops quest land, and keeps only the administrator bypass.

Checks

  • just check origin/main passes with the bumped quest: js, workers, gh (actionlint, zizmor, queue.test.ts, setup.test.ts), quest, shell, markdown and more.

Review

  • Reviewer: Codex (quest review --base origin/main), gpt-6.1-sol, medium, session 01a19a8d-7cb6-78a2-a23d-2d0218e60e86.
  • Round 1 on 86c0b28d8610b8504b518538f0763de65053a41a: no findings.
  • Round 2 on 6880079f302171e44775d8cfa51bb07665a0cef3 (adds permission-merge-queues: write to Dependabot's token): no findings.

(Written by Claude Opus 5.5)

🤖 Generated with Claude Code

kixelated and others added 5 commits November 1, 2026 20:22
Bump quest to a main whose quest merge --land enqueues into GitHub's merge
queue (moq-dev/quest#385), so Dependabot requests landing with the
one-step command, and describe the merge queue, its self-hosted Queue
build, and moq-dev/quest's queue watcher in place of the batched host gate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tcher

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Quest-Claim: 2e40887b9da6ab8f
@kixelated kixelated changed the title Land main through GitHub's merge queue with an async fixer ci: land main through GitHub's merge queue Nov 2, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated
kixelated marked this pull request as ready for review November 2, 2026 07:03
@kixelated
kixelated merged commit f6de612 into main Nov 2, 2026
6 checks passed
@kixelated
kixelated deleted the quest/m0/ci/land branch November 2, 2026 07:03

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ Minor suggestions only — a terminology gap, no functional impact.

Reviewed changes

  • Quest pin bumped to moq-dev/quest main (d003102129), whose quest merge --land enqueues into GitHub's merge queue while a base still requires quest land; flake.nix/flake.lock carry the rev and its new quest-pinned / nixpkgs-opencode inputs.
  • Dependabot landing is now one step (quest merge "$PR_URL" --land "$PR_HEAD"), its moq-bot token gains permission-merge-queues: write, and sh/gh/queue.test.ts asserts the new invocation. I confirmed permission-merge-queues is a valid input on the pinned actions/create-github-app-token commit.
  • Docs (CONTRIBUTING, README, doc/setup/dev.md, infra/README.md, nix/runner/README.md, quest/m0/ci/*) describe the merge queue, its Queue build, and the watcher in place of the batched host gate.

The cutover is coherent and internally consistent. No behavioral, API, or wire impact.

ℹ️ Comments outside the updated docs still name the removed landing machinery

The doc migration updates the files it lists, but a handful of comments now name the gate this PR removes (quest land serve, the "landing worker"). None affect behavior, but they point a reader at machinery that no longer runs.

Technical details
# Stale "landing worker" / "host land gate" / "host land daemon" comments

## Affected sites
- `.github/workflows/dependabot.yml:12` — "The host land daemon picks up the
  head-pinned auto-merge moq-bot enables." After this PR, `quest merge --land`
  enqueues into the merge queue (or arms GitHub auto-merge); the host runs the
  queue watcher, not a land daemon. This is the only site in a file this PR
  edits, and it contradicts the changed command two lines below.
- `justfile:99` — "The landing worker runs this gate in one job." -> the
  self-hosted queue runner (`queue.yml`).
- `justfile:101-102` — "The host land gate also sets CHECK_FAIL_FAST=1" ->
  `queue.yml` sets `CHECK_FAIL_FAST`.
- `justfile:105` — "Run the landing worker's Linux gate over the branch diff
  against BASE."
- `.github/workflows/android.yml:3` — "which no landing worker does."
- `.github/workflows/cache.yml:3` — "independently of the landing worker's local
  caches."
- `sh/kt/check.sh:39` — "the landing worker's persistent runner then keeps the
  daemons".

## Required outcome
- Each comment should name the queue runner / `queue.yml` (or drop the removed
  term), matching the wording this PR already uses in the docs.

## Notes
- `.github/workflows/queue.yml:39` ("as the host gate passed its own BASE") is a
  historical comparison inside an unchanged file; reword only if you want the
  rationale to age cleanly.
- `quest/m0/ci/*` (e.g. `five-minutes.md:55`, `nix-cache-5xx.md:14`,
  `land.md`'s baselines) uses the old terms as deliberate history/measurements;
  leave those.
- `test/drill/README.md:181` and the `nightly.yml` / `moq-sh.yml` / `alert.yml`
  references use the generic "landing gate", which CONTRIBUTING still retains as
  the section name; no change needed there.

Pullfrog  | Fix it ➔ | View workflow run | Using deepseek-v4.1-flash (free via Pullfrog for OSS) | 𝕏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant