# FILE_TOUCH_RATIO_CHECK_CODE_ROOT_RECOGNITION — audit-first 설계 (DISPATCH_READY 판정용)

생성: 2026-06-08 / 발번 예정 task-2729+20 (회장 확인 요망) / 단일 소스 / base origin/main 571a4ce3

## 근본 원인 (audit 확정)
1. `teams/{shared|<team>}/qc_verify.py` 디스패처가 `file_touch_ratio_check.verify(task_id)` 를 **workspace_root 미전달**로 호출(L563) → param 기본값 `"/home/jay/workspace"`(canonical) 사용.
2. `file_touch_ratio_check.verify(task_id, workspace_root="/home/jay/workspace")` 는 `PROJECT_PATH`/`WORKTREE_PATH`/`QC_EVIDENCE_ROOT` env 를 **읽지 않음**. report_path 와 `git -C workspace_root diff HEAD~5` 둘 다 canonical 기준.
3. finish-task.sh(#190 L644)가 `PROJECT_PATH=$QC_EVIDENCE_ROOT WORKTREE_PATH=$QC_EVIDENCE_ROOT` 로 qc_verify 를 호출해도, 위 1·2 때문에 worktree 가 아닌 **canonical(task-2716 무관 커밋) diff** 로 대조 → ratio 0.00 false-negative → **SKIP**(PASS 아님).
4. 대조군: `git_evidence.verify`(#190)는 `_resolve_project_dir_with_source`(L119)로 `PROJECT_PATH`/`WORKTREE_PATH` env 인식 + `.git` 검증. **file_touch_ratio_check 에는 이 env 인식이 없음** = 단일 격차.
5. 카피 분포: shared 1 + per-team 9 = **10 파일 전부 sha 동일(cf8f2cf3f91d, drift 0)**. git_evidence 와 동일 10-카피 구조.

## 수정 설계 (audit-first, 2 locus — B 권장)
### Locus B (verifier 내부 env 인식 — 권장, git_evidence 선례 일관성)
- `file_touch_ratio_check.verify` 진입 시 root 해석: `PROJECT_PATH` → `WORKTREE_PATH` → `QC_EVIDENCE_ROOT` env 순으로, 값이 있고 해당 경로가 유효 git dir 이면 그 root 사용. 없으면 기존 `workspace_root` param/기본값 fallback.
- report_path 와 `git -C <root> diff` **둘 다** 해석된 root 사용(worktree 의 report + worktree 의 diff).
- git_evidence 의 `_resolve_project_dir_with_source` 패턴 미러링(일관성·하위호환). 명시적 workspace_root override 시 그 값 우선.
- 적용 대상: shared + 9 per-team = **10 카피 동일 수정**(parity 유지, drift 0 보존).
### Locus A (대안, 비권장 단독): qc_verify L563 에서 env-resolved root 를 verify 에 forward. 역시 10 카피(qc_verify per-team). B 가 caller 무관 robust 라 권장.

## ★ expected_files 현실 (회장 결정 요망)
- 10-카피 구조상 surgical 수정도 **verifier 10 파일 + regression 1 + report 1 (+ design 1) ≈ 12 파일** → 통상 ≤4 초과.
- 이는 git_evidence(#190)와 동일한 기존 멀티카피 구조의 산물. **10개 동일 편집 = 1 논리 변경**으로 취급 권장.
- 대안(별도·큰 범위): verifier 디듀프 리팩터(shared 단일화) — 본 task 범위 밖, 별도 결정.
- 회장 결정 사항: (a) 10-카피 일괄 수정 허용(expected_files ~12, 1 논리단위) vs (b) shared 만 수정(per-team drift 발생 — 비권장) vs (c) 디듀프 별도 task.

## 검증 (isolated, FAIL 오발 방지 주의)
1. worktree root(PROJECT_PATH/WORKTREE_PATH/QC_EVIDENCE_ROOT) 설정 시 → 해당 worktree diff 기준 ratio 정상 계산(canonical 0.00 false-negative 해소).
2. env 미설정 시 → 기존 동작(workspace_root param/기본값) backward-compat.
3. 정상 worktree 에서 report 파일목록 ↔ worktree diff 일치 → PASS(오발 FAIL 0).
4. report 없음/diff 없음 등 기존 SKIP 조건 유지.
5. 10 카피 parity(동일 sha) 유지. bash/py import 무손상.
6. raw key 0 / ACTIVE=false / systemd 0 / epoch absent / real spawn 0 / canonical task-2716 무손상.

## 금지 (회장 verbatim 유지)
production ACTIVE / systemctl enable / ACTIVE=true / activation_epoch / real ANU spawn / canonical reset·clean·stash -u·checkout -f / task-2716 수정 / live artifacts 이동·삭제 / callback prereg Phase B 착수 / production activation 자동 진행.
- ★ 단 본 task 는 **production code(verifier 10 카피) 수정 필요** → 회장 DISPATCH 승인 후에만 착수.

## 판정 흐름
- 본 라운드 = audit-first 설계 → **DISPATCH_READY 보고**(회장 우선 확인, expected_files 10-카피 결정 포함). dispatch 는 회장 확인 후.
- terminal: DISPATCH 후 PR_READY_CANDIDATE 또는 HOLD_FOR_CHAIR.

## doctrine
직접 코딩 금지(ANU)/봇 위임 / fresh origin/main 571a4ce3 / git_evidence env-인식 선례 미러링 / backward-compat 필수(env 미설정 시 기존 동작) / FAIL 오발 방지 / 10-카피 parity / activation 0 / raw key 0.
