# ★★ Evidence-based non-blocking thread resolve → 정상 merge 패턴 (D안, 회장 verbatim 2026-06-03)

**PR #172(task-2728) 정식 성공 패턴 박제.** merge commit `dc6cdc380fb5`. admin override 없이 branch protection(conversation resolution)을 evidence-based resolve로 정상 통과.

## 성공 경로 (앞으로 ANU 기본 방향)
triage → evidence comment → thread resolve(graphql resolveReviewThread) → **일반 squash merge(--admin 없이)**
- 이전 안티패턴: "unresolved thread 있으면 회장 직접 resolve" 또는 "admin override"
- ★ unresolved thread가 있다는 이유만으로 회장 수동 resolve/admin override로 가지 말 것

## 5 중요 학습 (회장 verbatim)
1. **/gemini review request-only trigger = OWNER 판단 대행 아님 = 자동화 가능 영역**. 위험작업으로 over-block 금지(policy_over_blocked 사고). gh OWNER PAT(JonghyukJeon, issues:write+pull_requests:write)로 발사. thread resolve/판단대행/merge approval/merge 실행은 계속 OWNER/회장.
2. **stale/outdated false-positive HIGH ≠ fresh HIGH**. 판별: orig_commit이 이전 head·outdated=True·fresh review에서 0 HIGH·코드 직접대조 false-positive → `STALE_OUTDATED_FALSE_POSITIVE_HIGH / RESOLVABLE_NON_BLOCKING`. fresh head 기준 HIGH/CRITICAL이 진짜 hard gate.
3. **non-blocking Gemini thread = 회장 승인된 triage 결과 있으면 evidence-based resolve automation으로 닫기 가능**. 각 thread에 분류 근거(audit record 또는 evidence comment) 남기고 resolveReviewThread.
4. **branch protection conversation resolution = admin override 아니라 evidence-based resolve로 정상 통과 우선**. resolve 후 mergeStateStatus BLOCKED→CLEAN → 일반 merge.
5. **capability merge ≠ production active**. callback_fallback_prune·owner_gemini_trigger 둘 다 merge됐어도 WIRED=partial/false·ACTIVE=false 유지. live real-prune/watcher 자동결선 관측 전 ACTIVE 금지.

## D안 preflight 게이트 (PR마다 별도 — PR #172 처리가 PR #171에 자동 적용 아님)
PR마다 fresh HIGH/CRITICAL·expected_files·unresolved 성격이 다름. 매 PR 별도 확인:
current head / CI 11/11 / fresh OWNER /gemini 필요여부 / fresh HIGH/CRITICAL 0 / unresolved가 stale·noise·style·non-blocking인지 / expected_files clean / forbidden 0 / ANU key 0 / ACTIVE 변화 0 / merge approval 별도 필요여부.
**중단조건**: 새 HIGH/CRITICAL / 실제 코드결함 thread / expected_files 밖 수정 / credential·permission 확장 / ACTIVE 변동 / admin override 필요 → 중단·보고. 일반 merge가 여전히 막히면 admin override 쓰지 말고 보고.

단일소스 사건기록: memory/events/task-2728.merged-260603.json · task-2728.dplan-halt-stale-high-260603.json · task-2728.fresh-08c07cbe-triage-260603.json


## ★ 6번째 학습 (base-sync-required-before-merge, PR #171 2026-06-03)
merge approval 받은 PR 이 후속 PR 머지로 origin/main 전진해 **BEHIND** 만으로 막히면(branch-up-to-date protection):
- **base-sync-only update(update-branch: origin/main→PR branch merge commit)는 admin override 아님 = 정상 merge pipeline 자동 처리.** force/rebase 아님, 코드 diff 불변.
- 자동 경로: base-sync → 새 head 기준 재검증(CI 11/11·fresh OWNER gemini·effective diff·forbidden·ANU key·ACTIVE=false) → D안 evidence-based thread resolve → 일반 squash merge → post-merge smoke. 회장 재확인 불필요.
- 중단: conflict / effective diff 초과 / forbidden / ANU key / fresh 유효 HIGH 재발 / CI 실패 / admin·force·rebase 필요 / PR 의미 변경.
- 실증: PR #171 merge 9ba3cfbb (base-sync head cc32e5b6→1e4dfc30, --admin 0, conflict 0). 단일소스: task-2726.pr171-merge-blocked-behind-260603.json.
- ★ merge 성공 = AUTHORITATIVE_COMPLETION_BY_SCOPE_EVIDENCE(finish-task EXTERNAL_DIRTY infra block) + watcher/reconcile. finish-task 정상완료 아님. capability ACTIVE 전환 아님(WIRED 후보 증거).
