# Annotated conventional-commit skeleton.
# Use the content below (everything between the lines, comments stripped)
# as the payload of a HEREDOC commit:
#
#   git commit -m "$(cat <<'EOF'
#   ... message ...
#   EOF
#   )"
#
# ---------------------------------------------------------------------------
# Subject:  <type>(<scope>): <description>
#   - type:        feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert
#   - scope:       optional module name, e.g. (auth), (api), (parser)
#   - description: imperative mood, lowercase start, no trailing period, <=50 chars
#   - append "!" after type/scope to flag a breaking change: feat(api)!:
# ---------------------------------------------------------------------------

<type>(<scope>): <short imperative description>

# Body (optional): explain WHAT changed and WHY, not HOW. Wrap at 72 chars.
# Reference the problem being solved and any trade-offs made.
<body line one>
<body line two>

# Footer (optional): breaking changes, issue refs, trailers.
# BREAKING CHANGE: <what breaks and the migration path>
# Fixes #123
# Refs #456
# Co-authored-by: Name <name@example.com>

# ===========================================================================
# Worked example (this is what a finished message looks like):
#
# fix(parser): handle empty input without throwing
#
# parse() previously dereferenced tokens[0] before checking length, which
# crashed on an empty string. Return an empty AST node instead so callers
# can treat "no input" as a valid, benign case.
#
# Fixes #218
# ===========================================================================
