Appeal Residue Routing Lens / 申诉残留分流 Lens

This lens observes whether 申诉残留分流线 and 申诉残留分流机制 correctly turn a scarred appeal or counterpressure success into a limited, routed residue credit.

A pass cannot be achieved by adding an aftermath scene, a generic reward token, a public apology, or a free cleanup. The implementation must prove source result, residue id, scope, spend limit, primary reader, excluded readers, handler/proof/price slots, divergent routing branches, duplication default, downstream reader consumption, and no fixed turn trigger.

This lens observes:

It is observed through:

Design intent

The current corpus already proves false-clean appeal, retaliation counterpressure, reader collision, and scar convergence. This lens targets the missing in-between edge: after an appeal is partially won, the residue of that win must be routed before later systems can cite it.

The residue may be public, lawful, sponsor-bound, crew/witness-bound, quote-bound, route-asset-bound, split, or trustee-carried. It is useful because it was paid for. It is dangerous because later readers may treat it as clean.

The design goal is management + RPG pressure: the player assigns who spends the residue, who waits, who carries proof, what price is paid, and what future reader consumes the scar.

Must pass

1. Entry is state-triggered from scarred appeal result

Required entry evidence:

entry_state:
  trigger_kind: state_pressure
  source_result_present: true
  source_result_any:
    - storyteller.rite.metric_capture_appeal_hearing.v1
    - storyteller.event.appeal_pressure_reversal.v1
    - equivalent scarred appeal or counterpressure result
  source_result_has_relief: true
  source_result_has_cost: true
  source_result_has_future_reader_or_route_effect: true
  residue_credit_created: true
  residue_credit_has_limited_scope: true
  possible_consumer_present: true
  duplicate_or_scope_breach_risk_present: true
  player_response_available: true
  no_fixed_turn_trigger: true

The lens fails if entry comes from fixed turn count, day count, phase quota, chapter quota, raw content count, raw scar count, dashboard state, or lens-health state.

2. Source result is preserved

The routing surface must not retry the original appeal or erase its cost.

Required source shape:

source_result:
  source_result_id: <stable appeal or counterpressure result id>
  source_report_or_ledger_id: <metric report or retaliation ledger id>
  source_mode: public_table_correction | lawful_appeal | sponsor_confession | crew_scar_publication | quote_detachment | route_asset_quarantine | split_metric | public_trace_exposure | lawful_stay | sponsor_release_call | route_asset_counterseal | witness_shelter | bait_overcommitment | equivalent
  source_state_after: <scarred success or recovery state>
  hidden_debt_state_after: visible | scoped_visible | surcharge_attached | contradiction_pending | recovery_only | equivalent

The lens fails if the source result has no stable id, no cost, or no future reader effect.

3. Residue scope, spend limit, and not-clean-key status are visible

申诉残留账本 must show:

residue_credit:
  residue_id: <stable residue id>
  residue_type: public_correction_credit | lawful_stay_credit | sponsor_release_credit | crew_scar_credit | quote_reprice_credit | route_counterseal_credit | split_metric_credit | trustee_credit | equivalent
  residue_scope: single_reader | scoped_multi_reader | held_until_release | burn_only | equivalent
  spend_limit: one_use | one_use_plus_receipt | scoped_multi_use_with_surcharge | release_required | equivalent
  not_clean_key: true

The lens fails if a scarred appeal result is stored only as success, cleared, appeal won, reputation restored, or another clean token.

4. Ledger records readers and routing slots

The ledger must record:

routing_assignment:
  eligible_readers_min: 1
  primary_reader_or_absence: <reader or explicit_absence>
  excluded_or_delayed_readers: []
  handler_or_absence: <handler or explicit_absence>
  proof_or_seal_or_absence: <proof seal oath checksum receipt or explicit_absence>
  price_or_burn_cost_or_absence: <price or explicit_absence>
  future_reader_effect: <effect>

Valid readers include producer license, public table, lawful reader, sponsor gate, correction slot, route asset, quote table, crew lane, broadcast reality, or equivalent.

The lens fails if famous characters, public anger, legal authority, sponsor money, edit control, or route urgency satisfy a slot without being recorded.

5. Hearing assignments are explicit

