Recovery Inventory Allocation / 复原库存分配

Recovery Inventory Allocation is the rite that assigns a finite recovery row from 复原库存账本. It makes the player decide which crisis receives scarce recovery capacity, which demand is excluded or scoped, and which future reader inherits the scar.

The rite is not a resource shop. It only opens when state pressure shows that one or more named recovery rows are finite and at least two demands cannot all be satisfied cleanly.

Entry requirements

entry_requirements:
  trigger_kind: state_pressure
  ledger: storyteller.card.recovery_inventory_ledger.v1
  finite_inventory_row_present_or_explicit_absence: true
  competing_demands_min: 2
  future_readers_min: 2
  allocation_options_visible: true
  default_if_unresolved: storyteller.event.recovery_inventory_capture_default.v1
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
  no_raw_count_trigger: true

The rite cannot be offered by fixed turn count, day/week interval, chapter quota, raw content count, dashboard status, or lens-health state.

Required assignment slots

assignment:
  ledger: storyteller.card.recovery_inventory_ledger.v1
  source_pressure: <source pressure>
  selected_inventory_or_absence: <inventory id or explicit_absence>
  inventory_kind: correction_slot | ward_air | oxygen_reserve | crew_rest_shift | archive_proof_window | edit_checksum_lane | sponsor_makegood_frame | public_contrition_minute | custody_handler | security_lane | equivalent
  quantity_state_before: free | claimed | split | reserved | exhausted | absent | contested
  primary_demand: <demand id>
  primary_reader: <reader id>
  excluded_or_scoped_demand: <demand id or explicit_absence>
  excluded_or_scoped_reader: <reader id or explicit_absence>
  protected_boundary_or_absence: <boundary or explicit_absence>
  proof_or_support_or_absence: public_receipt | archive_seal | edit_checksum | sponsor_clause | oxygen_receipt | ward_receipt | call_sheet | handler_receipt | explicit_absence | equivalent
  allocation_mode: priority_allocate | split_escrow | reserve_boundary | borrow_forward | convert_to_public_oxygen | convert_to_sponsor_makegood | convert_to_lawful_proof | refuse_and_record | quarantine | default_selects
  future_route_or_slot: <route/slot/reader id>

A sponsor payment, legal order, famous handler, archive stamp, edit patch, public sympathy, or management KPI cannot fill this rite unless the selected inventory, primary reader, excluded reader, and future route effect remain visible.

Branch families

At least six branch families should be playable or explicitly blocked by state.

BranchReliefCostFuture effect
priority_allocateone demand receives the finite rowexcluded demand becomes hostile, blocked, narrowed, or recovery-onlyprimary reader accepts with cost; excluded reader records scar
split_escrowtwo demands receive scoped partial accessambiguity, proof burden, handler burden, or inspection heat risessplit-required route or reader collision opens
reserve_boundaryinventory is protected for a future reader or body boundarycurrent sponsor/schedule/public pressure worsensfuture route preserved but current branch narrows
borrow_forwardcurrent crisis is stabilized with future capacityfuture correction/ward/oxygen/proof row becomes costlier or blockedfuture route enters debt or recovery-only state
convert_to_public_oxygenpublic legitimacy or fan oxygen floor improvessponsor pressure, refund audit, fan resentment, or inspection heat risespublic-only bridge or oxygen audit required
convert_to_sponsor_makegoodsponsor stop-loss or package pressure narrowscontract capture, public distrust, artist-boundary or claimant cost risessponsor-only or unwind-required gate
convert_to_lawful_proofarchive, custody, or inspection reader improvespublic delay, sponsor hostility, edit debt, or proof burden riseslawful-only or checksum-required route
refuse_and_recordfalse double-spend is blockedimmediate pressure rises and handler burden increasesdisputed, costlier, or recovery-only route remains visible
quarantineunsafe inventory use is preventedroute delayed, correction slot lost, or reader trust narrowsquarantine receipt required
default_selectsinstitution files firstinventory capture hides demand or excludes reader 复原库存夺取默认 records scar

Resolution contract

Every resolved branch must output:

resolution:
  allocation_mode: <mode>
  selected_inventory_or_absence: <inventory id or explicit_absence>
  primary_demand_state_after: accepted_with_cost | narrowed | pending | blocked | recovery_only | equivalent
  excluded_or_scoped_demand_state_after: hostile | blocked | narrowed | sponsor_only | public_only | lawful_only | recovery_only | contradiction_pending | explicit_absence | equivalent
  inventory_state_after: allocated | split | reserved | borrowed_forward | quarantined | exhausted | captured_default | equivalent
  future_reader_effect: <effect>
  counter_deltas:
    relief: []
    cost: []
    future: []

The rite fails if all branches return inventory_spent, route_safe, or pressure_lowered without naming excluded reader and future scar.

Default handling

If the assignment is hidden, underfilled, or skipped, the rite must arm or emit 复原库存夺取默认.

Default-worthy failures include:

  • no finite row named;
  • no excluded reader named;
  • inventory absent but filed as available;
  • two demands spend the same row cleanly;
  • a public or lawful boundary is omitted;
  • the future route reader is hidden;
  • management records a clean KPI before allocation;
  • sponsor, schedule, archive, ward, fan oxygen, or editor table files first.

Counter payload

Every branch must mutate at least three durable values:

  • one relief delta;
  • one cost delta;
  • one future reader, route, slot, proof, body, or inventory effect.

Expected surfaces:

  • recovery_inventory_pressure
  • recovery_inventory_double_spend_risk
  • correction_slot_capacity
  • ward_air_capacity
  • fan_oxygen_reserve
  • crew_rest_capacity
  • archive_proof_window_integrity
  • edit_checksum_lane_integrity
  • sponsor_makegood_inventory
  • public_contrition_capacity
  • custody_handler_burden
  • management_pressure
  • schedule_pressure
  • inspection_heat
  • public_receipt_distrust
  • route_recovery_cost

Non-goals

  • Not a generalized economy screen.
  • Not a cooldown timer.
  • Not an abstract budget purchase.
  • Not valid if inventory can be cleanly double-spent.
  • Not valid if success has no excluded or scoped reader.
  • Not valid if the future route does not read the allocation result.