# ★★★ Gemini HIGH 반복 5유형 = "silent failure" doctrine + 사전가드 결선

**회장 verbatim (2026-06-03)**: task-2723~2724 4-5 라운드에서 Gemini HIGH 반복 유형을 정리. 핵심 통찰: **"Gemini HIGH는 단순 코드 스타일보다 '자동화가 실패할 때 조용히 틀어지는 지점'을 자주 찌른다."**

**Why**: 5개 전부 **테스트는 통과하는데 운영에서 조용히 틀어지는(silent failure)** 계열. Gemini가 잘 잡는 이유 = 정적 분석으로 보이는 **미래 실패 모드**. ANU가 사후 패치 루프를 4-5회 돈 게 실증.

## ANU-Core 6 recurrence_class (회장 확정 2026-06-03 — task 설계 박제 + 사전가드 결선)
**recurrence_class enum** (finding_attribution.recurrence_class 필드 값):
1. `REGEX_SUPPRESS_OSCILLATION` — absence/zero-count/suppress 계열 정규식이 **2회 이상 흔들리면 incremental regex patch 중단 → structured classifier/parser 전환**. mixed-count·substring·word-boundary·false-negative fixture 필수. (실증: critical_gap R1 over-broad FN→R2 word-boundary FP→R3 mixed-count FN→R4 substring FP, 4회 진동→LOOP_BOUNDARY→task-2725 classifier replacement)
2. `WORKSPACE_ROOT_HARDCODE` — `/home/jay/workspace` 등 root hardcoding 금지. workspace/project_path/canonical_root는 **인자/env/context passthrough**. shared-main misbinding 방지 fixture 필요. (실증: task-2723+3/2724 misbinding→terminal_callback canonical_root 재상속→task-2724+1 passthrough)
3. `SAFETY_NET_EXCEPTION` — safety/terminal/callback 코드는 **empty/null/missing 에서도 crash 금지**. fail-open 또는 fail-closed marker(NOT_REGISTERED/NO_OWNER_KEY) 반드시 남김. **안전망 코드가 조용히 죽으면 HIGH 취급**(메타-안전성). (실증: `next(iter(DEFAULT_ANU_KEYS))` StopIteration→task-2724+2 `next(iter(..,None))`+NO_OWNER_KEY)
4. `TEST_OPERATIONAL_SIDE_EFFECT` — 테스트/스모크에서 **실제 cron/callback/activation/systemctl 실행 금지**. dry-run/mock backend 필수. **실제 cron/activation count 0 을 검증값으로 남김**. (실증: task-2724 L1 스모크 실 ANU cron 7DA1D123 등록→task-2724+1 injectable mock)
5. `STALE_FRESH_REVIEW_CONFUSION` — merge readiness 는 반드시 **fresh head 기준**. old head review/thread 는 stale 분리. OWNER /gemini review 후 **submittedAt/commit/head 일치 확인**.
6. `GITHUB_THREAD_METADATA_DISTRUST` — `isOutdated`/`resolved`/reanchor 상태 **맹신 금지**. **originalCommit/current head/diff line/code content 직접 대조**. **"GitHub flag 가 아니라 코드가 진실"**. (실증: PR #168·#169·#170 3회 모두 stale HIGH 를 not-outdated 오표시. 환각 금지: 회장이 "HIGH 0"이라 해도 graphql HIGH 보이면 코드 대조 후 판정)

**공통분모 = silent failure**: 6개 전부 "테스트는 통과하나 운영에서 조용히 틀어지는" 미래 실패 모드. Gemini HIGH 는 코드 스타일이 아니라 **자동화가 실패할 때 조용히 틀어지는 지점**을 찌른다 (회장 verbatim).

## How to apply (사전가드 결선 — 사후 패치보다 가치 큼)
- **task md 작성 시 자동 포함**: Lv.2+ 코드 task의 task md에 위 5 doctrine을 self-check 체크리스트로 박아 봇이 PR 만들기 **전에** 검증 → Gemini 라운드 횟수 자체 감소. (task-2724 3라운드 중 canonical_root·test cron은 사전 체크리스트면 1라운드에 잡혔을 것)
- **dispatch 전 lint 후보**: 5 가드 정적 스캔(regex 진동 카운트 / `/home/jay/workspace` 하드코딩 grep / 안전망 함수 next(iter)/dict[] default 누락 / 테스트 실 cokacdir subprocess / Gemini head SHA 일치).
- **merge gate**: fresh review 판정은 head SHA 대조 + graphql isOutdated 불신 → 코드 직접 검증.

연계: [[feedback_bounded_loop_decision_as_data_contract_260602]] · [[feedback_callback_self_key_helper_not_wired_260521]] · task-2725(classifier replacement) · task-2724(terminal_callback). 단일소스 사이클 실증: task-2723(+1+2+3)/task-2725 · task-2724(+1+2) PR #170 MERGED.
