Salvage Floor Assignment Hearing / 残存底线指派听证

Salvage Floor Assignment Hearing is the assignable rite that decides what happens to a remaining salvage floor after a route has been stopped, paused, transferred, abandoned, or converted to recovery-only.

The rite exists because a salvage floor is playable only when someone is assigned to hold, scope, expose, pledge, retire, or quarantine it. A route cannot be reopened, deleted, memorialized, or cited from a floor that has no holder, no reader boundary, and no future effect.

Offer condition

Offer this rite when a 残存底线案卷 row exists or should exist:

offer_when:
  salvage_floor_row_present_or_creatable: true
  future_reader_or_route_requests_use: true
  floor_state_before_not_terminal_clean: true
  requesting_reader_visible: true
  harmed_or_owed_reader_visible_or_explicit_absence: true
  selected_posture_available_or_default_needed: true
  no_fixed_turn_day_week_or_raw_count_trigger: true

Do not offer this from fixed chronology, dashboard health, raw route count, or generic late-game cleanup.

Assignment slots

assignment_required:
  docket: storyteller.card.salvage_floor_docket.v1
  selected_row_or_new_row: <row id>
  source_discontinuance_register_row: <row id or explicit_absence>
  source_route_or_asset_id: <route, proof, receipt, lane, room, route asset, or explicit_absence>
  salvage_floor_kind: evidence_stub | public_notice | lawful_seal | callback_receipt | fan_refund_path | witness_payroll | route_asset_hold | recovery_only_marker | explicit_absence | equivalent
  floor_state_before: unassigned | carried | escrowed | public_only | lawful_only | sponsor_only | split_required | pledged | retired | suppressed | captured | recovery_only | equivalent
  requesting_reader: sponsor | lawful_reader | archive | public_fan | artist_boundary | worker_carrier | claimant | route_asset | producer_license | broadcast_reality | equivalent
  harmed_or_owed_reader: <reader or explicit_absence>
  selected_posture: archive_escrow | public_notice_floor | carrier_hold | bond_and_reopen | split_floor | retire_as_scar | quarantine_floor | suppress_or_default
  handler_or_absence: <handler, clerk, runner, custodian, producer, or explicit_absence>
  proof_bridge_or_absence: <archive copy, public receipt, lawful seal, callback receipt, checksum, fan ledger, route asset hold, or explicit_absence>
  holder_or_absence: <archive, inspector, sponsor, public table, worker carrier, claimant, route asset, producer license, or explicit_absence>
  cost_or_collateral_or_absence: <debt, heat, bond, public notice, carrier burden, ending scar, or explicit_absence>
  future_reader_or_route: <reader, route, rite, ending, or explicit_absence>

The rite is invalid if sponsor money, archive stamp, public outrage, legal authority, or a famous handler resolves the floor without these slots or explicit absence.

Branch families

Archive escrow

selected_posture: archive_escrow
floor_state_after_any:
  - escrowed
  - lawful_only
relief_any:
  - false_route_deletion_blocked
  - lawful_reference_preserved
  - source_trace_legibility_up
cost_any:
  - archive_debt_up
  - inspection_heat_up
  - public_notice_delay_up
  - correction_slot_pressure_up
future_effect_any:
  - lawful_only
  - archive_gate_required
  - public_addendum_required

Public notice floor

selected_posture: public_notice_floor
floor_state_after_any:
  - public_only
  - public_notice_attached
relief_any:
  - private_capture_blocked
  - fan_refund_path_visible
  - memorial_receipt_legible
cost_any:
  - sponsor_stop_loss_pressure_up
  - lawful_ambiguity_up
  - fan_oxygen_resentment_up
  - public_grief_pressure_up
future_effect_any:
  - public_only
  - lawful_addendum_required
  - sponsor_route_costlier

Carrier hold

selected_posture: carrier_hold
floor_state_after_any:
  - carried
  - carrier_required
relief_any:
  - callback_possible
  - recovery_route_kept_callable
  - immediate_route_pressure_down
cost_any:
  - carrier_exposure_up
  - handler_burden_up
  - witness_reprisal_risk_up
  - claimant_leverage_up
future_effect_any:
  - carrier_required
  - hostile_if_carrier_breaks
  - protection_required

Bond and reopen

selected_posture: bond_and_reopen
floor_state_after_any:
  - pledged
  - reopened_with_bond
relief_any:
  - route_reopen_possible
  - immediate_block_down
  - remedy_path_preserved
cost_any:
  - producer_license_encumbrance_up
  - sponsor_capture_up
  - recovery_indemnity_pressure_up
  - future_recall_cost_up
future_effect_any:
  - bond_required
  - accepted_with_cost
  - costlier_reopen

Split floor

selected_posture: split_floor
floor_state_after_any:
  - split_required
  - scoped_to_readers
relief_any:
  - selected_reader_can_proceed
  - contradiction_pressure_down
cost_any:
  - source_ambiguity_up
  - omitted_reader_hostility_up
  - future_proof_addendum_up
future_effect_any:
  - split_required
  - reader_specific_acceptance
  - costlier

Retire as scar

selected_posture: retire_as_scar
floor_state_after_any:
  - retired
  - ending_scar_pending
relief_any:
  - false_clean_reopen_blocked
  - claimant_notice_preserved
cost_any:
  - route_reopen_blocked
  - memorial_scar_up
  - ending_scar_pressure_up
future_effect_any:
  - ending_scar_pending
  - recovery_only
  - route_blocked_with_notice

Quarantine floor

selected_posture: quarantine_floor
floor_state_after_any:
  - quarantined
  - recovery_only
relief_any:
  - false_owner_pressure_down
  - unsafe_use_blocked
  - contradiction_risk_down
cost_any:
  - route_delay_up
  - schedule_pressure_up
  - recovery_only_pressure_up
future_effect_any:
  - blocked_until_review
  - recovery_only
  - proof_required

Suppress or default

selected_posture: suppress_or_default
floor_state_after_any:
  - captured
  - false_clean
  - blocked
  - recovery_only
emitted_event: storyteller.event.salvage_floor_foreclosure_default.v1
relief_any:
  - immediate_assignment_burden_down
  - clean_report_possible
cost_any:
  - hidden_floor_pressure_up
  - omitted_reader_hostility_up
  - broadcast_reality_drift_up
future_effect_any:
  - hostile
  - captured
  - blocked
  - contradiction_pending
  - recovery_only

Success rule

Every non-default branch must mutate at least three surfaces:

counter_deltas_required:
  relief: at_least_one
  cost: at_least_one
  future_reader_or_route_effect: at_least_one
  floor_state_changes: true

No branch may turn a salvage floor into a universal clean key for sponsor, archive, lawful, public, artist-boundary, worker, claimant, route asset, producer license, and broadcast-reality readers.

Replay payload

rite_evidence:
  rite: storyteller.rite.salvage_floor_assignment_hearing.v1
  session_id: <session>
  seed: <seed>
  selected_row_or_new_row: <row>
  source_discontinuance_register_row: <row or explicit_absence>
  salvage_floor_kind: <kind>
  selected_posture: <posture>
  handler_or_absence: <handler or explicit_absence>
  proof_bridge_or_absence: <proof or explicit_absence>
  holder_or_absence: <holder or explicit_absence>
  cost_or_collateral_or_absence: <cost or explicit_absence>
  floor_state_after: <state>
  future_reader_or_route: <reader or route>
  counter_deltas: {}