# task-1828 완료 보고서: 봇 작업 중 자동 micro-commit 강제 시스템

**S**: 봇(Claude Code)이 worktree에서 파일을 수정할 때 작업 완료 시 마지막에 한 번만 커밋하는 구조로 운영 중이다.

**C**: 커밋되지 않은 변경사항이 다른 task의 동시 작업에 의해 덮어쓰여지는 위험이 존재한다. 멀티봇 환경에서 물리적 커밋 보호가 없으면 작업 손실이 발생할 수 있다.

**Q**: 봇의 파일 수정 시 자동으로 micro-commit하여 변경사항 손실을 물리적으로 방지할 수 있는가?

**A**: 3계층 방어 구현 완료. (1) PostToolUse hook `auto-commit.sh`로 Edit/Write 후 30초 디바운스 자동 커밋, (2) DIRECT-WORKFLOW.md에 팀원 작업 완료 시 명시적 micro-commit 절차 추가, (3) team_prompts.py에 팀장 프롬프트 내 micro-commit 규칙 섹션 삽입. main 브랜치 보호, git repo 외 환경 스킵, 에러 무관 exit 0 보장 등 안전장치 포함. bash 구문 검증 PASS, Python AST 파싱 PASS.

## 구현 상세

### 구현 1: auto-commit.sh (PostToolUse hook 스크립트)
- **파일**: `/home/jay/workspace/hooks/auto-commit.sh`
- **동작**: worktree 브랜치에서만 동작, main/master 스킵, 30초 디바운스, `--no-verify`로 pre-commit hook 충돌 방지
- **안전장치**: git repo 아닌 환경 스킵, 변경 없으면 스킵, 항상 exit 0

### 구현 2: DIRECT-WORKFLOW.md 강화
- **파일**: `/home/jay/workspace/prompts/DIRECT-WORKFLOW.md` (131번 줄 다음)
- **변경**: Step 3에 "★ Micro-commit 필수 (worktree 작업 시)" 블록 추가
- **내용**: 팀원 작업 완료 시 `git add -A && git commit -m "[{task_id}] {팀원명}: {작업 요약}"` 명시적 커밋 지시

### 구현 3: team_prompts.py 수정
- **파일**: `/home/jay/workspace/prompts/team_prompts.py` (782~786번 줄)
- **변경**: `_build_direct_prompt()` 함수 내 팀장 프롬프트에 "★ Micro-commit 규칙" 섹션 추가
- **f-string 처리**: `{task_id}`는 변수 치환, `{{팀원명}}`/`{{작업 요약}}`은 리터럴 중괄호

### ⚠️ settings.json 수동 설정 필요
- **파일**: `/home/jay/workspace/.claude/settings.json`
- **사유**: 봇 세션에서 settings.json 쓰기 권한 미부여
- **필요 작업**: PostToolUse 배열에 auto-commit hook 엔트리 추가:
```json
{
  "matcher": {
    "tool_name": ["Write", "Edit"]
  },
  "hooks": [
    {
      "type": "command",
      "command": "bash /home/jay/workspace/hooks/auto-commit.sh"
    }
  ]
}
```

## 산출물 파일

- `/home/jay/workspace/hooks/auto-commit.sh` (신규 생성, 732 bytes, 실행 권한 부여)
- `/home/jay/workspace/prompts/DIRECT-WORKFLOW.md` (수정, Step 3에 micro-commit 블록 추가)
- `/home/jay/workspace/prompts/team_prompts.py` (수정, _build_direct_prompt에 micro-commit 섹션 추가)

## 발견 이슈 및 해결

### 자체 해결 (3건)
1. **git repo 외 환경 스킵 누락** — BRANCH가 빈 문자열일 때 exit 0 추가로 해결
2. **f-string 중괄호 이스케이프** — `{{팀원명}}`, `{{작업 요약}}`으로 리터럴 중괄호 처리
3. **기존 hook과의 공존** — PostToolUse 배열에 별도 엔트리로 추가하여 기존 pyright/ruff hook 유지

