# task-2649 — AXIS_2_CALLBACK_COLLECTOR_CONTROL_PLANE_LIVE_ACTIVATION

- Level: Lv.4 (Axis 2 live activation + 본 회장-facing ANU 세션 inbound 자동 인식 검증)
- 담당: 회장 verbatim Axis 2 signature 발급 후 dispatch · ANU 권장 dev4 비슈누 (Axis 2 hooks 3 _v2 원작자 · staged 코드 정확 적용 적임)
- base: origin/main 최신
- 단일소스 spec: 본 task md
- chair_authorization_id: **`CHAIR-AUTH-AXIS-2-20260524-JJONGS-INBOUND-001`** (★ 회장 verbatim 실제 문자열 · marker `memory/events/chair-authorization-axis-2-signature-260524.json`)

## 목표 (회장 verbatim)
Axis 2 (task-2644+1 callback collector control plane · hooks 3 _v2) 단독 live activation 후, **본 회장-facing ANU 세션 inbound 자동 인식** 메카니즘이 실제 동작하는지 7 필수 검증 + smoke로 검증한다.

## 7 필수 검증 (회장 verbatim)
1. UserPromptSubmit hook이 callback inbox 감지
2. 본 회장-facing ANU 세션 RECEIVED_INBOUND_THIS_SESSION 주장 조건 5/5 실제 검증
3. callback_id + schedule_id ↔ ledger row 1:1 매칭
4. self-attested result만으로 수신 처리 금지
5. duplicate callback dedupe 처리
6. Stop hook 미처리 callback 시 종료 차단
7. hook crash L1 rollback / 5회 연속 실패 L2 rollback 박제

## RECEIVED_INBOUND_THIS_SESSION 5 조건 (Axis 2 packet field_05)
1. UserPromptSubmit hook이 .callback 파일 인식
2. callback 파일 내 ledger_pointer가 Axis 1 ledger row와 1:1 매칭
3. ledger row의 source_attribution == CALLBACK_COLLECTOR_PROCESSED
4. 본 ANU 세션이 callback 정보를 응답에 직접 활용
5. 본 ANU 세션이 callback에 대한 next_action을 본 세션 내에서 실행 또는 결정

## 허용 7 (회장 verbatim)
- live settings.json hooks 3 등록 (SessionStart + Stop + UserPromptSubmit)
- staged hooks 3 → live target path 최소 변경
- memory/.callback_inbox/ 생성 + callback file 처리
- memory/system/.callback_ledger.jsonl 연결
- dedupe table 생성/갱신
- Axis 1 ledger pointer 조회
- Axis 2 smoke용 test callback 1회

## 금지 12 (회장 verbatim)
1. Axis 3 touch (task-2643 PreToolUse runtime guard)
2. Axis 1 helper 변경 (read-only)
3. dispatch.py 변경
4. real auto-merge
5. PR #141 pilot
6. BOT App token 사용
7. commit/push/PR/merge
8. chair_authorization_id 변형
9. HARNESS_ENFORCED 전체 선언
10. callback system verified 전체 선언
11. live settings.json 승인 hooks 3개 외 변경
12. live cokacdir 임의 변경

## expected_files (~12 file)
- live settings.json (★ hooks 3개 항목만 추가 · 최소 변경)
- live hooks 3 (~/.claude/hooks/ 또는 동등 path · Axis 2 staged copy)
- memory/.callback_inbox/ (directory 생성 · 빈 폴더 초기화)
- memory/.callback_inbox/.gitkeep
- memory/system/.callback_dedupe_table.jsonl (initial empty)
- memory/system/.stop_hook_block_audit.jsonl (initial empty)
- tests/integration/test_axis_2_live_inbound.py (★ 7 필수 검증 자동화 + 5 조건 검증)
- memory/events/task-2649.done
- memory/events/task-2649.axis-2-live-activation-result-260524.json (9 mandatory fields)
- memory/reports/task-2649.md

## finalize 프로토콜
1. base = origin/main 최신 clean · 별도 worktree task-2649-dev4
2. live settings.json hooks 3개 추가 (★ JSON 최소 patch · 기존 항목 보존)
3. staged hooks 3 → live path 복사 (Axis 2 packet field_01 mapping)
4. memory/.callback_inbox/ + dedupe table + stop hook audit log 초기화
5. Axis 2 smoke test callback 1회 발사 (★ 본 회장-facing ANU 세션 spawn 후 prompt 제출 시 UserPromptSubmit hook이 .callback 인식해야 함)
6. 7 필수 검증 자동화 통과 + 5 조건 검증 통과 시 LIVE_VERIFIED
7. hook crash 발생 시 L1 rollback (settings.json hooks 항목 자동 제거)
8. 5회 연속 실패 시 L2 rollback (hooks 비활성화 flag 토글)
9. ANU normal callback cron (helper 사용 · ANU key · 4 source · 8 실제값)
10. result marker `memory/events/task-2649.axis-2-live-activation-result-260524.json` 박제