申诉残留分流听证 must require:

hearing_assignment:
  ledger: storyteller.card.appeal_residue_ledger.v1
  source_result_id: <id>
  residue_id: <id>
  residue_type: <type>
  residue_scope: <scope>
  selected_routing_mode: route_to_license_review | route_to_public_table | route_to_lawful_conversion | route_to_sponsor_release | route_to_route_asset_counterseal | escrow_for_split_metric | retire_or_burn_residue | duplicate_or_no_answer
  primary_reader_or_absence: <reader or explicit_absence>
  excluded_or_delayed_readers: []
  handler_or_absence: <handler or explicit_absence>
  proof_or_seal_or_absence: <proof seal oath checksum receipt or explicit_absence>
  price_or_burn_cost_or_absence: <price or explicit_absence>
  future_reader_effect: <effect>

The lens fails if the player can route residue without source result, residue id, scope, spend limit, primary reader, handler, proof/seal, price, or future effect.

6. Routing branches diverge

At least six branch families must be playable or explicitly blocked by state:

  • route to license review;
  • route to public table;
  • route to lawful conversion;
  • route to sponsor release;
  • route to route asset counterseal;
  • escrow for split metric;
  • retire or burn residue;
  • duplicate or no answer.

Each branch must differ by residue state after, primary reader, cost surface, and future route effect.

7. Success has relief, cost, and future gate

Every non-default routing branch must mutate at least three counters or durable states:

counter_deltas_required:
  relief: at_least_one
  cost: at_least_one
  future_reader_or_route_effect: at_least_one

Accepted cost surfaces include inspection heat, bureau favor debt, public distrust, witness exposure, fan oxygen liability, sponsor stop-loss pressure, contract capture, archive debt, correction slot pressure, quote reprice, route quarantine, handler burden, source ambiguity, future recovery cost, and reality drift.

8. Sponsor release keeps discoverability

Sponsor release, side letter, settlement, or buyout can receive the residue only if discoverability survives.

sponsor_release_required:
  selected_routing_mode: route_to_sponsor_release
  discoverability_after: release_record | confession_scar | producer_license_note | future_reader_surcharge | public_surcharge | equivalent
  hidden_debt_deleted: false

The lens fails if sponsor money turns residue into private clean proof.

9. Split metric and escrow are not universal acceptance

Escrowed or split residue must preserve contradiction.

split_or_escrow_required:
  selected_routing_mode: escrow_for_split_metric
  scoped_readers_min: 1
  universal_acceptance: false
  hidden_debt_state_after: scoped_visible | surcharge_attached | contradiction_pending
  future_effect_any: [split_required, scoped_multi_use_with_surcharge, contradiction_pending]

The lens fails if every future reader accepts the same corrected metric cleanly.

10. Retire or burn residue changes route availability

Burning or retiring residue must be a real choice, not flavor.

retire_or_burn_required:
  selected_routing_mode: retire_or_burn_residue
  residue_state_after: burned | retired | unavailable | equivalent
  relief_any: [duplicate_risk_down, false_clean_hardening_down, future_reader_confusion_down]
  cost_any: [current_route_blocked, future_recovery_cost_up, public_or_sponsor_disappointment_up, substitute_required]
  future_route_effect_any: [substitute_required, recovery_only, route_costlier]

11. Duplicate or scope breach arms default

残留信用复用默认 must fire or be armed when residue is hidden, double-spent, used beyond scope, used without primary reader, flattened into a clean key, spent without discoverability, or split metric is treated as universal acceptance.

Required default evidence:

duplication_default:
  event: storyteller.event.residue_credit_duplication_default.v1
  source_result_id: <id>
  residue_id: <id>
  residue_type: <type>
  residue_scope: <scope>
  breach_kind: double_spend | scope_breach | hidden_primary_reader | clean_key_claim | release_without_discoverability | split_metric_flattened | route_counterseal_overclaimed | equivalent
  first_consumer_or_absence: <reader or explicit_absence>
  duplicate_consumer_or_absence: <reader or explicit_absence>
  capturing_reader: <reader>
  excluded_or_harmed_reader: <reader or claimant>
  default_state_after: residue_captured | false_clean_hardened | correction_credit_spent | lawful_only | public_only | sponsor_only | route_asset_recovery_only | split_required | contradiction_pending | recovery_only | equivalent
  future_route_effect: blocked | costlier | public_table_required | lawful_appeal_required | sponsor_release_required | correction_slot_required | counterseal_required | split_required | producer_license_review | recovery_only | equivalent
  counter_deltas_min: 3

