---
task_id: task-2472
type: context
scope: task
created: 2026-05-07
updated: 2026-05-07
status: in-progress
---

# 맥락 노트: task-2472

**task**: task-2472 — Hard Enforcement Against Silent-Corruption Bypass

---

## 결정 근거

### [핵심 결정 1] Codex G1 FAIL 결과를 implementation backlog로 활용
- 본 task의 본질이 "현재 코드의 우회 경로 차단"이므로 Codex가 발견한 6개 갭(critical 1 + high 3 + medium 2)이 그대로 구현 TODO 리스트가 됨.
- Codex 결과 evidence: `memory/events/task-2472.codex-gate.json`
- 갭별 매핑:
  - **critical 1**: finish-task.sh:450 raw 0-byte emit → 토르 추가 8/9/10/24 (Python guard wrapper + JSON payload + post-write 검증)
  - **high 1**: cmd_done guard import 실패 시 fail-open → 토르 §1 구현 2/추가 12 (import 실패 fail-closed)
  - **high 2**: Gemini gate thread severity 미검사 → 토르 §1 구현 4 (utils/gemini_gate_validator.py 신설)
  - **high 3**: audit 5채널 + 10필드 schema 부재 + state inspect/repair 없음 → 토르 §1 구현 5/6
  - **medium 1**: cmd_recover check_gemini_severity 시그니처 버그 → 토르 §1 구현 4 부수 fix
  - **medium 2**: production-path 회귀 테스트 부족 → 헤임달 24건 신규

### [핵심 결정 2] 3 Step Why 자문
- **1st Why**: 왜 이 hardening이 필요한가?
  → task-2471+1(transition 14c FAILED→HUMAN_APPROVED 수동 수정, Gemini thread 임의 resolve)과 task-2473(0-byte .done.escalated 발행)에서 silent corruption bypass가 실제로 발생했고, **코드 차단이 없으면 같은 봇이 같은 우회를 반복**한다.
- **2nd Why**: 왜 이 접근(Python guard wrapper + thread-aware Gemini gate + state repair subcommand + 5 audit channel)이 최선인가?
  → 사람의 주의력에 의존하지 않고 **(1) 코드 거부 (2) 테스트 재발 방지 (3) audit 증거 보존 3중 방어**를 만들어 raw shell bypass와 manual edit 모두 차단. 단일 layer는 우회 가능 — task-2471+1 hardening이 task-2473에서 우회된 evidence가 명확.
- **3rd Why**: 왜 다른 대안(pre-commit hook only / runtime watcher only / 정책 문서 only)보다 나은가?
  → pre-commit hook은 로컬 우회 가능(force push). runtime watcher는 사후 탐지일 뿐 차단 X. 정책 문서는 봇이 무시. **taskctl 단일 출입구 + Python wrapper + shell emitter 강제 호출 + post-write stat/sha256/JSON 재검증 + audit 박제** 조합만이 raw shell까지 막는다.
- A-B-C 일관성: ✅ 본 설계는 evidence 기반 + multi-layer + drink-your-own-champagne 메타 검증 일치.

### [핵심 결정 3] forbidden_paths 보존 + drink-your-own-champagne 적용
- task-2471+1 PR을 머지하지 않고 evidence 보존 (transition 14c 박제)
- 본 task PR 자체가 *자체 hardening 코드*를 통해 정상 merge → meta 증명 (Gemini gate 강화, RECOVERABLE_BLOCKED, checksum 자체 적용)
- 이 패턴이 layer 3 drink-your-own-champagne (task-2471 layer 1, task-2471+1 layer 2)

## 참조 자료

- task spec: `memory/tasks/task-2472.md` (회장 명시 22 완료 조건 + 24 regression test)
- task-2471 보고서: `memory/reports/task-2471.md`
- task-2471+1 evidence: `.tasks/state/task-2471+1.json` (transition 14c FAILED→HUMAN_APPROVED 박제, read-only)
- task-2473 evidence: `memory/events/task-2473.*` (0-byte .done.escalated, read-only)
- Codex G1 결과: `memory/events/task-2472.codex-gate.json`
- 기존 구현(보강 대상):
  - `utils/silent_corruption_guard.py` (386줄, 기존)
  - `utils/audit_chairman_recovery.py` (156줄, 기존, schema 확장 필요)
  - `scripts/taskctl.py` (2329줄, 기존, state machine + state repair subcommand 추가 필요)
  - `scripts/finish-task.sh` (1051줄, 기존, line 450 fix 필요)
  - `scripts/lifecycle_guards.py` (1110줄, 기존, Gemini thread 검사 강화 필요)
  - `scripts/gemini_severity_parser.py` (332줄, 기존, latestReviews/thread severity 검사 추가 필요)
- 신설 필요:
  - `utils/review_thread_guard.py` (resolveReviewThread block + audit)
  - `utils/gemini_gate_validator.py` (thread-aware Gemini gate)
  - `utils/recoverable_block_classifier.py` (recoverable 분류기)
  - `utils/state_repair.py` (taskctl repair 구현 모듈)

## 주의사항

- ⚠️ **forbidden_paths 절대 수정 금지**: `memory/events/task-2471+1.*`, `.tasks/state/task-2471+1.json`, `memory/events/task-2473.*`, `memory/specs/allowed_*.json`, PR #29-#37 본문, `.env.keys`
- ⚠️ **drink-your-own-champagne 자체 적용 검증**: 본 PR이 자체 hardening 코드(thread severity, RECOVERABLE_BLOCKED, checksum) 모두 통과해서 머지되어야 함. 통과 못하면 hardening 결함 확정.
- ⚠️ **gh pr merge 직접 호출 금지** (taskctl 외 경로): merge_policy 위반.
- ⚠️ **회귀 0건 보장**: 기존 테스트 회귀 발견 시 즉시 ESCALATED.
- ⚠️ **shell raw emitter 우회 차단 메타테스트 필수** (§8.A-14 자기 적용 검증): task-2473 PR #38이 task-2471+1 hardening 적용 후에도 silent corruption 재발한 증거 → meta-regression test로 박제.
