# task-2464 — Gemini Review Trigger 조사 (read-only)

- 작업 ID: task-2464
- 팀: dev6-team (페룬)
- 작업 레벨: Lv.3 (조사 전용 — read-only)
- 일시: 2026-05-06
- 상태: 완료 (보고서 산출)
- merge_needed: **false** (코드 변경 0건 — main에 머지 안 함)

## SCQA 보고

### S — Situation (상황)
PR #29 (Phase 3 자기검증 PR, head=`task/task-2463-dev6`)에서 두 검사 fail:
- `gemini-review-gate` (자체 스크립트)
- `phase3-merge-gate` (task-2463 P0-3 신규 게이트)

회장 직접 진단: "Gemini가 0건인 이유가 정상 미충족인지 Gemini 설정 누락인지 불명. task-2454(PR #24)에서도 동일 패턴 의심."

### C — Complication (문제)
- 두 검사가 보는 시스템이 다름 (자체 API 호출 vs 외부 GitHub App)
- task-2463 페룬 변경(neutral → failure)이 이 흐름에 어떻게 작용하는지 불명
- 시크릿 값을 출력하지 않으면서 secret 상태를 확인해야 함
- PR/코드 0건 변경 제약 하에 evidence 수집

### Q — Question (요구)
회장 명시 5개 항목 + task-2454와의 비교 + 수정 옵션 3건 이상

