# dispatch — task-2519 finalize (PR push + PR open + self-analysis)

- 작업 유형: **finalize 단계 (PR push + PR open) + repository_policy_adapter 자체 분석**
- 작업 레벨: **Lv.1** (코드 변경 0, finalize 단계만)
- 우선순위: **★★ P1**
- 일시: 2026-05-09
- 회장 결정: 2026-05-09 11:38 — 1번+2번 조합, finalize cron 발사

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

> task-2519 (repository_policy_adapter)는 코드 + 회귀 테스트 완료(.done at 11:26).
> 그러나 **PR 단계 미진입** (branch push 미확인, PR 미생성).
> 본 finalize cron은 **PR push + PR open만 수행**한다.
> 이후 merge는 **merge_queue_executor 정상 경로 우선**.

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

- ✅ `.done` 마커 존재: `memory/events/task-2519.done` (qc_result=WARN, 5 gates PASS)
- ✅ worktree: `/home/jay/workspace/.worktrees/task-2519-dev2`
- ✅ branch: `task/task-2519-dev2` (4 commits, 회귀 14/14 PASS, pyright 0/0/0)
- ✅ effective diff = 정확히 2 파일
- ✅ 보고서: `memory/reports/task-2519.md` (SCQA 형식)
- ❌ PR 미생성 (gh pr list 빈 결과)
- ❌ branch push 미확인

## 작업자

- **dev2-team / 오딘 (개발2팀장)**
- 백엔드: 토르
- 테스터: 헤임달
- 독립 QC: 마아트

## 1단계 — PR push + PR open

```bash
cd /home/jay/workspace/.worktrees/task-2519-dev2

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

# 2. PR 생성
gh pr create \
  --title "[task-2519] repository_policy_adapter — 6 capability probe + 7 BlockedReason + admin override 정적 차단" \
  --body-file memory/reports/task-2519.md \
  --base main \
  --head task/task-2519-dev2
```

PR title/body는 보고서 SCQA 형식 그대로 사용. 4 commits 흐름:
1. 토르: `utils/repository_policy_adapter.py` 신규 (787 줄)
2. 헤임달: `tests/regression/test_repository_policy_adapter_2519.py` 신규 (517 줄, 14/14 PASS)
3. 오딘: 마아트 PASS 조건부 재작업 — `MergePathPlan.requires_chair` 주석 정확화
4. 오딘: Gemini High 2건 수용 — `_run_gh` silent fallback에 stderr trace 추가 + 테스트 inline runner 4건을 `make_mock_runner`로 통합

## 2단계 — self-analysis (repository_policy_adapter 자체 적용)

PR open 직후 본 task의 본체를 self-host로 적용:

```bash
# 자기 PR에 대해 capability probe + classify_blocked_reason
python3 utils/repository_policy_adapter.py --pr <NEW_PR_NUMBER> --json
python3 utils/repository_policy_adapter.py --pr <NEW_PR_NUMBER> --classify-blocked
python3 utils/repository_policy_adapter.py --probe-capability --json
```

**필수 자체 분석 4건** (회장 §3):
1. ✅ PR open 이후 merge capability 자동 분석
2. ✅ `required_review_thread_resolution` 인식
3. ✅ approval requirement 분류
4. ✅ `mergeStateStatus` transition 추적

**산출물**: `memory/reports/task-2519-self-analysis_260509.md`

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

- ❌ **회장 직접 머지 요청 금지** (★ 자동화 fallback 제거가 본 task 본질)
- ❌ **admin override 금지** (`gh pr merge --admin` 호출 시 RuntimeError, 본 task 본체에서 정적 차단됨)
- ❌ **force push 금지**
- ❌ **rebase 금지**
- ❌ **required CI bypass 금지**
- ❌ **expected_files 외 수정 금지** (정확히 2 파일 유지)
- ❌ **새 commit 금지** (4 commits 그대로 push만)

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

자동 reconcile + evidence backfill 우선. PR open 후 BLOCKED/BEHIND 발생 시에는:
- `STALE_BASE` → base sync (force push 금지, `git merge origin/main`)
- `UNRESOLVED_REVIEW_THREAD` → auto_gemini_triage 연동
- `REQUIRED_APPROVAL` → AUTOMATION_CAPABILITY_GAP 분류 (회장 직접 머지 X)
- 기타 → merge_queue_executor 정상 경로

## 완료 조건

1. ✅ PR push 성공 (force 0)
2. ✅ PR open 성공 (PR 번호 회수)
3. ✅ self-analysis 4건 PASS (`memory/reports/task-2519-self-analysis_260509.md` 생성)
4. ✅ admin override 호출 0건
5. ✅ Critical 7종 발생 시에만 회장 보고
6. ✅ `.done.acked` 처리는 본 finalize 후 자동
