---
task_id: task-2463
type: plan
scope: task
created: 2026-05-05
updated: 2026-05-05
status: completed
---

# 계획서: task-2463

**task**: task-2463 (Phase 3 재정의 — taskctl 단일 출입구 강제)
**목표**: taskctl을 거치지 않는 main 진입 경로를 0개로 강제. 박제/문서 합격 금지, 라이브 차단 로그 4건 + 코드 변경 필수.
**승인**: 회장 2026-05-05 "코드에 안 걸리면 0점이다 / 실행 로그 없으면 실패다"
**근거**: `memory/tasks/task-2463.md` (사양 본문) + `memory/events/task-2461-freeze-20260505T200633/` (참고만)

---

## 목표

회장 한 줄 기준 **"taskctl을 거치지 않는 main 진입 경로는 0개여야 한다"**를 코드 강제로 실현.
- finish-task.sh가 `taskctl verify` + `taskctl merge`를 호출하지 않으면 .merge-done/.done 생성 차단 (P0-1)
- worktree_manager.py에서 `gh pr merge` 직접 호출 0줄 제거 (P0-2)
- gemini neutral=pass 제거, 호출 실패도 failure (P0-3)
- 차단 로그 4건 (5필드 포함) 라이브 캡처 (P0-5)

## 범위

### 포함 (수정 파일)
- scripts/finish-task.sh — taskctl verify/merge 강제 + .done.blocked 차단 로직
- scripts/worktree_manager.py — `gh pr merge` 제거 + sentinel + --exit-on-block
- scripts/gemini_review_gate.py — neutral → failure
- scripts/done-watcher.py — main SHA 검증 (2차 방어선)
- scripts/post_merge_probe.py — squash merge fallback
- scripts/git-hooks/pre-push — TASKCTL bypass 감지
- scripts/safe_pr_merge.sh — 신규 (TASKCTL_INVOKED + MERGE_CALLER 강제 wrapper)
- .github/workflows/ci.yml — phase3-merge-gate job + 정적 grep
- .github/workflows/guard.yml — Phase 3 marker check + worktree_manager grep
- tests/phase3_hard_gate/ — 회귀 테스트 4종

### 라이브 차단 4 로그 (5필드)
- memory/reports/task-2463-block-log-1-gemini-zero.txt
- memory/reports/task-2463-block-log-2-worktree-manager-direct.txt
- memory/reports/task-2463-block-log-3-pr-open-done.txt
- memory/reports/task-2463-block-log-4-taskctl-bypass.txt

### 제외 (다음 페이즈 이후 / 본 task 영역 밖)
- scripts/taskctl.py 수정 (호출만 허용, forbidden_paths)
- scripts/start_task_guard.py 수정 (Phase 1 read-only)
- scripts/anu_confirm_bot/** (P0-4 격하 — 운영 인식 변경만)
- scripts/taskctl_verify.py (forbidden_paths, 부재 그대로 유지 — 본 task 봇이 호출만 시도)
- task-2461 freeze 12 commits 자동 cherry-pick (수동 명시 재적용만)

## 위임 계획

- 구현(Lv.4 코드 변경): **dev6/스바로그(백엔드)** — Sonnet 모델
- 회귀 테스트(pytest 단위): **dev6/벨레스(테스터)** — Sonnet 모델
- 라이브 차단 4 로그 캡처: **dev6/페룬(팀장)** 직접 (다단계 통합 검증)
- UX/UI 작업 없음 (모코시), 프론트엔드 작업 없음 (라다)

## 검증 기준

1. `grep -n "gh pr merge" scripts/worktree_manager.py` → 0건 (P0-2)
2. `grep -nF "@@WORKTREE_FINISH_RESULT@@" scripts/worktree_manager.py` → ≥ 1건 (P0-2 sentinel)
3. `grep -nE "taskctl (verify|merge)" scripts/finish-task.sh` → ≥ 2건 (P0-1)
4. `python3 scripts/gemini_review_gate.py --commit-sha 0... --pr-number 0 --force` (no GEMINI_API_KEY) → exit 1 (P0-3)
5. CI workflow yaml 파싱 통과 + phase3-merge-gate job 존재 (P0-3 #4)
6. `pytest tests/phase3_hard_gate/ -q` → 모두 PASS
7. 라이브 4 로그 5필드 모두 존재
