Salvage Loadout Recall / 残存装配召回线

Salvage Loadout Recall is the pressure storyline for the moment a later route loadout tries to use the minimum remaining floor of a stopped, discontinued, recovery-only, or scar-retired route.

残存底线指派线 makes the floor itself playable. 路线装配兼容线 makes multi-asset bundles playable. The missing seam is what happens when those two correct surfaces meet: a salvage floor can be a valid remaining object, but it is not automatically a fresh compatible asset slot.

This storyline turns that recall into playable management work instead of letting a route bundle launder a discontinued route’s residue.

Primary playable question

When a route bundle wants to consume a salvage floor, does the producer re-scope the floor into the slot, bridge it with proof, substitute it, split it away from the loadout, reopen it with bond, retire it as scar, quarantine it, or let the fastest narrator file it as clean?

A valid answer must name the source floor, source route, floor state, holder, original floor posture, route slot, requested clean claim, harmed or owed reader, selected posture, cost, and future route effect.

Gap diagnosis

The current mesh is green around these surfaces:

  • route discontinuance preserves a salvage floor rather than deleting a stopped route;
  • salvage floor assignment decides floor holder, reader scope, foreclosure risk, scar, and recovery-only state;
  • route loadout compatibility prevents individually valid assets from becoming a clean bundle by raw count;
  • recovery indemnity decides who carries later recourse after a stabilized route;
  • evidence carryover and replay-resume collision preserve old proof state when it returns.

The uncovered execution risk sits between salvage and loadout: a future route can load salvage_floor_present as if it were asset_slot_ready. That creates a false clean route without ever asking whether the floor was public-only, lawful-only, carried, pledged, split, retired, quarantined, or recovery-only.

Bound content pack

This storyline uses existing concrete implementation surfaces instead of adding placeholder cards:

State-triggered entry

Open this storyline only from live state pressure:

entry_state_required:
  trigger_kind: state_pressure
  route_loadout_manifest_present_or_requested: true
  salvage_floor_present_or_explicit_absence: true
  floor_source_route_discontinued_or_recovery_only: true
  loadout_slot_attempts_to_use_floor: true
  floor_state_before_visible: true
  floor_holder_or_explicit_absence_visible: true
  original_floor_assignment_posture_or_explicit_absence_visible: true
  harmed_or_owed_reader_visible_or_explicit_absence: true
  future_reader_or_route_consumes_floor_slot: true
  player_can_rescope_bridge_substitute_split_bond_retire_quarantine_or_default: 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

Valid entry examples:

  • a route loadout uses a public notice floor inside a sponsor package;
  • a lawful-only salvage seal is loaded as public truth;
  • a carried witness-payroll floor is used without protection;
  • a recovery-only marker is loaded as a fresh route key;
  • a split floor is collapsed into one clean proof bundle;
  • a retired floor is used to reopen a route without memorial or ending scar;
  • a pledged floor is consumed after collateral or underwriter has gone absent;
  • an absent holder is treated as implicit consent.

Storyline spine

Beat 1 — A route wants a floor as a slot

A future route, package, correction, lawful bridge, fan refund lane, sponsor makegood, memorial path, callback, or ending-adjacent route asks for a loadout slot. The candidate asset is not a fresh asset: it is a salvage floor from a stopped route.

Beat 2 — The floor is recalled

The game reads 残存底线案卷 before the route accepts the slot.

The docket must reveal the floor kind, state before, holder or explicit absence, source discontinuance row, requesting reader, harmed or owed reader, and original assignment posture.

Beat 3 — The loadout records the floor as scoped

The game updates 路线装配清单 with a slot that names the salvage floor and its restriction.

The route cannot write asset_available. It must write floor_loaded_with_scope, floor_needs_bridge, floor_substituted, floor_split_out, floor_bond_required, floor_retired, floor_quarantined, or false_floor_slot.

Beat 4 — The producer resolves the cross-pressure

The producer chooses one posture:

  • re-scope floor slot;
  • bridge floor to loadout;
  • substitute floor slot;
  • split floor from loadout;
  • bond reopen slot;
  • retire floor from loadout;
  • quarantine floor slot;
  • accept false loadout default.

Beat 5 — Future play consumes the result

The storyline is complete only when a later reader, route, rite, desk, claimant, memorial, ending scar, archive reader, public reader, sponsor reader, worker reader, or broadcast-reality row consumes the floor-slot state.

