당신은 마르둑(Marduk), 개발5팀장입니다. task-2545 / PR #92 GEMINI_STALE_PREVENTION_RUNNER finalize를 즉시 진행하세요. ## 본질 명령 (회장 §명시 2026-05-11) PR #92는 task-2545 본인 모듈 (GEMINI_STALE_PREVENTION_RUNNER)이며, **자기정책에 따라 code-changing fix는 same PR push 금지**한다. 회장 §명시 1~12번을 1:1 적용한다. ## 사전 진단 (아누가 미리 확보 — 재확인 필수) - current head: `15cf6ad011e184ca298996d47253501152700287` (gh pr view 92 직접 재확인) - mergeable: MERGEABLE - mergeStateStatus: **BEHIND** (main 동기화 필요) - Gemini evidence: **0건** (issue comments 0, Gemini bot 댓글 0) - failed checks: gemini-review-gate / phase3-merge-gate (둘 다 Gemini 미트리거 원인) ## §1. recovery_decision instance 생성 (필수) 파일: `memory/events/task-2545.recovery-decision.json` (memory/events 영역, PR effective diff 미포함) ```json { "schema_version": "anu_v2.recovery_decision.v1", "task_id": "task-2545", "pr_number": 92, "runner": "merge_queue_executor", "classification": "", "current_head": "", "base_branch": "main", "mergeStateStatus": "<직접 재조회>", "expected_files": [ "anu_v2/gemini_stale_prevention_runner.py", "anu_v2/tests/test_gemini_stale_prevention_runner_2545.py", "anu_v2/fixtures/gemini_stale_*.json (5개)" ], "gemini": { "evidence_count": "<직접 조회>", "evidence_fresh": "", "external_trigger_required": "", "mismatch_reason": "<없으면 null, 있으면 명시>" }, "ci": { "passed": "", "failed": "", "behind_resolution_needed": true }, "decision": { "allowed_action": "", "next_step": "" } } ``` ## §2. 분류별 진행 경로 ### 경로 A: Gemini evidence 0 (현재 사전 진단 상태) 1. classification = `PR_OPEN_GEMINI_TRIGGER_MISSED` 2. external_trigger_required = `true` 3. **`memory/events/task-2545.external-trigger-required` marker 생성** (회장 OWNER /gemini review 1회 trigger 대기) 4. `memory/orchestration-audit/critical-escalations.jsonl`에 1줄 append: - `kind`: `EXTERNAL_TRIGGER_REQUIRED_EVIDENCE_0` - `task_id`: task-2545 - `pr`: 92 - `head`: 15cf6ad0... - `decision`: `WAIT_OWNER_GEMINI_REVIEW` - `chat_id`: 6937032012 - `ts`: now 5. 봇은 신규 /gemini review 발사 / push / rebase / close-reopen 절대 금지 6. 보고: **ESCALATED — EXTERNAL_TRIGGER_REQUIRED — OWNER /gemini review 1회 필요** ### 경로 B: Gemini evidence FRESH (commit_id == current_head) 1. classification = `MERGEABLE_RECOVERY` 2. external_trigger_required = `false` 3. unresolved threads triage: - `false_positive` / `style_only` / `no_code_change` → reply + resolve (same PR push 0) - `code_changing_fix` 필요 → **replacement_pr_runner 경로로 전환** (task-2545+1 신규 발행 권고, 본 PR #92 close-reopen 금지) 4. BEHIND 해소: `git fetch origin main && git merge origin/main` (rebase 절대 X / force 절대 X) 5. `gh run rerun 25630947727 --failed` 6. 11/11 SUCCESS / mergeStateStatus=CLEAN / HEAD SHA lock 확인 7. **BOT_GITHUB_TOKEN fail-fast 검증**: - `[[ -n "$BOT_GITHUB_TOKEN" ]] || { echo "BOT_GITHUB_TOKEN missing"; exit 1; }` - default GH_TOKEN fallback merge 절대 금지 8. `GH_TOKEN=$BOT_GITHUB_TOKEN gh pr merge 92 --squash --auto=false` 9. mergedBy=app/jeon-jonghyuk-taskctl-bot 직접 검증 (jeon-jonghyuk-taskctl-bot이 아니면 BOT_IDENTITY_DIVERGENCE 박제) 10. PostMergeSmokeRunner.run_post_merge_smoke 실행 → marker `memory/events/task-2545.smoke-evidence` 생성 11. lifecycle_reconciliation_manager --reconcile --task-id task-2545 --apply → marker `memory/events/task-2545.reconcile-evidence` + done / done.acked / merge-done ## §3. 금지 14건 (회장 §명시) 1. ❌ 신규 /gemini review 발사 (봇 자체 trigger) 2. ❌ empty commit 3. ❌ close-reopen 4. ❌ force push / rebase 5. ❌ admin override / owner_pat 6. ❌ default GH_TOKEN fallback merge 7. ❌ same PR push으로 code-changing fix 8. ❌ expected_files amendment 9. ❌ task-2539+1 / 2544+1 / 기타 다른 PR 혼입 10. ❌ md/report fallback PASS (실제 marker / check_run / PR diff / 파일 존재 기준만) 11. ❌ self-register 무한 polling 12. ❌ BOT_GITHUB_TOKEN 미확인 후 merge 13. ❌ task-2545.done.escalated 박제 marker 임의 삭제 (기존 23:15 escalate 기록 보존) 14. ❌ 신규 task-2540 / 2541 / 2546 / 2538+1 모듈 혼입 ## §4. 완료 조건 (경로별) ### 경로 A 완료 - recovery-decision.json 생성 - external-trigger-required marker 생성 - audit jsonl 1줄 append - 보고: ESCALATED — EXTERNAL_TRIGGER_REQUIRED ### 경로 B 완료 - recovery-decision.json + smoke-evidence + reconcile-evidence + done + done.acked + merge-done 6 marker - mergedBy=app/jeon-jonghyuk-taskctl-bot 검증 - 보고: MERGED — mergeCommit / mergedBy / 13/13 PASS ## §5. 보고 원칙 MERGED 또는 ESCALATED만 보고. 무변화 polling / 회장 chat 노출 X. Critical 7종 발생 시 즉시. ## §6. 최종 원칙 회장이 ChatGPT와 대화하지 않아도, 봇 세션이 끊겨도, ANU v2 runner가 PR state / Gemini evidence / check_run / diff / marker를 직접 조회하여 분류·결정·finalize까지 자동 수행하는 구조를 만든다. 본 task-2545 finalize는 그 본체 모듈이므로, recovery_decision.json schema 1:1 준수가 핵심이다.