Repository navigation
feat(land): drop links to quests the base finished - #353
Conversation
Quest-Claim: 9d92f0bee49acdd0
A queued PR that links a quest the base finishes after it branched used to fail `quest check` on its squash and be ejected for a fixer, even though the PR wrote the link while the quest was open. Each squash quest land builds, and each base it merges into a PR head, now drops the Required, Related, and Closes entries linking to quests the base deleted since the PR branched, with `quest rm`'s edit. Deletion since the merge base tells a finished quest from a mistyped link; a moved quest is a rename, and prose links still fail the check. Finishes quest/m0/helpers/queue-siblings.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # README.md # src/cli/main.ts
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars.
|
|
Landing 9e45521.
(Written by Claude Opus 5.5) |
|
codex / Codex land fixer note:
(written by codex / Codex) |
Finishes quest/m0/helpers/queue-siblings.md. On
quest land, a queued PR that links a quest the base finished after the PR branched now lands, and that link is dropped. Before, the PR was parked for the fixer, or ejected asfailed_checkswithout one. GitHub's merge queue gets nothing more (decision 2).Changes
src/cli/land.tsprune). The daemon makes two trusted merges: each squash it builds (screening alone, the chain, overlap reports) and the base merged into a PR head before landing. After each clean merge,prunecollects the quest files the merged-into side deleted since the PR's merge base. Rename detection is on, so a moved quest doesn't count. It then applies coreremove(), the editquest rmmakes, to the staged tree:Required,Related, orClosesentry linking to one of those quests, and a heading left empty.quest checkstill parks that PR for the fixer, or ejects it without one.prune, so the prepared head lands exactly the tree the chain tested.src/cli/tree.tscommittedSources). This is split out ofsnapshot, soprunereads quest sources from the merged tree's objects. Nothing from the worktree is read and nothing from the PR runs. It writes blobs withhash-object --no-filtersand keeps each file's mode.test/land.test.ts):RequiredandRelatedlinks to a quest the base finished lands.mainand the prepared head match.quest land servehelp describe the drop.origin/main(no rebase), bringing in moq-dev/quest#355's parking, triage, and base check, moq-dev/quest#358, and moq-dev/quest#367.land.tsmerged cleanly: every squash (screening, chain, overlap reports) still goes throughsquash()andprune, and the prepared head throughmergeBaseandprune(src/cli/land-head.ts). The fixer's results andquest land applyrebuild a tree the fixer made and validated, so they don't prune. The README andland servehelp conflicts take main's parking wording, keep a mistyped link as the example finding, and prepend the drop sentence to the help.quest rmdeleted the quest and its links from quest/m0/helpers/README.md and quest/m0/helpers/merge-driver.md'sRelated.No change to
quest mergeorsrc/cli/hold.ts, which moq-dev/quest#347 changes.Why not the quest's listed options
git merge-file: deleting two adjacent entries conflicts in git's line merge, while non-adjacent ones merge. Adding blank lines between entries doesn't help, because diff alignment around repeated blank lines is ambiguous, so the two deletions still touch. No format avoids this short of a unique separator line between every pair of entries.quest check. It can't keep the rule that a finished quest leaves no dangling reference once the siblings land. On a gate that never edits the tree, the landedmainwould keep the dead link until someone cleans it up.quest landwrites the tree it lands, so the cleanup can happen at landing, deterministically, and the rule holds.quest merge --land. Declined for GitHub's queue (decision 2): those repositories adoptquest landinstead.Decisions
The maintainer picked every recommended option in a
/quest-completesession on 2026-11-01:quest landby dropping the dead link at landing?quest checktreat a link to a deleted quest as done.quest land, so this PR deletes the quest.quest merge --landafter GitHub's queue drops a PR.Choices made without asking
Requiredlink unblocks a quest, so this is the risky direction. It is still checked by the chain's CI andquest check, but neither would notice.remove()also dropsRequiredlinks to finished milestones, asquest rmdoes, but only in a merge where the base finished some quest.Suggested follow-ups
quest checkflags it until fixed by hand. A command could apply this edit in a checkout. For example,quest check --fixorquest resolve --finish <merge-head>would drop list links to quests deleted betweenmerge-base HEAD <merge-head>andHEAD, using the sameremove(). The guide's merge line would then point to it.Review
mechanical fix by codex / Codex:
Merged base, preserved its quest deletion, combined both CLI help edits, and removed a dangling quest list link; bun run build, bun run check, bun run --silent quest check passed; bun run test had four timeout failures, all passed via bun run test test/agent.test.ts test/init.test.ts test/re·solve.test.ts --maxWorkers=1 --testTimeout=30000.(head f6ad34a)gpt-6.1-sol, medium effort (quest review --base origin/main).9e45521a9ab2d8149abc46b7317753e58d185581(the origin/main merge): 0 findings.Local checks on 9e45521:
just checkpassed.just testpassed (765 passed, 2 skipped; 426 for each build's lifecycle), run withenv -u CLAUDE_CONFIG_DIR.quest check --base origin/main --branch quest/m0/helpers/queue-siblingspassed.(Written by Claude Opus 5.5)
🤖 Generated with Claude Code