Failure State Arbitration / 失败态裁定机制

Failure State Arbitration defines how Storyteller handles the collision of multiple live failure states when only one failure can become official broadcast reality without creating contradiction.

This mechanic exists because the current mesh is now good at generating durable scars: drift, insolvency, coalition lock, stabilization recall, audience floor breach, sponsor capture, legal exposure, route asset capture, and blackout pressure. The missing step is not another pressure source. It is a public, assignable arbitration rule for deciding which failure the production carries and what happens to the failures it refuses to carry.

Design gap covered

Without this mechanic, late pressure can silently collapse into a hidden priority order: legal beats public, sponsor beats editor, blackout beats route custody, or whichever event happened last wins. That undermines the game law that broadcast creates reality.

With this mechanic, failure is a contested object:

  • at least two claimants say different failures are true;
  • the producer chooses the carried failure;
  • uncarried failures harden as scars, not erased flags;
  • future route availability changes based on the chosen scar.

Entry state

Open arbitration only from live state pressure.

entry_state:
  trigger_kind: state_pressure
  failure_claim_rows_min: 2
  rows_conflict_over_same_broadcast_or_route_asset: true
  official_failure_slot_unset: true
  each_row_has_claimant_and_target: true
  at_least_one_uncarried_row_can_harden: true
  no_fixed_turn_trigger: true

The mechanic fails if arbitration opens from fixed turn count, day interval, chapter quota, global difficulty, raw content count, lens health, or generic late-game escalation.

Failure claim row

Each live failure row must be concrete:

failure_claim_row:
  row_id: <stable id>
  source_surface: broadcast_reality_drift | broadcast_insolvency | adverse_coalition_lock | stabilization_liability | audience_stability | route_asset_custody | blackout | equivalent
  claimant: inspector | archive | sponsor | editor | fan_public | artist | witness | pirate | route_claimant | blackout_system | public_audience | split
  failure_kind: legal_exposure | public_stability | route_asset_capture | insolvency_default | coalition_capture | stabilization_recall | blackout_fold | equivalent
  target: <broadcast slot, aired version, route asset, proof object, public receipt, person, facility room, archive copy>
  demanded_reality: <what becomes true if row narrates first>
  relief_if_selected: <pressure reduced, proof preserved, or harmed claimant named>
  cost_if_selected: <who/what pays>
  hardening_if_unselected: <future scar>
  public_visibility: hidden | internal | docketed | public | broadcast
  proof_or_absence: <proof id or explicit_absence>
  default_narrator_strength: <why this row can seize reality if uncarried>

A row is invalid if it only stores a counter value, mood, generic bad ending, or hidden priority.

Failure slot states

StateMeaningRequired consequence
slot_unsetMultiple valid failures exist but no carried failure is named.Offer docket/hearing or arm default.
legal_failure_carriedLawful exposure is official.Legal route opens or appeal becomes required; public/private scars remain.
public_failure_carriedPublic breach or audience wound is official.Public legitimacy may rise; sponsor/legal/route pressure increases.
custody_failure_carriedRoute asset capture, hostility, sacrifice, or recovery-only state is official.Broadcast can remain legible; future route requires rescue or exchange.
sponsor_failure_carriedSponsor/contract/editor private capture absorbs the visible failure.Slot pressure drops; public distrust and capture debt rise.
split_record_carriedPublic and lawful versions remain separate.Contradiction is preserved as future playable pressure.
failure_slot_frozenNo claimant narrates yet.False-clean blocked; schedule, blackout, audience, or recovery cost rises.
failure_defaultedThe strongest uncarried narrator takes reality.Event hardens the target and future route effect worsens.
recovery_only_failureA failure can be repaired only through scarred recovery.Later rite must pay public, legal, sponsor, custody, or blackout cost.

Arbitration postures

Use when legal exposure is less damaging than letting private capture, public drift, or custody fraud decide reality.

Expected deltas:

selected_posture: carry_legal_failure
slot_state_after: legal_failure_carried
relief_any: [public_stability_preserved, route_asset_not_privately_captured, sponsor_clean_capture_blocked]
cost_any: [legal_exposure_up, inspection_heat_up, lawful_only_route, bureau_favor_debt_up, future_appeal_required]
uncarried_scar_any: [public_distrust_pending, sponsor_retaliation_armed, route_recovery_cost_up]

Carry public failure

Use when public receipt, fan oxygen debt, pirate witness, or audience contradiction must become official before private or lawful actors flatten it.

Expected deltas:

selected_posture: carry_public_failure
slot_state_after: public_failure_carried
relief_any: [private_capture_blocked, public_receipt_legitimacy_up, audience_reason_preserved]
cost_any: [sponsor_stop_loss_pressure_up, legal_exposure_up, witness_exposure_up, fan_oxygen_liability_up]
uncarried_scar_any: [lawful_challenge_pending, route_asset_pressure_up]

Carry custody failure

Use when a route asset, proof, person, voice, archive copy, facility room, or edit source must be admitted as captured, hostile, sacrificed, or recovery-only.

Expected deltas:

selected_posture: carry_custody_failure
slot_state_after: custody_failure_carried
relief_any: [broadcast_legibility_kept, legal_chain_not_falsified, public_panic_reduced]
cost_any: [route_asset_captured_or_hostile, future_recovery_cost_up, handler_or_witness_loss_up]
uncarried_scar_any: [public_receipt_distrust_pending, sponsor_or_archive_claim_hardened]

Convert to sponsor failure

