Route Loadout Compatibility / 路线装配兼容线

Route Loadout Compatibility is the pressure storyline for the moment a future route asks production to assemble several already-existing route assets into one route bundle.

Storyteller already has strong surfaces for asset maintenance, discontinuance, scar convergence, ledger reconciliation, feed ranking, and producer alibi. The remaining gap is not whether a single asset survives. It is whether the selected assets can coexist in the same route without laundering their scopes into a clean bundle.

Primary playable question

When a route needs two or more assets, does the producer reconcile the bundle with scope, swap one asset, narrow the route use, split the loadout, quarantine the combination, sacrifice a slot, or let the fastest narrator declare the loadout compatible?

The answer must name the requested route, each slot, each asset state, the compatibility conflict, harmed reader or claimant, selected posture, cost, and future route effect.

Gap diagnosis

The current mesh already handles adjacent problems:

The unfilled execution risk is composition. A route may ask for a public proof, lawful bridge, sponsor release, editor checksum, protected witness, and route asset in the same package. Each can be valid alone while the bundle is false.

Bound content pack

This storyline binds:

State-triggered entry

Open this storyline only when all required state is visible:

entry_state_required:
  trigger_kind: state_pressure
  requested_route_or_rite_present: true
  required_asset_slots_min: 2
  asset_candidates_present_or_explicit_absence: true
  each_asset_has_state: true
  each_asset_has_custodian_or_explicit_absence: true
  compatibility_risk_or_explicit_no_risk_visible: true
  harmed_reader_or_claimant_visible_or_explicit_absence: true
  future_route_or_reader_consumes_loadout_state: true
  player_can_reconcile_swap_narrow_split_quarantine_sacrifice_or_default: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
  no_raw_asset_count_trigger: true
  no_dashboard_or_lens_health_trigger: true

Valid entry examples:

  • a public correction route asks for both a lawful seal and a fan receipt, but the seal is lawful-only;
  • a sponsor package wants to bundle a makegood release with a public fan table;
  • a recovery route asks for an editor checksum and archive copy that certify different objects;
  • a memorial route asks to expose a protected witness beside a sponsor-safe voice release;
  • a carrier is assigned two custody objects that cannot be held together;
  • a route asset was registered as recovery-only but is loaded as fresh;
  • a false owner controls one slot and would poison the whole route if accepted.

Storyline spine

Beat 1 — A route requests a bundle

A future route, rite, correction, lawful bridge, public table, sponsor package, recovery lane, or broadcast slot asks for at least two route assets.

The game creates or updates 路线装配清单.

Beat 2 — Slot scope becomes visible

Each slot names its required role, candidate asset, current state, custodian or explicit absence, accepted scope, and source surface.

The route cannot treat asset_available as bundle_compatible.

Beat 3 — Compatibility conflict is named

At least one pair is checked for reader scope, custody owner, proof truth, checksum/archive mismatch, sponsor/public mismatch, lawful/artist boundary, witness protection, carrier capacity, stale freshness, or false-owner pressure.

If no conflict exists, the manifest still records explicit no-risk state so future readers can distinguish valid compatibility from uninspected compatibility.

Beat 4 — The player reconciles or defaults

Run 路线装配对表. The player chooses:

  • reconcile with scope;
  • swap asset;
  • narrow route use;
  • split loadout;
  • quarantine combination;
  • sacrifice slot;
  • allow incompatible default.

Beat 5 — Future play consumes loadout state

A branch is complete only when future play reads the result: route accepted with scope, bridge required, public-only, lawful-only, sponsor-only, split required, costlier, hostile, blocked, contradiction-pending, or recovery-only.

If a future route consumes a multi-asset bundle with no manifest or hidden conflict, 不兼容装配默认 fires or arms.

Branch model

Branch A — Reconcile with scope

selected_posture: reconcile_with_scope
loadout_state_after: compatible_with_scope
relief_any:
  - route_access_unlocked
  - proof_bundle_legible
  - custody_conflict_contained
cost_any:
  - handler_burden_up
  - inspection_heat_up
  - public_receipt_distrust_up
future_effect_any:
  - accepted_with_scope
  - bridge_required

Branch B — Swap asset

selected_posture: swap_asset
loadout_state_after: substituted
relief_any:
  - incompatibility_down
  - route_access_unlocked
cost_any:
  - substitute_wear_up
  - old_asset_staleness_or_notice_up
  - route_asset_pressure_up
future_effect_any:
  - costlier
  - substitute_required
  - old_asset_recovery_or_notice_required

Branch C — Narrow route use

selected_posture: narrow_route_use
loadout_state_after: narrowed
relief_any:
  - one_reader_route_opens
  - contradiction_risk_down
cost_any:
  - excluded_reader_resentment_up
  - future_reconciliation_cost_up
future_effect_any:
  - public_only
  - lawful_only
  - sponsor_only
  - route_costlier

Branch D — Split loadout

selected_posture: split_loadout
loadout_state_after: split_required
relief_any:
  - incompatible_readers_can_proceed_separately
  - private_capture_down
cost_any:
  - schedule_pressure_up
  - source_ambiguity_up
  - carrier_burden_up
future_effect_any:
  - split_required
  - reconciliation_required

Branch E — Quarantine combination

