You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
prepare_bump.sh --ship opens a bump PR whose body fails §6 R-2 (check_pr_closes_issue): the CHANGELOG's context refs (#EPIC, 'refs #N') have no keep-open line — hit on 0.68.2 (#3498) and 0.69.0 (#3698) #3699
scripts/release/prepare_bump.sh 0.69.0 --ship opened #3698. Its body embeds the CHANGELOG [0.69.0] section, which cites EPIC #3080 and context refs ("refs #3602", "(#3571 layer 1)"). ci.yml's step "A PR body must close every issue it cites, or say why not (§6 R-2)" then FAILs: non-closing ref(s) with no keep-open reason: #3080 #3545 #3571 #3602 #3658. aprender-62 caught it before the job ran. The fix cost a body edit, a cancel, a force-cancel (the concurrency group) and a close+reopen, because the guard reads the frozen payload. 0.68.2's bump #3498 needed the same hand fix.
done_when
prepare_bump.sh --ship derives every #N in the generated body that isn't under a closing keyword and writes ONE keep-open: line naming them ("cited by the CHANGELOG for context; each closes via its own PR; the release EPIC closes at T-4")
before gh pr create it runs scripts/check_pr_closes_issue.sh --body <generated body> and refuses to open the PR on rc != 0
a case-table row: a CHANGELOG with an EPIC ref and a refs #N produces a body the guard PASSes; a mutant that drops the keep-open line goes RED
done_when 1 amended (issue author, cop, 2026-09-21), replacing the original wording:
prepare_bump.sh --ship derives every #N the §6 R-2 guard owes a reason for (check_pr_closes_issue.sh --list-owed: not under a closing keyword, not proven a PR or a closed issue; an unresolvable ref counts) and writes ONE keep-open: line naming them ("cited by the CHANGELOG for context; each closes via its own PR; the release EPIC closes at T-4")
Why: the literal "every #N not under a closing keyword" would put ~56 merged PRs in a keep-open line whose stated reason is false for a PR (measured by aprender-f0 on the real 0.69.0 body: 5 owed refs vs 61 literal). The guard's own classifier decides what's owed, so the producer and the checker agree by construction.
Parked by APR-EPIC-001: over E1 budget (rank 56/93). Reopen = pull. Applied by aprender-d1: claude+agy both said close, apr shadow row recorded (handoff/close-quorum-2026-09-25.json).
Activity
noahgift commentedon Sep 21, 2026
done_when 1 amended (issue author, cop, 2026-09-21), replacing the original wording:
prepare_bump.sh --shipderives every#Nthe §6 R-2 guard owes a reason for (check_pr_closes_issue.sh --list-owed: not under a closing keyword, not proven a PR or a closed issue; an unresolvable ref counts) and writes ONEkeep-open:line naming them ("cited by the CHANGELOG for context; each closes via its own PR; the release EPIC closes at T-4")Why: the literal "every #N not under a closing keyword" would put ~56 merged PRs in a keep-open line whose stated reason is false for a PR (measured by aprender-f0 on the real 0.69.0 body: 5 owed refs vs 61 literal). The guard's own classifier decides what's owed, so the producer and the checker agree by construction.
fix(#3708): the bump guard's own fixture was pre-#3828 — five body ru…
noahgift commentedon Sep 25, 2026
Parked by APR-EPIC-001: over E1 budget (rank 56/93). Reopen = pull. Applied by aprender-d1: claude+agy both said close, apr shadow row recorded (handoff/close-quorum-2026-09-25.json).
release(0.69.1): batch 1 — 20 receipted rows + 3 combination fixes, o…