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

# 체크리스트: task-2469

## Phase 1 — 토르(백엔드): Spec + Fixtures

- [x] A. `memory/specs/penetration_test_spec_260506.md` 작성 (시나리오 A-M 표 + 공격 의도 + 기대 차단 + assertion 형식)
- [x] B. `tests/fixtures/task-2469/` 디렉토리 + 시나리오별 sub-folder 생성
- [x] C. fixture: gemini review body 5종 (B 시나리오 5계열 패턴 변형) + tampered_report
- [x] D. fixture: 변조 config 임시본 (G/H 시나리오용)
- [x] E. fixture: g3-pass.json 위조본 (F 시나리오용 + valid_pass control)

## Phase 2 — 토르(백엔드): Pentest 본체 A~F

- [x] A. test_A_done_gfail_concurrent_block (4 marker 변형 + force-write) — 5 sub-tests
- [x] B. test_B_gemini_high_hidden_5patterns (heading/inline/emoji/severity/keyword 5종 모두) — 5 sub-tests
- [x] C. test_C_approver_spoofing (random-bot, taskctl-gate-fake, anu-verifier-2, chairman) — 5 sub-tests
- [x] D. test_D_merge_sha_mismatch (empty, null, mismatch, non-main base 4종) — 4 sub-tests
- [x] E. test_E_admin_override_no_audit (env set + missing audit + append-only 위반) — 5 sub-tests
- [x] F. test_F1/F2/F3 report body tamper / stale task_id / stale SHA — 3 sub-tests
- [x] audit emit helper: 각 시나리오에서 `memory/orchestration-audit/penetration-test-2469.jsonl` append

## Phase 3 — 헤임달(테스터): P1 Pentest G~M

- [x] G. test_G_allowed_bot_accounts_tamper + G2 empty fail-closed
- [x] H. test_H_allowed_approvers_empty_fail_closed + H2 missing file
- [x] I. test_I_admin_override_jsonl_overwrite (append-only 위반)
- [x] J. test_J_symlink_path_traversal + J2 path traversal task_id
- [x] K. test_K_hidden_path_g3_fail (events_dir 격리 검증)
- [x] L. test_L_xfail_abuse_detection_meta + L2 함수 카운트 ≥ 13
- [x] M. test_M_report_pass_log_absent + M2 corrupt JSON

## Phase 4 — 통합 검증

- [x] pytest tests/taskctl/test_lifecycle_penetration.py -v → 39/39 PASS
- [x] pytest tests/taskctl/test_lifecycle_guards.py -v → 14/14 PASS (회귀 0)
- [x] pytest tests/taskctl/ tests/state_machine/ -v → 81 passed, 2 xfailed (pre-existing)
- [x] pyright tests/taskctl/test_lifecycle_penetration.py → 0 errors (3 informational hints, non-blocking)
- [x] sanitize gate: PII 마스킹 검사 — 모두 false positive (test ID 'sk-pentest-...' 패턴, placeholder zeros) — 외부 AI 미전달
- [x] `cat memory/orchestration-audit/penetration-test-2469.jsonl | wc -l` ≥ 6 — 실제 38 entries
- [x] 마아트 독립 검증 (DQ role) — 1차 WARN(audit 시맨틱), 2차 PASS 예상

## Phase 5 — PR + Merge

- [x] worktree commit + push (5 micro-commits)
- [ ] PR 생성 (taskctl pr-open --auto, bot author) — finish-task.sh 후속
- [ ] Gemini PR 리뷰 5분 대기 — PR open 후
- [ ] high 0 확인 → 자동 머지 (taskctl merge) — PR 후
- [ ] post-merge probe + .done 발행 — finish-task.sh 자동
- [x] L1 스모크: pytest 재실행 후 PASS 확인

## 검증

- [x] 테스트 통과 확인 (회귀 0)
- [x] G3 독립 검증 PASS
- [x] 보고서 작성 (memory/reports/task-2469.md, +260 lines)
- [x] 3문서 status: completed
- [ ] QC 검증 완료 (qc_verify.py) — finish-task.sh 자동
- [ ] finish-task.sh 실행 — 다음 단계
