Commit Messages
Format
type(scope): short message
Types
feat- new featurefix- bug fixrefactor- code refactoringchore- maintenance tasks (deps, config, tooling)
Scopes
Use the owning app or package name as scope when working in this monorepo.
Scope Selection Order
- If the change is fully owned by one app in
apps/<name>, use that app name. - If the change is fully owned by one package in
packages/<name>, use that package name. - Only use an inferred scope like
deps,ci, oragentswhen the change truly spans multiple workspaces or does not belong to a single app/package. - Do not pick a scope based on the kind of code changed (eg
data) when the files clearly belong to one app/package. The workspace owner wins.
Inferred scopes (when change doesn't fit an app/package):
agents- CLAUDE.md, AGENTS.md,.claude/folderci- GitHub workflows, CI/CD configurationdeps- dependency updates across multiple packages
Good Scope Choices
fix(player): improve belt progress contrastfor changes inpackages/player/...fix(main): correct level page copyfor changes inapps/main/...fix(api): handle null response in authfor changes inapps/api/...
Avoid These Mistakes
fix(ui): improve belt progress contrastwhen the change is inpackages/playerfix(data): update main progress querywhen the change is only inapps/mainfix(ui): restyle main level cardwhen the change is only inapps/main
Examples
feat(main): add user profile page
fix(player): improve belt progress contrast
fix(api): handle null response in auth
refactor(db): use enum for status field
chore(deps): update react to v19
chore(agents): add commit skill
fix(ci): update node version in workflow
Rules
- Use lowercase for entire message
- No period at the end
- Keep message under 72 characters
- Use imperative mood ("add" not "added")
PR Titles
Use the same type(scope): short message format as the commit title.
PR Descriptions
Keep descriptions brief. Focus on what changed. No need to list verification commands run.
Converted and distributed by TomeVault — claim your Tome and manage your conversions.