# task-2693 — PR_152_UNRESOLVED_6_REMEDIATION_AND_CALLBACK_OWNER_ENFORCEMENT (★ 회장 verbatim 2026-05-26 결정 1+2)

- Level: Lv.3 (★ callback owner enforcement 코드 + unresolved 6건 thread 대응 + regression / live infra 변경 0)
- 담당: **dev2 오딘** (★ 회장 verbatim 2026-05-26 dispatch 승인 확정)
- 제외 5: dev4/dev5 (★ self-key 사고) / dev6 페룬 (★ DEV6_CALLBACK_AUTHORITY_QUARANTINED) / dev1 헤르메스 (★ task-2690 PR #152 watcher 진행 중) / dev3 다그다 (★ task-2689 PR #149 watcher 진행 중) / dev8 라 (★ PR #153 회피 권고)
- chair_authorization_id: **`CHAIR-AUTH-PR152-CALLBACK-OWNER-ENFORCEMENT-UNRESOLVED6-20260526-JJONGS-IMPLEMENT-001`** (★ 회장 verbatim 2026-05-26 발급 확정)
- 완료 상태: **`PR_152_CALLBACK_OWNER_ENFORCEMENT_AND_UNRESOLVED_REMEDIATION_READY`** (★ 회장 verbatim 2026-05-26 확정)

## 배경

회장 verbatim 2026-05-26:
- 결정 1: PR #152 unresolved 6건 처리 task 발의 승인
- 결정 2: callback lifecycle hardening은 PR #152 내부 범위만 포함 (★ durable registry / dispatch.py 전역 / settings.json / hooks live 제외)

박제: `memory/events/chair-verbatim-pr-152-unresolved-6-remediation-approved-260526.json`

## ★ 필수 4 요구 (★ 회장 verbatim · task md / 실행 prompt 모두 포함 의무)

1. **envelope vs actual cron owner cross-check** — envelope 텍스트 owner_key vs `cokacdir --cron-history <SID> --key <K>` 실제 채널 등록 owner 양방향 비교
2. **ANU key 강제** — cron 등록 시 actual owner_key = ANU `c119085addb0f8b7` 강제 (★ self-key 등록 fail-closed)
3. **envelope 단독 PASS 금지** — envelope 텍스트만으로 callback PASS 선언 금지 / actual cron channel + chair-facing inbound 2-source 의무
4. **schedule_history + ANU key + 3 SID 일치 검증** — schedule_history `<sid>.log` status=ok + ANU key channel cron-history hit + envelope 3 SID (chair_facing/collector/delivery) = `53e89540-5bed-4692-a726-ed857820758a` 모두 일치

## ★ 추가 강제 6 (★ 회장 verbatim)

1. **8 우회 패턴 발견 시 즉시 HOLD_FOR_CHAIR** (★ [[feedback_bypass_pattern_immediate_hold_for_chair_260526]])
   - TASKCTL_BYPASS 사용 / retry_count reset / stash → action → unstash / lock 파일 수동 생성 / git_evidence 맞추기용 박제 / "표준 패턴" 봇 자체 명명 / "회장 verbatim 의 정신은..." 식 재해석 / envelope 작성만으로 callback PASS 선언
2. **envelope 만 보고 callback PASS 금지**
3. **callback owner actual 검증 전 merge-ready 선언 금지**
4. **dev6 quarantine 우회 금지** (★ [[feedback_dev6_perun_callback_authority_quarantined_260526]])
5. **PR #154 와 혼합 금지** (★ QUARANTINED 유지)
6. **PR #151 과 혼합 금지** (★ READ_ONLY_HOLD 유지)

## ★ Thread 별 6 조건 평가 (★ 회장 verbatim · X1 자동수렴 게이트)

PR #152 unresolved 6건은 thread 별로 아래 6 조건 1:1 평가:

1. **expected_files 내부** (★ PR #152 expected_files scope 한정)
2. **credential expansion 0**
3. **permission expansion 0**
4. **forbidden path 0**
5. **scope expansion 0**
6. **real write/merge 위험 0**

★ 6조건 모두 충족 → X1 자동수렴 허용
★ 하나라도 불충족 → HOLD_FOR_CHAIR

## ★ 허용 작업 7 (★ 회장 verbatim)

1. PR #152 expected_files 내부 수정
2. regression 추가/재실행
3. commit + push
4. thread resolve
5. PR 상태 재조회
6. fresh Gemini nudge 1회
7. watcher 재부착

## ★ 금지 11 (★ 회장 verbatim)

1. PR #152 merge
2. auto-merge
3. PR #154 재검증
4. dev6 quarantine 해제
5. PR #151 처리
6. task-2691+b 재개
7. live settings.json 변경
8. hooks live 변경
9. dispatch.py 변경 (★ 전역 dispatch.py 금지 · PR #152 내부 import 결선 한정)
10. Axis runtime 변경
11. HARNESS_ENFORCED 전체 선언

## ★ PR #152 내부 허용 hardening scope (★ 회장 verbatim 결정 2 · 6개)

1. callback owner enforcement
2. actual cron owner cross-check
3. envelope 단독 PASS 차단
4. schedule_history + ANU key + 3 SID 일치 검증
5. NON_AUTHORITATIVE_SELF_COLLECTOR / AUTHORITATIVE_BUT_SESSION_DISCONTINUITY 분류 보강
6. regression 추가

## ★ PR #152 외부 분리 4 (★ 회장 verbatim · 본 task 에서 처리 금지)

1. durable registry (★ task-2687.reserved 대응)
2. 전역 dispatch.py 변경
3. live settings.json 변경
4. hooks live 변경

## ★ 필수 보고 9 필드 (★ 회장 verbatim)

1. PR #152 head SHA
2. unresolved 6건 6조건 평가 (★ thread별 PASS/HOLD)
3. 적용한 수정 파일
4. regression 결과
5. callback owner enforcement 검증 결과
6. schedule_history + ANU key + 3 SID 일치 여부
7. 8 우회 패턴 감지 여부
8. forbidden_action_count
9. PR #154 / PR #151 / task-2691+b 혼합 여부 (★ 0 evidence)

## ★ Preflight 4-step (★ audit 의무)

1. `git fetch origin main`
2. `git ls-remote origin main` → SHA 확인
3. `git rev-parse origin/main` → 동기화 검증
4. `gh api repos/<owner>/<repo>/branches/main` → 권위 확인

## ★ ANU normal callback 4-source 검증 강제

★ envelope 텍스트는 증거 아님 ([[feedback_callback_envelope_text_is_not_evidence_only_owner_key_and_inbound_260526]])

- envelope: `memory/events/anu_callback/task-2693-normal-completion.json`
- **owner_key**: ANU `c119085addb0f8b7` (★ self-key 금지 · fail-closed)
- **cokacdir --cron --session `53e89540-5bed-4692-a726-ed857820758a` 강제 호출**
- envelope ≤ 3900 bytes (UTF-8 wc -c)
- envelope 3 SID 일치 (★ chair_facing/collector/delivery 모두 `53e89540-...`)
- **4-source 모든 evidence 명기**: cron 등록 + schedule_history snippet + owner_key_verifier sha256 + chair_facing_sid

## allowed_resources

```yaml
allowed_resources:
  paths:
    - "PR #152 expected_files (★ task md dispatch 시 supplemental list 첨부)"
    - "dispatch/normal_fallback_callback_helper.py (★ PR #152 내부)"
    - "dispatch/prompt.py (★ PR #152 내부 · --session argv 결선 한정)"
    - "schemas/anu_normal_callback_envelope_v1.json (★ envelope 3 SID + ANU key enforcement)"
    - "utils/callback_authority_4source_validator.py (★ PR #152 신규)"
    - "utils/anu_callback_registrar.py (★ PR #152 내부 hardening)"
    - "utils/pr_watcher_terminal_state_classifier.py (★ AUTHORITATIVE_BUT_SESSION_DISCONTINUITY 분류 enum 보강)"
    - "tests/regression/callback_owner_enforcement/** (★ regression 추가)"
    - "tests/regression/callback_envelope_actual_cron_crosscheck/** (★ regression 추가)"
    - "tests/regression/callback_4source_validator/** (★ regression 추가)"
    - "memory/events/task-2693.*"
    - "memory/reports/task-2693.md"
    - "memory/tasks/task-2693.md"
  forbidden_paths:
    - "/home/jay/.claude/**"
    - "/usr/local/bin/cokacdir"
    - ".github/**"
    - "**/.env*"
    - "**/credentials*"
    - "settings.json"
    - "hooks/**"
    - "dispatch.py (★ 전역 dispatch.py 금지 · 회장 verbatim 금지 9번)"
    - "Axis/**"
    - "scripts/finish-task.sh (★ Phase 2 위임 · task-2691+1)"
    - "scripts/cleanup-stale-tasks.sh"
    - "scripts/cleanup-workspace.py"
    - "scripts/file_cleanup.py"
    - "scripts/task_scope.py"
    - "scripts/git-hooks/**"
    - "scripts/pre_push_guard.py"
    - "memory/plans/tasks/task-2568/**"
    - "memory/plans/tasks/task-2569/**"
    - "memory/specs/protection-list.json"
    - "memory/specs/protection-list.md"
    - "PR #154 파일 (★ overlap 0)"
    - "PR #151 파일 (★ overlap 0)"
    - "PR #149 파일 (★ overlap 0)"
    - "PR #150 파일 (★ overlap 0)"
    - "memory/tasks/task-2691+b.audit.md (★ HELD)"
    - "durable_registry/** (★ task-2687.reserved 분리)"
  commands:
    - "git fetch / git log / git diff / git show / git add / git commit / git push / git status / git rev-parse / git ls-remote"
    - "python3 -m pytest"
    - "python3 -c"
    - "gh pr view / gh api / gh pr edit / gh pr comment / gh api graphql"
    - "ls / cat / wc / grep / find / tail / head / printf / sha256sum"
    - "cokacdir --cron / cokacdir --cron-list / cokacdir --currenttime / cokacdir --cron-history"
  merge_policy: "pr_152_no_merge_no_auto_owner_enforcement_only"
  ttl_hours: 16
```

## ★ frozen anchors

- ANCHOR-1: "PR #152 expected_files 내부 한정 · expected_files 밖 0"
- ANCHOR-2: "callback envelope 텍스트는 증거 아님 · actual cron owner + chair-facing inbound 2-source 의무"
- ANCHOR-3: "actual owner_key = ANU c119085addb0f8b7 강제 · self-key 등록 fail-closed"
- ANCHOR-4: "envelope 3 SID + schedule_history + ANU key 3-field 일치 검증"
- ANCHOR-5: "8 우회 패턴 발견 즉시 HOLD_FOR_CHAIR (★ 텍스트 doctrine 0 · 코드 enforce)"
- ANCHOR-6: "PR #154 / PR #151 / PR #149 / task-2691+b 혼합 0"
- ANCHOR-7: "durable registry / 전역 dispatch.py / settings.json / hooks live 본 PR 외부 분리"
- ANCHOR-8: "X1 자동수렴 = 6조건 모두 충족 시만 · 하나라도 불충족 → HOLD_FOR_CHAIR"

## 종결

성공: **`PR_152_CALLBACK_OWNER_ENFORCEMENT_AND_UNRESOLVED_REMEDIATION_READY`**

★ 회장 verbatim 2026-05-26 dispatch 승인 도착 (★ executor dev2 오딘 + chair_authorization_id CHAIR-AUTH-PR152-CALLBACK-OWNER-ENFORCEMENT-UNRESOLVED6-20260526-JJONGS-IMPLEMENT-001 verbatim 발급 확정).

끝