# ANU v3 PR/Merge Automation Partial Closure Dry-Run

- **작업명**: ANU_V3_PR_MERGE_AUTOMATION_PARTIAL_CLOSURE_DRY_RUN
- **ts_kst**: 2026-05-21 05:10 KST
- **mode**: read-only · dry-run · proposal-only · no GitHub write · no PR open · no merge · no credential raw exposure
- **verdict**: PARTIAL_CLOSURE_PLAN_COMPLETED · live pilot 진입 NO_GO_AT_THIS_MOMENT

## 회장 verbatim 완료 보고 8항목

### 1. Replacement PR v3 gap closure plan — **PROPOSAL_READY (LOW risk · ≤15 LOC)**
- `utils/replacement_pr_runner.py` = 0 lines stub (재확인)
- `anu_v2/replacement_pr_runner.py` = 442 lines / 18,695 bytes / mtime 2026-05-10 (task-2537 lineage)
- 본질 4축 모두 완비: contamination 감지 / original PR 보존 / clean replacement 생성 / 실패 Critical7 매핑
- **Option A — thin re-export shim** 권고 (≤15 LOC + __all__ + import smoke test)
- 14 fixtures dry-run matrix (FDR1~FDR14) 설계 완료
- artifact: `replacement_pr_v3_gap_closure.result.json`, `replacement_pr_v3_adapter_proposal.json`, `replacement_pr_dry_run_fixture_matrix.json`

### 2. Merge queue partial 2건 정확한 정체 — **REDEFINED 2 → 1**
- **v1 PARTIAL #6 (serial_only collision)** → **WIRED 정정**
  - 근거: `CRITICAL_DEPENDENCY_CYCLE = "DEPENDENCY_CYCLE_OR_SERIAL_ONLY_CONFLICT"` (L144)
  - `_VALID_PARALLEL_POLICIES` set + invalid policy → Critical7 escalation (L1189-1197)
  - serial_only 와 dependency cycle 이 한 묶음으로 결선 완료
- **진짜 남은 PARTIAL 1건** = #14 reconcile evidence path contract 명문 부재
  - `post_merge_smoke_runner.py` (590L) WIRED + `lifecycle_reconciliation_manager.py` (1932L) WIRED
  - 두 모듈 간 evidence file path/schema/timing contract 만 부재
- artifact: `merge_queue_14_condition_matrix_v2.json`

### 3. Reconcile evidence contract 상태 — **PROPOSAL_READY (LOW risk · ≤135 LOC)**
- 제안 evidence file: `memory/events/post_merge_smoke_<task_id>.evidence.json`
- schema v1: task_id / pr_number / merge_commit_sha / smoke_status / smoke_command / stdout_stderr_tail (redacted) / critical7_classification / reconcile_evidence_ready
- write authority: post_merge_smoke_runner only (append-only · idempotent · atomic temp+rename)
- read authority: lifecycle_reconciliation_manager (RECONCILING state lookup)
- 5 fixtures (REC1~REC5) 설계 완료
- artifact: `reconcile_evidence_contract_proposal.json`

### 4. 14조건 v2 판정 — **13 WIRED · 1 PARTIAL · 0 NOT_WIRED**
- WIRED(13): queue head, expected_files exact match, forbidden path 0, effective diff contamination 0, dependency satisfied, **serial_only collision 0 (PROMOTED)**, CI all SUCCESS, Gemini unresolved 0, mergeStateStatus CLEAN, HEAD SHA lock match, BOT_GITHUB_TOKEN=ghs_, OWNER PAT 사용 0, post-merge smoke configured
- PARTIAL(1): reconcile evidence configured (path contract 명문화)
- v1 대비: +1 WIRED / -1 PARTIAL / 0 NOT_WIRED

