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.
Primary observation link
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: trueThe 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: 3The 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: trueReplay 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_triggerFailure 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.