The lens fails if default changes only mood, reputation, money, or prose.

12. Downstream reader consumes routing result

Passing evidence must show at least one downstream route, license, public statement, legal conversion, sponsor gate, correction slot, route asset, quote table, crew lane, or broadcast reality reader consuming the routing result.

Valid consumption examples:

13. Replay evidence is provenance, not trigger logic

Passing evidence must include session id, seed, source result id, residue id, assignment, branch result, counter deltas, and downstream consumption. These values make the replay reproducible; they do not trigger the story by themselves.

Minimal evidence shape:

lens_id: storyteller.lens.appeal_residue_routing.v1
session_id: lens-appeal-residue-routing-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  source_result_present: true
  residue_credit_created: true
  duplicate_or_scope_breach_risk_present: true
  no_fixed_turn_trigger: true
source_result:
  source_result_id: <id>
  source_report_or_ledger_id: <id>
  source_state_after: <state>
residue:
  ledger: storyteller.card.appeal_residue_ledger.v1
  residue_id: <id>
  residue_type: <type>
  residue_scope: <scope>
  spend_limit: <limit>
offered:
  rite: storyteller.rite.appeal_residue_routing_hearing.v1
branch_result:
  selected_routing_mode: <mode>
  primary_reader_or_absence: <reader or explicit_absence>
  excluded_or_delayed_readers: []
  residue_state_after: <state>
  future_route_effect: <effect>
  emitted_event: storyteller.event.residue_credit_duplication_default.v1 | none_if_valid
  counter_deltas:
    relief: []
    cost: []
    future: []
assertions:
  entry_is_state_triggered: true
  source_result_preserved: true
  residue_scope_and_spend_limit_visible: true
  routing_assignments_explicit: true
  branch_outcomes_diverge: true
  no_universal_clean_key: true
  duplicate_or_scope_breach_defaults: true
  downstream_reader_consumes_result: true

Progress metric

appealResidueRoutingProgress = 0..8:

  • 0: no preserved scarred appeal result or no residue credit.
  • 1: source result, residue id, scope, and spend limit are visible.
  • 2: 申诉残留账本 enters play with primary/excluded readers and assignment slots.
  • 3: 申诉残留分流听证 offers explicit routing modes.
  • 4: at least two non-default routing branches mutate different readers and future effects.
  • 5: sponsor release, split/escrow, and burn/retire constraints preserve non-clean outcomes.
  • 6: 残留信用复用默认 fires or is armed on duplicate/scope breach.
  • 7: at least one downstream reader consumes routed, escrowed, burned, captured, or duplicated residue.
  • 8: replay proves at least six branch families including one default and one non-default burn/escrow/sponsor constraint branch.

Failure cases

The lens must fail if any of these are true:

  • entry is fixed-turn, fixed-day, phase, chapter quota, raw count, dashboard, or lens-health driven;
  • no source appeal/counterpressure result is preserved;
  • no residue id, scope, or spend limit exists;
  • residue is treated as clean universal proof;
  • more than one reader spends one-use residue without split or surcharge;
  • the ledger omits primary reader, excluded reader, handler, proof/seal, price, or future effect;
  • sponsor release deletes discoverability;
  • split metric becomes universal acceptance;
  • burn/retirement has no route availability cost;
  • duplication default has no capturing reader and harmed/excluded reader;
  • no downstream route, license, public, lawful, sponsor, correction, asset, quote, crew, or broadcast reader consumes the result.

Non-goals

  • Not a generic reward system.
  • Not a second appeal retry.
  • Not a duplicate of 裁定读者冲突线; this lens observes a limited credit before or while it is consumed.
  • Not a duplicate of 伤痕汇流台线; this lens observes one appeal residue before multiple histories converge.
  • Not governance, dashboard, methodology, or raw count expansion.
  • Not satisfied by adding more pages; only valid when a limited residue credit changes a future reader or route state.