aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--claude-rules/commits.md14
1 files changed, 9 insertions, 5 deletions
diff --git a/claude-rules/commits.md b/claude-rules/commits.md
index 9e1a8e0..aeb25cb 100644
--- a/claude-rules/commits.md
+++ b/claude-rules/commits.md
@@ -289,7 +289,11 @@ enough to skip review" exemption on top of it.
### Step 2: draft, review, publish
-**Voice mode and approval gate.** Before drafting, run this command to decide which mode applies:
+**Voice patterns and the approval gate are two independent decisions.** Don't bundle them.
+
+*Voice patterns are always personal for publish artifacts.* Commit messages, PR titles + bodies, and PR review comments all go out under the user's name, so they always run through `/voice personal` (39 patterns, including the 8 personal-only ones), regardless of whether `.ai/` is tracked. These three are personal-voice artifacts by definition — the skill's personal mode exists for exactly them. Pattern #39 (public-artifact scope flag) matters *most* on team-visible artifacts, so it must never be skipped on a PR comment or PR body. There is no "general-voice mode" for publish artifacts.
+
+*The approval gate is the only thing `.ai/`-tracking decides.* Before drafting, run this command:
```
git ls-files :/.ai/ 2>/dev/null | head -1
@@ -297,10 +301,10 @@ git ls-files :/.ai/ 2>/dev/null | head -1
The `:/` pathspec anchors the search to the repo root, so the command works from any subdirectory. Without it, running from a subdir returns no matches even when `.ai/` is tracked at the repo root, which silently misclassifies the project.
-- **No output** — `.ai/` is gitignored, missing, or empty. **Personal-voice mode**: drafts run through `/voice personal` (39 patterns including the 8 personal-only ones), and the **approval gate applies**. Write to `/tmp`, run the voice pass, print inline, ask approve / request changes / open in editor, then publish only on explicit approval.
-- **Any output** — one or more files under `.ai/` are tracked. The `.ai/` layer is shared with the team, so the personal voice patterns (first-person rewrite, contraction enforcement, semicolon swap, etc.) don't fit. **General-voice mode**: drafts run through `/voice` (general mode, 31 patterns; the 8 personal-only patterns are skipped), and the **approval gate is skipped**. Write to `/tmp`, run the voice pass, print inline, publish immediately.
+- **No output** — `.ai/` is gitignored, missing, or empty (the user's personal repos). **Gate applies**: write to `/tmp`, run `/voice personal`, print inline, ask approve / request changes / open in editor, then publish only on explicit approval.
+- **Any output** — one or more files under `.ai/` are tracked (a shared / team repo). **Gate skipped for velocity**: write to `/tmp`, run `/voice personal`, print inline, publish immediately.
-The subflows below describe the personal-voice path with the full gate. For the general-voice path: substitute `/voice` for `/voice personal` everywhere, and collapse the "Ask: approve, request changes, or open in editor" step — the draft prints inline and the publish step runs immediately afterward.
+Either way the draft runs through `/voice personal` first. The subflows below describe the full gated path. For the gate-skipped path, run the same `/voice personal` pass, then collapse the "Ask: approve, request changes, or open in editor" step — the draft prints inline and the publish step runs immediately afterward.
**For commit messages:**
@@ -439,7 +443,7 @@ conversation (e.g. "commit this as `chore: bump version`", "reply just
`/review-code` in Step 1 still runs when it applies; Phase 0 of that skill
handles trivial diffs, and acknowledgment-only replies don't need it at all.
-**Single-skill gate.** Each of the three subflows above runs the voice skill before printing the draft. In personal-voice mode it's `/voice personal` — 39 patterns covering AI-writing signs, universal good-writing rules, and the 8 personal-only patterns. In general-voice mode it's `/voice` — the same 31 patterns minus the 8 personal-only ones. The mode is determined by the **Voice mode and approval gate** preamble at the top of Step 2. Running the skill is mandatory; the printed draft must have been through it. When the user asks mid-flow for "the voice pass" on an in-progress draft, that means re-run the full pattern walk in the current mode — not a subset. Always state that the skill ran when announcing the printed draft (e.g. "/voice personal — 39 patterns walked" or "/voice — 31 patterns walked"). Skipping the pass without flagging it is a defect.
+**Single-skill gate.** Each of the three subflows above runs `/voice personal` before printing the draft — 39 patterns covering AI-writing signs, universal good-writing rules, and the 8 personal-only patterns. Publish artifacts (commits, PR titles + bodies, PR review comments) always use personal mode; the `.ai/`-tracking check at the top of Step 2 decides only whether the approval gate fires, not which patterns run. Running the skill is mandatory; the printed draft must have been through it. When the user asks mid-flow for "the voice pass" on an in-progress draft, that means re-run the full 39-pattern walk — not a subset. Always state that the skill ran when announcing the printed draft (e.g. "/voice personal — 39 patterns walked"). Skipping the pass without flagging it is a defect.
### Hook-level authorization