agentsclimarketplace

Commit

Skill Arcadi4/skills/commit

My agent skills.

Install
npx -y skills add Arcadi4/skills --skill commit

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Use when about to make git commits, when tempted to bundle unrelated changes behind a single message, or when commit history needs to support git bisect, revert, and cherry-pick workflows. Also use when reviewing a branch before creating a PR. If you are writing a plan, specify that the executor must load this skill before start working.

The file declares its own license as CC-BY-SA-4.0. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

6.3 KB, as published. Nobody here has run it

Make Atomic Git Commits

Core Principle

Each commit = one logical change, one intention. If you cannot describe the commit in one sentence without "and", split it.

  • "Fix null pointer dereference in checkout flow" — passes
  • "Fix cart quantity bug and update user model and add tests" — fails ("and") → three commits

Each commit must be independent (understandable alone), buildable (compiles, tests pass), and complete (no partial work).

Atomic ≠ tiny. A refactor touching 20 files can be one atomic commit if it does one thing. The test: can it be reverted independently?

Red Flags — Split Now

  • Subject contains "and" or two commit types apply (e.g. feat + fix)
  • You're tempted to write "misc", "various", "cleanup", or "updates"
  • The body describes unrelated effects
  • Change A can be reverted independently from change B

Revert-Boundary Gate

Before committing a large staged diff, list the independent revert boundaries in one-line phrases. If more than one phrase is required, split the commit — even if the changes are coupled or all tests only pass after the full refactor. "They are coupled" is not an atomicity argument; use transitional buildable commits or explain why no independent revert boundary exists.

Common Rationalizations

RationalizationReality
"Only a few lines"Size is irrelevant. Different intentions = different commits.
"Fixed it while working on X"Work context ≠ commit boundary. Different reason-to-exist = different commit.
"Both are chore: type"Same type ≠ same intention. chore: update prettierchore: add dependency.
"Splitting is pedantic"Non-atomic commits break bisect, complicate reverts, confuse reviewers.
"Test file is too small"No minimum line count. Tests are test: type — always separate.
"They are deeply coupled"Coupling explains staging order, not commit boundaries. Separate intentions with separate revert boundaries = separate commits. Dependency between commits is normal.
"I'll just count the characters"Manual counting fails. Always. Use the length gate script or inline gate — never eyeball it.

Message Rules

Discover Convention First

Run git log --oneline -20 and match the repo's existing format exactly:

  • Prefix format: Conventional types (feat:, fix:)? Module names (auth:, ui:)? None?
  • Capitalization/punctuation: Sentence case or lowercase? Trailing period?
  • Scopes: If parenthesized scopes exist (feat(auth):), use existing ones. Never invent scopes. Never use commit types as scopes (fix(perf): is wrong when perf is intended as a type).

No commit history? Pick one convention and apply consistently. Conventional Commits (type(scope): summary) or plain prefix (area: summary).

Subject Line

  • Max 72 characters. Always commit through the length gate script — never call git commit directly. The script enforces the limit and is the only sanctioned commit command:
    ./commit-length-gate.sh "subject" "optional body paragraph"   # bash
    ./commit-length-gate.ps1 "subject" "optional body paragraph"  # pwsh
    
    If the script is not available in the repo, use the inline gate: subject="..."; [ ${#subject} -le 72 ] && git commit -m "$subject" || echo "Too long: ${#subject}". Never count characters yourself — it does not work.
  • Start with an imperative verb after any prefix: add, fix, extract, remove. Not feature, make, let's.
  • Formal technical language. No conversational constructions ("make X Y, not Z", "do X instead of Y").

Body

Prefer no body. Make the subject self-explanatory. Only add a body when the subject genuinely cannot carry the explanation.

Body explains WHY, not WHAT — the diff shows what changed. Write prose, never bullet points or checklists. A one-line why-statement is almost always sufficient; if you need more than 3 -m paragraphs, your commit isn't atomic.

Body neededNo body needed
Bug fix with non-obvious causeTypo, formatting, dead code removal
Refactor that changes structure (why?)Self-explanatory rename
Performance improvement (bottleneck? gain?)Single-line config or dependency bump
Breaking change or migration stepSubject fully describes the change

Forbidden in Messages

  • File lists: Git tracks files. "3 files changed, 5 tests added" is noise.
  • Plan-internal terminology: No task numbers ("Task 3"), wave/phase names, step labels. Commits must stand alone in git log. Reference ticket IDs from issue trackers, not planning artifacts.

Commit Types

TypeDescription
featNew user-facing feature
fixUser-facing bug fix
docsDocumentation or comments only
styleFormatting, whitespace, linting — no logic change (never CSS/design)
refactorCode restructuring, no behavior change
perfPerformance improvement
testTest-related changes (fixing tests = test:, not fix:)
choreBuild process, dependencies, tooling
ciCI configuration and scripts

When a change is both restructuring and performance, choose the emphasis.

Common Mistakes

MistakeFix
"Misc cleanup" commitsEach cleanup item = its own commit
Generated files mixed with hand-written codeGenerated files go in a separate commit
Rename combined with semantic editsRename first (using git mv), then edit in next commit
Rename split across commits (delete old + add new)Stage both in one commit — git needs old and new together for rename detection
One commit per fileCommit per logical change, not per file
Sub-agent output left uncommittedIncorporate sub-agent changes and commit appropriately
Calling git commit directlyAlways use the length gate script. Raw git commit bypasses the 72-char enforcement.

Emergency Exception

During active P1 outages, land the minimal fix first. Clean up history in a follow-up commit.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.