{
  "marker_version": "v1",
  "marker_type": "anu_p2_finish_task_routing_callback_registration_after_failfast_read_only_evidence_3_case_comparison_260529",
  "recorded_at": "2026-05-29T14:25:00+09:00",
  "recorded_by": "ANU_chair_facing_session_p2_routing_evidence_collection_read_only",
  "source_attribution": "RECEIVED_INBOUND_THIS_SESSION (★ 회장 verbatim 'task-2707 자체 평가는 잠시 고정한다' + 'callback registration gate가 fail-fast 이후에 있어서 결과 회수가 끊기는 구조가 실제 production evidence로 확인되었는지' + '4 STEP read-only evidence 수집' + 'P2 설계 초안 작성 금지 · 코드 수정 금지 · dispatch 금지' · '끝' sentinel 정합)",

  "scope": "READ_ONLY_EVIDENCE_COLLECTION_ONLY",
  "anu_mutating_action_count": 0,
  "anu_forbidden_action_count": 0,
  "anu_p2_spec_draft_count": 0,
  "anu_code_modification_count": 0,
  "anu_dispatch_count": 0,

  "STEP_1_3_CASE_7_AXIS_COMPARISON": {

    "case_task_2626": {
      "task_date": "2026-05-21",
      "executor": "dev3 다그다 (lineage 기록)",
      "axis_1_callback_registration_location_finish_task_sh": "L1550 (★ python3 -m dispatch.normal_fallback_callback_helper launch --owner-key $T2626_ANU_KEY)",
      "axis_2_callback_unregistration_reason": "N/A (★ 등록 성공 · callback-launch.json verdict=PASS status=ANU_OWNED_READY)",
      "axis_3_finish_task_termination_point": "★ normal completion path (★ done 14:33 · finish-task.sh L1550 도달 · 종료 코드 0)",
      "axis_4_marker_creation_order": [
        "1. memory/events/task-2626.qc-result (14:28 · qc_result=PASS)",
        "2. memory/events/task-2626.qc-done (14:28)",
        "3. memory/events/task-2626.scope-guard-done (14:29)",
        "4. memory/events/task-2626.callback-launch.json (14:33 · 2505 bytes · verdict=PASS)",
        "5. memory/events/task-2626.completion.txt (14:33)",
        "6. memory/events/task-2626.done (14:33 · 395 bytes)",
        "7. memory/events/task-2626.done.notified (14:33 · 0 bytes)",
        "8. memory/events/task-2626.anu-notified (14:33 · 32 bytes)",
        "9. memory/events/task-2626.done.escalated (15:03 · 30분 후 · 별도 governance 트리거)"
      ],
      "axis_5_callback_helper_invocation": "★ INVOKED (★ dispatch.normal_fallback_callback_helper launch · argv = cokacdir --cron ... --at 10m --chat 6937032012 --key c119085addb0f8b7 --once)",
      "axis_6_callback_cron_registration": "★ REGISTERED (★ cron_id=task-2626::normal · owner_key=c119085addb0f8b7 ANU · collector_role=ANU · entry_path=cokacdir_cron_direct)",
      "axis_7_callback_result_retrieval_success": "★ SUCCESS (★ ANU 정상 수신 + done.notified + anu-notified marker 박힘)"
    },

    "case_task_2661": {
      "task_date": "2026-05-25",
      "executor": "dev5 마르둑",
      "task_purpose": "★ 본 task 자체가 callback normal fire delay 30s remediation Phase 2b — finish-task.sh L1369 의 callback registration 코드 직접 수정",
      "axis_1_callback_registration_location_finish_task_sh": "L1356-1380 영역 (★ task-2661 산물 · '--at 10m' → '--at $T2661_NORMAL_ABSOLUTE_AT' 30s 절대시각 변경 · 17 lines diff)",
      "axis_2_callback_unregistration_reason": "N/A (★ 등록 성공 path · 본 task 가 등록 logic 자체를 fix 한 task)",
      "axis_3_finish_task_termination_point": "★ normal completion path (★ done 16:08 · finish-task.sh L1369 도달 · 종료 코드 0)",
      "axis_4_marker_creation_order": [
        "1. memory/events/task-2661.dispatch-submitted-phase-2b-absolute-at-260525.json (15:53)",
        "2. memory/events/task-2661.callback-normal-fire-delay-remediation-p2b-result-260525.json (16:05 · 14835 bytes)",
        "3. memory/events/task-2661.done (16:08)",
        "4. memory/events/task-2661.done.escalated (16:38 · 30분 후 · OWNER PAT 부재 hold 별도 governance)",
        "5. memory/events/task-2661.phase-2b-chair-verified-hold-for-chair-260525.json (16:38)"
      ],
      "axis_5_callback_helper_invocation": "★ INVOKED (★ finish-task.sh L1369 fix 후 본 task 가 직접 helper launch · normal kind 30s absolute timestamp)",
      "axis_6_callback_cron_registration": "★ REGISTERED (★ task-2661 자체가 phase 2b regression 8/8 PASS evidence 박제 · cokacdir live runtime schedule_type=absolute status=ok)",
      "axis_7_callback_result_retrieval_success": "★ SUCCESS (★ ANU 정상 수신 후 chair_verified_hold_for_chair 별도 governance 진행)"
    },

    "case_task_2707": {
      "task_date": "2026-05-29",
      "executor": "dev1 헤르메스",
      "task_purpose": "★ FORMALIZATION_COMMIT_ONLY · dispatch_marker_writer.py signature formalize · 회장 verbatim",
      "axis_1_callback_registration_location_finish_task_sh": "L1532-1558 (★ # 5.5. callback runtime enforcement gate · L1550 dispatch.normal_fallback_callback_helper launch · ANU_KEY=c119085addb0f8b7)",
      "axis_2_callback_unregistration_reason": "★ finish-task.sh L377 exit 1 (★ QC tdd_check FAIL × 4 → qc_result=FAIL → L373 .failed marker 작성 → L377 즉시 종료 → L1532 callback gate 도달 0)",
      "axis_3_finish_task_termination_point": "★ L377 exit 1 (★ QC FAIL fail-fast · L1550 callback registration 까지 1155 라인 미도달)",
      "axis_4_marker_creation_order": [
        "1. memory/events/task-2707.dispatched-20260529.json (13:35 · dispatch.py 자동)",
        "2. memory/events/task-2707.formalization-commit-260529.json (13:39 · 봇 작성 · acceptance 7/7 PASS)",
        "3. memory/events/task-2707.callback-envelope.json (13:41 · 800 bytes · envelope 작성만)",
        "4. memory/events/task-2707.retry_count (13:48 · 1 byte)",
        "5. memory/events/task-2707.work-level-correction-lv1-260529.json (13:53 · 봇 work_level 정정 시도)",
        "6. memory/events/task-2707.escalate (14:01 · 212 bytes · system-auto · tdd_check 4회 FAIL)",
        "7. memory/events/task-2707.escalation-detail-260529.json (14:03 · 봇 상세 박제)",
        "★ memory/events/task-2707.callback-launch.json 부재 (★ helper launch 미실행 evidence)",
        "★ memory/events/task-2707.done 부재 (★ QC PASS path 미도달 evidence)",
        "★ memory/events/task-2707.done.escalated 부재 (★ done 자체 미생성)",
        "★ memory/events/task-2707.anu-notified 부재"
      ],
      "axis_5_callback_helper_invocation": "★ NOT_INVOKED (★ L1550 helper launch 도달 0 · finish-task.sh L377 fail-fast)",
      "axis_6_callback_cron_registration": "★ NOT_REGISTERED (★ cokacdir --cron-list ANU key c119085addb0f8b7 빈 schedules)",
      "axis_7_callback_result_retrieval_success": "★ FAIL (★ ANU normal callback envelope 미수신 · 회장 직접 수동 확인 path)"
    }
  },

  "STEP_2_4_CLASSIFICATION_DECISION": {
    "classification_chosen": "B = CALLBACK_REGISTRATION_AFTER_FAIL_FAST",
    "evidence_4_axis": [
      "★ finish-task.sh L355-377 = QC check + fail-fast exit 1 (★ source location verbatim)",
      "★ finish-task.sh L1532-1558 = callback runtime enforcement gate + L1550 helper launch (★ source location verbatim)",
      "★ L377 < L1550 = 1155 라인 거리 + 종료 1회 → fail-fast 이후 callback 등록 0",
      "★ 3 case production evidence: task-2626 / task-2661 = QC PASS → L1550 도달 → callback REGISTERED · task-2707 = QC FAIL → L377 exit → callback NOT_REGISTERED"
    ],
    "classification_A_rejected": "★ CALLBACK_REGISTRATION_BEFORE_FAIL_FAST 아님 — L377 < L1550 source location verbatim",
    "classification_C_rejected": "★ CONDITIONAL 아님 — 모든 fail-fast path (QC FAIL / scope-guard FAIL / 기타 exit 1) 가 L1532 이전 또는 callback gate 우회",
    "classification_D_rejected": "★ UNKNOWN 아님 — 3 case production evidence 명확 · source location 명확"
  },

  "STEP_3_P2_FINISH_TASK_ROUTING_EVIDENCE_SUMMARY": {

    "confirmed_fact_5": [
      "1. ★ finish-task.sh L377 (QC FAIL exit 1) 와 L1550 (callback registration) 사이 약 1155 라인 거리",
      "2. ★ 동일 패턴 finish-task.sh L451 (SCOPE-GUARD FAIL exit 1) · L483 (taskctl fail-closed exit 1) 도 L1550 보다 위 · 동일 callback skip cascade",
      "3. ★ task-2626 production evidence: QC PASS → 단일 normal completion path → callback-launch.json verdict=PASS · cron_id=task-2626::normal · 정상 회수",
      "4. ★ task-2661 production evidence: QC PASS → callback registration logic 자체 fix 후 정상 등록 · regression 8/8 PASS · 정상 회수",
      "5. ★ task-2707 production evidence: acceptance 7/7 PASS + forbidden 11/11 + commit success + 32/32 contract test PASS · 그러나 QC tdd_check FAIL × 4 (FORMALIZATION_COMMIT_ONLY doctrine 과 의미 불일치) → L377 exit → callback-launch.json 부재 · done 부재 · cron 미등록 · ANU 직접 수동 확인 path 유일"
    ],

    "timeline_verbatim_task_2707": [
      "2026-05-29 13:35:50 fire — bot session spawn",
      "2026-05-29 13:37 commit b5f65244 — body byte 0 변경 + header 1줄 comment",
      "2026-05-29 13:39 formalization-commit-260529.json 작성 — acceptance 7/7 PASS 박제",
      "2026-05-29 13:41 callback-envelope.json 작성 — 800 bytes ≤3900 PASS",
      "2026-05-29 13:45 finish-task.sh 1차 실행 — tdd_check FAIL",
      "2026-05-29 13:48 finish-task.sh 2차 실행 — tdd_check FAIL",
      "2026-05-29 13:53 work-level-correction-lv1-260529.json 작성 — task-timers.json work_level 정정 시도",
      "2026-05-29 13:56 finish-task.sh 3차 실행 — tdd_check FAIL (★ _get_task_level 은 task md 파일만 참조 · task-timers.json 정정 효과 0)",
      "2026-05-29 14:01 finish-task.sh 4차 실행 — tdd_check FAIL → system-auto-escalate → .escalate marker 212 bytes",
      "2026-05-29 14:03 escalation-detail-260529.json 작성 — 봇 상세 박제",
      "2026-05-29 14:05:45 bot session 종료 (status=ok · duration_ms=1792017 · ~30분)"
    ],

    "comparison_matrix_3_x_7": {
      "axis_1_callback_registration_location": {
        "task_2626": "L1550",
        "task_2661": "L1356-1380 (★ task-2661 자체가 fix · 현재 L1369)",
        "task_2707": "L1532-1558"
      },
      "axis_2_unregistration_reason": {
        "task_2626": "N/A (등록 성공)",
        "task_2661": "N/A (등록 성공)",
        "task_2707": "★ L377 exit 1 cascade · L1532 도달 0"
      },
      "axis_3_finish_task_termination": {
        "task_2626": "normal completion (exit 0)",
        "task_2661": "normal completion (exit 0)",
        "task_2707": "★ L377 fail-fast exit 1"
      },
      "axis_4_done_marker_present": {
        "task_2626": "YES (14:33)",
        "task_2661": "YES (16:08)",
        "task_2707": "★ NO (★ QC FAIL path 미진입)"
      },
      "axis_5_callback_helper_invoked": {
        "task_2626": "YES (L1550 helper launch)",
        "task_2661": "YES (L1369 helper launch)",
        "task_2707": "★ NO (L1550 미도달)"
      },
      "axis_6_cron_registered_anu_key": {
        "task_2626": "YES (cron_id=task-2626::normal)",
        "task_2661": "YES (cron_id=task-2661::normal absolute 30s)",
        "task_2707": "★ NO (ANU cron-list 빈 schedules)"
      },
      "axis_7_result_retrieval_success": {
        "task_2626": "SUCCESS",
        "task_2661": "SUCCESS",
        "task_2707": "★ FAIL (★ ANU normal callback envelope 미수신 · 회장 수동 확인 path)"
      }
    },

    "root_cause_verbatim_source_code_evidence": {
      "structural_design_choice_finish_task_sh": "★ QC verifier FAIL 시 fail-fast exit 1 (L377) · 이후 callback runtime enforcement gate (L1532-1558) 까지 1155 라인 거리",
      "exit_points_before_callback_gate_count": "★ 7+ 개 (L67/L80/L117/L132/L161/L192/L203/L208/L211/L222/L282/L321/L359/L367/L377/L448/L451/L470/L483/L492/L505 등 · grep evidence)",
      "callback_gate_unconditional_path_check": "★ callback registration L1550 은 정상 path 에서만 도달 · fail-fast 17+ 경로 모두 우회",
      "side_effect": "★ FAIL 케이스에서 ANU normal callback envelope 미수신 → 결과 회수 끊김 → 회장 수동 확인 의존",
      "this_is_intended_or_unintended": "★ intent 회장 결정 영역 (★ ANU 자체 판단 0 · evidence-only)"
    },

    "impact_evidence_3_axis": [
      "★ impact 1 — task-2707 의 acceptance 7/7 PASS + commit success + regression 0 evidence 가 ANU 직접 read-only 검증 없이는 회수 0 (★ 본 evidence collection round 가 그 회수 작업)",
      "★ impact 2 — P1-B closeout C2 caveat verbatim 'scope-guard 35 violations · finish-task.sh git diff main..HEAD · P1-B가 해결하려는 대상' 와 동일 routing layer 차단 패턴 (★ tdd_check vs scope-guard 둘 다 L1550 이전 fail-fast)",
      "★ impact 3 — FORMALIZATION_COMMIT_ONLY / formalization / lineage cleanup 등 의미가 'feature 추가 = 0' task type 들이 tdd_check 의미 정합 미달 → 동일 차단 cascade 재발 가능성"
    ],

    "candidate_contract_rule_3_chair_decision_pending_anu_self_pick_0": [
      "★ rule_candidate_A: 'callback registration 은 fail-fast 보다 먼저 보장되어야 한다' (★ 회장 verbatim 예시 정합)",
      "★ rule_candidate_B: 'fail-fast 직전이라도 envelope 가 작성되어 있으면 ANU callback cron 등록은 강제로 1회 실행되어야 한다'",
      "★ rule_candidate_C: 'QC FAIL · scope-guard FAIL · taskctl fail-closed 등 모든 종료 path 에서 callback registration 단계를 결정성 1회 통과해야 한다 (★ idempotent · best-effort safe-fail)'"
    ]
  },

  "STEP_4_TASK_2707_CLASSIFICATION_DECISION": {

    "question_verbatim": "★ task-2707은 실제 구현 실패인가? 아니면 구현 PASS + finish-task routing layer 차단인가?",

    "evidence_for_implementation_pass_8": [
      "1. commit b5f652440f76f4b3dec7d594fa3a23cbe8345da5 성공",
      "2. dispatch_marker_writer.py post-commit sha256 c387efc265... + post_minus_comment sha256 63a3360513... = pre-edit working tree sha256 verbatim MATCH (body byte 0 변경 PROOF)",
      "3. acceptance_criteria 7/7 PASS (★ formalization-commit-260529.json acceptance_criteria_check)",
      "4. forbidden_files 4/4 sha256 MATCH_ALL_YES (★ finish-task.sh / dispatch/__init__.py / session-watchdog.sh / .claude/settings.json HEAD~1==HEAD)",
      "5. forbidden_actions 11/11 OK (★ 회장 verbatim 모두 위반 0)",
      "6. regression smoke 3/3 PASS (★ import_ok + caller_kwarg_compat_ok + contract test 32/32)",
      "7. production baseline 3건 회귀 0 (★ task-2705+4 / task-2706 / task-2706+1 chair_authorization_id 정상 populate 패턴 유지)",
      "8. GitHub write 0 / PR 0 / branch push 0 / merge 0 (★ 회장 verbatim 정합)"
    ],

    "evidence_for_routing_fail_5": [
      "1. ★ memory/events/task-2707.callback-launch.json 부재 (★ task-2626 / task-2661 baseline 대비)",
      "2. ★ memory/events/task-2707.done 부재 (★ QC PASS path 미도달)",
      "3. ★ memory/events/task-2707.escalate 14:01 박힘 (★ QC tdd_check 4회 FAIL system-auto-escalate)",
      "4. ★ cokacdir --cron-list ANU key c119085addb0f8b7 빈 schedules (★ callback cron 등록 0)",
      "5. ★ tdd_check FAIL 사유 = 'audit-trail 변경 파일 4건 중 test 0 / impl 1' · 본 task FORMALIZATION_COMMIT_ONLY 에서 회장 verbatim '기능 추가 금지' 와 의미 불일치 = routing layer FAIL · 구현 layer FAIL 아님"
    ],

    "evidence_for_implementation_fail_0": "★ 0건 (★ 핵심 산출물 / acceptance criteria / regression smoke / forbidden files / forbidden actions 모두 PASS · production baseline 회귀 0)",

    "hypothesis_separation_2": [
      "★ hypothesis 1 (★ evidence 아님): tdd_check rule 자체가 'all impl change requires test' 단정 → FORMALIZATION_COMMIT_ONLY 와 의미 불일치 → routing rule 자체 보완 후보 (회장 결정 영역)",
      "★ hypothesis 2 (★ evidence 아님): task md L11 chair_authorization_id 표현이 task md L11 raw 텍스트 그대로 dispatch marker 에 박혀 cosmetic 비고 — 단 chair_auth_id 핵심 정합 OK (★ L4 evidence chain 영향 0)"
    ],

    "classification_4_enum_chair_verbatim": {
      "IMPLEMENTATION_FAIL": "★ REJECTED (★ implementation evidence 8건 모두 PASS · fail 사유 0건)",
      "IMPLEMENTATION_PASS_ROUTING_FAIL": "★ SELECTED (★ 구현 8건 PASS + routing 5건 FAIL 명확 분리 · finish-task.sh L377 fail-fast 이후 L1550 callback 미도달 evidence 명확)",
      "MIXED": "★ REJECTED (★ 구현/routing 명확 분리 · 동시 fail 영역 0)",
      "UNKNOWN": "★ REJECTED (★ evidence 3 case 명확 · classification matrix 7 축 명확)"
    },

    "verdict": "★ IMPLEMENTATION_PASS_ROUTING_FAIL (★ 회장 verbatim 4 enum 중 evidence-only 선택)",

    "anu_classification_authority_note": "★ ANU 자체 분류 결정 0 — 회장 verbatim 4 enum 중 evidence-only 선택 · 신규 분류 신설 0 · ANU 자체 판단 0"
  },

  "anu_strict_doctrine_compliance_8": [
    "★ ANU 자체 P2 설계 초안 작성 0 (★ 회장 verbatim 'P2 설계 초안 작성 금지')",
    "★ ANU 자체 코드 수정 0 (★ 회장 verbatim '코드 수정 금지')",
    "★ ANU 자체 dispatch 0 (★ 회장 verbatim 'dispatch 금지')",
    "★ ANU 자체 분류 결정 0 (★ STEP 2 4 enum + STEP 4 4 enum 모두 회장 verbatim 매핑)",
    "★ ANU 자체 task-2708 발의 0 (★ 회장 verbatim · 본 round)",
    "★ ANU 자체 candidate_contract_rule 작성 = 구현안 아님 · 규칙 문장 수준만 (★ 회장 verbatim 'candidate_contract_rule 은 구현안이 아니라 규칙 문장만 작성')",
    "★ hypothesis 분리 박제 (★ 회장 verbatim '추정은 hypothesis 로 분리')",
    "★ evidence-only 답변 (★ 회장 verbatim 'evidence 만 사용해서 답해라')"
  ],

  "anu_mutating_action_count_session_total": 1,
  "anu_mutating_action_details": "★ 본 marker write 1건 (★ read-only evidence 회수 박제 · 자체 분류 결정 0 · 회장 verbatim 매핑만)",
  "anu_forbidden_action_count": 0,
  "anu_self_full_accept_judgment_count": 0,
  "anu_self_p2_spec_draft_count": 0,
  "anu_dispatch_count": 0,

  "linked_markers": [
    "memory/events/task-2626.callback-launch.json (★ task-2626 callback 등록 성공 evidence · 2505 bytes · ANU_OWNED_READY)",
    "memory/events/task-2626.done (★ task-2626 정상 완료 evidence · 395 bytes)",
    "memory/events/task-2626.done.escalated (★ task-2626 별도 governance escalation · 30분 후)",
    "memory/events/task-2661.callback-normal-fire-delay-remediation-p2b-result-260525.json (★ finish-task.sh L1369 fix 본 task · 14835 bytes)",
    "memory/events/task-2661.done (★ task-2661 정상 완료 evidence)",
    "memory/events/task-2661.done.escalated (★ task-2661 별도 governance · OWNER PAT 부재)",
    "memory/events/task-2707.dispatched-spawn-verified-260529.json (★ task-2707 SPAWN_VERIFIED)",
    "memory/events/task-2707.formalization-commit-260529.json (★ task-2707 acceptance 7/7 PASS + body byte 0 변경 PROOF)",
    "memory/events/task-2707.callback-envelope.json (★ task-2707 envelope 작성만 · 800 bytes · cron 등록 0)",
    "memory/events/task-2707.escalate (★ task-2707 system-auto-escalate · tdd_check 4회 FAIL)",
    "memory/events/task-2707.escalation-detail-260529.json (★ 봇 deadlock path analysis 6 option · 회장 결정 4 option 박제)",
    "memory/events/task-2707.work-level-correction-lv1-260529.json (★ 봇 work_level 정정 시도 evidence)",
    "scripts/finish-task.sh L355-377 (★ QC fail-fast exit 1 verbatim source)",
    "scripts/finish-task.sh L448-451 (★ scope-guard fail-fast exit 1 verbatim source)",
    "scripts/finish-task.sh L483 (★ taskctl fail-closed exit 1 verbatim source)",
    "scripts/finish-task.sh L1532-1558 (★ callback runtime enforcement gate + L1550 helper launch verbatim source)",
    "memory/events/p1b_finish_task_profile_contract_accepted_with_known_caveats_260529.json (★ C2 caveat finish-task.sh git diff main..HEAD lineage 출처)"
  ]
}
