{
  "schema": "merge_gate_14_condition_matrix.v1",
  "ts_kst": "2026-05-21 04:40 KST",
  "mode": "read-only · dry-run matrix · 회장 verbatim 14 자동머지 조건 정본",
  "audit_target": "utils/merge_queue_executor.py + post_merge_smoke_runner.py + automation_contracts.py",
  "conditions": [
    {"id":1,"name":"queue head","verdict":"WIRED","evidence":"utils/merge_queue_executor.py:check_predecessor_merged (L368) + QueueDecision class (L223)","wait_state":"WAITING_FOR_PREDECESSOR (L121)"},
    {"id":2,"name":"expected_files exact match","verdict":"WIRED","evidence":"compare_effective_diff (L445) + _normalize_file_list (L441)","wait_state":"REPLACEMENT_PR_REQUIRED (mismatch 시)"},
    {"id":3,"name":"forbidden path 0","verdict":"WIRED","evidence":"detect_forbidden_paths (L473)","critical7_trigger":"forbidden_path > 0 → 즉시 Critical7"},
    {"id":4,"name":"effective diff contamination 0","verdict":"WIRED","evidence":"compare_effective_diff diff base 분리 검증","wait_state":"REPLACEMENT_PR_PATH (contamination 시)"},
    {"id":5,"name":"dependency satisfied","verdict":"WIRED","evidence":"check_predecessor_merged + dependency chain validation","wait_state":"WAITING_FOR_PREDECESSOR"},
    {"id":6,"name":"serial_only collision 0","verdict":"PARTIAL_WIRED","evidence":"QueueDecision/TaskSpec class 의 serial_only flag 처리 · 명시 함수 추가 audit 권고","wait_state":"WAITING_FOR_SERIAL_LOCK"},
    {"id":7,"name":"CI all SUCCESS","verdict":"WIRED","evidence":"fetch_ci_status (L495)·IN_PROGRESS/PENDING/QUEUED/WAITING/EXPECTED → WAIT (L521)","wait_state":"WAITING_FOR_CI"},
    {"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)","wait_state":"WAITING_FOR_GEMINI_REVIEW (L130)"},
    {"id":9,"name":"mergeStateStatus CLEAN","verdict":"WIRED","evidence":"fetch_merge_state (L857)·doc header L15 'mergeStateStatus == CLEAN'","wait_state":"WAIT (not CLEAN)"},
    {"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"},
    {"id":11,"name":"BOT_GITHUB_TOKEN = ghs_ App token","verdict":"WIRED","evidence":"select_merge_token_decision (L322) — token_source GHS_APP / BOT_TOKEN 분기 · OWNER_PAT 식별","wait_state":"HOLD (token absent)"},
    {"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"},
    {"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)"},
    {"id":14,"name":"reconcile evidence configured","verdict":"PARTIAL_WIRED","evidence":"utils/lifecycle_reconciliation_manager.py 존재 · post_merge_smoke_runner 가 reconcile evidence 경로 결선 명시 별도 audit 권고","wait_state":"HOLD (reconcile evidence missing)"}
  ],
  "summary_by_verdict": {
    "WIRED": 12,
    "PARTIAL_WIRED": 2,
    "NOT_WIRED": 0,
    "FAIL_CLOSED_WIRED_critical_safeguard": 1,
    "critical7_triggers_present": 5,
    "wait_states_defined": 8
  },
  "regression_15_classification_chair_verbatim": [
    {"id":1,"input":"14조건 true","expected":"MERGE_CANDIDATE_READY","wired_in_code":true},
    {"id":2,"input":"expected_files mismatch","expected":"HOLD/REPLACEMENT_REQUIRED","wired_in_code":true},
    {"id":3,"input":"forbidden path >0","expected":"Critical7","wired_in_code":true},
    {"id":4,"input":"effective diff contamination","expected":"replacement PR path","wired_in_code":true},
    {"id":5,"input":"CI not green","expected":"WAIT","wired_in_code":true},
    {"id":6,"input":"Gemini unresolved","expected":"WAIT/HOLD by severity","wired_in_code":true,"note":"evaluate_gemini_async_race wait_budget 360s 정합"},
    {"id":7,"input":"mergeStateStatus not CLEAN","expected":"WAIT","wired_in_code":true},
    {"id":8,"input":"HEAD SHA mismatch","expected":"FAIL_CLOSED","wired_in_code":true},
    {"id":9,"input":"BOT token absent","expected":"HOLD","wired_in_code":true},
    {"id":10,"input":"OWNER PAT detected","expected":"FAIL_CLOSED","wired_in_code":true,"note":"OWNER_PAT_FALLBACK_BLOCKED"},
    {"id":11,"input":"post-merge smoke missing","expected":"HOLD","wired_in_code":true,"note":"task-2512 5 모듈 #4"},
    {"id":12,"input":"reconcile evidence missing","expected":"HOLD","wired_in_code":"PARTIAL · 명시 별도 audit"},
    {"id":13,"input":"dependency cycle","expected":"Critical7","wired_in_code":"PARTIAL · check_predecessor_merged 가 cycle 명시 처리 별도 audit"},
    {"id":14,"input":"replacement PR failure","expected":"Critical7","wired_in_code":"PARTIAL · Track F 정합"},
    {"id":15,"input":"post-merge smoke failure","expected":"Critical7","wired_in_code":true,"note":"POST_MERGE_SMOKE_FAILED escalation packet"}
  ],
  "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"
  ]
}
