---
task_id: task-2700+1
type: context
scope: task
created: 2026-05-28
updated: 2026-05-28
status: completed
---

# 맥락 노트: task-2700+1 (fresh re-extract)

## 결정 근거

### 결정 1 — 설계는 불변, base/추출 전략만 교정
- task-2700의 분리 진단/divergence/worktree base 강제 **로직 설계는 유효**(논리 검증 완료).
- 본 task는 **재설계가 아니라 fresh re-extract**: stale base(6220f5b5)에서 만들어진 산출을 origin/main 최신(f3550d9f) 위로 깨끗이 재적용.

### 결정 2 — base SHA = origin/main 실측값 f3550d9f
- `git fetch origin` → `git rev-parse origin/main` = **f3550d9f** (PR #159 merge 반영). task 명세 예상값과 일치.
- 로컬 main f14b3850(ahead 6, behind 69)는 절대 base 금지. worktree는 `git worktree add <wt> f3550d9f`.

### 결정 3 — finish-task.sh 선택 적용 (B-1/B-2만, stash-audit 제외)
- task-2700 worktree의 finish-task.sh delta(+138L)는 4개 hunk: stash-audit(task-2569 stale 오염) ×2 + B-1(dirty 분리진단) + B-2(merge-base 검증).
- task 명세 file #6 범위 = "GIT-GATE own/unrelated dirty 분리진단 + merge-base 검증 확장". stash-audit은 범위 외 + task-2569(금지 stale 목록)의 오염 → **제외**.
- origin/main f3550d9f의 GIT-GATE 구조(REAL_CACHED@622, BLOCKED@624, PASS@640)가 merge-base와 byte-identical → B-1/B-2 anchor 적용 안전. PR#155 NORMAL-CALLBACK-ENFORCE 블록(989-1041)은 삽입점과 멀어 **보존**.

### 결정 4 — worktree_manager.py 3-way merge 양쪽 보존
- origin/main: task-2575 lock_sha 기록(+17L)을 copy_env 직후 + return dict에 추가.
- task-2700: base SHA marker(+217L)를 동일 copy_env 직후 + return dict에 추가.
- 두 변경이 같은 영역에서 겹침 → 3-way merge 충돌 → **lock_sha + base marker 양쪽 모두 보존**, return dict에 양쪽 key 모두 포함.

### 결정 5 — 추출은 결정론적 git 도구로 수행 (byte-exact 보존)
- 본 task는 "이미 검증된 코드의 byte-exact 보존 재적용". LLM 재타이핑은 88L bash 블록 손상 위험.
- 따라서 git plumbing(checkout/merge-file/patch) 결정론적 추출 = 팀장 통합(integration) 범위로 수행.
- 팀원 역할: 벨레스(테스터) = 독립 regression 실행/검증, 마아트 = 독립 QC 검증. 스바로그(백엔드) = worktree_manager 3-way 충돌 해소 검토.

## 3 Step Why 자문 (G1)

- **1st Why** — "왜 fresh re-extract가 필요한가?"
  → **A**: task-2700 산출은 merge-base 6220f5b5(로컬 main 분기) 기반이라 origin/main 대비 479파일 stale diff로 부풀려져 그대로 PR하면 PR#158류 stale-base 사고를 본 task가 예방하려는 안티패턴 그 자체로 재현한다. 순수 7파일만 origin/main 최신 위로 재적용해야 clean PR이 된다.
- **2nd Why** — "왜 7파일 선택 재적용이 최선인가? 대안은?"
  → **B**: 대안① task-2700 branch 그대로 PR = stale 479파일 유입(금지). 대안② 로컬 main을 origin sync 후 재base = 로컬 main reset/dirty 정리 필요(회장 금지 + 881 dirty 손실 위험). 대안③ cherry-pick 141ea946 = stash-audit 등 오염 commit 동반. → origin/main 최신 worktree에 7파일만 deterministic 재적용 = (a) stale 0 (b) 로컬 main 미접촉 (c) 오염 hunk 제외 세 조건 동시 충족이라 최선.
- **3rd Why** — "왜 B(7파일 deterministic 재적용)가 다른 대안보다 나은가?"
  → **C**: deterministic git 추출은 신규 5파일 byte-exact 복사 + 수정 2파일 3-way/선택 patch로 검증 가능한 audit trail을 남기고, regression(hermetic, origin 독립)이 산출 정합을 재증명한다. 로컬 main/PR#158/PR#159/task-2700 branch를 일절 건드리지 않아 회장 금지 항목 0 위반을 보장하며, merge는 회장 결재로 분리해 fail-closed doctrine을 유지한다.
- **A-B-C 일관성**: A(clean PR 필요) → B(stale0·로컬불변·오염제외 필요) → C(deterministic·재증명·금지0·결재분리) — 논리 일관 ✔. 설계 확정.

## 참조 자료
- task-2700 evidence worktree: `/home/jay/workspace/.worktrees/task-2700-dev6` (HEAD 141ea946, merge-base 6220f5b5)
- task-2700 3문서: `memory/plans/tasks/task-2700/{plan,context-notes,checklist}.md`
- 박제: `memory/events/pr159-release-watcher-plus-task2700-stale-base-260527.json`
- origin/main 최신: f3550d9f (`[task-2699+1] ... (#159)`), 직전 a2a20f94 (`NORMAL_CALLBACK_REGISTRATION_ENFORCEMENT (#155)`)

## G2 검증 결과 (2026-05-28)

- **Codex 사전검증**: pass:true, critical:false. High 1건은 "코드 미제공(설계만 검토)" → 사후 실코드 검증(마아트+Gemini+regression)으로 해소. 2nd-Why 대안 질문 포함됨.
- **regression**: 14 passed (8 시나리오 + task-2699 fixture + bonus).
- **L1 스모크(실동작)**: divergence_guard CLI 실 워크스페이스(ahead6/behind69) → DIVERGENCE_HOLD exit 3 / --fail-open 거부 exit 2 / verify-base CLI ok exit 0 / pre_dispatch hook fail-closed HOLD + dirty registry snapshot 기록.
- **마아트 독립검증**: MAAT_VERDICT PASS (7항목 전부 PASS, High/Medium/Low 0). 5신규 byte-exact(141ea946 sha256 일치), PR#155 NORMAL-CALLBACK 7=7 삭제0, stash-audit origin 2=2 미추가 확인.
- **Gemini PR #160 리뷰**: 6건 전부 Medium, High 0 → PASS. Medium은 byte-exact 재적용 범위 밖 hardening 제안 → DEFER(후속 task-2700+2 권고), 코드 미수정(re-extract 무결성/마아트 byte-exact 검증 보존). PR에 처분 코멘트 박제.
- **PR #160**: base main, head d1e18fcb, MERGEABLE(충돌0 — fresh base가 stale-base CONFLICTING 해소), changedFiles 7. merge-base==f3550d9f.

## 결정 6 — Medium 6건 DEFER (코드 미수정)
fresh re-extract = task-2700 proven 산출 byte-exact 재적용. Gemini Medium 반영 시 (a)신규파일 sha256 불일치로 마아트 byte-exact 검증 위반 (b)proven 산출에 미검증 변경 유입(재설계). High 0이므로 G2 PASS 비차단. 후속 hardening 과제로 이관이 doctrine 정합.

## 주의사항
- ★ finish-task.sh additive only, 기존 PASS 동작 변경 금지. PR#155 enforce 블록 보존.
- ★ dispatch.py / dispatch/__init__.py 미접촉.
- ★ own dirty FAIL 완화 금지. bypass flag 금지(fail-closed 불변).
- ★ 외부 AI(Codex/Gemini) 호출 전 sanitize 게이트.
- ★ merge는 회장 결재(no_merge_chair_approval_required). 본 task 완료 = TASK_2700_FRESH_REEXTRACT_READY.
