Windows MSIX: WebGPU requestAdapter() → Code Integrity blocks vk_swiftshader.dll → GPU process crash kills the whole app and wedges the package
Windows MSIX: WebGPU requestAdapter() → Code Integrity blocks vk_swiftshader.dll → GPU process crash kills the whole app and wedges the package
Summary
On Windows, when a page rendered in the Claude Code Browser pane calls WebGPU
(navigator.gpu.requestAdapter()), Chromium falls back to software Vulkan and lazily loadsvk_swiftshader.dll from the installed MSIX package. Windows Code Integrity cannot load the
package's own catalog (AppxMetadata\CodeIntegrity.cat, status 0xC000003A =STATUS_OBJECT_PATH_NOT_FOUND), so the DLL fails the signing-level check and the load is
blocked. The GPU process dies, and the entire desktop app window disappears.
Worse than a crash: the MSIX package is then left in a state where it cannot be relaunched.
Windows logs ERROR_NEEDS_REMEDIATION (0x3CFC) — *"The application cannot be started. Try
reinstalling the application to fix the problem."* Killing every Claude/Node process does not help.
A reboot does not reliably help. Only a Repair that re-downloads and re-adds the MSIX clears it.
This has happened twice on this machine, on two different app versions, with an identical
signature. A Repair does not prevent recurrence — the first occurrence was recovered by a repair
that upgraded the app to 1.24012.9, and 1.24012.9 is the version that crashed the second time.
Environment
| | |
|---|---|
| App | Claude Desktop (MSIX), Claude_1.24012.9.0_x64__pzs8sxrjxfjjc — also seen on 1.24012.1.0 |
| Claude Code | 2.1.219 |
| OS | Windows 11 Pro 10.0.26200 |
| GPU | Intel(R) Graphics, driver 32.0.101.7082 (2025-11-30) |
| RAM | 15.8 GB (4.5 GB free at crash — not memory pressure) |
| Smart App Control | OFF (VerifiedAndReputablePolicyState = 0) |
| Memory Integrity / HVCI | ON (Enabled = 1, SecurityServicesRunning = 2) |
| WDAC user-mode CI enforcement | 0 (not enforcing) |
Note: this is a default Windows 11 security posture, not a hardened or managed one. Smart App
Control is off; nothing unusual is configured. Any Windows 11 machine with Memory Integrity enabled
looks like this.
Reproduction
Not deterministic, because the trigger is whether the loaded page happens to call WebGPU.
- In Claude Code, open the Browser pane on a page that calls
navigator.gpu.requestAdapter().
In our case it was a login page carrying a Cloudflare Turnstile widget — Turnstile's adaptive
fingerprinting appears to call WebGPU only sometimes, which is why the same URL crashed the app
twice and loaded fine three other times.
- The app window vanishes within ~1 second of the tool call returning successfully.
- The app cannot be relaunched until the MSIX is re-added.
Important: merely opening the Browser pane is not sufficient (many previews were fine), and
Turnstile is not sufficient (the same page loaded three times with no requestAdapter call and no
crash). The discriminator is the WebGPU call — 2 for 2.
Evidence
1. The WebGPU call — %APPDATA%\Claude\logs\unknown-window.log
2026-07-24 12:50:32 [warn] The powerPreference option is currently ignored when calling requestAdapter() on Windows. See https://crbug.com/369219127
2026-08-01 08:24:56 [warn] The powerPreference option is currently ignored when calling requestAdapter() on Windows. See https://crbug.com/369219127
These are the only two dates requestAdapter appears in the entire log. Both are crash moments.
2. Catalog load failure — Microsoft-Windows-CodeIntegrity/Operational, Event ID 3010 (×3 each time)
Code Integrity was unable to load the \Device\HarddiskVolume3\Program Files\WindowsApps\
Claude_1.24012.9.0_x64__pzs8sxrjxfjjc\AppxMetadata\CodeIntegrity.cat catalog. Status 0xC000003A.
0xC000003A = STATUS_OBJECT_PATH_NOT_FOUND. This is the root defect — the installed package's
own Code Integrity catalog is not resolvable.
3. The blocked DLL — same log, Event ID 3033
Code Integrity determined that a process (\Device\HarddiskVolume3\Program Files\WindowsApps\
Claude_1.24012.9.0_x64__pzs8sxrjxfjjc\app\claude.exe) attempted to load \Device\HarddiskVolume3\
Program Files\WindowsApps\Claude_1.24012.9.0_x64__pzs8sxrjxfjjc\app\vk_swiftshader.dll
that did not meet the Microsoft signing level requirements.
Event 3033 has fired exactly twice in a log with records going back to 2025-03-31. Both are
these two crashes. This is not background noise.
(The DLL itself is fine on disk — Get-AuthenticodeSignature reports Valid, CN=Anthropic, PBC.
The failure is the signing level check that depends on the missing package catalog.)
4. GPU process death — %APPDATA%\Claude\logs\main.log
2026-08-01 08:24:57 [info] GPU process gone: {
type: 'GPU',
reason: 'crashed',
exitCode: 101457950,
serviceName: 'GPU'
}
Identical exitCode: 101457950 (0x060C201E) on both occurrences. This is the only "GPU process gone"
event in the file.
5. The package wedges — Microsoft-Windows-AppModel-Runtime/Admin, Event ID 6 (×5, all at 08:24:57)
Error 0x3CFC — verified with certutil -error 0x3CFC:
0x3cfc (WIN32: 15612 ERROR_NEEDS_REMEDIATION) -- 15612 (15612)
Error message text: The application cannot be started. Try reinstalling the application to fix the problem.
These five are the only records of that error in the retention window. The app container is
destroyed one second later.
6. Timeline — two occurrences, identical shape
| | 2026-07-24 (v1.24012.1.0) | 2026-08-01 (v1.24012.9.0) |
|---|---|---|
| requestAdapter() | 12:50:32 | 08:24:56 |
| CI 3010 catalog fail ×3 | 12:50:32 | 08:24:57 |
| CI 3033 DLL blocked | 12:50:32 | 08:24:57 |
| GPU process gone | 12:50:33 | 08:24:57 |
| AppModel-Runtime 0x3CFC ×5 | — | 08:24:57 |
| app back up (Starting app) | 13:05:40 | 08:31:36 |
| user-visible outage | 15 min 07 s | 6 min 39 s |
Impact
- The entire desktop application disappears — not just the tab, session, or renderer. Any
unsaved conversational state in other sessions goes with it.
- The app is then unlaunchable for several minutes. Repair-from-Settings that only re-ACLs the
install does not fix it (one is logged succeeding at exactly that while the app still refused to
start); only the Repair that re-downloads and re-adds the MSIX clears it.
- No crash artifact is produced.
%APPDATA%\Claude\Crashpad\reportsis empty, there is no
Application Error (Event 1000), and no minidump. WerFault.exe was itself blocked by a security
mitigation ~200 ms before the AppX failures, which is likely why. Telemetry almost certainly
does not show these crashes at all.
- Because nothing errors and no tool result goes missing, the Claude Code transcript looks like a
session that simply ended. It is invisible from inside the product.
Ruled out
Memory pressure (4.5 GB free; no Resource-Exhaustion events) · GPU TDR / driver reset (no 4101/141,
nothing in the Intel Graphics log) · third-party AV (Defender only, zero detections) · port or socket
conflicts (the browser preview is logged with "port":0 — nothing is bound) · stale Electron
singleton locks (none exist; those are POSIX-only) · self-update race (no AppX deployment touched the
package in the 35 min before) · malformed local config · OneDrive file locks (OneDrive started 68 s
after the failed relaunch).
Suggested fix
The chain hangs entirely on step 2: the installed package's AppxMetadata\CodeIntegrity.cat is not
resolvable at runtime (STATUS_OBJECT_PATH_NOT_FOUND). Ensuring the catalog is present and readable
in the shipped MSIX — or ensuring vk_swiftshader.dll satisfies the required signing level
independently of the package catalog — should close it.
A defensive second fix worth considering regardless: a GPU-process crash should not take the whole
Electron app down, and should not leave the MSIX package in ERROR_NEEDS_REMEDIATION.
Repro-adjacent note for triage
If you want to force it rather than wait for Turnstile, any page calling navigator.gpu.requestAdapter()
in the Browser pane on a Windows MSIX install should do it — assuming the machine's package catalog
is in the same state. Checking Get-WinEvent -LogName 'Microsoft-Windows-CodeIntegrity/Operational' | on a test machine will show whether the catalog resolves there.
Where-Object Id -eq 3010
Showing cached comments. Read the full discussion on GitHub ↗
3 Comments
Same signature as #81341, which has a longer evidence thread on it — CIG measured via
Get-ProcessMitigation, a Chrome control group, and commit archaeology by @vkwislacode in that thread dating the regression to the March 2026 narrowing of Chromium'svk_swiftshader.dllpreload. Cross-linking because this issue currently references none of that cluster, which now runs to roughly twenty reports.Your Turnstile observation looks like a trigger detail that thread is missing. Several reports there describe the same URL crashing on some visits and loading fine on others with no explanation offered, and WebGPU being called only on some Turnstile challenges would account for it.
One datapoint to add: on Windows 11 26200 the preconditions are unchanged on 1.24012.11.0 — no
.catanywhere under the install root,vk_swiftshader.dllstill shipped with a third-party Authenticode signature, GPU child stillMicrosoftSignedOnly: ON/AllowStoreSignedBinaries: OFF,app\versionstill 42.7.0. Read-only checks only; I have not run a trigger test on that version. Details in #81341.Thanks — the cross-link is right, and #81341 is clearly the better-instrumented thread. I'm folding my report into that cluster rather than maintaining a parallel account. Below is what I have that the thread doesn't already, kept separate by how well I can actually support it. (Assistant-assisted analysis; local paths and identifiers redacted.)
1. The Turnstile trigger — a hypothesis, and exactly how far my evidence goes
Since this is the part you flagged as missing, I want to be precise about it rather than let it get adopted as a finding.
What I observed. The page loaded in the Browser pane was a login page on a site I operate, fronted by Cloudflare Turnstile.
unknown-window.logrecordsrequestAdapteron that page, and the CodeIntegrity 3010/3033 pair plus the GPU death follow within the same second.What I did not do. I never instrumented the widget, never A/B'd the page with Turnstile removed, and never captured a challenge-versus-no-challenge comparison. So:
requestAdapter()on a Turnstile-fronted page, not "Turnstile calledrequestAdapter()."Why I still think it's worth having. Turnstile's fingerprinting is adaptive — it does not run the same probe set on every visit — which would produce exactly the pattern several reports here describe and none explain: the same URL crashing on some visits and loading fine on others. It is a plausible mechanism that fits the observation, and it is testable by someone with the appetite for a trigger run. It is not established.
Given that this thread has just watched one workaround withdrawn for a verification method that distinguished nothing, I would rather this go in labelled.
2. Two fires, eight days apart, on two different app versions
Both on the same machine (Windows 11 Pro 26200), with the CodeIntegrity correlation captured for each:
| | 2026-07-24 | 2026-08-01 |
|---|---|---|
| app version | 1.24012.1.0 | 1.24012.9.0 |
|
requestAdapter()| 12:50:32 | 08:24:56 || CI 3010 ×3 (catalog,
0xC000003A) | 12:50:32 | 08:24:57 || CI 3033 (
vk_swiftshader.dll) | 12:50:32 | 08:24:57 ||
GPU process gone,exitCode: 101457950| 12:50:33 | 08:24:57 || app back (
Starting app) | 13:05:40 | 08:31:36 || outage | 15 min 07 s | 6 min 39 s |
Identical
exitCode: 101457950both times, matching every other report here.The version spread is the point: the 07-24 fire predates 1.24012.9.0 entirely, so whatever changed between those two releases changed nothing that matters. That's consistent with @DrRIH's
app\version 42.7.0table across 9.0 → 11.0, and with @vkwislacode dating the regression to March 2026 — it just extends the unchanged window backwards as well as forwards.Three further incidents occurred on a second machine the night of 2026-07-31, same user-visible signature (pane opens, entire app vanishes, relaunch blocked). I did not capture CodeIntegrity data for those, so I'm listing them as occurrences only.
3. Base rate for Event 3033 on this machine
CodeIntegrity/Operationalreaches back to 2025-03-31 on the affected machine. Event 3033 has fired exactly twice in that whole span — and both are the two crashes above.That's a different cut from the Chrome control groups already posted (562/2, 275/2, and @relanderolli's Discord/Overwolf counts). Those show the block is routine and survivable elsewhere. This shows that on a machine where the event is otherwise nonexistent, both occurrences were fatal and both were this DLL. Zero background noise to subtract.
4. The failure is invisible in an agent transcript — worth knowing if you triage from one
This has cost me time twice and I haven't seen it mentioned, so: when the crash happens during an agent session, there is no failed tool call and no dangling call.
On 08-01 the sequence was
preview_start→ succeeded (navOk: true);read_page→ succeeded, returning the full accessibility tree at13:24:55.593Z; and the transcript then simply stops. The GPU process died one second after a tool returned successfully. Nothing is truncated mid-call, nothing errors, and it reads exactly like a session that ended normally.Everything you'd normally reach for is also absent: no Application Error 1000, no bugcheck, no Kernel-Power 41, no GPU TDR (4101/141), no Resource-Exhaustion event, and
%APPDATA%\Claude\Crashpad\reportsis empty — zero dumps. Nothing faults at the OS level, because nothing faults; the loader terminates the process deliberately.The definitive check needs no reboot to have occurred — the gap between these two lines is the outage:
One trap:
%APPDATA%\Claude\logs\is the real log directory and sorts last in a directory listing, so it's easy to miss.%LOCALAPPDATA%\Claude\Logsis a decoy holding onlychrome-native-host.log. I looked in the wrong place on my first pass.5. Corroborating the
0x80073D02recovery finding, from the other direction@DrRIH's point in the "recovery may not need a full reinstall" comment matches my experience, and explains something I had recorded as a contradiction.
On 08-01 a Repair appeared to do nothing — the app still refused to launch afterwards, and the log shows that attempt succeeding at nothing more than re-ACLing the existing install ("ACLs repaired successfully… Register next time should succeed"). What actually recovered it was a second Repair, minutes later, that re-downloaded and re-added the MSIX; the app launched immediately after. On 07-31 I reached for a full Windows restart, which also worked but was almost certainly unnecessary.
So "Repair does nothing" and "Repair fixed it" are both true, and the discriminator is whether the Register step can actually run. That fits
0x80073D02— "the following apps need to be closed" — precisely: a tray instance is enough to fail it, and the UI reports that as a flat "cannot repair this app". Fully exiting including the tray before repairing (or, per @DrRIH, before simply relaunching) is worth trying before anyone reaches forRemove-AppxPackage.6. What I have not done
To keep the ledger clean: I have run no trigger test since 08-01, and I have not tested either workaround in this thread — neither the non-MSIX
--exebuild nor the--use-angle=d3d11 --disable-features=…flag set. The Browser pane is administratively disabled in my agent setup, and the work it was doing turned out to be better done with server-sidecurlassertions anyway.Read-only preconditions on my machine today (Windows 11 Pro 26200, 1.24012.9.0, package
Status: Ok, flagless launch) are unchanged and match the thread exactly: zero.catfiles anywhere under the install root;app\vk_swiftshader.dllpresent withStatus: Valid,CN="Anthropic, PBC"; GPU childMicrosoftSignedOnly: ON,AllowStoreSignedBinaries: OFF.Happy to run a controlled trigger test with the flag set applied if that data would be useful to anyone — but I'd rather not burn a package on it speculatively.
Confirming this on a third machine, and adding two things the issue doesn't cover yet: a reliable trigger and a session-level consequence.
Environment
Reliable trigger
The crash is not random. In
%APPDATA%\Claude\logs\main.logthere are exactly four GPU crashes across the whole log history, and every one of them lands within 30 seconds of the Browser pane loading the same Cloudflare-protected site:| Browser-pane action (local time) | GPU crash |
|---|---|
| 2026-08-05 09:29:17
navigate→ forum | 09:29:25 || 2026-08-05 10:42:24
get_page_texton forum | 10:42:39 || 2026-08-05 12:31:22
preview_start→ forum | 12:31:29 || 2026-08-07 11:14:55
preview_start→ forum | 11:15:08 |In the same sessions the pane loaded three other sites (a SPA pricing page, a marketing site, a second pricing page) with no crash at all. The discriminator appears to be the Cloudflare interstitial, which fingerprints via WebGPU — matching the
requestAdapter()path in this issue.Immediately before each crash,
main.logshows a burst of WebGL errors ending in:101457950=0x060C201E, same as reported here.Code Integrity events, same second
Microsoft-Windows-CodeIntegrity/Operationalat 2026-08-07 11:15:08 (and identically at 2026-08-05 12:31:29):Confirming the packaging side:
vk_swiftshader.dll(5,546,320 bytes) is present in the installed package, but theAppxMetadatadirectory it should be vouched for by is not there at all. So the package ships a DLL it cannot authorize.Recovery that actually worked
Reinstall was not needed here. The AppX Deployment log explains why plain Repair sometimes appears to fail:
Orphaned
claude.exechild processes survive the crash and block re-registration.Get-Process claude | Stop-Process -Forcebefore Repair (or before simply relaunching) is enough; a reboot works only because it kills the same orphans.Session-level consequence — the part that hurts most
Beyond the app dying, the affected agent session becomes permanently unusable, because the crash is deterministic on resume:
get_page_text→ getsNo preview is open→ callspreview_starton the same URL → crash.Three separate resume attempts here, three identical crashes, across two app versions and a Repair in between. The session transcript ends each time on an unanswered
mcp__Claude_Browser__get_page_text. The only escape is to abandon the session and hand the work over to a new one — losing whatever the model had gathered in context but not yet written to disk.Two mitigations that would each be sufficient from a user's point of view:
AppxMetadata\CodeIntegrity.catcatalog sovk_swiftshader.dllcan load (the actual fix)A settings toggle for GPU compositing would also help, but per #83028 the
--disable-gpu-compositingflag is not reachable in the MSIX build, so it cannot be a user-side workaround today.