1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# Commit Message Validation Configuration Template
# The Conventional Commits specification is a lightweight convention on top of commit messages.
# For detailed content, please refer to: https://www.conventionalcommits.org/en/v1.0.0/#summary
# The commit message should be structured as follows:
#
# ╔═════════════════════════════════════════════════╗
# ║ COMMIT FORMAT TEMPLATE ║
# ╠═════════════════════════════════════════════════╣
# ║ type(optional scope): subject ║
# ║ ║
# ║ [optional body] ║
# ║ ║
# ║ [optional footer] ║
# ║ - BREAKING CHANGE: xxxxx ║
# ║ - Closes #issue ║
# ╚═════════════════════════════════════════════════╝
#
# Structure explanation:
# 1. type → Required, commit type (feat/fix/docs etc.)
# 2. scope → Optional, scope (wrapped in parentheses)
# 3. subject → Required, brief description (space after colon)
# 4. body → Optional, detailed description (blank line after header)
# 5. footer → Optional, notes (blank line after body)
# You can optionally modify, delete, or comment out the options that do not require validation.
[]
= "1.0.0"
= true
# Skip validation only when the first line of the commit message
# exactly matches one of the following keywords (case‑sensitive).
= [
"--no-verify",
"SKIP",
]
[]
# Header validation
# Includes type, scope, and subject checks
#
# Breaking change detection:
# Adding `!` before the colon indicates a breaking change.
# Example: `refactor(parser)!: change public API`
[]
# Type validation module
#
# allowed_types:
# - Defines the list of allowed commit types (following Conventional Commits)
# - ⚠ This array must NOT be empty under any circumstances
# - An empty array is treated as a configuration error and will cause validation to fail
# - If you do not need type validation, comment out or remove the entire allowed_types field
#
# Examples:
# feat: add new feature
# fix: resolve bug
# docs: update documentation
#
= [
"feat", # New feature
"fix", # Bug fix
"docs", # Documentation
"style", # Code style (formatting only)
"refactor", # Code refactor (no behavior change)
"test", # Test related
"chore", # Maintenance tasks
"ci", # Continuous Integration changes
]
[]
# Scope validation rules
#
# required:
# - true → A scope must be provided and must appear in allowed_scopes
# - false → Scope is optional; if provided, it must appear in allowed_scopes
#
# allowed_scopes:
# - Defines the list of allowed scopes
# - ⚠ Regardless of the value of `required`, this array must NOT be empty
# - An empty array is considered a configuration error and will cause validation to fail
# - If you do not need scope validation, set required to false and comment out the entire allowed_scopes field.
#
# Examples:
# feat: ...
# feat(core): ...
# fix(ui): ...
#
= false
= [
"core",
"cli",
"ui",
"docs",
"test",
]
# Subject validation module
[]
= 1
= true # Forbid ending with a period
= 2 # Default min_length is 2
= 72 # Default max_length is 72
[]
= false
= 1
= true
= 2
= 72
[]
# Footer section is distinguished from the body by specific keywords.
# When one of the start keywords appears, the following lines are treated as footer content.
# Common keywords include BREAKING CHANGE, Closes, Fixes, Signed-off-by.
= ["BREAKING CHANGE", "Closes", "Fixes", "Signed-off-by"]
= 1
= 2
= 72
= true
# Whether to enable spell checking for footer keywords
[]
# When enabled, and the commit contains only a header + body (no footer),
# the body will be checked to determine whether it is a misspelled footer keyword.
= true
# Similarity threshold. Default is 0.7.
# When the similarity score exceeds this threshold, the text is considered a misspelling.
= 0.7