Ending Scar Ledger Lens / 结局伤痕账本 Lens

This lens observes whether 结局伤痕账本线 and 结局伤痕账本机制 correctly carry accumulated route, custody, release, proxy, public-proof, stabilization, and black-box scars into ending eligibility.

It exists because the content mesh already knows how to create scars: 稳定化责任交接线, 洁净结局扣押链, 追偿放行线, 代理人姿态链, broadcast reality drift, and Route Assets and Custody can all leave durable future costs. The remaining failure risk is terminal laundering: the game proves those costs during play but then unlocks a clean ending as if the scars never existed.

This lens should fail any implementation where ending resolution is based only on total score, route count, a fixed numbered turn, or a generic good/bad flag.

Observable surface

The lens observes:

Must pass

A valid implementation must prove all of the following.

1. Entry inherits live scar state

The lens must create or load an ending scar from live state, not from a fixed numbered trigger.

Acceptable source states include:

  • stabilization ticket state underwritten, public_bonded, production_carried, recalled, or recovery_only;
  • clean-ending docket state sponsor_clean_cut_claimed, editor_safe_copy_made, inspector_quarantine_seal, public_countercopy_live, asset_copy_split, clean_ending_false_owner, or asset_recovered_after_seizure;
  • collection release state released_with_scar, public_only, lawful_only, refused, mis_stamped, or recovery_only;
  • proxy posture state recruited, retained, exposed, faction_bound, hostile, missing, or recovery_only;
  • route asset state route_asset, protected, captured, hostile, false_owner, sacrificed, or recovery_only;
  • black-box/source state contradiction_pending, source_ambiguity, black_box_opened, or equivalent.

The replay must record source session id, seed if inherited, source row id, scar id, scar state before, and candidate ending family before resolution.

2. Ledger row is concrete

The implementation must expose at least one Ending Scar Ledger row with:

scar_id: <stable id>
source:
  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>
ending_family: public_scar_verdict | private_clean_capture | split_custody_canon | recovery_only_broadcast | black_box_opened | equivalent
terminal_claimant_privileged: sponsor | inspector | archive | editor | fan_public | artist | witness | pirate | producer | split | none
terminal_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
scar_state_before: pending | clean_requested | underwritten | released_with_scar | public_only | lawful_only | split | captured | false_owner | recovery_only | contradiction_pending
scar_state_after: eligible | blocked | costlier | public_only | lawful_only | split | captured | recovery_only | contradiction_pending
route_effect_after: ending_unlocked_with_scar | ending_blocked | ending_costlier | private_capture | public_audit_required | split_canon | recovery_only_terminal | contradiction_pending

The lens must fail if the row only records good_ending, bad_ending, total score, route count, or ending_unlocked: true.

3. Eligibility hearing is fillable and branchy

结局资格听证 or an equivalent terminal rite must be offered when a credible scar row exists and at least one ending family would be falsely clean if the scar were ignored.

The hearing must support at least five non-equivalent branch families among:

  • public scar verdict;
  • private clean capture;
  • split custody canon;
  • recovery-only broadcast;
  • reopen black box;
  • block false-clean.

Each branch must set different eligible ending, proof carrier, claimant privilege, harmed claimant, scar state, cost, and route effect.

4. Terminal branches cannot collapse

The lens must fail if public verdict, private capture, split canon, recovery-only, black-box reopening, and false-clean block resolve to the same generic ending state.

Expected non-equivalence:

  • public verdict privileges public proof and blocks private clean exclusivity;
  • private capture privileges sponsor, inspector, archive, or editor proof and harms public or artist/witness routes;
  • split canon preserves two incompatible copies and blocks single-owner truth;
  • recovery-only blocks clean closure but preserves a costly future hook;
  • black-box reopening exposes causal contradiction or omitted claimant;
  • false-clean block prevents terminal laundering and emits audit or recovery-only state.

5. No clean ending laundering

Any branch that makes an ending eligible must preserve the scar that made it eligible.