### A — Answer (산출물)
**두 개 별개 결함이 동시에 작동**:
1. `GEMINI_API_KEY` repo/org secret **부재** (`total_count=0`) — 자체 스크립트 fail
2. `gemini-code-assist[bot]` 외부 App **활동 중단** (2026-05-04 00:21 UTC~, PR #16~#29 review 0건) — phase3-merge-gate fail

task-2463 게이트 강화는 **의도대로 동작**. 게이트가 부서진 게 아니라, 게이트가 검증하는 두 시스템이 부서져 있음.

→ 상세 사고 보고서: `memory/specs/incident-2026-05-05-gemini-trigger.md`

## 핵심 발견 (요약)

| 항목 | 결과 |
|---|---|
| GEMINI_API_KEY repo secret | **부재** (`total_count=0`) |
| GEMINI_API_KEY org secret | 부재 (개인 repo, org 없음) |
| `gemini-code-assist[bot]` 마지막 활동 | 2026-05-03T23:00:43Z (PR #15) |
| PR #16~#29 봇 review 수 | 모두 0 (14개 PR 연속) |
| `gemini-review-gate` workflow trigger | `pull_request` (보안 안전 — fork PR에 secret 노출 없음) |
| job 74452670283 fail 메시지 | `[GEMINI-GATE] FAIL — review not executed (reason: GEMINI_API_KEY missing)` |
| job 74452670318 fail 메시지 | `phase3-merge-gate: gemini-code-assist review 0건 — merge 차단 (task-2463 P0-3)` |
| main 코드의 `[GEMINI-GATE] FAIL` 문자열 | **없음** (task-2463 브랜치에서 추가) |
| task-2463 변경의 의도 | neutral → failure (회장 명시 "Gemini 없이 통과 금지"의 코드화) |
| task-2454(PR #24)와의 공통점 | 외부 봇 review 0건 (동일 인프라 결함) |
| task-2454(PR #24)와의 차이점 | 게이트 강화 전(silent pass) vs 강화 후(차단) |

## 5개 조사 항목 — Evidence 위치

상세는 `memory/specs/incident-2026-05-05-gemini-trigger.md` §2 참조.

1. **GEMINI_API_KEY 존재 여부** — 부재 (`§2.1`, evidence: `actions/secrets` API + workflow line `ci.yml:125` + runtime env 빈 값)
2. **Gemini Code Assist app** — 봇 사용자 존재, 권한 보유, 단 2026-05-04부터 활동 중단 (`§2.2`)
3. **Workflow trigger** — `pull_request` (안전), PR #29 트리거 정상 만족 (`§2.3`)
4. **PR #29 timeline** — 2026-05-05 16:01 open → 16:02:43 두 게이트 모두 exit 1 (`§2.4`, run 25387518453)
5. **gemini_review_gate.py 인증** — main은 fail-open(neutral), task-2463 브랜치는 fail-closed(failure) + `--allow-neutral` DEBUG 플래그 (`§2.5`)

## 수정 옵션 (코드 변경 0건)

- **Option A**: `GEMINI_API_KEY` repo secret 추가 (자체 스크립트 살리기)
- **Option B**: `gemini-code-assist[bot]` 외부 App 재활성화 조사 + 복구
- **Option C**: Break-glass 수동 머지 절차 (admin only, 사용 audit 의무)
- **Option D**: workflow event 변경 — **불권장** (보안 위험)
- **Option E**: 자체 스크립트와 외부 App 일원화 — 코드 변경 필요, 본 task 범위 외

**권장**: A + B 동시 별도 task. A는 secret 추가만으로 가능, B는 외부 의존 조사 필요. 둘 다 복구되면 정상.

## ★ 권고 — Gemini 없이 Phase 3 통과시키지 말 것

회장 명시 + 본 조사 결론:
- task-2463의 두 게이트는 **유지** (약화 금지)
- `--allow-neutral`을 CI에 추가하지 말 것
- 게이트가 부서졌을 때의 답은 **인프라 복구**이지 게이트 약화가 아님
- task-2454 silent pass 사고의 재발 방지선

## L1 스모크테스트 결과 (필수 기록)

본 task는 **read-only 조사**로 코드/설정 변경 0건이므로 L1 스모크테스트가 적용되지 않음.
대신 read-only 명령의 evidence 수집 결과로 대체:

- **서버 재시작**: 해당없음 (read-only 조사, 서버 변경 없음)
- **API 응답 확인**: 모든 evidence는 `gh api`/`gh pr view`/`gh run` 결과로 사적용. 주요 결과:
  - `gh api repos/Jeon-Jonghyuk/dev_workspace/actions/secrets` → `{"total_count":0,"secrets":[]}`
  - `gh api repos/.../actions/jobs/74452670283/logs` → `[GEMINI-GATE] FAIL — review not executed (reason: GEMINI_API_KEY missing)` 로그 캡처
  - `gh api repos/.../actions/jobs/74452670318/logs` → `[phase3-merge-gate] Gemini review count: 0` 로그 캡처
- **스크린샷**: 해당없음 (UI 없음)

## 셀프 QC 8항목

- [x] 5개 조사 항목 모두 evidence와 함께 답변
- [x] 시크릿 값 0건 출력 (이름/존재 여부만)
- [x] 코드 1줄도 수정 안 함 (`git diff origin/main..HEAD --name-only` → 보고서 2건 신규만)
- [x] PR #29 변경 0건 (코멘트/리뷰/푸시/머지)
- [x] 수정 옵션 3건 이상 (A/B/C/D/E 5개)
- [x] task-2454와의 공통/차이점 명확
- [x] forbidden_paths 위반 0건 (scripts/, .github/, dispatch.py, .worktrees/task-2454-* / task-2460-* / task-2461-* / task-2463-dev6 미접근)
- [x] 산출물 SCQA + 사고 보고서 작성

## 모델 사용 기록

| 팀원 | 모델 | 작업 |
|---|---|---|
| 페룬 (팀장) | opus | read-only 조사 + evidence 수집 + 보고서 작성 |

본 task는 코딩이 아닌 read-only 조사로 팀원 분배가 적절치 않음 — `gh api` 호출 + 워크플로우 분석 + 단일 보고서 통합으로, 한 사람의 일관된 추론이 필요. 따라서 팀장 단독 수행 (예외 사유 명시).

## 변경 파일 목록

```
memory/specs/incident-2026-05-05-gemini-trigger.md  (신규, 사고 보고서)
memory/reports/task-2464.md                          (신규, 본 보고서)
```

## 머지 판단

- **머지 필요**: **No**
- **사유**: read-only 조사 task. 코드 변경 0건. 보고서/specs는 main 브랜치에 별도 task로 통합 가능 (회장 결정).
- **본 worktree**: 보고서 2건만 commit, PR/머지 없이 종료
- **다음 작업**: 회장이 Option A/B 적용 여부 결정 → 별도 task 발주

## 위임 완결성 4대 규칙

1. **수신 확인**: dispatch.py로 위임받음, 본 보고서로 종료
2. **빌드+배포**: 본 task는 코드 변경 0건. PR/머지 0건 (요구사항 일치)
3. **실 E2E**: read-only 명령만 사용 (`gh secret list`, `gh api`, `cat workflows`, `git log`) — 사이드 이펙트 0건
4. **구조 선행 파악**: ci.yml + guard.yml + gemini_review_gate.py(main) + task-2463 브랜치 contents API + task-2454 보고서 사전 read

## 비고

- task-2460의 산출물(`incident-2026-05-05-timer-merge-gemini.md`)은 본 worktree(main 기반)에 존재하지 않음 — task-2460이 아직 main에 머지되지 않은 것으로 보임. forbidden 처리되어 있어 다른 worktree 접근 안 함.
- task-2463 브랜치의 `phase3-merge-gate` workflow 정의는 본 worktree(main 기반)에서 직접 read 불가. job 로그를 통해 동작만 확인.
- `actions/runs/25387518453/jobs` API의 status check 이름과 ruleset required check 이름 매칭은 본 조사 범위 외 (별도 task).
