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

# 맥락 노트: task-2507

**task**: task-2507

---

## 결정 근거

### 결정 1: events 파일 대신 task-timers 후보 필드만 검색
- task 명세 §a~d에 따르면 evidence 후보는 `task-timers.json`의 `merge_commit/pr_merge_commit/mergeCommit/merged_commit_sha`. 현재 timers엔 해당 필드 부재 (`task-2503` keys 확인 결과).
- 향후 finish-task.sh / merge_topology_gate가 timers에 merge_commit을 기록할 가능성을 전제로, verifier는 **다중 키 폴백 검색**으로 대비.
- events 파일(`task-2503.classifications`)은 evidence 출처지만, 모든 task가 events를 갖지 않으므로 1차 evidence는 timers, 2차 evidence는 events.classifications/merge-evidence 파일 폴백을 추가.
- **대안 기각**: events 파일을 1차 source로 두면 events 부재 task에서 false-FAIL 발생 가능 → timers 우선.

### 결정 2: regex escape는 --fixed-strings 우선, --basic-regexp 폴백
- git ≥ 2.4부터 `git log --fixed-strings --grep=<lit>` 지원. 본 시스템 git 버전 확인 후 사용.
- 폴백: `re.escape`로 BRE 메타문자(`+ . * ( ) [ ] \ ^ $`) 모두 escape.
- **대안 기각**: `--perl-regexp`는 빌드 옵션 의존(libpcre 필요) → 환경 의존성 큼.

### 결정 3: fetch 실패는 silent (network 의존 최소화)
- `git fetch origin main --quiet` 5s timeout. 실패 시 stderr 무시 + 기존 ref로 검증 진행.
- 사유: CI/네트워크 단절 환경에서 verifier 자체가 FAIL되면 안 됨. fetch는 best-effort.
- **대안 기각**: fetch 실패 시 FAIL 처리 → 오프라인 환경에서 모든 task FAIL 발생.

### 결정 4: workspace 폴백은 환경변수 + 하드코딩 path 둘 다 지원
- `WORKSPACE_ROOT_FALLBACK` env 우선, 없으면 `/home/jay/workspace` 하드코딩.
- 사유: 테스트 환경에서 다른 workspace를 지정하기 위함 (회귀 테스트의 임시 git repo).

## 3 Step Why 자문

- **1st Why**: 왜 4종 fix가 필요한가?
  → A. task-2503 squash merge author 변경, task-2487+1 regex escape 누락, task-2502 worktree 격리, task-2485+1 fetch 미보장으로 verifier가 false-FAIL 양산. 정책 본질 PASS인데 verifier가 FAIL 판정 → 회장 직접 판정/escalate 부담.

- **2nd Why**: 왜 4종 폴백/escape가 최선인가?
  → B. 4가지 결함 각각이 독립적이고, 폴백/escape는 기존 룰을 약화하지 않음 (TP 룰 5건 그대로 유지). 다른 대안은 task-timers 스키마 강제 변경 / events 1차 source 채택이지만 회귀 영향 큼.

- **3rd Why**: 왜 B가 다른 대안보다 나은가?
  → C. 회장 task 명세가 §44~67에서 "필수 수정 4건"으로 폴백/escape를 명시. 스키마 강제 변경은 forbidden_paths에 abutting (auto_merge.py / dispatch.py 수정 금지). FP 5건은 폴백/escape로 모두 PASS, TP 5건은 룰 미변경으로 그대로 FAIL — 모든 회귀 게이트 통과 가능.

A→B→C 일관성: ✅ FP/TP 회귀 게이트가 결정 트리의 정합성 확인 도구로 작동.

## 참조 자료

- 정책 본체: `memory/feedback/feedback_composite_three_types_260508.md`
- amendment 보호: `memory/feedback/feedback_amendment_not_enforced_260508.md`
- task-2503 evidence: `memory/events/task-2503.classifications` (mergeCommit fc49a9fd, author=JonghyukJeon)
- task-2502 evidence: `memory/events/task-2502.essence-pass-escalated-verifier-limitation` (mergeCommit 46c16bee)
- 현재 verifier: `teams/shared/verifiers/git_evidence.py` (line 177, 214 — `--grep={task_id}`)
- worktree 격리: `task-2488 isolation PoC` (회장 명시)

## 주의사항

- **forbidden_paths 절대 금지**: `scripts/auto_merge.py`, `scripts/finish-task.sh`, `dispatch.py`, `dispatch/**`, `utils/merge_topology_gate.py`, `teams/shared/verifiers/critical_gap.py` 수정 금지
- **forbidden_actions**: `existing_pr_force_push`, `manual_done_creation`, `auto_cherry_pick_implementation` 등
- **composite ③ 페르소나 모드**: dev5-team 본인 페르소나 OFF. 로키(red team) + 마아트(QC) 페르소나로 검토
- **amendment 보호 (회장 §7)**: amendment 발생 시 즉시 적용. mid-dispatch correction disregard 금지
- **자기참조 평가**: 본 task의 verifier fix 적용 후, task-2507 자체 commit으로 PASS 판정되어야 함 (자기 fix 검증)
- **PII 마스킹**: Codex/Gemini 호출 전 `utils.sanitize_gate.sanitize_text()` 통과 필수
- **task-timers 키 후보 폴백 순서**: `merge_commit` → `pr_merge_commit` → `mergeCommit` → `merged_commit_sha`
- **fetch silent failure**: stderr 캡처는 하되 raise 안 함. 검증은 진행
