# Capture matrix: pingdotgg/t3code#4812 (fix/issue-4812 @ 18361cdf37, merge-base 867112cda0)

Changed render paths: the desktop update download-failure toast. Main-process changes (electron-updater idle timeout patch) have no render path and are proved by the executor unit test plus the real-Electron transcripts.

| Row | Surface | Data | Affected | Kind | Seeding |
|---|---|---|---|---|---|
| R1 settings-download-failed | Settings > About, desktop update row, click Download | desktopBridge.getUpdateState → status "available", availableVersion "0.0.30-nightly.20260728.933", channel nightly; downloadUpdate() resolves `{accepted:true, completed:false, state:{...status "available", errorContext "download", message M}}` | yes: before shows no toast, after shows "Could not download update" with M | still (after the click settles) | labelled harness: web dev server (T3CODE_DEV_SEED=0) with a `window.desktopBridge` stub injected before app boot; auto-update is disabled in unpackaged desktop builds, so the real desktop app cannot reach this state |
| R2 sidebar-pill-download-failed | Sidebar update pill, click Download | same stub | yes: toast text gains the cause (before: "Electron updater failed to download the update on channel nightly."; after: "... Error: Request timed out") | still | same harness |

M before (867112cda0 main-process text) = "Electron updater failed to download the update on channel nightly."
M after (18361cdf37) = "Electron updater failed to download the update on channel nightly. Error: Request timed out"
The stub must return the M of its side, since the message is produced in the desktop main process, not the web bundle.

Minimum capture set: R1 and R2, before and after, 1440 wide light and dark; 390 wide light only if the layout renders the row at that width.
