---
name: audit-preflight-git-fetch-required
description: main HEAD baseline audit 시작 전 3-way fresh ref 확정 의무 (git fetch + ls-remote + GitHub API) — stale local origin/main 단독 신뢰 금지
metadata:
  type: feedback
---

# audit preflight = git fetch + ls-remote + GitHub API 3-way 확정

**Rule**: main HEAD 또는 origin/main 을 baseline 으로 삼는 모든 audit/verification 은 시작 전 3-way fresh ref 확정을 의무 적용한다. local `git rev-parse origin/main` 단독 신뢰 금지.

**Why**:
- task-2685 audit (dev1 헤르메스) 2026-05-26 사고 박제: audit 시작 전 `git fetch origin main` 실행 0 → local origin/main = `2752182a` (stale) 기준으로 audit 진행 → `319170b9 main에 없음` 잘못된 결론 도출 → "PR #150 merge 전제 붕괴" false alarm → 회장 직접 정정 지시 (★ verbatim "PR150_MERGE_CONFIRMED_LOCAL_STALE"). 실제 main HEAD = `319170b9` (PR #150 squash merge 완료, mergedAt 2026-05-25T18:51:50Z).
- 단일 source (local ref) 단독 신뢰 = cascade 오염 위험. polar opposite 오판 ("main 에 없음" ↔ "main HEAD") 가능.
- [[feedback_audit_baseline_3way_blob_verify_260521]] 의 main ref 차원 확장. blob 3-way 와 별개로 ref 자체도 3-way 필요.

**How to apply**:
1. **preflight 4-step 의무 (★ 회장 verbatim 강화 2026-05-26)** — audit 시작 전 매번 모두 실행:
   - `git fetch origin main --prune` (stale local 갱신)
   - `git ls-remote origin refs/heads/main` (remote ground truth)
   - `git rev-parse refs/remotes/origin/main` (post-fetch local mirror 확인)
   - `gh api repos/<OWNER>/<REPO>/branches/main --jq .commit.sha` 또는 `gh api repos/<OWNER>/<REPO>/commits/<SHA>` (GitHub API ground truth · PR/commit state 교차)
2. **★ per-audit 의무 (★ 회장 verbatim 강화 2026-05-26)** — 이전 세션 fetch 결과 신뢰 금지. 매 audit / merge verification / post-merge smoke / main-ref 판단 시작 전마다 4-step preflight 재수행. "이전 세션에서 fetch 됐으므로 fresh main" 추정 금지.
3. **consistency gate** — 4 source sha 모두 일치 시에만 audit 진행. 불일치 = `ABORT_FETCH_RETRY` (5 분 후 재시도, 3회 실패 시 회장 보고).
4. **audit marker 필수 기록 필드**:
   - `baseline_sha` (사용한 main HEAD)
   - `preflight_4source_consistency` (ok / mismatch)
   - `pre_fetch_local_origin_main_sha` (stale 여부 추적용)
   - `fetch_timestamp_utc` (★ 본 audit 세션 fetch 시각 · 이전 세션 timestamp 금지)
5. **read-only audit 도 동일 적용** — `git show <sha>:<path>` 호출 전 baseline_sha 확정 의무.
6. **bot dispatch prompt 명시 강제** — Lv.3 read-only audit task md 에 preflight 4-step 1줄 명시. 누락 시 dispatch lint fail.
7. **회장 보고 시 단정 어구 사용 전 preflight 결과 인용** — "319170b9 main 에 없음" 같은 단정은 preflight 통과 후에만 가능.

**근거 박제**:
- 사고: `memory/events/pr150-merge-truth-reconciled-task-2685-audit-stale-local-260526.json` (8-check verification 결과)
- 정정: `memory/events/task-2685-audit-superseded-5-area-reevaluation-260526.json` (5 영역 재평가)
- 회장 verbatim 2026-05-26: "PR150_MERGE_CONFIRMED_LOCAL_STALE · task-2685 봇이 audit 시작 전 git fetch origin main 실행 안 함 → stale local origin/main (2752182a) 기준 audit 진행 → '319170b9 main에 없음' 잘못된 결론"

**관련 메모리**: [[feedback_audit_baseline_3way_blob_verify_260521]] [[feedback_merge_status_cross_verify]] [[feedback_callback_authority_actual_owner_key_260524]]

끝