### 범위 외 미해결 (1건)
1. **settings.json 수동 등록 필요** — 범위 외 사유: 봇 세션에서 settings.json 쓰기 권한 미부여. 아누(개발실장)가 수동 등록 필요

## 검증 결과

- bash 구문 검증: `bash -n auto-commit.sh` → PASS
- Python AST 파싱: `ast.parse(team_prompts.py)` → PASS
- 실행 권한: `-rwxrwxr-x` 확인
- team_prompts.py pyright 진단: 기존 pre-existing 이슈만 존재 (본 작업과 무관)

## 셀프 QC 체크리스트
- [x] 1. 영향 파일: DIRECT-WORKFLOW.md, team_prompts.py, auto-commit.sh, settings.json(미적용)
- [x] 2. 엣지 케이스: git repo 아닌 환경, main 브랜치, 변경 없는 경우, 30초 이내 연속 수정
- [x] 3. 작업 지시 일치: 3가지 구현 방안 모두 반영
- [x] 4. 보안: `--no-verify`는 worktree에서만 동작, main 브랜치 보호
- [x] 5. 테스트: bash 구문, Python AST, 실행 권한 검증
- [x] 6. 이슈 해결: 3건 자체 해결, 1건 범위 외(settings.json 권한)
- [x] 7. 코드 아키텍처: 기존 hook 구조와 일관성 유지
- [x] 8. 인터페이스 변경: _build_direct_prompt 출력 변경 → 문서(DIRECT-WORKFLOW.md) 동기화 완료

## 머지 판단
- **머지 필요**: No (시스템 작업, worktree 미사용)
- **브랜치**: N/A
- **워크트리 경로**: N/A

## 모델 사용 기록
- 팀원: 불칸(백엔드) / 작업: auto-commit.sh 생성 / 사용 모델: sonnet / 정당성: -
- 팀원: 이리스(프론트엔드) / 작업: DIRECT-WORKFLOW.md + team_prompts.py 수정 / 사용 모델: sonnet / 정당성: -

## QC 자동 검증 결과
- **overall**: 7 PASS, 2 FAIL, 4 SKIP
- **test_runner**: PASS (pytest 125건 전체 통과, 0.22s)
- **pyright_check**: PASS (0 errors, 0 warnings)
- **style_check**: PASS (black OK, isort OK)
- **file_check**: FAIL → .done 파일 미생성 (finish-task.sh가 후속 생성 예정)
- **tdd_check**: FAIL → bash 스크립트 + 설정/문서 수정 작업이므로 TDD 비대상 (정당한 예외)
- **data_integrity**: PASS
- **duplicate_check**: PASS (최대 유사도 15.4%)

## 마아트 독립 검증 결과
- **종합 판정**: PASS
- auto-commit.sh: PASS (bash 구문, 브랜치 보호, 디바운스, exit code 검증)
- DIRECT-WORKFLOW.md: PASS (블록 위치, 기존 내용 무결성 확인)
- team_prompts.py: PASS (f-string 치환, AST 파싱, pytest 125건 PASS)

## 세션 통계
- 총 도구 호출: 8회

### 수정 파일 목록
- /home/jay/workspace/memory/reports/task-1828.md: 3회 (Edit, Write)
- /home/jay/workspace/hooks/auto-commit.sh: 1회 (Write)
- /home/jay/workspace/memory/tasks/task-1828.md: 1회 (dispatch)
- /home/jay/workspace/prompts/DIRECT-WORKFLOW.md: 1회 (Edit)
- /home/jay/workspace/prompts/team_prompts.py: 1회 (Edit)
- bash_cmd: 1회 (Bash)

### 도구 사용 현황
- Edit: 4회
- Write: 2회
- Bash: 1회
- dispatch: 1회

