---
task_id: task-2469
type: plan
scope: task
created: 2026-05-06
updated: 2026-05-06
status: completed
---

# 계획서: task-2469 — Phase D Penetration Tests (우회 불가능성 증명)

**task**: task-2469
**목표**: task-2468에서 구현된 lifecycle_guards 14개 + gemini_severity_parser 함수가 우회 시도(공격 코드)에 모두 차단됨을 자동 pytest로 증명한다. 결과물 = `pytest tests/taskctl/test_lifecycle_penetration.py`로 매번 자동 검증되는 공격 fixture + 차단 assertion.
**승인**: 회장 2026-05-06 "기능 추가 아니라 우회 불가능성 증명. 보고서가 아니라 자동화된 방어 검증 체계."
**근거**: `memory/tasks/task-2469.md`, `memory/reports/task-2467+3.md`(silent corruption 사례), `memory/reports/task-2468.md`(Guard 14 + parser).

---

## 목표

task-2467+3 silent corruption 4대 결함이 실증한 7대 우회 경로(P0-1~P0-9)에 대해, 공격 시도 fixture + 자동 차단 assertion 기반 pentest를 박제. 6개 mandatory(A-F) + 7개 optional(G-M) 시나리오 모두 pytest로 PASS. 기존 task-2468 14건 회귀 0.

## 범위

### 포함
- `tests/taskctl/test_lifecycle_penetration.py` (mandatory 6 + optional 7)
- `tests/fixtures/task-2469/` (시나리오별 gemini review body, events 마커, config 변조본)
- `memory/specs/penetration_test_spec_260506.md` (시나리오 spec)
- `memory/orchestration-audit/penetration-test-2469.jsonl` (각 시나리오 차단 evidence 박제)
- 발견 결함 시 surgical fix (`scripts/lifecycle_guards.py` / `scripts/gemini_severity_parser.py`만)

### 제외 (다음 페이즈 이후)
- 신기능 추가 (회장 명시 금지)
- task-2468 산출물 변경 (read-only)
- config 파일 실제 변조 (fixture 임시본만)
- `scripts/taskctl.py`, `scripts/finish-task.sh`, `scripts/worktree_manager.py`, `scripts/g3_independent_verifier.py` (task-2468 wiring 완결, 본 task 변경 금지)
- production `allowed_bot_accounts.json`, `allowed_approvers.json`, `admin-override.jsonl` 변경

## 위임 계획

- **Phase 1 (Spec + Fixtures)**: **토르(백엔드)** — penetration_test_spec_260506.md + tests/fixtures/task-2469/ 폴더 구조 + scenario A~F fixture body 작성
- **Phase 2 (Pentest 본체 A-F)**: **토르(백엔드)** — test_lifecycle_penetration.py 6 mandatory + audit jsonl emit helper
- **Phase 3 (P1 Pentest G-M)**: **헤임달(테스터)** — config 변조 / symlink / xfail / hidden path 7건
- **Phase 4 (회귀 + Maat 검증)**: **오딘(팀장)** + **마아트(횡단)** — 14/14 task-2468 회귀 + Maat 독립 검증
- **Phase 5 (PR + G3 verify + Merge)**: **오딘(팀장)** — taskctl pr-open --auto + Gemini gate + bot merge

## 검증 기준

- `pytest tests/taskctl/test_lifecycle_penetration.py -v` → 6 mandatory + 7 optional 모두 PASS
- `pytest tests/taskctl/test_lifecycle_guards.py -v` → 14 passed (회귀 0)
- `pytest tests/taskctl/ tests/state_machine/ -v` → 전체 PASS (회귀 0)
- `wc -l memory/orchestration-audit/penetration-test-2469.jsonl` → ≥6 (시나리오별 차단 로그)
- 모든 시나리오에서 우회 성공 0건 (차단됨)
- `pyright scripts/lifecycle_guards.py scripts/gemini_severity_parser.py tests/taskctl/test_lifecycle_penetration.py` → 0 errors

## 3 Step Why (context-notes.md 참조)

승인 결과: PASS. (A → B → C 일관성 확인)
