Emergency Power Priority Lens / 应急供电优先 Lens

This lens observes whether 应急供电优先线 and 应急供电优先机制 make physical emergency power executable.

A pass cannot be achieved by adding a blackout warning, a generator lore page, a budget counter, or a sponsor payment. The implementation must show a finite power source, at least two competing powered surfaces, a priority decision, a named losing surface, branch deltas, a default actor, and a future reader that consumes the resulting power scar.

This lens observes:

It is observed through:

Observable promise

Storyteller must prove that a blackout-prone crisis has physical load, not only abstract schedule risk.

The lens passes only when the game can answer:

What is the finite power source, which powered surfaces compete for it, which surface stayed powered, which surface was shed or degraded, who would choose by default, and which future route reads that scar?

The lens fails if emergency power is only a mood, if every load stays cleanly powered, if sponsor money creates infinite power, if overdraw produces clean success, if the losing surface is unnamed, or if no later route reads the power result.

Runtime-backed evidence contract

The observable surface owns one exact runtime packet:

  • nine cards in exact slot order: ledger, power_source, protected_surface, shed_surface, priority_claim, handler, support, future_reader, default_risk;
  • one one-shot rite: storyteller.rite.emergency_power_priority_allocation.v1;
  • eight rite branch/state/future mappings;
  • one four-flag default gate that only choice indexes 6 and 7 can arm;
  • one event with eight exclusive terminal/state/future mappings;
  • focused runtime test lens/storyteller-emergency-power-priority.runtime.test.ts;
  • deterministic target replay lens/replays/emergency-power-priority.overdraw-governor.replay.json selecting choice index 6 and terminal governor_trip;
  • evaluator ownership in scripts/evaluate_lenses.mjs;
  • public parity in public/data/storytellerCards.json5, public/data/storytellerRite+nodes.json5, and public/data/storytellerEvent+nodes.json5.

The exact branch mappings are:

certify_priority: priority_certified -> power_priority_certificate_required
load_shed: deliberate_load_shed -> shed_surface_recovery_required
split_power: split_power_degraded -> degraded_power_reader_required
borrow_generator: borrowed_power_claim_attached -> generator_claim_maturity_due
narrow_slot: low_power_slot_narrowed -> slot_contract_reads_power_scope
public_safety_hold: public_safety_hold_visible -> public_or_lawful_power_notice_required
overdraw_anyway: overdraw_default_pending -> hidden_trip_recovery_pending
default_selects: priority_default_pending -> default_actor_power_disposition_pending

Only the last two mappings set all of emergency_power.default_pending, event.power_shed_default.armed, future_route.power_shed_recovery_pending, and power_reality.false_clean_all_powered_claimed. All nine cards must be assigned first. Skip or underfill cannot auto-default.

The exact terminal mappings are:

governor_trip: governor_load_trip -> tripped_surface_recovery_only
sponsor_meter_capture: sponsor_glamour_priority -> oxygen_or_public_power_restitution_required
security_grid_lock: security_route_lock -> facility_access_recovery_required
ward_reserve_priority: oxygen_preserved_slot_shed -> narrowed_broadcast_reader_required
archive_freezer_priority: archive_cold_chain_preserved -> lost_live_surface_addendum_required
blackout_fold: blackout_fold_recovery_only -> blackout_recovery_route_required
public_queue_priority: public_feed_priority -> lawful_or_archive_delay_reader_required
borrowed_source_claim: lender_power_claim_attached -> generator_claim_maturity_reader_required

Every terminal clears the pending gate. Recovery never reopens the one-shot rite; it proceeds into the exact future reader, capacity liability, blackout residue, facility access, oxygen/public restitution, archive addendum, slot narrowing, or borrowed-generator claim maturity.

Must pass

1. Entry is state-triggered

Required evidence:

entry_state:
  trigger_kind: state_pressure
  source_incident_id: <blackout_capacity_facility_or_slot_id>
  finite_power_source_present: true
  competing_powered_surfaces_min: 2
  future_reader_present: true
  no_fixed_turn_trigger: true

The lens fails if eligibility depends on a fixed turn number, day interval, chapter quota, lens-health state, raw page count, or generic upkeep phase.

2. Finite power source is visible

应急供电账本 or equivalent must record the source, state, safe load threshold, and overdraw consequence.

Accepted source states:

  • stable;
  • strained;
  • seized;
  • sponsor_metered;
  • public_only;
  • lawful_only;
  • borrowed;
  • failing;
  • hidden;
  • explicit_absence.

Required row shape:

power_source:
  source_id: <generator_battery_grid_bridge_route_asset_or_absence>
  source_state: stable | strained | seized | sponsor_metered | public_only | lawful_only | borrowed | failing | hidden | explicit_absence
  safe_load_units: <number_or_named_threshold>
  overdraw_consequence: blackout_fold | oxygen_drop | door_lock | archive_freeze | board_misair | crew_hazard | equivalent

The lens fails if power is only a budget number, a vibe, or an infinite backup.

3. Competing powered surfaces are visible

The ledger must show at least two powered surfaces that cannot all remain cleanly powered.

Accepted surface families:

  • live_board;
  • stage_lights;
  • relay;
  • oxygen_pumps;
  • ward_air;
  • archive_cabinet;
  • security_doors;
  • fan_gate;
  • cutroom;
  • corridor_lights;
  • proof_scanner;
  • equivalent.

Required row shape:

powered_surfaces:
  - surface: <surface>
    claimant: producer | sponsor | fan_public | inspector | archive | security | crew | route_asset | claimant | explicit_absence
    load_units: <number_or_named_weight>
    priority_claim: contract | safety | public_receipt | lawful_proof | sponsor_clause | route_escape | archive_seal | explicit_absence
    consequence_if_shed: <route_effect_or_state>

The lens fails if there is no losing surface.

4. Priority claim and losing surface are named

Every non-default branch must record:

priority_decision:
  protected_surface: <surface>
  priority_claim: <claim>
  shed_or_degraded_surface: <different_surface>
  losing_surface_consequence: delayed | degraded | recovery_only | public_only | lawful_only | sponsor_only | blocked | blackout_folded | equivalent
  future_reader_or_route: <route_slot_custody_object_public_reader_or_route_asset>

The lens fails if the branch says “reroute power,” “use backup,” “pay sponsor,” or “avoid blackout” without naming the surface that loses power.

5. Allocation rite requires concrete assignment

应急供电优先分配 or equivalent must require:

assignment:
  ledger: storyteller.card.emergency_power_ledger.v1
  power_source: storyteller.card.emergency_power_source.v1
  protected_surface: storyteller.card.emergency_power_protected_surface.v1
  shed_surface: storyteller.card.emergency_power_shed_surface.v1
  priority_claim: storyteller.card.emergency_power_priority_claim.v1
  handler: storyteller.card.emergency_power_handler.v1
  support: storyteller.card.emergency_power_support.v1
  future_reader: storyteller.card.emergency_power_future_reader.v1
  default_risk: storyteller.card.emergency_power_default_risk.v1
  response: certify_priority | load_shed | split_power | borrow_generator | narrow_slot | public_safety_hold | overdraw_anyway | default_selects
all_slots_required: true
assigned_cards_present_in_hand: true
one_shot: true

A famous handler, legal order, archive seal, edit patch, sponsor payment, or generic producer action cannot replace the required power-source and losing-surface fields.

6. Branches do not collapse into clean success

Exactly eight branch families must be playable:

  • certify priority;
  • load shed;
  • split power;
  • borrow generator;
  • narrow slot;
  • public safety hold;
  • overdraw anyway;
  • default selects.

Each branch must differ by protected surface, losing/degraded surface, cost surface, default risk, and future reader.