Use when sponsor bridge, contract capture, clean copy, or private editor custody keeps the immediate broadcast alive.

Expected deltas:

selected_posture: convert_to_sponsor_failure
slot_state_after: sponsor_failure_carried
relief_any: [slot_survives, budget_or_schedule_pressure_down, lawful_failure_delayed]
cost_any: [contract_capture_up, public_receipt_distrust_up, artist_trust_down, clean_version_seizure_risk_up]
uncarried_scar_any: [public_counterclaim_armed, legal_counterclaim_armed]

Split public and lawful record

Use when contradiction is better than capture. The mechanic preserves two records and requires later correction, audit, or route-specific conversion.

Expected deltas:

selected_posture: split_public_lawful_record
slot_state_after: split_record_carried
relief_any: [immediate_capture_blocked, proof_not_destroyed, public_and_lawful_versions_inspectable]
cost_any: [broadcast_reality_drift_up, correction_slot_required, source_ambiguity_up]
uncarried_scar_any: [future_contradiction_pending]

Freeze failure slot

Use when no claimant should be allowed to narrate yet. The cost is silence, blackout risk, schedule scar, audience damage, or recovery-only status.

Expected deltas:

selected_posture: freeze_failure_slot
slot_state_after: failure_slot_frozen
relief_any: [false_clean_blocked, strongest_claimant_delayed, proof_preserved]
cost_any: [black_screen_pressure_up, schedule_scar_up, audience_stability_down, future_recovery_cost_up]
uncarried_scar_any: [all_rows_pending]

False-clean default

Use only as a failure branch. If the production hides or under-specifies the collision, 未承失败夺取现实 fires or is armed.

Expected deltas:

selected_posture: false_clean_default
slot_state_after: failure_defaulted
emitted_event: storyteller.event.uncarried_failure_takes_reality.v1
relief_any: [temporary_silence_or_false_clean]
cost_any: [default_narrator_takes_reality, future_route_effect_worsens, recovery_only_or_capture_armed]

Counter contract

Every valid resolution must mutate at least three counters or durable states. At least one delta must be relief and at least one must be cost, except default where the cost may dominate.

Expected surfaces:

  • official_failure_slot
  • failure_arbitration_pressure
  • legal_exposure
  • public_stability
  • audience_stability
  • route_asset_pressure
  • broadcast_reality_drift
  • continuity_hazard
  • inspection_heat
  • bureau_favor_debt
  • sponsor_stop_loss_pressure
  • contract_capture
  • archive_debt
  • public_receipt_legitimacy
  • public_receipt_distrust
  • fan_oxygen_resentment
  • source_ambiguity
  • black_screen_pressure
  • future_recovery_cost

Relationship to nearby systems

This mechanic does not replace the systems that generate failures.

  • Broadcast reality drift decides how contradictory realities are audited.
  • Broadcast insolvency decides how unpaid relief defaults.
  • Adverse coalition lock decides how hostile factions coordinate around a target.
  • Stabilization liability decides who carries the cost of a successful stabilization.
  • Route asset custody decides who controls people, proofs, voices, receipts, rooms, and archive copies.
  • Audience stability decides whether the public can keep watching.

Failure State Arbitration begins after at least two of those surfaces are simultaneously valid and conflicting.

Replay evidence shape

mechanic_id: storyteller.mechanic.failure_state_arbitration.v1
session_id: lens-storyteller-failure-state-arbitration-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  failure_claim_rows_min: 2
  rows_conflict_over_same_broadcast_or_route_asset: true
  official_failure_slot_unset: true
  no_fixed_turn_trigger: true
source_rows:
  - row_id: <row>
    source_surface: <surface>
    claimant: <claimant>
    failure_kind: <kind>
    target: <target>
    demanded_reality: <text>
    hardening_if_unselected: <state>
  - row_id: <row>
    source_surface: <surface>
    claimant: <claimant>
    failure_kind: <kind>
    target: <target>
    demanded_reality: <text>
    hardening_if_unselected: <state>
offered_choices:
  - storyteller.card.failure_state_arbitration_docket.v1
  - storyteller.rite.failure_priority_hearing.v1
  - carry_legal_failure
  - carry_public_failure
  - carry_custody_failure
  - convert_to_sponsor_failure
  - split_public_lawful_record
  - freeze_failure_slot
  - false_clean_default
branch_result:
  selected_posture: <posture>
  carried_failure_row: <row id>
  uncarried_failure_rows:
    - row_id: <row id>
      scar_after: <scar>
  official_failure_slot_after: <slot state>
  target_state_after: <state>
  emitted_event: storyteller.event.uncarried_failure_takes_reality.v1 | none
  future_route_effect: <effect>
  counter_deltas:
    relief:
      - <relief>
    cost:
      - <cost>

Failure cases

The mechanic fails if any of these are true:

  • arbitration is triggered by a fixed turn or chapter gate;
  • there is only one failure row;
  • rows do not name claimant, target, demanded reality, selected relief, selected cost, and unselected hardening;
  • the player cannot choose which failure to carry;
  • uncarried rows disappear;
  • legal/public/custody/sponsor/freeze/default branches produce equivalent state;
  • default hardening is flavor-only;
  • future route availability, cost, accepted channel, target custody, or recovery requirement does not change.

Non-goals

  • Not a universal endgame controller.
  • Not a hidden priority table.
  • Not a generic dashboard.
  • Not a finance mechanism.
  • Not a fixed-turn escalation.
  • Not a bulk content target.
  • Not a clean way to launder earlier failure states.