Salvage Floor Assignment / 残存底线指派机制

Salvage Floor Assignment is the mechanism that turns the lowest remaining recoverable object of a discontinued route into assignable, scoped, replay-visible state.

It sits after 路线停办登记机制. That mechanism records whether a stopped route still has a salvage floor. This mechanism decides who may hold, cite, pledge, retire, split, quarantine, or foreclose that floor when a later reader tries to consume it.

Design promise

A salvage floor is not clean proof and not route deletion. It is a minimum playable remnant.

The mechanism must answer:

  1. What floor survived?
  2. Which discontinued route or route asset produced it?
  3. Who wants to use it now?
  4. Who is harmed or still owed notice?
  5. Who will hold the floor after assignment?
  6. What can the future reader do with it?
  7. What scar remains?

If those answers are missing, 残存底线扣押默认 owns the downstream state.

Entry conditions

Open the mechanism when all are true:

entry_conditions:
  trigger_kind: state_pressure
  discontinued_or_recovery_only_route_visible: true
  source_discontinuance_row_visible_or_explicit_absence: true
  salvage_floor_present_or_explicit_absence: true
  future_reader_or_route_requests_use: true
  route_not_cleanly_terminal: true
  requesting_reader_visible: true
  harmed_or_owed_reader_visible_or_explicit_absence: true
  player_response_available: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
  no_raw_route_count_trigger: true
  no_dashboard_or_lens_health_trigger: true

The trigger is the later use request, not time passing and not the existence of many discontinued routes.

Core objects

State model

salvage_floor_state:
  source_state_after:
    - registered
    - paused_under_notice
    - transferred
    - recovery_only
    - publicly_abandoned
    - privately_suppressed
    - reopened_with_bond
    - defaulted
  floor_kind:
    - evidence_stub
    - public_notice
    - lawful_seal
    - callback_receipt
    - fan_refund_path
    - witness_payroll
    - route_asset_hold
    - recovery_only_marker
    - explicit_absence
  floor_state:
    - unassigned
    - carried
    - escrowed
    - public_only
    - lawful_only
    - sponsor_only
    - split_required
    - pledged
    - retired
    - quarantined
    - suppressed
    - captured
    - false_clean
    - recovery_only
    - blocked

Assignment branches

Archive escrow

Assign the floor to archive, inspector, lawful seal, or custody desk.

  • Relief: source trace survives; unlawful deletion is blocked.
  • Cost: public notice delay, archive debt, inspection heat, correction slot pressure.
  • Future: lawful-only, archive gate, public addendum, or checksum requirement.

Public notice floor

Assign the floor to public table, refund path, fan receipt, memorial queue, or access audience.

  • Relief: private capture is blocked; public memory survives.
  • Cost: sponsor pressure, fan oxygen resentment, lawful ambiguity, public grief.
  • Future: public-only, lawful addendum, sponsor route costlier.

Carrier hold

Assign the floor to a worker, claimant, proxy, route asset, witness row, or proof carrier.

  • Relief: callback or recovery remains callable.
  • Cost: carrier exposure, handler burden, witness reprisal risk, claimant leverage.
  • Future: carrier required, protection required, hostile if carrier breaks.

Bond and reopen

Pledge the floor to reopen a route.

  • Relief: immediate block drops; route can continue conditionally.
  • Cost: license encumbrance, sponsor capture, recovery indemnity pressure, future recall cost.
  • Future: bond required, accepted with cost, costlier reopen.

Split floor

Scope the floor across incompatible readers.

  • Relief: one selected reader can proceed.
  • Cost: source ambiguity, omitted-reader hostility, future proof addendum.
  • Future: split required, reader-specific acceptance, costlier route.

Retire as scar

Retire the floor into ending, memorial, or public scar state.

  • Relief: false clean reopen is blocked.
  • Cost: clean route return is blocked; memorial and ending scar pressure rise.
  • Future: ending scar pending, recovery-only, route blocked with notice.

Quarantine floor

Preserve but block unsafe use.

  • Relief: false owner, contradiction, or witness harm is blocked.
  • Cost: route delay, schedule pressure, recovery-only pressure.
  • Future: blocked until review, recovery-only, proof required.

Suppress or default

Hide, misstate, or let another narrator capture the floor.

  • Relief: immediate assignment burden can drop.
  • Cost: hidden floor pressure, omitted-reader hostility, broadcast-reality drift.
  • Future: hostile, captured, blocked, contradiction-pending, recovery-only.

Reader rules

A salvage floor can satisfy only the reader scope it was assigned to. It cannot cleanly satisfy all of these at once:

  • sponsor;
  • lawful/archive;
  • public/fan;
  • artist boundary;
  • worker carrier;
  • claimant;
  • route asset;
  • producer license;
  • broadcast reality;
  • memorial or ending reader.

If a future route tries to treat an assigned floor as universal, reopen the docket or fire the foreclosure default.

Boundary with adjacent systems

boundary:
  route_discontinuance_register:
    role: records route stop and initial salvage floor
    not_responsible_for: downstream assignment of the floor
  recovery_indemnity_shelf:
    role: names future recourse holder after stabilization
    not_responsible_for: deciding whether a discontinued route floor can be used by a future reader
  evidence_carryover_fork:
    role: lets prior proof return as current pressure
    not_responsible_for: assigning a route discontinuance salvage floor
  availability_reader_collision:
    role: scopes access readers
    not_responsible_for: preserving or foreclosing the floor object itself

The implementation may link to these systems, but it cannot use them to erase the floor row.

Counter contract

Every valid branch must mutate at least:

counter_contract:
  floor_state_changes: true
  relief_min: 1
  cost_min: 1
  future_reader_or_route_effect_min: 1

Relevant surfaces:

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

Replay evidence shape

mechanic: storyteller.mechanic.salvage_floor_assignment.v1
session_id: lens-salvage-floor-assignment-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  source_discontinuance_row_visible_or_explicit_absence: true
  salvage_floor_present_or_explicit_absence: true
  future_reader_or_route_requests_use: true
  no_fixed_turn_trigger: true
floor_row:
  docket: storyteller.card.salvage_floor_docket.v1
  row_id: <row>
  salvage_floor_kind: <kind>
  floor_state_before: <state>
  requesting_reader: <reader>
  harmed_or_owed_reader: <reader or explicit_absence>
assignment:
  rite: storyteller.rite.salvage_floor_assignment_hearing.v1
  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 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>
outcome:
  floor_state_after: <state>
  future_reader_or_route_effect: <effect>
  emitted_event: storyteller.event.salvage_floor_foreclosure_default.v1 | none_if_valid
  counter_deltas: {}

Non-goals

  • Not route cancellation.
  • Not a generic appeal system.
  • Not raw route-count cleanup.
  • Not a finance dashboard.
  • Not a clean recovery mechanism.
  • Not valid if the floor has no holder, no harmed reader, no assignment posture, and no future effect.