---
task_id: task-2553
type: plan
scope: task
created: 2026-05-11
updated: 2026-05-11
status: completed
---

# 계획서: task-2553

**task**: task-2553
**목표**: Fine-grained OWNER PAT trigger-only 모듈 (`anu_v2/owner_trigger_pat.py`) 구현 + `merge_queue_executor` Phase 3 통합. `/gemini review` 댓글 트리거만 허용. 다른 endpoint 호출 0.
**승인**: 회장 2026-05-11 dec_1 "Fine-grained OWNER PAT trigger-only doctrine 예외 조건부 승인"
**근거**: `memory/tasks/task-2553.md`, `memory/events/task-2552.owner_trigger_policy_decision.json`

---

## 목표

회장 §명시 12 필수 구현 조건 + 15 금지 + 6 허용 범위 + Phase 0~3 + 5 fixture 1:1 강제.
`anu_v2/owner_trigger_pat.py` 단일 책임 신규 모듈 + `merge_queue_executor.py` Phase 3 통합.

## 범위

### 포함
- Phase 0: secret 인프라 (token loader fail-fast + redaction guard)
- Phase 1: decision schema (`owner_trigger_decision.json`) + dedupe (PR/head)
- Phase 2: trigger-only comment writer (body 정확히 `/gemini review`만, 다른 endpoint 호출 0)
- Phase 3: `merge_queue_executor` 통합 — queue-head + evidence missing 시 트리거 후 BOT merge
- 5 test fixture (bot trigger fail / owner success / duplicate blocked / stale reset / non-queue blocked)
- regression tests (security boundaries 어설션)

### 제외 (다음 페이즈 이후)
- production OWNER PAT 실제 발급 (회장 별도 secret 주입)
- `.github/workflows/` Gemini App 설정 변경 (forbidden)
- 다른 anu_v2 모듈(post_merge_smoke_runner, replacement_pr_runner 등) 변경

## 위임 계획

- Phase 0~2: **엔키 (백엔드)** — `owner_trigger_pat.py` 신규 + Phase 0/1/2 단위 테스트
- Phase 3 + regression: **엔키 (백엔드)** — `merge_queue_executor.py` 통합 + Phase 3 integration test
- 5 fixture + 보안 경계 어설션: **닌기르수 (테스터)** — regression suite + 적대적 fixture
- QC 일관성 검증: **마아트 (독립검증)** — 횡단조직
- 보안 적대적 평가: **로키 (레드팀)** — 횡단조직 (Lv.4 security 강제)

## 검증 기준

- `pytest anu_v2/tests/test_owner_trigger_pat_*.py tests/regression/test_*_2553.py -q` → 모든 PASS
- `grep -nE "OWNER_GEMINI_TRIGGER_PAT|owner_trigger_decision|owner_trigger_audit" anu_v2/owner_trigger_pat.py` → 모든 키워드 hit
- token redaction: stdout/audit에 token value 0 (`grep -E "ghp_|github_pat" anu_v2/owner_trigger_pat.py` → 0건)
- pyright: anu_v2/owner_trigger_pat.py → 0 errors
- G3 independent verifier → PASS
- L1 미통과 사유: anu_v2는 import + pytest로만 검증 (서버/curl/Playwright 해당없음)
