Lou Ke Caption Switcher Lens / 楼刻字幕切换员 Lens

This lens observes whether Caption Switcher, 楼刻字幕切换员线, and 字幕切换键 correctly turn the caption-operator slot in 字幕证词羁押线 into playable character state.

The targeted gap is precise: a caption lens can require caption_operator_or_absence_visible and still pass with a faceless operator field. This lens requires the operator to become a person-state with recruit, miss, suppression, capture, hostile, route-asset, and future-reader consequences.

Executable evidence boundary

Page links and Lou Ke-shaped flags are insufficient. The strict character overlay Lou Ke Caption Switch Hearing requires the actual storyteller.card.lou_ke_caption_switcher.v1 person card plus all ten distinct evidence/support cards, for eleven exact in-hand assignments total. The reusable parent Caption Witness hearing remains available for generic rows and explicit operator absence; the overlay does not replace or narrow it.

Choice index 0 is the recruit proof and must end with route_asset.lou_ke_caption_switcher, visible route-asset limits, relief, cost, and future mutation. Choice index 7 is the suppress/default proof and must arm storyteller.event.lou_ke_false_caption_default.v1 by setting exactly lou_ke.default_pending, storyteller.event.lou_ke_false_caption_default.v1.armed, and future_route.lou_ke_recovery_pending. The event must really resolve, clear all three pending flags, leave a hostile or recovery-only Lou Ke state, and retain no clean route asset.

Passing durable evidence is:

  • lens/replays/lou-ke-caption-switcher.recruit.replay.json;
  • lens/replays/lou-ke-caption-switcher.hostile-default.replay.json;
  • lens/storyteller-lou-ke-caption-switcher.runtime.test.ts.

This lens observes the character, character storyline, switchboard card, existing caption mechanism, existing caption ledger, existing caption hearing, false-caption default, access-caption reliance/class lines, and durable broadcast/route systems listed in front matter.

It is observed through:

Must pass

1. Entry is state-triggered

entry_state_required:
  trigger_kind: state_pressure
  source_surface_present: true
  caption_layer_present_or_explicit_absence: true
  caption_claim_changes_meaning_or_access: true
  caption_operator_or_absence_visible: true
  competing_reader_or_pressure_present: true
  future_reader_or_route_consumes_caption: true
  lou_ke_state_or_absence_visible: true
  player_can_protect_recruit_retain_sponsor_split_escrow_publish_suppress_or_default: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
  no_raw_caption_count_trigger: true
  no_dashboard_or_lens_health_trigger: true

The lens fails if entry comes from fixed chronology, raw caption error count, dashboard state, lens health, generic accessibility-complete state, or relationship score.

2. Caption row and operator are concrete

字幕证词账本 and 字幕切换键 or equivalents must expose:

caption_operator_required:
  character: storyteller.character.lou_ke_caption_switcher.v1 | equivalent | explicit_absence
  operator_state_before: unseen_caption_switcher | switchboard_visible | protected_access_operator | recruited_caption_switcher | retained_one_caption_run | sponsor_captured_switcher | archive_escrow_switcher | fan_relay_switcher | split_track_operator | suppressed_operator | hostile_caption_witness | missed_by_autoclean | recovery_only_operator | equivalent
  source_surface: <source surface>
  caption_layer: official_live | access_caption | translator_overlay | sponsor_safe | editor_note | archive_transcript | fan_translation | pirate_hardsub | delayed_correction | explicit_absence | equivalent
  caption_claim: clarifies | narrows | softens | reverses | confesses | consents | refuses | apologizes | warrants | anonymizes | mistranslates | false_clean | equivalent
  harmed_or_excluded_reader: access_public | language_public | source_voice_holder | sponsor | inspector | fan_public | archive_reader | artist_boundary | route_asset | explicit_absence | equivalent
  pressure_actor: sponsor | inspector | editor | historian | fan_delegate | artist_boundary | relay | management | false_caption_claimant | equivalent
  future_reader_or_route: <reader route or route asset id>

The lens fails if the operator is only subtitle system, caption done, access complete, translator, auto-caption, or staff with no state.

3. Switchboard key records routing posture

字幕切换键 must record selected posture separately from caption text:

