{
  "schema": "limited_live_pr_open_pilot_preconditions.v1",
  "track": "Track G — merge queue partial closure plan",
  "ts_kst": "2026-05-21 05:07 KST",
  "mode": "preconditions checklist · proposal-only · 실 PR open 0 · pilot 실행 0",
  "purpose": "limited live PR-open pilot (1~2 PR 한정) 진입을 위한 전제조건 체크리스트 — 회장 chair-authorized task 발행 시 사용",
  "pilot_scope_definition": {
    "scope": "1~2 PR 한정 · replacement PR 자동 생성 경로 검증 (contamination → clean PR)",
    "out_of_scope": ["실 merge", "force/rebase", "owner_pat", "same-branch push", "production scale"],
    "rollback_path": "original PR OPEN 유지 (preserve_original_pr) · clean PR 만 close/abort 가능 · audit trail jsonl"
  },
  "preconditions_categorized": {
    "category_A_replacement_pr_runner_readiness": [
      {"id": "A1", "criterion": "utils/replacement_pr_runner.py v3 shim 구현 완료 + import smoke test PASS", "current": "0 lines stub", "blocker": true},
      {"id": "A2", "criterion": "anu_v2/replacement_pr_runner.py 442 lines unchanged (sole source 유지)", "current": "PASS", "blocker": false},
      {"id": "A3", "criterion": "tests/regression/test_replacement_pr_dry_run_matrix.py 14 fixtures PASS (mock-based)", "current": "fixture matrix 설계만 완료", "blocker": true},
      {"id": "A4", "criterion": "tests/regression/test_replacement_pr_failure_critical7.py RPF1~RPF8 PASS", "current": "fixture 설계만 완료", "blocker": true}
    ],
    "category_B_token_credential_safety": [
      {"id": "B1", "criterion": "BOT_GITHUB_TOKEN=ghs_ App token 활성", "current": "검증 가능 (select_merge_token_decision)", "blocker": false},
      {"id": "B2", "criterion": "OWNER_PAT_FALLBACK_BLOCKED guard 활성", "current": "WIRED (L351-354)", "blocker": false},
      {"id": "B3", "criterion": "token value raw exposure 0 보장 (prefix 5자만 logging)", "current": "WIRED (bot_merge_identity.py)", "blocker": false},
      {"id": "B4", "criterion": "pilot 실행 직전 token preflight dry-run 1회 (수동)", "current": "회장 명시 후 실행", "blocker": true}
    ],
    "category_C_diff_judgment_safety": [
      {"id": "C1", "criterion": "compare_effective_diff (L445) + _normalize_file_list (L441) 활성", "current": "WIRED", "blocker": false},
      {"id": "C2", "criterion": "detect_forbidden_paths (L473) 활성", "current": "WIRED", "blocker": false},
      {"id": "C3", "criterion": "expected_files exact match list 사전 정의 (pilot PR 별)", "current": "회장 명시 시 작성", "blocker": true},
      {"id": "C4", "criterion": "forbidden_paths allowlist 사전 정의", "current": "WIRED (default .github/workflows/* etc)", "blocker": false}
    ],
    "category_D_branch_push_safety": [
      {"id": "D1", "criterion": "assert_no_forbidden_git_flags (L303) 활성", "current": "WIRED", "blocker": false},
      {"id": "D2", "criterion": "clean_branch_name pattern 사전 정의 (예: task-{id}-clean-replacement)", "current": "v2 default · 회장 검토 후 명시", "blocker": true},
      {"id": "D3", "criterion": "same-branch push 금지 doctrine 검증 (feedback_same_pr_push_after_gemini)", "current": "WIRED triple guard", "blocker": false},
      {"id": "D4", "criterion": "original PR OPEN 유지 doctrine 검증", "current": "WIRED (preserve_original_pr · gh/git 호출 0)", "blocker": false}
    ],
    "category_E_audit_observability": [
      {"id": "E1", "criterion": "audit_writer jsonl path 사전 명시", "current": "v2 default {audit_root}/replacement_pr_<pr>.jsonl", "blocker": false},
      {"id": "E2", "criterion": "pilot 실행 시 callback contract 9 fields 보장 (callback_prompt_utf8_bytes 외)", "current": "정책 (a) STANDARDIZED 적용", "blocker": false},
      {"id": "E3", "criterion": "post-pilot result.json 발행 + independent ANU collector adjudication", "current": "정책 (a) STANDARDIZED 적용", "blocker": false},
      {"id": "E4", "criterion": "task-2622 baseline telemetry 와 동일 envelope-only compliance", "current": "WIRED (정책 (a))", "blocker": false}
    ],
    "category_F_rollback_and_chair_oversight": [
      {"id": "F1", "criterion": "rollback 시나리오 사전 정의 (clean PR close + audit log 잔류)", "current": "v2 wired", "blocker": false},
      {"id": "F2", "criterion": "회장 chair-authorized task ID 명시", "current": "본 proposal ACCEPT 후 발행", "blocker": true},
      {"id": "F3", "criterion": "pilot 실패 시 Critical7 즉시 보고 + 다음 pilot 자동 차단", "current": "WIRED (classify_failure + emit_critical_escalation)", "blocker": false},
      {"id": "F4", "criterion": "회장 verbatim '실제 PR open/merge 권한 자동 부여 금지' 명문 유지", "current": "doctrine WIRED", "blocker": false}
    ]
  },
  "blocker_summary": {
    "total_preconditions": 24,
    "blockers": 7,
    "ready_count": 17,
    "blocker_categories": [
      "A1: v3 shim 구현 (replacement_pr_v3_adapter_proposal.json)",
      "A3: dry-run matrix regression test 구현",
      "A4: Critical7 fixture regression test 구현",
      "B4: pilot 직전 token preflight 수동 실행",
      "C3: pilot PR 별 expected_files 사전 정의",
      "D2: clean_branch_name pattern 회장 검토",
      "F2: chair-authorized task ID 발행"
    ]
  },
  "go_no_go_recommendation": "NO_GO_AT_THIS_MOMENT — 4 blockers (A1/A3/A4 + F2) 사전 closure 필수. 나머지 (B4/C3/D2) 는 pilot dispatch 시점 결정 가능.",
  "minimal_dependency_chain_for_GO": [
    "(1) replacement_pr_v3_adapter_proposal ACCEPT → utils/replacement_pr_runner.py shim 구현 task",
    "(2) test_replacement_pr_dry_run_matrix.py 구현 task (14 fixtures PASS)",
    "(3) test_replacement_pr_failure_critical7.py 구현 task (RPF1~RPF8 PASS)",
    "(4) 회장 chair-authorized pilot task 발행 (expected_files / clean_branch_name / 1~2 PR scope 명시)",
    "(5) token preflight 직전 검증",
    "(6) pilot 실행 (1 PR · contamination 인위 유발 dry-run · clean PR 생성 · original OPEN 유지 검증)",
    "(7) post-pilot result.json + ANU collector adjudication + 회장 보고"
  ],
  "auto_progress": false,
  "chair_approval_required": true,
  "scope_invariants_preserved": [
    "preconditions checklist only", "실 PR open 0", "pilot 실행 0", "merge 0",
    "GitHub write 0", "credential raw exposure 0"
  ]
}
