---
task_id: task-2698
type: context
scope: task
created: 2026-05-27
updated: 2026-05-27
status: completed
---

# 맥락 노트: task-2698

**task**: task-2698

---

## 결정 근거

### 결정 1: fresh worktree + `git checkout 1d02bfd6 -- <10 코드파일>` 방식
- PR #156(1d02bfd6)이 origin/main(a2a20f94)의 **직계 후손**임을 merge-base 로 확인 → 코드 10파일만 checkout 해도 PR #155 enforce 코드가 자동 보존됨(1d02bfd6 helper.py/finish-task.sh 가 이미 #155 코드 포함).
- artifact 6파일(memory/plans/reports/anu_callback)은 checkout 대상에서 제외 → artifact 0 달성.
- 대안: PR #156 branch rebase/cherry-pick → 기각(artifact 오염이 history 에 남고, 회장 verbatim 이 "fresh worktree 재추출, 재사용 0" 명시).

### 결정 2: 표준 import 동작을 위한 디렉토리 전용 conftest 추가 (10→11 파일)
- M2/M3/M4 가 요구한 표준 import 는, 멀티-worktree 환경에서 상위 `tests/conftest.py` 가 live workspace(`/home/jay/workspace`, origin/main 보다 뒤처져 신규 모듈 부재)를 sys.path 주입 → `ModuleNotFoundError` 유발.
- 해결: `tests/regression/callback_session_propagation/conftest.py` 로 worktree root pin + live 캐시 교체 + dispatch 패키지 pin. 허용 glob `callback_session_propagation/**` 내, artifact 아닌 runtime 테스트 코드.
- 대안 A(테스트 3파일에 eviction 중복) 기각: 중복·Gemini 복잡도 재지적 위험. 대안 B(WORKSPACE_ROOT env) 기각: pytest 패키지 import 단계 미해결.
- 근거 패턴: 기존 `tests/regression/conftest.py` 가 utils 에 동일한 live-cache 교체를 이미 적용(Gemini 승인 이력) → dispatch 트리로 확장.

### 결정 3: Gemini medium 2건 미수정 (post-review push 0)
- PR #157 Gemini: conftest 하드코딩 경로(medium) + test_envelope_schema_fields 이름/동작 불일치(medium, pre-existing). 둘 다 비차단(HIGH 0).
- 회장 verbatim "same-PR post-review push 0" → 리뷰 도착 후 수정 push 금지. 필요 시 Option A replacement.
- conftest 하드코딩 평가: Gemini 제안(`_ROOT not in _file` 만)은 stdlib/site-packages 까지 evict → 더 위험. 현재 `/home/jay/workspace/` 한정이 오히려 안전 + CI no-op.

## 3 Step Why 자문 (Lv.3)
- **1st Why (왜 이 설계가 필요?)** → A: PR #156 이 artifact 오염으로 동결됐고, callback/session propagation 코드는 살아있어야 하므로 코드만 분리한 clean PR 이 필요.
- **2nd Why (왜 A 가 최선? 대안은?)** → B: 대안은 PR#156 정리(rebase)·새 코드 재작성. fresh worktree 재추출은 검증된 코드(이미 regression PASS)를 그대로 살리면서 artifact 만 제거하므로 회귀 위험 최소·verbatim 부합. Codex 사전 리뷰 질문("이 설계의 대안과 최선 근거")에도 동일 답변.
- **3rd Why (왜 B 가 다른 대안보다 나은가?)** → C: rebase 는 오염 history 잔존+충돌 위험, 재작성은 회귀 위험+토큰 낭비. 재추출은 origin/main 직계 후손이라 PR#155 자동 보존 + diff 결정적(10파일)이라 검증 가능.
- A-B-C 논리 일관성: ✓ (필요성→재추출 우월성→대안 열위 일관).

## 참조 자료
- task 지시서: `memory/tasks/task-2698.md`
- 원본 PR #156: `task/task-2696-dev7` (head 1d02bfd6), PR #155: merged `task/task-2694+1-dev7` (a2a20f94 포함)
- capability snapshot: `memory/capabilities/task-2698.json` (source_sha256 53e1fa54…, 일치 확인)
- 새 PR: #157 (https://github.com/Jeon-Jonghyuk/dev_workspace/pull/157)

## 주의사항
- ★ MERGE 금지: `no_merge_no_auto_chair_approval_required` — 회장 결재 전 머지 절대 금지.
- ★ post-review push 0: PR #157 head(3a937f62) 고정 유지. 추가 commit/amend/push 금지.
- ★ PR #155 enforce(EnforceResult/assert_/NORMAL-CALLBACK-ENFORCE) 절대 보존.
- 하드코딩된 ANU_KEY 테스트 상수는 원본 PR#156 코드 그대로 재추출(본 task 신규 도입 아님) — 변경은 4-medium scope 밖.
