Caption Witness Ledger / 字幕证词账本

Caption Witness Ledger is the card that carries a caption layer as a contested proof object.

Use it when the audience, archive, sponsor, inspector, editor, artist boundary, access public, foreign-language public, fan translator, or pirate relay can argue that the caption rather than the raw voice is what made the broadcast legible.

The ledger is not a transcript. It records who holds the caption layer, what the caption claims, who is harmed by that reading, and which later route will consume the caption state.

Card promise

A caption row must never collapse source voice and caption meaning into one clean fact.

Minimum row shape:

caption_witness_ledger_row:
  row_id: caption_witness.<stable id>
  source_surface: live_voice | broken_voice | lyric | emergency_announcement | memorial_voice | archive_playback | sign_or_gesture | silence_window | fan_chant | sponsor_line | equivalent
  source_holder_or_absence: <artist archive editor fan witness sponsor inspector or explicit_absence>
  source_proof_or_absence: master_tape | screen_recording | archive_stamp | fan_receipt | editor_checksum | witness_oath | explicit_absence | equivalent
  caption_text_or_absence: <caption text or explicit_absence>
  caption_language_channel: official_live | access_caption | translator_overlay | sponsor_safe | editor_note | archive_transcript | fan_translation | pirate_hardsub | delayed_correction | explicit_absence | equivalent
  caption_operator_or_absence: <operator id or explicit_absence>
  operator_protection_state: protected | exposed | anonymous | sponsor_bound | inspector_bound | editor_bound | absent | equivalent
  caption_claim: clarifies | narrows | softens | reverses | confesses | consents | refuses | apologizes | warrants | anonymizes | mistranslates | false_clean | equivalent
  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 | pirate_relay | management | false_caption_claimant | equivalent
  selected_custody_response: pending | certify_raw_caption | certify_access_caption | accept_sponsor_safe_caption | split_language_tracks | escrow_archive_caption | publish_fan_hardsub | suppress_or_autoclean | equivalent
  caption_state_after: pending | certified_raw | certified_access | sponsor_safe | split_language | archive_escrowed | fan_hardsubbed | source_rehearing_required | false_caption_witness | hostile_caption_public | recovery_only | equivalent
  future_reader_or_route: <stable reader or route id>
  future_reader_effect: public_route_with_caption_cost | lawful_only_caption | access_route_protected | sponsor_capture | split_caption_canon | source_rehearing_required | contradiction_pending | blocked | hostile | recovery_only | equivalent

Required visible absences

The ledger must explicitly record absence instead of hiding it:

  • no source proof;
  • no caption operator;
  • no access-channel holder;
  • no source-holder review;
  • no translator accountability;
  • no sponsor-copy boundary;
  • no future reader.

A missing operator or proof can still be playable, but only as risk.

Example rows

Row A — Panic line becomes apology

row_id: caption_witness.panic_line_apology
source_surface: broken_voice
source_holder_or_absence: artist
source_proof_or_absence: screen_recording
caption_text_or_absence: "I apologize for the delay."
caption_language_channel: sponsor_safe
caption_operator_or_absence: sponsor_caption_desk
operator_protection_state: sponsor_bound
caption_claim: apologizes
excluded_or_harmed_reader: source_voice_holder
pressure_actor: sponsor
selected_custody_response: pending
caption_state_after: pending
future_reader_or_route: public_contrition_route
future_reader_effect: sponsor_capture

Row B — Access caption preserves refusal

row_id: caption_witness.access_refusal
source_surface: silence_window
source_holder_or_absence: artist
source_proof_or_absence: editor_checksum
caption_text_or_absence: "[refuses to continue]"
caption_language_channel: access_caption
caption_operator_or_absence: access_captioner
operator_protection_state: anonymous
caption_claim: refuses
excluded_or_harmed_reader: sponsor
pressure_actor: artist_boundary
selected_custody_response: certify_access_caption
caption_state_after: certified_access
future_reader_or_route: access_route
future_reader_effect: access_route_protected

Row C — Fan hard-sub outruns archive

row_id: caption_witness.fan_hardsub_confession
source_surface: archive_playback
source_holder_or_absence: archive
source_proof_or_absence: explicit_absence
caption_text_or_absence: "They made her say yes."
caption_language_channel: pirate_hardsub
caption_operator_or_absence: fan_translator_cell
operator_protection_state: exposed
caption_claim: reverses
excluded_or_harmed_reader: inspector
pressure_actor: pirate_relay
selected_custody_response: publish_fan_hardsub
caption_state_after: fan_hardsubbed
future_reader_or_route: public_only_route
future_reader_effect: source_rehearing_required

Play constraints

  • The card enters only when a caption layer changes meaning, access, proof, or future route usability.
  • It must not enter from fixed turn count, day/week interval, chapter quota, raw content count, or lens-health state.
  • It must name at least one harmed reader or explicit absence.
  • It must name a pressure actor; captions do not become contested by themselves.
  • It must name a future reader or route that consumes the result.

Counter hooks

Suggested deltas:

  • caption_legibility
  • caption_capture
  • access_public_trust
  • foreign_language_public_trust
  • translation_drift
  • source_voice_exposure
  • source_ambiguity
  • sponsor_copy_pressure
  • sponsor_capture
  • inspection_heat
  • archive_debt
  • editor_debt
  • fan_liability
  • relay_custody_risk
  • public_receipt_distrust
  • future_recovery_cost

Non-goals

  • Not a localization request list.
  • Not a raw transcript.
  • Not a sponsor-copy approval form.
  • Not a generic access checklist.
  • Not valid if source voice and caption meaning are treated as identical.
  • Not valid if the future route never reads the caption state.