intermediate

Conventional commits

Use structured commit messages to drive changelogs, version automation, and searchable project history.

Conventional Commits structure messages as `type(scope): description` with optional breaking footer `BREAKING CHANGE:`. Tools parse history to suggest versions and generate changelogs.

| Type | Typical semver signal | |------|----------------------| | `feat` | minor | | `fix` | patch | | `feat!` or breaking footer | major |

					feat(auth): add OAuth callback route

fix(ui): prevent double submit on checkout

feat(api)!: remove legacy /v1 users endpoint

BREAKING CHANGE: /v1/users removed; migrate to /v2/users
				

Squash-merge repos must ensure the final squash message retains the type and breaking markers release tooling reads.

On interviews: automation benefits, scope conventions, when ceremony hurts small teams, and coordination with Changesets.

Common pitfalls: vague `chore` messages hiding user impact; squash titles losing structure; treating commit format as substitute for good review.

The trade-off is machine-readable history versus contributor friction.

Checklist:

  • Use meaningful type and scope.
  • Mark breaking changes explicitly.
  • Align squash messages with automation.
  • Keep commits honest about user impact.