RUL-007 — No AI attribution in commits, tags, or PRs

Ruling

Do not add Co-Authored-By: Claude ... (or any equivalent attribution to any AI assistant) to git commits, tags, PR bodies, or any other artifact. Every commit/tag carries Mohamed's identity only.

Evidence

Enforcement

Verification

Two layers, both live. The earlier text on this page — "no commit-msg git hook exists in this repo … no mechanism currently strips a stray Co-Authored-By trailer automatically" — is now false, and is superseded by:

  1. scripts/hooks/commit-msg (tracked, executable) execs scripts/check_ai_attribution.py --message-file "$1". git config core.hooksPath = scripts/hooks, so it is live for every commit in every worktree the moment it exists; scripts/hooks/install-git-hooks.sh names it in both its existence check and its chmod +x line. Proven end-to-end against a real git repo: git commit -m $'fix: …\n\nCo-Authored-By: Claude …' returns non-zero and HEAD is unchanged (the commit object is never created); the same commit without the trailer succeeds. Because commit.verbose=true writes the full diff into COMMIT_EDITMSG, --message-file blanks git comment lines and truncates at the --- >8 --- scissors marker (line numbering preserved), so the gate scans the message, never file content — otherwise any commit touching this gate or this page would self-trip.
  2. scripts/check_ai_attribution.py as a repo-wide history gate, invoked from scripts/health_check.py as "AI attribution (RUL-007)" with --range --all --tags: 2769 commits + 167 annotated tags scanned in ~1.1s.

Detection covers Co-Authored-By:/Assisted-By: trailers naming any AI assistant (R1) and "Generated with [Claude Code]"-class markers (R2); it stays silent on Co-Authored-By: Mohamed Samy <msamy@sufigeeks.org>, Signed-off-by:, and on prose that merely mentions Claude (e.g. feat(claude): Claude Code conversation producer).

The repo has exactly one genuine violation, and it is reported on every run, not suppressed: commit b65a7a971f13 L29 carries a leaked Co-Authored-By: Claude … trailer. It is published history that cannot be rewritten, so it is pinned by full SHA in scripts/rul007-baseline.txt and printed as BASELINED on every run. The baseline provably cannot widen: --baseline /dev/null over live history exits 1, short-SHA entries are rejected, and a test pins that the baseline may not absorb a new violation.