aboutsummaryrefslogtreecommitdiff
path: root/claude-rules/commits.md
diff options
context:
space:
mode:
Diffstat (limited to 'claude-rules/commits.md')
-rw-r--r--claude-rules/commits.md34
1 files changed, 34 insertions, 0 deletions
diff --git a/claude-rules/commits.md b/claude-rules/commits.md
index e3f75a8..3283b0a 100644
--- a/claude-rules/commits.md
+++ b/claude-rules/commits.md
@@ -91,6 +91,40 @@ Edge case: when one of these files *is* the change (a commit in the rulesets rep
**Tooling-path enumeration is the same leak.** Citing a rule as authority isn't the only way the tooling layer leaks into history. A commit whose *content* must name these paths — a `.gitignore` adding `.claude/`, `CLAUDE.md`, `.ai/` — has unavoidable, correct file content, but its *message prose* must not enumerate them ("chore: ignore .claude tooling, CLAUDE.md, and session files"). On a public or shared-remote repo that enumeration exposes the tooling layer's structure in the log just as a citation would. Name the category instead: "chore: extend gitignore for local tooling and build artifacts". The same holds for any incidental mention, not only `.gitignore` commits. Two exemptions: a commit whose change *is* one of these files (the edge case above), and private single-user repos with no shared remote, where the history is the project and there's no third party to leak to.
+## Write in the first person, as Craig
+
+Everything authored in or about this repo is first person: code comments, commit
+messages, PR descriptions, PR review comments, and any note that lands in the
+repo or its history. State a choice as a choice — "I swept the copies rather
+than repairing them, because a drifted copy outranked the global rule" beats
+"the copies are swept rather than repaired."
+
+**The "I" is Craig.** He is the author of record on every commit, comment, and
+review in his repos, and these artifacts go out under his name. So the voice is
+his, writing about his own work — not an agent narrating what it did on his
+behalf. Never write the agent into the prose as a separate party: no "Craig
+asked me to", no "I filed this for Craig", no "needs Craig's decision". Where a
+decision is still open, it is *his* open decision, written as "I haven't decided
+whether…" or "this needs a call I haven't made yet."
+
+The same holds for anyone else's work. Name them ("Kostya's PR #116 did X"),
+because they are a third party. Craig is not.
+
+Third-person constructions like "This change introduces X" or "This PR restores
+Y" read as press-release self-narration. The commit is the change, so it does
+not need announcing.
+
+**The one carve-out: code is the actor when describing behavior.** A comment
+saying *what the code does* stays third person, because the subject genuinely
+is the code and not me — "the sweep only fires when the global rule exists",
+"the guard rejects a malformed payload". First person is for the decision
+behind it, third person for the behavior itself. Both often belong in the same
+comment: what it does, then why I chose it.
+
+This is the rule the publish flow already applied to commit bodies. It lives
+here because code comments get written constantly and the publish skill is not
+loaded then.
+
## The publish flow lives in the `publish` skill
Everything about *how* a commit, PR, or review comment gets written, reviewed,