# normal_callback_registration — fixture INDEX

task-2635 + task-2635+1 frozen fixture 묶음. spec: `memory/specs/system_normal_callback_registration_implementation_spec_260523.md` (sha256 `0fbd1dad...b832d`).

각 시나리오 디렉터리는 동일 3-파일 스키마:
- `evidence.json` — registrar/finalize 입력 (5축 envelope dict)
- `expected.json` — finalize_result · fail_closed · fallback_cancel_signal · collector_spawn_expected · 5축 단언값 · contradictions_expected
- `PROVENANCE.md` — 시나리오 설명 · spec 근거 · 비결정성 점검 · 변경 이력

## 10 시나리오 (5 기존 + 5 신규)

### 기존 5 (task-2635) — 5축 갱신 완료

| 시나리오 | intent | attempted | result | delivery | receipt | fail_closed | fb_cancel | spawn | complete |
|---|---|---|---|---|---|---|---|---|---|
| `registered_normal` | T | T | REGISTERED | DELIVERED | RECEIVED | false | true | true | true |
| `not_registered_envelope_only` | T | F | NOT_REGISTERED | NOT_APPLICABLE | NOT_APPLICABLE | true | false | false | false |
| `sendfile_only_no_cron` | T | F | SENDFILE_ONLY | NOT_APPLICABLE | NOT_APPLICABLE | true | false | false | false |
| `register_failed_cli_error` | T | T | REGISTER_FAILED | UNDELIVERED | NOT_APPLICABLE | true | false | false | false |
| `skipped_explicit_reason_dryrun` | T | F | SKIPPED_WITH_EXPLICIT_REASON | NOT_APPLICABLE | NOT_APPLICABLE | false | true | false | false |

### 신규 5 (task-2635+1)

| 시나리오 | intent | attempted | result | delivery | receipt | fail_closed | fb_cancel | spawn | complete |
|---|---|---|---|---|---|---|---|---|---|
| `registered_schedule_id_present` | T | T | REGISTERED | DELIVERED | UNCONFIRMED | false | false | true | true |
| `sendfile_only_not_registered` | T | F | SENDFILE_ONLY | NOT_APPLICABLE | NOT_APPLICABLE | true | false | false | false |
| `attempted_but_register_failed` | T | T | REGISTER_FAILED | UNDELIVERED | NOT_APPLICABLE | true | false | false | false |
| `registered_but_not_yet_received` | T | T | REGISTERED | DELIVERED | UNCONFIRMED | false | false | true | true |
| `received_by_anu_collector` | T | T | REGISTERED | DELIVERED | RECEIVED | false | true | true | true |

## 5축 정본 (task-2635+1 §1)

- **axis-1 `registration_intent`** (bool) — callback 등록 의도. 회장 사전 면제 시만 False, 외에는 True.
- **axis-2 `registration_attempted`** (bool) — 실제 registrar 호출 시도 발생 여부.
- **axis-3 `registration_result_status`** (enum) — REGISTERED · NOT_REGISTERED · REGISTER_FAILED · SENDFILE_ONLY · SKIPPED_WITH_EXPLICIT_REASON.
- **axis-4 `callback_delivery_status`** (enum) — PENDING · DELIVERED · UNDELIVERED · NOT_APPLICABLE.
- **axis-5 `collector_receipt_status`** (enum) — UNCONFIRMED · RECEIVED · TIMED_OUT · NOT_APPLICABLE.

legacy `registration_status` 필드는 backward-compat alias 로 axis-3 와 항상 동기화. validator 가 alias drift 발생 시 FAIL.

## 안전 불변식
- ANU key `c119085addb0f8b7` 단일 출처 (모든 evidence.json)
- envelope UTF-8 ≤3900 bytes (spec §3.1)
- live cokacdir CLI 호출 0 (regression 은 mock runner 주입)
- merge/push/PR/cron 실호출 0

## consume 위치
- `tests/regression/test_callback_registration_enforcement.py` — 5 기존 시나리오
- `tests/regression/test_callback_registration_status_consistency.py` — **신규 (task-2635+1)**: 6 모순 조합 + 신규 5 fixture
- `tests/regression/test_collector_spawn_dry_run.py` — REGISTERED vs NOT_REGISTERED
- `tests/regression/test_callback_vs_sendfile_separation.py` — sendfile_only fixture
- `tests/regression/test_anu_callback_registrar.py` — registered_normal · register_failed_cli_error envelope schema