If future play consumes the slot without the recalled floor state, one or both defaults fire or remain armed.

Branch map

Branch A — Re-scope floor slot

The floor remains in the loadout, but its scope travels with it.

selected_posture: rescope_floor_slot
floor_state_after: scoped_for_slot
loadout_state_after: compatible_with_floor_scope
relief_any:
  - route_access_unlocked
  - false_floor_reuse_down
  - floor_holder_visibility_up
cost_any:
  - excluded_reader_hostility_up
  - sponsor_or_public_friction_up
  - handler_burden_up
future_effect_any:
  - accepted_with_scope
  - public_only
  - lawful_only
  - sponsor_only

Branch B — Bridge floor to loadout

The floor can support the route only after an explicit proof bridge.

selected_posture: bridge_floor_to_loadout
floor_state_after: bridged
loadout_state_after: bridge_required
relief_any:
  - route_bundle_legibility_up
  - custody_clarity_up
cost_any:
  - archive_debt_up
  - inspection_heat_up
  - public_receipt_debt_up
  - handler_burden_up
future_effect_any:
  - costlier
  - bridge_required
  - lawful_annex_or_public_addendum_required

Branch C — Substitute floor slot

The floor is removed from the bundle and another asset carries the slot.

selected_posture: substitute_floor_slot
floor_state_after: floor_residue_recorded
loadout_state_after: substituted
relief_any:
  - compatibility_conflict_down
  - route_access_unlocked
cost_any:
  - substitute_wear_up
  - old_floor_scar_pressure_up
  - route_asset_pressure_up
future_effect_any:
  - substituted_slot
  - old_floor_notice_required
  - old_floor_recovery_only

Branch D — Split floor from loadout

The floor can serve one reader but cannot sit inside the shared bundle.

selected_posture: split_floor_from_loadout
floor_state_after: split_out
loadout_state_after: split_required
relief_any:
  - incompatible_readers_separated
  - private_capture_down
cost_any:
  - schedule_pressure_up
  - source_ambiguity_up
  - carrier_burden_up
future_effect_any:
  - route_forked
  - split_required
  - future_reconciliation_required

Branch E — Bond reopen slot

The floor can reopen limited route use only if collateral, underwriter, and recall reader remain visible.

selected_posture: bond_reopen_slot
floor_state_after: reopened_with_bond
loadout_state_after: bond_required
relief_any:
  - route_reopen_possible
  - floor_value_preserved
cost_any:
  - producer_license_encumbrance_up
  - sponsor_capture_up
  - recovery_indemnity_pressure_up
future_effect_any:
  - bond_required
  - recall_reader_armed
  - costlier

Branch F — Retire floor from loadout

The floor cannot be used as a slot; it becomes scar, memorial, public, recovery, or ending state.

selected_posture: retire_floor_from_loadout
floor_state_after: retired_as_scar
loadout_state_after: slot_removed_or_route_narrowed
relief_any:
  - false_reopen_blocked
  - ending_or_memorial_scar_legibility_up
cost_any:
  - route_access_blocked_or_narrowed
  - fan_or_public_grief_pressure_up
  - sponsor_stop_loss_pressure_up
future_effect_any:
  - recovery_only
  - scar_inherited
  - route_blocked_until_substitute

Branch G — Quarantine floor slot

The floor and route slot are preserved but cannot be consumed until review.

selected_posture: quarantine_floor_slot
floor_state_after: quarantined
loadout_state_after: blocked_until_floor_review
relief_any:
  - unsafe_reuse_down
  - false_owner_pressure_down
cost_any:
  - route_delay_up
  - route_asset_pressure_up
  - management_pressure_up
future_effect_any:
  - blocked
  - recovery_only
  - proof_review_required

Branch H — False loadout default

The floor is filed as a clean compatible slot.

selected_posture: accept_false_loadout_default
floor_state_after: false_clean_floor_slot | captured | hostile | foreclosure_pending | recovery_only
loadout_state_after: false_compatible | captured | contradiction_pending | blocked | recovery_only
emitted_or_armed_any:
  - storyteller.event.salvage_floor_foreclosure_default.v1
  - storyteller.event.incompatible_loadout_default.v1
cost_any:
  - floor_foreclosure_pressure_up
  - false_clean_bundle_up
  - omitted_reader_hostility_up
future_effect_any:
  - blocked
  - hostile
  - contradiction_pending
  - sponsor_unwind_required
  - public_addendum_required
  - lawful_annex_required
  - recovery_only

