{
  "schema": "limited_live_merge_pilot_preconditions.v1",
  "track": "Track G — merge queue partial closure plan",
  "ts_kst": "2026-05-21 05:08 KST",
  "mode": "preconditions checklist · proposal-only · 실 merge 0 · pilot 실행 0",
  "purpose": "limited live merge pilot (1~2 머지 한정) 진입을 위한 전제조건 체크리스트 — 회장 chair-authorized task 발행 시 사용",
  "pilot_scope_definition": {
    "scope": "1~2 머지 한정 · 14조건 통과 PR 의 squash merge 자동 실행 검증",
    "out_of_scope": ["force/rebase 머지", "admin override", "owner_pat 사용", "same-branch push", "production scale", "non-CLEAN mergeStateStatus 강제 머지"],
    "rollback_path": "머지 후 rollback 은 git revert PR (HEAD SHA lock + audit jsonl) · main force-push 절대 금지",
    "prerequisite_pilots": "limited live PR-open pilot 1~2 PR PASS 후 진입 권장 (회장 명시 시 우회 가능)"
  },
  "preconditions_categorized": {
    "category_A_14_condition_readiness": [
      {"id": "A1", "criterion": "14조건 매트릭스 v2 결과 13 WIRED + 1 PARTIAL + 0 NOT_WIRED", "current": "memory/events/merge_queue_14_condition_matrix_v2.json 발행 완료", "blocker": false},
      {"id": "A2", "criterion": "#14 reconcile evidence path contract closure (PARTIAL 잔여 1건)", "current": "proposal 발행 (reconcile_evidence_contract_proposal.json)", "blocker": true},
      {"id": "A3", "criterion": "#6 serial_only collision detector v2 promotion (PARTIAL → WIRED) 회장 ACCEPT", "current": "v2 매트릭스에서 정정 완료 · 회장 확인 대기", "blocker": false}
    ],
    "category_B_token_credential_safety": [
      {"id": "B1", "criterion": "BOT_GITHUB_TOKEN=ghs_ App token 활성", "current": "WIRED", "blocker": false},
      {"id": "B2", "criterion": "OWNER_PAT_FALLBACK_BLOCKED guard 활성", "current": "WIRED", "blocker": false},
      {"id": "B3", "criterion": "select_merge_token_decision = APP_TOKEN_OK or ACTIONS_TOKEN_OK preflight PASS", "current": "WIRED", "blocker": false},
      {"id": "B4", "criterion": "pilot 직전 token preflight dry-run", "current": "회장 명시 후 실행", "blocker": true}
    ],
    "category_C_queue_head_dependency_safety": [
      {"id": "C1", "criterion": "check_predecessor_merged (L368) 활성 + main_log_grep callable 결선", "current": "WIRED", "blocker": false},
      {"id": "C2", "criterion": "QueueDecision (L223) 결선", "current": "WIRED", "blocker": false},
      {"id": "C3", "criterion": "_VALID_PARALLEL_POLICIES set {serial_only, limited_parallel, parallel_safe} 활성", "current": "WIRED (L1189)", "blocker": false},
      {"id": "C4", "criterion": "DEPENDENCY_CYCLE_OR_SERIAL_ONLY_CONFLICT Critical7 escalation 활성", "current": "WIRED (L1193-1208)", "blocker": false}
    ],
    "category_D_merge_state_head_sha_safety": [
      {"id": "D1", "criterion": "fetch_merge_state (L857) 활성 + mergeStateStatus == CLEAN 검증", "current": "WIRED", "blocker": false},
      {"id": "D2", "criterion": "assert_head_sha_lock (L874) + HEAD_SHA_LOCK_BROKEN FAIL_CLOSED", "current": "WIRED", "blocker": false},
      {"id": "D3", "criterion": "execute_squash_merge (L879) 실 호출 시 admin/force 일체 금지", "current": "WIRED (assert_no_forbidden_git_flags)", "blocker": false}
    ],
    "category_E_ci_gemini_gate_safety": [
      {"id": "E1", "criterion": "fetch_ci_status (L495) 활성 · IN_PROGRESS/PENDING/QUEUED/WAITING/EXPECTED → WAIT", "current": "WIRED", "blocker": false},
      {"id": "E2", "criterion": "fetch_gemini_status (L533) + classify_gemini_status (L619) + evaluate_gemini_async_race (L667) 활성", "current": "WIRED", "blocker": false},
      {"id": "E3", "criterion": "Gemini wait budget 360s 정합", "current": "WIRED", "blocker": false}
    ],
    "category_F_post_merge_smoke_reconcile_safety": [
      {"id": "F1", "criterion": "POST_MERGE_SMOKE_HOOK = post_merge_smoke_runner (L164) 활성", "current": "WIRED", "blocker": false},
      {"id": "F2", "criterion": "post_merge_smoke_runner 590 lines · SmokeStatus enum · PostMergeSmokeRun dataclass · task_id→smoke_command registry 결선", "current": "WIRED", "blocker": false},
      {"id": "F3", "criterion": "POST_MERGE_SMOKE_FAILED Critical7 escalation 활성", "current": "WIRED", "blocker": false},
      {"id": "F4", "criterion": "lifecycle_reconciliation_manager.py 1932 lines · 7 lifecycle states + 8 stuck cases 결선", "current": "WIRED", "blocker": false},
      {"id": "F5", "criterion": "post_merge_smoke ↔ reconcile manager evidence path contract closure", "current": "proposal 발행 · A2 blocker 와 동일", "blocker": true}
    ],
    "category_G_audit_observability": [
      {"id": "G1", "criterion": "callback contract 9 fields 보장 (정책 (a) STANDARDIZED)", "current": "WIRED", "blocker": false},
      {"id": "G2", "criterion": "pilot result.json + independent ANU collector adjudication", "current": "WIRED", "blocker": false},
      {"id": "G3", "criterion": "merge_4tuple_index.jsonl append-only (task-2622 baseline equivalent)", "current": "정책 (a) 자동 누적", "blocker": false}
    ],
    "category_H_rollback_chair_oversight": [
      {"id": "H1", "criterion": "rollback PR 시나리오 사전 정의 (git revert 기반 · main force-push 금지)", "current": "doctrine WIRED", "blocker": false},
      {"id": "H2", "criterion": "회장 chair-authorized task ID 명시", "current": "본 proposal ACCEPT 후 발행", "blocker": true},
      {"id": "H3", "criterion": "pilot 실패 시 Critical7 즉시 보고 + 다음 pilot 자동 차단", "current": "WIRED (emit_critical_escalation)", "blocker": false},
      {"id": "H4", "criterion": "회장 verbatim '실제 PR open/merge 권한 자동 부여 금지' 명문 유지", "current": "doctrine WIRED", "blocker": false},
      {"id": "H5", "criterion": "prerequisite pilot — limited live PR-open pilot 1~2 PR PASS", "current": "PR-open pilot 미실행", "blocker": "RECOMMENDED (회장 명시 시 우회 가능)"}
    ]
  },
  "blocker_summary": {
    "total_preconditions": 28,
    "blockers_hard": 4,
    "blockers_recommended": 1,
    "ready_count": 23,
    "blocker_categories": [
      "A2/F5: reconcile evidence path contract closure (1 proposal)",
      "B4: pilot 직전 token preflight 수동 실행",
      "H2: chair-authorized task ID 발행",
      "H5: prerequisite limited live PR-open pilot PASS (RECOMMENDED)"
    ]
  },
  "go_no_go_recommendation": "NO_GO_AT_THIS_MOMENT — 3 hard blockers (A2/F5 + H2) 사전 closure 필수. H5 는 회장 명시 시 우회 가능 · 권장 순서: PR-open pilot → merge pilot.",
  "minimal_dependency_chain_for_GO": [
    "(1) reconcile_evidence_contract_proposal ACCEPT → post_merge_smoke + reconcile manager closure task (≤55 LOC + 5 fixtures)",
    "(2) limited live PR-open pilot 완료 (권장 · 회장 명시 시 생략 가능)",
    "(3) 회장 chair-authorized merge pilot task 발행 (1~2 머지 한정 · pilot PR list 명시)",
    "(4) token preflight 직전 검증 (수동)",
    "(5) pilot 실행 (1 PR 머지 · 14조건 PASS 검증 · post-merge smoke PASS 검증)",
    "(6) reconcile manager FINALIZED 전이 검증",
    "(7) post-pilot result.json + ANU collector adjudication + 회장 보고"
  ],
  "post_pilot_success_criteria": [
    "14조건 전부 PASS evidence 박제",
    "post-merge smoke PASS",
    "reconcile_evidence_ready=true → FINALIZED 전이",
    "Critical7 0",
    "credential raw exposure 0",
    "main force-push 0",
    "audit jsonl 완전 박제"
  ],
  "auto_progress": false,
  "chair_approval_required": true,
  "scope_invariants_preserved": [
    "preconditions checklist only", "실 merge 0", "pilot 실행 0", "PR open 0",
    "GitHub write 0", "credential raw exposure 0"
  ]
}
