# Pilot Acceptance Addendum — Fallback Disposition Criterion

> **Source**: 회장 task-2553+58 §2 verbatim (TRACK C).
> **Spec**: `memory/tasks/task-2553+58.md` (sha256 `976d904d…ed9ea40f71`).
> **Status**: 다음 runtime structure pilot (task-2553+57 plan) 의 **live acceptance criterion** 정식 추가.
> **Decouple**: 운영 품질 게이트 — 안전성 게이트를 대체/약화하지 않는다 (§5).

## 1. 추가되는 합격 기준 (회장 §2 verbatim)

normal callback durable-success 이후 bound fallback 은

- **(a)** cancel-on-success 로 제거되거나
- **(b)** registry 에 `NON_BLOCKING` 으로 명시 마크되어야 한다.

아무 마크 없이 fallback 이 발화한 뒤 `DUPLICATE_CALLBACK_IGNORED` 로만 처리되는 것은
**안전성 OK 지만 운영 품질 PASS 로 보지 않는다.**

## 2. 적용 범위

- **적용**: normal callback durable-success 가 선행했고 그 task 에 bound fallback 이 존재 → 기준 평가.
- **비적용 (NOT_APPLICABLE)**: durable-success 미선행 fallback 발화 = 정당 recovery. bound fallback 부재.
- fallback 은 절대 진행 트리거가 아니다 (회장 doctrine·+55: `registry_completed_event` 만 progress trigger). 고정시각/dead-man/fallback 진행 트리거 0.

## 3. 판정 (verdict)

| 조건 | verdict | 비고 |
|---|---|---|
| `normal_success_unchanged != true` | `SAFETY_FAIL` | fail-closed, 기준 평가 이전 |
| durable-success 미선행 / bound fallback 부재 | `NOT_APPLICABLE` | 정당 recovery |
| 기준 (a) — cancel-on-success 제거·미발화 | `OPERATIONAL_PASS` | satisfied `[a]` |
| 기준 (b) — NON_BLOCKING schema-valid·binding 일치 | `OPERATIONAL_PASS` | satisfied `[b]` |
| (a)·(b) 동시 | `OPERATIONAL_PASS` | satisfied `[a,b]` |
| 마크 無 + 발화 + `DUPLICATE_CALLBACK_IGNORED`/`NO-ACTION` only | `OPERATIONAL_QUALITY_FAIL` | **회장 §2 anti_pattern** — 안전성 OK, 품질 FAIL |
| 마크 無 + 그 외 | `OPERATIONAL_QUALITY_FAIL` | legacy 잔여 |

(표는 Markdown table 금지 규칙과 무관 — 본 문서는 산출물 기준표이며 응답 본문 아님.)

## 4. 검증 산출물 (문서-only 아님)

- 기준: `memory/events/fallback_acceptance_criteria.json` (`anu.fallback_acceptance_criteria.v1`)
- 스키마: `schemas/non_blocking_fallback_schema.json` (`task-2553+58.non_blocking_fallback_mark_v1`, draft-07, `additionalProperties:false`, owner/chat = ANU key const)
- 실 entrypoint: `scripts/validate_fallback_acceptance_2553plus58.py`
  - `evaluate_fallback_acceptance(observation)` — 기준 a/b/anti-pattern 판정
  - `validate_non_blocking_mark(mark)` — 기준 (b) schema 검증
  - `check_criteria_schema_coherence()` — criteria↔schema 정합
  - `main()` — read-only, 파일 write 0
- regression: `tests/regression/test_fallback_acceptance_2553plus58.py` (17 testcase, 실 entrypoint 직접 호출, mock-only FAIL 가드 test 15)
- fixture: `memory/fixtures/task-2553plus58.cases.json`

## 5. pilot 운용 지침

1. pilot 종료 시 각 dispatch 의 fallback disposition 을 observation 으로 수집.
2. `evaluate_fallback_acceptance` 로 판정. 1건이라도 `OPERATIONAL_QUALITY_FAIL` → pilot 운영 품질 FAIL (안전성 FAIL 과 구분, HOLD 아님 — 후속 micro-fix 백로그).
3. `SAFETY_FAIL` 은 안전성 결함 — 즉시 §6 공통 HOLD.
4. **North star**: cancel-on-success live adoption(+37/+45)이 본질 해소 → 기준 (a) 가 default. live adoption 전까지 기준 (b) 명시 마크가 최소 운영 품질 요건.

## 6. 근거 / 정합

- `memory/events/task-2553.legacy-pending-fallback-inventory_260518.json` `findings.7 future_requirement` 의 정식 기준화.
- `memory/events/task-2553+37.fallback-duplicate-callback-ignored_260518.json` — anti_pattern 실 선례 (DUPLICATE_CALLBACK_IGNORED·파괴 0).
- `schemas/cancel_on_success_audit.schema.json` — `normal_success_unchanged` 디커플 절대불변 (9-R Layer A/B).
- callback owner/key = ANU key `c119085addb0f8b7` (+49 코드 정본), executor self key 금지.
