Files
OmniRoute/tests
diegosouzapw 521719397e feat(video): render a redacted transcript shadow and surface it on the guardrail result
Task P1a of #12150 (Video Bridge transcript retention). A prior regex-based
approach leaked adversary-controlled cue text at the first literal "]" (real
transcripts routinely contain "[inaudible]", "[music]") and is abandoned.

This does structured redaction instead: describeVideoPart() now renders the
description twice from the same VideoTranscriptCue[] objects — once normally
(for the model) and once with every cue.text replaced by the placeholder
"[redacted-video-transcript]" (for logs), covering both the trailing-blob
assembly and the fusion transcriptTimeline interleave path. Because the
substitution happens on a structured field before concatenation, no cue
content can bypass it.

- videoBridgeHelpers.ts: adds DescribedVideo.descriptionRedacted, exports
  VIDEO_TRANSCRIPT_REDACTION_PLACEHOLDER, threads an optional redact flag
  through formatTranscriptCue.
- videoBridgePipeline.ts: carries descriptionRedacted through
  ProcessVideoPartResult and the whole-result cache (VideoResultCacheMetadata
  + its validator), so a cache hit for a transcript-bearing video still
  surfaces the shadow instead of silently losing it.
- videoBridge.ts: preCall collects a per-part redaction map and sets
  meta.videoBridgeObserved (true iff >=1 transcript cue was rendered) plus
  meta.videoBridgeLogRedaction. videoBridgeObserved is explicitly false (not
  omitted) for frames-only video, so ordinary video logging/Memory is
  unaffected.

Consumer plumbing (log sink, Memory suppression) is a separate follow-up
task; this is guardrail-side only.

Refs #12150
2026-09-01 23:42:09 -03:00
..
2026-08-26 14:25:01 -03:00