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: true

The 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: required

2. 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: true

4. 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.