Ending Eligibility Hearing / 结局资格听证

Ending Eligibility Hearing is the management rite that reads scarred route state and decides which ending families are eligible, blocked, costlier, split, captured, or recovery-only.

It consumes one or more 结局伤痕账本 rows. It does not award endings by score, route count, or fixed numbered trigger.

The rite exists because a late-game branch should not become terminally irrelevant after it has already mutated liability, custody, public proof, release, proxy posture, or route assets.

Offer conditions

Offer this rite when:

  1. at least one Ending Scar Ledger row exists or can be derived from a mature scar;
  2. the row names a source branch, proof carrier, privileged claimant, harmed claimant, scar state, and route effect;
  3. at least two ending families could plausibly be affected by the row;
  4. at least one ending family would be falsely clean if the scar were ignored;
  5. the player has at least one handler, proof carrier, public anchor, legal seal, edit checksum, route asset, proxy testimony, black-box copy, or explicit absence to assign.

The rite may appear near terminal resolution, route import, epilogue assembly, or canon export, but its trigger is scar state, not a turn number.

Inputs

Required inputs:

rite: storyteller.rite.ending_eligibility_hearing.v1
ledger_card: storyteller.card.ending_scar_ledger.v1
scar_id: <stable id>
source_row_id: <ticket, docket, receipt, proxy row, route asset, event, or proof object>
selected_terminal_posture: public_verdict | private_capture | split_canon | recovery_only | block_false_clean | reopen_black_box
claimant_privileged: sponsor | inspector | archive | editor | fan_public | artist | witness | pirate | producer | split | none
claimant_harmed: sponsor | inspector | archive | editor | fan_public | artist | witness | pirate | route_claimant | public_audience | none
proof_carrier: public_receipt | legal_seal | edit_checksum | sponsor_contract | fan_oath | proxy_testimony | pirate_relay | route_asset | black_box | explicit_absence

Optional inputs:

handler: yu_lan | baiya | shen_luo | han_yanshuang | inspector_rhee | orion_breath | han_cutroom | lin_qiao | explicit_absence
source_session_id: <session id if inherited>
source_seed: <seed if inherited>
ending_candidate_before: public_scar_verdict | private_clean_capture | split_custody_canon | recovery_only_broadcast | black_box_opened | equivalent
scar_state_before: pending | clean_requested | underwritten | released_with_scar | public_only | lawful_only | split | captured | false_owner | recovery_only

Branches

Branch A — Seat public scar verdict

The player assigns public proof, fan oath, witness proof, artist refusal, pirate relay, black-box copy, or unauthorized history as the terminal proof carrier.

Required outcome:

ending_family_after: public_scar_verdict
eligible_ending: storyteller.ending.public_scar_verdict.v1
relief_any:
  - private_capture_blocked
  - public_legitimacy_kept
  - scar_made_visible
cost_any:
  - fan_refund_trigger_armed
  - witness_exposure_up
  - sponsor_stop_loss_pressure_up
  - public_audit_required
route_effect_after_any:
  - ending_unlocked_with_scar
  - public_audit_required
  - private_clean_route_blocked

Branch B — Seat private clean capture

The player accepts sponsor contract, inspector seal, archive lock, or editor checksum as the terminal proof carrier.

Required outcome:

ending_family_after: private_clean_capture
eligible_ending: storyteller.ending.private_clean_capture.v1
relief_any:
  - lawful_or_sponsor_safe_closure
  - broadcast_version_stable
  - audit_defense_up
cost_any:
  - contract_capture_up
  - bureau_favor_debt_up
  - edit_debt_up
  - public_route_blocked_or_costlier
route_effect_after_any:
  - private_capture
  - lawful_only
  - ending_costlier

Branch C — Seat split custody canon

The player proves that no exclusive terminal owner can safely absorb the scar, preserving two incompatible copies.

Required outcome:

ending_family_after: split_custody_canon
eligible_ending: storyteller.ending.split_custody_canon.v1
relief_any:
  - exclusive_false_owner_blocked
  - public_and_formal_copies_survive
cost_any:
  - source_ambiguity_up
  - archive_debt_up
  - public_receipt_distrust_up
  - reality_drift_up
route_effect_after_any:
  - split_canon
  - contradiction_pending

Branch D — Mark recovery-only broadcast

The player admits that the scar blocks clean terminal closure but preserves one costly recovery hook.

Required outcome:

ending_family_after: recovery_only_broadcast
eligible_ending: storyteller.ending.recovery_only_broadcast.v1
relief_any:
  - lost_route_reopenable
  - false_clean_blocked
cost_any:
  - recovery_cost_up
  - hostile_claimant_survives
  - route_blockage_visible
  - black_screen_pressure_up
route_effect_after_any:
  - recovery_only_terminal
  - ending_costlier

Branch E — Reopen black box

The player assigns the black-box copy or equivalent causal proof as terminal carrier, allowing Black Box Opened to remain eligible while still reading new scar rows.

Required outcome:

ending_family_after: black_box_opened
eligible_ending: ending.black_box_opened
relief_any:
  - causal_structure_visible
  - hidden_claimant_exposed
cost_any:
  - source_ambiguity_up
  - archive_heat_up
  - public_contradiction_up
route_effect_after_any:
  - contradiction_pending
  - public_audit_required

Branch F — Block false-clean ending

The player cannot seat a credible carrier, or the offered ending would erase the scar.

Required outcome:

ending_family_after_any:
  - blocked
  - recovery_only_broadcast
emitted_or_chained_event_any:
  - storyteller.event.ending_scar_audit.v1
cost_any:
  - false_owner_risk_up
  - public_receipt_distrust_up
  - route_blocked
route_effect_after_any:
  - ending_blocked
  - contradiction_pending
  - recovery_only_terminal

Resolution contract

Every resolution must write a before/after row:

ledger_before:
  scar_id: <stable id>
  source_row_id: <ticket, docket, receipt, proxy row, route asset, event, or proof object>
  ending_family: <candidate family>
  scar_state_before: <state>
  route_effect_before: <effect>
ledger_after:
  selected_terminal_posture: public_verdict | private_capture | split_canon | recovery_only | block_false_clean | reopen_black_box
  ending_family_after: public_scar_verdict | private_clean_capture | split_custody_canon | recovery_only_broadcast | black_box_opened | blocked
  scar_state_after: eligible | blocked | costlier | public_only | lawful_only | split | captured | recovery_only | contradiction_pending
  claimant_privileged: <claimant>
  claimant_harmed: <claimant>
  route_effect_after: <effect>
counter_or_state_deltas:
  - <relief>
  - <cost>
  - <future mutation>

The rite fails if it records only ending unlocked, ending locked, a score threshold, or a generic good/bad ending flag.

Default emission

Emit or record 结局伤痕审计 when:

  • the resolver tries to choose an ending while relevant scars remain unseated;
  • a private clean ending claims exclusive truth while a public countercopy survives;
  • a public verdict claims moral closure while a lawful capture or release refusal survives;
  • a split ending lacks two named copy carriers;
  • a recovery-only route is upgraded into a clean ending with no new scar;
  • black-box proof exposes a claimant omitted from the proposed terminal family.

Non-goals

  • Not an ending selector menu.
  • Not a score gate.
  • Not a turn timer.
  • Not raw ending-count expansion.
  • Not a replacement for custody, release, proxy, or stabilization systems.
  • Not valid unless it mutates ending family, claimant privilege, harmed claimant, proof carrier, scar state, and route effect.