Caption Witness Custody Lens / 字幕证词羁押 Lens

This lens observes whether 字幕证词羁押线 and 字幕证词羁押机制 make captions playable as custody-bearing proof rather than flavor text.

A passing implementation proves that a caption layer can clarify or distort a source surface, that the caption operator or absence is visible, that at least one reader is harmed or excluded, that a pressure actor tries to benefit, that branches diverge, and that a future route consumes the resulting caption state.

The lens fails if a caption is treated as a clean transcript, a localization task, a sponsor-copy note, or a universal substitute for the source voice.

This lens observes:

It is observed through:

Observable promise

The player must decide who can hold or certify a caption when caption text is the public-facing proof of a contested source.

The result must preserve the source surface, caption text or absence, operator or absence, harmed reader, pressure actor, and future reader. It must also mutate both current pressure and later route access.

Must pass

1. Entry is state-driven

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
  harmed_or_excluded_reader_visible_or_explicit_absence: true
  pressure_actor_present: true
  future_reader_or_route_consumes_caption: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true

The lens fails if entry depends on turn count, day/week interval, chapter quota, content count, dashboard state, or lens health.

2. Source and caption remain distinct

Required evidence:

source_caption_distinction:
  source_surface: <voice lyric gesture silence archive playback sponsor line or equivalent>
  source_holder_or_absence: <holder or explicit_absence>
  source_proof_or_absence: <proof or explicit_absence>
  caption_text_or_absence: <caption text or explicit_absence>
  caption_language_channel: <channel>

The lens fails if the caption silently replaces the source.

3. Caption operator or absence is visible

字幕证词账本 must expose:

caption_operator_surface:
  caption_operator_or_absence: <operator or explicit_absence>
  operator_protection_state: protected | exposed | anonymous | sponsor_bound | inspector_bound | editor_bound | absent | equivalent

The lens fails if the caption is treated as system output with no holder, operator, or explicit absence.

4. Harmed reader and pressure actor are visible

Required evidence:

caption_pressure:
  excluded_or_harmed_reader: deaf_access_public | foreign_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 | fan_relay | management | false_caption_claimant | equivalent

The lens fails if a caption has no beneficiary and no harmed reader.

5. Assignment slots are explicit

字幕证词听证 must require:

assignment:
  selected_row: <caption row id>
  source_surface: <source surface>
  source_holder_or_absence: <holder or explicit_absence>
  source_proof_or_absence: <proof or explicit_absence>
  caption_text_or_absence: <caption text or explicit_absence>
  caption_language_channel: <channel>
  caption_operator_or_absence: <operator or explicit_absence>
  excluded_or_harmed_reader: <reader or explicit_absence>
  pressure_actor: <actor>
  future_reader_or_route: <stable reader or route id>

Generic subtitle approval, legal review, sponsor copy cleanup, or transcript correction cannot satisfy this lens.

6. Branches diverge

A satisfying implementation must expose at least five non-equivalent branch families and one default branch:

  • certify_raw_caption;
  • certify_access_caption;
  • accept_sponsor_safe_caption;
  • split_language_tracks;
  • escrow_archive_caption;
  • publish_fan_relay_overlay;
  • hide_or_autoclean.

Branches must not collapse to the same counter deltas or future route state.

7. Branch assertions

branch_assertions:
  certify_raw_caption:
    state_after: certified_raw
    relief_any: [caption_legibility_up, public_route_clarity_up]
    cost_any: [source_voice_exposure_up, sponsor_copy_pressure_up, inspection_heat_up]
    future_effect_any: [public_route_with_caption_cost, source_rehearing_required]
  certify_access_caption:
    state_after: certified_access
    relief_any: [access_public_trust_up, caption_legibility_up]
    cost_any: [caption_operator_exposure_up, handler_burden_up, artist_boundary_pressure_up]
    future_effect_any: [access_route_protected, source_rehearing_required]
  accept_sponsor_safe_caption:
    state_after: sponsor_safe
    relief_any: [sponsor_copy_pressure_down, immediate_slot_pressure_down]
    cost_any: [sponsor_capture_up, source_ambiguity_up, public_receipt_distrust_up]
    future_effect_any: [sponsor_capture, public_route_costlier, false_caption_default_armed]
  split_language_tracks:
    state_after: split_language
    relief_any: [access_public_trust_up, foreign_language_public_trust_up, private_capture_down]
    cost_any: [translation_drift_up, editor_debt_up, source_ambiguity_up]
    future_effect_any: [split_caption_canon, contradiction_pending]
  escrow_archive_caption:
    state_after: archive_escrowed
    relief_any: [false_caption_risk_down, source_proof_preserved]
    cost_any: [archive_debt_up, route_delay_up, inspection_heat_up]
    future_effect_any: [lawful_only_caption, source_rehearing_required, blocked]
  publish_fan_relay_overlay:
    state_after: fan_relayed
    relief_any: [private_capture_down, public_pressure_up]
    cost_any: [relay_custody_risk_up, fan_liability_up, inspection_heat_up]
    future_effect_any: [public_only_route, lawful_appeal_required, source_rehearing_required]
  hide_or_autoclean:
    state_after_any: [false_caption_witness, hostile_caption_public, recovery_only]
    event_seen_or_armed: storyteller.event.false_caption_witness_default.v1
    cost_any: [false_caption_witness_up, hostile_caption_public_up, future_recovery_cost_up]
    future_effect_any: [hostile, blocked, recovery_only]

