# task-2830 보고서 — G4 Pre-PR Gemini CLI 게이트 기본 OFF

## Situation (상황)
2026-06-18 Gemini "Google 로그인" 무료 경로 sunset → G4 Pre-PR Gemini CLI 게이트(`gemini_cli_gate_check.py`)는 인증 실패로 현재 soft-pass 상태. 회장 결정(2026-07-22): **리뷰=Codex+아누로 확정, Gemini PR 기능 OFF**.

## Complication (문제)
`scripts/finish-task.sh`의 G4 게이트 조건은 기본값 `G4_GATE_ENABLED:-1`(기본 ON)로, 형식적으로는 여전히 게이트를 진입한다. 회장 결정에 맞춰 **기본 비활성화**가 필요하다. 단, 향후 되살리기 여지(env 명시 재활성화)는 보존해야 한다.

## Question (질문)
게이트 로직 전체를 건드리지 않고, 기본값만 OFF로 전환하면서 `G4_GATE_ENABLED=1` 명시 시 되살아나는 경로를 보존할 수 있는가?

## Answer (해결)
`scripts/finish-task.sh` line 1558의 기본값을 `:-1` → `:-0` 로 **1문자 변경**.
- `${G4_GATE_ENABLED:-0}` — env 미설정 시 "0" → 조건 불일치 → 게이트 **SKIP(OFF)**.
- `G4_GATE_ENABLED=1` env 명시 시 "1" → 조건 일치 → 게이트 **ENTER(되살리기 보존)**.
- G4 블록 내부 로직·다른 게이트(G1~G3) 전부 불변.

## 작업 상세

### 수정 파일 (정확히 1파일 · 1줄)
- `scripts/finish-task.sh` (line 1558)

```diff
-if [ "${G4_GATE_ENABLED:-1}" = "1" ] && [ -f "$WORKSPACE/scripts/gemini_cli_gate_check.py" ]; then
+if [ "${G4_GATE_ENABLED:-0}" = "1" ] && [ -f "$WORKSPACE/scripts/gemini_cli_gate_check.py" ]; then
```

`git diff --stat`: `1 file changed, 1 insertion(+), 1 deletion(-)` — 그 외 변경 0.

### 모델 사용 기록
- 불칸(백엔드): **haiku** — 1문자 surgical shell 편집(단순 코딩) → 비용 절감 목적으로 haiku 사용 정당.
- 팀장(헤르메스, Opus): 검증·통합·종결만 수행(직접 코딩 없음).

## 테스트 결과

### 검증 항목
1. **grep 반영 확인**: `grep -n G4_GATE_ENABLED` → line 1558 `:-0` 확인 (0건 아님).
2. **문법**: `bash -n scripts/finish-task.sh` → 에러 없음 ✓.
3. **diff 범위**: 정확히 `:-1`→`:-0` 1곳만, 다른 변경 0 ✓.

### L1 스모크테스트 결과
- **서버 재시작**: 해당없음 (finish-task.sh는 서버가 아닌 파이프라인 shell 스크립트).
- **API 응답 확인**: 해당없음.
- **실동작 검증(게이트 조건 재현, 실제 bash 실행)**:
  - case1 (env 미설정/기본): 조건 `[ "${G4_GATE_ENABLED:-0}" = "1" ]` → **SKIP=OFF ✓** (기본 OFF 확인).
  - case2 (`G4_GATE_ENABLED=1`): 조건 → **ENTER ✓** (되살리기 경로 보존 확인).
- **스크린샷**: 해당없음.
- L1 판정: 게이트 조건의 두 분기(기본 OFF / env 되살리기)를 실제 bash로 재현·통과 → **L1 통과**.

## 발견 이슈 및 해결
- **lock-gate 오프셋**: `start_task_guard.py`가 lock을 메인 workspace(`/home/jay/workspace/.tasks/locks/`)에 기록한 반면, pre-commit hook은 worktree 루트(`git rev-parse --show-toplevel`) 기준으로 lock을 조회 → 최초 커밋이 `start_task_guard not passed`로 차단됨. 가드가 생성한 유효 lock(JSON)을 worktree의 `.tasks/locks/`에 배치(gitignore 대상, 커밋 미포함)하여 해소. 이후 pre-commit guard PASS.

## 머지 판단
- **머지 필요**: No — **머지 금지(ANU 판정 대기)**. task 지시 §완료: "worktree finish → PR → 머지 금지(ANU 판정)".
- **브랜치**: `task/task-2830-dev1`
- **워크트리 경로**: `/home/jay/workspace/.worktrees/task-2830-dev1`
- **머지 의견**: 변경이 1문자로 리스크 극소, 되살리기 경로 보존, 회장 결정(Gemini OFF)에 정합. G3 머지 게이트는 ANU가 판정.

## 비고
- dev6 미사용(회장 지시) — dev1(헤르메스) 팀 수행.
- ANU normal callback(독립 ANU key) 등록은 OS-level pickup runner 소유(executor self-key 자가발사 0).

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

