On-Screen Slot Readback Lens / 上屏槽位回读 Lens

This lens observes whether 上屏槽位回读线 turns 上屏仪式 into an executable final-air contract.

The passing implementation proves that a broadcast route tag is not cleanly true just because the show aired. The final version must expose its ritual slot rows and make future play consume the resulting state.

Observable promise

A passing implementation must show:

  • source schedule contract or explicit absence;
  • intended final broadcast version;
  • slot rows and assigned objects;
  • claimed route tag and closure;
  • validation state for each meaningful row;
  • harmed reader if a row is overcredited;
  • selected readback posture;
  • ritual state after;
  • route tag after;
  • future reader or route effect;
  • durable default when hidden or invalid slots are closed as clean.

The lens fails if the game records only aired, broadcast complete, route tag, ending unlocked, slot count met, or quality score.

Entry oracle

entry_state_required:
  trigger_kind: state_pressure
  final_broadcast_or_reverse_airing_ready: true
  source_schedule_contract_present_or_explicit_absence: true
  intended_final_version_visible: true
  slot_rows_visible: true
  claimed_route_tag_visible: true
  at_least_one_slot_validation_contested_or_costed: true
  future_reader_consumes_ritual_state: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
  no_raw_slot_count_trigger: true
  no_dashboard_or_lens_health_trigger: true

The lens must fail if entry is driven by fixed turn number, day/week interval, chapter quota, raw slot count, raw prep count, dashboard state, lens health, or generic premiere age.

Ledger oracle

On-Screen Slot Readback Ledger or equivalent must record:

docket_required:
  source_schedule_contract:
    source_contract_id: <stable contract id or explicit_absence>
    intended_final_version: <version id or explicit_absence>
    slot_authority_state: scoped | contested | split | escrowed | absent | equivalent
  ritual_context:
    claimed_route_tag: company | intimacy | liquidation | resistance | chaos | public_only | lawful_only | sponsor_captured | reverse_air | blackout_fold | equivalent
    claimed_closure: complete_broadcast | partial_broadcast | low_quality_broadcast | delayed | folded | reverse_airing | equivalent
    future_reader_or_route: <future reader route rite ending or explicit_absence>
  slot_rows:
    - slot_kind: lead_slot | object_slot | scene_slot | narrative_slot | material_slot | sacrifice_slot | ending_slot | reverse_air_slot | blackout_slot | equivalent
      assigned_object: <character card proof scene route asset sacrifice ending or explicit_absence>
      required_right_or_proof: <right proof support or explicit_absence>
      reader_scope: <reader or explicit_absence>
      validation_state: valid | scoped | missing | stale | incompatible | overbroad | unpaid | substituted | quarantined | defaulted | equivalent
      harmed_reader_if_overcredited: <reader or explicit_absence>
      future_effect: <effect>
  selected_posture: certify_slot_package | narrow_slot_scope | substitute_slot | split_route_tag | attach_sacrifice_cost | delay_or_fold | false_slot_closure_default
  ritual_state_after: <state>
  route_tag_after: <route tag after readback>
  future_reader_or_route_effect: <effect>

Rite oracle

On-Screen Ritual Readback or equivalent must expose:

  • certify_slot_package
  • narrow_slot_scope
  • substitute_slot
  • split_route_tag
  • attach_sacrifice_cost
  • delay_or_fold
  • false_slot_closure_default

Each branch must include relief_any, cost_any, and future_effect_any.

Default oracle

False Slot Closure Default must record:

false_slot_closure_default:
  false_closure_claim:
    claimed_route_tag: <tag>
    claimed_closure: <closure>
    closing_reader: <reader>
  hidden_or_invalid_slot:
    slot_kind: <slot kind>
    assigned_object_or_absence: <object or explicit_absence>
    validation_failure: missing | stale | incompatible | overbroad | unpaid | false_substitution | proof_missing | reader_scope_mismatch | equivalent
  captured_route_tag:
    route_tag_after: false_company | false_intimacy | false_liquidation | false_resistance | false_clean_chaos | sponsor_captured | blackout_fold | recovery_only | equivalent
    harmed_reader_or_absence: <reader or explicit_absence>
  aftermath:
    ritual_state_after: false_closure | captured | blocked | hostile | contradiction_pending | recovery_only | equivalent
    future_reader_effect: blocked | costlier | hostile | addendum_required | correction_required | ending_scar_required | recovery_only | equivalent
    counter_deltas_min: 3

The default fails if it is only a quality warning, morale loss, or generic drift tick.

No Universal Route Tag

No branch may convert hidden or invalid slot rows into a clean universal route tag.

Required evidence:

no_universal_route_tag:
  slot_rows_preserved: true
  at_least_one_reader_narrowed_or_costed_when_slot_contested: true
  route_tag_after_not_universal_clean_when_input_invalid: true
  future_reader_effect_not_clean_universal: true

Progress metric

  • 0: no final-air slot readback surface.
  • 1: storyline, ledger, rite, event, lens, and sibling binding exist.
  • 2: entry requires state pressure from final-air readiness and visible slot rows.
  • 3: ledger records source contract, slot rows, validation state, route tag, and future reader.
  • 4: readback branches diverge by scope, cost, route tag, and future effect.
  • 5: false slot closure default records hidden or invalid slot and mutates future play.
  • 6: no invalid slot produces universal clean route tag.

Replay evidence expectation

lens_id: storyteller.lens.on_screen_slot_readback.v1
session_id: lens-on-screen-slot-readback-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  final_broadcast_or_reverse_airing_ready: true
  slot_rows_visible: true
  no_fixed_turn_trigger: true
offered:
  card: storyteller.card.on_screen_slot_readback_ledger.v1
  rite: storyteller.rite.on_screen_ritual_readback.v1
branch_runs:
  scoped_success:
    selected_posture: certify_slot_package | narrow_slot_scope | substitute_slot | split_route_tag | attach_sacrifice_cost | delay_or_fold
    ritual_state_after: <state>
    route_tag_after: <tag>
    counter_deltas:
      relief: []
      cost: []
      future: []
  default:
    selected_posture: false_slot_closure_default
    event_seen_or_armed: storyteller.event.false_slot_closure_default.v1

Non-goals

  • Not a schedule contract lens.
  • Not a mirror-right boundary duplicate.
  • Not a rehearsal contamination lens.
  • Not a quality-score or UI checklist.
  • Not valid if final broadcast closure hides slot-row state.