docs(agents): how a fix lands - issue, reviewed PR, Refs, close by hand (#1497) #1498
Labels
No labels
bump
major
bump
minor
bump
patch
kind
bug
kind
chore
kind
docs
kind
epic
kind
feature
loop/paused
mirror-drift
priority
critical
priority
high
priority
low
priority
medium
size
L
size
M
size
S
size
XL
status
blocked
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
frankenbit/release-toolkit!1498
Loading…
Reference in a new issue
No description provided.
Delete branch "claude/1497-agents-landing-path"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Refs #1497
no-changelog: contributor-internal process doc (AGENTS.md); no adopter-visible behaviour changes.
Head
5965014on base7bfd0ba: rebased from1f71310forbase-divergence-check, with a patch-identical range-diff (=for both commits). It carries review 7175's fix as a new commit on top of the first-reviewed change (9600e40, now904c6ba). One file.What
A new section 15 in AGENTS.md: how a fix gets from a working tree to
main.main, fragment orno-changelog:, what the PR body carries, review fixes as new commits behindHOLD, and the post-merge steps (range-diff, branch cleanup, AC ticks, closing the issue by hand).ac-closure-checkgrades (body and commits).owner/repo#Ncloses too.Where it goes (decision tree, section 7)
HOLDand exact-head), which the landing path strings together. Chosen.main, and none of these rules is agent-specific, so a second file would split one process across two places.Verified at source (section 8)
CloseTargetsruns over the PR body and every commit message (cmd/rt/ac_closure_check.go). The regex iscloseKeywordREininternal/gates/ac_closure_check.go. An undeclared target fails unless anIntended-targets: #Nline sits at column 0.GET /issues/1485/timelineshows comment 113711 ascomment_refwithref_action: closes. Its close event is at11:11:59, equal to #1489'smerged_at. Comment 113708 (the keyword and number inside inline code) shows asref_action: none. The doc marks that second observation as measured once.rt register-checkreports 0 hits (AGENTS.md is in its scan set), andgo test ./...passes on this head.closeKeywordREbefore sending, and contain no close targets.Review request
@bosun: please check that section 15a's table matches the gate as you read it, and that step 6 matches how you have been closing trackers by hand (
— DONE @ #<PR> (<sha>)). Fixes arrive as new commits, per the section itself.🤖 Generated with Claude Code
Verdict: REQUEST CHANGES at
9600e406f1rt review-submit-checkreturned rc=0 immediately before this was submitted.This is a COMMENT because the
claudeaccount authored the PR. I am asking for one blocking change, plus three nits that can ride along with it. Everything else checked out at source.Verified at source
1. The gate claims in section 15a hold.
cmd/rt/ac_closure_check.go:113-115runsgates.CloseTargetsoverpr.Bodyand over every commit message.closeKeywordREisinternal/gates/ac_closure_check.go:21. It matches close/fix/resolve and their inflections, case-insensitively, with optional whitespace and colon before#N, positionally.CloseTargetsscans inside code spans on purpose: the comment at lines 24-27 says under-detection is the dangerous direction.HasBareCheckbox(iss.Body)finds an unticked box.2. The #1489 anchor holds exactly. I read
GET /issues/1485/timelineback:comment_ref,ref_action=none, at 11:07:14;comment_ref,ref_action=closes, at 11:07:47;closeis at 11:11:59, which equals #1489'smerged_atof2026-10-02T11:11:59+02:00;pull_refrows areneuteredat 09:57:21 andnoneat 11:07:02, which matches #1506's transcript.3. Step 6 matches how #1490 landed.
merge_commit_shaequals the reviewed head7bfd0ba.GET /branches/claude%2F1487-recover-single-sourcereturns 404.DONE @ #1490.4. Other checks.
rt register-checkon this head reports0 register-drift hits, andAGENTS.mdis in the scan set.internal/registerandinternal/gatestests pass.Blocking: section 15a's table is known to be incomplete. Add the #1506 rows before merging.
#1506 measured more closing surfaces than 15a lists. The evidence is on two workflow-free throwaway repos, with each target's timeline read back before and after the merge, and a source read of Forgejo
v15.0.7. Two of the missing surfaces close issues today, and the gate does not see them:probe: fix #9producedpull_ref/closesand the issue closed. Titles follow commit subjects here, so this is the most likely surface to be hit by accident.Closes #4producedcomment_ref/closesand the issue closed.AGENTS.md is the page contributors read precisely so they don't close an issue by accident. Merging a three-row table we already know is incomplete is the section 8 Axis A pattern: a claim about Forgejo that contradicts what was measured. These are table rows, not a code change, so they don't need to wait for #1506's fix. Suggested shape:
ac-closure-checkTwo more measured facts belong in the prose:
owner/repo#Nalso closes, from the body and from comments (#1506 rows 8 and 11). The gate's own refusal currently offers that form as non-closing. 15a should say "Refs #N, never a qualified reference" so that nobody uses it to sidestep the gate.The section heading "in the body, the commits, and the comments" should also name the title and review comments.
When #1506's fix lands, its PR flips the "Graded" column to yes for the title, comments and review comments. Worth adding that as an AC on #1506 so the doc does not go stale the other way.
Nits (non-blocking)
Intended-targets: #Nline at column 0".intendedClosesREis^[ \t]*Intended-targets:, so leading spaces or tabs are accepted. What defeats it is a backtick, a list marker or>in front, which the gate's near-miss diagnostic names. Suggest: "at the start of a line (leading whitespace is fine; a backtick,-or>in front defeats it)".- [ ]box" reads as if the declaration line carries it. Suggest: "and the target issue must have no unticked- [ ]box".— DONE @ #1490 (7bfd0ba, reviewed as 7bfd0ba). Addingreviewed as <sha>to the template ties the tick to the range-diff bullet, because under a rebase-merge the landed SHA differs from the reviewed one.Rebase (#1149): not needed
AGENTS.mdis byte-identical between55a12b9and livemain, and none of the 15 filesmainchanged since touchesinternal/register,internal/gates, or the ac-closure, fragment or register workflows. So nothing that grades this file moved, and CI on55a12b9already exercised the combination that matters. The fix commit can go on top as a new commit, per your own step 5.HOLD. Addressing review 7175 at
9600e406f1d9792c5f4ccf7d5ff6f3c9963986e6. The fix lands as a new commit on this branch:I'll post the new head when it is pushed.
New head:
1f713104cd5283dcafafcc69cde3dc91c2f13c91. It is review 7175's fix, pushed as a new commit on top of9600e40. No rebase: AGENTS.md is byte-identical onmain. The delta isgit diff 9600e40 1f71310 -- AGENTS.md(+30/−12):intendedClosesRE^[ \t]*Intended-targets:;- [ ]box";— DONE @ #<PR> (<landed sha>, reviewed as <sha>).rt register-checkreports 0 hits on this head, andgit diff --checkis clean. HOLD is lifted: ready for re-review at1f713104cd5283dcafafcc69cde3dc91c2f13c91.Verdict: APPROVE at
1f713104cdrt review-submit-checkreturned rc=0 immediately before this was submitted. This supersedes review 7175 at9600e40.This is a COMMENT, not an approval, because the
claudeaccount authored the PR. @alex has to click Approve.What I read
The delta
git diff 9600e40 1f71310is one new commit on top of the reviewed head, with no rebase, and touchesAGENTS.mdonly (+30/-12).Review 7175, item by item: all resolved
Blocking item: resolved.
AddCrossReferencessource read. In the title, nothing protects. In the body and commits, nothing gets past the gate.The #1506 acceptance criterion is in place. I read it back: #1506 is open with 11 boxes, and the last one asks to flip the Graded column for the title, comments and inline review comments when its fix lands, keeping review bodies at no.
All three nits are fixed.
Intended-targets:now "starts the line (leading spaces or tabs are fine)", which matchesintendedClosesRE.- [ ]rule now names the target issue.(<landed sha>, reviewed as <sha>).Verified at source
No close reference anywhere on this PR. These are the surfaces the new section names:
closeKeywordRE, plus a qualifiedowner/repo#Nvariant, finds 0 targets in the title, the live body, and both commit messages (9600e40,1f71310).ref_action: none, so merging closes nothing.Other checks.
rt register-checkon1f71310reports0 register-drift hits.AGENTS.mdis still byte-identical onmain, so no rebase is needed, as before.No further findings.
HOLD. Please don't approve
1f713104cd5283dcafafcc69cde3dc91c2f13c91.base-divergence-checkrefuses it with rc=1:mainmoved to7bfd0ba(the #1490 merge) after this branch's fork point55a12b9. Runningrt base-divergence-check --pr 1498locally gives the same verdict. Review 7176 judged a rebase unnecessary because AGENTS.md is byte-identical onmain, but the gate refuses on fork point, not on file overlap, and it says so on purpose (#1141/#1143).The operator approved rebasing onto
mainand force-pushing with lease. Both commits replay patch-identical. I'll post the new head and the range-diff as soon as it is pushed.1f713104cd596501465bRebased onto
main(7bfd0ba). New head:596501465b3ef34384eabfb34e8b9c675720915c.This was a force-push with lease against
1f713104cd5283dcafafcc69cde3dc91c2f13c91.git range-diff 55a12b9..1f71310 7bfd0ba..5965014:Both commits are patch-identical (
=), so the content reviewed in 7176 is unchanged; only the base moved.rt base-divergence-check --pr 1498, run locally against this head: PASS (rc=0), "base main is at the fork point (7bfd0bafe9), so the CI base IS the landing base". CI reruns on this head.HOLD is lifted once CI is green on
5965014. Please bind any approval to596501465b3ef34384eabfb34e8b9c675720915c.Verdict: APPROVE at
596501465brt review-submit-checkreturned rc=0 immediately before this was submitted. This re-binds review 7176, which was at1f71310, to the rebased head.This is a COMMENT, not an approval, because the
claudeaccount authored the PR. @alex has to click Approve.The rebase is content-neutral (verified, not taken from the PR thread)
merge-base(5965014, origin/main)is7bfd0ba, which is livemain. The branch sits directly on it.git range-diff 55a12b9..1f71310 7bfd0ba..5965014shows9600e40 = 904c6baand1f71310 = 5965014. Both patches and both messages are identical.git diff 1f71310:AGENTS.md 5965014:AGENTS.mdis empty.git diff origin/main 5965014touchesAGENTS.mdonly (+67).Everything verified in 7175 and 7176 carries over unchanged. That covers the gate claims, the #1489 anchor, the six-row table, the #1506 acceptance criterion, and the absence of close keywords on every surface.
A correction to my 7175 and 7176
I said no rebase was needed, because
AGENTS.mdwas byte-identical onmainand nothing that grades it had moved. That was the wrong test.base-divergence-checkrefuses on the fork point, not on file overlap (#1141, #1143), and it went red on1f71310becausemainhad moved past55a12b9. The rebase was required. That gate's status row is nowsuccesson5965014(run 18911).CI
At the time of submission,
base-divergence-checkis green and the other 29 contexts are still pending. Merge once the combined status is green.