Substitute Carrier Requisition Review / 替代承载征调复核

This rite reviews 替代承载征调案卷 and selects how a contested service row will be carried after the original carrier fails, refuses, is overdrawn, or is scope-limited.

The rite belongs to 替代承载征调线 and 替代承载征调机制.

Offer condition

offer_condition:
  trigger_kind: state_pressure
  docket_present: storyteller.card.substitute_carrier_requisition_docket.v1
  source_service_row_visible: true
  original_carrier_unavailable_or_limited: true
  candidate_substitute_or_explicit_absence_visible: true
  future_consumer_visible: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
  no_raw_staff_count_trigger: true

The rite must not appear as a fixed maintenance phase or because a raw number of carriers is low.

Assignment slots

The player must assign or explicitly leave absent each slot:

assignment:
  docket: storyteller.card.substitute_carrier_requisition_docket.v1
  selected_service_row: <source row id>
  original_carrier: <carrier id or explicit_absence>
  candidate_substitute: <candidate id or explicit_absence>
  candidate_class: low_rank_runner | public_witness_or_delegate | lawful_clerk_or_annex | editor_mask_or_checksum | pirate_relay | sponsor_or_management_proxy | explicit_absence | equivalent
  handler_or_absence: <handler id or explicit_absence>
  proof_bridge_or_absence: public_receipt | lawful_annex | witness_oath | route_asset_receipt | edit_checksum | pirate_relay | sponsor_clause | explicit_absence
  protection_or_price_or_absence: payroll | safety_oath | public_exposure | bureau_debt | edit_debt | sponsor_capture | delay | quarantine | explicit_absence
  selected_posture: fit_test | narrow_reader | media_substitute | proxy_substitute | preserve_absence | default_miscast
  future_consumer: <route slot reader package proof window or broadcast reality surface>

The rite fails if a powerful character, legal seal, sponsor payment, archive copy, edit patch, or public mood resolves the row without filling these slots.

Branches

Fit test

Use when a candidate can honestly carry the required service for a named scope.

branch: fit_test
requirements:
  reader_fit_not_wrong: true
  surface_fit_not_absent: true
  carrier_fit_not_false_clean: true
result:
  substitute_fit_state: fit_for_named_scope
  source_row_state_after: served_by_substitute_for_named_scope
  candidate_state_after: assigned_costed
  future_consumer_effect: accepted_with_scope | callback_required | costlier

Narrow reader

Use when the candidate is useful but only for public, lawful, sponsor, or route-specific readers.

branch: narrow_reader
result:
  substitute_fit_state: public_only | lawful_only | sponsor_only | route_only
  source_row_state_after: partial_service
  future_consumer_effect: addendum_required | appeal_required | public_receipt_required | lawful_annex_required | split_required

Media substitute

Use when Baiya style masking or Pirate Frequency Child Voice style relay can protect the person or force visibility while narrowing authority.

branch: media_substitute
result:
  substitute_fit_state: masked | pirate_public | split_source
  source_row_state_after: media_carried_partial_service
  future_consumer_effect: contradiction_pending | public_only | recovery_only | costlier

Proxy substitute

Use when the player accepts sponsor, management, or producer-license pressure as the substitute carrier.

branch: proxy_substitute
result:
  substitute_fit_state: sponsor_proxy | management_proxy
  source_row_state_after: proxy_carried_partial_service
  future_consumer_effect: sponsor_only | management_only | audit_required | contract_capture

Preserve absence

Use when no honest substitute exists or the player chooses to record refusal, quarantine, delay, or blocked state.

branch: preserve_absence
result:
  substitute_fit_state: honest_absence | quarantine_required | blocked
  source_row_state_after: deferred_or_blocked_with_absence_recorded
  future_consumer_effect: delayed | costlier | recovery_only | blocked

Default miscast

Use when the docket is ignored, underfilled, or a wrong substitute is filed as clean service.

branch: default_miscast
result:
  substitute_fit_state: false_clean_miscast
  event_seen_or_armed: storyteller.event.substitute_carrier_miscast_default.v1
  future_consumer_effect: contradiction_pending | hostile | blocked | recovery_only | broadcast_reality_drift

Resolution contract

Each branch must write:

resolution:
  selected_posture: <branch>
  source_row_state_after: <state>
  candidate_state_after: <state or explicit_absence>
  substitute_fit_state: <state>
  reader_scope_after: <scope>
  protected_original_scar: true | false
  future_consumer_effect: <effect>
  counter_deltas:
    relief: []
    cost: []
    future: []

Every resolved branch must include at least one relief delta, one cost delta, and one future-route or future-reader delta.

Hard prohibitions

The rite must reject, default, or route-cost any choice that attempts to make:

  • a substitute into the original carrier;
  • public-only proof into lawful proof;
  • lawful-only proof into public consent;
  • sponsor proxy into public consent;
  • editor mask into clean witness service;
  • pirate relay into lawful mandate;
  • absence into service;
  • payment into consent;
  • no future reader into closure.

Replay evidence

rite: storyteller.rite.substitute_carrier_requisition_review.v1
session_id: rite-substitute-carrier-requisition-review-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  source_service_row_visible: true
  original_carrier_unavailable_or_limited: true
  candidate_substitute_or_explicit_absence_visible: true
  future_consumer_visible: true
assignment:
  selected_service_row: <row>
  candidate_substitute: <candidate or explicit_absence>
  selected_posture: <branch>
branch_result:
  substitute_fit_state: <state>
  reader_scope_after: <scope>
  future_consumer_effect: <effect>
  event_seen_or_armed: storyteller.event.substitute_carrier_miscast_default.v1 | none
  counter_deltas: {}
assertions:
  - source_row_preserved
  - substitute_is_not_original
  - future_consumer_reads_result
  - no_fixed_turn_trigger