Ending Scar Audit / 结局伤痕审计
Ending Scar Audit is the event emitted when terminal resolution tries to ignore a scar that is still durable in route, custody, liability, release, proxy, public proof, or broadcast reality state.
It is the late-game audit event for 结局伤痕账本 and 结局资格听证. It prevents the final screen from laundering earlier branch costs into a clean ending.
This event must not be a generic epilogue warning.
Event triggers
Trigger or record this event when any of the following are true:
- an ending is selected while an Ending Scar Ledger row remains
pending,contradiction_pending,false_owner,captured, orrecovery_only; - 私有洁净收编 is proposed while public receipt, fan oath, artist refusal, witness copy, pirate relay, or black-box proof still contests exclusive truth;
- 公开伤痕裁决 is proposed while sponsor, inspector, archive, or editor custody still has enforceable lawful or contractual capture;
- 分裂托管正典 is proposed without two named copy carriers;
- 仅可复原播出 is upgraded into clean closure without spending a new proof carrier and adding a new scar;
- Black Box Opened exposes a source claimant that the proposed ending omitted;
- a stabilization, release, proxy, or route-asset scar is still active but no terminal claimant is harmed by the chosen ending.
No trigger may be based on a fixed numbered turn.
Required event payload
event: storyteller.event.ending_scar_audit.v1
proposed_ending: public_scar_verdict | private_clean_capture | split_custody_canon | recovery_only_broadcast | black_box_opened | equivalent
ledger_row:
scar_id: <stable id>
source_storyline: stabilization_liability_handoff | clean_ending_seizure_cascade | recourse_collection_release | proxy_posture_chain | route_assets_and_custody | equivalent
source_session_id: <session id if inherited>
source_seed: <seed if inherited>
source_row_id: <ticket, docket, receipt, proxy row, route asset, event, or proof object>
scar_state_before: pending | clean_requested | underwritten | released_with_scar | public_only | lawful_only | split | captured | false_owner | recovery_only | contradiction_pending
audit_cause: unseated_scar | exclusive_truth_contradicted | public_verdict_overclaims | split_missing_copy | recovery_cleanwashed | black_box_omission | harmed_claimant_missing
claimant_calling: sponsor | inspector | archive | editor | fan_public | artist | witness | pirate | route_claimant | public_audience | black_box | schedule_board
claimant_omitted: sponsor | inspector | archive | editor | fan_public | artist | witness | pirate | route_claimant | public_audience | none
proof_carrier_before: public_receipt | legal_seal | edit_checksum | sponsor_contract | fan_oath | proxy_testimony | pirate_relay | route_asset | black_box | explicit_absence
ending_state_after: blocked | costlier | public_only | lawful_only | split | captured | recovery_only | contradiction_pending
route_effect_after: ending_blocked | ending_costlier | public_audit_required | split_canon | private_capture | recovery_only_terminal | contradiction_pendingThe event is invalid if it only changes a popularity score, displays a final warning, or erases the proposed ending without naming the scar.
Outcome families
Outcome A — Block exclusive private truth
A private clean claimant tries to end the story while public proof still survives.
Expected deltas:
ending_state_after_any:
- blocked
- costlier
- public_only
cost_any:
- sponsor_stop_loss_pressure_up
- inspection_heat_up
- public_audit_required
route_effect_after_any:
- private_clean_route_blocked
- public_scar_verdict_requiredOutcome B — Block over-clean public verdict
The public version tries to claim moral closure while lawful capture, release refusal, or private proof still binds the asset.
Expected deltas:
ending_state_after_any:
- costlier
- lawful_only
- contradiction_pending
cost_any:
- bureau_favor_debt_up
- edit_debt_up
- source_ambiguity_up
route_effect_after_any:
- lawful_challenge_required
- split_canon_requiredOutcome C — Force split canon
Two copies survive, and either exclusive ending would lie.
Expected deltas:
ending_state_after: split
cost_any:
- archive_debt_up
- public_receipt_distrust_up
- reality_drift_up
route_effect_after_any:
- split_canon
- contradiction_pendingOutcome D — Downgrade to recovery-only
A clean or exclusive ending is blocked because the scar can only be repaired, not resolved.
Expected deltas:
ending_state_after: recovery_only
cost_any:
- recovery_cost_up
- hostile_claimant_survives
- route_blocked
- black_screen_pressure_up
route_effect_after_any:
- recovery_only_terminal
- ending_costlierOutcome E — Reopen black-box contradiction
Black-box proof exposes the causal structure or hidden claimant behind a proposed terminal version.
Expected deltas:
ending_state_after: contradiction_pending
cost_any:
- source_ambiguity_up
- archive_heat_up
- public_contradiction_up
route_effect_after_any:
- black_box_opened_possible
- public_audit_requiredFuture play mutation
The event must mutate at least one durable surface:
- an Ending Scar Ledger row;
- ending eligibility;
- proof carrier state;
- route asset state;
- public receipt legitimacy or distrust;
- legal seal or edit checksum standing;
- sponsor, inspector, archive, editor, fan, witness, artist, pirate, or proxy posture;
- broadcast reality or black-box contradiction state.
Recovery hooks
Recovery is allowed, but never clean:
- seat a new public proof carrier and accept audit;
- spend legal seal and accept lawful-only route;
- split copies and accept source ambiguity;
- recover a route asset through release receipt or proxy rescue;
- reopen black box and accept contradiction;
- downgrade a clean ending into recovery-only terminal state.
Non-goals
- Not a random ending penalty.
- Not a final-score correction.
- Not a fixed calendar or turn timer.
- Not a generic morality judgment.
- Not valid unless it names proposed ending, source scar, calling claimant, omitted claimant, proof carrier, ending state after, and route effect.