Route Loadout Manifest / 路线装配清单

Route Loadout Manifest is the durable card used when a future route, rite, correction, broadcast slot, lawful bridge, sponsor package, public table, or recovery lane needs more than one route asset at the same time.

The card closes a specific gap: an asset can be fresh, registered, scoped, or lawful by itself while becoming incompatible when placed beside another asset. A sponsor release may conflict with a fan public receipt; an archive seal may conflict with an editor checksum; a lawful-only proof may block a public table; a protected witness may not survive the same package as a sponsor makegood.

This is not an inventory list. It records the attempted loadout, the compatibility conflict, the claimant or reader who would be harmed by the combination, the selected posture, and the future route effect.

When to create or update

Create or update this card only from state pressure:

create_when:
  requested_route_or_rite_present: true
  required_asset_slots_min: 2
  asset_candidates_present_or_explicit_absence: true
  each_asset_has_state: true
  at_least_one_pair_has_compatibility_risk: true
  claimant_or_reader_harmed_by_combination_visible_or_explicit_absence: true
  future_route_or_reader_consumes_loadout_state: true
  player_can_reconcile_swap_narrow_quarantine_sacrifice_or_default: true
  no_fixed_turn_day_week_or_raw_count_trigger: true

The card is invalid if it appears because the player has a raw number of assets, a phase changed, or a route list refreshed.

Required row shape

loadout_row:
  row_id: <stable id>
  requested_use:
    requested_route_or_rite: <route rite slot correction recovery lane public table lawful bridge sponsor package or equivalent>
    requested_clean_claim: <what the route wants to treat as clean>
    future_reader: public | lawful | sponsor | archive | inspector | editor | fan_public | artist | route_asset | broadcast_reality | producer_license | equivalent
  asset_slots:
    - slot_id: <stable slot>
      required_role: proof_anchor | carrier | public_cover | lawful_cover | sponsor_cover | editor_checksum | witness | fan_receipt | archive_copy | route_asset | handler | equivalent
      candidate_asset: <asset id or explicit_absence>
      asset_state_before: fresh | scoped | protected | route_asset | stale | lawful_only | public_only | sponsor_only | split_required | recovery_only | hostile | captured | false_owner | explicit_absence | equivalent
      custodian_or_absence: <custodian or explicit_absence>
      source_surface: <source card event rite storyline or explicit_absence>
  compatibility:
    conflict_kind: reader_scope_mismatch | custody_owner_mismatch | proof_truth_mismatch | checksum_vs_archive | sponsor_vs_public | lawful_vs_artist_boundary | witness_protection_vs_publicity | carrier_capacity_mismatch | stale_asset_loaded_as_fresh | false_owner_loadout | equivalent
    conflicting_slots: [<slot ids>]
    claimant_or_reader_harmed_by_combination: <reader claimant or explicit_absence>
    loadout_state_before: draft | proposed_clean | incompatible | contested | underfilled | captured | explicit_absence
  decision:
    selected_posture: reconcile_with_scope | swap_asset | narrow_route_use | split_loadout | quarantine_combination | sacrifice_slot | allow_incompatible_default
    loadout_state_after: compatible_with_scope | substituted | narrowed | split_required | quarantined | slot_sacrificed | false_compatible | captured | blocked | recovery_only | equivalent
    future_route_effect: accepted_with_scope | costlier | public_only | lawful_only | sponsor_only | split_required | bridge_required | hostile | blocked | recovery_only | contradiction_pending | equivalent

The row fails if it only says assets selected, loadout valid, route ready, or proof bundle accepted.

Compatibility states

  • draft — the route has named slots but no compatibility claim yet.
  • proposed_clean — the route tries to consume the assets as if their scopes align.
  • incompatible — at least two slots conflict by reader, custody, proof truth, or carrier capacity.
  • contested — a claimant or reader challenges the proposed combination.
  • underfilled — a required slot is explicit absence or missing.
  • compatible_with_scope — combination works only with visible boundaries and cost.
  • substituted — one asset is replaced and the old asset remains scarred or unconsumed.
  • narrowed — the route proceeds for fewer readers, claims, or uses.
  • split_required — two or more loadouts must be served separately.
  • quarantined — clean use is blocked until a bridge exists.
  • slot_sacrificed — one slot is burned to keep a higher-value route alive.
  • false_compatible — a default narrator files the bundle as clean without proof.
  • captured — a claimant controls the loadout because compatibility was hidden.
  • recovery_only — the route cannot use the bundle cleanly but can preserve a repair path.

Valid conflict examples

  • A sponsor makegood release is loaded beside a public fan receipt without naming the fan reader.
  • An archive seal and editor checksum certify different source versions.
  • A protected witness is loaded into a public table without a protection bridge.
  • A lawful-only ruling is used as public consent.
  • A fresh route asset and a recovery-only route asset are loaded as if both are clean.
  • A carrier can hold one custody object but is assigned two incompatible proofs.

Replay evidence

manifest_evidence:
  card: storyteller.card.route_loadout_manifest.v1
  session_id: <session>
  seed: <seed>
  row_id: <row>
  requested_route_or_rite: <id>
  asset_slots_min: 2
  conflict_kind: <kind>
  conflicting_slots: []
  claimant_or_reader_harmed_by_combination: <claimant or explicit_absence>
  selected_posture: <posture>
  loadout_state_after: <state>
  future_route_effect: <effect>
  counter_deltas:
    relief: []
    cost: []
    future: []

Miss/default

The card is missed when individually valid assets are consumed as a clean bundle without naming the compatibility conflict, claimant or reader harmed by the combination, selected posture, and future effect. A miss should arm an incompatible-loadout default rather than silently unlocking the route.