# task-2644.revalidation — ANU_INDEPENDENT_REVALIDATION_FOR_TASK_2644

- Level: Lv.4 (NON_AUTHORITATIVE_SELF_COLLECTOR 사후 독립 재검증 · task-2646 helper 기준 강제)
- 담당: 회장 결정 dev6 페룬 (★ dev1 헤르메스 = 원작자/self-collector 발생 봇 재투입 금지 · dev2 오딘 = task-2645 closeout 대기 제외)
- base: origin/main 최신
- 단일소스 spec: 본 task md (회장 verbatim)
- 회장 결정 (2026-05-24 verbatim): task-2646 RUNTIME_GUARDED_ACCEPTED 후속. task-2644 NON_AUTHORITATIVE_SELF_COLLECTOR 산출물 보존 + ANU 독립 재검증.

## 결함명 (회장 사후 박제)
`SELF_COLLECTOR_REVALIDATION_REQUIRED`

## 목표 (회장 verbatim)
헤르메스 산출물을 **삭제하지 않고 보존**한 상태에서, task-2646 helper/authority validator 기준으로 ANU 독립 재검증을 수행한다.

## 검증 대상 (원본 task-2644 산출물 — 절대 수정 금지)
- 원본 worktree: `/home/jay/workspace/.worktrees/task-2644-dev1/` (read-only)
- 원본 branch: `task/task-2644-dev1`
- 원본 report: `memory/reports/task-2644.md`
- 원본 .done: `memory/events/task-2644.done`
- 원본 callback cron: `9CAB9D33` (★ self-key c38fb9955616e24d 등록 — NON_AUTHORITATIVE 사고)
- 원본 ledger entry: `memory/system/.callback_ledger.jsonl` 의 9CAB9D33 row (★ 봇 자가 박제 — 무효)
- 원본 marker: `memory/events/task-2644.callback-authority-260524.json` (ANU 박제 NON_AUTHORITATIVE_SELF_COLLECTOR)

## 10 필수 조건 (회장 verbatim 1:1)
1. task-2646 helper/authority validator 기준 사용 (`utils/callback_registration.py` + `utils/callback_authority_validator.py` + `utils/callback_source_cross_checker.py`)
2. actual schedule owner key == ANU key (`c119085addb0f8b7`) 확인
3. self-key callback이면 즉시 FAIL
4. 4 source cross-check 필수 (schedule_history + cron-history + envelope + result artifact)
5. cron-list 단독 판단 금지
6. result artifact self-attestation만으로 acceptance 금지 (★ 헤르메스 자가 박제 collector_session_id=9CAB9D33 / source=CALLBACK_COLLECTOR_PROCESSED / control_plane_compliant=true 모두 무효)
7. task-2644 기존 산출물 **보존** (worktree / commits / report / .done / ledger row 절대 삭제·수정 금지)
8. expected_files exact 재확인 (원본 task-2644.md 산출물 15개 + 회장 보강 5 + fixture 8)
9. regression 재실행 (헤르메스의 conftest/dispatch 변경 재현 위험 — task-2646 forbidden incident 박제 doctrine 적용 + allowed_resources 격리)
10. callback control-plane protocol 충족 여부 재판정 (callback_adjudicator + next_action_runner + .callback_ledger + source_attribution_guard)

## 분류 기준 (회장 verbatim 4 verdict)
- `AUTHORITATIVE_REVALIDATED`: ANU key owner + 4 source cross-check PASS + regression PASS + control-plane fields 충족
- `NON_AUTHORITATIVE_SELF_COLLECTOR`: self-key 또는 owner mismatch → 기존 분류 유지 (회장 결정 별도)
- `CODE_OK_CALLBACK_AUTHORITY_FAIL`: 산출물 PASS / callback authority 실패
- `REVALIDATION_FAIL`: 산출물 자체 실패

## 4 source 재판정 (helper 사용 강제)
| source | 조회 대상 | 기대값 |
|---|---|---|
| schedule_history | `/home/jay/.cokacdir/schedule_history/9CAB9D33.log` | `bot_key_verifier` sha256 → ANU key 매핑 X (dev1 self) |
| cron-history (ANU key) | `cokacdir --cron-history 9CAB9D33 --key c119085addb0f8b7` | access denied 예상 |
| cron-history (dev1 self-key) | `cokacdir --cron-history 9CAB9D33 --key c38fb9955616e24d` | PASS 예상 (★ self-key 확정 신호) |
| envelope | 9CAB9D33 prompt 원문 | `collector_key=c119085addb0f8b7` 텍스트 명시 |
| result artifact | `task-2644.callback-authority-260524.json` + ledger row | ANU 박제 NON_AUTHORITATIVE + 봇 자가 박제 무효 처리 |

→ helper의 `validate_authority`로 envelope vs actual owner 비교 → `OWNER_KEY_MISMATCH` → marker `NON_AUTHORITATIVE_SELF_COLLECTOR` (예상)
→ **단, 봇 산출물 / regression / control-plane fields는 별도 PASS 가능성** → `CODE_OK_CALLBACK_AUTHORITY_FAIL` 분류 후보

## 자동 진행 허용
- task-2646 helper 사용 재검증
- ANU-Codex loop 자동수렴
- 4 source 교차 검증

