Loadout Substitution Residue Receipt Lens
This lens checks that a route-loadout asset swap leaves a visible substitution residue instead of becoming a clean replacement.
Entry Oracle
entry_state:
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: trueThe lens fails if the packet opens from a fixed timer, route count, asset count, dashboard state, or lens-health state.
Checks
1. Docket preserves the old and substitute assets
loadout_substitution_residue_docket:
source_loadout_manifest: required
swapped_slot_id: required
requested_route_or_rite: required
original_asset: required
substitute_asset: required
substitution_reason: required
residue_holder_or_absence: required
harmed_reader_or_absence: required
selected_receipt_posture: required
original_asset_state_after: required
substitute_asset_state_after: required
future_route_effect: required
counter_deltas: required2. Review branches diverge
Required branch families:
certify_substitution_receipt;return_original_with_scar;quarantine_residue;split_reader_substitution;retire_original_as_scar;false_clean_substitution_default;future_effect_any.
3. Default mutates future play
false_clean_loadout_substitution_default:
false_clean_substitution: true
source_loadout_manifest: required
swapped_slot_id: required
original_asset: required
substitute_asset: required
hidden_residue_holder_or_absence: required
omitted_or_harmed_reader: required
default_narrator: required
future_reader_effect: required
counter_deltas_min: 3
durable_mutation: true4. Runtime rollup status is explicit
The packet includes focused source JSON5 objects under game-content/storyteller plus a durable lens replay export. It is evaluator-bound now; public runtime rollup can be refreshed later without changing the observable contract.