Repository navigation
fix(land): re-pin a PR that is already auto-merging - #306
Conversation
GitHub keeps an existing auto-merge request, and its commit body, when asked to enable it again, so re-landing a queued PR after a push left the old head pinned and the gate ejected it as head_moved. Queueing now disables a request pinned to another head first; the fixer's requeue shares the same path. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars.
|
|
quest land removed this pull request from the queue: the batch check failed (exit 1). �[33m�[2m✓�[22m�[39m a base push before merge 2 stops the batch without ejecting or reporting tree mismatch�[33m 1189�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m a tree mismatch logs CRITICAL, keeps landed PRs, and ejects only the unmerged batch suffix�[33m 1206�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m scopes each merge token to that PR's squash, preserving it through the queue token cache�[33m 1454�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m a lost merge response never re-merges or ejects the merged PR after restart�[33m 1502�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m a restart resolves only PRs left after successful API merges�[33m 2090�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m resumes all pending ejections after a restart during a failing batch�[33m 460�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m requests workflow write only when the selected batch touches workflows (false)�[33m 607�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m requests workflow write only when the selected batch touches workflows (true)�[33m 721�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m fails a batch whose check outlives the timeout�[33m 598�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m bounds a base conflict's comment however many paths conflict�[33m 651�[2mms�[22m�[39m
�[32m✓�[39m asynchronous land fixer �[2m(36)�[22m
�[33m�[2m✓�[22m�[39m requeues unchanged, suggests follow-up, and hands back a second ejection in the same pick�[33m 2300�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m collects a fixed conflict after a restart, pushes and pins the new Review head�[33m 1776�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m hands back handback without requeueing�[33m 1282�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m hands back protected file without requeueing�[33m 1283�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m hands back shell.nix without requeueing�[33m 1392�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m hands back default.nix without requeueing�[33m 1728�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m hands back .gitmodules without requeueing�[33m 1440�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m hands back fork without requeueing�[33m 860�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m hands back crash without requeueing�[33m 546�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m hands back invalid result without requeueing�[33m 447�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m hands back symlink result without requeueing�[33m 455�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m times out a running fixer without waiting for it�[33m 503�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m passes no host credentials to wrapper or agent, including inherited Git configuration�[33m 559�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m hands back a job after losing the enable-auto-merge response�[33m 583�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m preserves a refused-push handback across a failed comment and restart�[33m 888�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m hands back deleted branch and keeps collection usable�[33m 624�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m hands back gitfile and keeps collection usable�[33m 663�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m hands back symlink and keeps collection usable�[33m 622�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m hands back corrupt objects and keeps collection usable�[33m 1386�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m hands back oversized and keeps collection usable�[33m 1587�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m does not import private objects through alternates�[33m 999�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m ignores an alternate store when the fixed objects are self-contained�[33m 803�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m collects an already finished job after an extended daemon outage�[33m 528�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m only deduplicates the bot's own comments�[33m 1019�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m rereads the author's body immediately before recording the fix�[33m 1178�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m rejects mixing individually approved protected files�[33m 466�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m rejects new gitlinks anywhere in the tree�[33m 401�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m rebuilds pack indexes and strictly validates packs (corrupt pack: false)�[33m 1728�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m rebuilds pack indexes and strictly validates packs (corrupt pack: true)�[33m 2247�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m uses the recorded agent and leaves the author's attribution alone�[33m 2218�[2mms�[22m�[39m
�[33m�[2m✓�[22m�[39m compares protected paths at the new head against the pin and current base�[33m 646�[2mms�[22m�[39m
�[31m⎯⎯⎯⎯⎯⎯⎯�[39m�[1m�[41m Failed Tests 2 �[49m�[22m�[31m⎯⎯⎯⎯⎯⎯⎯�[39m
�[41m�[1m FAIL �[22m�[49m test/agent.test.ts�[2m > �[22mstart runs claude with every launch setting, one resolved key, and no key in its output
�[31m�[1mAssertionError�[22m: expected { …(3) } to deeply equal { …(3) }�[39m
�[32m- Expected�[39m
�[31m+ Received�[39m
�[2m {�[22m
�[2m "ANTHROPIC_API_KEY": "resolved-second",�[22m
�[2m "CODEX_HOME": "/tmp/nix-shell.H5SJVU/quest-test-3IrF0V/codex",�[22m
�[32m- "QUEST_WORKTREE_HOME": undefined,�[39m
�[31m+ "QUEST_LAND_BASE": "b1f0c40e6733d2799ba35f47b88c2456b2bfc1b6",�[39m
�[2m }�[22m
�[36m �[2m❯�[22m test/agent.test.ts:�[2m295:19�[22m�[39m
�[90m293|�[39m );
�[90m294|�[39m // Only its own key: no session credentials, harness markers, other k…
�[90m295|�[39m expect(call.env).toEqual({
�[90m |�[39m �[31m^�[39m
�[90m296|�[39m ANTHROPIC_API_KEY: "resolved-second",
�[90m297|�[39m CODEX_HOME: process.env.CODEX_HOME,
�[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/2]⎯�[22m�[39m
�[41m�[1m FAIL �[22m�[49m test/agent.test.ts�[2m > �[22mcodex runs with its key variable and reports its thread and last message
�[31m�[1mAssertionError�[22m: expected { …(4) } to deeply equal { CODEX_API_KEY: 'sk-literal', …(2) }�[39m
�[32m- Expected�[39m
�[31m+ Received�[39m
�[2m {�[22m
�[2m "CODEX_API_KEY": "sk-literal",�[22m
�[2m "CODEX_HOME": "/tmp/nix-shell.H5SJVU/quest-test-bria1I/codex",�[22m
�[31m+ "QUEST_LAND_BASE": "b1f0c40e6733d2799ba35f47b88c2456b2bfc1b6",�[39m
�[2m "QUEST_WORKTREE_HOME": "/tmp/nix-shell.H5SJVU/quest-test-bria1I/runtime/worktrees",�[22m
�[2m }�[22m
�[36m �[2m❯�[22m test/agent.test.ts:�[2m385:27�[22m�[39m
�[90m383|�[39m "-",
�[90m384|�[39m ]);
�[90m385|�[39m expect(s.calls()[0].env).toEqual({
�[90m |�[39m �[31m^�[39m
�[90m386|�[39m CODEX_API_KEY: "sk-literal",
�[90m387|�[39m CODEX_HOME: process.env.CODEX_HOME,
�[31m�[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/2]⎯�[22m�[39m
�[2m Test Files �[22m �[1m�[31m1 failed�[39m�[22m�[2m | �[22m�[1m�[32m22 passed�[39m�[22m�[90m (23)�[39m
�[2m Tests �[22m �[1m�[31m2 failed�[39m�[22m�[2m | �[22m�[1m�[32m705 passed�[39m�[22m�[2m | �[22m�[33m2 skipped�[39m�[90m (709)�[39m
�[2m Start at �[22m 20:01:24
�[2m Duration �[22m 101.46s�[2m (tests 74%, transform 17%, import 9%)�[22m
error: script "test" exited with code 1
error: recipe `_test` failed on line 33 with exit code 1
error: recipe `test` failed on line 30 with exit code 1
. |
|
Codex land fixer: (written by Codex) |
Found during moq's cutover. Re-landing moq-dev/moq#7427 after a push left its pin on the old head:
quest merge --landreported success, but the auto-merge commit body still named the previous SHA. GitHub keeps an existing auto-merge request, and its commit body, when asked to enable it again. The gate would then have ejected the PR ashead_moved.Change
A new
enqueue()inland.tsis shared byquest merge --landand the fixer's requeue:An empty or missing commit body counts as no pin.
Checks
just checkandjust testpass (706 CLI and 426 Worker tests).Review
quest review --base origin/main, round 2🤖 Generated with Claude Code
(written by Claude Opus 5.5)