# Backlog Item 4 — local main Divergent Cleanup Packet (★ spec only · 실 처리 0)

- task: task-2666 (Track D-1)
- chair_authorization_id: `CHAIR-AUTH-BACKLOG-SEPARATION-PACKET-20260525-JJONGS-TRIAGE-001`
- scope: divergent 원인 분석 + 정리 옵션 + 다른 task 작업 손실 위험 평가 (★ 실 reset/pull 0)
- ttl_hours: 48

## 1. Current State (★ git status + rev-list 직접 확인)

- main repo path: `/home/jay/workspace`
- HEAD: `5a29d3eebc0eb5029834da930db655d2a801ba32`
- origin/main: `2752182ad679024dcbcdbf090165387fb822be67` (★ PR #148 merge commit)
- `git rev-list --left-right --count HEAD...origin/main`: **5 ahead · 66 behind**
- working tree state: **DIRTY** (★ `git status --short` 다수)

## 2. 5 Ahead Commits 박제 (★ task-2642/2660과 무관 — 별도 chain)

```
1. 5a29d3ee [task-2569+1] dispatch.py UnboundLocalError hotfix (4 local import 제거)
2. 6b082dab Merge task-2569: finish-task/workspace isolation/task md 보존 시스템 fix
3. f0e90e09 [task-2569] finish-task / workspace isolation / task md 보존 시스템 fix
4. 3000e601 [task-2568] 헤르메스: Phase A/B/C 머지 완료 보고 (PR #117 161466c6 + PR #118 92320afa)
5. 8e18e354 [task-2568] 헤르메스: Phase A BLOCKED (MERGE_BLOCKED_BY_UNRESOLVED_GEMINI_THREADS)
```

★ **중요 박제**: task md item 1 표현 "task-2642 d4098b04 (★ CI_WATCH_HANDOFF_RUNNER · local main 잔류 unmerged commit)"는 5 ahead 5건과 **무관**. d4098b04는 별도 branch chain (`task/task-2642-runner` + 후속 task branches)에만 잔류 · local main HEAD reachable chain에는 미포함. ★ 5 ahead 정체는 **task-2568/2569 hermes/dispatch hotfix** 계열.

## 3. 66 Behind Commits 샘플 (★ 최신 10건)

```
2752182a task-2661 Phase 2b — callback normal fire delay → absolute timestamp (PR #148 squash)
0e172435 Merge pull request #144 from Jeon-Jonghyuk/task/task-2641-anu-restack
bd286a61 task-2641: Gemini HIGH auto-remediation
0c0162e2 task-2641: OWNER_GEMINI_TRIGGER_ROUTER (ANU 재적층)
033dcf8a Merge pull request #143 from Jeon-Jonghyuk/task/task-2640-anu-restack
595f54fe task-2640: Gemini medium auto-remediation 2/3
18cee5b4 task-2640: Gemini medium auto-remediation
2e055b21 [task-2640] SELF_COLLECTOR enforcement wiring batch
93598660 Merge pull request #142 from Jeon-Jonghyuk/task/task-2639-anu-restack
6f70c4aa [task-2639] real_merge_hooks chair_authorization snapshot 교차검증 정책 수정
```

★ 66 behind에는 task-2639 ~ task-2661 chain 다수 + merge commits 포함.

## 4. Working Tree DIRTY 상태 박제 (★ `git status --short` sample)

```
M config/constants.json
M dashboard/data/naver-sa-stats.json
M memory/bot_settings_sync.json
M memory/canary-status.json
M memory/events/bot-activity.json
M memory/events/member-status.json
D memory/events/task-2309.done.acked       ... (★ task-2309~2320+ 대량 .acked/.notified/.escalated 삭제 상태 stage 미반영)
```

- runtime state file 5건 수정 (★ 봇 자동 재생성 가능 — 그러나 누적 데이터 일부 손실 잠재)
- `.acked` / `.notified` / `.escalated` 대량 삭제 (★ 의도적 정리 / 사고 양립 — 별도 분석 필요)

## 5. Divergent 원인 분석

1. **5 ahead 원인**: task-2568/2569 local commit 후 push 미수행 (★ task-2568은 PR #117/#118 merge 완료 보고 commit이므로 push 의도가 있었을 것 · 다만 origin 미반영). task-2569 finish-task hotfix도 동일 패턴.
2. **66 behind 원인**: local main 측에서 `git pull --rebase origin/main` 미실행 · origin/main이 task-2639~2661 chain 진행하는 동안 local main이 fork된 채로 유지.
3. **working tree dirty 원인**: runtime state file (★ 봇 활동 누적) + .acked/.notified 대량 삭제 (★ task-2309~2320+ 마커 정리 시도) 누적.

## 6. 정리 옵션 (★ 본 packet 범위 외 · 회장 결정 위임)

### 옵션 A — git pull --rebase origin/main
- 장점: 5 local commits 보존
- 위험: 66 commits 동안 `dispatch.py` / `scripts/finish-task.sh` / `utils/*` 등 동일 path 변경 누적 → **충돌 잠재 HIGH** (★ task-2569 finish-task 변경이 그 사이 PR들의 finish-task 변경과 line-level 충돌 가능)
- 사전 작업 강제: working tree dirty 다수 → `git stash` 또는 `git add -A && git commit -m "WIP"` 필수
- 권장도: **낮음** (★ 충돌 해소 비용 + working tree dirty 복잡도)

### 옵션 B — git reset --hard origin/main
- 장점: 즉시 정리 · 1 step
- 위험: **task-2568/2569 5 commits 영구 손실** (★ task-2568 PR #117/118 merge 보고 + task-2569 finish-task hotfix 산출물). PR 매핑이 일부 중복일 가능성 있으나 정확한 매핑 없이 reset 시 **회수 불가** (★ reflog만으로 30일 임시 보존 후 git GC)
- 추가 위험: working tree dirty도 전부 손실 — runtime state 파일(★ 자동 재생성) + .acked/.notified 삭제 stage(★ 의도적 정리면 다시 삭제 필요)
- 권장도: **부적합** (★ 손실 위험 HIGH)

### 옵션 C — 별도 branch 보존 후 reset --hard origin/main **(★ 권장)**
절차:
1. `git -C /home/jay/workspace branch backup/local-main-5-ahead-260525 HEAD` — 5 ahead chain 보존 branch 박제
2. `git -C /home/jay/workspace stash push -u -m "task-2666-pre-reset-working-tree-260525"` — dirty working tree 보존
3. `git -C /home/jay/workspace fetch origin && git -C /home/jay/workspace reset --hard origin/main` — main을 origin/main에 정렬
4. ★ post-reset: backup branch의 5 commits를 cherry-pick 또는 PR로 분리 평가 (★ task-2568 commits는 이미 PR #117/#118 merge 완료 보고이므로 origin/main에 이미 반영된 hash 가능 — 중복 cherry-pick 회피 필요)
5. ★ working tree stash 평가: runtime state 파일은 봇 재생성 위임 / .acked 삭제는 별도 정리 task
- 장점: 손실 0 + 정리 즉시
- 위험: backup branch GC 보장 위해 tag 또는 push 권장 (★ `git push origin backup/local-main-5-ahead-260525`)
- 권장도: **HIGH**

### 옵션 D — 무기한 보존
- 장점: 안전 최대화
- 위험: divergent 지속 → 후속 local commit이 동일 fork 위에 누적 → 부담 증가
- 권장도: **낮음** (★ 본 task 회장 verbatim "정리 필요" 시사 — 다만 명시 결정 부재)

### 권장 우선순위
**옵션 C > 옵션 A > 옵션 D > 옵션 B**

## 7. 다른 Task 작업 손실 위험 평가

| 항목 | 위험 분류 | 영향 |
| --- | --- | --- |
| task-2568 5 commits | LOW (옵션 C) / HIGH (옵션 B) | PR #117/#118 merge 보고 — origin/main에 일부 반영 가능성. backup branch로 보존 시 0 |
| task-2569 finish-task hotfix | MEDIUM (옵션 A 충돌) / HIGH (옵션 B 손실) | finish-task.sh 변경이 그 사이 PR의 동일 파일 변경과 충돌 가능. 본 hotfix가 origin/main에 미반영이면 별도 PR 필요 |
| working tree runtime state | LOW | bot-activity.json / member-status.json / canary-status.json / bot_settings_sync.json — 봇 자동 재생성 |
| working tree .acked/.notified 삭제 | MEDIUM | 의도적 정리면 reset 시 재정리 필요 / 사고면 손실. 별도 task로 분류 권장 |
| task-2642 d4098b04 | **0** | 본 chain에 미포함 (★ Item 1 packet 참조) — 5/66 정리와 무관 |
| task-2660 c6425611 | **0** | 본 chain에 미포함 — worktree task-2660-dev1 branch에만 존재 |

## 8. Recommended Action Sequence (★ 본 task 범위 외 · 회장 결정 위임)

1. 회장 verbatim 옵션 C 채택 결정 수신
2. backup branch + tag 박제 (★ `backup/local-main-5-ahead-260525` + `push origin`)
3. dirty working tree stash
4. `git fetch origin && git reset --hard origin/main`
5. backup branch의 5 commits를 PR 매핑 분석 (★ task-2568은 이미 PR #117/118 origin 반영 가능성 우선 점검)
6. task-2569 finish-task hotfix는 별도 PR 분리 (★ task-2642 packet item 1과 유사 절차)
7. working tree .acked/.notified 대량 삭제 정리는 별도 task

## 9. forbidden_action_count

**0**. 실 reset / pull / stash / branch 박제 — 전 0. 본 packet 작성만.

## 10. ANCHOR 6 점검

ANCHOR-1~6 모두 ✅ — local main reset 0 (★ task md 금지 7 #6) 준수.
