Narration Priority Stack Lens / 叙述优先栈 Lens

This lens observes whether 叙述优先栈线 and 叙述优先栈机制 correctly handle conflicts where multiple armed claimants can make the same version real by narrating first.

The lens exists because the current mesh can already create default narrators, leak/preemption actors, dormant breach narrators, counter-broadcast carriers, correction defaults, cutroom defaults, and route-asset claimants. A satisfying implementation must prove that these voices collide over a shared target version instead of firing as isolated flavor.

This lens observes:

It is observed through:

Observable promise

A passing replay must show that at least two active narration claims target the same version, that each claim has a claimant and priority basis, that proof/channel or explicit absence is named, that excluded claimants are visible, and that the player’s resolution changes both current pressure and future route state.

The lens must fail if a default narrator, leak, injunction, countercopy, source release, public receipt, refusal, archive seal, or blackout fold becomes reality without shared-target priority state.

Entry oracle

Valid entry is state-driven:

entry_state:
  active_narration_claims_min: 2
  target_version_shared: true
  at_least_one_claim_can_preempt: true
  excluded_claimant_can_retaliate: true
  proof_or_channel_or_absence_visible: true
  future_route_effect_possible: true
  no_fixed_turn_trigger: true

The lens fails if the surface opens from a fixed turn number, day interval, chapter quota, content-count target, generic upkeep phase, or lens-health state.

Required data surfaces

Stack card

叙述优先栈 or equivalent must expose each row with:

  • source surface;
  • target version;
  • claimant;
  • narration right;
  • priority basis;
  • proof anchor or explicit absence;
  • channel or explicit absence;
  • excluded claimants;
  • claim state;
  • whether the claim wins if ignored;
  • future route effect.

The lens fails if the card only stores a winning narrator or numeric priority without source, target version, priority basis, proof/channel, excluded claimant, and future route effect.

Hearing rite

叙述优先听证 or equivalent must require:

  • target version;
  • competing claims;
  • selected claim or explicit no-voice branch;
  • countered claims;
  • excluded claimants;
  • proof anchor or absence;
  • channel or absence;
  • priority basis;
  • accepted finite cost;
  • resulting future route effect.

The lens fails if the player can seat every claimant safely, if proof/channel absence is hidden, or if no claimant is harmed by the selected priority.

Capture event

敌性叙述夺取 or equivalent must fire or become default-ready when a claim wins because the player omitted priority resolution, hid excluded claimants, lacked proof/channel, broke split terms, refused cost, or let preemption expire uncontested.

The event must mutate later route access or version state.

Required claim states

A satisfying implementation must expose durable states equivalent to at least seven of:

  • claim_pending
  • claim_seated
  • claim_countered
  • claim_split
  • claim_escrowed
  • claim_preempted
  • claim_hostile
  • claim_captured
  • claim_blackout_fold
  • claim_recovery_only

Branch divergence oracle

At least four branch families must be playable and non-equivalent.

Branch A — Seat one narrator

Expected evidence:

selected_response: seat_one_narrator
selected_claim: <claim id>
excluded_claimants_min: 1
claim_state_after: claim_seated
relief_present: true
cost_present: true
future_route_effect_any: [protected, costlier, captured, public_only, lawful_only, recovery_only]

Branch B — Counterclaim before first voice

Expected evidence:

selected_response: counterclaim
countered_claim: <claim id>
claim_state_after_any: [claim_countered, claim_preempted]
counterweight_any: [proof_anchor, caller, checksum, public_receipt, legal_seal, sponsor_escrow, handler, route_asset]
future_route_effect_any: [costlier, split_canon, appeal_required, public_audit_required]

Branch C — Split narration window

Expected evidence:

selected_response: split_narration_window
voices_min: 2
terms_present: true
claim_state_after: claim_split
future_route_effect_any: [split_canon, contradiction_pending, public_audit_required, lawful_appeal_required]

Branch D — Escrow proof and delay

Expected evidence:

selected_response: escrow_and_delay
claim_state_after: claim_escrowed
escrow_any: [proof_anchor, edit_checksum, legal_seal, public_receipt, sponsor_escrow, route_asset, blackout_warrant]
relief_any: [hostile_capture_delayed, false_owner_risk_down]
cost_any: [slot_pressure_up, insolvency_row_created, public_delay_up, inspection_heat_up]

Branch E — Blackout fold

Expected evidence:

selected_response: blackout_fold
claim_state_after: claim_blackout_fold
relief_any: [false_clean_broadcast_blocked, source_proof_preserved]
cost_any: [black_screen_pressure_up, audience_stability_down, ending_scar_pressure_up]
future_route_effect_any: [recovery_only, blackout_pressure_up, contradiction_pending]

Branch F — Hostile capture

Expected evidence:

selected_response: no_valid_resolution
event_seen: storyteller.event.hostile_narration_capture.v1
captured_version_state_any: [sponsor_captured, lawful_only, public_only, pirate_only, source_captured, false_owner, blackout_fold, split_canon, contradiction_pending, recovery_only]
claim_state_after_any: [claim_hostile, claim_captured, claim_recovery_only]
future_route_effect_any: [captured, blocked, hostile, public_only, lawful_only, recovery_only]

Oracle assertions

A binding check should fail unless all assertions below are true.

  1. Primary links existobserves and observed_through arrays point to concrete Storyteller pages.
  2. Entry is state-driven — no turn-count, day-count, chapter-quota, content-count, or lens-health trigger.
  3. Shared target exists — at least two claims target the same version, proof object, route asset, correction row, public record, or lawful record.
  4. Competing claimants are visible — each claim names claimant and narration right.
  5. Priority basis is visible — first notice, unpaid creditor, proof custody, channel access, legal seal, fan receipt, route asset custody, blackout authority, or explicit absence is recorded.
  6. Proof/channel is named — proof anchor and channel exist or are explicitly absent.
  7. Excluded claimants are visible — at least one claimant is late, countered, blocked, or harmed by the selected priority.
  8. Branch outcomes diverge — seating, counterclaim, split window, escrow/delay, blackout fold, and hostile capture cannot collapse into one result.
  9. Hostile capture is durable — invalid or omitted resolution fires/defaults into a captured version state and future route effect.
  10. At least three deltas exist — every resolved branch mutates at least three counters or durable states, including relief and cost.
  11. Future route mutates — result changes later route availability, difficulty, claimant posture, proof custody, correction/cutroom access, ending eligibility, blackout pressure, or recovery-only state.
  12. No safe universal seating — the implementation does not allow every claimant to speak first safely or erase contradiction for free.

Progress metric

narrationPriorityStackProgress = 0..8:

  • 0: no narration-priority state.
  • 1: at least two active claims enter 叙述优先栈.
  • 2: target version, claimant, narration right, and priority basis are visible for each claim.
  • 3: proof/channel or explicit absence and excluded claimants are visible.
  • 4: 叙述优先听证 or equivalent offers at least three resolution choices.
  • 5: selected branch mutates at least three counters/states with relief and cost.
  • 6: at least three branch families produce non-equivalent future route states.
  • 7: 敌性叙述夺取 or equivalent fires/defaults on omission, broken split, missing proof/channel, or preemption expiry.
  • 8: at least four branch families are proven with replay/session evidence, including one split or escrow branch and one hostile capture branch.

Evidence shape

lens_id: storyteller.lens.narration_priority_stack.v1
session_id: lens-narration-priority-stack-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  active_narration_claims:
    - claim_id: <claim a>
      source_surface: <surface>
      target_version: <version>
      claimant: <claimant>
      narration_right: <right>
      priority_basis: <basis>
      proof_anchor_or_absence: <proof or explicit_absence>
      channel_or_absence: <channel or explicit_absence>
    - claim_id: <claim b>
      source_surface: <surface>
      target_version: <same version>
      claimant: <claimant>
      narration_right: <right>
      priority_basis: <basis>
      proof_anchor_or_absence: <proof or explicit_absence>
      channel_or_absence: <channel or explicit_absence>
  target_version_shared: true
  no_fixed_turn_trigger: true
offered_choices:
  - card.narration_priority_stack
  - rite.narration_priority_hearing
  - seat_one_narrator
  - counterclaim
  - split_narration_window
  - escrow_and_delay
  - blackout_fold
  - no_valid_resolution
branch_runs:
  seat_one_narrator:
    selected_claim: <claim>
    excluded_claimants: []
    state_after: <state>
    future_route_effect: <effect>
    counter_deltas: {}
  counterclaim:
    countered_claim: <claim>
    counterweight: <proof/channel/caller>
    state_after: <state>
    future_route_effect: <effect>
    counter_deltas: {}
  split_narration_window:
    voices: []
    terms: <terms>
    state_after: claim_split
    future_route_effect: split_canon
    counter_deltas: {}
  escrow_and_delay:
    escrow: <object>
    state_after: claim_escrowed
    future_route_effect: <effect>
    counter_deltas: {}
  hostile_capture:
    event: storyteller.event.hostile_narration_capture.v1
    captured_version_state: <state>
    future_route_effect: <effect>
    counter_deltas: {}
assertions:
  - primary_links_exist
  - state_triggered_entry
  - shared_target_version
  - competing_claimants_visible
  - priority_basis_visible
  - proof_channel_or_absence_named
  - excluded_claimants_visible
  - branch_outcomes_diverge
  - hostile_capture_durable
  - future_route_effect_mutates

Non-goals

  • Not a governance checklist.
  • Not a dashboard-only evidence spec.
  • Not a turn-count or day-count escalation.
  • Not a generic initiative order.
  • Not a debate minigame.
  • Not a raw content-count expansion.
  • Not a safe universal announcement system.
  • Not satisfied by page existence; proof must come from shared-target claims, priority basis, assignable hearing choice, branch divergence, hostile capture/default, counter deltas, and future route mutation.