Room Occupancy Claim Stack Lens / 房间占用认领栈 Lens

This lens observes whether 房间占用认领栈线 and 房间占用认领栈机制 correctly make room occupancy a playable consequence of crisis production.

The oracle is: a room is not clean capacity merely because access exists. If a route, proof, person, queue, sponsor package, crew lane, or broadcast surface needs a finite room, the implementation must expose the selected occupant, displaced claim, authority, handler, care/support, receipt, release condition, future reader, and default if the room is hidden or overbooked.

A pass cannot be achieved by adding a room name, generic capacity number, fixed aftermath step, or prose that says a room is busy.

This lens observes 房间占用认领栈线, 房间占用认领栈机制, 第七穹顶占用栈, 设施通行封控线, 直播现场班组负荷线, 认领人现场接待线, 受保护证人薪册, 剪辑室优先队列线, 制作分诊台, 路线资产维护分诊线, 归档执行案卷, Route Assets and Custody, Broadcast Reality, Fan Oxygen, and Archive Custody.

It is observed through 房间占用账本, 房间占用重派, and 占用溢出默认.

Design intent

The current corpus already handles legal readers, archive custody, sponsor capture, public queues, production triage, cutroom priority, live-floor load, and facility access. This lens targets the next execution edge: the room itself must not be an infinite bucket. The player decides whether a living person, proof object, public queue, route asset, edit lane, sponsor package, or crew lane gets a scarce room, and what scar is created by that decision.

Must pass

1. Entry is state-triggered by room capacity conflict

Required entry evidence:

entry_state:
  trigger_kind: state_pressure
  concrete_room_or_threshold_present: true
  access_state_known_or_explicitly_absent: true
  capacity_conflict_present: true
  claim_stack_present: true
  displacement_or_release_question_present: true
  future_reader_reads_occupancy: true
  player_response_available: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
  no_raw_count_trigger: true

The lens fails if entry comes from fixed turn count, day/week interval, chapter quota, raw room count, dashboard state, lens-health state, or generic facility pressure without a room capacity conflict.

2. Concrete room, capacity, and access reference are visible

房间占用账本 must show:

room:
  node_id: ward_air_room | cutroom_blackbox | archive_counter_seven | public_intake_bay | sponsor_bridge_booth | service_corridor_chain | stage_threshold | equivalent
  room_state_before: empty | occupied | reserved | sealed_occupied | overbooked | captured | hostile | recovery_only | equivalent
  capacity_limit: one_body | one_proof_bundle | one_queue | air_limited | silence_limited | escort_limited | edit_limited | public_limited | equivalent
  access_state_reference: storyteller.card.facility_access_map.v1 | explicit_absence | equivalent

The lens fails if it only says room busy, facility locked, crowd pressure, or capacity full without a concrete room and capacity tag.

3. Selected occupant and displaced claim are explicit

The ledger must record at least one claim row and a selected resolution:

occupancy_claim:
  claim_id: <id>
  claimant: protected_witness | artist | fan_queue | archive | sponsor | inspector | editor | claimant_public | crew | route_asset | blackout_system | equivalent
  desired_occupant: person | proof_bundle | queue | edit_lane | sponsor_package | medical_air | crew_lane | broadcast_surface | equivalent
  care_or_security_requirement: air | silence | escort | seal | checksum | public_receipt | lawful_counter | sponsor_privacy | none | equivalent
  if_displaced: hostile | exposed | proof_contaminated | oxygen_debt | contract_capture | edit_delay | route_blocked | recovery_only | equivalent
selected_resolution:
  selected_claim: <claim id>
  displaced_claim_or_absence: <claim id or explicit_absence>

The lens fails if a claim is displaced silently or if explicit_absence is used while an actual competing claim exists in state.

4. Authority, handler, support, receipt, release, and future reader are visible

The selected row must record:

