# Commit
+The procedure applies to normal repository commits, including code and
+documentation commits. Each must use the configured signing key.
+Internal git-bug commits for issues, comments, status changes, and other
+tracker metadata are exempt from signing and may be unsigned. This
+exception does not permit unsigned code or documentation commits.
+
## Procedure
1. Confirm that the configured signing key is available. If signing is
unavailable or fails, stop and report the problem. Never disable
signing, bypass it with a command or configuration override, or
- create an unsigned commit.
+ create an unsigned normal repository commit.
2. Do the `check` skill. All checks must pass before you commit.
3. Stage only the files that belong to this change. Keep unrelated
changes in separate commits.
the configured key, using `git commit -S -F MESSAGE_FILE` on the same
file. Do not add or change trailers after the check. The normal
commit hook still runs. Never skip it with `--no-verify`.
-6. Cryptographically verify each new commit's signature against the
- configured key before reporting completion. A signature header alone
- is not verification. If verification fails, stop and report it. Do
- not claim completion or publish the commit.
+6. Cryptographically verify each new normal commit's signature against
+ the configured key before reporting completion. A signature header
+ alone is not verification. If `gpg.ssh.allowedSignersFile` is not
+ set, use a temporary allowed-signers file with the configured key. Do
+ not change the Git configuration. If verification fails, stop and
+ report it. Do not claim completion or publish the commit.
## Size
- Commit often. Split the work into small, coherent, working steps, and
do not wait for a full feature.
+- Use fixup commits for review corrections when the task requires them.
+ Report the corrections and the pending fixups, but do not report the
+ work as complete while `fixup!` or `squash!` commits remain.
+- Before autosquashing, obtain the user's explicit approval to rewrite
+ the affected commit range. Permission to create a fixup does not
+ authorize a history rewrite. If approval is absent, stop and ask.
+- After an approved autosquash, sign and verify each rewritten normal
+ commit, rerun the required checks, and obtain independent review of
+ the final range before reporting completion.
- Push code only with the user's authorization. A remote does not give
permission to push.
- Rebase before an authorized push only when the task permits it. Do not
`git interpret-trailers --trailer` before the message check. Never use
a closing keyword such as "Fixes" or "Closes".
- Link the bug report when a change fixes a reported bug.
+- Include a stable archive URL when a change comes from a mailing-list
+ or forum discussion.
- Do not add an AI tool as co-author. Do not add attribution trailers.
## Example