# dryrun_shadow fixture INDEX (task-2634 · B1 pilot 보강 task-2638)

dry-run executor (`utils/merge_ready_dryrun_executor.py`) 의 routing 정확성 shadow
validation 용 **16 fixture** 인덱스.

- read-only · frozen evidence only · live GitHub/git 의존 0
- `actually_executed=false` 강제 · `executor_action` WOULD_* 접두사 강제
- 단일소스 spec: `memory/specs/system_dryrun_executor_shadow_validation_spec_260523.md`
- regression: `tests/regression/test_dryrun_executor_shadow_validation.py`
- B1 pilot 보강 spec: `memory/specs/system_b1_pilot_dryrun_shadow_index_spec_260523.md`

## verdict → executor_action 매핑 (단일소스 sanitized · 4종)

본 매핑은 dry-run executor 의 라우팅 계약 (`actually_executed=false` 강제 하에서)
verdict 분류별 대표 `executor_action` 을 정리한 sanitized snapshot 이다.
실 라우팅 진위 검증은 `tests/regression/test_dryrun_executor_shadow_validation.py`
가 evidence/expected 쌍을 기준으로 수행한다.

| verdict | expected_action | sub-routing 형태 | scenario count |
|---|---|---|---|
| PASS | WOULD_MERGE | auto_merge_candidate.v1 · `requires_chair_activation=true` | 6 |
| HOLD | WOULD_AUTO_REMEDIATE | remediation_required.v1 · auto_remediable 별 sub-action | 4 |
| CHAIR_REQUIRED | WOULD_ESCALATE_CHAIR | hold_for_chair.v1 · chair_triggers 대표 | 4 |
| UNKNOWN | WOULD_REGATHER | hold_for_chair.v1 · `reason=INSUFFICIENT_EVIDENCE` | 2 |

**합계 = 16 시나리오** (PASS 6 + HOLD 4 + CHAIR_REQUIRED 4 + UNKNOWN 2)

## PASS 6 — WOULD_MERGE (historical real PR 머지분)

| # | scenario | PR | task_id | head | merge_commit | merged_utc | expected_action | 비고 |
|---|---|---|---|---|---|---|---|---|
| 1 | shadow_pass_pr131_l3_classifier | #131 | task-2624 | 51baef22 | 4b3fde25 | 2026-05-22T08:52:52Z | WOULD_MERGE | L3 callback runtime classifier core |
| 2 | shadow_pass_pr132_l1l2_credential_passthrough | #132 | task-2627 | 25ddbf4e | 94540f67 | 2026-05-22T09:47:42Z | WOULD_MERGE | credential 3-tier EXISTING passthrough |
| 3 | shadow_pass_pr133_l4_wiring_mixed_remediation | #133 | task-2629 | 92b06188 | 9ee79286 | 2026-05-22T11:19:24Z | WOULD_MERGE | HIGH+medium 자동수렴 + reasoned-resolve |
| 4 | shadow_pass_pr134_e2e_production_code_zero | #134 | task-2630 | 0565114e | 24fadbf8 | 2026-05-22T12:40:31Z | WOULD_MERGE | production code 변경 0 |
| 5 | shadow_pass_pr135_loop_boundary_resolved | #135 | task-2632 | 270ebfc4 | c80e875d | 2026-05-22T14:56:31Z | WOULD_MERGE | 7-round LOOP_BOUNDARY resolved |
| 6 | shadow_pass_pr136_dryrun_only | #136 | task-2633 | 83e88543 | b2932ce0 | 2026-05-22T15:48:39Z | WOULD_MERGE | dry-run executor 자체의 shadow |

## HOLD 4 — WOULD_AUTO_REMEDIATE (auto_remediable)

PR/task_id 는 fixture-synthetic (실 PR 머지 이력 아님 · routing 분기 검증 전용).

| # | scenario | PR | task_id | auto_remediable | sub-action |
|---|---|---|---|---|---|
| 7 | shadow_hold_ci_pending | #901 (fx) | task-fx-hold-ci-pending | CI_PENDING | WOULD_WAIT_RECHECK |
| 8 | shadow_hold_gemini_evidence_stale | #902 (fx) | task-fx-hold-gemini-stale | GEMINI_EVIDENCE_STALE | WOULD_OWNER_GEMINI_REVIEW_NUDGE |
| 9 | shadow_hold_gemini_medium_within_expected | #903 (fx) | task-fx-hold-gemini-medium | GEMINI_MEDIUM_WITHIN_EXPECTED | WOULD_AUTO_FIX_REGRESS_PUSH_RESOLVE_RECHECK |
| 10 | shadow_hold_unresolved_medium_thread | #904 (fx) | task-fx-hold-thread-medium | UNRESOLVED_MEDIUM_THREAD | WOULD_RESOLVE_THREAD_RECHECK |

## CHAIR_REQUIRED 4 — WOULD_ESCALATE_CHAIR (chair_triggers)

PR/task_id 는 fixture-synthetic.

| # | scenario | PR | task_id | chair_triggers (대표) |
|---|---|---|---|---|
| 11 | shadow_chair_blocking_secret | #905 (fx) | task-fx-chair-blocking-secret | CREDENTIAL_PERMISSION_EXPANSION (BLOCKING_SECRET) |
| 12 | shadow_chair_admin_override_required | #906 (fx) | task-fx-chair-admin-override | CRITICAL7 (C7_OVERRIDE) + ADMIN_OVERRIDE_REQUIRED |
| 13 | shadow_chair_replacement_pr_runner_modified | #907 (fx) | task-fx-chair-forbidden-path | CRITICAL7 (C7_FORBIDDEN_PATH) + OUT_OF_EXPECTED_FILES_MODIFICATION |
| 14 | shadow_chair_loop_boundary_critical_repetition | #908 (fx) | task-fx-chair-loop-boundary | AUTO_REMEDIATION_LOOP_BOUNDARY_REVIEW |

## UNKNOWN 2 — WOULD_REGATHER (INSUFFICIENT_EVIDENCE)

PR/task_id 는 fixture-synthetic.

| # | scenario | PR | task_id | 사유 |
|---|---|---|---|---|
| 15 | shadow_unknown_evidence_missing | #909 (fx) | task-fx-unknown-evidence-missing | core gate evidence(scope/gates) 결핍 |
| 16 | shadow_unknown_lifecycle_incident_normal_miss | #910 (fx) | task-fx-unknown-lifecycle-incident | lifecycle delivery_outcome=normal_miss · root_cause unknown |

## 안전 불변식 (전 fixture 공통)

- `actually_executed=false` (100%)
- `executor_action` WOULD_* 접두사 (100%)
- merge/push/PR/cron/branch-protection/admin-override 호출 0
- live GitHub/git 의존 0 (frozen evidence only)
- replacement_pr_runner.py / finish-task.sh / merge_ready_classifier.py / merge_ready_dryrun_executor.py 수정 0
- 본 INDEX.md 갱신 (task-2638 B1 pilot) = doc-only · evidence.json/expected.json/regression 0 변경
