Conventional Commit Workflow
When To Use
- Generating conventional commit messages from staged changes
When NOT To Use
- Full PR preparation: use sanctum:pr-prep
- Amending existing commits: use git directly
Steps
Gather context (run in parallel):
git status -sb
git diff --cached --stat
git diff --cached
git log --oneline -5
- When sem is available (see
leyline:sem-integration):
sem diff --staged --json for entity-level changes
If nothing is staged, tell the user and stop.
When sem output is available, use entity names
(function, class, method) in the commit subject and
body instead of parsing raw diff hunks. For example,
"add function validate_webhook_url" instead of
"add validation logic to notify.py".
Classify: Pick type (feat, fix, docs, refactor,
test, chore, style, perf, ci) and optional scope.
Draft the message:
- Subject:
<type>(<scope>): <imperative summary> (50 chars max)
- Body: What and why, wrapped at 72 chars
- Footer: BREAKING CHANGE or issue refs
Slop check: reject these words and replace with plain
alternatives:
| Reject |
Use instead |
| leverage, utilize |
use |
| seamless |
smooth |
| comprehensive |
complete |
| robust |
solid |
| facilitate |
enable |
| streamline |
simplify |
| optimize |
improve |
| delve |
explore |
| multifaceted |
varied |
| pivotal |
key |
| intricate |
detailed |
Also reject: "it's worth noting", "at its core",
"in essence", "a testament to"
4a. Character-level slop check: load shared/output-hygiene.md
(Contract A) and strip these markers. Inline fallback if that
module is absent:
| Marker |
Replace with |
"+" as a prose conjunction |
and (keep + in versions/code) |
em-dash — |
colon, period, comma, or rewrite |
-- as prose punctuation |
colon or rewrite |
arrows -> / → as connectors |
to / into |
smart quotes “ ” ‘ ’ |
straight " and ' |
4b. Subject-matter check (Contract B): describe the change by its
reader-facing effect. Name neither the AI origin nor the specific
marker removed. Do NOT write remove AI slop, de-slop,
AI-generated content, AI phrasing, replace em-dashes, or
remove smart quotes. Test: if the subject only makes sense as "I
cleaned up AI output", rewrite it. For example docs: clarify the setup section, not style: replace em-dashes with colons.
- Write to
./commit_msg.txt and preview.
Rules
- NEVER use
git commit --no-verify or -n
- Write for humans, not to impress
- If pre-commit hooks fail, fix the issues
Exit Criteria
Source: athola/claude-night-market → plugins/sanctum/skills/commit-messages/SKILL.md
1---2name: commit-messages-23description: Generates conventional commit messages from staged changes. Use when committing and needing a well-formatted message. Do not use for full PR prep; use pr-prep.4---5
6
7# Conventional Commit Workflow
8
9## When To Use
10
11- Generating conventional commit messages from staged changes
12
13## When NOT To Use
14
15- Full PR preparation: use sanctum:pr-prep
16- Amending existing commits: use git directly
17
18## Steps
19
201. **Gather context** (run in parallel):
21 - `git status -sb`
22 - `git diff --cached --stat`
23 - `git diff --cached`
24 - `git log --oneline -5`
25 - When sem is available (see `leyline:sem-integration`):
26 `sem diff --staged --json` for entity-level changes
27
28 If nothing is staged, tell the user and stop.
29
30 When sem output is available, use entity names
31 (function, class, method) in the commit subject and
32 body instead of parsing raw diff hunks. For example,
33 "add function validate_webhook_url" instead of
34 "add validation logic to notify.py".
35
362. **Classify**: Pick type (`feat`, `fix`, `docs`, `refactor`,
37 `test`, `chore`, `style`, `perf`, `ci`) and optional scope.
38
393. **Draft the message**:
40 - **Subject**: `<type>(<scope>): <imperative summary>` (50 chars max)
41 - **Body**: What and why, wrapped at 72 chars
42 - **Footer**: BREAKING CHANGE or issue refs
43
444. **Slop check**: reject these words and replace with plain
45 alternatives:
46
47 | Reject | Use instead |
48 |--------|-------------|
49 | leverage, utilize | use |
50 | seamless | smooth |
51 | comprehensive | complete |
52 | robust | solid |
53 | facilitate | enable |
54 | streamline | simplify |
55 | optimize | improve |
56 | delve | explore |
57 | multifaceted | varied |
58 | pivotal | key |
59 | intricate | detailed |
60
61 Also reject: "it's worth noting", "at its core",
62 "in essence", "a testament to"
63
644a. **Character-level slop check**: load `shared/output-hygiene.md`
65 (Contract A) and strip these markers. Inline fallback if that
66 module is absent:
67
68 | Marker | Replace with |
69 |--------|--------------|
70 | `"+"` as a prose conjunction | `and` (keep `+` in versions/code) |
71 | em-dash `—` | colon, period, comma, or rewrite |
72 | `--` as prose punctuation | colon or rewrite |
73 | arrows `->` / `→` as connectors | `to` / `into` |
74 | smart quotes `“ ” ‘ ’` | straight `"` and `'` |
75
764b. **Subject-matter check** (Contract B): describe the change by its
77 reader-facing effect. Name neither the AI origin nor the specific
78 marker removed. Do NOT write `remove AI slop`, `de-slop`,
79 `AI-generated content`, `AI phrasing`, `replace em-dashes`, or
80 `remove smart quotes`. Test: if the subject only makes sense as "I
81 cleaned up AI output", rewrite it. For example `docs: clarify the
82 setup section`, not `style: replace em-dashes with colons`.
83
845. **Write** to `./commit_msg.txt` and preview.
85
86## Rules
87
88- NEVER use `git commit --no-verify` or `-n`
89- Write for humans, not to impress
90- If pre-commit hooks fail, fix the issues
91
92## Exit Criteria
93
94- [ ] `commit_msg.txt` written to the working directory containing
95 the drafted conventional commit message
96- [ ] Subject line follows `<type>(<scope>): <summary>` format and
97 is at most 50 characters
98- [ ] Slop word check passes: none of the banned words (leverage,
99 utilize, seamless, comprehensive, robust, etc.) appear in the
100 message
101- [ ] Character-level check passes: no em-dashes, no `+` as prose
102 conjunction, no smart quotes, no `->` as prose connector
103- [ ] If nothing is staged, skill halts immediately and reports
104 "nothing staged" without producing a commit message
105
106---
107
108**Source:** [`athola/claude-night-market`](https://github.com/athola/claude-night-market) → `plugins/sanctum/skills/commit-messages/SKILL.md`