## 자동 진행 금지 (회장 verbatim 7)
- task-2644 산출물 **삭제** 금지 (worktree / commits / report / .done / ledger / marker 일체)
- dev1 헤르메스 재투입 금지
- push/PR/merge 금지
- live settings/cokacdir/dispatch.py operational activation 금지
- BOT App token / chair_authorization / real auto-merge / PR #141 pilot 금지
- merge execution 금지
- ANU 직접 CI/Gemini polling 금지 (spawn verification 2신호 1회만 허용)

## expected_files (task-2644.revalidation 범위 · ~10 file 추정)
- 신규 utils 1 (callback_revalidation_runner.py — task-2646 helper wrap)
- 신규 schemas 1 (revalidation_verdict_v1.json)
- 신규 fixtures 4 (verdict 4 enum × evidence/expected/PROVENANCE)
- 신규 regression 1
- 신규 보고서 (revalidation_report)
- 신규 .done event
- 신규 marker (task-2644.revalidation-verdict-260524.json)

## finalize 프로토콜 (★ BOT App token 부재 — 로컬 한정)
1. base = origin/main 최신 clean
2. 신규 utils + schema + fixture + regression PASS · 기존 baseline 유지
3. **로컬 commit 만** (push/PR/merge 금지)
4. `/home/jay/workspace/memory/events/task-2644.revalidation.done` 생성
5. `/home/jay/workspace/memory/reports/task-2644.revalidation.md` 보고서 작성
6. `/home/jay/workspace/memory/events/task-2644.revalidation-verdict-260524.json` marker 작성 (4 verdict enum 중 하나)
7. ANU normal callback cron 강제 등록 (★ task-2646 helper 사용 self-test):
   - collector key: c119085addb0f8b7 (ANU)
   - helper.register_callback() 사용 → actual owner key 검증 등록 직후 → OWNER_KEY_VERIFIED
   - envelope UTF-8 ≤3900 bytes hard limit (3500~3900 WARNING_BUT_ALLOWED 발사 가능)
   - canonical_root=/home/jay/workspace
   - result.json 9 필드 + actual_owner_key_verified + revalidation_verdict
8. validate_spawn_callback_contract + task-2646 helper self-test
9. executor 시작/종료 ts + 로컬 commit SHA 명기

## 회장 보고 형식 (11 필드 1:1)
- executor:
- schedule_id:
- source attribution:
- actual owner key:
- authority classification:
- expected_files exact:
- regression:
- control-plane fields:
- 4 source cross-check:
- revalidation verdict:
- forbidden action count:

## frozen anchor
- ANCHOR-1: "헤르메스 산출물 보존 · ANU 독립 재검증만 수행"
- ANCHOR-2: "task-2646 helper/authority validator 기준 사용 강제 · 자체 구현 금지"
- ANCHOR-3: "self-key callback 즉시 FAIL · result artifact self-attestation acceptance 금지"
- ANCHOR-4: "4 source cross-check 필수 · cron-list 단독 판단 금지"
- ANCHOR-5: "분류 4 verdict (AUTHORITATIVE_REVALIDATED / NON_AUTHORITATIVE_SELF_COLLECTOR / CODE_OK_CALLBACK_AUTHORITY_FAIL / REVALIDATION_FAIL)"
- ANCHOR-6: "dev1 헤르메스 재투입 금지 · dev6 페룬 권장"
- ANCHOR-7: "task-2644 산출물 삭제 일체 금지"

## allowed_resources (본 task의 capability)

```yaml
allowed_resources:
  paths:
    - "utils/callback_revalidation_runner.py"
    - "schemas/revalidation_verdict_v1.json"
    - "tests/fixtures/task_2644_revalidation/**"
    - "tests/regression/task_2644_revalidation/**"
    - "tests/test_callback_revalidation_runner*.py"
    - "memory/tasks/task-2644.revalidation.md"
    - "memory/reports/task-2644.revalidation.md"
    - "memory/events/task-2644.revalidation.done"
    - "memory/events/task-2644.revalidation-verdict-260524.json"
    - "INDEX.md"
  forbidden_paths:
    - "/home/jay/.claude/settings.json"
    - "/home/jay/.claude/settings.local.json"
    - "/usr/local/bin/cokacdir"
    - ".github/**"
    - "memory/events/*.cron-*"
    - "memory/tasks/task-2644.md"
    - "memory/tasks/task-2645*"
    - "memory/tasks/task-2646*"
    - "memory/tasks/task-2643*"
    - "memory/tasks/task-2641*"
    - "memory/tasks/task-2642*"
    - "memory/reports/task-2644.md"
    - "memory/events/task-2644.done"
    - "memory/events/task-2644.callback-authority-260524.json"
    - "memory/system/.callback_ledger.jsonl"
    - "memory/specs/system_anu_callback_collector_control_plane_spec_260524.md"
    - "memory/specs/system_real_merge_executor_wiring_spec_260523.md"
    - "scripts/finish-task.sh"
    - "utils/callback_registration.py"
    - "utils/callback_authority_validator.py"
    - "utils/callback_source_cross_checker.py"
    - "utils/replacement_pr_runner.py"
    - "dispatch.py"
    - "hooks/**"
    - "**/.env*"
    - "**/credentials*"
  commands:
    - "pytest"
    - "python3 -m py_compile"
    - "python3 -m json.tool"
    - "git status"
    - "git diff"
    - "git add"
    - "git commit"
    - "git log"
    - "git checkout"
    - "git branch"
    - "git worktree"
    - "sha256sum"
    - "wc"
    - "printf"
    - "ls"
    - "grep"
    - "find"
    - "cokacdir --cron-history"
  merge_policy: "local_only"
  ttl_hours: 72
```

끝