Valid visible scars include:

  • fan refund trigger;
  • witness exposure;
  • sponsor stop-loss pressure;
  • public audit required;
  • contract capture;
  • bureau favor debt;
  • edit debt;
  • source ambiguity;
  • public receipt distrust;
  • archive debt;
  • reality drift;
  • false-owner risk;
  • recovery cost;
  • hostile claimant;
  • route blockage;
  • black-screen pressure;
  • black-box contradiction;
  • lawful-only or public-only closure;
  • split copy import requirement.

The lens must fail if terminal resolution upgrades a scarred branch into clean closure by omitting the proof carrier or harmed claimant.

6. Audit mutates future terminal state

When ending resolution ignores an active scar, overclaims exclusive truth, lacks two split copy carriers, omits a harmed claimant, or upgrades recovery-only into clean closure, 结局伤痕审计 must mutate at least one durable future surface:

  • ending family becomes blocked, costlier, split, public-only, lawful-only, recovery-only, or contradiction-pending;
  • proof carrier becomes disputed, insufficient, captured, split, or required;
  • terminal claimant privilege changes;
  • harmed claimant becomes named;
  • public receipt, legal seal, edit checksum, sponsor contract, proxy testimony, route asset, or black-box state changes;
  • route effect becomes ending blocked, ending costlier, public audit required, split canon, private capture, recovery-only terminal, or contradiction pending.

The audit must not be flavor-only.

7. Multi-session inheritance works

The lens must be able to load a scar produced by an earlier source session and later resolve, audit, or block ending eligibility through a separate terminal session.

Required evidence:

source_scar_session_id: <session that created the source scar>
source_scar_seed: <seed>
source_storyline: stabilization_liability_handoff | clean_ending_seizure_cascade | recourse_collection_release | proxy_posture_chain | equivalent
source_row_id: <ticket, docket, receipt, proxy row, route asset, event, or proof object>
ledger_session_id: <session that created or updated Ending Scar Ledger>
ledger_seed: <seed>
resolver_session_id: <session that resolved ending eligibility>
resolver_seed: <seed>
scar_id: <stable id>
ending_family_before: <family>
ending_family_after: <family>
scar_state_before: <state>
scar_state_after: <state>
proof_carrier_before: <carrier or absence>
proof_carrier_after: <carrier or absence>
claimant_privileged_before: <claimant>
claimant_privileged_after: <claimant>
claimant_harmed_before: <claimant or none>
claimant_harmed_after: <claimant or none>
route_effect_before: <effect>
route_effect_after: <effect>

If the implementation only proves ending eligibility inside one isolated scene and never proves callable continuity from earlier scars, the lens is incomplete.

8. Source and terminal family both remain visible

A passing implementation must preserve both sides of the bridge:

  • the source scar remains inspectable as a ticket, docket, receipt, proxy row, route asset, event, or proof object;
  • the terminal family receives a real eligibility mutation, block, cost, split, capture, recovery-only state, or audit result.

The lens must fail if the source says scar exists but no ending can inherit it, or if an ending changes without pointing back to the scar that caused the change.

Branch assertions

Public scar verdict assertion

ending_family_after: public_scar_verdict
eligible_ending: storyteller.ending.public_scar_verdict.v1
proof_carrier_any:
  - public_receipt
  - fan_oath
  - proxy_testimony
  - pirate_relay
  - route_asset
  - black_box
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

Private clean capture assertion

ending_family_after: private_clean_capture
eligible_ending: storyteller.ending.private_clean_capture.v1
claimant_privileged_any:
  - sponsor
  - inspector
  - archive
  - editor
proof_carrier_any:
  - sponsor_contract
  - legal_seal
  - edit_checksum
  - route_asset
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

Split custody canon assertion

ending_family_after: split_custody_canon
eligible_ending: storyteller.ending.split_custody_canon.v1
claimant_privileged: split
copy_carrier_count_min: 2
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

Recovery-only broadcast assertion

ending_family_after: recovery_only_broadcast
eligible_ending: storyteller.ending.recovery_only_broadcast.v1
clean_terminal_family_blocked: true
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

Black-box reopening assertion

ending_family_after: black_box_opened
eligible_ending: ending.black_box_opened
proof_carrier: black_box
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

False-clean block assertion

ending_family_after_any:
  - blocked
  - recovery_only_broadcast
emitted_event: 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

Failure cases

