| name | commit |
| description | 변경된 파일을 기능 단위로 그룹화하고, 각 그룹의 관련 테스트를 실행한 후 순서대로 커밋한다. |
| argument-hint | [커밋 메시지 (선택)] [--all: 그룹 분리 없이 전체 커밋] |
| allowed-tools | Bash, Read, Glob, Grep, Skill |
commit
변경 파일을 기능 단위로 묶어 순서대로 커밋한다. 각 커밋 전 관련 검증(자바=테스트, 문서=markdownlint)을 통과시킨다.
Step 1: 프리플라이트 (브랜치 가드 + 변경 수집)
bash .claude/skills/commit/preflight.sh
출력에 따라:
ABORT: → 즉시 중단하고 사용자에게 그대로 보고한다 (보호 브랜치·detached HEAD).
NO_CHANGES → "커밋할 변경사항이 없습니다" 출력 후 종료.
- 정상 →
TRACKED 섹션을 커밋 대상으로 삼는다. UNTRACKED 섹션은 자동 포함하지 않는다 (처리 규칙은 grouping.md).
경로는 git 루트 기준이다(backend/<module>/...). 이후 git add에 그대로 쓴다.
Step 2: 기능 단위 그룹화
--all 이면 이 단계를 건너뛰고 전체를 한 그룹으로 처리한다.
모듈 → 도메인 → 계층 순으로 묶고, 테스트는 대응 프로덕션과 같은 그룹, 문서·설정은 별도 그룹으로 분리한다. 상세 기준·untracked 처리·제시 형식은 grouping.md 참조.
그룹안을 사용자에게 제시해 확인받은 뒤 Step 3으로 넘어간다.
Step 3: 그룹별 검증 (병렬)
커밋은 순서대로지만 검증은 커밋 전 모든 그룹을 한 번에 병렬로 실행한다. 그룹마다 순차로 기다리지 않는다.
그룹 유형별 검증 대상:
- 자바 프로덕션 포함 →
/run-tests로 위임. 한 모듈 안이면 :module 타겟, 여러 모듈/패키지에 걸치면 해당 패키지 필터를 모두 포함한다 (./gradlew 직접 실행 금지 — CLAUDE.md).
- 문서(
.md)만 → 저장소 루트에서 npx markdownlint-cli2 (Docs CI가 dev PR에서 강제하는 것과 동일).
- 설정/빌드만 → 자동 검증 없음.
- 테스트 파일만 → 해당 테스트만 실행한다.
검증 대상 그룹을 한 메시지에서 동시에 띄운다(그룹 수만큼 /run-tests/lint 병렬). 각 /run-tests --sync는 Agent 1회다.
결과 처리:
- 전부 통과 → Step 4.
- 일부 실패 → 실패 그룹·원인을 보고하고 처리(수정 후 재시도 / 건너뜀 / 전체 중단)를 선택받는다.
- 수정 후 재시도: 수정은 뒤 순서 그룹에 영향을 줄 수 있으므로 수정한 그룹과 그 이후 모든 그룹을 다시 병렬 검증한다. 영향 없는 앞 순서 그룹은 재실행하지 않는다.
- 건너뜀: 해당 그룹을 제외하고 통과 그룹만 진행한다.
Step 4: 순차 커밋
검증 통과 후 그룹 순서대로 스테이징·커밋한다.
git add <그룹 내 파일 목록>
커밋 메시지 결정:
$ARGUMENTS에 메시지가 있으면 그룹 scope를 붙여 사용한다 (fix: … + 그룹 catalog → fix(catalog): …). 그룹이 하나면 scope 없이 그대로.
- 없으면 변경을 분석해
type(scope): 한국어 설명(70자 이내)을 자동 생성한다.
- type: 기능=
feat · 버그=fix · 리팩토링=refactor · 테스트만=test · 설정=chore · 문서=docs
git commit -m "$(cat <<'EOF'
<커밋 메시지>
<하네스가 지정한 Co-Authored-By 트레일러를 그대로 붙인다 — 모델명 하드코딩 금지>
EOF
)"
커밋 후 다음 그룹으로 넘어간다.
Step 5: 완료 보고
모든 그룹 커밋 후 생성된 커밋을 보여준다.
git log --oneline -<커밋한 수>