# task-2762+1 — PR #245 same-PR guard-native realign-push (dev1)

## 목표 (단 1가지)
기존 PR #245 의 브랜치 **`task/task-2762-dev1`** 를 **origin/main 1029131c** 위로 정렬(rebase)하여 **BEHIND(stale base) 해소**. **same-PR · same-branch · 새 PR 생성 금지.** 코드 변경 축 추가 0 (이미 머지대상 2파일 그대로 유지).

## ★ 핵심 원칙 (회장 verbatim 2026-06-18)
이번 목적은 단순히 push 성공이 아니라, **실행파일과 hook/guard 가 실제로 wired 된 경로에서 우회 없이 오류 없이 통과**하는 상태 보존이다.
- **hook bypass(TASKCTL_BYPASS) 금지 · lock 수기 작성 금지.** 반드시 정식 taskctl/start_task_guard/lock/pre-push hook 경로로 통과.
- 만약 우회/수기 lock 없이는 불가능하면 → **STOP_REPORT** (아래 중단조건).

## 현재 사실 (read-only 확인됨)
- origin/main = **1029131cdcb43da570755fb5131046f11922c2f3** (fresh canonical, task-2761/PR#244)
- PR #245 branch `task/task-2762-dev1` head = **536a43ea3dff5a4ef4877f8a6992603afa3e1209**
- merge-base(origin/main, head) = **8420a763…** ← STALE (BEHIND 원인)
- PR #245 이미 머지대상 effective diff(3-dot) = 정확히 2파일:
  - `dispatch/anu_result_pickup_runner.py` (build_owner_gate_fn 반환 `_gate` executor_key kwarg 수용 — +15)
  - `tests/regression/test_p0b_owner_gate_signature_2762.py` (신규 +326)
- ANU 가 별도 worktree 에서 `git rebase --onto 1029131c 8420a763` 검증 완료: 충돌 0 · merge-base=1029131c · effective diff 정확히 2파일 · 테스트 42/42 PASS. **dev1 은 이 결과를 정식 가드 경로에서 재현하면 된다.**

## 절차 (guard-native, 우회 0)
1. **fresh origin/main 1029131c 기준 정식 dispatch/worktree** 에서 시작. `git fetch origin` 으로 origin/main=1029131c 확인.
2. 브랜치 **`task/task-2762-dev1`** 를 정식 taskctl 워크트리(가드 기대 경로)에서 체크아웃/takeover. (필요 시 `start_task_guard.py --task task-2762 --bot dev1` 또는 `--takeover-from` 으로 lock 정식 취득 — **pre-push hook 이 요구하는 lock 은 브랜치 task-id 기준 `task-2762.lock`**.)
3. `git rebase --onto 1029131c 8420a763` (= 8420a763..head 커밋을 1029131c 위로 재생성). **conflict 발생 시 즉시 STOP_REPORT.**
4. 정렬 후 검증: merge-base(origin/main, HEAD)==1029131c · `git diff --name-only origin/main...HEAD` = 정확히 위 2파일 · working tree clean.
5. **테스트 재실행 (3 그룹, real factory)**: `tests/regression/test_p0b_owner_gate_signature_2762.py` · `test_p0b_event_strategy_2760.py` · `test_p0b_event_strategy_wiring_2760.py`. 전부 PASS 확인.
6. **same branch `task/task-2762-dev1` 로 `git push --force-with-lease`** (remote 가 여전히 536a43ea 일 때만). pre-push hook(branch pattern·lock·STALE_BASE·scope) **우회 없이 자연 통과** 확인.
7. push 후: PR #245 head sha 재확인 · merge-base==1029131c · mergeStateStatus 가 BEHIND 아님 · effective diff 2파일 재확인.

## 금지
- 새 PR 생성 금지 · **merge 금지** · **human/bot `/gemini review` 트리거 금지** · 2b′ real callback 재실행 금지 · **real callback fire 금지** · activation 금지 · systemd enable 금지 · recurring cron 변경 금지 · admin override 금지 · ledger robustness/matching 착수 금지 · expected scope 밖 수정 금지 · **hook bypass 금지 · lock 수기 작성 금지**.

## 중단 조건 (하나라도 발생 시 즉시 STOP_REPORT, push 하지 말 것)
1. hook bypass 필요 2. lock 수기 작성 필요 3. conflict 발생 4. expected scope 밖 수정 필요 5. 코드 수정 축이 owner_gate 시그니처 정합 밖으로 확장 6. callback/result contract 변경 필요 7. systemd/cron/admin/activation scope 발생 8. real fire 가능성 발생.

## expected_files (이 외 변경 시 scope-violation)
- `dispatch/anu_result_pickup_runner.py`
- `tests/regression/test_p0b_owner_gate_signature_2762.py`
- (그 외 0. memory/reports/plans/artifact 혼합 금지.)

## doctrine
- runtime code only · same-PR push(Gemini 미도착이므로 허용) · **Gemini 트리거 금지**(회장 human trigger 별도) · long polling 금지 · **봇 종료 전 ANU callback 필수**(독립 ANU key `c119085addb0f8b7`, UTF-8 ≤3900 bytes envelope) · merge·2b′ 재실행 별도 승인 전까지 금지 · PR #245 **open 유지**.

## 보고 요구 (ANU callback envelope + report.md)
재위임 task id · old head(536a43ea) · new head · origin/main sha · merge-base · mergeStateStatus · **hook/lock/taskctl 우회 0 증거**(어떤 정식 가드를 어떻게 통과했는지) · effective diff 2파일 증거 · 테스트 결과(3그룹) · real fire 0 · ACTIVE=false · 3 flag OFF · PR #245 open 유지 · Gemini human trigger 대기 상태.

## 목표 상태명
`PR245_BASE_REALIGNED_BY_GUARD_NATIVE_DEV1_GEMINI_TRIGGER_READY_ACTIVE_FALSE`

## allowed_resources (본 task의 capability)

```yaml
allowed_resources:
  paths:
    - "dispatch/anu_result_pickup_runner.py"
    - "tests/regression/test_p0b_owner_gate_signature_2762.py"
    - "tests/regression/test_p0b_event_strategy_2760.py"
    - "tests/regression/test_p0b_event_strategy_wiring_2760.py"
  forbidden_paths:
    - "memory/**"
    - "reports/**"
    - "plans/**"
    - ".github/**"
    - "memory/events/*.cron-*"
    - ".env*"
    - "**/*.done"
  commands:
    - "pytest"
    - "python3 -m pytest"
    - "git"
  merge_policy: "manual"
  ttl_hours: 24
```
