# task-1990 Loki(레드팀) 검증 보고서

> 검증 대상: consulting팀(아스클레피오스, 테미스) 근본 원인 분석
> 검증자: Loki (보안팀 팀장, Devil's Advocate)
> 일시: 2026-04-20

---

## 주장 1: `claude --print` 플래그가 파일을 수정하지 않는다

### 판정: **CHALLENGED** — 주장에 중대한 약점 존재

**consulting팀 주장**: `--print`와 `-p`가 동시에 전달되어 중복 플래그이며, 응답만 stdout에 출력하므로 파일 수정이 불가능하다.

**Loki 검증 결과**:

1. **`--print`와 `-p`는 동일 플래그(확인됨)**: CLI 도움말에서 `-p, --print`로 정의. 코드 `["claude", "--print", "-p", combined_prompt]`에서 `-p`는 `--print`의 short form이 아니라 **positional argument로 해석될 가능성**이 있으나, 실제로는 `--print`의 alias이므로 `combined_prompt`가 positional `prompt` 인자로 전달된다. 즉, 이 호출은 `claude --print --print "combined_prompt"`와 동등하며, 중복 플래그 + positional prompt 형태다.

2. **핵심 약점: `--print` 모드에서도 도구(Edit, Write, Bash) 사용이 가능하다**. Claude Code의 `--print` 모드는 "응답을 stdout에 출력하고 종료"하는 것이지, 도구 사용 자체를 차단하지 않는다. `--tools ""` 옵션을 명시적으로 전달해야 도구가 비활성화된다. `--print` 모드에서 Edit/Write 도구가 호출되면 파일은 실제로 수정되고, 최종 텍스트 응답만 stdout으로 출력된다.

3. **단, permission 문제가 존재**: `--print` 모드에서 `--dangerously-skip-permissions` 없이는 도구 사용 시 사용자 승인 프롬프트가 발생하는데, non-interactive 모드에서는 이것이 자동 거부될 수 있다. 그러나 워크스페이스가 이미 신뢰된 상태이거나 `.claude/settings.json`에 권한이 사전 설정되어 있으면 수정이 진행될 수 있다.

**결론**: "파일 수정이 불가능하다"는 주장은 과도하게 단정적이다. `--print` 모드는 도구 사용을 원천 차단하지 않으며, permission 설정에 따라 파일 수정이 가능할 수 있다. 다만 permission이 사전 설정되지 않은 환경에서는 사실상 수정이 되지 않을 가능성이 높다. **"확실히 수정 불가"가 아니라 "환경 의존적으로 수정 실패 가능성 높음"이 정확한 진단이다.**

---

## 주장 2: Gemini 타임아웃 시 자동 수정 루프 미진입

### 판정: **CONFIRMED** — 검증 통과

**코드 검증 (854~864행)**:
```python
while elapsed < gemini_timeout and pr_number:
    # ... gemini-code-assist 검색 ...
    if "gemini-code-assist" in re_reviews.stdout.lower():
        gemini_found = True
        break
    time.sleep(interval)
    elapsed += interval
```

타임아웃 시 `gemini_found = False` 유지 → 875행 `if gemini_found and pr_number:` 조건 불통과 → 자동 수정 루프(877~912행) 전체 스킵. 이 분석은 정확하다.

**보강 사항**: 자동 수정 루프뿐 아니라 MEDIUM 분류(914~917행)도 동일하게 스킵된다. consulting팀이 이 부차 영향을 언급하지 않았으나 근본 원인 진단에는 영향 없음.

---

## 주장 3: task-1970 커밋이 main에 미반영

### 판정: **CONFIRMED** — 검증 통과

**Git 검증**: `git log --oneline --all | grep -i "1970"` 결과 0건. task-1970 관련 커밋이 어떤 브랜치에도 존재하지 않는다.

**현재 상태**: `collect_mode: bool = False`가 cmd_finish(656행), _auto_fix_high_comments(486행), _classify_medium_comments(573행) 모두에서 확인되지만, 이 변경의 출처가 git 히스토리에서 추적 불가. Themis 검증과 일치.

**추가 발견**: CLI 진입점(1211~1218행)에서 `collect_mode`를 아예 전달하지 않으므로, CLI 경로에서는 항상 기본값(`False`)이 적용된다. 즉, 현재 코드에서는 collect_mode 문제가 해소된 상태이나, 그 변경이 task-1970에 의한 것이라는 주장은 근거 없음.

---

## 주장 4: 재리뷰 대기 시 기존/신규 리뷰 구분 불가

### 판정: **CONFIRMED** — 검증 통과, 추가 심각도 상향 제안

**코드 검증 (901~912행)**:
```python
if fix_result.get("executed"):
    re_elapsed = 0
    while re_elapsed < gemini_timeout:
        re_reviews = _run(
            ["gh", "api", f"repos/{owner}/{repo_name}/pulls/{pr_number}/reviews"],
            ...
        )
        if "gemini-code-assist" in re_reviews.stdout.lower():
            break
```

1. **리뷰 ID/타임스탬프 비교 로직 없음** — 확인됨. 전체 리뷰 목록에서 "gemini-code-assist" 문자열만 검색.
2. **첫 번째 대기 루프(854~864행)도 동일한 문제** — 기존 리뷰가 있으면 즉시 `gemini_found = True`로 설정. 이는 PR이 이전에 리뷰를 받았다면 새 리뷰 없이도 루프를 통과할 수 있다는 의미.

**심각도 상향 근거**: 재리뷰 루프(901~912행)뿐 아니라 **최초 리뷰 감지(854~864행)에서도 동일한 결함**이 존재한다. 자동 수정 후 push → 재리뷰 대기 시, 이전(수정 전) 리뷰가 여전히 API 응답에 포함되므로 즉시 `break`되어 **수정 전 리뷰를 수정 후 리뷰로 오인**한다. 결과적으로 HIGH 이슈가 해결되지 않았는데도 루프가 종료되어, 동일한 HIGH 코멘트가 재파싱되고 무한 수정 시도/즉시 종료가 반복될 수 있다.

---

## 종합 평가

| 주장 | 판정 | 비고 |
|------|------|------|
| 1. `--print` 파일 수정 불가 | **CHALLENGED** | 도구 사용 차단이 아닌 permission 의존적 |
| 2. 타임아웃 시 루프 미진입 | **CONFIRMED** | MEDIUM 분류 스킵도 부차 영향 |
| 3. task-1970 미반영 | **CONFIRMED** | 현재 False 값의 출처 불명 |
| 4. 리뷰 구분 불가 | **CONFIRMED** | 최초 감지 루프에도 동일 결함 (심각도 상향) |

### Loki 추가 발견 (consulting팀 미언급)

**결함 5: `fix_result.get("executed")` 게이트의 허점**
- 890행: `_auto_fix_high_comments`는 collect_mode=False일 때 `claude --print`를 실행하고 무조건 `{"executed": True}`를 반환(534행)
- 그러나 claude가 실제로 파일을 수정했는지 확인하지 않음. `git add -A` + `git commit`이 실행되지만, 변경사항이 없으면 commit이 실패(empty commit)
- commit 실패 시에도 `executed: True`가 반환되어 push + 재리뷰 대기 루프에 진입
- 결과: **파일 수정 없이 push → 재리뷰 대기 → 이전 리뷰 즉시 감지 → 동일 HIGH 재파싱 → 3회 반복 후 종료**라는 무의미한 사이클이 발생할 수 있음

---

*Loki 서명: 비판적 검증 완료. 주장 1에 대한 과도한 단정에 경고, 주장 4에 심각도 상향, 신규 결함 1건 추가 발견.*
