---
name: git-auto-commit
description: "현재 저장소의 변경사항을 분석해 한국어 커밋 메시지(MMDD:HHmm - 요약)와 상세 변경 요약을 생성하고, `yarn lint` 및 `yarn build`를 모두 통과한 뒤 전체 스테이징 후 커밋합니다(푸시 없음). lint/build 실패 시 AI가 로그를 기반으로 자동 수정→재시도를 수행합니다(최대 N회). 기본 브랜치는 develop이며, 다른 브랜치에서는 경고 후 진행합니다."
---

# Git Auto Commit

## Overview

현재 저장소의 변경사항을 분석하여 다음 작업을 자동으로 수행합니다.

- 한국어 한 줄 커밋 메시지 생성
- 상세 변경 요약 생성 (커밋 전 확인용)
- `yarn lint` 강제 실행
- `yarn build` 강제 실행
- 전체 스테이징 후 커밋
- 자동 push 없음

추가로, lint/build가 실패하면 **AI가 자동으로 수정 작업을 수행**하고 재시도합니다.
모든 검증(lint, build)은 **커밋 전에 반드시 통과**해야 하며,
최대 재시도 횟수를 초과하면 커밋을 중단합니다.

---

## Commit Message Format

- 형식(엄수): `MMDD:HHmm - 메시지`
- 시간 기준: 로컬 타임(Asia/Seoul), 24시간제

예시
0123:2215 - 로그인 카드 UI 구조 개선

---

## Detailed Change Summary

커밋 전에 변경 내용을 사람이 읽기 좋은 형태로 자세히 요약합니다.

### 요약 기준

- 변경된 파일 및 diff 기반
- 기능 및 의도 중심 요약
- 단순 diff 나열 금지
- 코드 리뷰 시 이해를 돕는 수준의 정보 제공

### 예시 출력

[상세 변경 요약]

- 로그인 카드 컴포넌트 레이아웃 재구성
- 버튼 영역 padding 및 타이포 크기 조정
- 모바일 환경에서 overflow 발생하던 문제 수정
- 관련 스타일 파일 구조 정리

---

## Workflow

### 1. 변경 컨텍스트 수집

- `git status --porcelain`로 변경 파일 확인
- `git diff --stat`, `git diff`로 변경 범위 파악
- 변경사항이 없으면 중단

### 2. 상세 변경 요약 생성

- 변경 파일과 diff를 기반으로 bullet 형태의 상세 요약 생성
- 커밋 전 사용자에게 출력하여 검토 가능

### 3. 커밋 메시지 생성

- 상세 요약을 압축해 한 줄 한국어 요약 생성
- 포맷 고정: `MMDD:HHmm - 메시지`

### 4. Lint → Build → Commit (No Push)

#### 4-1. Lint 검사 (Auto-heal)

- `yarn lint` 실행
- 성공: 다음 단계로 진행
- 실패: 아래 **자동 복구 루프** 실행

#### 4-2. Build 검사 (Auto-heal)

- `yarn build` 실행
- 성공: 다음 단계로 진행
- 실패: 아래 **자동 복구 루프** 실행

#### 4-3. Commit

- `git add -A`
- `git commit -m "<메시지>"`
- 브랜치가 `develop`이 아니면 경고 후 진행
- 자동 push는 하지 않음

---

## Auto-heal Policy (NEW ✨)

lint/build 실패 시 AI가 로그를 기반으로 수정하고 재시도합니다.

### 자동 복구 루프(권장 기본값)

- 최대 시도 횟수: 3회 (lint), 2회 (build)
- 각 시도마다:
  1. 실패 로그 수집(핵심 에러 라인/파일/스택)
  2. 원인 분류(예: ESLint 규칙 위반 / 타입 오류 / import 누락 / 경로 오류 / 빌드 설정 문제)
  3. 가능한 자동 조치 수행
  4. 동일 명령 재실행
- 성공 시 즉시 다음 단계로 진행
- 최대 시도 횟수 초과 시:
  - 커밋 중단
  - 마지막 실패 로그 요약 + 사용자가 수동으로 처리할 액션 제시

### 자동 조치 범위(예시)

- Lint:
  - `yarn lint --fix` 1회 자동 시도(프로젝트가 지원하는 경우)
  - import 정렬/미사용 변수 제거/규칙 위반 수정
  - prettier/eslint 충돌 시 설정/규칙 정리(범위 제한)
- Build:
  - TypeScript 타입 오류 수정(명확한 경우)
  - 누락된 export/import 경로 수정(명확한 경우)
  - 환경변수/설정 키 누락 등은 “안전한 기본값/가드” 추가(보수적으로)

### 안전장치(중요)

- 잠재적으로 위험한 변경은 자동으로 하지 않음:
  - 의존성 대규모 업그레이드, 락파일 전체 재생성, 빌드 파이프라인/배포 설정의 광범위 변경
  - 의미가 불명확한 타입 캐스팅 남발(any 강제)
- 자동 수정이 코드 의미를 바꿀 수 있는 경우:
  - AI는 수정안을 제시하고, “왜 필요한지”와 “영향 범위”를 설명한 뒤 진행
- 비밀정보/민감파일(.env, 키 파일 등) 내용은 수정/출력하지 않음

---

## Run Script

PowerShell 예시:

.\scripts\commit_with_lint.ps1 -Summary "로그인 카드 UI 구조 개선"

옵션 예시:

- 요약 자동 생성 + 상세 요약 출력 + 자동 복구 활성화
  .\scripts\commit_with_lint.ps1

- 자동 복구를 더 적극적으로(시도 횟수 상향) 하고 싶다면 스크립트 옵션으로 분리 권장:
  - -MaxLintFixAttempts 3
  - -MaxBuildFixAttempts 2

---

## Notes

- Push는 사용자가 수동으로 수행합니다.
- lint/build가 실패한 커밋을 원천 차단합니다.
- 상세 변경 요약은 커밋 로그 품질 유지를 위해 커밋 메시지에 포함하지 않습니다.
- 자동 복구는 “CI 실패를 사전에 줄이기 위한 로컬 품질 게이트” 역할을 목표로 합니다.
