Broadcast Contract Readback Lens / 播出合约回读 Lens

This lens observes whether 播出合约回读线 and 播出合约回读机制 correctly force later routes to consume prior broadcast-slot contract state.

It targets the shallow-green failure after 播出档期合约绑定线: a contract can be scoped correctly once, but later public, lawful, sponsor, archive, editor, memorial, route-asset, or broadcast-reality readers may still reuse that result as if it were clean universal permission.

This lens observes:

It is observed through:

Observable promise

A prior broadcast-slot contract result must be read by the next reader that wants to use it.

A passing implementation proves that later reuse names:

  • prior contract row or explicit absence;
  • prior resolution state;
  • original bound reader;
  • original excluded or harmed reader;
  • original proof/custody anchor;
  • original breach/default actor or explicit absence;
  • current reuse request;
  • current reader;
  • scope delta;
  • selected readback resolution;
  • branch cost or boundary;
  • future route effect.

The lens fails if the game checks only contract exists, binding lens passed, slot was authorized, broadcast aired, archive accepted, sponsor paid, checksum valid, or public remembers.

Entry oracle

A valid implementation opens only from state pressure:

entry_state_required:
  trigger_kind: state_pressure
  prior_contract_row_or_explicit_absence_present: true
  prior_resolution_state_present: true
  original_bound_reader_present_or_explicit_absence: true
  original_excluded_or_harmed_reader_present_or_explicit_absence: true
  original_proof_or_custody_anchor_present_or_explicit_absence: true
  original_breach_default_actor_present_or_explicit_absence: true
  current_reuse_request_present: true
  current_reader_present: true
  scope_delta_present: true
  future_route_or_reader_effect_possible: true
  player_can_read_add_split_rehear_unwind_escrow_block_recover_or_default: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
  no_raw_count_trigger: true
  no_dashboard_or_lens_health_trigger: true

The lens fails if entry comes from a fixed turn number, day/week interval, chapter quota, raw page count, raw card count, dashboard state, lens health, generic legal review, generic PR crisis, or generic upkeep.

Docket oracle

播出合约回读案卷 or equivalent must record:

docket_required:
  prior_contract:
    prior_contract_row: <slot contract id or explicit_absence>
    prior_resolution_state: bound_with_scope | narrowed_reader | split_rights | transferred | sponsor_sold | escrowed | cancelled_with_scar | breached | black_screen_fold | recovery_only | equivalent
    original_requested_use: <use or explicit_absence>
    original_bound_reader: <reader or explicit_absence>
    original_excluded_or_harmed_reader: <reader or explicit_absence>
    original_proof_or_custody_anchor: <anchor or explicit_absence>
    original_breach_default_actor: <actor or explicit_absence>
  current_reuse:
    current_reuse_request: <reuse request>
    current_reader: public | lawful | archive | sponsor | fan_public | editor_checksum | route_asset | memorial_voice | broadcast_reality | equivalent
    scope_delta: inside_scope | narrower_than_scope | reader_mismatch | proof_mismatch | excluded_reader_returns | transferred_claimant_uses | escrow_spent_early | breached_row_reused | blackout_fold_reopened | recovery_only_attempt | equivalent
  outcome:
    readback_state: pending | accepted_inside_scope | accepted_with_addendum | split_required | proof_rehearing_required | claimant_unwind_required | escrow_required | blocked | default_armed | equivalent
    future_route_effect: accepted_with_scope | costlier | split_canon | contradiction_pending | sponsor_only | lawful_only | public_only | blocked | hostile | recovery_only | equivalent

The lens fails if the docket omits the old reader, old harmed reader, anchor, current reader, mismatch, or future effect.

Audit oracle

播出合约回读审计 or equivalent must require explicit assignments:

assignment_required:
  docket: storyteller.card.broadcast_contract_readback_docket.v1
  prior_contract_row: <slot contract id or explicit_absence>
  prior_resolution_state: <state>
  original_bound_reader: <reader or explicit_absence>
  original_excluded_or_harmed_reader: <reader or explicit_absence>
  original_proof_or_custody_anchor: <anchor or explicit_absence>
  original_breach_default_actor: <actor or explicit_absence>
  current_reuse_request: <reuse>
  current_reader: <reader>
  scope_delta: <delta>
  handler_or_absence: <handler or explicit_absence>
  proof_bridge_or_absence: <proof or explicit_absence>
  selected_resolution: read_inside_scope | add_boundary_and_reuse | split_readers | rehear_proof | unwind_claimant_capture | escrow_block_or_recover | spend_mismatch_default
  accepted_cost_surface_or_absence: <cost or explicit_absence>
  future_route_effect: <effect>

The lens fails if a later reader can consume the old slot without handler/proof/cost decisions or explicit absence.

Branch divergence oracle

A satisfying implementation must prove at least five branch families plus one default or blocked state.

