Public: anyone can read this; the crew can change it.
An issue whose pull landed with boxes unticked goes to a person, not back to a builder #8497
Check · Review · Land · Live done — Landed and live in production.
When a pull that closes an issue lands with boxes still unticked, the issue now goes to a person instead of back to a builder. Closes #8482.
shipped production is serving it deploy 5f89d5b
When a pull that closes an issue lands with boxes still unticked, the issue now goes to a person instead of back to a builder. Closes #8482.
What changed
- The note is on the issue too.
mergePullinsrc/actions/pulls.tsstill leaves the pull'sLeft #N open: …note. It now also writesLeft open after pull #P landed: K unticked items remain (…)on the issue itself, with anissue.commentedevent. The note names the pull and the unticked items and says what to do: close it, tick what is done, or say what is left. The text comes fromlandedNoteinsrc/core/done_on_main.ts. - The picker skips it. A new hold,
landed, sits insrc/crew/held.tsafterdone_on_main. That file is the filterdriveRepoinautonomy.tspicks from, so the change lives there rather than inautonomy.tsitself. Because it is a named hold, the tick line (landed=1),/boards,/flowand the terminal's Flow screen all say why the issue is held. - The rule is in
src/crew/landed.ts.landedUnansweredholds an open issue when it still has unticked boxes andmergedPullClosingfinds a merged pull that closes it. The hold lifts once a person who may direct the crew comments on the issue, edits it (ticking a box is an edit) or reopens it after the merge. Comments from agents don't count, and neither does the landing's own note, even when a person did the merge. - No new index. The event read uses the existing
event_repo_kind_number_atindex. It only runs for issues with an unticked box. - Unchanged: a merge still does not close umbrellas or the Later gate.
- Docs:
docs/features/done-on-main.mdanddocs/CREW.mddescribe the new hold.
Left out on purpose: issues already stuck this way before this pull carry no note on the issue. They are still held, because the hold reads the merged pull, not the note. A reader's comment does not lift the hold, the same as the existing stall rule (#619).
Tests: test/landed-held.test.ts covers the cases below. I checked that three of its five tests fail with the hold removed.
- A landing leaves the partial issue open and puts the exact note on it.
- The issue is held as
landed, is not startable, anddriveRepodoes not assign it. - An agent's comment keeps it held; a person's comment or tick makes it startable again.
- A fully ticked issue still closes on landing and gets no note.
Checks run: bun scripts/gate.ts and bun x tsc --noEmit are clean. scripts/fast.ts named 1,428 test files for this diff, too many to run, so I ran the 87 files that use mergePull, the holds, done_on_main or driveRepo: 844 pass, 0 fail.
To try it: open an issue with - [x] a and - [ ] b, then land a pull that says Closes #N. The issue stays open with the note, and the held list on /boards shows it as landed. Comment on it as the owner and it becomes pickable again.
🤖 Generated with Claude Code
Approved. The landing now notes itself on the issue, the picker holds it as landed, and only a non-agent person who may direct the crew lifts it. That is a comment, an edit or a reopen after the merge. The landing's own note is excluded by its fixed lead text. The hold reuses the existing event index and only runs for issues with unticked boxes. Tests cover the note text, the hold, the agent comment that does not lift it, the person comment and tick that do, and the fully ticked close. The how-to is in docs/features/done-on-main.md and README is untouched. There is no new dependency and no new input surface. The hold shows through the existing Flow and boards views, so no new terminal screen is needed. I read the diff and did not exercise the preview or view the screenshots.
Two things I would do next:
- Add a one-off backfill note on issues already stuck this way, so a reader sees why they are held. Today only the hold explains it.
- Wrap the long
landedsentence in docs/CREW.md to the surrounding line width.
When a pull that closes an issue lands with boxes still unticked, the issue now goes to a person instead of back to a builder. Closes #8482.
What changed
mergePullinsrc/actions/pulls.tsstill leaves the pull'sLeft #N open: …note. It now also writesLeft open after pull #P landed: K unticked items remain (…)on the issue itself, with anissue.commentedevent. The note names the pull and the unticked items and says what to do: close it, tick what is done, or say what is left. The text comes fromlandedNoteinsrc/core/done_on_main.ts.landed, sits insrc/crew/held.tsafterdone_on_main. That file is the filterdriveRepoinautonomy.tspicks from, so the change lives there rather than inautonomy.tsitself. Because it is a named hold, the tick line (landed=1),/boards,/flowand the terminal's Flow screen all say why the issue is held.src/crew/landed.ts.landedUnansweredholds an open issue when it still has unticked boxes andmergedPullClosingfinds a merged pull that closes it. The hold lifts once a person who may direct the crew comments on the issue, edits it (ticking a box is an edit) or reopens it after the merge. Comments from agents don't count, and neither does the landing's own note, even when a person did the merge.event_repo_kind_number_atindex. It only runs for issues with an unticked box.docs/features/done-on-main.mdanddocs/CREW.mddescribe the new hold.Left out on purpose: issues already stuck this way before this pull carry no note on the issue. They are still held, because the hold reads the merged pull, not the note. A reader's comment does not lift the hold, the same as the existing stall rule (#619).
Tests:
test/landed-held.test.tscovers the cases below. I checked that three of its five tests fail with the hold removed.landed, is not startable, anddriveRepodoes not assign it.Checks run:
bun scripts/gate.tsandbun x tsc --noEmitare clean.scripts/fast.tsnamed 1,428 test files for this diff, too many to run, so I ran the 87 files that usemergePull, the holds,done_on_mainordriveRepo: 844 pass, 0 fail.To try it: open an issue with
- [x] aand- [ ] b, then land a pull that saysCloses #N. The issue stays open with the note, and the held list on/boardsshows it aslanded. Comment on it as the owner and it becomes pickable again.🤖 Generated with Claude Code
Closes #8482