# PR #247 post-merge — local sync preflight (read-only, 착수 보류) 2026-06-23

**상태명**: `PR247_LOCAL_SYNC_PREFLIGHT_READONLY_PLAN_ONLY_NO_SYNC_ACTIVE_FALSE`
**성격**: read-only 진단 + sync plan only. **변경/pull/reset/merge/checkout/clean 0** (fetch read-only만 1회 = remote-tracking 갱신, working tree/local HEAD 무변경).

## 1. 현 상태 (read-only)
- canonical local HEAD = **38ee05556c1f** (branch main) — merge 후에도 **불변**(강제 sync 안 함).
- origin/main = **5c21fddaad22** (PR #247 squash merge).
- 차이 = 38ee0555 → 5c21fddaad22 = **정확히 expected_files 8개** (`git diff --name-status`): M dispatch/__init__.py · A dispatch/gate_shadow_runner.py · M scripts/finish-task.sh · A teams/content/qc/qc_verify.py · A test_content_qc_2769 · A test_gate_shadow_finish_task_2766 · A test_gate_shadow_runner_2765 · A test_goal_contract_strict_template_2767. **clean squash, 약속과 일치, scope 밖 0**.

## 2. local dirty 규모 = 251 항목
- **untracked(??) 163**: 8 expected_files 중 새파일 6 + 기타 **155**(대부분 `memory/*` = 세션 산출물 reports/handoffs/tasks) + tests 4 + output 2 + teams 1 + dispatch 1.
- **deleted(D) 79**: `memory/events` 44 + `memory/backups/system-spec/*` 약 35. local HEAD 38ee0555 추적 파일이 working tree 에서 사라진 상태.
- **modified(M) 9**: expected_files 2(dispatch/__init__.py·finish-task.sh) + 기타 **7**(config/constants.json·anu-system-spec(.md/changelog)·automation_capability_matrix.json·gemini_rate_tracker.json·test_replacement_pr_runner_2510.py·utils/replacement_pr_runner.py).

## 3. ★ expected_files 8개 byte 동일성 (sync 무손실 핵심 근거)
local working tree ↔ origin/main(5c21fddaad22) blob sha256 = **8/8 전부 동일**:
- dispatch/__init__.py e9f02b18 · gate_shadow_runner.py 20e05e3c · finish-task.sh 484274f7 · content qc b786d91c · test_content_qc 17b8e83e · test_gate_shadow_finish_task 969925eb · test_gate_shadow_runner dfdf2987 · test_goal_contract 34cdb252.
→ local 의 8파일 dirty = origin 이 가져간 것과 **byte-exact**. sync 시 이 8개는 무손실로 정렬 가능.

## 4. 충돌 가능성 (expected_files 8개 ↔ local dirty)
- 단순 `git merge origin/main` / `git pull`: origin 이 A(추가)하는 **untracked 6개**와 working tree untracked 겹침 → git "untracked working tree files would be overwritten by merge" **거부 위험**. 단 byte 동일이라 **실질 무손실**(덮어써도 동일).
- M(수정) 2개(dispatch/__init__.py·finish-task.sh): local M ↔ origin M, **byte 동일 → 무충돌**.
- **8파일 외 243 dirty(79 D + 7 M + 155 ??)는 origin/main 이 안 건드림** → sync 와 **독립**(merge 가 손대지 않음). local 고유 상태로 보존 대상.

## 5. sync plan 후보 (착수 보류 — 회장 판단 영역)
- **옵션 A (권장)**: 8 expected_files 가 byte 동일임을 근거로 그 8개만 origin 에 양보(untracked 6 제거 + modified 2 checkout origin) → `git merge --ff-only origin/main`. 나머지 243 dirty 전부 보존. 무손실 FF.
- **옵션 B**: 전체 stash → FF merge → stash pop. 79 deleted + 155 untracked stash 복잡·충돌 위험 → 비권장.
- **옵션 C**: 보류 — 243 dirty(특히 79 deleted) 성격 규명 후 sync.

## 6. 선결 조건 (sync 착수 전 규명 필요)
1. **79 deleted 원인**: memory/events 44 + backups 35 가 의도적 정리인지 사고/worktree 부작용인지 — local 무결성 차원(origin/main 과 무관하나 canonical 상태 점검).
2. **7 기타 modified 보존 여부**: automation_capability_matrix.json(=matrix delta 별도축), anu-system-spec, replacement_pr_runner 등 — 보존/되돌림 판단.
3. **155 untracked memory/* 정리 정책**: 세션 산출물 커밋/보존/정리.

## 7. 판단
- **sync 가능성**: 기술적으로 가능(8파일 byte 동일·origin clean squash·FF 경로 존재). 단 **착수 가능 여부 = 보류**(회장 명시).
- **충돌 위험**: 8파일은 무손실(byte 동일). 243 dirty 는 sync 무관하나 canonical 무결성(특히 79 deleted) 별도 규명 필요.
- **금지 준수**: 변경/pull/reset/merge/checkout/clean 0 · 수동 .done 0 · canonical HEAD 38ee0555 불변.
- 다음(별도 승인): local sync 착수 여부 + 79 deleted 규명 + matrix/Activation 은 여전히 별도축. ACTIVE=false · P0-B FROZEN.
