# task-2701+1 — PHASE B: LOCAL_MAIN preserve-then-align 실행 (회장 verbatim 2026-05-28 · 기반 정리 종료선)

- Level: Lv.3 (인프라 · ★ 실제 mutating: reset --hard · 고위험 · preserve 선행 강제)
- 담당: **dev2-team Odin 오딘** (★ 회장 verbatim 지정 · Phase A 수행 동일 컨텍스트 · bot key fedf78d1d09509f5)
- chair_authorization_id: **`CHAIR-AUTH-TASK-2701-PHASE-B-PRESERVE-THEN-ALIGN-LOCAL-MAIN-20260528-JJONGS-EXECUTE-001`** (★ 회장 verbatim 발급 확정)
- 완료 목표: **`LOCAL_MAIN_DIVERGENCE_CLEANUP_EXECUTION_COMPLETE`**

## ★ 판정 (★ 회장 verbatim · Phase A 확정)

- `utils/replacement_pr_runner.py` 718줄 삭제 = **working-tree 0바이트 truncate 사고** (의도 폐기 아님). HEAD/origin 정본 718줄 존재
- `tests/regression/test_replacement_pr_runner_2510.py` 493줄 삭제 = **동일 truncate 사고**. HEAD/origin 정본 493줄 (blob 1fa8b2d2 동일)
- ahead 6 commit 전부 origin remote refs reachable → 손실 위험 0
- ★ **reset 단독 실행 금지** — preserve-then-align 절차 선행

## ★ 실행 순서 (★ 회장 verbatim 13 — 순서 엄수)

1. 최신 origin/main SHA 확인 (`git fetch origin` · 기준 35e81f01 또는 최신)
2. local main 현재 HEAD / ahead·behind / dirty 총량 재측정
3. ahead 6 commit 이 remote refs 에서 reachable 재확인 (`git for-each-ref --contains <sha> refs/remotes/origin`)
4. **보존 branch 생성** (예: `task-2701-local-main-preserve` @ 현재 local HEAD)
5. dirty/source/content 보존 대상을 **patch/archive 먼저 저장** (`memory/backups/task-2701-dirty.patch` 등 · 콘텐츠/소스 우선)
6. 0바이트 truncate 2파일(`replacement_pr_runner.py`·`test_replacement_pr_runner_2510.py`)의 **HEAD/origin 정본 sha256 기록**
7. 데몬 상태 파일(bot-activity/member-status/task-timers/token-ledger/pipeline-status/whisper 등) **gitignore/write-path 분리안 적용** (★ dirty tracked 재발 영구차단 · reset 전 선적용 권장)
8. **보존 증거 + manifest 남긴 뒤에만** `git reset --hard origin/main` 실행
9. ★ **`git clean` 금지**
10. reset 후 `replacement_pr_runner.py` 718줄 / test 493줄 **정상 복원 확인**
11. local main ahead/behind **0/0 또는 정합** 확인
12. dirty 가 데몬 재오염 없이 **안정화** 확인
13. Phase B 결과 보고서 작성

## ★ 금지 (★ 회장 verbatim)

- 보존 branch 없이 reset
- `git clean`
- dirty 일괄 stash
- 보존 전 파일 삭제
- main push
- PR #158 / PR #159 / PR #160 / task-2700 stale branch / task-2700+1 branch 수정
- manual .done 생성
- G4 marker 삭제

## ★ 완료 조건 (★ 회장 verbatim)

- local main 정합 회복
- 0바이트 truncate 2파일 복원
- 데몬 tracked dirty 재발 방지
- 손실 0 증거 manifest
- reset 전후 sha/linecount 증거
- Phase B report

## ★ 주의 (★ 데몬 충돌)

reset 시점 데몬이 tracked 파일 재기록 중이면 충돌. **7단계(gitignore/write-path 분리)를 reset 전 선적용**하거나 데몬 일시정지 후 정합. untracked 821 은 충돌 0 → reset 보존(git clean 금지로 유지).

## allowed_resources

```yaml
allowed_resources:
  paths:
    - "/home/jay/workspace (★ local main repo 정합 대상 — worktree 아님)"
    - ".gitignore (데몬 상태 파일 분리)"
    - "memory/backups/task-2701-*.patch (보존 archive)"
    - "memory/events/task-2701*.* · memory/reports/task-2701*.md (보고)"
  forbidden_paths:
    - "PR #158 / PR #159 / PR #160 branch / task-2700 / task-2700+1 branch"
    - "settings.json (live) · hooks/** (live) · Axis/** (runtime) · dispatch.py"
  commands:
    - "git fetch / rev-list / for-each-ref / branch / diff / show / status / stash(보존용 archive) / reset --hard origin/main(보존 후) / checkout HEAD -- <truncate 2파일>"
    - "git clean 금지 · main push 금지"
    - "python3 (sha256/linecount 검증)"
  merge_policy: "local_main_align_no_push_no_merge"
  ttl_hours: 6
```

## ★ 보고 필드

1. origin/main 최신 SHA + local HEAD reset 전/후
2. ahead/behind reset 전(예 6/69)/후(0/0 목표)
3. 보존 branch 명 + 6 ahead reachable evidence
4. patch/archive 경로 + 보존 manifest
5. truncate 2파일 reset 전(0줄)/후(718·493줄) + sha256
6. 데몬 gitignore/write-path 분리 적용 내역
7. dirty 안정화(재오염 0) 확인
8. 손실 0 증거 (manifest)
9. forbidden_action_count

## 레벨

코드 수정 없음 (git 상태 정합 인프라 작업). 신규/수정 소스 커밋 없음 — local main을 origin/main(35e81f01)으로 reset 정합. main 직접 commit/push 금지(회장 verbatim) + 시스템 hook 차단으로 deliverable 커밋 부적용. git 게이트 non-code SKIP 적용(Phase A 동일 메커니즘). 산출물: 보존 branch + patch/archive + manifest + 보고서 + 3문서(전부 untracked 보존).

## 종결

성공: **`LOCAL_MAIN_DIVERGENCE_CLEANUP_EXECUTION_COMPLETE`** (★ 기반 정리 종료선 · 이후 메타 1차 종료선 체크리스트 1회 정리 → 사업 복귀)

★ 회장 verbatim 2026-05-28 Phase B Option 1. preserve 선행, reset 단독 금지, git clean 금지, main push 금지, 손실 0.

끝