{
  "schema": "automation_capability_matrix_v1",
  "updated_at": "2026-06-05T14:10:00Z",
  "task": "task-2729+1",
  "phase": "P0-A",
  "phase2_note": "PR convergence pipeline 자동화. 결함 4·5·6·7 결선(wiring). ACTIVE=false 골격 전부 유지.",
  "p0a_note": "task-2729+1 P0-A: CI_WATCHER_SESSION_LIFETIME_GAP lifecycle 진단 분류 + WatcherState heartbeat/last_poll staleness 판정 + terminal callback 필수화(MANDATORY) 계약 강화. classification contract 만(record-only). OS 감지/watcher 재기동/auto-register 는 P0-B(미구현). ACTIVE=false 유지.",
  "capabilities": {
    "callback_fallback_prune": {
      "IMPLEMENTED": true,
      "VERIFIED": true,
      "WIRED": "live_prune_success_gated_candidate",
      "ACTIVE": false,
      "task": "task-2728",
      "pr": 172,
      "head": "fa5ba4b7",
      "active_blocked_reason": "실제 collector 경로 collect_and_prune live real cancel/delete 운영증거 부재. dogfood fallback ABEE96D2 callback 후 미prune 실증.",
      "evidence": "18 regression PASS(fake/DI remover), registry write 동작, ABEE96D2 미tombstone=ACTIVE false",
      "updated": "2026-06-04",
      "merged": "PR #172 main dc6cdc380fb5",
      "ACTIVE_note": "merge ≠ production active. live collector real-prune 관측 전 ACTIVE=false 유지",
      "phase2_addition": "task-2729 Phase 2 MT-1: summarize_live_prune helper 추가 + collect_and_prune success gating(require_success, live_prune 키). WIRED=live_prune_success_gated_candidate. ACTIVE=false 유지."
    },
    "owner_gemini_trigger": {
      "state": "PARTIAL_MANUAL_PATH_VERIFIED",
      "IMPLEMENTED": true,
      "VERIFIED": "regression",
      "VERIFIED_evidence": "PR #171 /gemini review POST 성공(issuecomment-4609906753/4610196652). task-2729 Phase 2 신규 dedicated entrypoint 골격.",
      "WIRED": "dedicated_entrypoint_candidate",
      "dedicated_module": true,
      "dedicated_module_path": "utils/owner_gemini_trigger.py",
      "WIRED_note": "utils/owner_gemini_trigger.py 신규 전용 entrypoint. ci_watch_handoff_runner.maybe_fire_owner_gemini_on_new_head 결선. ACTIVE=false 골격 — 실 gh 네트워크 0.",
      "credential": "present (gh OWNER PAT JonghyukJeon + .env.keys 토큰 env 존재, raw 미출력)",
      "permission": "issues:write + pull_requests:write 실증(POST 성공)",
      "policy": "request-only /gemini review = 자동 발사 허용(회장 2026-06-03). thread resolve/판단대행/merge approval/merge 실행은 계속 금지",
      "ACTIVE": false,
      "ACTIVE_note": "전용 wiring 골격 존재. live 자동 발사 운영증거 부재 → ACTIVE=false 유지",
      "auto_fire_classification": "request-only 는 발사 가능+head lock 일치+중복 0 시 자동 발사 대상",
      "updated": "2026-06-04",
      "VERIFIED_note": "PR #172 fresh OWNER /gemini 발사·thread resolve 실증. Phase 2 dedicated module 신규."
    },
    "base_sync_pipeline": {
      "IMPLEMENTED": true,
      "VERIFIED": "regression",
      "WIRED": "runner_call_candidate",
      "ACTIVE": false,
      "task": "task-2729",
      "phase": 2,
      "active_blocked_reason": "live BEHIND→sync_pr_base→revalidate→merge 운영증거 부재. merge_queue_executor 호출만(직접수정 아님).",
      "evidence": "base_sync_before_merge 골격 구현. sync_fn/fetch_state_fn injectable. merge_queue_executor.sync_pr_base/fetch_merge_state 지연 import.",
      "updated": "2026-06-04",
      "module": "scripts/ci_watch_handoff_runner.py",
      "function": "base_sync_before_merge",
      "ACTIVE_note": "코드 존재 ≠ 운영 활성. live base sync 관측 시 승격 대상."
    },
    "authoritative_completion": {
      "IMPLEMENTED": true,
      "VERIFIED": "regression",
      "WIRED": "scope_evidence_candidate",
      "ACTIVE": false,
      "task": "task-2729",
      "phase": 2,
      "active_blocked_reason": "EXTERNAL_DIRTY block→scope evidence 완료인정 마커. 수동 .done 위조 0.",
      "evidence": "authoritative_completion_marker 골격 구현. scope evidence 3개(merge_base_clean/ci_passed/local_fix_verified) 전부 True시 AUTHORITATIVE_COMPLETION_BY_SCOPE_EVIDENCE. .done 직접 생성 0. marker_writer injectable.",
      "updated": "2026-06-04",
      "module": "scripts/ci_watch_handoff_runner.py",
      "function": "authoritative_completion_marker",
      "ACTIVE_note": "코드 존재 ≠ 운영 활성. live scope evidence 관측 시 승격 대상."
    },
    "progress_watcher": {
      "IMPLEMENTED": true,
      "VERIFIED": true,
      "WIRED": "lifecycle_gap_classified_candidate",
      "ACTIVE": false,
      "task": "task-2729+1",
      "phase": "P0-A",
      "active_blocked_reason": "lifecycle gap 은 classification contract(record-only)만. live watcher staleness OS 감지·watcher 재기동·auto-registration·terminal ANU callback 자동발사 운영증거 부재(P0-B). production ACTIVE 전환 별도 회장 승인.",
      "evidence": "task-2729+1 P0-A: classifier CI_WATCHER_SESSION_LIFETIME_GAP 진단 분류(TERMINAL_STATES 미포함·diagnostic) + classify_lifetime_gap 순수함수, runner WatcherState heartbeat/last_poll_ts 필드 + is_watcher_stale()/classify_watcher_lifetime_gap() record-only 호출부 + fire_terminal_callback callback_mandatory/not_wired 필수화. 신규 회귀 30 PASS(test_ci_watcher_lifecycle_2729p0a.py: stale+pending→GAP / terminal callback 필수·NOT_WIRED / quiet-window / fallback dead-man-only / 6-state·terminal 무손상), 기존 progress_watcher_gate_2729+pr_convergence_pipeline_2729 42 PASS 무손상.",
      "updated": "2026-06-05",
      "pr_branch": "task/task-2729+1-dev6",
      "capability_axes": {
        "IMPLEMENTED": "lifecycle gap 분류 함수/staleness 판정/heartbeat 필드/callback 필수화 코드 존재(regression 검증)",
        "VERIFIED": "신규 30 + 기존 42 회귀 PASS, py_compile PASS",
        "WIRED": "lifecycle_gap_classified_candidate — classify_watcher_lifetime_gap record-only 호출부 결선(status 미변경, OS 미결선)",
        "ACTIVE": "false — live OS staleness 감지/watcher 재기동/auto-register 0(P0-B). production 전환 별도 승인"
      },
      "ACTIVE_note": "code exists != automation works. IMPLEMENTED/VERIFIED 는 regression 기준. WIRED=lifecycle_gap_classified_candidate(record-only, status 미변경). ACTIVE=false 유지 — OS-level wiring(P0-B)·production 전환 별도 승인.",
      "prev_phase1": {
        "WIRED": "partial_record_only",
        "pr_branch": "task/task-2729-progress-watcher-gate-dev6",
        "note": "Phase1: dispatch gate record-only(annotate active=false), 6-state tracking + standalone CLI L1, regression 19 PASS."
      }
    }
  },
  "notes": {
    "pr172_merge_clarification_260603": "PR #172 merge(dc6cdc380fb5)는 callback_fallback_prune/owner_gemini_trigger 의 production active 전환이나 watcher 자동결선 완료를 의미하지 않음. 둘 다 ACTIVE=false·WIRED=partial/false 유지. live real-prune/watcher 자동발사 관측 시에만 승격.",
    "pr171_merge_clarification_260603": "PR #171 merge(9ba3cfbb)·PR #172 merge(dc6cdc38) = callback_fallback_prune/owner_gemini_trigger 의 WIRED 후보 증거(request-only 자동발사·base-sync pipeline 실증)이지 production ACTIVE 전환 아님. 둘 다 ACTIVE=false 유지. live real auto-prune/watcher 자동결선 관측 시에만 승격.",
    "phase2_260604": "task-2729 Phase 2 결함4·5·6·7 결선. 모든 capability ACTIVE=false 유지. production 전환 별도 회장 승인 필요."
  }
}