The lens fails if all branches result in all_surfaces_powered_clean.

7. Borrowed power attaches claimant or maturity

Any branch that uses sponsor meter, security backup, ward reserve, fan relay, pirate relay, route asset battery, archive battery, emergency generator, or equivalent borrowed source must record:

borrowed_power:
  source: <borrowed_source>
  lender_or_claimant: <claimant>
  price_or_claim: <price_claim_maturity_or_release_condition>
  future_reader: <reader_or_route>
  borrower_state_after: claim_attached | metered | maturity_due | captured | public_only | sponsor_only | lawful_only | worn | equivalent

The lens fails if borrowed power is free.

8. Only explicit choices 6 and 7 arm default

Overdraw may preserve immediate spectacle or timing, but it must arm a later consequence.

Required evidence:

overdraw_branch:
  choice_index: 6
  immediate_relief: schedule_pressure_down | sponsor_glamour_preserved | live_route_powered | equivalent
  state_after: overdraw_default_pending
  future_route_effect: hidden_trip_recovery_pending
  common_pending_flags: [emergency_power.default_pending, event.power_shed_default.armed, future_route.power_shed_recovery_pending, power_reality.false_clean_all_powered_claimed]
default_selects_branch:
  choice_index: 7
  state_after: priority_default_pending
  future_route_effect: default_actor_power_disposition_pending
  common_pending_flags: [emergency_power.default_pending, event.power_shed_default.armed, future_route.power_shed_recovery_pending, power_reality.false_clean_all_powered_claimed]

The lens fails if overdraw resolves as clean success, if any of choices 0..5 arms the event, or if skip/underfill silently creates a default.

9. Power shed default proves the four-flag gate and eight exact terminals

供电削减默认 is reachable only when all four common pending flags are present after choice 6 or 7 of the complete rite.

Required event evidence:

default_event:
  event: storyteller.event.power_shed_default.v1
  requires_all: [emergency_power.default_pending, event.power_shed_default.armed, future_route.power_shed_recovery_pending, power_reality.false_clean_all_powered_claimed]
  exact_terminals: [governor_trip, sponsor_meter_capture, security_grid_lock, ward_reserve_priority, archive_freezer_priority, blackout_fold, public_queue_priority, borrowed_source_claim]
  every_terminal_clears_pending: true
  every_terminal_records_exact_state_and_future_effect: true

The lens fails if the default changes only prose, generic reputation, or mood.

10. Future route consumes the power scar

At least one future route, slot, custody object, public receipt, proof route, or route asset must read the resulting power state.

Accepted readers include:

The lens fails if the result cannot be read after the immediate branch.

11. At least three deltas exist

Every resolved branch must mutate at least three counters or durable states:

  • one relief delta;
  • one cost delta;
  • one future reader, route, slot, custody, or public-state delta.

Expected counters and states:

  • power_reserve;
  • power_overdraw_risk;
  • blackout_risk;
  • broadcast_reliability;
  • oxygen_liability;
  • schedule_pressure;
  • sponsor_stop_loss_pressure;
  • inspection_heat;
  • crew_hazard;
  • route_narrowness;
  • archive_integrity;
  • public_safety_legitimacy;
  • future_claim_cost;
  • power_priority_certified;
  • power_load_shed;
  • power_split_degraded;
  • borrowed_generator_claim;
  • sponsor_meter_capture;
  • ward_reserve_priority;
  • archive_cold_chain_priority;
  • door_power_lock;
  • proof_scanner_unpowered;
  • power_overdraw_armed;
  • blackout_fold_recovery_only.

12. Replay provenance exists

Passing evidence must include seed/session id, all nine exact assignments, selected choice index 6, overdraw_default_pending, all four pending flags, event terminal governor_trip, terminal state governor_load_trip, future effect tripped_surface_recovery_only, counter deltas, and cleared pending flags.

