---
task_id: task-2507
type: plan
scope: task
created: 2026-05-08
updated: 2026-05-08
status: completed
---

# 계획서: task-2507

**task**: task-2507
**목표**: `git_evidence.py` verifier의 4종 false-positive 결함(worktree 격리 / squash merge author / regex escape / fetch 미보장) 수정 + 회귀 테스트 10건(5 FP + 5 TP) 추가
**승인**: 회장 2026-05-08T12:30 "3안 채택, 분리 진행 승인"
**근거**: `memory/feedback/feedback_composite_three_types_260508.md`, `memory/events/task-2503.classifications`, `memory/events/task-2502.essence-pass-escalated-verifier-limitation`

---

## 목표

`teams/shared/verifiers/git_evidence.py`가 task ID 커밋을 못 찾아 FAIL 판정하는 4가지 false-positive 결함을 제거. 5건 FP 회귀 테스트는 PASS, 5건 TP 회귀 테스트는 FAIL/SKIP 룰을 그대로 유지.

## 범위

### 포함
1. **a. proj_dir 폴백 강화** — worktree에서 task ID 커밋 미발견 시 main workspace(`/home/jay/workspace`)에서 재검색
2. **b. task-timers mergeCommit evidence** — `merge_commit` / `pr_merge_commit` / `mergeCommit` / `merged_commit_sha` 후보 필드 폴백 검색. 단독 evidence로 PASS 인정
3. **c. regex escape** — `--grep={task_id}` → `--fixed-strings` 우선, 폴백 시 `re.escape`
4. **d. fetch 보장** — `git fetch origin main --quiet` (5s timeout, silent on failure)
5. 회귀 테스트 10건 — `tests/regression/test_git_evidence_worktree_2507.py`
6. 자기참조: 본 task의 commit이 fix 후 verifier에 의해 PASS 판정

### 제외 (다음 페이즈 이후)
- task-2506 (critical_gap.py fix) — 별도 task 영역
- task-2503+1 (Merge Topology Gate fix) — 별도 task 영역
- dispatch.py / merge_topology_gate.py 수정 (forbidden_paths)
- task-timers.json 스키마 자체에 mergeCommit 필드 강제 추가 (verifier는 후보 필드 다중 검색만)

## 위임 계획

- **Phase 1 [백엔드 — 엔키]**: git_evidence.py 4 fix 구현 + 헬퍼 4종 신설
  - `_search_commit_in_workspaces`, `_get_merge_commit_from_timers`, `_safe_grep_pattern`, `_ensure_origin_main_fetched`
- **Phase 2 [테스터 — 닌기르수]**: 회귀 테스트 10건 작성 (5 FP + 5 TP)
- **Phase 3 [QA 통합 — 마르두크]**: 셀프 QC 8항목 + L1 스모크테스트(verifier 자기참조)

## 검증 기준

- **a 폴백**: worktree에서 commit 0건 + main에서 발견 → PASS (test_proj_dir_fallback)
- **b mergeCommit**: timers에 merge_commit만 있어도 PASS (test_merge_commit_evidence)
- **c escape**: `task-2487+1` ID에 대해 regex 매칭 성공 (test_regex_escape_plus)
- **d fetch**: fetch 호출 시도 + 실패 silent (test_fetch_silent_failure)
- **자기참조**: task-2507 commit이 verifier로 PASS 판정 (`python3 -c "from teams.shared.verifiers.git_evidence import verify; print(verify('task-2507'))"`)
- **회귀**: pytest 10/10 PASS, 기존 git_evidence 단위 테스트 0건 회귀
