Repository navigation
feat(land)!: retire the batching host gate, quest land serve - #707
Conversation
Quest-Claim: 08159aa57be9aef1
No repository lands through `quest land serve` any more: moq, quest, rust2 and rind use GitHub's merge queue, and moq.pro the watcher's own queue, whose base still requires the unreported `quest land` check. Delete serve's batching, parking, halting, base fixer, overlap screening and squash-push code with its tests and README section. The helpers the watcher shares move to `land-daemon.ts`; the fixer's base-alone mode and `QUEST_LAND_BASE` go with it. Serve's log names stay in log pruning so its leftover logs still expire. Fixer and landing tests that only serve drove now run on the watcher's own queue. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 36 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
I reviewed the whole retirement of quest land serve: the code it deletes, the shared helpers it moves, the cleanup of the fixer's base-alone mode, and the README and test rewrites. I also ran tsc, tsc -p src/core, prettier --check ., and the test/land.test.ts, test/land-watch.test.ts and test/land-prune.test.ts suites. All 127 tests pass.
- Shared daemon plumbing moved to
land-daemon.ts: I diffed the trimmed lines of the moved code againstland-serve.tsonmain. Only the file header, the imports, thestartDaemondoc wording and the narrowedinstallationTokenoptionstype differ. - Batch, park, halt and base-fixer code deleted:
build,combine,screener,startFixer,collectFixers,collectJob,proposeFixand the halt/park modules are gone. The watcher still usesprepare,launch,settle,importFix,publishHead,mergeBaseandCOLLECTION_ATTEMPTS, and all of them stay. quest land fixrequires PR numbers: commander now declares<prs...>as required, andfix()also rejects an empty list.validate()drops itsprflag, and the prompt's "The base alone" section is removed.QueueFailureslimmed to{ plan, reason }: both producers are updated (land-watch.tshandle()andland-queue.ts), and so is the test assertion.- Log pruning: serve's log-name families still expire. Only
watch-job-records now keep a log alive, andfailure.jsonno longer does. QUEST_LAND_BASEno longer stripped: the change coversSTRIPPED, thequest agent --helptext and the test.- README and
--help: the serve section is replaced by a new "The land fixer" subsection and a self-contained own-queue section. I checked the claims against the code: the ejection reasons inresolveQueue, and thebatch/pr-<n>branches the watcher'spreparecall supplies. The anchor links now point to#the-watchers-own-queue. Nothing stale is left in the source, README,CONTRIBUTING.mdordocs/. - Quest tree:
retire.mdis deleted. The epic is sized[M], and its 2026-11-01 and 2026-11-06 decisions are still recorded in the epic README.
The coverage gap that remains is the one the PR body already names: land-head.ts paths such as the prepared-head restart, refused fallback, stale-pin 405/409 retries and tree mismatch no longer have an end-to-end test. The suggested follow-up quest covers it.
claude-opus-5-5 | 𝕏
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ered Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
Since the last review, the branch merged main, which brings in #652's signal handling, and added a follow-up quest. I checked the merge resolution against main's land-fixer.ts and ran tsc (root and src/core) and prettier --check .. I also ran the land, land-watch, land-prune, signals, agent, cli and usage suites: 228 tests pass and 1 is skipped.
- Resolved the conflict in
land-fixer.ts: onmain, #652 put the re-enqueuereadSignalscheck and itssaveCarryinside serve'scollectJob, so both went away with it. The watcher has its own copy of that path inland-watch-fix.ts:SignalRefusal,job.signaledand theunanswered_signalmarker. The shared pieces stayed:SignalRefusal,carriedBy,saveCarryandcarriedOf. - Kept the signal ejection in
land.ts:resolveQueuestill reads signals, so the own queue ejects held picks asunanswered_signal. - Dropped the serve-only signal tests: the watcher still covers the same behavior.
test/land-watch.test.tshas "a fix whose dropped head drew a finding while the fixer ran", and the own queue has "the land fixer's requeue hands back a head a finding drew while it ran". - Updated the README and
--help: "Signals that hold a head" now sits under the watch section and names the own queue instead of serve's queue. The watcher's token without a fixer now asks forcontents: write, which disarming a signaled PR needs. Apart from the deliberate comment atland-prune.ts:9, nothing in the source, README,CONTRIBUTING.mdordocs/still mentions serve, halt or park. - Added the follow-up quest
quest/m0/own-queue-landing-tests.md: it is sized [S] and covers theland-head.tslanding paths that lost their end-to-end tests, as the PR's Decisions section records. The unusedCOLLECTION_ATTEMPTSimport was also removed fromtest/land.test.ts.
claude-opus-5-5 | 𝕏
|
quest land watch: the merge queue removed this pull request at 6c645aa because it conflicts with The land fixer works on it in the background, and the watcher re-enqueues it at the back of the queue once it is fixed or judged flaky, or hands it back here with what it needs. (written by quest land watch) |
|
codex, gpt-6.1-sol, medium effort land fixer note:
(written by codex, gpt-6.1-sol, medium effort) |
|
codex, gpt-6.1-sol, medium effort land fixer: CONFLICT (content): Merge conflict in src/cli/land-fixer.ts CONFLICT (modify/delete): src/cli/land-halt.ts deleted in 6c645aa1a1e47cd4a20314eb33b13462e4ea4619 and modified in HEAD. Version HEAD of src/cli/land-halt.ts left in tree. Auto-merging src/cli/land-head.ts Auto-merging src/cli/land-queue.ts CONFLICT (modify/delete): src/cli/land-serve.ts deleted in 6c645aa1a1e47cd4a20314eb33b13462e4ea4619 and modified in HEAD. Version HEAD of src/cli/land-serve.ts left in tree. Auto-merging src/cli/land-watch-fix.ts Auto-merging src/cli/land-watch.ts Auto-merging src/cli/land.ts CONFLICT (content): Merge conflict in src/cli/land.ts Auto-merging src/cli/main.ts CONFLICT (modify/delete): test/land-fixer-diagnostics.test.ts deleted in 6c645aa1a1e47cd4a20314eb33b13462e4ea4619 and modified in HEAD. Version HEAD of test/land-fixer-diagnostics.test.ts left in tree. Auto-merging test/land-watch.test.ts Auto-merging test/land.test.ts CONFLICT (content): Merge conflict in test/land.test.ts Automatic merge failed; fix conflicts and then commit the result. (written by codex, gpt-6.1-sol, medium effort) |
Follows #705's moves into src/github/ and keeps serve's deletions; adds a host-independent tests follow-up quest. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
Since the last review, the branch merged main after #705, which moved GitHub code into src/github/, and it added a second follow-up quest. I ran tsc on the root and on src/core, prettier --check . and quest check (24 documents ok). The land, land-watch, land-prune and agent suites also ran: 171 tests pass and 1 is skipped.
- Pointed the surviving imports at
src/github/:land.tsnow takesLAND_CHECK,pin,pinnedandReasonfrom../github/landand no longer defines them itself.land-fixer.ts,land-daemon.ts,land-watch.tsandmain.tsimport from../github/client,signalsandlandinstead of the old./github,./signalsand./land.test/land.test.tsnow getsEJECTEDandpinfromsrc/github/land. Nothing still imports the deleted serve, halt or park modules. The other./githuband./statusimports insrc/cliresolve to files that still exist onmain. - Added the follow-up quest
quest/m0/host-independent-tests.md: it is sized [S] and covers the/workfixture cwd intest/usage.test.tsand the ambient gateway variables reachingtest/review.test.ts. The PR's Decisions section records both. The test names and fixture details it cites match the current files.
claude-opus-5-5 | 𝕏

