# task-3000 — Codex 사전검증 게이트 FAIL 근거 박제 (자가해소 금지 / ANU 판단 요청)

## 실측 사실
- `scripts/codex_gate_check.py` 를 2회 실행 (구현 전 / 구현 후) — **양쪽 모두 `pass: false`**
- 결과 파일: `memory/events/task-3000.codex-gate`

## FAIL 이 구현 품질 때문이 아닌 근거 (코드 실측)
`codex_gate_check.py` 가 Codex 에 보내는 입력은 **`--task-file` 로 준 명세 md** 와
`affected_files` **존재 여부**뿐이다. 구현 diff·SQL 본문을 **읽지 않는다**.
- 프롬프트 구성부에 git diff / 파일 본문 수집 경로 없음
- `target_dir` 은 `affected_files` 의 존재 확인에만 쓰임
- 위험 키워드 감지도 `task_file` 내용 대상

따라서 지적 4건은 전부 **명세(ANU 작성)의 서술 공백**을 지적한 것이며,
PASS 로 바꾸는 유일한 방법은 `memory/tasks/task-3000.md` 를 수정하는 것이다.
그 파일은 ANU 소유이고 본 태스크의 수정 허용 경로가 아니므로 **자가해소하지 않는다.**

## Codex 지적 4건 ↔ 실제 구현 대조 (봇이 실측)
- **C1(critical) 기존 행 정합성** — 유효. 단 프로덕션 `push_subscriptions` 행 수 = **0**
  (팀장 독립 조회 + 모리건 덤프, 2회 일치). 정화할 행이 없다.
  ★ 본질은 별개 사실이며 보고서에 명시함: **RPC 초크포인트는 아직 살아있는 anon INSERT
  정책으로 테이블에 직접 꽂히는 행을 막지 못한다.** 3단계 집행 전까지 그 경로는 열려 있다
  (= 기존 M1). 이는 본 태스크 범위 밖이며 3단계 신속 집행 근거를 강화한다.
- **C2(high) 상한 경합** — **이미 구현됨.** `PERFORM pg_advisory_xact_lock(hashtextextended(v_conversation_id::text,0))`
  을 UPDATE 이전에 배치해 대화 단위 임계구역에서 재등록 판정과 활성 개수 판정을 함께 수행한다.
  Codex 는 구현을 보지 못했다.
- **C3(high) URL 정규화 엣지케이스** — 각 항목을 구현에 대조:
  - 대소문자 → `lower(v_host)` 로 정규화. 허용.
  - trailing dot (`fcm.googleapis.com.`) → 화이트리스트 미매치로 **거부**(fail-closed).
    브라우저가 발급하지 않는 형태라 정상 사용자 영향 없음.
  - 명시 포트 (`:443`) → 호스트 문자셋에 `:` 없음 → **거부**(fail-closed).
  - userinfo (`@`) → 호스트 문자셋에 `@` 없음 → **거부**.
  - punycode (`xn--…`) → 문자셋상 허용되나 화이트리스트 미매치 → **거부**.
  - IPv6 literal (`[::1]`) → `[`·`]` 문자셋 배제 → **거부**.
  - `fcm.googleapis.com.evil.tld` → 정확일치 실패 + 접미사 목록에 googleapis 없음 → **거부**.
  → 전 항목이 이미 막혀 있다. 해당 케이스를 검증 스위트에 명시 포함한다.
- **C4(medium) 근거 소스·갱신 절차** — 근거는 `task-3000-aine-whitelist-evidence.md`
  (Apple/Microsoft 공식 문서 + Pushpad known-push-services, 커밋 2026-06-01).
  미확인 정상 호스트 발견 시 **차단 유지가 아니라 ANU 에스컬레이션**하도록 보고서에 명문화한다.

## ANU 판단 요청
본 게이트는 명세 리뷰 전용이므로, 구현이 아무리 견고해도 명세 서술이 보강되지 않는 한
PASS 가 나오지 않는다. 게이트 성격에 대한 판정(override 또는 명세 보강)을 요청한다.