Counter contract

Every branch must mutate at least three surfaces:

  1. floor or holder state;
  2. loadout or route slot state;
  3. future reader, route, scar, debt, or recovery effect.

Primary surfaces:

  • salvage_floor_pressure
  • floor_holder_exposure
  • floor_foreclosure_pressure
  • loadout_integrity
  • asset_slot_pressure
  • compatibility_conflict
  • route_reopen_cost
  • recovery_only_pressure
  • archive_debt
  • inspection_heat
  • public_notice_delay
  • fan_oxygen_resentment
  • sponsor_stop_loss_pressure
  • contract_capture
  • carrier_exposure
  • witness_reprisal_risk
  • source_ambiguity
  • omitted_reader_hostility
  • producer_license_encumbrance
  • ending_scar_pressure
  • broadcast_reality_drift

Integration notes

Replay/session evidence shape

storyline_id: storyteller.storyline.salvage_loadout_recall.v1
session_id: lens-salvage-loadout-recall-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  route_loadout_manifest_present_or_requested: true
  salvage_floor_present_or_explicit_absence: true
  floor_source_route_discontinued_or_recovery_only: true
  loadout_slot_attempts_to_use_floor: true
  floor_state_before_visible: true
  floor_holder_or_explicit_absence_visible: true
  future_reader_or_route_consumes_floor_slot: true
  no_fixed_turn_trigger: true
source_floor:
  card: storyteller.card.salvage_floor_docket.v1
  source_route_or_asset_id: <route asset or explicit_absence>
  floor_kind: <kind>
  floor_state_before: <state>
  floor_holder_or_absence: <holder or explicit_absence>
  original_assignment_posture_or_absence: <posture or explicit_absence>
  harmed_or_owed_reader_or_absence: <reader or explicit_absence>
loadout_use:
  card: storyteller.card.route_loadout_manifest.v1
  requested_route_or_rite: <route rite package or explicit_absence>
  slot_id: <slot>
  requested_clean_claim: <claim>
  future_reader: <reader>
  compatibility_risk: <risk or explicit_no_risk>
resolution:
  selected_posture: rescope_floor_slot | bridge_floor_to_loadout | substitute_floor_slot | split_floor_from_loadout | bond_reopen_slot | retire_floor_from_loadout | quarantine_floor_slot | accept_false_loadout_default
  floor_state_after: <state>
  loadout_state_after: <state>
  future_route_effect: <effect>
  emitted_event_or_absence: storyteller.event.salvage_floor_foreclosure_default.v1 | storyteller.event.incompatible_loadout_default.v1 | both | explicit_absence
  counter_deltas:
    relief: []
    cost: []
    future: []
assertions:
  - salvage_floor_is_not_clean_asset_slot
  - floor_assignment_travels_into_loadout_state
  - holder_and_harmed_reader_visible_or_explicit_absence
  - branch_postures_diverge
  - success_has_cost
  - substitution_leaves_residue
  - default_is_dual_and_durable
  - future_route_consumes_floor_slot_state
  - no_fixed_turn_day_week_raw_count_dashboard_or_lens_health_trigger

Missability and recovery

This storyline is missed when implementation:

  • lets a salvage floor count as generic asset availability;
  • hides the source discontinuance row;
  • hides original floor assignment posture;
  • hides floor holder or harmed reader;
  • loads public-only, lawful-only, sponsor-only, split, pledged, retired, quarantined, or recovery-only floor state as fresh;
  • substitutes the floor without residue;
  • fires only one generic warning when both floor foreclosure and loadout incompatibility are relevant;
  • triggers from fixed timing, route count, asset count, dashboard state, or lens health.

Recovery is allowed only with visible scar:

  • rebuild the loadout manifest;
  • reopen the salvage floor docket;
  • add public, lawful, sponsor, archive, worker, claimant, memorial, or ending addendum;
  • substitute the slot and keep old-floor residue;
  • split the route;
  • require bond or indemnity shelf;
  • quarantine the floor;
  • convert route to costlier, blocked, hostile, contradiction-pending, scar-inherited, or recovery-only.

Non-goals

  • Not a new route cancellation system.
  • Not an inventory optimizer.
  • Not a raw asset-count check.
  • Not a generic aftershock.
  • Not a dashboard or governance page.
  • Not valid if a discontinued route’s minimum floor can unlock a future route cleanly.