Finishes quest/m0/queue-watcher/retire.md: no repository lands through
quest land serveany more, so the batching host gate is deleted.Precondition, checked 2026-11-13
merge_queuerule with theirQueuecheck. moq-dev/moq.pro requiresquest landplusMain queue, which is the watcher's own queue: the own queue relies on the unreportedquest landcheck, as the quest's Plan says. moq-dev/studio requires onlyCheck; moq-dev/kixel.ai and kixel-ai/dotfiles require only the Pullfrog approval.quest-land*unit on the maintainer's hosts runsquest land watch(moq, quest, rind, rust2 on one host, moq.pro on another). None runsquest land serve.Changes
src/cli/land-serve.ts,land-park.tsandland-halt.ts, and thequest land servecommand. The helpers the watcher shares (App tokens,save,excerpt, the private repository, state paths, locks,startDaemon,daemonLoop) moved to the newsrc/cli/land-daemon.ts.land.tsloses batch building, overlap screening and the in-daemonquest check(build,combine,screener,BatchPolicy,Overlap,Rejection).land-fixer.tsloses the batch fixer's start and collection (startFixer,collectFixers,collectJob), the base fixer, and its fix PR.mergeBase,prepareHead,mergePinned, the fallback,launch,settle,importFixandpublishHeadstay, since the watcher uses them.quest land fixnow needs at least one PR number,parseBaseFixis deleted, and so is the prompt's "The base alone" section. The prompt's "quest land then checks the base alone" clause went with it.QueueFailurerecord keeps onlyplanandreason. Serve'sFailurefields (ejections,numbers,tip,blame,log) were never read.base-,check-,batch-,fix-job-,fix-base-), so the logs serve left still expire. Serve's leftoverfix-job-/fix-base-records andfailure.jsonno longer keep their logs alive, since nothing reads them now.QUEST_LAND_BASE, which only serve's sandbox set, is no longer stripped fromquest agent's environment.quest land apply, quest-link pruning, and tokens and locks. The own-queue section now describes its own picks, ejections and landing path (fallback, retries) instead of pointing at serve.quest land watch --helpwas reworded the same way.[M]for its remaining end-to-end run.Tests
test/land-fixer-diagnostics.test.ts, which drovestartFixer/collectFixers. The watcher suite's crash handback covers the same exit-code path.fixerFixturenow drives the watcher's own queue with a real fixer. On it I ported the fixer tests for shared code: credential isolation, agent start at the base, the four deadline and admission tests, the pipe burst, the signal and unidentified-process handbacks, the five import-bound handbacks, both alternates tests, comment quoting and redaction, and token redaction. The fourquest land applytests now get their handback from the watcher.just checkandjust testpass locally.Choices made without asking
land-daemon.tsrather than intoland-watch.ts, becauseland-bump,land-queue,land-watch-fixandland-watch-flakyimport them too.batch/pr-<n>branches, which the watcher still supplies, so I left that wording alone.land-head.tskeeps that code untested by an end-to-end run. See the follow-up below.[M]now that its last child is gone.Models
Size: M
Implementer: Claude Code, claude-opus-5-5, medium effort
Implementer: Claude Code, claude-opus-5-5, low effort (iterate, S)
Overlap
#652 also edits
src/cli/land*.tsandREADME.md. The work is different, but expect merge conflicts with it.Follow-ups
quest/m0/own-queue-landing-tests.md, [S], added in this PR): ports the deleted serve landing tests to the own queue: prepared-head restart, fallback push refused or base moved, transient "Repository not found", stale-pin 405/409 retries, tree mismatch, workflow-scoped merge tokens.quest/m0/host-independent-tests.md, [S], added in this PR):test/usage.test.ts:665assumes/workis absent (still true in feat(usage)!: price sessions through token-max, across SSH hosts #704's rewrite) andtest/review.test.ts:540likely sees ambient gateway variables; both failed on the land fixer's host on main alone.Decisions
land-head.tspaths, user's answer 2026-11-13 (/quest-run pick round): ✅ add an [S] follow-up quest (rejected: port the tests in this PR; drop).Merge with main
Merged main after #652 (signals). Kept its carry records (
saveCarry,carriedBy) andSignalRefusalinland-fixer.ts, which the watcher uses; dropped its edits to serve'scollectJoband its serve-only tests (a prepared head carrying the pin's finding, and twocollectFixershandbacks), whose watcher counterparts from #652 remain. README: moved "Signals that hold a head" under the watch section, with serve's queue replaced by the own queue, and kept #652'scontents: writereason for the watcher's token.quest land watch --helpkeeps #652's signal sentence.Merged main again after #705 moved GitHub code into
src/github/: kept serve's deletions (land-serve.ts,land-halt.ts,land-fixer-diagnostics.test.ts) and pointed the surviving imports atsrc/github/client,signalsandland(LAND_CHECK,pin,Reasonnow live there rather than inland.ts).land-daemon.tsandland-watch.tsimports updated likewise.(Written by Claude Opus 5.5 with medium; iterated by Claude Opus 5.5 with low)
🤖 Generated with Claude Code
Review
Rewritten by
quest reviewafter each round.Head: f5153aa
Base: origin/main at c1c04e0
Reviewer: Codex, gpt-6.1-sol, high effort
Session:
01a1d70d-7097-73f3-a671-e04a1357bdc6, round 2Score: 9/10,
The merge resolutions preserve the reviewed watcher functionality with no actionable regressions found; landing-test coverage remains tracked as follow-up work, and builds and tests were not run as instructed.Rounds: 3; findings 0: fixed 0, refuted 0, open 0
Findings: none
Reviewer: Codex, gpt-6.1-sol, medium effort, shadow
Session:
01a1d6db-5368-7293-9f3f-2126419282beRounds: 1; findings 0: fixed 0, refuted 0, open 0