---
spec_id: break-glass-procedure
type: spec
created: 2026-05-06
updated: 2026-05-06
authors: [페룬, 회장]
status: active
related_tasks: [task-2465]
related_specs:
  - memory/specs/gemini-evidence-gate-spec.md
---

# Break-Glass 절차 — Phase 3 Emergency Bypass

## 0. 한 줄 요약

Gemini Evidence Gate가 차단하는 정상 흐름 외에, **회장 전용 emergency merge 경로**. admin 권한으로 우회하지만 audit log + hard cap + follow-up으로 통제.

## 1. 사용 조건 (둘 중 하나라도)

1. **Security hotfix**: 운영 중인 보안 취약점이 발견되어 즉시 패치가 필요한 경우.
2. **App 백엔드 다운 24시간 이상**: Gemini Code Assist App이 24시간 이상 review/comment를 발행하지 못하는 상태가 명시적으로 확인된 경우.

위 두 조건 외 사유로 사용 시 → **사용 자체가 audit alert 대상**.

## 2. 한도

| 단위 | 한도 | 위반 시 |
|------|------|---------|
| 월별 | **soft limit 3회** (권장 한도) | 4회째부터 audit alert (회장 Telegram) |
| 분기별 | **hard cap 5회** | 6회째부터 사용 차단 (회장 직접 결재 필요) |

분기 hard cap 도달 시 break-glass 사용을 일시 정지하고, 게이트 가용성 분석 + spec 재검토 진행.

## 3. 권한

- **회장 전용**: 다른 봇/사용자(아누/팀장/팀원/외부 contributor)는 break-glass 사용 금지.
- **실행 명령**: `gh pr merge {PR} --admin --merge` (회장 GitHub 계정 토큰으로만).
- 다른 토큰(GITHUB_TOKEN, taskctl 토큰, dispatch 토큰)으로는 admin 권한이 없으므로 명령 실패하도록 GitHub 측 설정.

## 4. 사용 절차

### 4.1 Pre-flight (실행 전)
1. 사유 확인: §1의 두 조건 중 어느 것에 해당하는지 명시.
2. 한도 확인: `memory/audit/break-glass-{YYYYMM}.jsonl` 조회 → 월/분기 한도 미초과 확인.
3. PR 상태 확인: 차단되어 있는 게이트가 무엇인지 명시 (gemini-review-gate / phase3-merge-gate / 기타).

### 4.2 Audit log 기록 (실행 직전)
```bash
# 회장 직접 실행
TASK_ID="${TASK_ID:-}"  # 관련 task가 있으면
PR=29
SHA=$(gh pr view $PR --json headRefOid -q .headRefOid)
DATE=$(date -u +%Y%m)

cat >> "memory/audit/break-glass-${DATE}.jsonl" <<EOF
{"timestamp":"$(date -u +%Y-%m-%dT%H:%M:%SZ)","actor":"회장(GitHub login)","reason":"<구체적 사유>","pr_number":$PR,"head_sha":"$SHA","bypassed_checks":["gemini-review-gate","phase3-merge-gate"],"task_id":"$TASK_ID"}
EOF

git add "memory/audit/break-glass-${DATE}.jsonl"
git commit -m "audit: break-glass for PR #$PR (사유: ...)"
git push origin main  # audit는 main에 직접 push (게이트 영향 안 받음)
```

### 4.3 Merge 실행
```bash
gh pr merge $PR --admin --merge --delete-branch
```

### 4.4 Post-flight (실행 후 1주 이내)
- **정상 게이트 복귀 확인**: 다음 PR이 일반 게이트(gemini-review-gate, phase3-merge-gate)로 정상 통과하는지 확인.
- **follow-up task 등록**: 게이트 실패 원인 분석 + 영구 수정 계획.
- **미복구 시 alert**: 1주 내 정상 게이트 복귀 못 하면 audit alert (회장 Telegram).

## 5. Audit Log 포맷

### 5.1 파일 위치
`memory/audit/break-glass-{YYYYMM}.jsonl` — 월별, append-only.

### 5.2 필수 필드
| 필드 | 타입 | 설명 |
|------|------|------|
| `timestamp` | string (ISO 8601 UTC) | 사용 시각 |
| `actor` | string | 실행자 — 회장 GitHub login |
| `reason` | string | 사유 (구체적 텍스트) |
| `pr_number` | int | 머지된 PR 번호 |
| `head_sha` | string | 머지된 commit SHA |
| `bypassed_checks` | string[] | 우회된 check 이름 목록 |
| `task_id` | string\|null | 관련 task ID (있으면) |

### 5.3 예시
```json
{"timestamp":"2026-05-06T15:30:42Z","actor":"jay-chairman","reason":"App backend down 24h+ — security CVE-2026-1234 hotfix","pr_number":29,"head_sha":"abc123def","bypassed_checks":["gemini-review-gate","phase3-merge-gate"],"task_id":"task-2465"}
```

## 6. Audit Alert 트리거

### 6.1 자동 감지 (cron 또는 머지 후 hook)
1. **소프트 한도 초과**: 같은 월 내 break-glass 4회째 사용 → 회장 Telegram 알림.
2. **하드 한도 초과**: 같은 분기 내 6회째 사용 시도 → 즉시 차단 + 알림.
3. **사유 부재**: `reason` 필드가 빈 문자열 / null → 알림.
4. **Follow-up 미복구**: break-glass 후 1주 경과 시점에 정상 게이트 복귀 확인 못 함 → 알림.

### 6.2 알림 채널
- **Telegram 단일** (회장 명시 §8.5).

### 6.3 구현
- 본 spec에서는 정책만 명시. 자동 감지/알림 구현은 별도 task에서.
- 잠정 대응: 회장이 직접 audit log를 주기적으로 review.

## 7. 위반 시 처리

### 7.1 다른 사용자/봇이 break-glass 시도
- GitHub admin 권한 부재로 명령 자체 실패 (GitHub 측 설정).
- 만약 우회 머지가 발생하면: incident 처리 + 한정승인 정책 위반.

### 7.2 회장이 사유 없이 사용
- audit log에 `reason: ""` 또는 `null` → audit alert 대상.
- 회장 본인 알림 → 사유 보강 또는 follow-up.

### 7.3 hard cap 초과 시도
- 차단 + 게이트 가용성 분석 task 자동 등록.

## 8. 비-목표 / 명시적 제외

- **코드 우회 (CI workflow 수정으로 게이트 끄기) 금지** — break-glass는 admin 권한 사용만. workflow 변경으로 게이트를 비활성화하는 행위는 본 spec과 무관하며 별도 위반.
- **GEMINI_API_KEY 추가/회전 금지** — 회장 명시. App 외부 호출은 어떤 경우에도 허용 안 함.
- **다른 봇 권한 상승 금지** — admin 권한은 회장 계정에만 유지.

## 9. 변경 이력

| 날짜 | 변경 | 관련 task |
|------|------|----------|
| 2026-05-06 | 최초 작성. 월 3회 / 분기 5회 hard cap. | task-2465 |
