# Git Workflow — 브랜치 / 커밋 / push 정책

반복 적용되는 git 작업 규칙의 정본(canonical)이다. CLAUDE.md '작업 원칙'의 커밋 관련 불릿은 이 문서를 가리킨다. 하니스 기본규칙("Commit or push only when the user asks. If on the default branch, branch first.")을 프로젝트 차원에서 보충·명시화한다.

## 브랜치 분류

- **메인스트림 브랜치**: `main`, `master`, 그리고 origin 상의 보호 브랜치(릴리스/배포 브랜치 등). 현재 프로젝트 default 는 `main`(`.git/config`, `origin/HEAD` 기준).
- **비-메인스트림 브랜치**: 위를 제외한 모든 작업 브랜치 — `feat/*`, `fix/*`, `chore/*`, `docs/*` 등. 현재 활성 작업 브랜치 `feat/v2` 가 여기 속한다.

## 커밋 표준 승인 (durable authorization)

- **비-메인스트림 브랜치에서 커밋은 표준 승인된 행위다.** 작업 단위가 완결될 때마다 사용자에게 매 건 묻지 않고 커밋한다. 이는 하니스 기본규칙의 '사용자 요청 시에만 커밋' 원칙을, 프로젝트 지침이 사전·상시 승인을 부여하는 형태로 만족시키는 것이다(자동 커밋 재량 위임이 아니라, 사용자가 부여한 표준 승인의 실행).
- **메인스트림 브랜치에는 표준 승인이 적용되지 않는다.** `main`/`master`/보호 브랜치 위에서는 직접 커밋하지 않고, 먼저 작업 브랜치를 생성한 뒤 비-메인스트림 규칙으로 진행한다.
- **`push` 는 브랜치와 무관하게 항상 사용자 명시 요청 시에만 수행한다.** 표준 승인은 로컬 커밋에 한정되며 원격 반영(push)·PR 생성은 포함하지 않는다.
- 작업 전후로 `git status --short` 로 사용자 변경을 보호한다(섞인 미관련 변경을 같은 커밋에 넣지 않는다).

## 커밋 단위

- 한 커밋은 하나의 논리적 변경으로 한정한다. 코드 변경과 그에 대한 문서/그래프 메타 갱신처럼 결합이 강한 산출물은 함께 묶되, 성격이 다른 변경(예: 기능 구현 vs 빌드 스크립트 vs 정책 문서)은 분리한다.
- 버그 수정 커밋은 `docs/development/verification-strategies.md` 의 회귀 테스트 의무를 따른다(재현 테스트 동반).
- `.atp/work-session/<timestamp>/` 산출물은 추적 대상이며, 해당 세션의 코드/문서 변경과 함께 또는 별도 `chore`/`docs` 커밋으로 기록한다.

## 커밋 메시지 규약

- **Conventional Commits** 형식을 사용한다: `type(scope): subject`. 사용 중인 type: `feat`, `fix`, `docs`, `chore`. scope 는 한국어 가능(예: `docs(graph)`, `chore(dev)`).
- subject 는 한국어로 변경의 핵심을 간결히 적는다(이모지 미사용).
- 본문은 '왜'가 자명하지 않을 때 추가하고, 변경 항목은 불릿으로 정리한다. 검증 결과(예: `./mvnw test N/N GREEN`)가 있으면 본문에 명시한다.
- 모든 에이전트 생성 커밋에는 트레일러를 포함한다:

  ```
  Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
  ```

  세션 추적이 필요하면 `Claude-Session: <url>` 트레일러를 추가할 수 있다.

## 참고

- 검증 의무(L1/L2/L3, 변경 범주별): `docs/development/verification-strategies.md`
- 에이전트 출력/압축 규약: `docs/development/agent-output-conventions.md`
