# task-2609 — Track F: AUTO_PR_AND_MERGE_READINESS_DRY_RUN (회장 추가 결정, 5-track 병행·독립 task)

> **Lv**: Lv.4. **goal_type**: auto_pr_merge_readiness_dry_run. **Executor**: dev3-team 다그다 (key 0b94683120a691cf) 1회 한정. **TTL**: 3h. **상태**: 회장 Track F (5-track A~E 병행, preflight overlap 0 → SAFE_PARALLEL·DEFER 불필요). read-only·dry-run·proposal-only. 문서-only 금지(실 entrypoint+regression+fixture+result 필수). **callback: 반드시 독립 ANU key c119085addb0f8b7(executor self key 0b94683120a691cf 절대 금지·+49 코드 정본·위반 시 CallbackRegistrationBlocked/SELF_COLLECTOR_FORBIDDEN).**
> **preflight 정본**: `memory/events/task-2604-multitrack-preflight-decision_260519.json`. **task-2553 +N 아님 — 독립 task** (feedback-stop-plus-n-separate-rounds).

## 1. 목표 (회장 verbatim)

실제 PR open / branch write / push / merge 없이, 자동 PR 생성과 자동 머지 readiness를 read-only + dry-run + fixture 기반으로 검증한다.

## 2. 범위 (회장 verbatim)

read-only · dry-run · proposal-only · no GitHub write · no PR open · no branch/commit/push · no merge · no credential raw exposure.

## 3. 확인할 것 (회장 verbatim 1~10)

1. clean replacement PR runner 현재 상태 2. merge_queue_executor 현재 상태 3. 자동 머지 14조건 코드 강제 여부 4. BOT_GITHUB_TOKEN redacted preflight 가능 여부 5. OWNER PAT 사용 차단 여부 6. expected_files/forbidden path/effective diff contamination 판정 가능 여부 7. CI/Gemini/CLEAN/HEAD SHA lock 판정 가능 여부 8. post-merge smoke runner 결선 여부 9. reconcile evidence 경로 존재 여부 10. 실패 시 Critical7 분류 여부.

read-only consume 대상(preflight 식별·byte-0): `utils/merge_queue_executor.py` · `utils/replacement_pr_runner.py` · `utils/post_merge_smoke_runner.py` · `utils/bot_merge_identity.py` · `scripts/refresh_bot_token.py` · `utils/critical_escalation_reporter.py` · `utils/merge_topology_gate.py` · `utils/automation_contracts.py` · `scripts/run_post_merge_reconcile_closeout.py` · `utils/gemini_gate_validator.py`.

## 4. 자동 머지 14조건 (회장 verbatim — dry-run 판정 대상)

queue head · expected_files exact match · forbidden path 0 · effective diff contamination 0 · dependency satisfied · serial_only collision 0 · CI all SUCCESS · Gemini unresolved 0 · mergeStateStatus CLEAN · HEAD SHA lock match · BOT_GITHUB_TOKEN = ghs_ App token · OWNER PAT 사용 0 · post-merge smoke configured · reconcile evidence configured.

## 5. 필수 regression (회장 verbatim 1~15, mock-only FAIL·실 entrypoint)

1 all14 true→MERGE_CANDIDATE_READY · 2 expected_files mismatch→HOLD/REPLACEMENT_REQUIRED · 3 forbidden path>0→Critical7 · 4 effective diff contamination→replacement PR path · 5 CI not green→WAIT · 6 Gemini unresolved→severity별 WAIT/HOLD · 7 mergeStateStatus≠CLEAN→WAIT · 8 HEAD SHA mismatch→FAIL_CLOSED · 9 BOT token absent→HOLD · 10 OWNER PAT detected→FAIL_CLOSED · 11 post-merge smoke missing→HOLD · 12 reconcile evidence missing→HOLD · 13 dependency cycle→Critical7 · 14 replacement PR failure→Critical7 · 15 post-merge smoke failure→Critical7.

## 6. expected_files allowlist (DISJOINT — Track A/B/C/D/E 와 0 overlap, additive only)

