Card Schema Ingestion Review / 卡牌结构入库复核

Card Schema Ingestion Review is the assignable rite for deciding whether a card row can enter the requested slot, reader, or route.

Required slots

assignment_required:
  docket: storyteller.card.card_schema_ingestion_docket.v1
  source_card_id: <card id or explicit_absence>
  declared_card_family: schedule | character | scene | resource | secret | thought | blackout | equivalent | explicit_absence
  requested_use: schedule_slot | on_screen_slot | route_asset | proof_bridge | public_narrative | lawful_annex | sacrifice_payment | blackout_repair | equivalent
  required_card_family_or_slot: <family or slot>
  mismatch_kind: missing_field | wrong_family | stale_countdown | hidden_blackout | owner_absent | reader_scope_gap | equivalent
  carrier_or_owner: <owner or explicit_absence>
  proof_bridge_or_absence: <proof or explicit_absence>
  handler_or_reader: <reader or explicit_absence>
  selected_response: certify_declared_schema | narrow_schema_scope | convert_with_receipt | split_card_faces | quarantine_miscast_card | schema_waiver_with_debt | schema_miscast_default
  accepted_cost_or_debt: <cost or explicit_absence>
  future_reader_or_route_effect: <effect>

A visible card title or UI family icon is not enough. The rite must name requested use, mismatch, proof bridge or absence, accepted cost, and future effect.

Branch families

certify_declared_schema

relief_any: [slot_legality_confirmed, route_reader_accepts_scope]
cost_any: [off_family_use_blocked, alternate_reader_delayed]
future_effect_any: [declared_family_locked, current_route_only]

narrow_schema_scope

relief_any: [partial_slot_use_allowed, route_pressure_reduced]
cost_any: [broad_route_blocked, later_reader_requires_addendum]
future_effect_any: [narrow_reader_only, route_costlier]

convert_with_receipt

relief_any: [requested_slot_filled, proof_bridge_created]
cost_any: [conversion_debt_up, source_family_scarred]
future_effect_any: [converted_with_receipt, future_audit_required]

split_card_faces

relief_any: [two_reader_surfaces_preserved, contradiction_visible]
cost_any: [custody_debt_up, future_reader_split_required]
future_effect_any: [split_custody, later_reconciliation_required]

quarantine_miscast_card

relief_any: [false_schema_claim_blocked, future_fraud_cost_down]
cost_any: [route_delayed, replacement_needed]
future_effect_any: [quarantine_required, recovery_only_until_rebuilt]

schema_waiver_with_debt

relief_any: [immediate_airing_or_route_unblocked, pressure_temporarily_down]
cost_any: [sponsor_capture_up, edit_debt_up, archive_debt_up]
future_effect_any: [waived_with_debt, audit_reopen_required]

schema_miscast_default

emitted_event: storyteller.event.schema_miscast_default.v1
missing_or_hidden_inputs:
  - source_card_id
  - declared_card_family
  - requested_use
  - mismatch_kind
  - carrier_or_owner
  - proof_bridge
  - future_reader_or_route_effect
future_effect_any:
  [route_blocked, false_schema_recovery, blackout_pressure_up, clean_laundering_blocked]

Cost rule

Every constructive branch must show at least one relief, one cost, and one future reader or route mutation. The default branch must show durable penalty and cannot be treated as a harmless validation error.