8. Every success has cost

No caption branch may create universal clean meaning. Even a correct or access-protective caption must increase exposure, burden, delay, reader split, sponsor pressure, inspection heat, archive debt, edit debt, relay risk, or recovery cost.

9. Future reader consumes caption state

The branch must mutate a future route or reader:

  • public route with caption cost;
  • protected access route;
  • sponsor capture;
  • split caption canon;
  • lawful-only caption;
  • source rehearing required;
  • public-only route;
  • contradiction pending;
  • hostile;
  • blocked;
  • recovery-only.

Flavor-only caption dialogue fails.

10. False caption default is durable

伪字幕证词默认 must fire or become armed when a caption is spent as proof while source, operator, harmed reader, or scope is missing, hidden, or misfiled.

The default must name source surface, caption text or absence, caption channel, operator or absence, false caption claim, harmed reader, default actor, caption state after, and future route effect.

Progress metric

captionWitnessCustodyProgress = 0..8:

  • 0: no caption custody state.
  • 1: caption row exists with source and caption surfaces separated.
  • 2: caption operator or explicit absence is visible.
  • 3: harmed reader, pressure actor, and future reader are visible.
  • 4: hearing rite offers at least three non-equivalent branches.
  • 5: selected branch mutates relief, cost, and future route effect.
  • 6: at least five branch families are implemented.
  • 7: false caption default fires or arms on invalid use.
  • 8: replay proves at least one constructive branch and one false-caption/default branch.

Evidence shape

lens_id: storyteller.lens.caption_witness_custody.v1
session_id: lens-caption-witness-custody-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
  harmed_or_excluded_reader_visible_or_explicit_absence: true
  pressure_actor_present: true
  future_reader_or_route_consumes_caption: true
  no_fixed_turn_trigger: true
branch_runs:
  constructive:
    selected_branch: certify_raw_caption | certify_access_caption | accept_sponsor_safe_caption | split_language_tracks | escrow_archive_caption | publish_fan_relay_overlay
    source_surface: <source>
    caption_language_channel: <channel>
    caption_operator_or_absence: <operator or explicit_absence>
    harmed_reader_after: <reader>
    caption_state_after: <state>
    future_reader_effect: <effect>
    counter_deltas:
      relief: []
      cost: []
      future: []
  default:
    selected_branch: hide_or_autoclean
    event_seen_or_armed: storyteller.event.false_caption_witness_default.v1
    false_caption_claim: <claim>
    caption_state_after: false_caption_witness | hostile_caption_public | recovery_only
    future_reader_effect: <effect>
assertions:
  - primary_links_exist
  - entry_is_state_triggered_by_caption_pressure
  - source_and_caption_are_distinct
  - caption_operator_or_explicit_absence_visible
  - harmed_reader_and_pressure_actor_visible
  - future_reader_consumes_caption_state
  - assignment_slots_are_explicit
  - branch_outcomes_diverge
  - every_success_has_relief_and_cost
  - false_caption_default_is_durable
  - no_universal_clean_caption
  - no_fixed_turn_trigger

Non-goals

  • Not a governance checklist.
  • Not a localization backlog.
  • Not a transcript-redaction duplicate.
  • Not a sponsor-copy duplicate.
  • Not a narration-priority duplicate.
  • Not a fixed-turn, fixed-day, fixed-week, chapter-count, content-count, dashboard-state, or lens-health trigger.
  • Not satisfied by page existence; replay must show source/caption distinction, operator custody, harmed reader, branch divergence, costed success, durable default, and future route consumption.