selected_resolution:
  authority_or_absence: <permit seal public receipt sponsor order archive seal or explicit_absence>
  handler_or_absence: <handler or explicit_absence>
  care_or_security_support_or_absence: <air silence escort checksum lawful counter sponsor privacy or explicit_absence>
  receipt_or_absence: <public lawful private sponsor archive receipt or explicit_absence>
  release_condition_or_absence: <condition or explicit_absence>
  future_reader: route_asset | claimant_floor | fan_oxygen_audit | archive_reader | sponsor_gate | broadcast_reality | live_floor | correction_slot | equivalent

The lens fails if sponsor money, archive seal, public outrage, editor skill, or a famous character satisfies these slots by implication.

5. Reassignment rite slots are explicit

房间占用重派 must require ledger, selected room node, selected claim, displaced claim or explicit absence, authority or explicit absence, handler or explicit absence, support or explicit absence, receipt or explicit absence, release condition or explicit absence, and future reader.

The lens fails if the rite can be cleared by a generic action point, abstract money, meeting, or clean room assignment.

6. Branch families diverge

At least five branch families must be playable or explicitly blocked by state:

  • protect living occupant;
  • secure proof or route asset;
  • seat public or claimant queue;
  • split shift with receipt;
  • displace with receipt;
  • seal occupied room;
  • hide displacement or overbook.

Each branch must differ by room state after, displaced claim state after, receipt/release state, future reader effect, and cost surface.

7. Success has relief, cost, and future effect

Every non-default branch must mutate at least three counters or durable states:

counter_deltas_required:
  relief: at_least_one
  cost: at_least_one
  future_reader_or_route_effect: at_least_one

Valid relief surfaces include harm reduction, proof chain improvement, archive legitimacy, public receipt legitimacy, oxygen accountability, route availability, live floor capacity, and immediate collapse prevention. Valid cost surfaces include witness exposure, ward air capacity, fan oxygen resentment, sponsor stop-loss pressure, contract capture, proof contamination, edit debt, archive debt, public distrust, security heat, handler burden, route asset pressure, future recovery cost, and broadcast reality drift.

8. No universal room solution

No branch may cleanly satisfy every occupant, displaced claim, reader, sponsor, archive, fan, witness, route asset, crew lane, and broadcast surface.

Required evidence:

no_universal_room_solution:
  selected_claim_visible: true
  displaced_claim_or_absence_visible: true
  at_least_one_reader_or_claim_narrowed_or_costed: true
  room_state_after_not_universal_clean: true
  future_route_effect_not_clean_universal: true

The lens fails if a room returns to clean universal capacity after a contested row.

9. Overflow default mutates future play

占用溢出默认 must fire or be armed when the ledger is absent, capacity is overbooked, displacement is hidden, authority/handler/support/receipt/release is missing, room state is filed clean, or a future reader is hidden.

Required default evidence:

default_event:
  event: storyteller.event.occupancy_overflow_default.v1
  breach_kind: ledger_absent | capacity_overbooked | displacement_hidden | authority_missing | handler_missing | receipt_missing | release_condition_missing | room_state_filed_clean | future_reader_hidden | equivalent
  default_narrator: fan_oxygen_or_medical_queue_first | editor_auto_patch_first | archive_queue_first | claimant_queue_first | sponsor_package_first | low_rank_staff_first | security_or_blackout_first | equivalent
  harmed_or_displaced_claim: <claim or explicit_absence>
  room_state_after: captured | hostile | hidden_displacement_hardened | overbooked | sealed_occupied | public_only | lawful_only | sponsor_only | recovery_only | equivalent
  future_reader_effect: blocked | costlier | hostile | captured | contradiction_pending | public_receipt_required | lawful_review_required | sponsor_release_required | correction_slot_required | recovery_only | equivalent
  counter_deltas_min: 3

The lens fails if default is only a cutscene, mood change, money loss, or generic reputation hit.

10. Replay evidence has valid and default branches

Minimal passing evidence:

lens: storyteller.lens.room_occupancy_claim_stack.v1
session_id: lens-room-occupancy-claim-stack-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  source_surface: <source>
  room_node: <node>
  capacity_conflict_present: true
  claim_stack_present: true
  future_reader_reads_occupancy: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
