playbook/skills/commit-message/SKILL.md

3.7 KiB
Raw Blame History

name: commit-message description: Use when the user asks for help writing a commit message, wants emoji/type(scope): subject formatting, or asks to review staged changes before committing.

Commit Message提交信息建议器

Overview

Turn a staged diff into a commit recommendation that matches repository policy. Core principle: understand staged intent and commit boundaries before drafting the message.

Authority source:

  • docs/common/commit_message.md
  • docs/standards/playbook/docs/common/commit_message.md (vendored playbook)

When to Use

  • The user asks to write or improve a commit message
  • The user wants emoji/type(scope): subject formatting
  • The user asks whether current staged changes should be split before commit
  • The user asks to review staged changes before running git commit

When Not to Use

  • No staged changes exist and the user expects a final commit message based on the actual staged diff
  • The task is writing a PR title, release note, or changelog instead of a git commit message
  • The user already provided an exact commit message and only wants it executed

Inputs

  • Current staging state (git status --short, git diff --cached)
  • Nearest applicable commit_message.md
  • Whether the user wants suggestions only or a command-ready final message

Procedure

  1. Baseline the repo state

    • Inspect staged and unstaged state separately.
    • If nothing is staged, stop. Explain that a staged-diff-based recommendation is unavailable and ask whether files should be staged first.
    • If only unstaged changes exist, stop before proposing a final message. Offer a draft only if the user explicitly wants one.
  2. Load the authority spec

    • Prefer the nearest commit_message.md.
    • Reuse its type, emoji, scope, and body/footer conventions exactly.
  3. Summarize staged intent

    • Read the staged diff at the smallest useful granularity.
    • Identify the main logical change, affected areas, and whether the staged set mixes unrelated work.
    • If staged changes combine unrelated goals, strongly recommend splitting the commit before drafting a single message. In other words, strongly recommend splitting the commit instead of hiding multiple intents behind one subject.
  4. Draft message options

    • Produce one recommended option and up to two alternatives.
    • Keep the subject concrete, specific, and under the repo limit.
    • Use body/footer only when they add real context such as motivation, impact, verification, issue links, or breaking-change notes.
  5. Finalize safely

    • Make it explicit whether the output is a suggestion or a final chosen message.
    • Do not run git commit unless the user explicitly asks for execution after reviewing the recommendation.

Output Contract

  • Detected: staged files summary, dominant intent, and split/no-split judgment
  • Spec: which commit_message.md was used
  • Proposed: Option A (recommended), Option B, Option C
  • Optional body/footer: only when justified
  • Notes: risks, ambiguity, or split advice

Success Criteria

  • The recommendation matches the staged diff rather than guessed intent
  • The selected format complies with the nearest commit policy
  • Split advice appears when staged changes are logically mixed
  • No commit command is executed unless the user asked for it

Failure Handling

  • If no staged diff exists, stop and explain the limitation instead of inventing a final message
  • If the staged set is too broad or ambiguous, recommend splitting and explain why
  • If no local policy file is found, state the fallback convention before drafting
  • If repo state changes during review, rerun the staged summary before finalizing