aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.claude/rules/commits.md66
-rw-r--r--.claude/settings.json4
-rw-r--r--CLAUDE.md8
3 files changed, 75 insertions, 3 deletions
diff --git a/.claude/rules/commits.md b/.claude/rules/commits.md
new file mode 100644
index 0000000..301c6ff
--- /dev/null
+++ b/.claude/rules/commits.md
@@ -0,0 +1,66 @@
+# Commit Rules
+
+Applies to: `**/*`
+
+## Author Identity
+
+All commits are authored as the user (repo owner / maintainer), never as
+Claude, Claude Code, Anthropic, or any AI tool. Git uses the configured
+`user.name` and `user.email` — do not modify git config to attribute
+otherwise.
+
+## No AI Attribution — Anywhere
+
+Absolutely no AI/LLM/Claude/Anthropic attribution in:
+
+- Commit messages (subject or body)
+- PR descriptions and titles
+- Issue comments and reviews
+- Code comments
+- Commit trailers
+- Release notes, changelogs, and any public-facing artifact
+
+This means:
+
+- **No** `Co-Authored-By: Claude …` (or Claude Code, or any AI) trailers
+- **No** "Generated with Claude Code" footers or equivalents
+- **No** 🤖 emojis or similar markers implying AI authorship
+- **No** references to "Claude", "Anthropic", "LLM", "AI tool" as a credited contributor
+- **No** attribution added via template defaults — strip them before committing
+
+If a tool, template, or default config inserts attribution, remove it. If
+settings.json needs it, set `attribution.commit: ""` and `attribution.pr: ""`
+to suppress the defaults.
+
+## Commit Message Format
+
+Conventional prefixes:
+
+- `feat:` — new feature
+- `fix:` — bug fix
+- `refactor:` — code restructuring, no behavior change
+- `test:` — adding or updating tests
+- `docs:` — documentation only
+- `chore:` — build, tooling, meta
+
+Subject line ≤72 characters. Body explains the *why* when not obvious.
+Skip the body entirely when the subject line is self-explanatory.
+
+## Before Committing
+
+1. Check author identity: `git log -1 --format='%an <%ae>'` — should be the user.
+2. Scan the message for AI-attribution language (including emojis and footers).
+3. Review the diff — only intended changes staged; no unrelated files.
+4. Run tests and linters (see `verification.md`).
+
+## If You Catch Yourself
+
+Typing any of the following — stop, delete, rewrite:
+
+- `Co-Authored-By: Claude`
+- `🤖 Generated with …`
+- "Created with Claude Code"
+- "Assisted by AI"
+
+Rewrite the commit as the user would write it: concise, focused on the
+change, no mention of how the change was produced.
diff --git a/.claude/settings.json b/.claude/settings.json
index cca0eaa..9ab9f12 100644
--- a/.claude/settings.json
+++ b/.claude/settings.json
@@ -1,4 +1,8 @@
{
+ "attribution": {
+ "commit": "",
+ "pr": ""
+ },
"permissions": {
"allow": [
"Bash(make)",
diff --git a/CLAUDE.md b/CLAUDE.md
index 9b95e4f..2562695 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -35,9 +35,11 @@ See rule files in `.claude/rules/`:
## Git Workflow
-- Conventional commit prefixes: `feat:`, `fix:`, `refactor:`, `test:`, `docs:`, `chore:`
-- Pre-commit hook in `githooks/` scans for secrets and runs `check-parens` on staged `.el` files
-- Activate on fresh clone: `git config core.hooksPath githooks`
+Commit conventions: see `.claude/rules/commits.md` (author identity,
+no AI attribution, message format).
+
+Pre-commit hook in `githooks/` scans for secrets and runs `check-parens` on
+staged `.el` files. Activate on fresh clone with `git config core.hooksPath githooks`.
## Problem-Solving Approach