Describe the issue or request
AGENTS.md and CONTRIBUTING.md both tell contributors that PRs are squash-merged. That is no longer how this repository merges, and the stale claim actively undercuts the commit-hygiene rule printed on the very next line.
AGENTS.md:121:
- PR titles must follow conventional commits (PRs are squash-merged β the PR title becomes the commit message)
- Do not add
Co-Authored-By tags for AI tools
CONTRIBUTING.md:27:
- Follow conventional commits. PRs are squash-merged to main, so the PR title becomes the commit message.
Current Behavior
Repository settings and Mergify config both say merge commits:
$ gh api repos/ZcashFoundation/zebra --jq '{squash:.allow_squash_merge, merge:.allow_merge_commit, rebase:.allow_rebase_merge}'
{"squash":false,"merge":true,"rebase":false}
.github/mergify.yml sets merge_method: merge in its default queue_rule.
main's history matches: recent merges are two-parent merge commits whose subject is <PR title> (#<number>), with each PR's individual commits preserved alongside them:
$ git log --format='%h parents=%p %s' -5
8e9ff3b2c parents=d098d0181 f3b941e5c chore(chain): update checkpoints (#11148)
d098d0181 parents=9487509d1 53a47b744 docs(security): update disclosure contacts and reporting requirements (#11174)
53a47b744 parents=7e0371da2 9487509d1 Merge branch 'main' into docs/security-report-version-check
f3b941e5c parents=9487509d1 chore(chain): update checkpoints
9487509d1 parents=da29357c7 fd2dc730c fix(network): remove every address book entry for a banned peer IP (#11173)
Why this matters beyond a doc typo
The parenthetical implies that only the PR title reaches main, so individual commit messages don't need care. Two consequences:
- Individual commits now land on
main verbatim. Under merge_method: merge the branch commits are preserved, so anything in a commit message β including Co-Authored-By trailers for AI tools, which AGENTS.md:122 prohibits β persists in permanent history.
- It was never true even under squash. The repo's squash message setting is
COMMIT_MESSAGES, which concatenates the branch's commit messages into the squashed body. So a trailer added to a branch commit would have survived a squash merge too.
The rule is already broadly unenforced, which is consistent with contributors trusting the doc:
$ git log --format='%H' --grep='Co-authored-by:.*\(anthropic\|Copilot\|Claude\)' -i | wc -l
24
Those 24 commits on main include Co-authored-by: Copilot Autofix powered by AI <...> and a range of Co-Authored-By: Claude Opus 4.x <noreply@anthropic.com> trailers.
Found while reviewing #11128, whose commit fe96728 adds the Copilot Autofix trailer β the review asked for an amend, which is only worth asking for because the merge strategy preserves it.
Expected Behavior
Both documents describe the actual merge strategy, and the commit-hygiene rule reads as load-bearing rather than vestigial.
Possible Solution
- Correct
AGENTS.md:121 and CONTRIBUTING.md:27 to say merge commits, noting that the PR title still becomes the merge commit subject (so the conventional-commits requirement is unchanged) and that individual commit messages are preserved on main.
- State explicitly that the
Co-Authored-By prohibition therefore applies to every commit in a PR, not just the title.
- Decide whether to enforce it rather than document it. Given 24 existing violations, a commit-message check in the PR gate would be more durable than a guideline β worth weighing against added gate surface. Existing history is not rewritable, so this is forward-only.
Additional Information/Context
Filed with assistance from Claude Code; the underlying merge-strategy discrepancy surfaced during a cross-review of #11128 with OpenAI Codex.
Describe the issue or request
AGENTS.mdandCONTRIBUTING.mdboth tell contributors that PRs are squash-merged. That is no longer how this repository merges, and the stale claim actively undercuts the commit-hygiene rule printed on the very next line.AGENTS.md:121:CONTRIBUTING.md:27:Current Behavior
Repository settings and Mergify config both say merge commits:
.github/mergify.ymlsetsmerge_method: mergein its defaultqueue_rule.main's history matches: recent merges are two-parent merge commits whose subject is<PR title> (#<number>), with each PR's individual commits preserved alongside them:Why this matters beyond a doc typo
The parenthetical implies that only the PR title reaches
main, so individual commit messages don't need care. Two consequences:mainverbatim. Undermerge_method: mergethe branch commits are preserved, so anything in a commit message β includingCo-Authored-Bytrailers for AI tools, whichAGENTS.md:122prohibits β persists in permanent history.COMMIT_MESSAGES, which concatenates the branch's commit messages into the squashed body. So a trailer added to a branch commit would have survived a squash merge too.The rule is already broadly unenforced, which is consistent with contributors trusting the doc:
Those 24 commits on
mainincludeCo-authored-by: Copilot Autofix powered by AI <...>and a range ofCo-Authored-By: Claude Opus 4.x <noreply@anthropic.com>trailers.Found while reviewing #11128, whose commit fe96728 adds the Copilot Autofix trailer β the review asked for an amend, which is only worth asking for because the merge strategy preserves it.
Expected Behavior
Both documents describe the actual merge strategy, and the commit-hygiene rule reads as load-bearing rather than vestigial.
Possible Solution
AGENTS.md:121andCONTRIBUTING.md:27to say merge commits, noting that the PR title still becomes the merge commit subject (so the conventional-commits requirement is unchanged) and that individual commit messages are preserved onmain.Co-Authored-Byprohibition therefore applies to every commit in a PR, not just the title.Additional Information/Context
Filed with assistance from Claude Code; the underlying merge-strategy discrepancy surfaced during a cross-review of #11128 with OpenAI Codex.