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:
- at least one Ending Scar Ledger row exists or can be derived from a mature scar;
- the row names a source branch, proof carrier, privileged claimant, harmed claimant, scar state, and route effect;
- at least two ending families could plausibly be affected by the row;
- at least one ending family would be falsely clean if the scar were ignored;
- 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_absenceOptional 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_onlyBranches
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_blockedBranch 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_costlierBranch 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_pendingBranch 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_costlierBranch 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_requiredBranch 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_terminalResolution 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.