# Callback Envelope Location Metadata Enhancement Spec (260530)

> 상태: **READ-ONLY 설계 — 코드 구현/스키마 변경 회장 별도 승인 대기**
> 발단: task-2712+1 `VERIFICATION_COMPLETE_BUT_FINISH_BLOCKED_BY_WORKTREE_CONTEXT_MISMATCH`
> 단일 사고 박제: `memory/events/task-2712+1.worktree-context-mismatch-infra-caveat-260530.json`

## 1. 문제 (Why)

task-2712+1 verifier는 `/home/jay/.cokacdir/workspace/AA8CB448/wt-2712-dev4 @ 58a15618`을 대상으로 검증했으나, `finish-task.sh`는 오염된 `/home/jay/workspace`(branch `task/task-2703-v36-harness-dev1`)에서 실행됐다. 결과:

- **scope-guard false-positive**: `main..HEAD`가 task-2703 브랜치라 무관 파일 74개 검출
- **goal-gate 산출물 부재**: dev4 worktree에만 있는 `tests/test_failure_callback_before_exit_guard_2712.py` 미발견
- **Item 9 evidence 회수 불가**: sandbox `/tmp/...3287018`이 ephemeral로 소멸 → ANU가 마커 sha256 독립 재검증 불가

기존 callback envelope에는 **"어느 worktree/cwd/HEAD에서 검증·finish가 일어났는가"** 메타데이터가 없어, collector가 envelope만으로 context mismatch를 탐지할 수 없었다.

## 2. 추가 필드 (11)

기존 envelope 스키마에 다음 11필드를 추가한다 (현 필드는 유지, additive only):

| 필드 | 의미 | 예시 |
|---|---|---|
| `execution_cwd` | 작업(검증) 실제 실행 디렉토리 | `/home/jay/.cokacdir/workspace/AA8CB448/wt-2712-dev4` |
| `target_worktree` | 검증/구현 대상 worktree 절대경로 | `/home/jay/.cokacdir/workspace/AA8CB448/wt-2712-dev4` |
| `artifact_root` | 산출물(마커/리포트) 영속 루트 — ephemeral temp 금지 | `/home/jay/workspace/memory/events` |
| `git_branch` | 대상 worktree 브랜치 | `task/task-2712-dev4` |
| `git_head` | 대상 worktree HEAD full sha | `58a1561847f917997ddec1b0b97b4ffaf337a645` |
| `report_path` | 리포트 경로 | `memory/reports/task-2712+1.md` |
| `decision_path` | decision.json 경로 | `memory/events/task-2712+1.decision.json` |
| `verification_commands` | 실행한 검증 커맨드 배열 | `["pytest tests/...", "finish-task.sh ... (sandbox)"]` |
| `finish_task_cwd` | finish-task.sh 실제 실행 cwd | `/home/jay/workspace` |
| `goal_assertion_cwd` | goal-gate 평가 기준 cwd | `/home/jay/workspace` |
| `worktree_role` | worktree 역할 enum | `VERIFICATION_TARGET` / `FINISH_HOST` / `CANONICAL_ROOT` |

## 3. Collector 활용 (How)

future callback collector는 위 필드가 있으면:

1. `target_worktree`에서 직접 산출물·HEAD를 확인한다 (canonical_root 추정 불필요).
2. **`finish_task_cwd` != `target_worktree` (또는 `git_head` != target worktree HEAD)** 이면 즉시 `WORKTREE_CONTEXT_MISMATCH` 분류 → finish 결과(scope/goal gate)를 task 성패 판정에서 분리.
3. `artifact_root`가 ephemeral temp(`/tmp/...`)면 `EVIDENCE_NOT_DURABLE` 경고 → 마커를 영속 경로로 회수 요구.

## 4. 가드 (fail-closed)

- mismatch 탐지 시 collector는 `goal_assertion`/`scope_guard` 실패를 **task 실패로 승격 금지** (infra caveat로 분리 기록).
- 11필드 미존재 envelope는 legacy로 허용하되 `location_metadata_present=false` 플래그.

## 5. 범위 한정

- 본 spec은 **설계 요구사항 기록**이다. 스키마 코드 변경·finish-task.sh/dispatch 결선은 **회장 별도 승인 대기**.
- task-2712 산출물 수정 0, PR/push/merge 0.
