# task-2554+2 plan — OWNER_TRIGGER_ONLY_CAPABILITY 통합 capability 완성

**status**: in-progress
**level**: Lv.4
**team**: dev5 (마르둑)
**replacement_of**: task-2554+1 / PR #105 (IMPLEMENTATION_INCOMPLETE_PER_OWNER_SPEC)
**original_head**: 08f2d29ccb149fd721722e69909e45ceaebc71ba

## 목표

회장 §명시 (2026-05-12 KST) §1~§5 1:1 구현. OWNER_TRIGGER_ONLY_CAPABILITY 를 5 layer 통합 완성:
1. runner (`anu_v2/owner_trigger_only.py`) — RESULT_PENDING import + http_post 직전 PENDING txn.record + 기존 race fix 보존
2. audit (`anu_v2/owner_trigger_audit.py`) — bounded/reverse scan + PENDING sentinel + transaction context manager + 2단 lock + crash-safety
3. executor integration (`anu_v2/merge_queue_executor.py`) — GEMINI_STALE_ON_HEAD hook + OWNER_TRIGGER_REQUIRED decision + runner call + fresh polling + auto-resume (minimal patch)
4. file evidence — decision.json + audit jsonl + 5종 marker
5. regression fixtures (6 신규) — bootstrap gap / fresh medium 3 / dedupe / head changed / token unavailable / posted but no fresh evidence

## 범위 (expected_files)

### code (4 + 7 carry-over)
1. `anu_v2/owner_trigger_only.py` — PR #105 baseline + 2 fix (RESULT_PENDING import, http_post 직전 PENDING txn.record)
2. `anu_v2/owner_trigger_audit.py` — PR #105 baseline + 1 fix (bounded reverse scan)
3. `anu_v2/owner_trigger_decision.py` — PR #105 baseline 그대로
4. `anu_v2/merge_queue_executor.py` — origin/main 기준 minimal patch (GEMINI_STALE_ON_HEAD hook + OWNER_TRIGGER_REQUIRED method)

### tests (7 carry-over + 6 new)
5-11. PR #105 7 test files carry-over (104 baseline tests 보존)
12-17. 6 새 regression fixture (회장 §5 1:1)

### supporting
18. `memory/events/task-2554+2.dispatch-decision.json`
19. `memory/events/task-2554+2.replacement-lineage.json`
20. `memory/events/task-2554+2.gemini_triage_decision.json`
21. `memory/events/task-2554+2.effective-diff.json`
22-24. `memory/plans/tasks/task-2554+2/{plan,context-notes,checklist}.md`
25. `memory/reports/task-2554+2.md`

## forbidden_paths (회장 §명시)

- PR #98~#105 branch 변경 0
- `scripts/ci.sh` / `dashboard/` / `dispatch/` / `team_prompts.py` / `.github/workflows/` / `.env*` 변경 0
- 다른 task markers (task-2545~2554 외) 변경 0
- POC 영역 변경 0
- main 직접 push 0
- 다른 anu_v2 modules (worktree_cleanup, post_merge_smoke_runner, auto_gemini_triage, critical_escalation_reporter, replacement_pr_runner) 변경 0 (merge_queue_executor 만 minimal patch 허용)

## 완료 기준 (회장 13 항목 1:1)

1. task-2554+2 PR merged
2. mergedBy = `app/jeon-jonghyuk-taskctl-bot`
3. §1~§5 1:1 구현 evidence
4. pytest regression 전부 PASS
5. effective diff == expected_files
6. forbidden path 0
7. PR #104 head 4e8f89795ab1 unchanged + PR #105 head 08f2d29c unchanged
8. owner trigger comment action 외 OWNER 권한 사용 0
9. decision schema reuse 가능
10. audit/marker integration test PASS
11. CI/Gemini/CLEAN 통과
12. BOT identity squash merge + post-merge smoke + reconcile evidence
13. 신규 Critical 7 없음
