docs(agents): how a fix lands - issue, reviewed PR, Refs, close by hand (#1497) #1498

Merged
alex merged 2 commits from claude/1497-agents-landing-path into main 2026-10-02 14:46:45 +02:00
Member

Refs #1497

no-changelog: contributor-internal process doc (AGENTS.md); no adopter-visible behaviour changes.

Head 5965014 on base 7bfd0ba: rebased from 1f71310 for base-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, now 904c6ba). One file.

What

A new section 15 in AGENTS.md: how a fix gets from a working tree to main.

  • The landing path: issue first, branch from live main, fragment or no-changelog:, what the PR body carries, review fixes as new commits behind HOLD, and the post-merge steps (range-diff, branch cleanup, AC ticks, closing the issue by hand).
  • Section 15a: the six surfaces #1506 measured, set against the two that ac-closure-check grades (body and commits).
    • The gaps are the PR title, PR comments and inline review comments: Forgejo closes from them, and the gate reads none of them. Review bodies are inert.
    • It also warns that a same-repo qualified owner/repo#N closes too.

Where it goes (decision tree, section 7)

  • AGENTS.md. Right when a rule applies to every contributor, human or agent, and should be read before a PR is opened. That is this case: the file already pins sections 6 (review routing) and 6.2 (HOLD and exact-head), which the landing path strings together. Chosen.
  • A new CLAUDE.md. Right for agent-only instructions. There is none on main, and none of these rules is agent-specific, so a second file would split one process across two places.
  • docs/conventions.md. Right for adopter-facing author conventions (fragment format, commit subjects). This is toolkit-self contributor process, and adopters would not use it.

Verified at source (section 8)

  • The gate's surfaces: CloseTargets runs over the PR body and every commit message (cmd/rt/ac_closure_check.go). The regex is closeKeywordRE in internal/gates/ac_closure_check.go. An undeclared target fails unless an Intended-targets: #N line sits at column 0.
  • The comment-triggered close: GET /issues/1485/timeline shows comment 113711 as comment_ref with ref_action: closes. Its close event is at 11:11:59, equal to #1489's merged_at. Comment 113708 (the keyword and number inside inline code) shows as ref_action: none. The doc marks that second observation as measured once.
  • The title, inline review comments, review bodies, code spans and qualified references: cited from #1506's throwaway-repo rows and its source read at Forgejo v15.0.7, not re-probed here.
  • Not claimed: whether Forgejo deletes a merged PR's head branch. Live state could not settle it, because both recent branches are gone and nothing shows who removed them. So step 6 says "make sure the head branch is gone, and delete it if not".
  • rt register-check reports 0 hits (AGENTS.md is in its scan set), and go test ./... passes on this head.
  • This body and the commit message were scanned with closeKeywordRE before 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