offered:
  place: storyteller.place.seventh_dome_occupancy_stack.v1
  card: storyteller.card.room_occupancy_ledger.v1
  rite: storyteller.rite.room_occupancy_reassignment.v1
valid_branch:
  selected_response: protect_living_occupant | secure_proof_or_asset | seat_public_or_claimant_queue | split_shift_with_receipt | displace_with_receipt | seal_occupied_room
  selected_claim: <claim>
  displaced_claim_or_absence: <claim or explicit_absence>
  authority_or_absence: <authority or explicit_absence>
  handler_or_absence: <handler or explicit_absence>
  support_or_absence: <support or explicit_absence>
  receipt_or_absence: <receipt or explicit_absence>
  release_condition_or_absence: <condition or explicit_absence>
  room_state_after: <state>
  future_reader_effect: <effect>
  counter_deltas:
    relief: []
    cost: []
    future: []
default_branch:
  selected_response: hide_displacement_or_overbook
  event_seen_or_armed: storyteller.event.occupancy_overflow_default.v1
  default_narrator: <narrator>
  breach_kind: <breach>
  harmed_or_displaced_claim: <claim or explicit_absence>
  room_state_after: <state>
  future_reader_effect: <effect>
assertions:
  primary_links_exist: true
  entry_is_state_triggered_by_room_capacity_conflict: true
  concrete_room_node_capacity_and_access_reference_visible: true
  selected_occupant_and_displaced_claim_or_absence_visible: true
  authority_handler_support_receipt_release_or_absence_visible: true
  future_reader_consumes_room_state: true
  branch_families_diverge_by_room_state_displacement_and_reader: true
  success_has_relief_cost_and_future_effect: true
  no_universal_room_solution: true
  overflow_default_mutates_future_play: true
  no_fixed_turn_day_week_or_raw_count_trigger: true

Progress metric

roomOccupancyClaimStackProgress = 0..10:

  • 0: no room occupancy state.
  • 1: concrete room node or threshold exists.
  • 2: room capacity limit and room state are visible.
  • 3: access state reference or explicit absence is recorded.
  • 4: at least two claims, or one claim plus default narrator, are visible.
  • 5: 房间占用账本 enters play with selected and displaced claim fields.
  • 6: 房间占用重派 offers authority, handler, support, receipt, release, and future-reader slots.
  • 7: at least one valid branch changes room state, displacement state, and future reader effect with relief and cost.
  • 8: split/displace/seal branch proves the room cannot become universal clean capacity.
  • 9: 占用溢出默认 records hidden/overbooked/default room control with durable future effect.
  • 10: replay proves one valid branch and one default branch from comparable room-capacity pressure without fixed turn/day/week/raw-count trigger.

Failure cases

The lens must fail if any of these are true:

  • entry uses fixed turn, day, week, chapter quota, raw room count, dashboard state, or lens-health state;
  • no concrete room node or threshold exists;
  • capacity is abstract or prose-only;
  • selected occupant is unnamed;
  • displaced claim is omitted or hidden;
  • authority, handler, support, receipt, or release condition is implied instead of filled or explicitly absent;
  • future reader does not consume the room state;
  • all branch families resolve to the same room state;
  • success creates universal clean capacity;
  • hidden displacement or overbooking has no default narrator;
  • default does not mutate room state, displaced claim state, future reader, route asset, archive, fan oxygen, live floor, correction slot, or broadcast reality;
  • recovery erases the displacement scar instead of recording a receipt, narrowed reader, or recovery-only state.

Non-goals

  • Not bulk filler.
  • Not raw count satisfaction.
  • Not a fixed-turn or calendar upkeep phase.
  • Not a decorative room list.
  • Not a movement minigame.
  • Not a replacement for 设施通行封控 Lens.
  • Not satisfied by room full prose.
  • Not valid unless the selected occupant, displaced claim, authority/support/receipt/release, future reader, branch deltas, and default path are all observable.