{
  "schema": "replacement_pr_failure_critical7_fixture.v1",
  "ts_kst": "2026-05-21 04:35 KST",
  "mode": "fixture design · proposal-only · 실 execution 0",
  "purpose": "replacement PR failure 시 Critical7 분류 fixture 설계 — 실제 PR open 없이 분류 로직만 검증",
  "fixture_design": [
    {
      "fixture_id": "RPF1",
      "scenario": "expected_files mismatch (diff 가 allowlist 외 파일 포함)",
      "expected_classification": "HOLD/REPLACEMENT_REQUIRED",
      "is_critical7": false,
      "rationale": "scope 외 파일 변경 — replacement 전환 정상 경로"
    },
    {
      "fixture_id": "RPF2",
      "scenario": "forbidden path detected (예: .github/workflows/* 변경)",
      "expected_classification": "Critical7 · FORBIDDEN_PATH_TRIGGERED",
      "is_critical7": true,
      "rationale": "forbidden path = 회장 명시 즉시 보고 트리거"
    },
    {
      "fixture_id": "RPF3",
      "scenario": "effective_diff_contamination (PR diff 가 base 와 분리 안 됨)",
      "expected_classification": "REPLACEMENT_PR_PATH",
      "is_critical7": false,
      "rationale": "contamination = clean replacement 트리거 (정상 경로)"
    },
    {
      "fixture_id": "RPF4",
      "scenario": "replacement PR creation 실패 (GitHub API error · auth 결함 · branch 충돌 등)",
      "expected_classification": "Critical7 · REPLACEMENT_PR_CREATION_FAILED",
      "is_critical7": true,
      "rationale": "회장 verbatim '14. replacement PR failure → Critical7' (Track G regression #14)"
    },
    {
      "fixture_id": "RPF5",
      "scenario": "same-branch push 시도 (replacement 가 original branch 에 push 시도)",
      "expected_classification": "FAIL_CLOSED · assert_no_forbidden_git_flags raise",
      "is_critical7": true,
      "rationale": "same-branch push = doctrine 위반 · feedback_same_pr_push_after_gemini_doctrine_enforcement"
    },
    {
      "fixture_id": "RPF6",
      "scenario": "original PR 변조 시도",
      "expected_classification": "Critical7 · ORIGINAL_PR_TAMPERING",
      "is_critical7": true,
      "rationale": "original PR 보존 doctrine 위반"
    },
    {
      "fixture_id": "RPF7",
      "scenario": "credential raw exposure (token 평문 노출)",
      "expected_classification": "Critical7 · CREDENTIAL_EXPOSURE",
      "is_critical7": true,
      "rationale": "credential expansion = 즉시 보고"
    },
    {
      "fixture_id": "RPF8",
      "scenario": "OWNER_PAT 사용 시도 (BOT App token 대신)",
      "expected_classification": "FAIL_CLOSED · OWNER_PAT_FALLBACK_BLOCKED",
      "is_critical7": true,
      "rationale": "OWNER_PAT 사용 = feedback_owner_trigger_only_capability_doctrine 위반"
    }
  ],
  "regression_implementation_proposal": {
    "test_file_candidate": "tests/regression/test_replacement_pr_failure_critical7.py (신규)",
    "dependencies": ["anu_v2/replacement_pr_runner.py (legacy) 또는 v3 equivalent (chair-approval needed)"],
    "execution_mode": "mock-based · 실 GitHub API 호출 0 · subprocess 0",
    "fixture_data": "memory/fixtures/replacement_pr_failure_critical7_*.json (RPF1~RPF8 input states)"
  },
  "auto_progress": false,
  "chair_approval_required": true,
  "scope_invariants_preserved": [
    "fixture design only", "실 execution 0", "PR/merge/branch/credential write 0",
    "Track C 미접촉", "zombie cron 미접촉", "CLOSED_ALL_SETTLED 산출물 byte-0"
  ]
}