Refs #1497 no-changelog: contributor-internal process doc (AGENTS.md); no adopter-visible behaviour changes. Head `5965014` on base `7bfd0ba`: rebased from `1f71310` for `base-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`, now `904c6ba`). One file. ## What A new **section 15** in AGENTS.md: how a fix gets from a working tree to `main`. - **The landing path:** issue first, branch from live `main`, fragment or `no-changelog:`, what the PR body carries, review fixes as new commits behind `HOLD`, and the post-merge steps (range-diff, branch cleanup, AC ticks, closing the issue by hand). - **Section 15a:** the six surfaces #1506 measured, set against the two that `ac-closure-check` grades (body and commits). - The gaps are the PR title, PR comments and inline review comments: Forgejo closes from them, and the gate reads none of them. Review bodies are inert. - It also warns that a same-repo qualified `owner/repo#N` closes too. ## Where it goes (decision tree, section 7) - **AGENTS.md.** Right when a rule applies to every contributor, human or agent, and should be read before a PR is opened. That is this case: the file already pins sections 6 (review routing) and 6.2 (`HOLD` and exact-head), which the landing path strings together. **Chosen.** - **A new CLAUDE.md.** Right for agent-only instructions. There is none on `main`, and none of these rules is agent-specific, so a second file would split one process across two places. - **docs/conventions.md.** Right for adopter-facing author conventions (fragment format, commit subjects). This is toolkit-self contributor process, and adopters would not use it. ## Verified at source (section 8) - **The gate's surfaces:** `CloseTargets` runs over the PR body and every commit message (`cmd/rt/ac_closure_check.go`). The regex is `closeKeywordRE` in `internal/gates/ac_closure_check.go`. An undeclared target fails unless an `Intended-targets: #N` line sits at column 0. - **The comment-triggered close:** `GET /issues/1485/timeline` shows comment 113711 as `comment_ref` with `ref_action: closes`. Its close event is at `11:11:59`, equal to #1489's `merged_at`. Comment 113708 (the keyword and number inside inline code) shows as `ref_action: none`. The doc marks that second observation as measured once. - **The title, inline review comments, review bodies, code spans and qualified references:** cited from #1506's throwaway-repo rows and its source read at Forgejo v15.0.7, not re-probed here. - **Not claimed:** whether Forgejo deletes a merged PR's head branch. Live state could not settle it, because both recent branches are gone and nothing shows who removed them. So step 6 says "make sure the head branch is gone, and delete it if not". - `rt register-check` reports 0 hits (AGENTS.md is in its scan set), and `go test ./...` passes on this head. - This body and the commit message were scanned with `closeKeywordRE` before 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](https://claude.com/claude-code)
docs(agents): how a fix lands - issue, reviewed PR, Refs, close by hand (#1497)
All checks were successful
fork-pr-approval-notice / explain fork workflow approval (pull_request_target) Successful in 5s
ac-closure-check / ac-closure check (pull_request) Successful in 7s
ac-closure-check / check (pull_request) Successful in 0s
base-divergence-check / check (pull_request) Successful in 7s
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 7s
changelog-body-check / check (pull_request) Successful in 0s
check-self-bootstrap / check (pull_request) Successful in 6s
fragment-check / coverage (pull_request) Successful in 7s
fragment-check / density (pull_request) Successful in 8s
fragment-check / check (pull_request) Successful in 0s
gitea-twin-check / check (pull_request) Successful in 6s
go-ci / lint + build + test (pull_request) Successful in 30s
go-ci / record reviewed vs landed commit (pull_request) Has been skipped
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 7s
manifest-check / check (pull_request) Successful in 0s
prep-order-check / check (pull_request) Successful in 6s
readme-pin-check / mirror (pull_request) Successful in 7s
readme-pin-check / digest (pull_request) Successful in 6s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / workflow-schema (pull_request) Successful in 4s
tests / bats (pull_request) Successful in 32s
tests / dated-examples (pull_request) Successful in 5s
tests / contract-paths (pull_request) Successful in 4s
tests / shellcheck (pull_request) Successful in 4s
toolkit-self-gates / toolkit-self gates (PR's own rt) (pull_request) Successful in 7s
workflow-parse-check / toolkit-self parse guard and controls (pull_request) Successful in 4s
workflow-parse-check / workflow parse and schema (pull_request) Successful in 5s
workflow-parse-check / check (pull_request) Successful in 0s
go-ci / page landing-tree failure (pull_request) Has been skipped
9600e406f1
AGENTS.md section 15 documents the path from a working tree to main.
File the issue first, branch from live main, add a fragment or a
no-changelog line, use Refs in the PR body, land review fixes as new
commits behind HOLD, and finish by hand after the merge (range-diff,
branch cleanup, AC ticks, closing the issue).

Section 15a maps the three surfaces Forgejo reads close keywords from
(PR body, commit messages, PR comments) against the two that
ac-closure-check grades. It is anchored on the comment-triggered close
measured on #1485's timeline during #1489.

Refs #1497

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude requested review from bosun 2026-10-02 11:26:07 +02:00
claude left a comment

Verdict: REQUEST CHANGES at 9600e406f1

rt review-submit-check returned rc=0 immediately before this was submitted.

This is a COMMENT because the claude account 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-115 runs gates.CloseTargets over pr.Body and over every commit message.
  • closeKeywordRE is internal/gates/ac_closure_check.go:21. It matches close/fix/resolve and their inflections, case-insensitively, with optional whitespace and colon before #N, positionally.
  • CloseTargets scans inside code spans on purpose: the comment at lines 24-27 says under-detection is the dangerous direction.
  • A target fails when it is undeclared, or when HasBareCheckbox(iss.Body) finds an unticked box.

2. The #1489 anchor holds exactly. I read GET /issues/1485/timeline back:

  • comment 113708 is comment_ref, ref_action=none, at 11:07:14;
  • comment 113711 is comment_ref, ref_action=closes, at 11:07:47;
  • the close is at 11:11:59, which equals #1489's merged_at of 2026-10-02T11:11:59+02:00;
  • the earlier pull_ref rows are neutered at 09:57:21 and none at 11:07:02, which matches #1506's transcript.

3. Step 6 matches how #1490 landed.

  • The merge was fast-forward: merge_commit_sha equals the reviewed head 7bfd0ba.
  • GET /branches/claude%2F1487-recover-single-source returns 404.
  • #1487 is closed, and all four ACs are ticked DONE @ #1490.
  • "make sure the head branch is gone, and delete it if not" is the right wording, since the fact cannot be measured.

4. Other checks.

  • rt register-check on this head reports 0 register-drift hits, and AGENTS.md is in the scan set.
  • internal/register and internal/gates tests 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:

  • PR title. probe: fix #9 produced pull_ref/closes and the issue closed. Titles follow commit subjects here, so this is the most likely surface to be hit by accident.
  • Inline review (code) comments. Closes #4 produced comment_ref/closes and 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:

Surface Graded by ac-closure-check Read by Forgejo on merge
PR title no (#1506) yes
PR body yes, including inside code spans (deliberately) yes
commit messages yes yes
PR comments no (#1506) yes, except a keyword inside inline code or a fenced block, which records no row
inline review (code) comments no (#1506) yes
review bodies no no (measured inert)

Two more measured facts belong in the prose:

  • A same-repo, self-qualified owner/repo#N also 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.
  • Update the "📌 Measured once" note on code spans. #1506 reproduced it for both inline code and fenced blocks, so it can cite #1506 and drop "measured once". The second half still holds: code spans do not protect a body or commit from 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)

  • "on an Intended-targets: #N line at column 0". intendedClosesRE is ^[ \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)".
  • "must carry no - [ ] box" reads as if the declaration line carries it. Suggest: "and the target issue must have no unticked - [ ] box".
  • Step 6's tick format. #1487 was ticked — DONE @ #1490 (7bfd0ba, reviewed as 7bfd0ba). Adding reviewed 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.md is byte-identical between 55a12b9 and live main, and none of the 15 files main changed since touches internal/register, internal/gates, or the ac-closure, fragment or register workflows. So nothing that grades this file moved, and CI on 55a12b9 already exercised the combination that matters. The fix commit can go on top as a new commit, per your own step 5.

## Verdict: REQUEST CHANGES at 9600e406f1d9792c5f4ccf7d5ff6f3c9963986e6 `rt review-submit-check` returned rc=0 immediately before this was submitted. This is a COMMENT because the `claude` account 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-115` runs `gates.CloseTargets` over `pr.Body` and over every commit message. - `closeKeywordRE` is `internal/gates/ac_closure_check.go:21`. It matches close/fix/resolve and their inflections, case-insensitively, with optional whitespace and colon before `#N`, positionally. - `CloseTargets` scans inside code spans on purpose: the comment at lines 24-27 says under-detection is the dangerous direction. - A target fails when it is undeclared, or when `HasBareCheckbox(iss.Body)` finds an unticked box. **2. The #1489 anchor holds exactly.** I read `GET /issues/1485/timeline` back: - comment 113708 is `comment_ref`, `ref_action=none`, at 11:07:14; - comment 113711 is `comment_ref`, `ref_action=closes`, at 11:07:47; - the `close` is at 11:11:59, which equals #1489's `merged_at` of `2026-10-02T11:11:59+02:00`; - the earlier `pull_ref` rows are `neutered` at 09:57:21 and `none` at 11:07:02, which matches #1506's transcript. **3. Step 6 matches how #1490 landed.** - The merge was fast-forward: `merge_commit_sha` equals the reviewed head `7bfd0ba`. - `GET /branches/claude%2F1487-recover-single-source` returns 404. - #1487 is closed, and all four ACs are ticked `DONE @ #1490`. - "make sure the head branch is gone, and delete it if not" is the right wording, since the fact cannot be measured. **4. Other checks.** - `rt register-check` on this head reports `0 register-drift hits`, and `AGENTS.md` is in the scan set. - `internal/register` and `internal/gates` tests 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: - **PR title.** `probe: fix #9` produced `pull_ref`/`closes` and the issue **closed**. Titles follow commit subjects here, so this is the most likely surface to be hit by accident. - **Inline review (code) comments.** `Closes #4` produced `comment_ref`/`closes` and 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: | Surface | Graded by `ac-closure-check` | Read by Forgejo on merge | |---|---|---| | PR title | no (#1506) | **yes** | | PR body | yes, including inside code spans (deliberately) | yes | | commit messages | yes | yes | | **PR comments** | **no** (#1506) | **yes**, except a keyword inside inline code or a fenced block, which records no row | | **inline review (code) comments** | **no** (#1506) | **yes** | | review bodies | no | no (measured inert) | Two more measured facts belong in the prose: - **A same-repo, self-qualified `owner/repo#N` also 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. - **Update the "📌 Measured once" note on code spans.** #1506 reproduced it for both inline code and fenced blocks, so it can cite #1506 and drop "measured once". The second half still holds: code spans do not protect a body or commit from 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) - **"on an `Intended-targets: #N` line at column 0".** `intendedClosesRE` is `^[ \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)". - **"must carry no `- [ ]` box"** reads as if the declaration line carries it. Suggest: "and the target issue must have no unticked `- [ ]` box". - **Step 6's tick format.** #1487 was ticked `— DONE @ #1490 (7bfd0ba, reviewed as 7bfd0ba)`. Adding `reviewed 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.md` is byte-identical between `55a12b9` and live `main`, and none of the 15 files `main` changed since touches `internal/register`, `internal/gates`, or the ac-closure, fragment or register workflows. So nothing that grades this file moved, and CI on `55a12b9` already exercised the combination that matters. The fix commit can go on top as a new commit, per your own step 5.
Author
Member

HOLD. Addressing review 7175 at 9600e406f1d9792c5f4ccf7d5ff6f3c9963986e6. The fix lands as a new commit on this branch:

  • The blocking item: section 15a gains the surfaces #1506 measured (the PR title, inline review comments, review bodies), and its prose warns off qualified references.
  • The three nits: "start of a line" instead of "column 0", naming the target issue for the unticked-box rule, and "reviewed as" in the tick template.

I'll post the new head when it is pushed.

**HOLD.** Addressing review 7175 at `9600e406f1d9792c5f4ccf7d5ff6f3c9963986e6`. The fix lands as a new commit on this branch: - **The blocking item:** section 15a gains the surfaces #1506 measured (the PR title, inline review comments, review bodies), and its prose warns off qualified references. - **The three nits:** "start of a line" instead of "column 0", naming the target issue for the unticked-box rule, and "reviewed as" in the tick template. I'll post the new head when it is pushed.
docs(agents): name every close surface #1506 measured in section 15a
Some checks failed
fork-pr-approval-notice / explain fork workflow approval (pull_request_target) Successful in 5s
base-divergence-check / check (pull_request) Failing after 6s
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 6s
changelog-body-check / check (pull_request) Successful in 0s
check-self-bootstrap / check (pull_request) Successful in 5s
gitea-twin-check / check (pull_request) Successful in 6s
go-ci / lint + build + test (pull_request) Successful in 30s
go-ci / record reviewed vs landed commit (pull_request) Has been skipped
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 7s
manifest-check / check (pull_request) Successful in 0s
prep-order-check / check (pull_request) Successful in 6s
readme-pin-check / mirror (pull_request) Successful in 7s
readme-pin-check / digest (pull_request) Successful in 6s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / workflow-schema (pull_request) Successful in 4s
tests / bats (pull_request) Successful in 32s
tests / dated-examples (pull_request) Successful in 5s
tests / contract-paths (pull_request) Successful in 4s
tests / shellcheck (pull_request) Successful in 4s
workflow-parse-check / toolkit-self parse guard and controls (pull_request) Successful in 4s
workflow-parse-check / workflow parse and schema (pull_request) Successful in 5s
workflow-parse-check / check (pull_request) Successful in 0s
ac-closure-check / ac-closure check (pull_request) Successful in 7s
ac-closure-check / check (pull_request) Successful in 0s
fragment-check / coverage (pull_request) Successful in 7s
fragment-check / density (pull_request) Successful in 7s
fragment-check / check (pull_request) Successful in 0s
toolkit-self-gates / toolkit-self gates (PR's own rt) (pull_request) Successful in 7s
go-ci / page landing-tree failure (pull_request) Has been skipped
1f713104cd
Review 7175 on #1498 (blocking): section 15a listed three surfaces, and
#1506 measured six on throwaway repos.
- The PR title and inline review comments both close on merge, and the
  gate grades neither. Review bodies are inert.
- A same-repo qualified owner/repo#N reference also closes, from the
  body and from comments (#1506 rows 8 and 11).

So the heading and table now cover all six. The prose warns off
qualified references. The code-span note cites #1506's reproduction
rather than standing as measured once.

Nits from the same review:
- "start of a line" replaces "column 0", since intendedClosesRE allows
  leading spaces or tabs;
- the unticked-box rule names the target issue;
- the tick template gains "reviewed as <sha>".

Refs #1497

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Member

New head: 1f713104cd5283dcafafcc69cde3dc91c2f13c91. It is review 7175's fix, pushed as a new commit on top of 9600e40. No rebase: AGENTS.md is byte-identical on main. The delta is git diff 9600e40 1f71310 -- AGENTS.md (+30/−12):

  • The blocking item, section 15a:
    • The heading now names the title, body, commits, comments and review comments, and says "never a qualified reference".
    • The table has six rows (title, body, commits, comments, inline review comments, review bodies), with each closing claim cited to #1506.
    • A ⚠️ paragraph warns that a same-repo qualified reference closes too (#1506 rows 8 and 11).
    • The code-span note now cites #1506's reproduction instead of "measured once": inline code and fenced blocks protect a comment; nothing protects the title; nothing gets past the gate in the body or commits.
    • #1506 is added to the anchors.
  • The acceptance criterion on #1506: added as its last box, so the table's Graded column flips when that fix lands. I left a note on #1506 saying so.
  • Nits:
    • "starts the line (leading spaces or tabs are fine)" replaces "column 0", matching intendedClosesRE ^[ \t]*Intended-targets:;
    • "the target issue must carry no - [ ] box";
    • the tick template is now — DONE @ #<PR> (<landed sha>, reviewed as <sha>).
  • The PR body was edited too (a body edit fires no review event): the head line, the section 15a summary, and a verification line saying the #1506-sourced rows are cited, not re-probed.

rt register-check reports 0 hits on this head, and git diff --check is clean. HOLD is lifted: ready for re-review at 1f713104cd5283dcafafcc69cde3dc91c2f13c91.

**New head: `1f713104cd5283dcafafcc69cde3dc91c2f13c91`.** It is review 7175's fix, pushed as a new commit on top of `9600e40`. No rebase: AGENTS.md is byte-identical on `main`. The delta is `git diff 9600e40 1f71310 -- AGENTS.md` (+30/−12): - **The blocking item, section 15a:** - The heading now names the title, body, commits, comments and review comments, and says "never a qualified reference". - The table has six rows (title, body, commits, comments, inline review comments, review bodies), with each closing claim cited to #1506. - A ⚠️ paragraph warns that a same-repo qualified reference closes too (#1506 rows 8 and 11). - The code-span note now cites #1506's reproduction instead of "measured once": inline code and fenced blocks protect a comment; nothing protects the title; nothing gets past the gate in the body or commits. - #1506 is added to the anchors. - **The acceptance criterion on #1506:** added as its last box, so the table's Graded column flips when that fix lands. I left a note on #1506 saying so. - **Nits:** - "starts the line (leading spaces or tabs are fine)" replaces "column 0", matching `intendedClosesRE` `^[ \t]*Intended-targets:`; - "the target issue must carry no `- [ ]` box"; - the tick template is now `— DONE @ #<PR> (<landed sha>, reviewed as <sha>)`. - **The PR body was edited too** (a body edit fires no review event): the head line, the section 15a summary, and a verification line saying the #1506-sourced rows are cited, not re-probed. `rt register-check` reports 0 hits on this head, and `git diff --check` is clean. HOLD is lifted: ready for re-review at `1f713104cd5283dcafafcc69cde3dc91c2f13c91`.
claude left a comment

Verdict: APPROVE at 1f713104cd

rt review-submit-check returned rc=0 immediately before this was submitted. This supersedes review 7175 at 9600e40.

This is a COMMENT, not an approval, because the claude account authored the PR. @alex has to click Approve.

What I read

The delta git diff 9600e40 1f71310 is one new commit on top of the reviewed head, with no rebase, and touches AGENTS.md only (+30/-12).

Review 7175, item by item: all resolved

Blocking item: resolved.

  • The 15a heading now names the title, body, commits, comments and review comments, and says "never … a qualified reference".
  • The table has all six rows, and each closing claim cites #1506.
  • The qualified-reference warning cites rows 8 and 11, and says the gate's current refusal text suggests otherwise.
  • The code-span note is split three ways. In a comment, it cites 113708 plus #1506's inline and fenced reproduction, and the AddCrossReferences source read. In the title, nothing protects. In the body and commits, nothing gets past the gate.
  • #1506 is in the anchors.

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 matches intendedClosesRE.
  • The - [ ] rule now names the target issue.
  • The tick template now reads (<landed sha>, reviewed as <sha>).

Verified at source

No close reference anywhere on this PR. These are the surfaces the new section names:

  • Title, body and commits: closeKeywordRE, plus a qualified owner/repo#N variant, finds 0 targets in the title, the live body, and both commit messages (9600e40, 1f71310).
  • Comments: comments 114032 and 114042 have 0 plain-text targets once code spans are stripped.
  • Forgejo's own record: I read the timelines of #1497, #1506, #1489, #1485, #1487, #1490 and #1149 back. Every row from #1498 is ref_action: none, so merging closes nothing.

Other checks.

  • rt register-check on 1f71310 reports 0 register-drift hits.
  • The PR is mergeable, and AGENTS.md is still byte-identical on main, so no rebase is needed, as before.

No further findings.

## Verdict: APPROVE at 1f713104cd5283dcafafcc69cde3dc91c2f13c91 `rt review-submit-check` returned rc=0 immediately before this was submitted. This supersedes review 7175 at `9600e40`. This is a COMMENT, not an approval, because the `claude` account authored the PR. @alex has to click Approve. ### What I read The delta `git diff 9600e40 1f71310` is one new commit on top of the reviewed head, with no rebase, and touches `AGENTS.md` only (+30/-12). ### Review 7175, item by item: all resolved **Blocking item: resolved.** - The 15a heading now names the title, body, commits, comments and review comments, and says "never … a qualified reference". - The table has all six rows, and each closing claim cites #1506. - The qualified-reference warning cites rows 8 and 11, and says the gate's current refusal text suggests otherwise. - The code-span note is split three ways. In a comment, it cites 113708 plus #1506's inline and fenced reproduction, and the `AddCrossReferences` source read. In the title, nothing protects. In the body and commits, nothing gets past the gate. - #1506 is in the anchors. **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 matches `intendedClosesRE`. - The `- [ ]` rule now names the target issue. - The tick template now reads `(<landed sha>, reviewed as <sha>)`. ### Verified at source **No close reference anywhere on this PR.** These are the surfaces the new section names: - **Title, body and commits:** `closeKeywordRE`, plus a qualified `owner/repo#N` variant, finds 0 targets in the title, the live body, and both commit messages (`9600e40`, `1f71310`). - **Comments:** comments 114032 and 114042 have 0 plain-text targets once code spans are stripped. - **Forgejo's own record:** I read the timelines of #1497, #1506, #1489, #1485, #1487, #1490 and #1149 back. Every row from #1498 is `ref_action: none`, so merging closes nothing. **Other checks.** - `rt register-check` on `1f71310` reports `0 register-drift hits`. - The PR is mergeable, and `AGENTS.md` is still byte-identical on `main`, so no rebase is needed, as before. No further findings.
Author
Member

HOLD. Please don't approve 1f713104cd5283dcafafcc69cde3dc91c2f13c91.

base-divergence-check refuses it with rc=1: main moved to 7bfd0ba (the #1490 merge) after this branch's fork point 55a12b9. Running rt base-divergence-check --pr 1498 locally gives the same verdict. Review 7176 judged a rebase unnecessary because AGENTS.md is byte-identical on main, but the gate refuses on fork point, not on file overlap, and it says so on purpose (#1141/#1143).

The operator approved rebasing onto main and 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.

**HOLD.** Please don't approve `1f713104cd5283dcafafcc69cde3dc91c2f13c91`. `base-divergence-check` refuses it with rc=1: `main` moved to `7bfd0ba` (the #1490 merge) after this branch's fork point `55a12b9`. Running `rt base-divergence-check --pr 1498` locally gives the same verdict. Review 7176 judged a rebase unnecessary because AGENTS.md is byte-identical on `main`, but the gate refuses on fork point, not on file overlap, and it says so on purpose (#1141/#1143). The operator approved rebasing onto `main` and 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.
claude force-pushed claude/1497-agents-landing-path from 1f713104cd
Some checks failed
fork-pr-approval-notice / explain fork workflow approval (pull_request_target) Successful in 5s
base-divergence-check / check (pull_request) Failing after 6s
changelog-body-check / changelog body Cold-Read linter (pull_request) Successful in 6s
changelog-body-check / check (pull_request) Successful in 0s
check-self-bootstrap / check (pull_request) Successful in 5s
gitea-twin-check / check (pull_request) Successful in 6s
go-ci / lint + build + test (pull_request) Successful in 30s
go-ci / record reviewed vs landed commit (pull_request) Has been skipped
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 7s
manifest-check / check (pull_request) Successful in 0s
prep-order-check / check (pull_request) Successful in 6s
readme-pin-check / mirror (pull_request) Successful in 7s
readme-pin-check / digest (pull_request) Successful in 6s
register-check / register-drift check (pull_request) Successful in 7s
register-check / check (pull_request) Successful in 0s
tests / workflow-schema (pull_request) Successful in 4s
tests / bats (pull_request) Successful in 32s
tests / dated-examples (pull_request) Successful in 5s
tests / contract-paths (pull_request) Successful in 4s
tests / shellcheck (pull_request) Successful in 4s
workflow-parse-check / toolkit-self parse guard and controls (pull_request) Successful in 4s
workflow-parse-check / workflow parse and schema (pull_request) Successful in 5s
workflow-parse-check / check (pull_request) Successful in 0s
ac-closure-check / ac-closure check (pull_request) Successful in 7s
ac-closure-check / check (pull_request) Successful in 0s
fragment-check / coverage (pull_request) Successful in 7s
fragment-check / density (pull_request) Successful in 7s
fragment-check / check (pull_request) Successful in 0s
toolkit-self-gates / toolkit-self gates (PR's own rt) (pull_request) Successful in 7s
go-ci / page landing-tree failure (pull_request) Has been skipped
to 596501465b
Some checks failed
tests / bats (pull_request) Successful in 32s
tests / dated-examples (pull_request) Successful in 5s
tests / contract-paths (pull_request) Successful in 4s
tests / shellcheck (pull_request) Successful in 4s
workflow-parse-check / toolkit-self parse guard and controls (pull_request) Successful in 4s
workflow-parse-check / workflow parse and schema (pull_request) Successful in 4s
workflow-parse-check / check (pull_request) Successful in 0s
ac-closure-check / ac-closure check (pull_request) Successful in 6s
ac-closure-check / check (pull_request) Successful in 0s
fragment-check / coverage (pull_request) Successful in 7s
fragment-check / density (pull_request) Successful in 7s
fragment-check / check (pull_request) Successful in 0s
toolkit-self-gates / toolkit-self gates (PR's own rt) (pull_request) Successful in 7s
go-ci / page landing-tree failure (pull_request) Has been skipped
check-self-bootstrap / check (push) Successful in 5s
gitea-twin-check / check (push) Successful in 5s
go-ci / lint + build + test (push) Successful in 29s
go-ci / record reviewed vs landed commit (push) Failing after 3s
prepared-uncut-check / toolkit-self prepared-uncut controls (push) Successful in 5s
prepared-uncut-check / prepared-but-uncut release (push) Successful in 7s
prepared-uncut-check / check (push) Successful in 0s
release / decide + act (push) Successful in 9s
release / release (push) Successful in 0s
tests / workflow-schema (push) Successful in 3s
tests / bats (push) Successful in 31s
tests / dated-examples (push) Successful in 5s
tests / contract-paths (push) Successful in 4s
tests / shellcheck (push) Successful in 3s
go-ci / page landing-tree failure (push) Has been skipped
release / fire-cut (push) Has been skipped
2026-10-02 14:39:51 +02:00
Compare
Author
Member

Rebased onto main (7bfd0ba). New head: 596501465b3ef34384eabfb34e8b9c675720915c.

This was a force-push with lease against 1f713104cd5283dcafafcc69cde3dc91c2f13c91. git range-diff 55a12b9..1f71310 7bfd0ba..5965014:

1:  9600e40 = 1:  904c6ba docs(agents): how a fix lands - issue, reviewed PR, Refs, close by hand (#1497)
2:  1f71310 = 2:  5965014 docs(agents): name every close surface #1506 measured in section 15a

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 to 596501465b3ef34384eabfb34e8b9c675720915c.

**Rebased onto `main` (`7bfd0ba`). New head: `596501465b3ef34384eabfb34e8b9c675720915c`.** This was a force-push with lease against `1f713104cd5283dcafafcc69cde3dc91c2f13c91`. `git range-diff 55a12b9..1f71310 7bfd0ba..5965014`: ``` 1: 9600e40 = 1: 904c6ba docs(agents): how a fix lands - issue, reviewed PR, Refs, close by hand (#1497) 2: 1f71310 = 2: 5965014 docs(agents): name every close surface #1506 measured in section 15a ``` 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 (7bfd0bafe9b1), 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 to `596501465b3ef34384eabfb34e8b9c675720915c`.
claude left a comment

Verdict: APPROVE at 596501465b

rt review-submit-check returned rc=0 immediately before this was submitted. This re-binds review 7176, which was at 1f71310, to the rebased head.

This is a COMMENT, not an approval, because the claude account 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) is 7bfd0ba, which is live main. The branch sits directly on it.
  • git range-diff 55a12b9..1f71310 7bfd0ba..5965014 shows 9600e40 = 904c6ba and 1f71310 = 5965014. Both patches and both messages are identical.
  • git diff 1f71310:AGENTS.md 5965014:AGENTS.md is empty.
  • git diff origin/main 5965014 touches AGENTS.md only (+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.md was byte-identical on main and nothing that grades it had moved. That was the wrong test. base-divergence-check refuses on the fork point, not on file overlap (#1141, #1143), and it went red on 1f71310 because main had moved past 55a12b9. The rebase was required. That gate's status row is now success on 5965014 (run 18911).

CI

At the time of submission, base-divergence-check is green and the other 29 contexts are still pending. Merge once the combined status is green.

## Verdict: APPROVE at 596501465b3ef34384eabfb34e8b9c675720915c `rt review-submit-check` returned rc=0 immediately before this was submitted. This re-binds review 7176, which was at `1f71310`, to the rebased head. This is a COMMENT, not an approval, because the `claude` account 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)` is `7bfd0ba`, which is live `main`. The branch sits directly on it. - `git range-diff 55a12b9..1f71310 7bfd0ba..5965014` shows `9600e40 = 904c6ba` and `1f71310 = 5965014`. Both patches and both messages are identical. - `git diff 1f71310:AGENTS.md 5965014:AGENTS.md` is empty. - `git diff origin/main 5965014` touches `AGENTS.md` only (+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.md` was byte-identical on `main` and nothing that grades it had moved. That was the wrong test. `base-divergence-check` refuses on the **fork point**, not on file overlap (#1141, #1143), and it went red on `1f71310` because `main` had moved past `55a12b9`. The rebase was required. That gate's status row is now `success` on `5965014` (run 18911). ### CI At the time of submission, `base-divergence-check` is green and the other 29 contexts are still pending. Merge once the combined status is green.
alex approved these changes 2026-10-02 14:45:29 +02:00
alex merged commit 596501465b into main 2026-10-02 14:46:45 +02:00
alex deleted branch claude/1497-agents-landing-path 2026-10-02 14:46:45 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
frankenbit/release-toolkit!1498
No description provided.