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 | equivalentRequired 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_captureRow 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_protectedRow 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_requiredPlay 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_legibilitycaption_captureaccess_public_trustforeign_language_public_trusttranslation_driftsource_voice_exposuresource_ambiguitysponsor_copy_pressuresponsor_captureinspection_heatarchive_debteditor_debtfan_liabilityrelay_custody_riskpublic_receipt_distrustfuture_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.