{
  "packet_version": "v1",
  "packet_type": "chair_signature_packet_per_axis",
  "recorded_at": "2026-05-24T12:05:00+09:00",
  "recorded_by": "ANU_chair_facing_session",
  "source_attribution": "LOG_LOOKUP_OR_SCHEDULE_HISTORY_VERIFICATION",
  "scope_note": "이번 패킷은 실행/적용 승인 packet이 아님. Axis 1 단독 서명 준비 단계 (회장 verbatim 2026-05-24). HARNESS_ENFORCED 전체 진입 아님.",

  "axis_id": 1,
  "axis_name": "callback_authority_gate",
  "axis_task_id_source": "task-2646",
  "axis_runtime_guarded_status": "RUNTIME_GUARDED_ACCEPTED",
  "axis_runtime_guarded_marker_ref": "memory/events/task-2646.closeout-260524.json",
  "axis_finalize_commit": "09372a419757da090b5260d24d769145f433caa4",
  "axis_branch": "task/task-2646-dev3",
  "axis_staged_worktree": "/home/jay/workspace/.worktrees/task-2646-dev3",

  "field_01_activation_scope": {
    "scope_type": "AXIS_BOUNDED",
    "scope_description": "task-2646 helper 3종 + dispatch.py shim + 2 schemas 만 live path 반영. axis 2/3 모듈 격리 유지.",
    "scope_modules_in": [
      "utils/callback_registration.py",
      "utils/callback_authority_validator.py",
      "utils/callback_source_cross_checker.py",
      "schemas/callback_authority_marker_v1.json",
      "schemas/callback_state_enum_v1.json",
      "dispatch.py (helper re-export shim 부분만)"
    ],
    "scope_modules_out": [
      "task-2644+1 hooks 3 _v2 (Axis 2)",
      "task-2644+1 utils 4 _v2 (Axis 2)",
      "task-2644+1 schemas 4 _v2 (Axis 2)",
      "task-2643 PreToolUse hooks (Axis 3)"
    ]
  },

  "field_02_activation_target_path": {
    "live_target_layout": "origin/main repo root + utils/ + schemas/ + dispatch.py",
    "staged_to_live_mapping": [
      {"staged": "task/task-2646-dev3:utils/callback_registration.py", "live": "main:utils/callback_registration.py"},
      {"staged": "task/task-2646-dev3:utils/callback_authority_validator.py", "live": "main:utils/callback_authority_validator.py"},
      {"staged": "task/task-2646-dev3:utils/callback_source_cross_checker.py", "live": "main:utils/callback_source_cross_checker.py"},
      {"staged": "task/task-2646-dev3:schemas/callback_authority_marker_v1.json", "live": "main:schemas/callback_authority_marker_v1.json"},
      {"staged": "task/task-2646-dev3:schemas/callback_state_enum_v1.json", "live": "main:schemas/callback_state_enum_v1.json"},
      {"staged": "task/task-2646-dev3:dispatch.py (helper shim re-export 부분만)", "live": "main:dispatch.py (helper shim re-export 부분만)"}
    ],
    "forbidden_target_paths_during_axis_1_signature": [
      "/home/jay/.claude/settings.json",
      "/home/jay/.claude/settings.local.json",
      "/usr/local/bin/cokacdir",
      ".github/**",
      "hooks/**",
      "schemas/callback_ledger_*.json",
      "schemas/callback_next_action_decision_*.json",
      "schemas/anu_state_*.json",
      "schemas/callback_batch_aggregation_*.json"
    ]
  },

  "field_03_chair_authorization_id_placeholder": {
    "field_name": "chair_authorization_id",
    "current_value": null,
    "expected_format": "CHAIR-AUTH-AXIS-1-YYYYMMDD-HHMMSS-<random>",
    "issuance_method": "회장 verbatim signature only · ANU 자동 생성 절대 금지",
    "issuance_condition": "회장이 본 packet 14 필드 검토 후 별도 verbatim 서명으로 발급",
    "binding": "chair_authorization_id == AXIS_1 only · Axis 2/3에 재사용 절대 불가",
    "absence_behavior": "chair_authorization_id IS null → HARNESS_ENFORCED 진입 fail-closed"
  },

  "field_04_real_cron_registration_required": {
    "required": true,
    "scope_under_signature": "Axis 1 helper가 dispatch.py + direct cron 양 경로에서 모두 호출되어 actual schedule owner key 검증을 실 cron 등록 직후 수행",
    "current_status": 0,
    "transition_trigger": "chair_authorization_id 발급 + Axis 1 live merge 완료 후 첫 dispatch cycle"
  },

  "field_05_registration_argv_generated_expected": {
    "expected_value": true,
    "current_task_2647_value": false,
    "verification_method": "helper.register_callback() 호출 후 returned argv 비교 (ANU key owner 명시 + executor self-key 거부 시 argv=None fail-closed)",
    "evidence_path_post_signature": "executor result.json::callback_registration_helper_selftest_argv"
  },

  "field_06_real_cron_id_fired_expected": {
    "expected_value": true,
    "current_task_2647_value": false,
    "verification_method": "cokacdir --cron 호출 응답 schedule_id 추출 + ANU key cron-history 조회 count>=1",
    "evidence_path_post_signature": "schedule_history/<cron_id>.log · cron-history ANU key count==1"
  },

  "field_07_schedule_history_verification_method": {
    "verification_command": "ls -la /home/jay/.cokacdir/schedule_history/<cron_id>.log",
    "verification_assertion": "file size > 0 AND bot_key_verifier sha256 == ANU key sha256",
    "absence_disposition": "SCHEDULE_HISTORY_PENDING → 60초 wait + 재조회 1회 · 여전히 absent → CALLBACK_MISSING 후보 (단 4 source 교차 필수)",
    "anu_key_sha256_expected": "fccaf57b393889a44c85255afa6e54332add24a569bf7c79ec96769b9662520d (task-2644+1 81D90950 / task-2645 EBEF96C8 ANU 등록 실증)"
  },

  "field_08_cron_history_owner_key_match_method": {
    "verification_command_anu": "/usr/local/bin/cokacdir --cron-history <cron_id> --chat 6937032012 --key c119085addb0f8b7",
    "verification_assertion_anu": "status:ok AND count==1",
    "verification_command_suspect_self": "/usr/local/bin/cokacdir --cron-history <cron_id> --chat 6937032012 --key <executor_self_key>",
    "verification_assertion_suspect_self": "status:error (access denied · self-key NOT owner)",
    "mismatch_disposition": "OWNER_KEY_MISMATCH → NON_AUTHORITATIVE_SELF_COLLECTOR fail-closed"
  },

  "field_09_result_artifact_path": {
    "path_template": "memory/events/<task_id>.result.json (executor self-attestation) + memory/system/.callback_ledger.jsonl (ANU collector independent attestation)",
    "minimum_fields_required": [
      "schema_version (v1 / v2)",
      "task_id",
      "callback_id",
      "schedule_id",
      "envelope_bytes_utf8",
      "actual_owner_key_verified (true)",
      "actual_owner_key_observed (ANU key)",
      "source_attribution (CALLBACK_COLLECTOR_PROCESSED)",
      "cross_check_state (OWNER_KEY_VERIFIED)",
      "control_plane_compliant (true)",
      "compliance_failures ([])",
      "live_infra_changes (0 또는 Axis 1 scope 명시값)",
      "regression_summary",
      "executor_commit_sha",
      "canonical_root (/home/jay/workspace)"
    ],
    "self_attestation_acceptance_blocked": "result.json self-attestation 만으로 acceptance 금지 — ANU collector independent attestation 교차 검증 필수"
  },

  "field_10_ledger_row_append_condition": {
    "ledger_path": "memory/system/.callback_ledger.jsonl",
    "append_condition_all_true": [
      "ANU collector independent spawn 확인",
      "envelope parsed + context recovered + terminal_state classified + next_action decided + branch taken (auto/chair/noop)",
      "source_attribution == CALLBACK_COLLECTOR_PROCESSED",
      "control_plane_compliant == true",
      "actual_owner_key_verified == true",
      "cross_check_state == OWNER_KEY_VERIFIED"
    ],
    "negative_condition_no_append": [
      "executor self-key 등록 → no ledger row (NON_AUTHORITATIVE_SELF_COLLECTOR)",
      "OWNER_KEY_MISMATCH → no ledger row",
      "REGISTRATION_HELPER_BYPASSED → no ledger row"
    ]
  },

  "field_11_live_callback_enforcement_value": {
    "axis_1_scope_value": 1,
    "axis_1_scope_meaning": "Axis 1 helper가 dispatch.py + direct cron 양 경로에서 actual owner key 검증 강제 (envelope ANU 표기만으로 PASS 금지)",
    "current_task_2647_value": 0,
    "transition_trigger": "chair_authorization_id 발급 + Axis 1 live merge + 첫 dispatch cycle helper 호출 확인",
    "scope_exclusion": "Axis 2/3 enforcement는 본 Axis 1 packet 범위 아님 · 별도 axis별 chair signature 필요"
  },

  "field_12_rollback_trigger": {
    "L1_rollback_trigger_30sec": [
      "Axis 1 helper 호출 시 unhandled exception (production crash)",
      "actual_owner_key 검증 false positive 발생 (ANU key를 mismatch로 잘못 표시)",
      "actual_owner_key 검증 false negative 발생 (self-key를 ANU로 잘못 표시)"
    ],
    "L1_rollback_action": "git revert <Axis_1_merge_commit_sha> + dispatch.py shim 비활성화 환경변수 토글",
    "L2_rollback_trigger_5min": [
      "Axis 1 적용 후 5분 내 첫 dispatch cycle에서 ledger row 누락 또는 self-key 패턴 재발",
      "regression baseline 변화 (task-2646 124 test 중 1건이라도 fail)"
    ],
    "L2_rollback_action": "Axis 1 live revert + task-2646 RUNTIME_GUARDED 복귀 + ANU 회장 보고",
    "chair_rollback_trigger": "회장 verbatim revert signature 시 즉시 rollback (회장 권한)"
  },

  "field_13_smoke_pass_criteria": {
    "smoke_test_set": [
      "S1: dispatch.py path + ANU key → register_callback() 호출 → actual_owner verification PASS → real schedule_id 생성 → ledger row appended",
      "S2: direct cron path + ANU key + helper 사용 → 동일 결과 (fixture 8 회장 정정 적용)",
      "S3: dispatch.py path + executor self-key (의도적 위반) → SELF_KEY_FAIL_CLOSED + argv=None + no cron registered",
      "S4: direct cron path + helper 미사용 (의도적 위반) → REGISTRATION_HELPER_BYPASSED detected",
      "S5: envelope ANU 표기 + actual owner self-key 시뮬레이션 → OWNER_KEY_MISMATCH detected",
      "S6: 4 source cross-check (schedule_history present + cron-history ANU key match + envelope ANU + result.json appended) all PASS"
    ],
    "smoke_pass_threshold": "S1-S6 모두 PASS (6/6) · 1건이라도 fail 시 L1 rollback",
    "smoke_duration_max": "5분 (S1-S6 합산)",
    "regression_baseline_unchanged": "task-2646 worktree regression 124 test 그대로 PASS 유지"
  },

  "field_14_forbidden_expressions_7_reconfirmed": [
    "callback system verified",
    "HARNESS_ENFORCED",
    "real callback passed",
    "normal callback 발동 완료",
    "normal callback 수신 완료",
    "real cron fired",
    "live callback enforcement 완료"
  ],

  "current_forbidden_actions_during_packet_prep": {
    "live_settings_modified": 0,
    "live_cokacdir_modified": 0,
    "dispatch_py_modified": 0,
    "hooks_utils_schemas_live_path_modified": 0,
    "real_cron_registered": 0,
    "chair_authorization_id_generated": 0,
    "harness_enforced_declared": 0,
    "callback_system_verified_phrase_used": 0,
    "commit_push_pr_merge": 0
  },

  "completion_state": "AXIS_1_SIGNATURE_PACKET_READY",
  "next_action_required": "회장 verbatim per-axis signature (axis 1 단독 · chair_authorization_id 발급 시 HARNESS_ENFORCED 진입 가능) · ANU 자동 생성 절대 금지",
  "axis_2_packet_status": "NOT_PREPARED (회장 axis 1 signature 후 axis 2 packet 준비 단계 진입)",
  "axis_3_packet_status": "NOT_PREPARED",
  "chair_directive_ref": "회장 verbatim 2026-05-24 Axis 1 chair signature packet 준비 · 실행/적용 승인 아님"
}
