{
  "schema": "merge_queue_14_condition_matrix_v2.v1",
  "track": "Track G — merge queue partial closure plan",
  "ts_kst": "2026-05-21 05:05 KST",
  "mode": "read-only · v1 매트릭스 보수 평가 정정",
  "audit_target": "utils/merge_queue_executor.py · utils/post_merge_smoke_runner.py · utils/lifecycle_reconciliation_manager.py",
  "v1_to_v2_diff_summary": "v1 매트릭스의 PARTIAL_WIRED 2건 중 1건(serial_only collision 0) 은 사실상 WIRED — CRITICAL_DEPENDENCY_CYCLE_OR_SERIAL_ONLY_CONFLICT 하나로 묶여 Critical7 escalation 완비. 진짜 남은 PARTIAL 1건 = reconcile evidence path contract (post_merge_smoke ↔ lifecycle_reconciliation_manager 결선 명문 부재).",
  "conditions_v2": [
    {"id":1,"name":"queue head","verdict":"WIRED","evidence":"check_predecessor_merged (L368) + QueueDecision (L223)","change_from_v1":"unchanged"},
    {"id":2,"name":"expected_files exact match","verdict":"WIRED","evidence":"compare_effective_diff (L445) + _normalize_file_list (L441)","change_from_v1":"unchanged"},
    {"id":3,"name":"forbidden path 0","verdict":"WIRED","evidence":"detect_forbidden_paths (L473)","critical7_trigger":"forbidden_path > 0 → 즉시 Critical7","change_from_v1":"unchanged"},
    {"id":4,"name":"effective diff contamination 0","verdict":"WIRED","evidence":"compare_effective_diff base 분리 검증","change_from_v1":"unchanged"},
    {"id":5,"name":"dependency satisfied","verdict":"WIRED","evidence":"check_predecessor_merged + dependency chain validation","change_from_v1":"unchanged"},
    {
      "id":6,"name":"serial_only collision 0",
      "verdict":"WIRED",
      "v1_verdict":"PARTIAL_WIRED",
      "evidence":"merge_queue_executor.py L1189-1197 · _VALID_PARALLEL_POLICIES={serial_only, limited_parallel, parallel_safe} 명문 + invalid policy → BLOCKED_WITH_REASON + critical_code=CRITICAL_DEPENDENCY_CYCLE + emit_critical_escalation. CRITICAL_DEPENDENCY_CYCLE = 'DEPENDENCY_CYCLE_OR_SERIAL_ONLY_CONFLICT' 한 묶음 (L144)",
      "change_from_v1":"PROMOTED — v1 의 '명시 함수 추가 audit 권고' 는 dependency cycle 과 정책 결합 후 결선 완비 확인 시 불필요. Critical7 escalation 결선 완료.",
      "critical7_trigger":"serial_only conflict or invalid policy → DEPENDENCY_CYCLE_OR_SERIAL_ONLY_CONFLICT (Critical7)"
    },
    {"id":7,"name":"CI all SUCCESS","verdict":"WIRED","evidence":"fetch_ci_status (L495)·IN_PROGRESS/PENDING/QUEUED/WAITING/EXPECTED → WAIT (L521)","change_from_v1":"unchanged"},
    {"id":8,"name":"Gemini unresolved 0","verdict":"WIRED","evidence":"fetch_gemini_status (L533) + classify_gemini_status (L619) + evaluate_gemini_async_race (L667·wait budget 360s)","change_from_v1":"unchanged"},
    {"id":9,"name":"mergeStateStatus CLEAN","verdict":"WIRED","evidence":"fetch_merge_state (L857)","change_from_v1":"unchanged"},
    {"id":10,"name":"HEAD SHA lock match","verdict":"WIRED","evidence":"assert_head_sha_lock (L874) + HEAD_SHA_LOCK_BROKEN (L123)","critical7_trigger":"mismatch → FAIL_CLOSED","change_from_v1":"unchanged"},
    {"id":11,"name":"BOT_GITHUB_TOKEN = ghs_ App token","verdict":"WIRED","evidence":"select_merge_token_decision (L322) — GHS_APP / ACTIONS / OWNER_PAT / UNKNOWN 4-enum 분기","change_from_v1":"unchanged"},
    {"id":12,"name":"OWNER PAT 사용 0","verdict":"FAIL_CLOSED_WIRED","evidence":"OWNER_PAT_FALLBACK_BLOCKED (L134) + select_merge_token_decision src='OWNER_PAT' → allow_merge=False (L351-354)","critical7_trigger":"OWNER_PAT detected → FAIL_CLOSED","change_from_v1":"unchanged"},
    {"id":13,"name":"post-merge smoke configured","verdict":"WIRED","evidence":"POST_MERGE_SMOKE_HOOK = post_merge_smoke_runner (L164) + utils/post_merge_smoke_runner.py 590 lines · SmokeStatus enum · PostMergeSmokeRun dataclass · task_id→smoke_command registry","critical7_trigger":"post_merge_smoke_runner 미정의 → HOLD · smoke 실패 → Critical7 (POST_MERGE_SMOKE_FAILED)","change_from_v1":"unchanged"},
    {
      "id":14,"name":"reconcile evidence configured",
      "verdict":"PARTIAL_WIRED",
      "v1_verdict":"PARTIAL_WIRED",
      "evidence":"utils/lifecycle_reconciliation_manager.py 1932 lines · 7 lifecycle states + 8 stuck cases + BOT_CANCELLED 격상 4종 + AUTO_FINALIZE_CHAIN_MISSING 4종 + evidence source-of-truth (GitHub/CI/smoke) + dry-run 기본 — reconcile manager 자체는 풍부히 결선됨. PARTIAL 잔여 = post_merge_smoke_runner ↔ lifecycle_reconciliation_manager evidence path contract 명문 부재",
      "change_from_v1":"REFINED — v1 은 'reconcile evidence missing' 모호 표현. v2 에서 reconcile manager 결선 풍부함 확인. 진짜 잔여 = path contract 명문화 1건",
      "remediation_artifact": "memory/events/reconcile_evidence_contract_proposal.json"
    }
  ],
  "summary_by_verdict_v2": {
    "WIRED": 13,
    "PARTIAL_WIRED": 1,
    "NOT_WIRED": 0,
    "FAIL_CLOSED_WIRED_critical_safeguard": 1,
    "critical7_triggers_present": 6,
    "wait_states_defined": 8
  },
  "summary_diff_v1_vs_v2": {
    "wired_count_change": "+1 (12 → 13)",
    "partial_wired_count_change": "-1 (2 → 1)",
    "not_wired_count_change": "0 (0)",
    "promotions": ["#6 serial_only collision: PARTIAL_WIRED → WIRED"],
    "refinements": ["#14 reconcile evidence: PARTIAL_WIRED 잔여 정체 정밀화 (path contract 명문화 1건)"]
  },
  "interpretation": "14조건 매트릭스 v2 결과: 13 WIRED + 1 PARTIAL + 0 NOT_WIRED. 진짜 잔여 PARTIAL = #14 reconcile evidence path contract 1건 (별도 proposal 발행). #6 (serial_only) 은 v1 보수 평가 정정.",
  "scope_invariants_preserved": [
    "read-only audit", "dry-run matrix", "실 merge 0", "PR open 0",
    "branch/commit/push 0", "GitHub write 0", "credential raw exposure 0"
  ]
}
