Skip to content

fix(server): preview browser downloads Chrome 157.0.8103.78 with its security fixes - #34962

Merged
juliusmarminge merged 2 commits into
mainfrom
factory/issue-34920
Nov 13, 2026
Merged

juliusmarminge merged 2 commits into
mainfrom
factory/issue-34920

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Nov 12, 2026 •

Copy link
Copy Markdown
Member

Moves the pinned Chrome for Testing headless shell used by the server preview browser from 157.0.8103.38 to 157.0.8103.78, picking up that release's security fixes, and updates the byte size and SHA-256 pin for each of the six platform archives (linux64, linux-arm64, mac-arm64, mac-x64, win32, win64). Download, verification and install logic are unchanged. Every new pin was checked by downloading each archive from storage.googleapis.com/chrome-for-testing-public/157.0.8103.78: all six byte counts and SHA-256 hashes match exactly. The linux64 archive unzips and its binary reports 'Google Chrome for Testing 157.0.8103.78'. The author's commit is kept as-is, with a clean merge of origin/main on top; the diff against main is still only these 13 lines in PreviewBrowser.ts.

Fixes #34920

Reproduction on main

Not executed during screening. Start a main build with isolated T3 home state and no cached preview browser, connect the web client, create a thread, and select Browser in its right panel. Wait for installation, then inspect the installed chrome-headless-shell version directory or run that binary with --version; main should report 157.0.8103.38. Repeat with this PR using separate isolated state; it should install and report 157.0.8103.78.

Evidence

Fresh isolated state and empty preview-browser cache on each commit. Create a replay thread, open its right panel, select Browser, wait for installation, and load a local page displaying the installed chrome-headless-shell --version output. Linux x64 web client, 1280×800, light theme; browser sandbox disabled equally on both sides for this VM.

Before After
f313d0a6cb 7e432da6cb
Before: installed Chrome 157.0.8103.38 After: installed Chrome 157.0.8103.78
Before recording After recording

Scenario source. Base failed the version check with 157.0.8103.38; head passed with 157.0.8103.78. Both captures and recordings were inspected.

Not shown:

  • Downloads on macOS, Windows, and other architectures were not exercised; this proof covers Linux x64.
  • The underlying Chrome security vulnerabilities were not exploited; this proof verifies installation and successful use of the patched browser version.

Tests

vp test run apps/server/src/preview/PreviewBrowser.test.ts: 8/8 passed. vp run check:changed: format, lint, knip, typecheck (3 packages) and tests (2 files) all passed. Streamed sha256sum and byte count of all six 157.0.8103.78 archives: all match the pins. Unzipped linux64 chrome-headless-shell --version: 'Google Chrome for Testing 157.0.8103.78'.

Who did the work

  • Written by Claude Opus 5.5, in Claude Code
  • Reviewed by GPT-6.1 Sol, in Codex, and by Claude Opus 5.5, each on its own
  • Proof captured by GPT-6.1 Sol and checked by Claude Opus 5.5

Run by the t3code factory in T3 Code.

…security fixes

The server's preview browser was pinned to Chrome for Testing 157.0.8103.38,
which lacks the security fixes in 157.0.8103.50 (including an exploited CVE)
and 157.0.8103.78. Bump the pin to the current Stable, 157.0.8103.78, with
sizes and SHA-256s computed from each chrome-headless-shell archive.

Fixes #34920

AI-assisted; verified with the tests and tools listed above.
@github-actions github-actions Bot added vouch:trusted Author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Nov 12, 2026
@macroscopeapp

macroscopeapp Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 7e432da

Macroscope's review found this PR approvable — Updates the preview browser to a newer Chrome patch release and refreshes its platform archive metadata. Existing integrity checks and on-demand installation behavior remain unchanged, keeping the update's exposure limited.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

Explain Change →

No actionable comments were generated in the recent review.

Walkthrough

The server’s pinned Chrome for Testing headless-shell version changes from 157.0.8103.38 to 157.0.8103.78. Expected archive sizes and SHA-256 digests are updated for Linux, macOS, and Windows.

Changes: Preview browser pin

Layer / File(s) Summary
Update pinned release and archive metadata
apps/server/src/preview/PreviewBrowser.ts
The pinned version and expected sizes and SHA-256 digests change for the six platform archives.

Estimated code review effort: 2 (Simple) | ~8 minutes

Change: Bug fix · Severity of issue fixed: High

