{
  "schema": "anu_v2.release_decision.v1",
  "decision_ts_utc": "2026-05-13T06:30:00Z",
  "owner_directive_ref": "회장 §명시 2026-05-13 ANU v2.0 RC 검증",
  "audit_task": "task-2564",
  "audit_team": "dev5 마르둑",
  "rc_stamp": "anu_v2.0.0-rc.20260513",
  "items": {
    "1_dispatch_decision_schema": {
      "pass": false,
      "verdict": "PARTIAL",
      "evidence": "memory/events/task-25*.dispatch-decision.json — 9개 박제 / 4개 누락 (task-2553, task-2554+1, task-2555, task-2557). schema 버전 3가지 혼재 (anu_v2.dispatch_decision.v1 / task.dispatch_decision.v1 / memory.events.dispatch-decision.v1)."
    },
    "2_expected_files_strict": {
      "pass": true,
      "verdict": "PASS",
      "evidence": "PR #111(9)/#112(7)/#113(8)/#114(16)/#115(10)/#116(8) actual_changed_files == dispatch_decision.expected_files 100% strict (58/58 파일, 외부 mutation 0). 직접 대조 (gh pr view --json files)."
    },
    "3_forbidden_path_zero": {
      "pass": true,
      "verdict": "PASS",
      "evidence": "최근 6 PR 모두 forbidden_paths hit 0. dispatch_decision.json forbidden_paths lockdown 메커니즘 박제 완전 (task-2562 escalation_map.FORBIDDEN_PATH_HIT → #1, task-2561 forbidden_paths_zero_check 8 fields, task-2560 forbidden_paths 18 + forbidden_pr_branches)."
    },
    "4_owner_trigger_auto": {
      "pass": true,
      "verdict": "PASS",
      "evidence": "anu_v2/idle_pr_diagnoser.py:37 FIRST_GEMINI_TRIGGER_MISSING state, anu_v2/owner_trigger_only.py:424 invoke_from_scheduler. task-2549+1.owner-trigger.posted.attempt-1-* 박제. task-2563 hardening은 dev6 페룬 진행 중 (out of scope, 본 audit은 현재 base 검증)."
    },
    "5_minor_in_expected_files_triage": {
      "pass": true,
      "verdict": "PASS",
      "evidence": "anu_v2/auto_gemini_triage.py:651 classify_minor_in_expected_files, line 756-790 build_gemini_triage_decision, line 810-818 handle_cascade_finding. 테스트 anu_v2/tests/test_auto_gemini_triage_minor_in_expected_files.py (424 LOC, 12+ 회귀 케이스). task-2562 reports/task-2562.md PR #115 defensive style → reply_and_resolve 박제."
    },
    "6_executor_per_pr_isolation": {
      "pass": true,
      "verdict": "PASS",
      "evidence": "anu_v2/executor_scheduler.py:113 _CRITICAL_EXCEPTIONS = (TokenBoundaryViolation, ...), line 633 _safe_handle_single_diagnosis, line 662 isolated exception → FAILED marker but cycle 유지. 테스트 anu_v2/tests/test_executor_scheduler_per_pr_isolation.py (task-2560 PR #113 박제)."
    },
    "7_g4_pre_pr_gate": {
      "pass": true,
      "verdict": "PASS",
      "evidence": "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 + module docstring '공식 merge gate 아님'. Lv.1~2 soft / Lv.2 risk-trigger hard / Lv.3+ hard 박제 (task-2562 reports)."
    },
    "8_merge_queue_3way_and": {
      "pass": true,
      "verdict": "PASS",
      "evidence": "anu_v2/merge_queue_executor.py:407 AUTO_MERGE_ALLOWED 4-gate AND (CI 11/11 + Gemini unresolved 0 + mergeStateStatus CLEAN + HEAD SHA lock). BEHIND unblock A안 (pr-103.behind-unblock-audit.20260512T112111Z.json) 박제. (gap: BEHIND 자동 retrigger 코드 위치 명시 weak)."
    },
    "9_bot_squash_merge": {
      "pass": true,
      "verdict": "PASS",
      "evidence": "최근 10 PR (#107~#116) 모두 mergedBy=app/jeon-jonghyuk-taskctl-bot 확인 (gh pr list --json mergedBy). anu_v2/merge_queue_executor.py:431 '--squash', :432 '--match-head-commit', :434 assert_no_forbidden_git_flags (admin/force/rebase 차단), :440-441 BOT_GITHUB_TOKEN 격리."
    },
    "10_post_merge_smoke": {
      "pass": false,
      "verdict": "PARTIAL",
      "evidence": "anu_v2/post_merge_smoke_runner.py:459-475 run_post_merge_smoke + line 469-472 CRITICAL_POST_MERGE_SMOKE 분류 완성. 박제 naming inconsistency: task-2558.smoke-evidence.json vs task-2560.post-merge-smoke.json. task-2561/2562 smoke 박제 0 (INTENDED). task-2559 박제 0 (gap)."
    },
    "11_reconcile_evidence": {
      "pass": false,
      "verdict": "PARTIAL",
      "evidence": "task-2558.reconcile-evidence/ (directory!), task-2560/2561/2562.reconcile-evidence.json (single file) — naming/구조 2가지 혼재. task-2559 reconcile 박제 0, task-2559+1 reconcile 박제 0 (gap)."
    },
    "12_critical_7_only_reporting": {
      "pass": false,
      "verdict": "PARTIAL",
      "evidence": "Canonical (anu_v2/merge_queue_executor.py:56-80) 7개 정의 vs task md doctrine (task-2562, task-2564 등) ESCALATED 매핑 value drift 다수. memory/feedback/feedback_critical_escalation_only_260508.md 파일 부재 (회장 §명시 doctrine doc 누락). 매핑 ID는 일관 but value(의미)는 자유 사용."
    }
  },
  "summary": {
    "pass_count": 8,
    "partial_count": 4,
    "fail_count": 0,
    "items_pass": ["2", "3", "4", "5", "6", "7", "8", "9"],
    "items_partial": ["1", "10", "11", "12"],
    "items_fail": []
  },
  "verdict": "RC_PENDING",
  "verdict_rationale": "8/12 PASS, 4/12 PARTIAL. 핵심 자동화 (G4, owner_trigger, minor_in_expected_files, per-PR isolation, BOT squash merge, expected_files strict, forbidden path 0) 모두 PASS. 다만 (1) dispatch decision schema canonicalization, (10) smoke naming, (11) reconcile naming/coverage, (12) Critical 7 enumeration doctrine doc 4건 gap 해소 후 회장 재승인 권고.",
  "sign_off": {
    "dev5_marduk": "audit completed, 박제 5건 PR 제출",
    "owner_decision_pending": true,
    "owner_decision_field": "anu_v2.0.0-rc 확정 / 보류 후 추가 task dispatch / 박제만 후 추후 결정"
  }
}
