# task-2729+24 — ENVELOPE_PROMPT_OWNER_KEY_HYGIENE (최소 1줄 제거, activation 0)

## 레벨
Lv.2 (callback envelope prompt 최소 hygiene — owner_key raw literal 1줄 제거. production activation 아님)

## 발번 주석
canary preflight 에서 발견한 _build_envelope_prompt owner_key raw literal 노출의 최소 hygiene patch. 회장 2026-06-09 봇 위임 승인. raw key = 위협도 강등(OPERATIONAL_LOG_KEY_LITERAL_HYGIENE_BACKLOG) — 단 PR diff raw key 0 은 hard gate. **canary 실행은 본 task 범위 밖(별도 승인).**

## ★ FRESH BASE HARD GATE
1. worktree 반드시 **origin/main `a311bd69`(또는 이후 최신 main)** 분기. canonical(task-2716) 분기 금지.
2. `git worktree add -b task/task-2729+24-<bot> <path> origin/main`. commit 전 merge-base --is-ancestor a311bd69 HEAD==YES + task-2716 div 0 검증, 실패 시 HOLD.
3. diff origin/main..HEAD = expected_files 만(3). 오염 diff → HOLD.

## 근본 (단일 소스)
- `dispatch/anu_owned_callback_enforcement.py::_build_envelope_prompt(result, *, anu_key, chat_id)` 가 wake prompt 에 `f"owner_key={anu_key}"` raw ANU key literal 줄 포함. → cokacdir cron body → schedule_history/system_prompt 적재(content-driven). 
- owner proof 는 prompt owner_key 텍스트 미사용 — `resolve_authoritative_owner`/`OwnerProbe` 가 `cokacdir --cron-history <sid> --key <ANU_KEY>` 실조회로 판정(코드 주석: "envelope 의 owner_key/self_key_used/collector_role 텍스트는 이 함수에 [영향 없음]"). → owner_key 줄 redundant, 제거 안전.

## 수정 (정확히 1줄 제거 — 회장 verbatim)
1. `_build_envelope_prompt` 의 **`f"owner_key={anu_key}",` 1줄만 제거**. 나머지 envelope 필드(task_id/result_path/report_path/sha256/collector_role/chat_id/canonical_root) 전부 유지.
2. ★ **owner_key_fp / sha(key) / key-derived identifier 추가 절대 금지**. owner 식별 필드 = 없음.
3. ★ `anu_key` 파라미터는 **시그니처 유지**(호출부 `_build_envelope_prompt(result, anu_key=anu_key, chat_id=...)` 호환). **단 prompt 출력에는 미사용**. pyright 미사용 경고 시 최소 처리(예 `_ = anu_key` 또는 `# noqa`/주석 "owner proof 는 cron-history 로"). 시그니처/호출부 무변경 우선.
4. 그 외 함수/모듈 로직 무변경.

## EXPECTED FILES (정확히 3 — 초과 시 HOLD)
1. `dispatch/anu_owned_callback_enforcement.py` — _build_envelope_prompt owner_key 1줄 제거
2. `tests/regression/test_envelope_prompt_owner_key_hygiene_2729p24.py` — 회귀
3. `memory/reports/task-2729+24.md`
- ★ callback_preregistration.py / normal_fallback_callback_helper.py / git_evidence.py / dispatch.py / file_touch_ratio_check.py 무수정. 수정 필요 판명 시 HOLD.

## 필수 regression (isolated)
1. `_build_envelope_prompt` 출력에 **raw ANU key / owner_key= / fingerprint / key-derived id 전부 부재**. 2. 나머지 envelope 필드(task_id/result_path/report_path/sha256/collector_role/chat_id/canonical_root) 유지 assert. 3. owner proof 경로(`resolve_authoritative_owner`/`OwnerProbe`, fake cron-history probe 주입) **무영향 PASS**. 4. anu_key 시그니처/호출부 호환(호출 시 에러 0). 5. build_anu_owned_callback_request argv prompt body raw key 0. 6. raw key 0(소스/diff). 7. ACTIVE=false / systemd enable 0 / activation_epoch absent / real spawn 0.

## 금지 (회장 verbatim)
1. real wake  2. canary 실행  3. cron spawn  4. systemd enable  5. ACTIVE=true 선언  6. activation_epoch 생성  7. legacy result.json 처리(140 스캔·이동·삭제·quarantine)  8. task-2716 branch 수정  9. callback prereg Phase B 착수  10. owner_key_fp/key-derived id 추가  11. canonical reset/clean/stash.
- 과거 schedule_history 515 / system_prompt 45 자동삭제·수정 금지(backlog 보존). 모든 검증 isolated temp.

## 이번 라운드 범위 (★PR 생성까지)
- 구현 + isolated verify(회귀) + **PR 생성** + CI/Gemini fresh gate 확인까지. merge·canary = 별도 회장 승인 전까지 0.

## 완료 판정
- 회귀 PASS + owner_key 1줄 제거 + prompt raw key 0 + owner proof 무손상 + envelope 필드 유지 + PR 생성 + CI GREEN + fresh Gemini HIGH/CRITICAL 0 + unresolved 0(또는 non-blocking) → **`MERGE_APPROVAL_CANDIDATE_ENVELOPE_PROMPT_OWNER_KEY_HYGIENE_ACTIVE_FALSE`**.
- fresh HIGH/CRITICAL 재발 / **PR diff raw key 노출**(hard gate) / expected_files 초과 / callback_prereg·git_evidence·dispatch·normal_fallback_helper 수정 필요 / owner proof 손상 / activation 필요 → **`HOLD_FOR_CHAIR`**.
- ★ merge·canary·activation = 별도 회장 승인 전까지 0.

## 완료 후 callback
- 봇 완료 시 ANU(c119085addb0f8b7)로 normal callback cron 발사(envelope only, UTF-8 ≤3900 bytes, collector=ANU): task_id/result_path/report_path/PR번호/terminal_state/sha256/one-line summary. ★envelope/로그에 full key literal 박지 말 것(.env.keys COKACDIR_KEY_ANU sealed).

## doctrine
직접 코딩 금지(ANU)→봇 위임 / fresh origin/main a311bd69 / 1줄 surgical / owner proof cron-history 경로 무손상 / PR diff raw key 0 hard gate / scan_once 경로 무영향 / callback_prereg·git_evidence·dispatch·normal_fallback_helper 무수정 / activation 0 / 과거 log 무변동 / same-PR post-Gemini push 금지.
```yaml
callback_envelope_byte_limit: 3900
callback_collector_role: ANU
callback_owner_key_source: ".env.keys COKACDIR_KEY_ANU (sealed, literal 출력 0)"
```
