# [CANDIDATE — doctrine/template/checklist only] Gemini HIGH recurrence 사전가드 결선 후보

> ★ 회장 지시 2026-06-03: 6 recurrence_class doctrine 을 task template / dispatch preflight / review checklist 후보로 승격. **후보 문서까지만** — runtime 구현·active automation 아님. bounded_loop_decider.py runtime 미구현 유지. capability matrix 는 doctrine 만 반영(wired/active 과장 금지).
> 단일소스 doctrine: `memory/feedback_gemini_high_recurring_5patterns_260603.md` (6 recurrence_class).

## 1. task md template 후보 — "Known Gemini HIGH recurrence checklist" 섹션
Lv.2+ 코드 task md 에 자동 포함 후보 (봇이 PR 만들기 **전에** self-check → Gemini 라운드 감소):
```markdown
## Known Gemini HIGH recurrence checklist (사전 self-check — 해당 시 PR 전 반영)
- [ ] REGEX_SUPPRESS_OSCILLATION: absence/zero-count/suppress 정규식 변경인가? → 2회+ 진동 이력이면 classifier 전환. mixed-count·substring·word-boundary·false-negative fixture 포함?
- [ ] WORKSPACE_ROOT_HARDCODE: `/home/jay/workspace` 등 root 하드코딩 0? workspace/canonical_root passthrough(인자/env)? misbinding fixture?
- [ ] SAFETY_NET_EXCEPTION: safety/callback/terminal 코드가 empty/null/missing 에서 crash 0? fail-open 또는 NOT_REGISTERED/NO_OWNER_KEY marker 남김? default guard(next(iter(x),None)/dict.get)?
- [ ] TEST_OPERATIONAL_SIDE_EFFECT: 테스트/스모크가 실 cron/callback/activation/systemctl 실행 0? dry-run/mock backend? 실제 등록 count 0 검증값 남김?
- [ ] STALE_FRESH_REVIEW_CONFUSION: PR merge readiness 는 fresh head 기준? OWNER /gemini review 후 submittedAt/commit/head 일치 확인?
- [ ] GITHUB_THREAD_METADATA_DISTRUST: isOutdated/resolved 맹신 0? originalCommit/head/diff line/code 직접 대조?
```

## 2. dispatch 전 preflight checklist 후보 (정적 스캔)
ANU 가 dispatch 전 또는 lint 단계 적용 후보 (현재는 수동 체크, 코드 결선 미구현):
- **REGEX_SUPPRESS_OSCILLATION**: 같은 함수/정규식 영역 remediation_round ≥2 이면 classifier 전환 요구(incremental regex patch 차단).
- **WORKSPACE_ROOT_HARDCODE**: `grep -n '/home/jay/workspace' <changed.py>` = 0 (테스트 negative-assertion 제외).
- **SAFETY_NET_EXCEPTION**: 안전망 모듈에서 `next(iter(`(default 없음)·`[0]` 인덱싱·`dict[key]`(get 없음) 정적 스캔 → default guard 요구.
- **TEST_OPERATIONAL_SIDE_EFFECT**: 테스트 파일에서 실 `subprocess.run([...cokacdir...--cron])`·`systemctl`·실 activation 호출 정적 스캔 → mock/dry-run 요구.
- **STALE_FRESH_REVIEW_CONFUSION / GITHUB_THREAD_METADATA_DISTRUST**: merge gate 에서 fresh review = head SHA 대조 + graphql isOutdated 불신 → 코드 직접 검증.
- ★ 미구현: 이 preflight 를 코드 lint 로 결선하는 것은 별도 task + 회장 승인. 현재는 doctrine/checklist 후보.

## 3. finding_attribution schema 후보 — recurrence_class 필드 추가
`finding_attribution_v1` 의 각 finding 에 선택 필드 추가 후보:
```json
{
  "finding_id": "...",
  "severity": "HIGH",
  "reviewer_source": "gemini-code-assist",
  "recurrence_class": "REGEX_SUPPRESS_OSCILLATION | WORKSPACE_ROOT_HARDCODE | SAFETY_NET_EXCEPTION | TEST_OPERATIONAL_SIDE_EFFECT | STALE_FRESH_REVIEW_CONFUSION | GITHUB_THREAD_METADATA_DISTRUST | NONE",
  "recurrence_note": "이 class 의 과거 실증 task 링크/회차"
}
```
용도: Gemini HIGH triage 시 recurrence_class 태깅 → 반복 패턴 누적 관측 → 사전가드 우선순위. (schema 후보 — 기존 finding_attribution_v1 파괴 변경 아님, 선택 필드 추가)

## capability status (과장 금지)
- `gemini_high_recurrence_guards`: **DOCTRINE_ONLY**. IMPLEMENTED(runner)=false / WIRED=false / ACTIVE=false. doctrine + checklist/schema 후보만 존재. 코드 lint/decider runtime 미구현.
- bounded_loop_decider.py = NOT_YET_IMPLEMENTED 유지. recurrence_class 자동 분류기 미구현.

## 미구현/미결선 (회장 보고용)
1. preflight checklist → 코드 lint 결선 (별도 task + 회장 승인)
2. task md template 자동 주입 (dispatch.py prompt builder 결선 — dispatch runtime 수정이라 회장 승인)
3. finding_attribution recurrence_class 자동 태깅 (triage 코드 — 미구현)
4. GITHUB_THREAD_METADATA 코드 대조 자동화 (현재 ANU 수동 검증)