Possibly related PRs

  • pingdotgg/t3code#30820: Pins Chrome headless-shell version 157.0.8103.38 and defines archive metadata for the same platforms.
  • pingdotgg/t3code#26684: Changes the browser archive definition in PreviewBrowser.ts from headless-shell to full Chrome.
  • pingdotgg/t3code#24542: Updates the headless-shell pin and archive metadata in PreviewBrowser.ts.

Suggested labels: bugfix

Suggested reviewers: snnbotchway

Merge Risk: Minimal · up to 7b7ad

This updates the preview browser to a newer Chrome security release. The risk is low, and a wrong checksum would block the download rather than install an unverified binary.

Pre-merge checks: Passed 4

Check name Status Explanation
Title check Passed The title states the main change: the server preview browser pin moves to Chrome for Testing 157.0.8103.78 to pick up its security fixes. The raw summary confirms the version bump and the updated size…
Linked Issues check Passed Directly linked issue #34920 reports that the server preview browser is pinned to Chrome for Testing 157.0.8103.38 and misses the 157.0.8103.50 and 157.0.8103.78 security fixes. The concrete coding re…
Out of Scope Changes check Passed The whole-PR diff against the merge base changes only apps/server/src/preview/PreviewBrowser.ts. The changes are the VERSION constant and the per-platform byte and sha256 values, with a +13/-13 line c…
Description check Passed The description follows the template closely. It gives a clear problem statement (the pinned Chrome for Testing headless shell needs the 157.0.8103.78 security release, with the issue #34920 link), a …
Full details: Title check

Explanation

The title states the main change: the server preview browser pin moves to Chrome for Testing 157.0.8103.78 to pick up its security fixes. The raw summary confirms the version bump and the updated sizes and hashes. The title follows the conventional commit format from the template. Its phrasing is long, but it stays specific and accurate.

Full details: Linked Issues check

Explanation

Directly linked issue #34920 reports that the server preview browser is pinned to Chrome for Testing 157.0.8103.38 and misses the 157.0.8103.50 and 157.0.8103.78 security fixes. The concrete coding requirement is to move the pin forward. The diff to apps/server/src/preview/PreviewBrowser.ts sets VERSION to "157.0.8103.78" and replaces the bytes and sha256 values for all six archives (linux64, linux-arm64, mac-arm64, mac-x64, win32, win64). The download, size, and hash check logic is unchanged. The issue also asks for ongoing update automation or a stated update policy. It presents these as suggestions ("Could the bump be automated?", "Failing that, a stated policy would help"), not as acceptance criteria. The PR description excludes automation as a separate follow-up. The SHA-256 and byte values were not recomputed during this review. Their correctness rests on the PR author's reported verification, which is not independently confirmed here.

Full details: Out of Scope Changes check

Explanation

The whole-PR diff against the merge base changes only apps/server/src/preview/PreviewBrowser.ts. The changes are the VERSION constant and the per-platform byte and sha256 values, with a +13/-13 line count. Each change directly supports the pin bump from #34920. No unrelated code, configuration, workflow, or dependency changes appear in the reviewed evidence. The automated pin-update workflow suggested in the issue is not included, and the PR description states it is out of scope.

Full details: Description check

Explanation

The description follows the template closely. It gives a clear problem statement (the pinned Chrome for Testing headless shell needs the 157.0.8103.78 security release, with the issue #34920 link), a precise change (version and six byte-size and SHA-256 pins updated, with download, verify, and install logic unchanged), and a scope link to the issue. Verification is thorough: pin checks against the official archives, a Linux x64 binary version check, 8/8 unit tests, the changed-file check suite, and before/after evidence. Reproduction steps on main are included. The Problem section is brief and the Scope section does not explicitly justify the change as a bug fix beyond the issue link, but it does link the issue that describes the need. Two gaps remain: the macOS, Windows, and other architecture downloads were not exercised, which the author discloses, and the 'Who did the work' section lists model names that the template's agent attribution line asks for, so that part is complete. Overall the description is mostly complete and substantive.

Finishing Touches

Generate unit tests (beta)

  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Recent review info

Run configuration

Commits

Reviewing files that changed from the base of the PR and between 2b07556 and 7b7ad8c.

Files selected for processing: 1

  • apps/server/src/preview/PreviewBrowser.ts

Limit details: You’ve used all 10 included reviews currently available.

@github-actions

github-actions Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 5.0 KiB 5.0 KiB 0 B (0.0%) 6.8 KiB ✅
Codex Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Codex Live turn WebSocket wire 1.2 KiB 1.2 KiB 0 B (0.0%) 2.0 KiB ✅
Codex Live turn WebSocket decoded 21.5 KiB 21.5 KiB 0 B (0.0%) 24.4 KiB ✅
Codex Live turn messages 1 1 0 (0.0%) 8 ✅
Claude Total thread wire 5.0 KiB 5.0 KiB 0 B (0.0%) 6.8 KiB ✅
Claude Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Claude Live turn WebSocket wire 1.2 KiB 1.2 KiB 0 B (0.0%) 2.0 KiB ✅
Claude Live turn WebSocket decoded 21.9 KiB 21.9 KiB 0 B (0.0%) 24.4 KiB ✅
Claude Live turn messages 1 1 0 (0.0%) 8 ✅

Other scenarios

All 64 scenario measurements match main.

All 64 scenario measurements
Provider Scenario Metric Main baseline This PR Impact PR ceiling
Codex short turn resume WebSocket decoded 10.5 KiB 10.5 KiB 0 B (0.0%) 12.7 KiB ✅
Codex short turn resume WebSocket messages 2 2 0 (0.0%) 2 ✅
Codex long turn running, cold open HTTP decoded 281.7 KiB 281.7 KiB 0 B (0.0%) 302.7 KiB ✅
Codex long turn running, cold open rows 75 75 0 (0.0%) 75 ✅
Codex long turn running, history page HTTP decoded 92.4 KiB 92.4 KiB 0 B (0.0%) 107.4 KiB ✅
Codex long turn running, history page rows 75 75 0 (0.0%) 75 ✅
Codex long turn finished, cold open HTTP decoded 381.5 KiB 381.5 KiB 0 B (0.0%) 410.2 KiB ✅
Codex long turn finished, cold open rows 151 151 0 (0.0%) 151 ✅
Codex long turn finished, socket cold open WebSocket decoded 381.6 KiB 381.6 KiB 0 B (0.0%) 410.2 KiB ✅
Codex long turn finished, socket cold open WebSocket messages 2 2 0 (0.0%) 2 ✅
Codex long turn finished, socket cold open rows 151 151 0 (0.0%) 151 ✅
Codex long turn finished, work page HTTP decoded 186.2 KiB 186.2 KiB 0 B (0.0%) 200.2 KiB ✅
Codex long turn finished, work page rows 150 150 0 (0.0%) 150 ✅
Codex idle thread resume WebSocket decoded 65 B 65 B 0 B (0.0%) 200 B ✅
Codex idle thread resume WebSocket messages 1 1 0 (0.0%) 1 ✅
Codex fleet shell snapshot HTTP decoded 42.4 KiB 42.4 KiB 0 B (0.0%) 53.7 KiB ✅
Codex fleet shell snapshot rows 27 27 0 (0.0%) 27 ✅
Codex fleet shell subscribe WebSocket decoded 65 B 65 B 0 B (0.0%) 200 B ✅
Codex fleet shell subscribe WebSocket messages 1 1 0 (0.0%) 1 ✅
Codex fleet shell resume check HTTP decoded 18 B 18 B 0 B (0.0%) 100 B ✅
Codex fleet shell resume check rows 0 0 0 0 ✅
Codex stale shell reload HTTP decoded 42.4 KiB 42.4 KiB 0 B (0.0%) 53.7 KiB ✅
Codex stale shell reload rows 27 27 0 (0.0%) 27 ✅
Codex stale shell resume WebSocket decoded 140 B 140 B 0 B (0.0%) 400 B ✅
Codex stale shell resume WebSocket messages 2 2 0 (0.0%) 2 ✅
Codex stale todo list cold open HTTP decoded 72.4 KiB 72.4 KiB 0 B (0.0%) 83.0 KiB ✅
Codex stale todo list cold open rows 75 75 0 (0.0%) 75 ✅
Codex stale todo list cold open nodes 2 2 0 (0.0%) 4 ✅
Codex stale todo list cold open subagents 2 2 0 (0.0%) 4 ✅
Codex stale todo list cold open plans 1 1 0 (0.0%) 2 ✅
Codex stale todo list cold open providerTurns 1 1 0 (0.0%) 2 ✅
Codex stale todo list cold open checkpoints 1 1 0 (0.0%) 2 ✅
Claude short turn resume WebSocket decoded 10.6 KiB 10.6 KiB 0 B (0.0%) 12.7 KiB ✅
Claude short turn resume WebSocket messages 2 2 0 (0.0%) 2 ✅
Claude long turn running, cold open HTTP decoded 283.3 KiB 283.3 KiB 0 B (0.0%) 302.7 KiB ✅
Claude long turn running, cold open rows 75 75 0 (0.0%) 75 ✅
Claude long turn running, history page HTTP decoded 93.4 KiB 93.4 KiB 0 B (0.0%) 107.4 KiB ✅
Claude long turn running, history page rows 75 75 0 (0.0%) 75 ✅
Claude long turn finished, cold open HTTP decoded 384.2 KiB 384.2 KiB 0 B (0.0%) 410.2 KiB ✅
Claude long turn finished, cold open rows 151 151 0 (0.0%) 151 ✅
Claude long turn finished, socket cold open WebSocket decoded 384.3 KiB 384.3 KiB 0 B (0.0%) 410.2 KiB ✅
Claude long turn finished, socket cold open WebSocket messages 2 2 0 (0.0%) 2 ✅
Claude long turn finished, socket cold open rows 151 151 0 (0.0%) 151 ✅
Claude long turn finished, work page HTTP decoded 188.1 KiB 188.1 KiB 0 B (0.0%) 200.2 KiB ✅
Claude long turn finished, work page rows 150 150 0 (0.0%) 150 ✅
Claude idle thread resume WebSocket decoded 66 B 66 B 0 B (0.0%) 200 B ✅
Claude idle thread resume WebSocket messages 1 1 0 (0.0%) 1 ✅
Claude fleet shell snapshot HTTP decoded 43.0 KiB 43.0 KiB 0 B (0.0%) 53.7 KiB ✅
Claude fleet shell snapshot rows 27 27 0 (0.0%) 27 ✅
Claude fleet shell subscribe WebSocket decoded 66 B 66 B 0 B (0.0%) 200 B ✅
Claude fleet shell subscribe WebSocket messages 1 1 0 (0.0%) 1 ✅
Claude fleet shell resume check HTTP decoded 18 B 18 B 0 B (0.0%) 100 B ✅
Claude fleet shell resume check rows 0 0 0 0 ✅
Claude stale shell reload HTTP decoded 43.0 KiB 43.0 KiB 0 B (0.0%) 53.7 KiB ✅
Claude stale shell reload rows 27 27 0 (0.0%) 27 ✅
Claude stale shell resume WebSocket decoded 140 B 140 B 0 B (0.0%) 400 B ✅
Claude stale shell resume WebSocket messages 2 2 0 (0.0%) 2 ✅
Claude stale todo list cold open HTTP decoded 73.4 KiB 73.4 KiB 0 B (0.0%) 83.0 KiB ✅
Claude stale todo list cold open rows 75 75 0 (0.0%) 75 ✅
Claude stale todo list cold open nodes 2 2 0 (0.0%) 4 ✅
Claude stale todo list cold open subagents 2 2 0 (0.0%) 4 ✅
Claude stale todo list cold open plans 1 1 0 (0.0%) 2 ✅
Claude stale todo list cold open providerTurns 1 1 0 (0.0%) 2 ✅
Claude stale todo list cold open checkpoints 1 1 0 (0.0%) 2 ✅

Baseline: f313d0a · PR result: 7e432da · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 108.5 KiB
  • Claude decoded thread snapshot: 108.8 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

@juliusmarminge juliusmarminge added the takeover:in-progress A takeover lead is working on this PR label Nov 13, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@juliusmarminge juliusmarminge added takeover:ready Takeover done; auto-lands when gates pass and removed takeover:in-progress A takeover lead is working on this PR labels Nov 13, 2026
@juliusmarminge
juliusmarminge merged commit 928dd04 into main Nov 13, 2026
51 checks passed
@juliusmarminge
juliusmarminge deleted the factory/issue-34920 branch November 13, 2026 16:45
@juliusmarminge juliusmarminge removed the takeover:ready Takeover done; auto-lands when gates pass label Nov 13, 2026
Pipyakas pushed a commit to Pipyakas/t3code that referenced this pull request Nov 13, 2026
AIdoesmyjob pushed a commit to AIdoesmyjob/t3code that referenced this pull request Nov 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S 10-29 changed lines (additions + deletions). vouch:trusted Author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Server preview browser is still on Chrome 157.0.8103.38, missing the fix for an exploited CVE

1 participant