Andrey Antukh 09736aa4c9 Enforce commit body line wrapping
Add a body line-length validator to scripts/check-commit. It
fails when a body line exceeds 76 characters, exempting
trailers, URLs, and unbreakable tokens. The 76 limit leaves
room for git log's four-space indent in an 80-column
terminal.

Align the subject limit with the documented 70 characters;
the checker allowed 90 before.

Document the rule as a hard, verifiable requirement in
AGENTS.md, CONTRIBUTING.md, the create-commit skill, and
the workflow memory, and point at scripts/check-commit.

Add tests for the validator and the subject length rule.

AI-assisted-by: deepseek-flash
2026-09-11 08:10:49 +00:00

2.7 KiB
Raw Blame History

name, description
name description
create-commit Stage, review, and commit files following Penpot commit conventions.

Skill: create-commit

Produce a git commit that follows Penpot's commit message conventions. This skill owns the commit format, staging review, and safety checks — it does not implement features or push.

When to Use

  • After code changes are complete and files need to be committed
  • When delegated by a workflow step (e.g. implement-plan) to handle the commit

Required Reading

Before drafting any commit, read mem:workflow/creating-commits end-to-end. It is the authoritative source for the commit message format, the emoji menu, subject/body limits, and the AI-assisted-by trailer. Follow it exactly.

Iron Rules (non-negotiable)

  1. Wrap every body line at 76 characters or fewer. Count characters, do not eyeball. Exceptions: Signed-off-by: / AI-assisted-by: trailers and lines carrying a URL. This is the rule agents skip most often.
  2. Subject ≤70 chars, imperative, capitalized, no trailing period.
  3. Blank line between subject and body.
  4. Run ./scripts/check-commit and require exit code 0. It mechanically checks rules 13. A non-zero exit is a hard blocker: fix the message and re-commit. Never report the commit as done with a failing checker.

Workflow

  1. Stage the files specified by the calling context. Do not ask for confirmation.
  2. Run git diff --staged to review the content. If you see secrets (API keys, tokens, passwords, private keys, .env values), debug prints, or anything that does not match the stated intent, STOP and tell the user before committing.
  3. Draft the message following the format in the memory doc, wrapping the body at 76 characters per line, and run:
    git commit -m "<subject>" -m "<body>"
    
    (or git commit -F - if the body has unusual characters).
  4. Verify the message with the checker:
    ./scripts/check-commit
    
    If it fails, amend the message (git commit --amend) until it passes. Do not finish with a failing checker.
  5. The AI-assisted-by trailer value is provided by the calling context — use it verbatim.

Constraints

  • Do not push. Pushing is a separate workflow handled by the user.
  • Do not run git reset, git checkout, git restore, git clean, or rm.
  • Do not pass --author. Author identity comes from the local git config.
  • Do not amend a commit you did not create in this session, unless explicitly asked.
  • Do not bypass pre-commit hooks (--no-verify) unless explicitly asked.
  • Do not add untracked files that were not created in this session.
  • Do not skip the scripts/check-commit verification step (Iron Rule 4).