### 5. Live PR-open pilot 가능 여부 — **NO_GO_AT_THIS_MOMENT**
- 24 preconditions / **4 hard blockers**:
  - A1: v3 shim 구현
  - A3: dry-run matrix regression test (test_replacement_pr_dry_run_matrix.py)
  - A4: Critical7 fixture regression test (test_replacement_pr_failure_critical7.py)
  - F2: chair-authorized task ID
- artifact: `limited_live_pr_open_pilot_preconditions.json`

### 6. Live merge pilot 가능 여부 — **NO_GO_AT_THIS_MOMENT**
- 28 preconditions / **3 hard blockers**:
  - A2/F5: reconcile evidence path contract closure
  - B4: pilot 직전 token preflight (dispatch time)
  - H2: chair-authorized task ID
- H5: prerequisite limited live PR-open pilot PASS (RECOMMENDED · 회장 명시 시 우회 가능)
- artifact: `limited_live_merge_pilot_preconditions.json`

### 7. 필요한 회장 승인 항목 — **6건**
- (1) v2 매트릭스 정정 ACCEPT (#6 promotion + #14 refinement)
- (2) reconcile_evidence_contract_proposal 실 구현 task 승인 (LOW · ≤135 LOC)
- (3) replacement_pr_v3_adapter_proposal 실 구현 task 승인 (LOW · ≤15 LOC + smoke)
- (4) 두 regression test 구현 task 승인 (dry_run_matrix + failure_critical7)
- (5) limited live PR-open pilot 별도 chair-authorized task (4 hard blockers closure 후)
- (6) limited live merge pilot 별도 chair-authorized task (3 hard blockers closure 후 · 권장 순서: PR-open → merge)

### 8. PR/merge/credential/write 0 증거 — **PASS**
- 본 audit 전 과정 read-only · dry-run · proposal-only
- 실 merge 0 / 실 PR open 0 / branch/commit/push 0 / GitHub write 0 / credential raw exposure 0
- token value 0 노출 (prefix 5자만)
- ledger 변동 0 / git HEAD EQUAL / zombie cron 미접촉 / CLOSED_ALL_SETTLED 산출물 byte-0
- self-key authoritative 0 / independent ANU collector 만 authoritative
- recovery watcher 중복 spawn 0 / loop-boundary review 0

## 산출물 요약

| Track | 산출물 |
|---|---|
| F | `replacement_pr_v3_gap_closure.result.json` |
| F | `replacement_pr_v3_adapter_proposal.json` |
| F | `replacement_pr_dry_run_fixture_matrix.json` |
| G | `merge_queue_partial_closure.result.json` |
| G | `merge_queue_14_condition_matrix_v2.json` |
| G | `reconcile_evidence_contract_proposal.json` |
| G | `limited_live_pr_open_pilot_preconditions.json` |
| G | `limited_live_merge_pilot_preconditions.json` |
| 공통 | `anu_v3_pr_merge_partial_closure_dry_run.decision.json` |

## Critical7 assessment
- **is_critical7**: false
- 본 audit 전 과정 read-only / dry-run / proposal-only · 활성 침해 0

## Scope invariants preserved
- read-only · dry-run · proposal-only · no GitHub write
- 실 merge 0 · PR open 0 · branch/commit/push 0
- credential raw exposure 0 · token value 0 노출
- Track C 미접촉 · byte guard 미접촉 · zombie cron 미접촉 · external ecosystem 미접촉
- self-key authoritative 0 · independent ANU collector 만 authoritative
- recovery watcher 중복 spawn 0 · loop-boundary review 0
- CLOSED_ALL_SETTLED 산출물 byte-0
- **main production dispatch path 기준 PARTIAL closure plan scope 한정 · overclaim 0**

## 다음 단계 (회장 결정 대기)
1. v2 매트릭스 정정 ACCEPT/REJECT
2. 회장 승인 항목 6건 우선순위 부여
3. 권장 의존 chain: (a)~(d) 4 task 완료 → (e) PR-open pilot → (f) merge pilot

**auto_progress**: false · **chair_approval_required**: true (6항목)