Branch familyRequired reliefRequired costRequired future effect
Read inside scopeold scope is honored and route remains legibleboundary remains visible or excluded reader pressure risesaccepted-with-scope or costlier
Add boundary and reusenearby reader can consume after addendumarchive debt, lawful annex, sponsor release, public note, or inspection heatreader-limited or costlier
Split readersincompatible readers remain playablecontradiction, handler burden, correction pressure, or source ambiguitysplit-canon or contradiction-pending
Rehear prooffalse proof transfer is blockedroute delay, proof debt, archive debt, or inspection heatblocked-until-proof or recovery-only-until-hearing
Unwind claimant capturesponsor/claimant capture is named or paidcontract capture, resentment, sponsor heat, future recovery costsponsor-only, captured, or recovery-only
Escrow/block/recoverunsafe reuse is blockedblack-screen pressure, route delay, public distrust, recovery costblocked, hostile, or recovery-only
Spend mismatch defaultlater reader consumes old row as cleanfalse clean claim and hostile actorcaptured, contradiction-pending, blocked, hostile, or recovery-only

No branch may produce clean acceptance across public, lawful, sponsor, archive, editor, fan, memorial, route-asset, and broadcast-reality readers.

Branch-specific assertions

Read inside scope

selected_branch: read_inside_scope
readback_state_after: accepted_inside_scope
relief_any: [slot_authority_clarity_up, false_clean_slot_use_down, route_legibility_up]
cost_any: [boundary_note_required, excluded_reader_pressure_up, future_route_cost_up]
future_effect_any: [accepted_with_scope, costlier]
forbidden: [old_contract_becomes_universal_license]

Add boundary and reuse

selected_branch: add_boundary_and_reuse
readback_state_after: accepted_with_addendum
relief_any: [route_unblocked_with_scar, legality_up, public_receipt_legitimacy_up]
cost_any: [archive_debt_up, inspection_heat_up, sponsor_pressure_up, public_distrust_up]
future_effect_any: [addendum_required, lawful_only, public_only, sponsor_only, costlier]
forbidden: [addendum_as_free_cleanup]

Split readers

selected_branch: split_readers
readback_state_after: split_required
relief_any: [one_route_unblocked, private_capture_blocked, contradiction_named]
cost_any: [handler_burden_up, source_ambiguity_up, correction_pressure_up]
future_effect_any: [split_canon, contradiction_pending, public_audit_required, lawful_addendum_required]
forbidden: [split_terms_as_universal_acceptance]

Rehear proof

selected_branch: rehear_proof
readback_state_after: proof_rehearing_required
relief_any: [false_proof_blocked, custody_integrity_up]
cost_any: [route_delay_up, archive_debt_up, inspection_heat_up]
future_effect_any: [blocked_until_proof, recovery_only_until_hearing, costlier]
forbidden: [proof_anchor_travels_silently]

Unwind claimant capture

selected_branch: unwind_claimant_capture
readback_state_after: claimant_unwind_required
relief_any: [public_route_can_be_reopened, capture_named, sponsor_clause_visible]
cost_any: [contract_capture_up_or_paid, sponsor_stop_loss_pressure_up, fan_resentment_up, future_recovery_cost_up]
future_effect_any: [sponsor_only, captured_until_unwind, recovery_only, costlier]
forbidden: [sponsor_or_claimant_transfer_as_neutral_reality]

Escrow, block, or recover

selected_branch: escrow_block_or_recover
readback_state_after: escrow_required | blocked | default_armed
relief_any: [unsafe_reuse_blocked, false_clean_slot_use_down, source_trace_preserved]
cost_any: [route_delay_up, black_screen_pressure_up, public_distrust_up, future_recovery_cost_up]
future_effect_any: [blocked, hostile, contradiction_pending, recovery_only]
forbidden: [escrow_breach_blackout_or_recovery_row_as_clean_unlock]

Scope readback default

selected_branch: spend_mismatch_default
event_seen_or_armed: storyteller.event.scope_readback_default.v1
false_clean_claim_created_any:
  - old_public_scope_was_lawful_proof
  - sponsor_sold_slot_was_neutral_memory
  - split_rights_were_universal_agreement
  - escrowed_row_was_ready_to_air
  - black_screen_fold_left_no_audience_scar
  - recovery_only_row_was_clean_unlock
future_effect_any:
  - captured
  - blocked
  - hostile
  - contradiction_pending
  - split_canon
  - sponsor_only
  - lawful_only
  - public_only
  - recovery_only

Future-reader oracle

The content is not complete until at least one later route, proof object, package, public receipt, lawful annex, sponsor release, archive release, correction slot, route asset bridge, memorial replay, edit checksum, blackout reopening, or broadcast-reality check consumes readback_state_after.

