# task-2785 PR 후보 준비 packet (PR 생성 전 검토용 — 미생성)

상태명: `TASK2785_PR_CANDIDATE_READY_NO_STALE_BASE_ACTIVE_FALSE`
작성: ANU 직접 (2026-07-04 KST). **PR 후보 준비 packet only — PR 생성/push/merge 0.** 근거: GPT 판정(산출물 구현 후보 독립검증 PASS 수용 / 세션 정리 → PR 후보 packet → PR 생성 승인 별도). observability diagnostics 보강이지 required check 등록·ruleset 변경·production activation 아님.

## 0. 전제 (독립검증 수용 확정)
- 산출물 = **구현 후보 독립검증 PASS**(ANU 직접 관찰). task closeout report 수신 완료.
- ★ 표현 제한: **production callback delivery 완료 / owner-pickup delivery 완료 / Merge Queue activation / required check 등록 / production activation 아님.** ACTIVE=false.

## 1. 기존 branch/worktree/head (★ stale base 없음)
- branch `task/task-2785-dev2`, head **82c759e6**, worktree `.worktrees/task-2785-dev2`.
- **base = 5f707910 = 현재 main** → **stale base 문제 없음**(task-2781/2782와 달리 rebase/cherry-pick 불필요, 브랜치 직접 PR 가능).
- 실커밋 2개: `8e61998f`(토르: diagnostics sink) + `82c759e6`(헤임달: 회귀 5).
- 실변경 = **expected_files 3개뿐**: `scripts/merge_group_evidence_auditor.py`(+18) · `scripts/merge_group_pr_resolver.py`(+108) · `tests/regression/test_merge_group_evidence_auditor_2781.py`(+111).

## 2. GPT 필수 확인 항목 (ANU 직접 실측)
- ✅ **diff = expected_files 3개뿐** (5f707910..82c759e6).
- ✅ **판정 로직 불변**: `_gh_api(endpoint,timeout)->tuple[int,list|dict]`·`_gh_graphql(query,variables,timeout)->tuple[int,dict]` 시그니처 불변. status enum 8종·exit code(0=PASS/1=그외)·PASS/FAIL 분기 무변경. auditor의 유일한 status 참조 라인 `if status==MERGE_GROUP_PRS_UNRESOLVED and result.get("diagnostics")`는 **UNRESOLVED에만 diagnostics를 붙이는 additive guard**(값/판정 변경 아님).
- ✅ **추적 범위 확장 0**: `commits/{sha}/pulls` fallback 등 신규 resolve 경로 무추가(diff grep 0). repo slug 값 수정 0.
- ✅ **통합 64 passed**: 2781 스위트 **18**(기존 13+신규 5) + P1 2510 **36** + callback 2782 **10** (baseline 59 floor 무손상+5).
- ✅ **check-run 0**: read-only CLI(`--publish-check` 없이)만 실행, GitHub check-run 생성 0(branch head 미푸시).
- ✅ **.github / ruleset / required check / Merge Queue / forbidden(utils·finish-task·gemini gate·dispatch) 무접촉.**
- ✅ **canonical truncate 0**: P1(replacement_pr_runner 39636B)·finish-task(100183B) 불변.
- ✅ **diagnostics 실동작**(read-only CLI): status=`MERGE_GROUP_PRS_UNRESOLVED`·exit=1(불변)·verdict JSON `diagnostics{repo, tiers[]}` 존재(tier별 invoked/accepted/reject_reason/gh_calls)·stderr 1줄 요약. "어느 tier가 왜 실패했는지" 자기설명 확인.

## 3. rebase/PR 계획
- base가 이미 현재 main(5f707910)이므로 **rebase/cherry-pick 불필요**. PR 승인 시:
  1. `task/task-2785-dev2` 브랜치를 origin에 push(worktree에 lock 있음·commit엔 미포함).
  2. `gh pr create`(base=main) → 실 PR diff 3파일·forbidden 0·.github/ruleset 0 재확인.
  3. CI/Gemini 리뷰 → HIGH0/CRITICAL0 + unresolved 0 확인 후 별도 merge 승인.

## 4. STOP_REPORT 트리거 점검 (전부 미발생 = clean)
- diff 3파일 밖 변경 0 · 판정 로직 변경 0 · 추적범위 확장 0 · repo slug 값 수정 0 · .github/ruleset/required/Merge Queue 0 · 회귀(13/36/10) 깨짐 0 · check-run/publish-check 0 · activation 표현 0.

## 5. 부수 기록 (별도 backlog·PR 무관)
- `PR265_DEFAULT_REPO_SLUG_MISMATCH_CONFIG_HYGIENE_BACKLOG_ACTIVE_FALSE` (DEFAULT_REPO=JonghyukJeon vs 실 slug Jeon-Jonghyuk).
- `FINISH_TASK_G3_VERIFIER_STALE_FAIL_MARKER_NOT_CLEARED_ON_PASS_BACKLOG_ACTIVE_FALSE` (G3 PASS 시 stale g3-fail 마커 미정리 → .done 차단, 봇 수동 우회).
- 중복 dispatch = ANU 실수(dispatch.py 출력 파싱 편의로 2회 호출) — [[feedback-dispatch-output-truncation-no-premature-redispatch]]에 재발방지 강화 기록 완료. impact 0(lock·멱등·2번째 봇 인지검증 전환).

## 6. 다음 단계 (별도 승인 대기)
- **PR 생성 여부 = 본 packet 제출 후 회장/GPT 별도 승인.** 현재 = **PR 미생성**. 코드 0·push 0·merge 0·ACTIVE=false.
