# task-2564 context-notes — ANU v2.0 RC 검증 결정 근거

## 회장 §명시 1:1 (2026-05-13)

> ANU v2는 핵심 자동화 구현 완료 단계로 판단한다. 이제 신규 기능 추가보다 v2.0 Release Candidate 검증을 수행한다.
> 목표: ANU v2 전체 자동화가 회장 운영 원칙대로 동작하는지 release-level로 검증한다.

성격: **read-only audit + 박제**. 신규 기능 0, 코드 변경 0.

## 12 항목 ↔ 회장 §명시 spec 1:1 매핑

각 항목별 spec ↔ 코드 evidence 매핑은 본 task-2564.md 본문에 명시. 본 audit은 1:1 검증.

## 주요 결정 근거

### 항목 2 expected_files strict — PASS 결정
- 6개 PR (#111-#116) actual_changed_files == expected_files 1:1 직접 대조 (gh pr view + dispatch_decision.expected_files)
- 모두 100% strict 일치 (58 파일, 외부 mutation 0)

### 항목 3 forbidden path 0 — PASS 결정
- 모든 dispatch_decision의 forbidden_paths lockdown 메커니즘 박제
- 실제 PR file에서 forbidden hit 0

### 항목 7 G4 — PASS 결정
- `scripts/finish-task.sh:831` (`# 2.8.5. [G4-GATE] Pre-PR Gemini CLI 단발 gate`)
- `scripts/gemini_cli_gate_check.py:60` (`FIX_LOOP_MAX = 2`)
- 공식 merge gate 아님 명시 (module docstring)

### 항목 12 Critical 7 매핑 drift — PARTIAL 결정
- **Canonical** (`anu_v2/merge_queue_executor.py:56-80`):
  - #1 FORBIDDEN_PATH_INVASION
  - #2 EFFECTIVE_DIFF_CONTAMINATION_REPLACEMENT_FAILED
  - #3 GEMINI_REAL_BUG_SCOPE_EXPANSION
  - #4 BLOCK_OVERRIDE_REQUIRED_OR_INSUFFICIENT_REASON
  - #5 DEPENDENCY_CYCLE_OR_SERIAL_ONLY_CONFLICT
  - #6 REPLACEMENT_PR_ALSO_FAILED
  - #7 POST_MERGE_SMOKE_FAILURE
- **Task md doctrine drift**:
  - task-2562 ESCALATED #1 "FORBIDDEN_CAPABILITY_USE" / "OUT_OF_SCOPE_MUTATE"
  - task-2562 ESCALATED #2 "CAPABILITY_REGRESSION" / "UNAUTHORIZED_DISPATCH_ATTEMPT"
  - task-2562 ESCALATED #6 "IMPLEMENTATION_SPEC_INCOMPLETE" / "REGRESSION_TEST_FAIL"
  - task-2564 ESCALATED #1 "CRITICAL_7_MAPPING_VIOLATION" / "FORBIDDEN_PATH_HIT" / "OUT_OF_SCOPE_MUTATE"
  - task-2564 ESCALATED #6 "ANU_V2_RC_NOT_READY" / "CI_FAILURE"
- `memory/feedback/feedback_critical_escalation_only_260508.md` 파일 부재 (회장 §명시 doctrine doc 미박제)
- → 매핑 ID 정합성은 유지되나 value(의미)가 task md마다 자유롭게 사용됨. canonical과 doctrine 통합 spec 필요.

### 박제 naming inconsistency (항목 10, 11)
- smoke evidence: `task-2558.smoke-evidence.json` vs `task-2560.post-merge-smoke.json` (이름 2가지)
- reconcile evidence: `task-2558.reconcile-evidence/reconcile.json` (directory) vs `task-2560.reconcile-evidence.json` (single file)
- task-2559 reconcile/smoke 둘 다 박제 0
- task-2559+1 reconcile 박제 0 (smoke만 있음)
- task-2561/2562 smoke 박제 0 (skip_reason INTENDED 또는 reconcile 통합)

## 회장 결정 대기 후속 (RC 확정 전)

1. dispatch_decision schema canonicalization (`task.dispatch_decision.v1` 통일)
2. 누락 4건 dispatch-decision 박제 (task-2553/2554+1/2555/2557)
3. smoke/reconcile evidence naming canonicalization (단일 file 형태로 통일)
4. 누락 reconcile 박제 (task-2559, task-2559+1)
5. Critical 7 canonical enumeration doctrine doc 작성 + task md doctrine 동기화
6. `memory/feedback/feedback_critical_escalation_only_260508.md` 박제 또는 명시 doc 신규

## 참조

- `memory/tasks/task-2564.md` — 본 task 본문 (회장 §명시 1:1)
- `anu_v2/merge_queue_executor.py:56-80` — Critical 7 canonical
- `scripts/finish-task.sh:831` — G4 hook
- `anu_v2/auto_gemini_triage.py:651` — minor_in_expected_files classifier
- `anu_v2/executor_scheduler.py:113, 633` — per-PR isolation
- `anu_v2/post_merge_smoke_runner.py:459-475` — smoke runner
- `anu_v2/owner_trigger_only.py:424` — owner_trigger invocation
- `anu_v2/idle_pr_diagnoser.py:37` — FIRST_GEMINI_TRIGGER_MISSING state