Passing future effects include:

  • accepted_with_scope;
  • addendum_required;
  • split_canon;
  • contradiction_pending;
  • blocked_until_proof;
  • captured_until_unwind;
  • sponsor_only;
  • lawful_only;
  • public_only;
  • blocked;
  • hostile;
  • recovery_only.

Oracle assertions

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

  1. Primary links exist — the lens has populated observes and observed_through arrays pointing to concrete Storyteller pages.
  2. Entry is state-driven — no fixed turn, day, week, chapter quota, raw count, dashboard, or lens-health trigger.
  3. Prior state is visible — prior contract row, resolution state, original reader, excluded/harmed reader, proof anchor, and breach actor are available or explicitly absent.
  4. Current reuse is visible — current reuse request, current reader, scope delta, and future effect are available.
  5. Docket compares old and new — the card does not merely restate the old contract; it names the mismatch or inside-scope relation.
  6. Audit is assignable — the rite requires handler/proof/cost decisions or explicit absence.
  7. Branches diverge — read, add boundary, split, rehear proof, unwind capture, escrow/block/recover, and default cannot collapse into one result.
  8. Success has cost — every non-default success leaves boundary, addendum, split term, proof rehearing, debt, delay, or recovery hook.
  9. Default is durable — invalid reuse fires or arms 范围回读默认 with false clean claim, harmed reader, default actor, and future scar.
  10. No universal contract reuse — no prior slot result can be consumed cleanly by all future readers.

Progress metric

broadcastContractReadbackProgress = 0..8:

  • 0: no prior contract state or no current reuse request.
  • 1: prior contract row and prior resolution state are visible.
  • 2: original bound reader, excluded/harmed reader, and proof/custody anchor are visible or explicitly absent.
  • 3: current reader, reuse request, and scope delta are visible.
  • 4: 播出合约回读案卷 or equivalent enters play.
  • 5: 播出合约回读审计 or equivalent offers at least three resolution choices.
  • 6: at least three branch families produce non-equivalent reader states and counter deltas.
  • 7: 范围回读默认 or equivalent fires/defaults on invalid reuse.
  • 8: at least five branch families are proven with replay/session evidence, including one split or proof-rehearing branch and one default or recovery-only branch.

Evidence shape

lens_id: storyteller.lens.broadcast_contract_readback.v1
session_id: lens-broadcast-contract-readback-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  prior_contract_row_or_explicit_absence_present: true
  prior_resolution_state_present: true
  original_bound_reader_present_or_explicit_absence: true
  original_excluded_or_harmed_reader_present_or_explicit_absence: true
  original_proof_or_custody_anchor_present_or_explicit_absence: true
  original_breach_default_actor_present_or_explicit_absence: true
  current_reuse_request_present: true
  current_reader_present: true
  scope_delta_present: true
  no_fixed_turn_trigger: true
active_objects:
  docket: storyteller.card.broadcast_contract_readback_docket.v1
  rite: storyteller.rite.broadcast_contract_readback_audit.v1
offered_choices:
  - read_inside_scope
  - add_boundary_and_reuse
  - split_readers
  - rehear_proof
  - unwind_claimant_capture
  - escrow_block_or_recover
  - spend_mismatch_default
branch_runs:
  valid_branch:
    selected_response: read_inside_scope | add_boundary_and_reuse | split_readers | rehear_proof | unwind_claimant_capture | escrow_block_or_recover
    prior_resolution_state: <state>
    current_reader: <reader>
    scope_delta: <delta>
    readback_state_after: <state>
    future_route_effect: <effect>
    counter_deltas:
      relief: []
      cost: []
      future: []
  default_branch:
    event_seen_or_armed: storyteller.event.scope_readback_default.v1
    scope_delta: <delta>
    false_clean_claim_created: <claim>
    harmed_reader_after: <reader state>
    default_actor_after: <actor>
    future_route_effect: captured | blocked | hostile | contradiction_pending | recovery_only | equivalent
assertions:
  - primary_links_exist
  - entry_is_state_triggered_from_prior_contract_and_current_reuse
  - prior_resolution_original_reader_excluded_reader_anchor_and_breach_actor_are_visible
  - current_reader_scope_delta_and_future_route_effect_are_visible
  - docket_records_prior_state_and_current_mismatch
  - audit_requires_handler_proof_bridge_cost_and_selected_resolution
  - branch_outcomes_diverge_by_reader_state_route_state_cost_and_future_effect
  - success_has_cost_or_boundary
  - default_records_false_clean_claim_harmed_reader_default_actor_and_future_scar
  - no_prior_contract_result_becomes_clean_universal_authority

Non-goals

  • Not a governance checklist.
  • Not a dashboard-only evidence spec.
  • Not a turn-count, day-count, chapter-quota, or raw-count trigger.
  • Not a generic legal audit.
  • Not a duplicate of broadcast-slot binding.
  • Not satisfied by page existence or earlier lens satisfaction.
  • Not valid if a prior contract result can be reused by every future reader as clean universal reality.