Fire Curtain / Egress Interlock
This mechanism prevents four propositions from collapsing into one another:
- F2 can complete a containment drop under empty-house test conditions.
- Aisle B must remain open while a person or obstruction occupies its crossing window.
- Usher Lin’s current floor stop order can veto a remote cue.
- A sponsor broadcast can describe a safety state but cannot create physical egress authority.
The collision exists because the first two propositions are independently safe and temporally incompatible. The mechanic resolves command order, not the validity or portability of an old tag.
Runtime chain
pressure_intake:
rite_id: storyteller.rite.fire_curtain_interlock_intake.v1
choice: 0
option_id: record_dual_safety_conflict
exact_slots:
drop_trace: storyteller.card.fire_curtain_drop_test_trace.v1
aisle_census: storyteller.card.fire_curtain_occupied_aisle_census.v1
stop_order: storyteller.card.usher_lin_stop_order.v1
sponsor_cue: storyteller.card.fire_curtain_sponsor_safehouse_cue.v1
records:
- fire_curtain_interlock.intake_recorded
- fire_curtain_interlock.pressure.drop_test_passed
- fire_curtain_interlock.pressure.aisle_occupied
- fire_curtain_interlock.pressure.usher_stop_order_visible
- fire_curtain_interlock.pressure.sponsor_claimed_route_clearance
collision_entry:
event_id: storyteller.event.fire_curtain_egress_collision.v1
option: 0
option_id: open_interlock_hearing
requires_intake_and_four_pressure_flags: true
requires_all_seven_exact_cards: true
sets:
- fire_curtain_interlock.collision_opened
- fire_curtain_interlock.drop_authority_visible
- fire_curtain_interlock.egress_authority_visible
- fire_curtain_interlock.usher_claim_pending
- fire_curtain_interlock.sponsor_broadcast_claim_pending
- fire_curtain_interlock.state.contested_interlock
interlock_state_after: contested_interlock
review:
rite_id: storyteller.rite.fire_curtain_egress_interlock_review.v1
repeatable: false
requires_all_collision_flags: true
exact_slot_count: 7The intake records simultaneous pressure but does not open the review directly. The collision event converts those observations into one live interlock state. Neither raw curtain count, starter-card visibility, fixed time, nor dashboard health may substitute for this chain.
Ordered review contract
branches:
certify_drop_not_egress:
interlock_state_after: drop_test_only
future_effect: separate_egress_clearance_required
counter_deltas: { fireCurtainDropEvidence: 3, egressClearanceDebt: 2, usherProtection: 1, sponsorPressure: 1 }
clear_aisle_then_repeat_drop:
interlock_state_after: aisle_cleared_retest_due
future_effect: repeat_drop_witness_required
counter_deltas: { aisleClearanceIntegrity: 3, retestDuty: 2, showDelay: 2, sponsorPressure: 1 }
hold_last_person_window:
interlock_state_after: last_person_window_held
future_effect: manual_hold_witness_required
counter_deltas: { lastPersonProtection: 3, manualHoldWitnessDuty: 2, curtainDelay: 2, crowdFriction: 1 }
split_floor_and_broadcast_cues:
interlock_state_after: floor_broadcast_split
future_effect: broadcast_cue_cannot_drive_egress
counter_deltas: { authoritySeparation: 3, broadcastCueRestraint: 2, floorControlVisibility: 2, sponsorPressure: 2 }
honor_usher_lin_stop_order:
interlock_state_after: usher_veto_honored
future_effect: usher_lin_signoff_required
counter_deltas: { usherProtection: 3, stopOrderIntegrity: 3, floorDelay: 1, sponsorPressure: 2 }
quarantine_safehouse_cue:
interlock_state_after: sponsor_cue_quarantined
future_effect: interlock_witness_pair_required
counter_deltas: { sponsorCueQuarantine: 3, witnessPairDuty: 2, routeRewriteCost: 2, broadcastFriction: 1 }
air_synchronized_safety_claim:
interlock_state_after: false_synchronized_clearance
future_effect: false_interlock_default_pending
counter_deltas: { falseSynchronizedClearance: 3, harmedAudienceExposure: 2, sponsorSafehouseSpeed: 2, interlockIntegrity: -3 }The first branch certifies only the current containment result; it explicitly does not certify egress. The second and third sequence physical commands. The fourth through sixth preserve floor authority in different ways. The seventh creates a false synchronization rather than a legitimate safety state.
Harmful branch and default
Only air_synchronized_safety_claim may set the exact pending triple:
pending_triple:
fire_curtain_interlock.default_pending: true
event.false_fire_curtain_interlock_default.armed: true
future_route.false_interlock_default_pending: true
aired_claim: broadcast_reality.fire_curtain_synchronized_safety_claim_aireddefault_terminals:
cut_broadcast_restore_floor_veto:
interlock_state_after: floor_veto_restored
future_effect: floor_stop_precedes_sponsor_cue
counter_deltas: { floorVetoIntegrity: 3, broadcastClaimRetraction: 2, sponsorPressure: 2, egressClearanceDebt: 1 }
evacuate_side_passage_then_drop:
interlock_state_after: side_passage_then_drop
future_effect: side_passage_witness_required
counter_deltas: { sidePassageSafety: 3, evacuationDelay: 2, dropRetestDuty: 2, witnessBurden: 1 }
accept_synchronized_safehouse_reality:
interlock_state_after: synchronized_safehouse_reality_hardened
future_effect: sponsor_cue_controls_egress
counter_deltas: { sponsorRealityHardening: 3, egressAuthorityLoss: 3, harmedAudienceExposure: 2, correctionDuty: 2 }Every default terminal clears the exact triple and the live broadcast_reality.fire_curtain_synchronized_safety_claim_aired flag. It preserves fire_curtain_interlock.false_synchronized_clearance_scar as the durable record that the false synchronized claim did air. Acceptance is a harmful broadcast-reality mutation, not a safety certification.
Authority boundary
This mechanic can order the current containment command, occupied-egress command, last-person window, floor veto, and broadcast cue. It grants no evacuation clearance, performer or audience consent, sponsor safehouse authority, archive ownership, inspection certification beyond the named test, or universal public truth.