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: trueState Machine
| State | Meaning | Required consequence |
|---|---|---|
pending_receipt | The substitute has been selected but old-asset residue is not bound. | The route cannot claim clean replacement. |
certified_with_scope | The substitute carries a named receipt and boundary. | Future readers must check the receipt scope. |
original_returned_with_scar | The old asset returns, but stale, scoped, or costly. | Route acceptance changes by asset identity. |
residue_quarantined | The old and substitute assets are both blocked pending proof. | Route delay, proof burden, or archive heat rises. |
reader_split | Different readers accept different asset histories. | Future play must route public, lawful, sponsor, or archive readers separately. |
original_retired_as_scar | The old asset exits clean route use but remains visible. | Ending, memorial, recovery, or debt play inherits the scar. |
false_clean_substitution | The 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.