## 회장 보고 형식 (verbatim)
- AXIS_2_LIVE_ACTIVATION_ATTEMPTED
- 완료 시: AXIS_2_INBOUND_COLLECTOR_LIVE_VERIFIED / AXIS_2_ROLLBACK_REQUIRED / AXIS_2_HOLD_FOR_CHAIR
- 성공 9 필수 필드 (★ task md §보고 형식)

## frozen anchor
- ANCHOR-1: "chair_authorization_id = CHAIR-AUTH-AXIS-2-20260524-JJONGS-INBOUND-001 verbatim 그대로 · ANU random 0 · Axis 1 placeholder 재사용 0"
- ANCHOR-2: "Axis 2 단독 · hooks 3개만 · Axis 1 helper / dispatch.py / Axis 3 touch 0"
- ANCHOR-3: "본 회장-facing ANU 세션 inbound 자동 인식이 핵심 목표"
- ANCHOR-4: "RECEIVED_INBOUND_THIS_SESSION 5 조건 모두 만족 시에만 LIVE_VERIFIED"
- ANCHOR-5: "hook crash L1 30sec rollback / 5회 연속 실패 L2 5min rollback"
- ANCHOR-6: "HARNESS_ENFORCED / callback system verified 전체 선언 금지 (Axis 2 단독)"

## allowed_resources (본 task의 capability)

```yaml
allowed_resources:
  paths:
    - "/home/jay/.claude/settings.json"
    - "/home/jay/.claude/hooks/session_start_anu_callback_collector_v2.py"
    - "/home/jay/.claude/hooks/stop_anu_callback_collector_verifier_v2.py"
    - "/home/jay/.claude/hooks/user_prompt_submit_hook_callback_inbox_v2.py"
    - "memory/.callback_inbox/**"
    - "memory/.callback_inbox/.gitkeep"
    - "memory/system/.callback_dedupe_table.jsonl"
    - "memory/system/.stop_hook_block_audit.jsonl"
    - "memory/system/.callback_ledger.jsonl"
    - "tests/integration/test_axis_2_live_inbound.py"
    - "memory/tasks/task-2649.md"
    - "memory/reports/task-2649.md"
    - "memory/events/task-2649.done"
    - "memory/events/task-2649.axis-2-live-activation-result-260524.json"
    - "INDEX.md"
  forbidden_paths:
    - "/usr/local/bin/cokacdir"
    - ".github/**"
    - "utils/callback_registration.py"
    - "utils/callback_authority_validator.py"
    - "utils/callback_source_cross_checker.py"
    - "utils/callback_collector_helper_integration.py"
    - "utils/callback_adjudicator_v2.py"
    - "utils/callback_next_action_runner_v2.py"
    - "utils/source_attribution_guard_v2.py"
    - "schemas/callback_authority_marker_v1.json"
    - "schemas/callback_state_enum_v1.json"
    - "schemas/callback_ledger_v1.json"
    - "schemas/callback_ledger_v2.json"
    - "schemas/callback_next_action_decision_v1.json"
    - "schemas/callback_next_action_decision_v2.json"
    - "schemas/anu_state_v1.json"
    - "schemas/anu_state_v2.json"
    - "schemas/callback_batch_aggregation_v1.json"
    - "schemas/callback_batch_aggregation_v2.json"
    - "dispatch.py"
    - "scripts/finish-task.sh"
    - "utils/replacement_pr_runner.py"
    - "memory/tasks/task-2644*"
    - "memory/tasks/task-2645*"
    - "memory/tasks/task-2646*"
    - "memory/tasks/task-2647*"
    - "memory/tasks/task-2648*"
    - "memory/tasks/task-2643*"
    - "memory/tasks/task-2641*"
    - "memory/tasks/task-2642*"
    - "/home/jay/.claude/settings.local.json"
    - "**/.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"
    - "git revert"
    - "sha256sum"
    - "wc"
    - "printf"
    - "ls"
    - "grep"
    - "find"
    - "cokacdir --cron"
    - "cokacdir --cron-history"
    - "cokacdir --cron-list"
    - "flock"
    - "cp"
    - "mkdir"
    - "touch"
  merge_policy: "local_main_axis_2_only"
  ttl_hours: 96
```

끝