Replay evidence expectation

lens_id: storyteller.lens.emergency_power_priority.v1
artifact: lens/replays/emergency-power-priority.overdraw-governor.replay.json
session_id: lens-storyteller-lens-emergency-power-priority-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  finite_power_source_present: true
  competing_powered_surfaces_min: 2
  future_reader_present: true
  no_fixed_turn_trigger: true
rite:
  id: storyteller.rite.emergency_power_priority_allocation.v1
  assignments: [ledger, power_source, protected_surface, shed_surface, priority_claim, handler, support, future_reader, default_risk]
  selected_choice_index: 6
  branch: overdraw_anyway
  state_after: overdraw_default_pending
  future_effect: hidden_trip_recovery_pending
  pending_flags: [emergency_power.default_pending, event.power_shed_default.armed, future_route.power_shed_recovery_pending, power_reality.false_clean_all_powered_claimed]
event:
  id: storyteller.event.power_shed_default.v1
  selected_option_index: 0
  terminal: governor_trip
  state_after: governor_load_trip
  future_effect: tripped_surface_recovery_only
  pending_flags_cleared: true
assertions:
  - target_rite_action_has_nine_real_assignments
  - choice_six_sets_exact_branch_state_future_and_four_flag_gate
  - governor_terminal_sets_exact_state_future_and_clears_gate
  - focused_test_evaluator_and_public_rollups_match
  - no_fixed_turn_trigger

Local authority boundary

All runtime and public objects are source: storyteller, localAuthorityOnly: true, and keep exactly these local claims true: recordsFinitePowerPriorityOnly, preservesNamedSourceProtectedAndShedSurface, preservesDefaultActorAndFutureReader, and requiresVisibleLosingSurface.

They keep exactly these authority claims false: grantsConsent, grantsLegalValidity, grantsWaiver, grantsSettlement, grantsRouteClearance, grantsArchiveRelease, grantsProofTruth, grantsSponsorAuthority, grantsFanAuthority, grantsInspectorAuthority, grantsEditorAuthority, grantsProducerLicense, grantsGeneratorOwnership, grantsInfinitePower, grantsCleanAllPoweredState, grantsFutureReuseAuthority, and grantsUniversalBroadcastAuthority.

Adjacency boundary

This lens observes the immediate finite-power assignment and its scar. Capacity liability prices the resulting capacity decision; blackout-residue readers consume the outage scar; borrowed-generator claim maturity consumes lender debt. None substitutes for the nine-card allocation, and this lens must not claim their downstream work as its own evidence.

Progress metric

emergencyPowerPriorityProgress = 0..10:

  • 0: no physical power priority surface.
  • 1: state-triggered incident exposes finite power source.
  • 2: at least two powered surfaces are visible.
  • 3: priority claimant and default actor are visible.
  • 4: 应急供电账本 records source, loads, claims, consequences, and future reader.
  • 5: the rite requires all nine exact cards in hand and in their exact slots.
  • 6: all eight branch/state/future mappings are exact and exclusive.
  • 7: only choices 6 and 7 attach the exact four-flag default gate.
  • 8: 供电削减默认 exposes all eight exact terminal/state/future mappings and clears the gate.
  • 9: at least one future route consumes the power scar.
  • 10: focused test, evaluator, three public rollups, and the overdraw-to-governor replay agree on the complete runtime contract.

Anti-regression traps

This lens should reject:

  • generator lore without assignment;
  • sponsor cash that creates infinite load;
  • “avoid blackout” without naming the shed surface;
  • overdraw with no later harm;
  • skip or underfill that silently arms the default event;
  • any choice other than indexes 6 and 7 setting the common pending flags;
  • recovery reopening the one-shot allocation rite;
  • default actor hidden behind generic black screen;
  • power state that no future route can read;
  • fixed-turn, fixed-day, chapter quota, or dashboard-health trigger;
  • governance or process pages counted as game content.