Skip to content

Commit 9b8e083

Browse files
authored
chore(workflow): Enhanced GitHub Flow 공식 채택 + 릴리스 자동화 인프라 (#706)
* chore(workflow): Enhanced GitHub Flow 공식 채택 + 릴리스 자동화 인프라 v2.14.0 릴리스 후 git workflow 분석 결과 Gitflow 대신 Enhanced GitHub Flow (기존 de-facto 패턴 + formalization + automation) 공식 채택. 1-2명 팀 + 2일/릴리스 cadence + 단일 CLI 배포 환경에서 develop 브랜치 이중 관리 부담이 이점을 초과. ## 주요 변경 ### CLAUDE.local.md §18 신설 (Enhanced GitHub Flow 전체 정책, 247 lines) - §18.1 브랜치 구조 다이어그램 - §18.2 [HARD] 브랜치 명명 규칙 (11 prefix: feat/fix/docs/chore/ci/refactor/audit/release/hotfix/plan) - §18.3 [HARD] Merge Strategy (squash vs merge commit 기준) - feature/fix/chore/docs/plan → squash - release/*/hotfix/* → merge commit (SPEC history 보존) - §18.4 Release Cadence 표 (patch/minor/major/hotfix) - §18.5 Hotfix Workflow 실행 예시 - §18.6 Label 3축 체계 (type:/priority:/area:/status:) - §18.7 Branch Protection Rule gh api 명령어 - §18.8 Release 프로세스 (scripts/release.sh 경유) - §18.9 자동화 도구 목록 (GoReleaser/Dependabot/Auto-merge/Labeler) - §18.10 [HARD] 공식 위반 금지 사항 - §18.11 v2.14.0 Case Study (squash merge history 손실 등 4건 교훈) ### 로컬 릴리스 도구 - scripts/release.sh 신규 (278 lines) - SemVer v 접두사 검증 - 작업 트리 clean / main 브랜치 / origin 동기화 확인 - CHANGELOG.md 해당 버전 섹션 존재 확인 - CI 상태 조회 (gh api) - SPEC draft count 경고 - CHANGELOG 섹션 자동 추출 → annotated tag annotation - 확인 prompt → tag 생성 + push (GoReleaser trigger) - Workflow run watch + release 생성 확인 - --dry-run / --hotfix / --skip-ci-check 플래그 - Makefile targets: release / release-dry / release-hotfix - 사용법: `make release V=v2.15.0` 또는 `./scripts/release.sh v2.15.0` ### GitHub 인프라 - .github/PULL_REQUEST_TEMPLATE.md 확장: - type 선택 (8 종류) + Breaking change 표시 - Merge Strategy 체크박스 (--squash / --merge / dependabot) - Quality Gates 섹션 (CI + @mx 규율 + SPEC status + wire format) - AI Collaboration 섹션 (Co-Authored-By 명시) - Post-Merge Actions (release PR 전용) - .github/ISSUE_TEMPLATE/release.md 신규 (92 lines) - Pre-Release Checklist (Code Quality / Documentation / Git State / Branch Protection) - Release Execution 명령어 예시 (Minor/Major + Hotfix) - Post-Release Checklist (docs-site sync, announcement) - .github/labels.yml 25 신규 labels 추가: - type: (feature/fix/docs/chore/ci/refactor/security/test) - priority: (P0/P1/P2/P3/P4) - area: (mx/astgrep/lsp/hooks/docs-site/templates/cli/config/workflow/ci/security/deps) - status: (in-progress/review/blocked/needs-info) - .moai/config/sections/git-strategy.yaml 확장: - workflow_model: enhanced-github-flow - merge_strategies: {feature/release/hotfix/dependabot} - branch_types: 10 prefix mapping - release_cadence: patch/minor/major 정의 - release_tools: scripts/release.sh + Makefile + goreleaser ## Non-breaking - 기존 labels 모두 유지 (25 신규 추가만) - 기존 workflows (release.yml, auto-merge.yml, ci.yml) unchanged - GoReleaser config unchanged - ISSUE_TEMPLATE/config.yml 및 bug/feature/question templates unchanged ## Branch Protection (admin 수동 적용 필요) CLAUDE.local.md §18.7에 gh api 명령어 예시 포함. main + release/* 패턴 보호 설정 권장. ## Validation - bash -n scripts/release.sh: OK - make -n release V=v2.15.0: OK - python yaml.safe_load(labels.yml): OK - python yaml.safe_load(git-strategy.yaml): OK ## 근거 문서 Gitflow vs Enhanced GitHub Flow 분석은 세션 대화 기록 참조 (30일간 15 릴리스 cadence, Open 이슈 0, 단일 배포 환경, 1-2명 팀 특성 고려). 🗿 MoAI <email@mo.ai.kr> * feat(workflow): Release Drafter 통합 + §18.0 운영 원칙 + /99-release 동기화 CLAUDE.local.md §18 Enhanced GitHub Flow 5가지 즉시 개선 중 유일 미구현이었던 Release Drafter를 공식 인프라로 통합. /99-release.md 지침을 Enhanced GitHub Flow에 맞게 동기화하여 정책 일관성 확보. ## 5 Improvements 구현 상태 (CLAUDE.local.md §18.0) | # | 항목 | 상태 | 참조 | |---|------|------|------| | 1 | Branch protection rule | ⏳ gh api 준비 (admin 적용 대기) | §18.7 | | 2 | Label 3축 체계 | ✅ labels.yml | §18.6 | | 3 | Merge strategy 명시 | ✅ PR template + git-strategy.yaml | §18.3 | | 4 | Release Drafter | ✅ release-drafter.yml + workflow (이 commit) | §18.9 | | 5 | Hotfix 브랜치 | ✅ scripts/release.sh --hotfix | §18.5 | ## Changes ### CLAUDE.local.md §18.0 "운영 원칙" 섹션 추가 (75 lines) - 5가지 즉시 개선 Framework 공식 선언 + 구현 상태 표 - 운영 방침 per role: PR 작성자 / 릴리스 담당자 / 리뷰어 - §18.0.1 금지 사항 재확인 (main 직접 push, develop 브랜치, release squash 등) ### CLAUDE.local.md §18.9 자동화 도구 업데이트 - Release Drafter "구성 완료" 상태로 전환 (이전 "v2.15 이후") - GoReleaser ↔ Release Drafter 역할 분담 표 - Version Resolver 매핑 (label → SemVer bump) ### .github/release-drafter.yml 신규 (149 lines) - 9 categories (Features/Fixes/Security/Performance/Refactoring/Docs/Tests/CI/Chores) - type:* label 기반 분류 (§18.6 축 1) - Version Resolver: breaking → major, type:feature → minor, 기타 → patch - autolabeler (PR title + branch + files 기반 type 축 자동 추론) - template: draft notes + CHANGELOG 작성 가이드 주석 ### .github/workflows/release-drafter.yml 신규 (30 lines) - trigger: push main + PR opened/reopened/synchronize/edited - release-drafter/release-drafter@v6 Action - permissions: contents: write + pull-requests: write ### .claude/commands/99-release.md 동기화 (v4.0.0 → v5.0.0) - frontmatter: workflow_model + merge_strategy + reference_policy metadata 추가 - Release Configuration 섹션: "GitHub Flow" → "Enhanced GitHub Flow (CLAUDE.local.md §18)" - Tool Selection Guide 추가 (scripts/release.sh 자동 경로 vs /99-release 수동 경로) - Phase 6 git operation 업데이트: - [HARD] gh pr merge --squash → **--merge** (이유 명시: v2.14.0 Case Study) - 수동 tag 생성 → **./scripts/release.sh vX.Y.Z** 권장 + 수동 fallback 유지 - Key Rules 전면 업데이트: - Enhanced GitHub Flow 참조 - Release PR은 --merge 강제 (HARD) - Tag push via scripts/release.sh only (HARD) - Label 3축 필수 부착 (HARD) - Release Drafter draft 활용 (HARD) - Hotfix flow 추가 (§18.5) ## Release Drafter ↔ GoReleaser 역할 분담 - **Release Drafter** = PR merge 시 "next release draft" 자동 축적 → CHANGELOG 작성 preview - **GoReleaser** = tag push 시 final release (binary + auto changelog) 생성 - **실제 workflow**: PR merge → RD가 draft 업데이트 → 릴리스 시 draft 확인 → CHANGELOG.md 수동 편집 → ./scripts/release.sh → GoReleaser ## Non-breaking - 99-release.md 기본 구조 유지 (Phase 0-8 흐름) - Phase 4 CHANGELOG bilingual 형식 유지 - Phase 7 GitHub Release 수동 편집 유지 - GoReleaser config 불변 - 기존 PR template / labels.yml / workflows (ci, auto-merge, release, claude-review) 불변 ## Validation - python yaml.safe_load('.github/release-drafter.yml'): OK - python yaml.safe_load('.github/workflows/release-drafter.yml'): OK ## Post-merge Admin이 §18.7 gh api 명령어로 main + release/* branch protection 활성화 시 5가지 즉시 개선 완결 상태 달성. 🗿 MoAI <email@mo.ai.kr>
1 parent d6698ae commit 9b8e083

10 files changed

Lines changed: 1136 additions & 49 deletions

File tree

.claude/commands/99-release.md

Lines changed: 69 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,44 @@
11
---
2-
description: "MoAI-ADK v2.x production release via GitHub Flow. Creates release/vX.Y.Z branch, version bump, CHANGELOG, PR to main, squash merge, then tag push. Tag vX.Y.Z triggers GoReleaser. All git operations delegated to manager-git. Quality failures escalate to expert-debug."
3-
argument-hint: "[VERSION] - optional target version (e.g., 2.1.0). If omitted, prompts for patch/minor/major selection."
2+
description: "MoAI-ADK production release via Enhanced GitHub Flow (CLAUDE.local.md §18). Creates release/vX.Y.Z branch, version bump, CHANGELOG (bilingual), PR to main, merge commit (NOT squash), then scripts/release.sh for tag + GoReleaser. Hotfix support via --hotfix flag. All git operations delegated to manager-git. Quality failures escalate to expert-debug."
3+
argument-hint: "[VERSION] [--hotfix] - optional target version (e.g., 2.1.0). If omitted, prompts for patch/minor/major selection."
44
type: local
55
allowed-tools: Read, Write, Edit, Grep, Glob, Bash, AskUserQuestion, Agent, TaskCreate, TaskUpdate, TaskList, TaskGet
66
disable-model-invocation: true
7-
version: 4.0.0
7+
version: 5.0.0
88
metadata:
99
release_target: "production"
1010
branch: "main"
1111
tag_format: "vX.Y.Z"
12-
changelog_format: "korean_first"
12+
changelog_format: "english_first_bilingual"
1313
release_notes_format: "bilingual"
1414
git_delegation: "required"
1515
quality_escalation: "expert-debug"
16+
workflow_model: "enhanced-github-flow"
17+
merge_strategy: "merge-commit"
18+
reference_policy: "CLAUDE.local.md §18"
1619
---
1720

18-
## Release Configuration
21+
## Release Configuration (Enhanced GitHub Flow)
1922

20-
- **Git workflow**: GitHub Flow with enforce_admins (direct main push blocked)
21-
- **Release branch**: `release/vX.Y.Z` (created from main, merged via PR)
22-
- **Target branch**: `main` (all releases merge to main)
23-
- **Tag format**: `vX.Y.Z` (standard semver, triggers GoReleaser via `.github/workflows/release.yml`)
24-
- **Merge strategy**: Squash merge with branch auto-delete
23+
- **Git workflow**: Enhanced GitHub Flow (CLAUDE.local.md §18, Gitflow 비채택)
24+
- **Release branch**: `release/vX.Y.Z` (main에서 분기, PR 경유 머지)
25+
- **Hotfix branch**: `hotfix/vX.Y.Z-*` (최신 tag에서 분기, main으로 머지)
26+
- **Target branch**: `main` (production releases only)
27+
- **Tag format**: `vX.Y.Z` (SemVer, GoReleaser trigger via `.github/workflows/release.yml`)
28+
- **[HARD] Merge strategy**: **Merge commit** (`gh pr merge --merge --delete-branch`) — release PR에 반드시 적용. Squash 금지 (개별 SPEC commit 보존 필수, §18.3)
29+
- **Tag push tool**: `./scripts/release.sh vX.Y.Z` 또는 `make release V=vX.Y.Z` (§18.8) — 수동 `git tag + push` 금지 (CHANGELOG 검증 + CI 확인 + GoReleaser watch 포함)
30+
- **Label 3축**: PR에 `type:*` + `priority:*` + `area:*` 필수 (§18.6)
2531
- **Release URL**: https://github.com/modu-ai/moai-adk/releases/tag/vX.Y.Z
26-
- **Binaries**: darwin-arm64, darwin-amd64, linux-arm64, linux-amd64, windows-amd64
32+
- **Binaries**: darwin-arm64/amd64, linux-arm64/amd64, windows-arm64/amd64 (6 assets + checksums.txt)
33+
34+
### Tool Selection Guide (§18.8 이중 경로)
35+
36+
| 시나리오 | 도구 | 이유 |
37+
|---------|------|------|
38+
| Patch/Minor 자동 릴리스 (CHANGELOG 이미 작성됨) | `./scripts/release.sh vX.Y.Z` | 최소 interaction, CI 확인 포함 |
39+
| Major release / breaking changes | `/99-release` (이 커맨드) | 완전한 리뷰 + 단계별 확인 흐름 |
40+
| Hotfix 긴급 대응 | `./scripts/release.sh vX.Y.Z --hotfix` | main 외 브랜치 허용, 빠른 경로 |
41+
| CHANGELOG 작성 + release 통합 | `/99-release` (이 커맨드) | Phase 4에서 bilingual CHANGELOG 생성 |
2742

2843
---
2944

@@ -349,26 +364,49 @@ Agent(
349364
3. Wait for CI checks to pass:
350365
`gh pr checks --watch`
351366

352-
4. Merge PR with squash:
353-
`gh pr merge --squash --delete-branch`
367+
4. **[HARD] Merge PR with merge commit (NOT squash)** — Enhanced GitHub Flow §18.3 준수:
368+
`gh pr merge --merge --delete-branch`
369+
370+
이유: release/vX.Y.Z 브랜치의 개별 commit (version bump + CHANGELOG + 필요 시 추가 fix)을 main history에 보존하여 릴리스 시점 추적 가능. Squash 시 개별 SPEC 구현 commit이 소실됨 (v2.14.0 Case Study §18.11 참조).
354371

355372
5. Sync local main with merged result:
356373
```bash
357374
git checkout main
358375
git pull origin main
359376
```
360377

361-
6. Check remote status: Verify if tag vX.Y.Z exists on remote (origin)
362-
7. Handle tag conflicts:
363-
- If remote does NOT have vX.Y.Z: Create tag on current main HEAD and push
364-
- If remote already has vX.Y.Z: Report situation with options
365-
8. Create and push tag (only if tag does NOT exist on remote):
378+
6. **[HARD] Tag creation via scripts/release.sh** (§18.8) — 수동 `git tag + push` 금지:
379+
```bash
380+
./scripts/release.sh vX.Y.Z
381+
# OR (Makefile)
382+
make release V=vX.Y.Z
383+
```
384+
385+
스크립트가 자동으로:
386+
- CHANGELOG.md 해당 버전 섹션 존재 확인
387+
- CI 상태 조회 (`gh api /commits/{sha}/status`)
388+
- main 브랜치 + origin 동기화 확인
389+
- 기존 tag 충돌 검사 (local + remote)
390+
- CHANGELOG 섹션 → annotated tag annotation 자동 추출
391+
- 사용자 confirmation prompt
392+
- Tag 생성 + push → GoReleaser workflow 자동 trigger
393+
- GoReleaser workflow watch + GitHub Release 검증
394+
395+
Hotfix 경우:
366396
```bash
367-
# Only execute this block if vX.Y.Z tag does NOT exist on origin
368-
git tag vX.Y.Z
397+
./scripts/release.sh vX.Y.Z --hotfix # main 외 브랜치 허용
398+
```
399+
400+
**Fallback** (스크립트 실패 시): manager-git이 수동 tag 생성 — 단, 반드시 CHANGELOG 검증 수행 후
401+
```bash
402+
# CHANGELOG.md 에 ## [X.Y.Z] 섹션 존재 확인
403+
grep "^## \[X.Y.Z\]" CHANGELOG.md
404+
# Tag 생성 + push
405+
git tag -a vX.Y.Z -m "vX.Y.Z — [요약]"
369406
git push origin vX.Y.Z
370407
```
371-
9. Verify GoReleaser workflow triggered (tags bypass branch protection)
408+
409+
7. Verify GoReleaser workflow triggered (tags bypass branch protection)
372410

373411
### Expected Output
374412

@@ -670,19 +708,24 @@ Updating version files...
670708

671709
---
672710

673-
## Key Rules
711+
## Key Rules (Enhanced GitHub Flow §18)
674712

675713
- **Target branch**: `main` (production releases)
676-
- **Git workflow**: GitHub Flow with enforce_admins (direct main push blocked)
677-
- **Release flow**: release/vX.Y.Z branch → PR → squash merge → tag → push tag
678-
- **Tag format**: `vX.Y.Z` (triggers GoReleaser via release.yml)
714+
- **Git workflow**: Enhanced GitHub Flow (CLAUDE.local.md §18, Gitflow 비채택)
715+
- **[HARD] Release flow**: release/vX.Y.Z branch → PR → **merge commit** (NOT squash) → `./scripts/release.sh` → GoReleaser auto-release
716+
- **[HARD] Hotfix flow**: hotfix/vX.Y.Z-* branch → PR → **merge commit**`./scripts/release.sh --hotfix` (§18.5)
717+
- **Tag format**: `vX.Y.Z` (SemVer, triggers GoReleaser via release.yml)
679718
- Tags bypass branch protection (only branch pushes are blocked)
680719
- Tests MUST pass to continue (85%+ coverage per package)
681-
- All 3 version files must be consistent
720+
- All 3 version files must be consistent (pkg/version, .moai/config, internal/template/templates/.moai/config)
682721
- **[HARD] CHANGELOG and GitHub Release: English FIRST, Korean SECOND**
722+
- **[HARD] Release PR: `--merge` (NOT `--squash`)** — 개별 SPEC commit 보존 (§18.3, v2.14.0 Case Study)
723+
- **[HARD] Tag push via `scripts/release.sh` only** — 수동 `git tag + push` 금지 (§18.8, CHANGELOG 검증 누락 방지)
683724
- **[HARD] ALL git operations MUST be delegated to manager-git agent**
684725
- **[HARD] Quality gate failures MUST be delegated to expert-debug agent**
685726
- **[HARD] Never `git push origin main` — always use PR merge flow**
727+
- **[HARD] Label 3축** (type/priority/area) PR 부착 필수 (§18.6) — Release Drafter 자동 분류용
728+
- **[HARD] Release Drafter draft 참조** (§18.9) — PR merge 시 자동 업데이트되는 draft를 CHANGELOG.md 작성에 활용
686729

687730
---
688731

.github/ISSUE_TEMPLATE/release.md

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
---
2+
name: Release
3+
about: Release tracking issue (Minor/Major/Hotfix)
4+
title: "release: vX.Y.Z — <release theme>"
5+
labels: ["type:chore", "priority:P1", "area:ci"]
6+
assignees: []
7+
---
8+
9+
## Release Plan
10+
11+
**Version**: `vX.Y.Z`
12+
**Type**: [ Minor | Major | Patch | Hotfix ]
13+
**Target date**: <YYYY-MM-DD>
14+
**Release branch**: `release/vX.Y.Z` (Minor/Major only) or `hotfix/vX.Y.Z-*` (Hotfix)
15+
16+
## Scope
17+
18+
<!-- SPEC-IDs included in this release -->
19+
20+
- [ ] SPEC-XXX-001: ...
21+
- [ ] SPEC-XXX-002: ...
22+
23+
## Pre-Release Checklist (CLAUDE.local.md §18.8)
24+
25+
### Code Quality
26+
- [ ] 모든 SPEC 구현 완료 (`status: implemented` 로 전환)
27+
- [ ] 51/51 (또는 전체) ACs PASS
28+
- [ ] `go test -race ./...` PASS (ubuntu/macos/windows CI)
29+
- [ ] `golangci-lint run ./...` 0 issues
30+
- [ ] `manager-quality` review 통과 (TRUST 5 ≥ 4/5)
31+
32+
### Documentation
33+
- [ ] `CHANGELOG.md``## [X.Y.Z] - YYYY-MM-DD` 섹션 추가 (영문 + 한국어)
34+
- [ ] Non-breaking 선언 또는 Breaking Changes 섹션 명시
35+
- [ ] Detection Improvements 섹션 (UX 영향 있는 감지 변경 시)
36+
- [ ] Deferred items 섹션 (next minor/major 예약 항목)
37+
- [ ] README.md version line 업데이트 (필요 시)
38+
39+
### Git State
40+
- [ ] `release/vX.Y.Z` 브랜치 또는 main 최신
41+
- [ ] 모든 PR merge 완료
42+
- [ ] 작업 트리 clean (`git status --short` empty)
43+
- [ ] origin/main과 동기화 (local/remote SHA 일치)
44+
45+
### Branch Protection (admin)
46+
- [ ] `main` branch protection 활성화 (CI required, 1 review)
47+
- [ ] Force push 차단 확인
48+
49+
## Release Execution
50+
51+
Minor/Major Release:
52+
```bash
53+
# 1. release 브랜치에서 main으로 PR 생성 + merge commit
54+
gh pr merge <release-PR> --merge --delete-branch
55+
56+
# 2. main pull + 릴리스 스크립트
57+
git checkout main && git pull origin main
58+
./scripts/release.sh vX.Y.Z
59+
# OR: make release V=vX.Y.Z
60+
```
61+
62+
Hotfix Release:
63+
```bash
64+
# 1. main의 latest tag에서 분기
65+
git checkout -b hotfix/vX.Y.Z-<topic> <latest-tag>
66+
67+
# 2. 수정 + PR + merge commit
68+
gh pr merge <hotfix-PR> --merge --delete-branch
69+
70+
# 3. Release 스크립트 실행
71+
git checkout main && git pull origin main
72+
./scripts/release.sh vX.Y.Z --hotfix
73+
# OR: make release-hotfix V=vX.Y.Z
74+
```
75+
76+
## Post-Release Checklist
77+
78+
- [ ] GitHub Release 생성 확인 (GoReleaser 자동)
79+
- [ ] Release assets 5 플랫폼 업로드 확인 (darwin amd64/arm64, linux amd64/arm64, windows amd64)
80+
- [ ] `latest` release marker 확인
81+
- [ ] docs-site 4개국어 reference 페이지 업데이트 (별도 PR, `docs/vX.Y.Z-reference-sync`)
82+
- [ ] v2.X+1 backlog SPEC 분석 및 초안 작성 (next cycle kickoff)
83+
- [ ] Release announcement (선택: Discord, Twitter, blog)
84+
- [ ] 이 Issue close
85+
86+
## Release Notes
87+
88+
<!-- Post-release: 간단한 release 요약 붙여넣기 -->
89+
90+
---
91+
92+
**Reference**: CLAUDE.local.md §18 Enhanced GitHub Flow

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 50 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,36 +10,66 @@
1010

1111
## Type of Change
1212

13-
- [ ] Bug fix (non-breaking change that fixes an issue)
14-
- [ ] New feature (non-breaking change that adds functionality)
15-
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
16-
- [ ] Documentation update
17-
- [ ] Refactoring (no functional changes)
18-
- [ ] CI/CD changes
19-
- [ ] Dependencies update
13+
<!-- Select ONE primary type — see CLAUDE.local.md §18.6 for label 3축 체계 -->
14+
15+
- [ ] `type:feature` — New capability (non-breaking)
16+
- [ ] `type:fix` — Bug fix (non-breaking)
17+
- [ ] `type:docs` — Documentation only
18+
- [ ] `type:chore` — Maintenance (dependencies, cleanup)
19+
- [ ] `type:ci` — CI/CD / GitHub Actions
20+
- [ ] `type:refactor` — Code restructuring (no behavior change)
21+
- [ ] `type:security` — Security fix or hardening
22+
- [ ] `type:test` — Test additions or improvements
23+
- [ ] **Breaking change** — Public API change (requires major version bump)
24+
25+
## Merge Strategy (CLAUDE.local.md §18.3)
26+
27+
<!-- Reviewer: use the correct `gh pr merge` flag -->
28+
29+
- [ ] **`--squash`** (default for `feat/`, `fix/`, `chore/`, `docs/`, `plan/` branches) — WIP commit 정리
30+
- [ ] **`--merge`** (`release/` or `hotfix/` branches) — 릴리스 마일스톤 + 개별 SPEC commit 보존
31+
- [ ] **Dependabot auto-merge** (dependabot/* branches) — 자동 squash
32+
33+
> ⚠️ Release PR (`release/vX.Y.Z → main`)은 반드시 `--merge` 사용. Squash 시 개별 feature history 손실.
2034
2135
## Testing
2236

23-
- [ ] Tests pass locally (`go test ./...`)
24-
- [ ] Race detection passes (`go test -race ./...`)
25-
- [ ] Linting passes (`golangci-lint run`)
26-
- [ ] New tests added for new functionality
27-
- [ ] Coverage maintained at 85%+
37+
- [ ] `go test ./...` 통과
38+
- [ ] `go test -race ./...` (race detection) 통과
39+
- [ ] `golangci-lint run` 통과
40+
- [ ] 새 기능에 대한 테스트 추가됨
41+
- [ ] 커버리지 85%+ 유지
42+
43+
## Quality Gates
44+
45+
- [ ] CI all checks green (Lint, Test ubuntu/macos/windows, Build 5 platforms, CodeQL)
46+
- [ ] `@MX` tag 규율 준수 (fan_in ≥ 3 → ANCHOR, goroutine/complexity ≥ 15 → WARN, 필수 `@MX:REASON`)
47+
- [ ] SPEC 변경 시 frontmatter `status` 필드 적절히 업데이트 (draft → implemented)
48+
- [ ] SARIF / wire format 등 public contract 불변 (non-breaking 보장)
2849

2950
## AI Collaboration
3051

31-
- [ ] This PR was created with AI assistance (Claude Code, Codex, or other)
32-
- [ ] AI-generated code has been reviewed by a human
33-
- [ ] AI agent name/tool noted in commit messages (Co-Authored-By)
52+
- [ ] AI 도구 (Claude Code, Codex 등) 협업으로 생성됨
53+
- [ ] AI 생성 코드가 사람에 의해 리뷰됨
54+
- [ ] AI agent 이름이 commit 메시지에 명시됨 (Co-Authored-By 또는 footer)
3455

3556
## Checklist
3657

37-
- [ ] Code follows the project's coding standards (English comments, Go conventions)
38-
- [ ] Self-reviewed my own code
39-
- [ ] Commented hard-to-understand areas
40-
- [ ] Updated documentation if needed
41-
- [ ] No secrets or credentials in the changes
58+
- [ ] 프로젝트 코딩 표준 준수 (Go convention, 주석 한국어, 식별자 영어)
59+
- [ ] Self-review 완료
60+
- [ ] 이해하기 어려운 부분에 주석 추가
61+
- [ ] 필요 시 문서 업데이트 (README, CHANGELOG, docs-site)
62+
- [ ] Secrets/credentials 포함 없음
63+
- [ ] Branch 명명 규칙 준수 (§18.2)
4264

4365
## Related Issues
4466

4567
<!-- Link related issues: Fixes #123, Refs #456 -->
68+
69+
## Post-Merge Actions (release PR 전용)
70+
71+
<!-- Release PR 머지 후 실행 -->
72+
73+
- [ ] `./scripts/release.sh vX.Y.Z` 로 tag + GoReleaser 자동 실행
74+
- [ ] GitHub Release 생성 확인 (GoReleaser 자동)
75+
- [ ] docs-site 4개국어 reference 페이지 업데이트 (별도 PR)

0 commit comments

Comments
 (0)