selected_posture: quarantine_combination
loadout_state_after: quarantined
relief_any:
  - false_compatible_use_down
  - archive_fraud_down
  - broadcast_reality_drift_down
cost_any:
  - route_delay_up
  - sponsor_stop_loss_pressure_up
  - fan_oxygen_resentment_up
future_effect_any:
  - bridge_required
  - recovery_only

Branch F — Sacrifice slot

selected_posture: sacrifice_slot
loadout_state_after: slot_sacrificed
relief_any:
  - higher_value_route_survives
  - immediate_pressure_down
cost_any:
  - sacrificed_asset_lost_or_hostile
  - claimant_retaliation_up
  - route_asset_integrity_down
future_effect_any:
  - costlier
  - recovery_only_for_sacrificed_asset
  - hostile_claim_armed

Branch G — Incompatible default

selected_posture: allow_incompatible_default
loadout_state_after: false_compatible | captured | blocked | recovery_only
emits_or_arms: storyteller.event.incompatible_loadout_default.v1
cost_any:
  - false_clean_bundle_up
  - public_receipt_distrust_up
  - broadcast_reality_drift_up
future_effect_any:
  - hostile
  - captured
  - blocked
  - recovery_only
  - contradiction_pending

Character hooks

  • Shen Luo can re-scope a sponsor/legal bundle, but raises contract capture or public distrust.
  • Yu Lan can force public manifest visibility, but exposes witnesses and raises sponsor pressure.
  • Han Yanshuang can mark a loadout lawful-only, but creates bureau favor debt and public delay.
  • Baiya can validate or reject checksum/archive compatibility, but increases edit debt or source ambiguity.

Counter contract

Every branch must change at least three surfaces: one relief, one cost, and one future route effect.

Primary surfaces:

  • loadout_integrity
  • route_asset_integrity
  • asset_slot_pressure
  • compatibility_conflict
  • custody_clarity
  • handler_burden
  • carrier_burden
  • inspection_heat
  • sponsor_stop_loss_pressure
  • fan_oxygen_resentment
  • public_receipt_legitimacy
  • public_receipt_distrust
  • archive_debt
  • edit_debt
  • source_ambiguity
  • broadcast_reality_drift
  • future_route_acceptance
  • recovery_route_cost

Missability and recovery

This storyline is missed when a multi-asset route unlocks from raw asset availability, when conflicting slots are hidden, when a harmed reader is omitted, when stale/recovery assets are loaded as fresh, when sponsor/lawful/editor proof is treated as universal consent, or when future play consumes a bundle without reading loadout state.

Recovery is allowed only with scar:

  • rebuild the manifest;
  • split the loadout;
  • substitute an asset and record what the old asset becomes;
  • publish a scope note;
  • add a lawful, public, sponsor, artist, witness-protection, or archive bridge;
  • quarantine the route;
  • sacrifice a slot with route-asset consequence;
  • convert the route to recovery-only.

Replay/session evidence shape

storyline_id: storyteller.storyline.route_loadout_compatibility.v1
session_id: lens-route-loadout-compatibility-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  requested_route_or_rite_present: true
  required_asset_slots_min: 2
  asset_states_visible: true
  compatibility_risk_or_explicit_no_risk_visible: true
  harmed_reader_or_claimant_visible_or_explicit_absence: true
  future_route_or_reader_consumes_loadout_state: true
  no_fixed_turn_trigger: true
manifest:
  card: storyteller.card.route_loadout_manifest.v1
  row_id: <row>
  requested_route_or_rite: <id>
  asset_slots:
    - slot_id: <slot>
      candidate_asset: <asset or explicit_absence>
      asset_state_before: <state>
      custodian_or_absence: <custodian or explicit_absence>
  conflict_kind: <kind or explicit_no_risk>
offered:
  rite: storyteller.rite.route_loadout_reconciliation.v1
branch_result:
  selected_posture: reconcile_with_scope | swap_asset | narrow_route_use | split_loadout | quarantine_combination | sacrifice_slot | allow_incompatible_default
  loadout_state_after: <state>
  future_route_effect: <effect>
  emitted_event: storyteller.event.incompatible_loadout_default.v1 | none
  counter_deltas:
    relief: []
    cost: []
    future: []
assertions:
  - individual_asset_validity_not_bundle_validity
  - slot_scope_and_custodian_visible
  - compatibility_conflict_visible_or_explicit_no_risk
  - harmed_reader_or_claimant_visible_or_explicit_absence
  - branch_postures_diverge
  - success_has_cost
  - default_is_durable
  - future_route_consumes_loadout_state
  - no_raw_asset_count_or_fixed_turn_trigger

Non-goals

  • Not an inventory optimizer.
  • Not a raw asset-count gate.
  • Not a fixed-route checklist.
  • Not a dashboard or governance page.
  • Not filler branch volume.
  • Not a replacement for asset maintenance, discontinuance, ledger reconciliation, scar convergence, feed ranking, alibi recall, claimant collision, or reader collision.
  • Not valid if every individually valid asset can be bundled into a clean route for free.

Downstream afteruse

Route Loadout Afteruse Receipt handles the later reader who tries to spend an old manifest as universal route readiness. This parent line owns the first compatibility result; the afteruse receipt owns later citation, reader restriction, bridge, stale-slot reconciliation, split, quarantine, and false-clean reuse.