Problem
AI coding tools (Claude Code, GitHub Copilot, etc.) automatically append Co-authored-by trailers to commit messages. When PRs are squash-merged, these trailers propagate into the merge commit, making the project history appear AI-authored rather than human-authored.
Example from recent commits:
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Cause
These tools append the trailer by default. When PRs are squash-merged on GitHub, all trailers from individual commits are combined into the final merge commit. The result: AI attribution is permanently baked into the project's main branch history.
Proposed Fix
Two layers of defense:
.claude/settings.json — add "includeCoAuthoredBy": false so Claude Code never appends the trailer, regardless of individual user configuration.
CLAUDE.md — add a "Commit messages" section instructing AI tools (including non-Claude tools like Copilot, Cursor) not to include Co-authored-by trailers.
Problem
AI coding tools (Claude Code, GitHub Copilot, etc.) automatically append
Co-authored-bytrailers to commit messages. When PRs are squash-merged, these trailers propagate into the merge commit, making the project history appear AI-authored rather than human-authored.Example from recent commits:
Cause
These tools append the trailer by default. When PRs are squash-merged on GitHub, all trailers from individual commits are combined into the final merge commit. The result: AI attribution is permanently baked into the project's main branch history.
Proposed Fix
Two layers of defense:
.claude/settings.json— add"includeCoAuthoredBy": falseso Claude Code never appends the trailer, regardless of individual user configuration.CLAUDE.md— add a "Commit messages" section instructing AI tools (including non-Claude tools like Copilot, Cursor) not to includeCo-authored-bytrailers.