# task-2762+2 — PR #245 Gemini HIGH(+medium2) 가드-네이티브 수렴 (dev1)

## 목표
PR #245(branch `task/task-2762-dev1`, head e123609c)의 Gemini fresh 리뷰 지적을 수정해 **Gemini High 0**으로 닫는다. **same-PR · same-branch · 새 PR 금지.** scope = 기존 2파일 내부.

## 현재 사실
- branch `task/task-2762-dev1` head = **e123609c** (이미 merge-base=origin/main 1029131c·fresh base → **rebase 불필요**, 그 위에서 edit만).
- effective diff는 정확히 2파일 유지: `dispatch/anu_result_pickup_runner.py` · `tests/regression/test_p0b_owner_gate_signature_2762.py`.

## 수정 항목 (Gemini 2026-06-18 15:26 리뷰)
1. **[HIGH] `tests/regression/test_p0b_owner_gate_signature_2762.py:45`** — `sys.modules` 직접 조작 + `dispatch` 패키지 **동적 재로드 로직 제거**. 파일 상단 `sys.path` 부트스트랩이 이미 있으므로 **표준 import** (`from dispatch.anu_result_pickup_runner import build_owner_gate_fn ...`)만으로 동작하게 한다. test pollution/클래스 ID 불일치 위험 제거. **테스트 의도(실 build_owner_gate_fn 경로·executor_key kwarg 정합 검증)는 그대로 유지** — permissive lambda 금지.
2. **[MEDIUM] `dispatch/anu_result_pickup_runner.py:1345`** — `effective_executor_key = executor_key if (isinstance(executor_key, str) and executor_key) else bound_executor_key` 를 `or` 기반으로 단순화 가능하면 단순화. **단 self-collector 방어 의미 보존**(빈 문자열/None → bound 폴백, 비어있지 않은 call-time 우선). 의미 변하면 현행 유지.
3. **[MEDIUM] `tests/regression/test_p0b_owner_gate_signature_2762.py:129`** — 반복 `try...finally` 임시디렉터리 정리를 `self.addCleanup`으로 치환.

## 절차 (guard-native, 우회 0)
1. 정식 taskctl worktree에서 branch `task/task-2762-dev1` 체크아웃/takeover (head e123609c). `start_task_guard` 정식 lock 취득(branch task-id 기준 lock).
2. 위 3항목 edit → 커밋(`[task-2762+2] ...`). **이번엔 실 코드 edit이라 새 커밋 생성됨**(rebase-only 아님).
3. 검증: merge-base(origin/main, HEAD)==1029131c 유지 · `git diff --name-only origin/main...HEAD` = 정확히 2파일 · working tree clean.
4. **테스트 3그룹 재실행 전부 PASS**: `test_p0b_owner_gate_signature_2762.py` · `test_p0b_event_strategy_2760.py` · `test_p0b_event_strategy_wiring_2760.py`.
5. **same branch로 `git push --force-with-lease`** (pre-push hook 우회 없이 자연 통과).
6. push 후: PR #245 head 갱신·merge-base==1029131c·effective diff 2파일 재확인.

## 금지
- 새 PR 생성 금지 · **merge 금지** · **`/gemini review` 트리거 금지(human이든 bot이든 — ANU가 owner 권한으로 별도 발사)** · 2b′ real callback 재실행 금지 · real callback fire 금지 · activation 금지 · systemd enable 금지 · recurring cron 변경 금지 · admin override 금지 · ledger robustness/matching 착수 금지 · **hook bypass 금지 · 수기 lock 금지** · expected scope(2파일) 밖 수정 금지.

## 중단 조건 (즉시 STOP_REPORT, push 안 함)
1. hook bypass 필요 2. 수기 lock 필요 3. conflict 4. scope 밖 수정 필요 5. medium 단순화가 self-collector 방어 약화 유발 6. callback/result contract 변경 필요 7. systemd/cron/admin/activation scope 8. real fire 가능성 9. 테스트 의도 약화(permissive lambda化) 없이는 HIGH 해결 불가.

## expected_files
- `dispatch/anu_result_pickup_runner.py`
- `tests/regression/test_p0b_owner_gate_signature_2762.py`

## doctrine
- runtime code only · **봇 종료 전 ANU callback 필수**(독립 ANU key `c119085addb0f8b7`, UTF-8 ≤3900 bytes envelope) · merge/Gemini트리거/2b′ 별도 · PR #245 open 유지.

## 보고 요구 (ANU callback envelope + report.md)
task id · old head(e123609c) · new head · merge-base · effective diff 2파일 증거 · 3 항목 수정 diff 요약 · self-collector 방어 보존 근거 · 테스트 3그룹 결과 · 가드 우회 0 증거 · real fire 0 · ACTIVE=false · 3 flag OFF.

## 목표 상태명
`PR245_GEMINI_HIGH_REMEDIATED_PUSHED_AWAIT_REREVIEW_ACTIVE_FALSE`

## allowed_resources (본 task의 capability)

```yaml
allowed_resources:
  paths:
    - "dispatch/anu_result_pickup_runner.py"
    - "tests/regression/test_p0b_owner_gate_signature_2762.py"
    - "tests/regression/test_p0b_event_strategy_2760.py"
    - "tests/regression/test_p0b_event_strategy_wiring_2760.py"
  forbidden_paths:
    - "memory/**"
    - "reports/**"
    - "plans/**"
    - ".github/**"
    - "memory/events/*.cron-*"
    - ".env*"
    - "**/*.done"
  commands:
    - "pytest"
    - "python3 -m pytest"
    - "git"
  merge_policy: "manual"
  ttl_hours: 24
```
