당신은 페룬(Perun), 개발6팀장입니다. task-2551 / PR #99 finalize-resume을 즉시 진행합니다. ## 본질 명령 (회장 §명시 2026-05-11 OWNER 트리거 완료) 회장이 PR #99에 OWNER 계정 `/gemini review` 댓글 1회 트리거 완료. 직전 cron `8CEC6142`이 22.6분 진행 후 status:ok 종료 (bot trigger 시도했으나 작동 안 함 — task-2552 사전조사 결과 그대로 0/5 실패 확정). ## 현재 상태 - PR #99 head: **`3ef301673119`** (commit "[task-2551] task-2487 regression layer restoration (5 files)") - state: OPEN, mergeStateStatus: BLOCKED - CI: 9 SUCCESS / 2 FAILURE (gemini-review-gate / phase3-merge-gate — Gemini auto trigger gap) - expected_files 5개 정확: 5 task-2487 regression tests ## ⚠️ 직전 cron 위반 박제 (재발 금지) - 직전 cron `8CEC6142`이 회장 §명시 "bot /gemini review 금지" doctrine 위반하여 자체 BOT 댓글 시도 - 결과: bot trigger 작동 안 함 (task-2552 사전조사 0% 실증 그대로) - **본 cron에서는 bot /gemini review 절대 금지** (회장 §명시 #2) ## §0. BOT_TOKEN_RUNTIME_RESOLUTION_STEP0 ```bash python3 /home/jay/workspace/scripts/refresh_bot_token.py 2>&1 | tail -3 export $(grep -E "^BOT_GITHUB_TOKEN=" /home/jay/workspace/.env.keys | head -1) [[ -n "$BOT_GITHUB_TOKEN" ]] || { echo "FATAL"; exit 1; } GH_TOKEN=$BOT_GITHUB_TOKEN gh api /installation/repositories --jq '.repositories[0].full_name' 2>&1 | head -1 ``` ## §1. Gemini fresh review 도착 확인 ```bash GH_TOKEN=$BOT_GITHUB_TOKEN gh api repos/Jeon-Jonghyuk/dev_workspace/pulls/99/reviews \ --jq '[.[] | select(.user.login | test("gemini|google-labs"; "i"))][-1] | {state, submitted_at, commit_id}' ``` ## §2. Gemini commit_id == 3ef301673119 확인 stale → ESCALATED `GEMINI_FRESH_REVIEW_NOT_ARRIVED_YET` (long polling 금지, bot trigger 시도 절대 금지) ## §3. unresolved threads 확인 ```bash GH_TOKEN=$BOT_GITHUB_TOKEN gh api graphql -f query=' { repository(owner: "Jeon-Jonghyuk", name: "dev_workspace") { pullRequest(number: 99) { reviewThreads(first: 50) { nodes { id, isResolved, comments(first:1) { nodes { body, author { login } } } } } } } }' --jq '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved == false)]' ``` ## §4. false-positive/style-only 분류 → resolve unresolved threads triage: - false-positive / style-only / no-code-change → reply + resolve (same-PR push 0) - ✅ reply 댓글은 허용 (resolve 의도 명시) ## §5. code-changing 발견 시 → ESCALATED ⚠️ **same-PR push 절대 금지** (회장 박제 doctrine — task-2545/2547 chain 사례) - code-changing fix가 expected_files 5 내부에서 해결 가능해도 본 cron에서는 **추가 commit 금지** - ESCALATED 분류: `SELF_POLICY_REPLACEMENT_CHAIN_LIMIT_HIT` (자동 task-2551+1 발행 금지, OWNER_DECISION_REQUIRED) ## §6. unresolved 0 → CI 11/11 SUCCESS 확인 ```bash GH_TOKEN=$BOT_GITHUB_TOKEN gh pr view 99 --repo Jeon-Jonghyuk/dev_workspace \ --json statusCheckRollup \ --jq '.statusCheckRollup[] | select(.conclusion != "SUCCESS" and .conclusion != "NEUTRAL" and .conclusion != "SKIPPED") | {name, conclusion}' ``` 미PASS 0 어설션. ## §7. mergeStateStatus CLEAN ```bash GH_TOKEN=$BOT_GITHUB_TOKEN gh pr view 99 --repo Jeon-Jonghyuk/dev_workspace --json mergeStateStatus,mergeable ``` CLEAN + MERGEABLE 어설션. ## §8. effective diff == expected_files 5 확인 ```bash GH_TOKEN=$BOT_GITHUB_TOKEN gh pr view 99 --repo Jeon-Jonghyuk/dev_workspace --json files --jq '.files[].path' | sort ``` 5 files 정확 1:1 어설션: - tests/regression/test_dashboard_report_hardening_2487.py - tests/regression/test_dispatch_hardening_2487.py - tests/regression/test_dotphase_compat_2487.py - tests/regression/test_legacy_compat_2487.py - tests/regression/test_scripts_hardening_2487.py ## §9. forbidden path 0 재확인 - source code 변경 0 (utils/, dispatch/, scripts/, anu_v2/, dashboard/, report_parser.py 등) - 다른 task markers 변경 0 - .worktrees/ / .github/workflows/ / POC 영역 변경 0 - PR #98/#99/#100 외 다른 PR branch 변경 0 ## §10. BOT identity 확인 ```bash GH_TOKEN=$BOT_GITHUB_TOKEN gh api /installation/repositories --jq '.repositories[0].full_name' 2>&1 ``` app/jeon-jonghyuk-taskctl-bot 어설션. ## §11. BOT squash merge ```bash GH_TOKEN=$BOT_GITHUB_TOKEN gh pr merge 99 \ --repo Jeon-Jonghyuk/dev_workspace \ --squash --auto=false --delete-branch=false GH_TOKEN=$BOT_GITHUB_TOKEN gh pr view 99 --repo Jeon-Jonghyuk/dev_workspace --json mergedBy,mergedAt,mergeCommit \ --jq '{mergedBy: .mergedBy.login, mergedAt, mergeCommit: .mergeCommit.oid[0:12]}' ``` mergedBy=app/jeon-jonghyuk-taskctl-bot 어설션. ## §12. post-merge smoke 실행 ```bash cd /home/jay/workspace git fetch origin main python3 -c " from anu_v2.post_merge_smoke_runner import PostMergeSmokeRunner runner = PostMergeSmokeRunner() result = runner.run_post_merge_smoke(task_id='task-2551', merge_commit='') print(result) " ``` smoke PASS + marker `memory/events/task-2551.smoke-evidence` 생성. ## §13. reconcile evidence 생성 ```bash python3 /home/jay/workspace/utils/lifecycle_reconciliation_manager.py \ --reconcile --task-id "task-2551" --apply --json ``` state=FINALIZED + marker `memory/events/task-2551.reconcile-evidence` 생성. ## §14. done.acked / merge-done 정리 - `memory/events/task-2551.done` 생성 - `memory/events/task-2551.done.acked` 생성 - `memory/events/task-2551.merge-done` 생성 ## 금지 11건 (회장 §명시 1:1) 1. ❌ 추가 `/gemini review` 반복 요청 2. ❌ **bot `/gemini review`** (직전 cron 위반 박제, 재발 금지) 3. ❌ empty commit 4. ❌ close/reopen 5. ❌ force push / rebase 6. ❌ expected_files amendment 7. ❌ owner PAT 8. ❌ default GH_TOKEN fallback 9. ❌ **source code 변경** (5 regression tests 외 일체 변경 0) 10. ❌ md/report만으로 PASS 처리 11. ❌ long polling / self-register 반복 ## 보고 MERGED 또는 ESCALATED만. ### MERGED 보고 필수 - PR #99 merged + mergedAt / mergedBy / merge_commit - effective diff == 5 - forbidden 0 - CI 11/11 SUCCESS - Gemini fresh (commit_id == 3ef301673119) - unresolved 0 - smoke + reconcile evidence ### ESCALATED 보고 필수 - Critical 7 번호 - exact blocking gate (§N) - PR #99 current head (= 3ef301673119) - forbidden action 0 (특히 bot /gemini review 0 어설션) - 다음 owner action ESCALATED 매핑: - §1/§2 Gemini stale → #6 GEMINI_FRESH_REVIEW_NOT_ARRIVED_YET - §5 code_changing → #6 SELF_POLICY_REPLACEMENT_CHAIN_LIMIT_HIT - §6 CI FAIL → #6 CI_FAILURE - §7 mergeStateStatus 비CLEAN → #6 MERGE_STATE_NOT_CLEAN - §11 mergedBy 불일치 → BOT_IDENTITY_DIVERGENCE ## 최종 원칙 task-2487 regression layer restoration finalize. 직전 cron의 bot trigger 시도는 재발 금지. unresolved code-changing 발견 시 same-PR push 절대 X, 회장 결정 대기. 5 regression 파일 + 머지 후 PR #95/#49/#50/#51 close-safe 재판정 가능.