switchboard_key_required:
  selected_posture: protect_access | recruit_operator | retain_one_run | sponsor_safe_switch | split_tracks | archive_escrow | fan_relay_publish | suppress_or_autoclean | equivalent
  operator_state_before: <state>
  operator_state_after_expected: <state>
  caption_state_after_expected: <state>
  harmed_reader_state_after_expected: <state or explicit_absence>
  future_reader_effect_expected: <effect>

A caption can be accurate and still fail this lens if routing posture, operator state, harmed reader, and future effect are missing.

4. Branches diverge

A satisfying implementation must expose these branch families or block unavailable families with state reasons:

  • protect_access_operator;
  • recruit_switcher;
  • retain_one_run;
  • sponsor_safe_switch;
  • split_language_tracks;
  • archive_escrow;
  • publish_fan_relay;
  • suppress_or_autoclean;
  • false_caption_default.

Branches must differ by operator state, caption state, harmed reader state, counter deltas, and future reader or route effect.

Branch assertions

branch_assertions:
  protect_access_operator:
    lou_ke_state_after: protected_access_operator
    relief_any: [access_public_trust_up, caption_operator_legibility_up, false_caption_witness_risk_down]
    cost_any: [handler_burden_up, caption_operator_exposure_up, sponsor_copy_pressure_up]
    future_effect_any: [access_route_protected_with_cost]
  recruit_switcher:
    lou_ke_state_after: recruited_caption_switcher
    route_asset_unlock: route_asset.lou_ke_caption_switcher
    relief_any: [split_caption_row_preserved, caption_legibility_up]
    cost_any: [payroll_leak_up, inspection_heat_up, route_asset_pressure_up]
    future_effect_any: [one_future_split_or_escrow_caption_available_with_cost]
  retain_one_run:
    lou_ke_state_after: retained_one_caption_run
    relief_any: [one_caption_contradiction_contained]
    cost_any: [future_caption_service_costlier, source_rehearing_pressure_up]
    future_effect_any: [follow_up_caption_hearing_required]
  sponsor_safe_switch:
    lou_ke_state_after: sponsor_captured_switcher
    relief_any: [sponsor_copy_pressure_down, slot_pressure_down]
    cost_any: [sponsor_capture_up, public_receipt_distrust_up, access_public_trust_down]
    future_effect_any: [sponsor_only_caption, public_route_costlier]
  split_language_tracks:
    lou_ke_state_after: split_track_operator
    relief_any: [language_publics_separately_served]
    cost_any: [translation_drift_up, editor_debt_up, contradiction_pending]
    future_effect_any: [split_caption_canon]
  archive_escrow:
    lou_ke_state_after: archive_escrow_switcher
    relief_any: [false_caption_witness_risk_down]
    cost_any: [route_delay_up, archive_debt_up, lawful_only_pressure_up]
    future_effect_any: [source_rehearing_required, lawful_only_caption]
  publish_fan_relay:
    lou_ke_state_after: fan_relay_switcher
    relief_any: [private_capture_blocked, public_caption_visibility_up]
    cost_any: [fan_liability_up, relay_custody_risk_up, inspection_heat_up]
    future_effect_any: [public_only_route, lawful_appeal_required]
  suppress_or_autoclean:
    lou_ke_state_after_any: [suppressed_operator, missed_by_autoclean, recovery_only_operator]
    emitted_or_armed_event: storyteller.event.lou_ke_false_caption_default.v1
    cost_any: [false_caption_witness_up, hostile_caption_public_up, future_recovery_cost_up]
    future_effect_any: [blocked, hostile, recovery_only]

Success and default requirements

Every non-default branch must record relief, cost, and future mutation. In the strict character overlay, 楼刻伪字幕默认 must fire or arm when operator state is hidden or the caption is auto-cleaned. The parent 伪字幕证词默认 remains available to generic rows when sponsor-safe wording is treated as public consent, access caption is consumed without operator protection, fan relay is treated as lawful proof, or split language is collapsed into one clean meaning.

Required default payload:

