From 1ed8f4ad4a361e54e37e004432e1bb6cd02a6a8a Mon Sep 17 00:00:00 2001 From: Xiangzhe Date: Wed, 26 Aug 2026 18:59:04 -0300 Subject: [PATCH] test(video): prove fail-closed transcript inspection --- tests/unit/request-log-payloads.test.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/unit/request-log-payloads.test.ts b/tests/unit/request-log-payloads.test.ts index 714722d553..788cdac557 100644 --- a/tests/unit/request-log-payloads.test.ts +++ b/tests/unit/request-log-payloads.test.ts @@ -573,6 +573,29 @@ test("bounds cyclic objects and fails closed when the transcript-security depth assert.equal(omittedDeep, VIDEO_TRANSCRIPT_LOG_OMISSION_MARKER); }); +test("fails closed when enumerable getters or proxies throw during transcript inspection", () => { + const throwingGetter: Record = {}; + Object.defineProperty(throwingGetter, "nested", { + enumerable: true, + get() { + throw new Error("PRIVATE_GETTER_TRANSCRIPT_SENTINEL"); + }, + }); + const throwingProxy = new Proxy>( + {}, + { + ownKeys() { + throw new Error("PRIVATE_PROXY_TRANSCRIPT_SENTINEL"); + }, + } + ); + + for (const payload of [throwingGetter, throwingProxy]) { + assert.equal(containsVideoTranscriptForLog(payload), true); + assert.equal(omitVideoTranscriptForLog(payload), VIDEO_TRANSCRIPT_LOG_OMISSION_MARKER); + } +}); + test("fails closed at the aggregate traversal budget before a tail video transcript can leak", () => { const privateTranscript = "private over-budget video transcript sentinel"; const payload: unknown[] = Array.from(