`scripts/run_auto_pr_merge_readiness_dry_run_2609.py`(실 entrypoint) · `tests/regression/test_auto_pr_merge_readiness_dry_run_2609.py`(mock-only FAIL) · `memory/fixtures/task-2609.critical7-cases.json` · `memory/events/task-2609.auto_pr_merge_readiness.result.json` · `memory/events/task-2609.auto_pr_merge_readiness.decision.json` · `memory/events/task-2609.merge_gate_matrix.json` · `memory/events/task-2609.bot_token_redacted_preflight.json` · `memory/events/task-2609.queue_head_dry_run.json` · `memory/events/task-2609.post_merge_smoke_reconcile_dry_run.json` · `memory/events/task-2609.critical7_failure_fixture_results.json` · `memory/reports/task-2609.report.md` · `memory/events/task-2609.{decision,result}.json` · `memory/reports/task-2609.md`. 이 외 write 0. **상기 §3 read-only consume 10모듈·기존 task-2553 산출물·5-track 산출물·frozen anchor byte-0**. git HEAD·branch 전후 EQUAL.

## 7. 금지 (회장 verbatim)

실제 PR open · 실제 branch 생성 · commit/push · merge · GitHub write · credential raw 출력 · OWNER PAT 사용 · 기존 산출물 수정 · 현재 5-track(A~E) 산출물과 파일 overlap · executor self-callback/self-collector/self-adjudication/self-dispatch · fallback/dead-man/fixed-time 진행 트리거 · ANU authoritative 약화 · 문서-only 완료.

## 8. 병렬 규칙 (회장 verbatim)

Track F는 기존 A~E와 expected_files overlap 없어야 한다(preflight 확정: 전 산출 task-2609.* 신규 경로 → overlap 0). overlap 있으면 자동 DEFER. Track F 결과는 readiness/proposal-only로만 batch coordinator에 반영. Track F PASS여도 실제 PR open/merge 권한 자동 부여 0.

## 9. HOLD_FOR_CHAIR (회장 verbatim 공통)

Critical7 · Codex unresolved HIGH/CRITICAL · 기존 산출물 수정 필요 · credential/permission expansion · self-* · fallback/dead-man/fixed-time 진행트리거 · ANU authoritative 약화 · 문서-only 시도 · expected_files overlap(5-track 포함) · 실제 write/merge 시도.

## 10. callback (a) — 독립 ANU key 강제

완료 직후 normal completion callback cron **ANU key c119085addb0f8b7로만 발사** → 독립 ANU collector 회수·검증·Codex·adjudication → +53 durable-success write-back → +54 event loop 감지 → +55 bounded enactor(proposal-only) → consolidated. executor self key 0b94683120a691cf callback/collector/adjudication/dispatch 절대 금지(+49 코드 정본). ANU fallback=ANU key·안전망 한정·진행 트리거 아님. next_action=normal-callback durable-success event. batch coordinator: 본 track readiness/proposal-only로만 반영(실 PR/merge 권한 부여 0).

## 11. 완료 보고 (회장 verbatim 1~10)

1 Track F PASS/HOLD · 2 자동 PR readiness · 3 자동 merge readiness · 4 14조건 판정 결과 · 5 BOT token redacted preflight · 6 Critical7 fixture 결과 · 7 post-merge smoke/reconcile dry-run 결과 · 8 실제 write/merge 0 증거 · 9 다음 단계 limited live PR-open pilot 가능 여부 · 10 HOLD_FOR_CHAIR 여부.

## 12. 9-R (확정 — 본 절 본문 우선)

**ANU-Codex lint = GO_READY (HIGH/CRITICAL 0, overlap_vs_AE: no)** — expected_files 전부 task-2609.* 신규 경로·A~E 와 완전 DISJOINT(DEFER 불필요) · read-only/dry-run/proposal-only(실 PR/merge/write/credential/OWNER PAT 0) · shared invariant 보존(기존 task-2553+5-track 산출물 byte-0·callback owner=ANU key·no self-*·fallback≠진행트리거·ANU-only authoritative) · 문서-only 금지(실 entrypoint+regression+fixture·mock-only FAIL) · 14조건/15 regression 정합 · PASS여도 실 PR/merge 권한 자동부여 0. re-lint 불요. ANU key 로 dev3 다그다 1회 위임.
