Commit
Create a commit following the project format.
STOP: Check Branch First
You are NOT allowed to commit on main. Before doing ANYTHING else:
- •Check the current branch in the Context section below
- •If on
main, infer an appropriate branch name from the changes (see Branch Rules) - •Create the branch with
git switch -c <branch-name>BEFORE any other steps
Do NOT proceed with formatting or staging until you are on a feature branch.
Context
- •Current branch: !
git branch --show-current - •Git status: !
git status --short - •Staged diff: !
git diff --cached - •Unstaged diff: !
git diff
Pre-commit Checks
Before committing, format and check everything:
- •
Rust formatting:
bashcargo fmt
- •
Compile check:
bashcargo check
- •
Linting:
bashcargo clippy
- •
Tests:
bashcargo test
- •
Policy checks - First get merge base, then run checks:
bashgit merge-base origin/main HEAD # Use the returned SHA in subsequent commands python3 tools/policy/check_ascii.py --diff-base <SHA> python3 tools/policy/check_errors.py --diff-base <SHA>
If merge base fails (no remote yet), run without
--diff-base:bashpython3 tools/policy/check_ascii.py python3 tools/policy/check_errors.py
If any fail, fix violations before committing.
Commit Format
<Summary starting with verb, 50 chars or less> - Bullet under 60 chars - Another bullet if needed (2-5 total)
Bullet points should be concise (under 60 chars each) and describe what changed, not background context.
ASCII only. No special Unicode characters.
CRITICAL: Do NOT add attribution. No "Generated with Claude Code", no "Co-Authored-By", no author credits. These duplicate badly when squash-merging. The commit message should ONLY contain the summary line and bullet points.
IMPORTANT: Describe the outcome, not the process. The commit message reflects what changed, not how you got there.
Branch Rules
Branch name format: <type>/<short-description>
- •Types:
feature,bugfix,refactor,release,chore,docs - •Use kebab-case:
aaa-bbb-ccc - •Keep short (~5 words max)
IMPORTANT: Name for the primary feature, not the recent task. Look at the full diff and identify what the main deliverable is.
Examples:
- •
feature/user-auth - •
bugfix/null-pointer-crash - •
refactor/split-codegen(behavior-preserving restructuring) - •
chore/update-deps(CI changes go here) - •
docs/api-reference
Instructions
- •Check branch first - See "STOP: Check Branch First" section above. Do NOT skip this.
- •Format all files (
cargo fmt) - •Run all checks (check, clippy, test, policy) - fix any violations before proceeding
- •Check git status again - Formatters may modify files beyond your original changeset. Run
git status --shortto see all modified files before staging. - •Stage files with
git add <files>(do NOT usegit add -A) - •Run
git commitas a separate command (do NOT chain with add)
Note: Never use git commit --amend if the previous commit has been pushed. If git status shows "Your branch is up to date with origin", the last commit is pushed - create a new commit instead.