default_required:
  event: storyteller.event.lou_ke_false_caption_default.v1
  caption_row: storyteller.card.caption_witness_ledger.v1
  operator_card: storyteller.card.lou_ke_caption_switcher.v1
  operator_character: storyteller.character.lou_ke_caption_switcher.v1
  operator_state_before: suppressed_operator
  pending_flags: [lou_ke.default_pending, storyteller.event.lou_ke_false_caption_default.v1.armed, future_route.lou_ke_recovery_pending]
  default_narrator: sponsor_caption_export | auto_caption_cleaner | archive_transcript_table | public_recap | access_reliance_gap | management_route_patch | equivalent
  false_caption_claim: <claim>
  harmed_reader_or_absence: <reader or explicit_absence>
  lou_ke_state_after: hostile_caption_witness | missed_by_autoclean | suppressed_operator | recovery_only_operator | equivalent
  future_reader_effect: source_rehearing_required | access_caption_reliance_escalates | caption_correction_slot_required | sponsor_only_caption | public_route_costlier | blocked | recovery_only | equivalent
  counter_deltas_min: 3

The default fails if it changes only mood, relationship value, subtitle accuracy, or generic audience sentiment.

Route asset constraint

Recruiting 楼刻 unlocks a narrow route asset, not a universal cleaner.

route_asset_constraint:
  route_asset: route_asset.lou_ke_caption_switcher
  can_preserve_future_split_caption_row: true
  can_escrow_one_caption_until_source_rehearing: true
  can_prove_operator_chain_for_one_access_caption_reliance_row: true
  cannot_certify_source_truth_alone: true
  cannot_turn_sponsor_safe_caption_into_public_consent: true
  cannot_make_fan_relay_lawful_clean: true
  cannot_merge_split_language_tracks_cleanly: true
  use_has_cost: true

Replay evidence shape

lens_id: storyteller.lens.character.lou_ke_caption_switcher.v1
session_id: lens-lou-ke-caption-switcher-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  source_surface_present: true
  caption_layer_present_or_explicit_absence: true
  caption_claim_changes_meaning_or_access: true
  caption_operator_or_absence_visible: true
  lou_ke_state_or_absence_visible: true
  competing_reader_or_pressure_present: true
  future_reader_or_route_consumes_caption: true
  no_fixed_turn_trigger: true
offered:
  character: storyteller.character.lou_ke_caption_switcher.v1
  person_card: storyteller.card.lou_ke_caption_switcher.v1
  card: storyteller.card.caption_switchboard_key.v1
  ledger: storyteller.card.caption_witness_ledger.v1
  rite: storyteller.rite.lou_ke_caption_switch_hearing.v1
branch_runs:
  constructive_branch:
    selected_posture: protect_access_operator | recruit_switcher | retain_one_run | sponsor_safe_switch | split_language_tracks | archive_escrow | publish_fan_relay
    lou_ke_state_after: <state>
    caption_state_after: <state>
    harmed_reader_after: <reader or explicit_absence>
    future_reader_effect: <effect>
    counter_deltas:
      relief: []
      cost: []
      future: []
  default_branch:
    selected_posture: suppress_or_autoclean | false_caption_default
    event_seen_or_armed: storyteller.event.lou_ke_false_caption_default.v1
    pending_before_event: [lou_ke.default_pending, storyteller.event.lou_ke_false_caption_default.v1.armed, future_route.lou_ke_recovery_pending]
    pending_after_event: []
    lou_ke_state_after: hostile_caption_witness | missed_by_autoclean | suppressed_operator | recovery_only_operator
    future_reader_effect: blocked | hostile | recovery_only | source_rehearing_required | access_caption_reliance_escalates | equivalent
assertions:
  - primary_links_exist
  - entry_is_state_triggered
  - source_caption_operator_harmed_reader_pressure_actor_and_future_reader_are_visible
  - switchboard_key_records_routing_posture
  - branch_outcomes_diverge
  - recruited_switcher_is_narrow_route_asset
  - every_success_has_relief_cost_and_future_effect
  - lou_ke_false_caption_default_is_durable
  - no_universal_clean_caption
  - no_fixed_turn_day_week_raw_count_dashboard_or_lens_health_trigger

Failure cases

This lens fails if 楼刻 is treated as generic subtitle staff, if caption accuracy replaces custody, if access caption becomes a checklist reward, if sponsor-safe wording becomes public consent, if one switchboard state satisfies all readers, if recruit/miss/hostile states do not persist, or if future routes cannot read the operator state.