# dispatch — task-2518 finalize (PR push + PR open + self-host reconciliation)

- 작업 유형: **finalize 단계 + lifecycle_reconciliation_manager 자체 적용 (★ 메타 dogfooding)**
- 작업 레벨: **Lv.2** (PR 단계 + self-host 검증)
- 우선순위: **★★★ P0**
- 일시: 2026-05-09
- 회장 결정: 2026-05-09 11:38 — 1번+2번 조합, self-host reconciliation 본 task로 검증

## ⚠️ 본 task의 본질 — 회장 명시

> 다그다 Telegram cut-off (마지막 "Proce" at 11:01, 25분 응답 없음, .done 없음, PR 미생성, worktree 존재, pytest/L1 smoke PASS)는
> **task-2518이 해결하려는 실제 운영 사례** 그 자체.
>
> 본 finalize는 **PR push + PR open** 후 lifecycle_reconciliation_manager를 **자기 자신에게 적용**하여
> "봇이 죽어도 lifecycle determinism이 유지되는가"를 우선 검증한다.

## 현 상태 (회장 직접 확인 evidence)

- ✅ worktree: `/home/jay/workspace/.worktrees/task-2518-dev3`
- ✅ branch: `task/task-2518-dev3` (5 commits)
- ✅ effective diff = 정확히 2 파일 (`utils/lifecycle_reconciliation_manager.py` + `tests/regression/test_lifecycle_reconciliation_manager_2518.py`)
- ✅ pytest 21/21 PASS, pyright 0/0/0
- ✅ L1 smoke PASS ("real task-2517 evidence detected, dry-run correctly proposes created_done_acked")
- ❌ Telegram reply cut-off at 11:01 ("Proce")
- ❌ `.done` 없음
- ❌ PR 미생성
- ❌ branch push 미확인

## 작업자

- **dev3-team / 다그다 (개발3팀장, cokacdir 재시작 후 새 세션)**
- 백엔드: 루
- 회귀: 모리건

## 1단계 — PR push + PR open

```bash
cd /home/jay/workspace/.worktrees/task-2518-dev3

# 1. branch push (force 절대 금지)
git push -u origin task/task-2518-dev3

# 2. PR 생성
gh pr create \
  --title "[task-2518] lifecycle_reconciliation_manager — 7 state + 8 stuck case + idempotent reconcile + manual .done 위장 차단" \
  --body-file memory/reports/task-2518.md \
  --base main \
  --head task/task-2518-dev3
```

5 commits 흐름:
1. 루: `utils/lifecycle_reconciliation_manager.py` 신규 (7 state + 8 stuck case + idempotent reconcile + manual .done 차단)
2. 루: pyright 진단 fix + automation_contracts/canonical_workspace_resolver 실연동
3. 다그다: pyright 잔여 4건 정리
4. 모리건: 회귀 14건 + replay fixture 5건
5. 다그다: 테스트 pyright cleanup

## 2단계 — self-host reconciliation (★ 메타 dogfooding)

PR open 직후 lifecycle_reconciliation_manager를 **자기 자신**에 적용:

```bash
# (a) 자기 task에 대한 reconcile dry-run
python3 utils/lifecycle_reconciliation_manager.py --task-id task-2518 --reconcile

# (b) stuck 자동 감지 dry-run
python3 utils/lifecycle_reconciliation_manager.py --scan-stuck

# (c) idempotency 검증 — 같은 명령 3회 반복
for i in 1 2 3; do
  python3 utils/lifecycle_reconciliation_manager.py --task-id task-2518 --reconcile
done
```

### 필수 검증 6건 (회장 §2)

1. **STUCK_NEEDS_RECONCILE 탐지** — 다그다 Telegram cut-off 사례를 8 stuck case 중 어디로 분류했는지 정확히 보고
2. **Telegram reply cut-off 탐지** — cron history (`/home/jay/.cokacdir/schedule_history/`)에서 마지막 응답 "Proce"로 잘린 상태 탐지
3. **worktree 존재 + PR 미생성 상태 분류** — 회장 §7 "finish-task 중단" 케이스 매칭
4. **evidence 기반 recovery 가능 여부** — pytest PASS / L1 smoke PASS / commits 5건 evidence를 확인하여 finalize 가능 여부 결정
5. **repeated reconcile idempotency** — 3회 반복 호출 결과 동일 (state 변화 0)
6. **finalize 가능/불가능 정확 분류** — PR open 전 → finalize 불가, PR open + CI PASS → finalize 가능

### 산출물

`memory/reports/task-2518-self-host-reconciliation_260509.md`:
- 8 stuck case 중 매칭 케이스
- evidence 분석 (timer/commit/test/smoke/cron history)
- recovery plan (PR open 후 어떤 backfill이 필요한지)
- idempotency 증명 (3회 반복 결과 hash 동일)
- finalize 가능 여부 + 사유

## 3단계 — 금지 행위 (회장 직접 §)

- ❌ **fake `.done` 생성 금지** (★ evidence 없는 .done 절대 금지, 본 task 본체가 RuntimeError로 정적 차단)
- ❌ **evidence 없는 FINALIZED 금지**
- ❌ **task 상태 위장 금지**
- ❌ **회장 직접 머지 요청 금지**
- ❌ **admin override 금지**
- ❌ **force push 금지**
- ❌ **rebase 금지**
- ❌ **required CI bypass 금지**
- ❌ **expected_files 외 수정 금지** (정확히 2 파일 유지)
- ❌ **새 commit 금지** (5 commits 그대로 push만)
- ❌ **dispatch.py 수정 금지**
- ❌ **finish-task.sh 수정 금지**
- ❌ **5 모듈 본체 수정 금지**
- ❌ **canonical_workspace_resolver 수정 금지**
- ❌ **automation_contracts 변경 금지**

## 4단계 — Critical 7종 발생 시에만 회장 보고

자동 reconcile + evidence backfill 우선. 그 외 모든 상태는 자동 처리.

## 완료 조건

1. ✅ PR push 성공 (force 0)
2. ✅ PR open 성공 (PR 번호 회수)
3. ✅ self-host reconciliation 6건 검증 PASS
4. ✅ idempotency 3회 반복 hash 동일
5. ✅ `memory/reports/task-2518-self-host-reconciliation_260509.md` 생성
6. ✅ fake `.done` 생성 시도 0
7. ✅ Critical 7종 발생 시에만 회장 보고
8. ✅ admin override 호출 0건

## 핵심 (회장 명시)

> 봇 복구 자체보다, **봇이 죽어도 lifecycle determinism이 유지되는가** 를 우선 검증한다.
>
> 지금 발생한 hang은 실패가 아니라 task-2518이 해결하려는 실제 운영 사례다.
> 본 finalize cron은 그 자체로 **메타 dogfooding 박제 사례**가 된다.