The lens must fail if any of these are true:

  • entry is triggered by a fixed numbered turn;
  • ending eligibility is based only on score, route count, reputation, money, or generic good/bad flag;
  • a live scar exists but no Ending Scar Ledger row is created or explicitly audited;
  • ledger row lacks source row, proof carrier, privileged claimant, harmed claimant, scar before/after, and route effect;
  • public verdict, private capture, split canon, recovery-only, black-box reopening, and false-clean block collapse into equivalent outcomes;
  • private capture does not name the public, artist, witness, pirate, or route claimant it harms;
  • public verdict erases lawful, sponsor, archive, or edit scars;
  • split canon lacks two named copy carriers;
  • recovery-only becomes clean closure by omission;
  • black-box proof exposes contradiction but terminal family does not mutate;
  • audit is flavor-only;
  • source scar cannot be inspected from terminal result;
  • replay evidence lacks seed/session ids and before/after scar state.

Progress metric

Progress is measured by proven terminal inheritance, not by number of endings.

  • 20%: a live source scar can create or explicitly audit an Ending Scar Ledger row.
  • 40%: the row records source, proof carrier, privileged claimant, harmed claimant, scar before/after, and route effect.
  • 60%: at least three non-equivalent terminal branches resolve with different eligible endings, scars, claimants, and costs.
  • 80%: Ending Scar Audit mutates terminal eligibility when false-clean resolution is attempted.
  • 100%: multi-session replay proves a scar inherited from an earlier branch can later change, block, split, cost, or audit an ending family with seed/session ids and before/after state.

Minimal replay evidence shape

lens: storyteller.lens.ending_scar_ledger.v1
result: pass | fail
sessions:
  source_scar:
    session_id: <id>
    seed: <seed>
    source_storyline: stabilization_liability_handoff | clean_ending_seizure_cascade | recourse_collection_release | proxy_posture_chain | equivalent
    source_row_id: <ticket, docket, receipt, proxy row, route asset, event, or proof object>
    source_scar_state: <state>
  ledger:
    session_id: <id>
    seed: <seed>
    offered_card: storyteller.card.ending_scar_ledger.v1
    ledger_row_before:
      scar_id: <stable id>
      ending_family: public_scar_verdict | private_clean_capture | split_custody_canon | recovery_only_broadcast | black_box_opened | equivalent
      terminal_claimant_privileged: <claimant>
      terminal_claimant_harmed: <claimant>
      proof_carrier: <carrier>
      scar_state_before: <state>
      route_effect_after: <effect or pending>
  eligibility_hearing:
    session_id: <id>
    seed: <seed>
    offered_rite: storyteller.rite.ending_eligibility_hearing.v1
    selected_terminal_posture: public_verdict | private_capture | split_canon | recovery_only | reopen_black_box | block_false_clean
    assigned_proof_carrier: <carrier or explicit_absence>
    ledger_row_after:
      ending_family_after: <family>
      scar_state_after: eligible | blocked | costlier | public_only | lawful_only | split | captured | recovery_only | contradiction_pending
      claimant_privileged_after: <claimant>
      claimant_harmed_after: <claimant>
      route_effect_after: <effect>
    deltas:
      - <relief>
      - <cost>
      - <ending mutation>
  scar_audit:
    session_id: <id>
    seed: <seed>
    emitted_event: storyteller.event.ending_scar_audit.v1 | none_if_valid
    audit_cause: unseated_scar | exclusive_truth_contradicted | public_verdict_overclaims | split_missing_copy | recovery_cleanwashed | black_box_omission | harmed_claimant_missing | none
assertions:
  entry_state_driven: true
  source_scar_inherited: true
  ledger_row_concrete: true
  branch_non_equivalence: true
  branch_has_relief_and_cost: true
  no_clean_laundering: true
  audit_mutates_terminal_state: true
  multi_session_inheritance: true
  no_fixed_turn_trigger: true

Non-goals

  • Not raw ending-count satisfaction.
  • Not a generic epilogue page.
  • Not a morality or reputation score test.
  • Not a fixed final-turn gate.
  • Not governance content.
  • Not a replacement for source storylines that create scars.
  • Not valid unless terminal resolution reads durable scar state and mutates ending eligibility with proof and claimant accounting.