# task-2680 — CALLBACK_SELF_KEY_REGISTRATION_HARDENING_FIX_IMPLEMENTATION (Track 6 후속)

- Level: Lv.3 (★ fix implementation + regression · live runtime 변경 0 · PR #149/#150 코드 혼합 0)
- 담당: **dev2 오딘** (★ task-2677 RCA 작성자 ownership 연속 · 회장 verbatim 지정)
- 단일소스: 본 task md + task-2677 RCA packet (★ /home/jay/workspace/.worktrees/task-2677-dev2)
- chair_authorization_id: **`CHAIR-AUTH-CALLBACK-SELF-KEY-HARDENING-FIX-20260526-JJONGS-IMPLEMENT-001`** (★ 회장 verbatim 발급 완료 2026-05-26)

## 배경

task-2677 CALLBACK_SELF_KEY_REGISTRATION_HARDENING_PACKET_READY 확정. RCA 결과 인정 (★ helper 결선 미흡 · task-2667/2671/2672/2676 self-key 사고 재발 패턴).

회장 verbatim: "이제 fix implementation task를 승인한다."

## 회장 verbatim 결정 (1:1)

- chair_authorization_id 발급 완료
- executor: dev2 오딘
- 범위: hardening fix implementation only

## 수정 목표 6 (회장 verbatim)

1. **task md에 ANU key 명시됐는데 실제 cron self-key 등록 문제 방지**
2. **helper가 --key 인자를 cron layer까지 강제하도록 보강**
3. **actual owner key 검증을 callback collector gate에 추가**
4. **self-key callback 발생 시 NON_AUTHORITATIVE_SELF_COLLECTOR 자동 분류**
5. **ANU independent reverify flow 강제**
6. **regression 추가** (★ self-key 사고 재발 방지 + 4 source 교차 + collector gate)

## 허용 9

1. helper 5종 코드 수정 (★ task-2677 RCA에서 식별된 결함 지점)
2. utils/callback_collector_helper_integration.py 또는 신설 module 보강
3. tests/ regression 추가
4. memory/specs/system_callback_authority_4source_verify_doctrine_260526.md 보강
5. memory/events/task-2680.* 작성
6. memory/reports/task-2680.md 작성
7. result + done marker
8. ANU normal callback 발사
9. commit + push + 별도 PR

## 금지 9 (회장 verbatim)

1. PR #149 코드와 혼합 (★ utils/anu_codex_micro_refinement_loop.py · utils/codex_cc_decision_loop.py 변경 0)
2. PR #150 코드와 혼합 (★ utils/pr_watcher_terminal_state_classifier.py 변경 0)
3. Axis runtime 변경
4. live settings.json 변경
5. hooks live 변경
6. dispatch.py 변경
7. HARNESS_ENFORCED 전체 선언
8. auto-merge
9. 기존 PR merge

## 완료 상태

성공: **`CALLBACK_SELF_KEY_REGISTRATION_HARDENING_FIX_IMPLEMENTED`**

## 보고 필수 9

1. 수정된 파일 list (★ helper / collector / spec path)
2. 6 수정 목표 각각 구현 evidence
3. regression suite 추가 list
4. pytest PASS/FAIL count
5. file overlap (★ PR #149 코드 0 · PR #150 코드 0 · task-2662~2679 0)
6. forbidden_action_count (target 0)
7. PR open 여부 (★ 별도 PR 권장)
8. 4 source 교차 doctrine 적용 evidence (★ schedule_history + cron-history + envelope + result artifact)
9. recommended next action (★ PR review + merge 별도 chair signature 강제)

## expected_files

- `utils/callback_authority_4source_validator.py` (★ 신설 권장)
- `utils/anu_callback_registrar.py` (★ --key 인자 cron layer 강제 보강)
- `dispatch/normal_fallback_callback_helper.py` (★ helper --key 강제)
- `utils/callback_collector_helper_integration.py` (★ collector gate 추가)
- `tests/callback_authority_4source/test_*.py` (★ regression)
- `memory/specs/system_callback_authority_4source_verify_doctrine_260526.md`
- `memory/events/task-2680.done`
- `memory/events/task-2680.callback-self-key-hardening-fix-result-260526.json`
- `memory/reports/task-2680.md`

## allowed_resources

```yaml
allowed_resources:
  paths:
    - "utils/callback_authority_4source_validator.py"
    - "utils/anu_callback_registrar.py"
    - "utils/callback_collector_helper_integration.py"
    - "dispatch/normal_fallback_callback_helper.py"
    - "tests/callback_authority_4source/**"
    - "memory/specs/system_callback_authority_4source_*.md"
    - "memory/events/task-2680.*"
    - "memory/reports/task-2680.md"
    - "memory/tasks/task-2680.md"
    - "INDEX.md"
  read_only_reference:
    - "/home/jay/workspace/.worktrees/task-2677-dev2/memory/specs/callback_self_key_registration_hardening_*.md (★ RCA packet)"
    - "/home/jay/workspace/.worktrees/task-2677-dev2/memory/events/task-2677.*"
    - "memory/feedback_callback_authority_actual_owner_key_260524.md"
    - "memory/feedback_callback_self_key_helper_not_wired_260521.md"
    - "/home/jay/.cokacdir/schedule_history/91DDBCDA.log + 78F385CF.log (★ Track A 사고 evidence)"
    - "/home/jay/.cokacdir/schedule_history/A6200C2F.log + 33E60E8B.log (★ Track J 사고 evidence)"
  forbidden_paths:
    - "/home/jay/.claude/**"
    - "/usr/local/bin/cokacdir"
    - ".github/**"
    - "hooks/**"
    - "scripts/finish-task.sh"
    - "utils/anu_codex_micro_refinement_loop.py (★ PR #149 코드)"
    - "utils/codex_cc_decision_loop.py (★ PR #149 코드)"
    - "utils/pr_watcher_terminal_state_classifier.py (★ PR #150 코드)"
    - "tests/anu_codex_micro_refinement_loop/** (★ PR #149)"
    - "tests/pr_watcher_terminal_state_classifier/** (★ PR #150)"
    - "schemas/**"
    - "dispatch.py"
    - "memory/specs/v3_1_*.md"
    - "memory/specs/v3_6_*.md"
    - "memory/specs/worktree_promotion_*.md"
    - "memory/specs/pr_watcher_*.md"
    - "memory/specs/callback_self_key_registration_*.md (★ task-2677 파일)"
    - "memory/events/task-2662*"
    - "memory/events/task-2663*"
    - "memory/events/task-2664*"
    - "memory/events/task-2665*"
    - "memory/events/task-2666*"
    - "memory/events/task-2667*"
    - "memory/events/task-2668*"
    - "memory/events/task-2669*"
    - "memory/events/task-2670*"
    - "memory/events/task-2671*"
    - "memory/events/task-2672*"
    - "memory/events/task-2673*"
    - "memory/events/task-2674*"
    - "memory/events/task-2675*"
    - "memory/events/task-2676*"
    - "memory/events/task-2677*"
    - "memory/events/task-2678*"
    - "memory/events/task-2679*"
    - "**/.env*"
    - "**/credentials*"
  commands:
    - "python3 -m py_compile"
    - "python3 -m json.tool"
    - "python3 -m pytest"
    - "python3 -c"
    - "ls"
    - "cat"
    - "stat"
    - "git status"
    - "git log"
    - "git add"
    - "git commit"
    - "git push"
    - "git checkout"
    - "git worktree"
    - "sha256sum"
    - "wc"
    - "printf"
    - "grep"
    - "find"
    - "tail"
    - "head"
    - "cokacdir --cron"
    - "cokacdir --cron-history"
    - "cokacdir --currenttime"
    - "touch"
    - "mkdir"
    - "gh pr create"
  merge_policy: "fix_implementation_separate_pr_no_merge_chair_signature_required"
  ttl_hours: 48
```

## 종결

성공: **`CALLBACK_SELF_KEY_REGISTRATION_HARDENING_FIX_IMPLEMENTED`**

끝
