Loadout Substitution Residue Receipt

Loadout Substitution Residue Receipt opens after a route-loadout row swaps one asset for another and before any future route consumes either asset as clean proof.

The mechanic is not the swap itself. Route Loadout Compatibility owns compatibility and the first swap decision. This mechanic owns the afterimage: the original asset, substitute asset, residue holder, harmed reader, selected receipt posture, and future route effect.

Required State

entry_state_required:
  trigger_kind: state_pressure
  source_loadout_manifest_visible: true
  swapped_slot_visible: true
  requested_route_visible: true
  original_asset_visible: true
  substitute_asset_visible: true
  substitution_reason_visible: true
  residue_holder_visible_or_explicit_absence: true
  harmed_reader_visible_or_explicit_absence: true
  future_reader_consumes_substitution_state: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
  no_raw_asset_count_trigger: true
  no_raw_route_count_trigger: true
  no_dashboard_or_lens_health_trigger: true

State Machine

StateMeaningRequired consequence
pending_receiptThe substitute has been selected but old-asset residue is not bound.The route cannot claim clean replacement.
certified_with_scopeThe substitute carries a named receipt and boundary.Future readers must check the receipt scope.
original_returned_with_scarThe old asset returns, but stale, scoped, or costly.Route acceptance changes by asset identity.
residue_quarantinedThe old and substitute assets are both blocked pending proof.Route delay, proof burden, or archive heat rises.
reader_splitDifferent readers accept different asset histories.Future play must route public, lawful, sponsor, or archive readers separately.
original_retired_as_scarThe old asset exits clean route use but remains visible.Ending, memorial, recovery, or debt play inherits the scar.
false_clean_substitutionThe substitute is filed as universal replacement.Default hardens and future route becomes hostile, blocked, or recovery-only.

Branch Contract

Every resolution must record:

loadout_substitution_residue:
  source_loadout_manifest: storyteller.card.route_loadout_manifest.v1
  swapped_slot_id: <slot>
  requested_route_or_rite: <route rite or explicit_absence>
  original_asset: <asset or explicit_absence>
  substitute_asset: <asset or explicit_absence>
  substitution_reason: scope_mismatch | custody_conflict | stale_asset | false_owner | carrier_limit | proof_truth_mismatch | explicit_absence | equivalent
  residue_holder_or_absence: <holder or explicit_absence>
  harmed_reader_or_absence: <reader or explicit_absence>
  selected_posture: certify_substitution_receipt | return_original_with_scar | quarantine_residue | split_reader_substitution | retire_original_as_scar | false_clean_substitution_default
  original_asset_state_after: receipted | stale | scoped | quarantined | reader_split | retired | captured | false_absent | recovery_only | equivalent
  substitute_asset_state_after: accepted_with_scope | overexposed | blocked | split_required | sponsor_only | lawful_only | public_only | recovery_only | equivalent
  future_route_effect: accepted_with_receipt | costlier | bridge_required | split_required | blocked | hostile | contradiction_pending | recovery_only | equivalent
  counter_deltas: []

Non-goals

  • Not a general asset inventory rule.
  • Not another loadout compatibility check.
  • Not a salvage-floor recall.
  • Not valid if the original asset disappears without a receipt, holder or absence, harmed reader, and future route effect.