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: trueThe 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.
| Branch | Relief | Cost | Future effect |
|---|---|---|---|
priority_allocate | one demand receives the finite row | excluded demand becomes hostile, blocked, narrowed, or recovery-only | primary reader accepts with cost; excluded reader records scar |
split_escrow | two demands receive scoped partial access | ambiguity, proof burden, handler burden, or inspection heat rises | split-required route or reader collision opens |
reserve_boundary | inventory is protected for a future reader or body boundary | current sponsor/schedule/public pressure worsens | future route preserved but current branch narrows |
borrow_forward | current crisis is stabilized with future capacity | future correction/ward/oxygen/proof row becomes costlier or blocked | future route enters debt or recovery-only state |
convert_to_public_oxygen | public legitimacy or fan oxygen floor improves | sponsor pressure, refund audit, fan resentment, or inspection heat rises | public-only bridge or oxygen audit required |
convert_to_sponsor_makegood | sponsor stop-loss or package pressure narrows | contract capture, public distrust, artist-boundary or claimant cost rises | sponsor-only or unwind-required gate |
convert_to_lawful_proof | archive, custody, or inspection reader improves | public delay, sponsor hostility, edit debt, or proof burden rises | lawful-only or checksum-required route |
refuse_and_record | false double-spend is blocked | immediate pressure rises and handler burden increases | disputed, costlier, or recovery-only route remains visible |
quarantine | unsafe inventory use is prevented | route delayed, correction slot lost, or reader trust narrows | quarantine receipt required |
default_selects | institution files first | inventory 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_pressurerecovery_inventory_double_spend_riskcorrection_slot_capacityward_air_capacityfan_oxygen_reservecrew_rest_capacityarchive_proof_window_integrityedit_checksum_lane_integritysponsor_makegood_inventorypublic_contrition_capacitycustody_handler_burdenmanagement_pressureschedule_pressureinspection_heatpublic_receipt_distrustroute_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.