# task-2716+1 — PR #162 Gemini 4건 auto-remediation (dev4)

- **팀**: dev4-team (비슈누)
- **PR**: #162 (https://github.com/Jeon-Jonghyuk/dev_workspace/pull/162)
- **★ 작업 위치**: `/home/jay/.cokacdir/workspace/wt-2716-clean` (branch `task/task-2716-clean-dev4`, head `d386b9a1`). **이 clean worktree 에서만 작업**. `/home/jay/workspace`(오염 task-2703 branch) 절대 사용 금지. 새 worktree 생성 금지.
- **분류**: AUTO_REMEDIATION (Critical7 0·scope clean·expected_files 내부만). same-PR remediation.

## Gemini 4건 수정 (실제 코멘트 verbatim)

### 1. scripts/finish-task.sh:556 — HIGH (two-dot→three-dot)
`${_HG_MAIN}..HEAD` → `${_HG_MAIN}...HEAD` (merge-base three-dot). 두 점은 main 신규 머지 커밋까지 포함해 무관 파일 diff 혼입. **success/failure/callback behavior 변경 금지** — diff 추출 라인만.

### 2. pr_diff_hygiene_guard.py:97 — MEDIUM (불필요 삼항)
`_normalize` 의 `return p.lstrip("/") if not p.startswith("/") else p.lstrip("/")` → `return p.lstrip("/")` (양쪽 동일).

### 3. pr_diff_hygiene_guard.py:~197 — MEDIUM (YAML flow-style + 중복)
flow-style list `[a, b]` 가 통째로 한 경로로 오인되는 것 방지(대괄호 예외처리) + `token`/`qm` 중복 append 방지. Gemini suggestion 기준.

### 4. pr_diff_hygiene_guard.py:211 — MEDIUM (docstring 정합)
`_read_lines` docstring "쉼표/개행/공백 구분" → 실제 `re.split(r"[,\n]+")` 는 쉼표/개행만. docstring 에서 '공백' 제거.

## A. 기능 검증
- guard tests PASS (기존 17 + 추가 regression)
- 회귀 PASS (task-2712 + harness)
- `bash -n scripts/finish-task.sh` PASS
- expected_files 외 수정 0 / forbidden path 0
- **3 추가 가능**: three-dot diff regression, YAML flow-style list regression. 기존 contamination fixture 유지.

## B. 파일 강제 결선 검증 (필수 — 실행 evidence, grep 금지)
단순 모듈 존재 증명 금지. **실제 실행 로그로** 증명:
1. `pr_diff_hygiene_guard.py` 가 finish-task.sh pre-push 경로에서 **실제 호출**되는지 (실행 trace).
2. **PR contamination fixture 를 실제 finish-task pre-push flow 에 투입** → PASS 아니라 **non-zero 차단** 되는지 (exit code 캡처).
3. **clean fixture 동일 경로 투입 → PASS** 되는지.
4. expected_files allowlist 가 **실제 task md / 실제 입력 경로에서 읽혀** guard 에 전달되는지 (실행 확인).
5. guard 실패가 warning/report-only 가 아니라 **실제 진행 차단(exit 1)** 으로 연결되는지.
→ 각 항목 실행 커맨드 + 출력 + exit code 를 evidence 에 기록.

## C. callback 강제 검증 (필수 — task-2716 callback miss 재발 방지)
1. callback envelope 생성 (task_id = **task-2716+1**, current head, current worktree).
2. callback preregistration PASS.
3. **ANU key(c119085addb0f8b7) schedule_id 생성** (cokacdir --cron 실제 등록, id 회수).
4. schedule prompt 의 task_id = current task_id (task-2716+1 remediation), envelope path = task-2716+1 envelope.
5. **stale task envelope(task-2712.parallel-verification 등) 재사용 0**.
→ **envelope 작성만으로 완료 인정 금지. schedule_id 생성까지 확인해야 completion.**

## push 정책
- dev bot App token 부재 → **push 하지 마라**. wt-2716-clean 에 로컬 commit 까지만. push 는 ANU 가 OWNER PAT FF push.
- same-PR remediation, force/rebase 금지. head advance 시 ANU 가 handoff head_sha 갱신.

## 금지
merge·admin merge·replacement PR 자동전환·task-2713/2714/2715 시작·closeout_marker_watcher.py 추가·task-2703 혼입·CI workflow 수정·memory/events·memory/artifacts·callback envelope·evidence packet PR diff 포함·force push·rebase.

## 완료 시 ANU callback envelope 필수 필드
task_id=task-2716+1 / new_commit_sha / unresolved_remaining / B_execution_evidence_path / C_schedule_id / gemini_4_resolved / expected_files_only=true / ci_workflow_untouched=true / collector_role=ANU / self_key_used=false. 상세 report 1개.
