Recovery Inventory Triage / 复原库存分诊机制
Recovery Inventory Triage is the mechanism that prevents crisis recovery from becoming an invisible universal resource. It makes correction slots, ward air, fan oxygen reserves, crew rest, archive proof windows, edit checksum lanes, public contrition minutes, sponsor makegood frames, and custody handlers finite rows that can be allocated, split, reserved, borrowed, quarantined, refused, or captured by default.
The mechanism sits between existing single-surface systems. 赞助补偿库存线 prices sponsor replacement demands. 复原病房出院压迫线 protects bodies from becoming availability toggles. 认领人现场接待线 protects the physical receiving edge. 经营压缩台 prevents costly successes from becoming clean KPI. This mechanism asks the cross-cutting question: when two of those systems want the same finite recovery row, who receives it, who is excluded, and what future reader records the scar?
Primary observation link
This mechanism observes pressure from Sponsor Makegood Inventory, Management Compression Desk, Recovery Ward Discharge Pressure, Claimant Floor Intake, Live Floor Crew Load, Cutroom Priority Queue, Broadcast Schedule, Fan Oxygen, and Route Assets and Custody.
It is observed through 复原库存账本, 复原库存分配, and 复原库存夺取默认.
Entry contract
Open this mechanism only when state pressure proves all required inputs:
entry_state:
trigger_kind: state_pressure
finite_inventory_row_present_or_explicit_absence: true
competing_demands_min: 2
shared_inventory_or_absence_visible: true
future_readers_min: 2
player_can_allocate_split_reserve_borrow_quarantine_refuse_or_default: true
no_fixed_turn_trigger: true
no_fixed_day_or_week_trigger: true
no_raw_count_trigger: trueInvalid entry sources:
- fixed turn count;
- fixed day/week interval;
- chapter quota;
- raw number of crises;
- dashboard state;
- lens health;
- generic low resources with no named inventory row;
- a single demand with no competing reader and no explicit absence.
Inventory row model
inventory_row:
inventory_id: <stable row id>
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: free | claimed | split | reserved | exhausted | absent | contested
current_owner_or_absence: <reader/handler/faction/explicit_absence>
protected_boundary_or_absence: <boundary or explicit_absence>
source_pressure: sponsor_makegood | recovery_ward | claimant_floor | live_floor | cutroom | fan_oxygen | archive_custody | management_compression | broadcast_reality | equivalentThe mechanism fails if the implementation stores only a numeric pool such as recovery_points, budget, morale, or available_slots without a row, owner, boundary, and future reader.
Demand row model
demand_row:
demand_id: <stable row id>
requester: sponsor | fan_public | archive | inspector | artist_boundary | claimant | editor | management | schedule_board | live_floor | equivalent
requested_inventory: <inventory id or explicit_absence>
demanded_use: makegood | recovery | correction | proof | floor_safety | public_receipt | oxygen_refund | route_unlock | metric_report | equivalent
minimum_acceptance_surface: <surface>
future_reader: <reader id>
default_if_excluded: <named default or scar>At least two demand rows must be present, or one demand row plus explicit absence of the inventory owner/handler/gate that changes the default.
Allocation modes
| Mode | Required effect |
|---|---|
priority_allocate | primary demand accepts with cost; excluded demand changes state |
split_escrow | both demands become scoped; ambiguity/proof/handler cost rises |
reserve_boundary | future reader or body boundary protected; current pressure worsens |
borrow_forward | current crisis stabilized; future inventory row becomes costlier or blocked |
convert_to_public_oxygen | public/fan surface improves; sponsor/lawful/inspection cost rises |
convert_to_sponsor_makegood | sponsor surface improves; public/artist/claimant route narrows |
convert_to_lawful_proof | archive/inspection/custody reader improves; public/sponsor/edit cost rises |
refuse_and_record | false double-spend blocked; immediate pressure and handler burden rise |
quarantine | unsafe spend prevented; current route delayed or recovery-only |
default_selects | capture default records actor, hidden demand, excluded reader, and future scar |
No mode can produce universal clean acceptance across public, lawful, sponsor, artist boundary, editor, management, schedule, and route asset readers.
Default contract
复原库存夺取默认 must fire or arm when:
- the ledger is absent but inventory is required;
- one row is spent twice;
- absent inventory is filed as available;
- a sponsor, schedule board, management table, archive queue, fan oxygen queue, ward queue, editor auto-patch, inspector, floor manager, or handler absence files first;
- the future reader is hidden;
- the excluded reader is unnamed;
- management calls allocation a clean KPI;
- sensitive inventory such as ward air, fan oxygen, public contrition, archive proof, or artist recovery is treated as clean sponsor or schedule inventory.
The default must name the capturing actor and excluded reader.
Branch output contract
Every branch must output:
branch_output:
selected_inventory_or_absence: <inventory id or explicit_absence>
selected_primary_demand: <demand id>
excluded_or_scoped_demand: <demand id or explicit_absence>
inventory_state_after: allocated | split | reserved | borrowed_forward | quarantined | exhausted | captured_default | equivalent
primary_reader_state_after: accepted_with_cost | narrowed | pending | blocked | recovery_only | equivalent
excluded_reader_state_after: hostile | blocked | narrowed | sponsor_only | public_only | lawful_only | recovery_only | contradiction_pending | explicit_absence | equivalent
future_route_effect: blocked | costlier | sponsor_only | public_only | lawful_only | split_required | recovery_only | collision_ready | equivalent
counter_deltas:
relief: []
cost: []
future: []A branch is invalid if it only lowers pressure, spends money, or marks a resource consumed without creating future reader state.
Counter surfaces
Recommended durable values:
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_distrustcontract_captureroute_recovery_cost
Every resolved row mutates at least one relief, one cost, and one future route or reader effect.
Replay evidence shape
mechanic_id: storyteller.mechanic.recovery_inventory_triage.v1
session_id: lens-recovery-inventory-triage-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
trigger_kind: state_pressure
finite_inventory_row_present_or_explicit_absence: true
competing_demands_min: 2
future_readers_min: 2
no_fixed_turn_trigger: true
ledger: storyteller.card.recovery_inventory_ledger.v1
rite: storyteller.rite.recovery_inventory_allocation.v1
branch_runs:
valid_allocation:
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
selected_inventory_or_absence: <inventory>
primary_reader_state_after: <state>
excluded_reader_state_after: <different state>
future_route_effect: <effect>
counter_deltas: {}
default_capture:
event_seen_or_armed: storyteller.event.recovery_inventory_capture_default.v1
capture_actor: <actor>
hidden_or_excluded_demand: <demand>
future_route_effect: <effect>Non-goals
- Not a raw resource economy.
- Not a global inventory dashboard.
- Not a governance checklist.
- Not a fixed upkeep phase.
- Not sponsor makegood alone.
- Not recovery ward discharge alone.
- Not valid if scarce rows can be double-spent cleanly.
- Not valid if future readers do not consume the allocation result.