# Issue 9239 — corrected-head native evidence

Bounded Linux evidence, not cross-platform acceptance. Evidence against corrected HEAD [fdee11371a](https://git.cafe/pingdotgg/t3code/commit/fdee11371a81e2132cf2a24e7a133e4cade7a8b7); baseline [044f07257c](https://git.cafe/pingdotgg/t3code/commit/044f07257c9684ae4543bd1e1ebf9c394e9e3830). No implementation edits, commits, push, forge writes, or watcher registration by this evidence pass.

Real Electron 44.9.3, Linux 6.1.102 x86_64, Xvfb/Openbox X11, real GNOME libsecret and native unlock prompt in a private D-Bus session. Isolated XDG config/data and T3 homes under /tmp/issue9239-evidence; disposable authenticated loopback T3 target :4788. Never used live ~/.t3 state. This is GNOME keyring coverage under Openbox, not a full GNOME Shell/Wayland session.

## Provenance and scope

Corrected desktop production bundle rebuilt using `cd /home/ubuntu/wt/issue-9239/apps/desktop && vp pack` (5404ms; existing import.meta bundler warnings). All p2 head recordings use this corrected bundle. The existing built server/web assets were reused; the same current immutable assets were copied into the baseline for fresh paired stills. Previous base evidence is explicitly baseline 044f07257c9684ae4543bd1e1ebf9c394e9e3830; previous head recordings remain rejected historical heads and are not corrected-head proof. [Historical partial report](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8dbe599cce1d752d/partial-evidence-report.md) includes baseline recordings, actual earlier SHAs and their limitations. [Original proof matrix](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fbc28b49f8f903d6/issue9239-pass1-proof-matrix.md).

Recordings below have timed, burned-in step narration (silent captions, not a voice track), from actual interaction timestamps. Startup waits and recovery steps remain in the clips. Raw inspector expressions/results are private because catalog/token material may appear there.

## Coverage matrix

| Row | Corrected-head evidence | Recording |
|---|---|---|
| basic_text existing catalog | Native async=true, sync=false, backend=basic_text. Independent actual desktop bridge read=null and save=false. Ciphertext SHA-256 before/after identical: 584e8e24cda082b5bea50774b623da75a5bfd646ce7224d0f51183b6d2c83d6a. | [p2-basic-existing-narrated.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7b0d40fb0911551c/p2-basic-existing-narrated.mp4) |
| basic_text pristine save | Read=null, save=false, and no output catalog file created. Native backend=basic_text, async=true, sync=false. Readiness-checked actual bridge calls; earlier no-window attempt discarded. | [p2-basic-pristine-ready-narrated.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ca2ac3fa70569ccc/p2-basic-pristine-ready-narrated.mp4) |
| GNOME locked responsiveness; unlock/reload; save/restart | Real native prompt pending, main query 26ms, resize 64ms, menu 212ms; ciphertext unchanged. Unlock followed by explicit reload, actual bridge save, full restart. Exact observations below. No automatic-recovery claim. | [p2-gnome-locked-unlock-save-restart-narrated.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a1fbd96a26c7eece/p2-gnome-locked-unlock-save-restart-narrated.mp4) |
| Native cancellation / restart | Cancel actual prompt, verify responsiveness and ciphertext preservation, unlock and reload, then full restart. Unlock/reload stayed Still connecting; first restart re-prompted and did not establish recovery in its sampled UI. See separate confirmation row. Do not infer in-place recovery. | [p2-gnome-cancel-restart-narrated.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fc2bfa58b432f203/p2-gnome-cancel-restart-narrated.mp4) |
| Legacy migration | Real baseline sync-encrypted legacy registry, bearer/SSH/no-token inventory, reload and full restart. SSH fixture is deliberately unreachable and no-token fixture unauthenticated; inventory is not successful authentication coverage. | [p2-legacy-migrate-restart-narrated.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2e9076fdc504fbbe/p2-legacy-migrate-restart-narrated.mp4) |
| Fresh baseline paired capture | Native baseline source and same immutable server/web assets; whole-surface themes and bounds. | [p2-baseline-settled-pairs-narrated.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/53d5bf27b2987d6d/p2-baseline-settled-pairs-narrated.mp4) |
| Settled native menu | Separate focus/repaint capture with prompt pending. | [p2-pending-menu-settled-narrated.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5c7ef480eadea54f/p2-pending-menu-settled-narrated.mp4) |
| Cancellation recovery confirmation | Subsequent explicit native unlock, cold restart and reload; exact results below. | [p2-cancel-recovery-confirm-narrated.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/41264becb892fa40/p2-cancel-recovery-confirm-narrated.mp4) |
| Empty | No catalog/legacy registry, empty onboarding; whole-surface themes and requested sizes. Full manual add-computer wizard is unverified. | [p2-empty-and-themes-narrated.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/85b1d3d9895cdfdd/p2-empty-and-themes-narrated.mp4) |
| Native Windows / macOS | UNVERIFIED: native hosts unavailable. No Linux inference. | None |
| KWallet / Niri / Wayland | UNVERIFIED: not available in this environment. | None |
| async-false/sync-true and both-unavailable native branches | UNVERIFIED natively; focused mocked tests cover fallback behavior. basic_text does not establish these native branches. | None |

## Sanitized actual observations

```json
[
  {
    "row": "locked main",
    "value": {
      "responsive": true,
      "pid": 1838015,
      "bounds": {
        "x": 170,
        "y": 110,
        "width": 1100,
        "height": 780
      }
    }
  },
  {
    "row": "locked resize",
    "value": {
      "x": 0,
      "y": 0,
      "width": 1439,
      "height": 999
    }
  },
  {
    "row": "locked ciphertext unchanged",
    "value": true
  },
  {
    "row": "native prompt found",
    "value": true
  },
  {
    "row": "direct unlock body",
    "value": "Code\nNo projects yet\nAdd project\nWhat should we work on?\nAdd a project, or start without one.\nAdd project\nStart without a project\nToggle Sidebar"
  },
  {
    "row": "direct unlock catalog",
    "value": {
      "read": true,
      "targets": 1,
      "credentials": 1
    }
  },
  {
    "row": "unlock reload body",
    "value": "Code\nNo projects yet\nAdd project\nWhat should we work on?\nAdd a project, or start without one.\nAdd project\nStart without a project\nToggle Sidebar\nSet up T3 Code\nCode\n1\nConnect\n2\nAgents\n3\nProjects\nConnect your computers\n\nChoose one or more computers. We\u2019ll set up agents and projects on each.\n\nComputers to set up\nSync fixture target\nConnected\nhttp://127.0.0.1:4788\nfs-39\nConnected\nhttp://127.0.0.1:3775/\nAdd a computer\n\nT3 Code collects anonymous usage data to help us improve it. To read more about how your data is used and how to opt out, see our privacy policy.\n\nContinue"
  },
  {
    "row": "gnome save",
    "value": {
      "saved": true,
      "credentials": 1
    }
  },
  {
    "row": "saved restart body",
    "value": "Code\nNo projects yet\nAdd project\nWhat should we work on?\nAdd a project, or start without one.\nAdd project\nStart without a project\nToggle Sidebar\nSet up T3 Code\nCode\n1\nConnect\n2\nAgents\n3\nProjects\nConnect your computers\n\nChoose one or more computers. We\u2019ll set up agents and projects on each.\n\nComputers to set up\nCorrected async fixture\nConnected\nhttp://127.0.0.1:4788\nfs-39\nConnected\nhttp://127.0.0.1:3775/\nAdd a computer\n\nT3 Code collects anonymous usage data to help us improve it. To read more about how your data is used and how to opt out, see our privacy policy.\n\nContinue"
  },
  {
    "row": "saved restart catalog",
    "value": {
      "label": "Corrected async fixture",
      "credentials": 1
    }
  },
  {
    "row": "cancel prompt found",
    "value": true
  },
  {
    "row": "cancel main responsive",
    "value": {
      "responsive": true
    }
  },
  {
    "row": "cancel ciphertext unchanged",
    "value": true
  },
  {
    "row": "cancel reload body",
    "value": "Still connecting\n\nT3 Code could not confirm this workspace.\n\nReload"
  },
  {
    "row": "cancel restart body",
    "value": "Still connecting\n\nT3 Code could not confirm this workspace.\n\nReload"
  },
  {
    "row": "cancel restart ciphertext unchanged",
    "value": true
  },
  {
    "row": "run exception",
    "value": "No native window after bounded 100s readiness wait"
  },
  {
    "row": "legacy inventory",
    "value": {
      "targets": [
        "BearerConnectionTarget",
        "BearerConnectionTarget",
        "SshConnectionTarget"
      ],
      "profiles": [
        "BearerConnectionProfile",
        "BearerConnectionProfile",
        "SshConnectionProfile"
      ],
      "credentials": 1
    }
  },
  {
    "row": "legacy reload body",
    "value": "Code\nNo projects yet\nAdd project\nWhat should we work on?\nAdd a project, or start without one.\nAdd project\nStart without a project\nToggle Sidebar\nSet up T3 Code\nCode\n1\nConnect\n2\nAgents\n3\nProjects\nConnect your computers\n\nChoose one or more computers. We\u2019ll set up agents and projects on each.\n\nComputers to set up\nLegacy bearer fixture\nConnected\nhttp://127.0.0.1:4788\nLegacy no-token fixture\nConnection failed\nhttp://127.0.0.1:4788\nLegacy SSH fixture\nReconnecting\u2026\nnull@fixture.invalid\nfs-39\nConnected\nhttp://127.0.0.1:3774/\nAdd a computer\n\nNot connected, so setup skips Legacy no-token fixture, Legacy SSH fixture. You can set them up later from Settings.\n\nT3 Code collects anonymous usage data to help us improve it. To read more about how your data is used and how to opt out, see our privacy policy.\n\nContinue"
  },
  {
    "row": "legacy restart body",
    "value": "Code\nNo projects yet\nAdd project\nWhat should we work on?\nAdd a project, or start without one.\nAdd project\nStart without a project\nToggle Sidebar\nSet up T3 Code\nCode\n1\nConnect\n2\nAgents\n3\nProjects\nConnect your computers\n\nChoose one or more computers. We\u2019ll set up agents and projects on each.\n\nComputers to set up\nLegacy bearer fixture\nConnected\nhttp://127.0.0.1:4788\nLegacy no-token fixture\nConnection failed\nhttp://127.0.0.1:4788\nLegacy SSH fixture\nReconnecting\u2026\nnull@fixture.invalid\nfs-39\nConnected\nhttp://127.0.0.1:3774/\nAdd a computer\n\nNot connected, so setup skips Legacy no-token fixture, Legacy SSH fixture. You can set them up later from Settings.\n\nT3 Code collects anonymous usage data to help us improve it. To read more about how your data is used and how to opt out, see our privacy policy.\n\nContinue"
  },
  {
    "row": "empty body",
    "value": "Code\nNo projects yet\nAdd project\nWhat should we work on?\nAdd a project, or start without one.\nAdd project\nStart without a project\nToggle Sidebar\nSet up T3 Code\nCode\n1\nConnect\n2\nAgents\n3\nProjects\nConnect your computers\n\nChoose one or more computers. We\u2019ll set up agents and projects on each.\n\nComputers to set up\nfs-39\nConnected\nhttp://127.0.0.1:3774/\nAdd a computer\n\nT3 Code collects anonymous usage data to help us improve it. To read more about how your data is used and how to opt out, see our privacy policy.\n\nContinue"
  },
  {
    "row": "empty read",
    "value": {
      "isNull": true
    }
  },
  {
    "row": "bounds light 1440",
    "value": {
      "outer": {
        "x": 0,
        "y": 0,
        "width": 1439,
        "height": 999
      },
      "content": {
        "x": 0,
        "y": 0,
        "width": 1439,
        "height": 999
      },
      "scale": 1
    }
  },
  {
    "row": "bounds light 390-attempt",
    "value": {
      "outer": {
        "x": 0,
        "y": 0,
        "width": 840,
        "height": 780
      },
      "content": {
        "x": 0,
        "y": 0,
        "width": 840,
        "height": 780
      },
      "scale": 1
    }
  },
  {
    "row": "bounds dark 1440",
    "value": {
      "outer": {
        "x": 0,
        "y": 0,
        "width": 1439,
        "height": 999
      },
      "content": {
        "x": 0,
        "y": 0,
        "width": 1439,
        "height": 999
      },
      "scale": 1
    }
  },
  {
    "row": "bounds dark 390-attempt",
    "value": {
      "outer": {
        "x": 0,
        "y": 0,
        "width": 840,
        "height": 780
      },
      "content": {
        "x": 0,
        "y": 0,
        "width": 840,
        "height": 780
      },
      "scale": 1
    }
  },
  {
    "row": "baseline empty body",
    "value": "Code\nNo projects yet\nAdd project\nWhat should we work on?\nAdd a project, or start without one.\nAdd project\nStart without a project\nToggle Sidebar\nSet up T3 Code\nCode\n1\nConnect\n2\nAgents\n3\nProjects\nConnect your computers\n\nChoose one or more computers. We\u2019ll set up agents and projects on each.\n\nComputers to set up\nfs-39\nConnected\nhttp://127.0.0.1:3774/\nAdd a computer\n\nT3 Code collects anonymous usage data to help us improve it. To read more about how your data is used and how to opt out, see our privacy policy.\n\nContinue"
  },
  {
    "row": "baseline bounds light 1440",
    "value": {
      "outer": {
        "x": 0,
        "y": 0,
        "width": 1439,
        "height": 999
      },
      "content": {
        "x": 0,
        "y": 0,
        "width": 1439,
        "height": 999
      }
    }
  },
  {
    "row": "baseline bounds light 390-attempt",
    "value": {
      "outer": {
        "x": 0,
        "y": 0,
        "width": 840,
        "height": 780
      },
      "content": {
        "x": 0,
        "y": 0,
        "width": 840,
        "height": 780
      }
    }
  },
  {
    "row": "baseline bounds dark 1440",
    "value": {
      "outer": {
        "x": 0,
        "y": 0,
        "width": 1439,
        "height": 999
      },
      "content": {
        "x": 0,
        "y": 0,
        "width": 1439,
        "height": 999
      }
    }
  },
  {
    "row": "baseline bounds dark 390-attempt",
    "value": {
      "outer": {
        "x": 0,
        "y": 0,
        "width": 840,
        "height": 780
      },
      "content": {
        "x": 0,
        "y": 0,
        "width": 840,
        "height": 780
      }
    }
  },
  {
    "row": "basic pristine retry native",
    "value": {
      "backend": "basic_text",
      "asyncAvailable": true,
      "syncAvailable": false
    }
  },
  {
    "row": "basic pristine retry read",
    "value": {
      "isNull": true
    }
  },
  {
    "row": "basic pristine retry save",
    "value": false
  },
  {
    "row": "basic pristine retry no file",
    "value": true
  },
  {
    "row": "pending menu final main",
    "value": {
      "responsive": true
    }
  },
  {
    "row": "native prompt found",
    "value": true
  },
  {
    "row": "native prompt found",
    "value": false
  },
  {
    "row": "cancel confirmed restart body",
    "value": "Code\nNo projects yet\nAdd project\nWhat should we work on?\nAdd a project, or start without one.\nAdd project\nStart without a project\nToggle Sidebar\nSet up T3 Code\nCode\n1\nConnect\n2\nAgents\n3\nProjects\nConnect your computers\n\nChoose one or more computers. We\u2019ll set up agents and projects on each.\n\nComputers to set up\nSync fixture target\nConnected\nhttp://127.0.0.1:4788\nfs-39\nConnected\nhttp://127.0.0.1:3774/\nAdd a computer\n\nT3 Code collects anonymous usage data to help us improve it. To read more about how your data is used and how to opt out, see our privacy policy.\n\nContinue"
  },
  {
    "row": "cancel confirmed catalog",
    "value": {
      "read": true,
      "credentials": 1
    }
  },
  {
    "row": "settled baseline light 1440",
    "value": {
      "native": {
        "outer": {
          "x": 0,
          "y": 0,
          "width": 1439,
          "height": 999
        },
        "content": {
          "x": 0,
          "y": 0,
          "width": 1439,
          "height": 999
        },
        "visible": true,
        "nativeDark": false
      },
      "renderer": {
        "width": 1439,
        "height": 999,
        "dark": false,
        "rootClass": "electron wco"
      }
    }
  },
  {
    "row": "settled baseline light 390-attempt",
    "value": {
      "native": {
        "outer": {
          "x": 0,
          "y": 0,
          "width": 840,
          "height": 780
        },
        "content": {
          "x": 0,
          "y": 0,
          "width": 840,
          "height": 780
        },
        "visible": true,
        "nativeDark": false
      },
      "renderer": {
        "width": 840,
        "height": 780,
        "dark": false,
        "rootClass": "electron wco"
      }
    }
  },
  {
    "row": "settled baseline dark 1440",
    "value": {
      "native": {
        "outer": {
          "x": 0,
          "y": 0,
          "width": 1439,
          "height": 999
        },
        "content": {
          "x": 0,
          "y": 0,
          "width": 1439,
          "height": 999
        },
        "visible": true,
        "nativeDark": true
      },
      "renderer": {
        "width": 1439,
        "height": 999,
        "dark": true,
        "rootClass": "electron wco dark"
      }
    }
  },
  {
    "row": "settled baseline dark 390-attempt",
    "value": {
      "native": {
        "outer": {
          "x": 0,
          "y": 0,
          "width": 840,
          "height": 780
        },
        "content": {
          "x": 0,
          "y": 0,
          "width": 840,
          "height": 780
        },
        "visible": true,
        "nativeDark": true
      },
      "renderer": {
        "width": 840,
        "height": 780,
        "dark": true,
        "rootClass": "electron wco dark"
      }
    }
  }
]
```

A result with null from an inspector exception is unverified, not a passing refusal. Discarded early basic-pristine and legacy attempts from the interrupted session are excluded from this observation set. Existing-catalog basic proof was completed before that interruption and retained separately.

## Paired whole-surface images and differences

Before is baseline 044f07257c9684ae4543bd1e1ebf9c394e9e3830; after is corrected fdee11371a81e2132cf2a24e7a133e4cade7a8b7. Every capture is the entire 1440x1000 X framebuffer, scale 1. Request 1440x1000 yields native outer/content 1439x999 under Openbox. Request 390x780 yields actual 840x780 due native minWidth: this is an attempted narrow desktop capture, not a 390px mobile pass. No crop, emulation, or minWidth modification.

Diff0 is absolute RGB difference at gain 1 without contrast stretching. Diff8 amplifies that difference by 8 with clipping. Threshold image marks a pixel white if its maximum absolute RGB channel difference is greater than 8/255. Pixel differences are measured, not claimed zero.


### onboarding-light-1440

Before (left) / corrected after (right):

![Before baseline left and corrected head right — onboarding-light-1440](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/39a76eb5bdfac1f5/pair-onboarding-light-1440.png)

[diff0-onboarding-light-1440.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/aa81db730dc37eaf/diff0-onboarding-light-1440.png) · [diff8-onboarding-light-1440.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e224412c3abed351/diff8-onboarding-light-1440.png) · [threshold8-onboarding-light-1440.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f1e2d2da3bbec984/threshold8-onboarding-light-1440.png)

Threshold pixels: 0/1440000 (0.0%).

### onboarding-light-390-attempt

Before (left) / corrected after (right):

![Before baseline left and corrected head right — onboarding-light-390-attempt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8aaa5facd52b8e7a/pair-onboarding-light-390-attempt.png)

[diff0-onboarding-light-390-attempt.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6b93d9c7e04fe137/diff0-onboarding-light-390-attempt.png) · [diff8-onboarding-light-390-attempt.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/92633f59f60bb866/diff8-onboarding-light-390-attempt.png) · [threshold8-onboarding-light-390-attempt.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/398cf7dad492ac73/threshold8-onboarding-light-390-attempt.png)

Threshold pixels: 0/1440000 (0.0%).

### onboarding-dark-1440

Before (left) / corrected after (right):

![Before baseline left and corrected head right — onboarding-dark-1440](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7d442e3f4ac5b4d7/pair-onboarding-dark-1440.png)

[diff0-onboarding-dark-1440.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5d90dd32129f0cd9/diff0-onboarding-dark-1440.png) · [diff8-onboarding-dark-1440.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/28f743773e39b56c/diff8-onboarding-dark-1440.png) · [threshold8-onboarding-dark-1440.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/89cf7df5c8452826/threshold8-onboarding-dark-1440.png)

Threshold pixels: 0/1440000 (0.0%).

### onboarding-dark-390-attempt

Before (left) / corrected after (right):

![Before baseline left and corrected head right — onboarding-dark-390-attempt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/20214c61b075610d/pair-onboarding-dark-390-attempt.png)

[diff0-onboarding-dark-390-attempt.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f35f6e8d1ec7c952/diff0-onboarding-dark-390-attempt.png) · [diff8-onboarding-dark-390-attempt.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4122d70a73d8664c/diff8-onboarding-dark-390-attempt.png) · [threshold8-onboarding-dark-390-attempt.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fb52bbd7fe437763/threshold8-onboarding-dark-390-attempt.png)

Threshold pixels: 0/1440000 (0.0%).

## All visible differences

The final four paired empty-onboarding stills are pixel-identical: 0 nonzero absolute RGB pixels, maximum channel difference 0, and 0 pixels above the stated >8/255 threshold in every pair. Text, layout, colors, focus outline, background, window chrome, and unused framebuffer area match. Diff0, gain-8 amplified diff and threshold images are all black as expected. This pixel-identity claim applies only to these final stills; earlier stale or historical captures are excluded.

The runtime behavior differs: historical actual baseline 044f07257c stalls at splash while a GNOME unlock prompt blocks the main loop. Corrected fdee11371a remains responsive, shows the existing Still connecting/Reload view, and visibly opens the native menu beside the pending prompt. After explicit native unlock and renderer reload, the saved target connects. A catalog label saved through corrected-head IPC persists across restart. Legacy migration shows the fixture bearer target Connected; the deliberately invalid SSH target Reconnecting and unauthenticated no-token target Connection failed are expected fixture limitations.

Cancellation is qualified: the first corrected-head cancellation restart sample remained Still connecting and re-prompted. A separate later confirmation, after a completed native unlock, cold restart, and explicit renderer reload, visibly showed Sync fixture target Connected and read one credential. The evidence does not establish automatic or reload-only cancellation recovery, nor that restart alone is sufficient without native unlock/reload.


## Validation commands

- `vp test run apps/desktop/src/electron/ElectronSafeStorage.test.ts`: 4 passed.
- `vp test run apps/desktop/src/app/DesktopSafeStorage.test.ts apps/desktop/src/app/DesktopConnectionCatalogStore.test.ts`: existing catalog-store file 5 passed; the first named file does not exist and is not evidence. No repository-wide tests.
- `dbus-run-session -- python /tmp/issue9239-evidence/pass2-run.py`: real desktop main inspector + actual renderer desktop bridge, native xdotool prompt interactions, ffmpeg X11 recording. Helpers and scripts retained locally for audit. Readiness uses bounded observed native-window checks; IPC checks must return actual values.

## Retained scratch and cleanup

/tmp/issue9239-evidence contains driver.py, pass2-run.py, pass2-helpers.py, pass2-basic.py, pass2-native.py, pass2-legacy-empty.py, pass2-media.py, pass2-report.py, safe public media/report, isolated homes/keyring/target, private console/measurements, private tokens/catalogs, and spawn journals. /tmp/issue9239-base is the preserved baseline worktree. /tmp/issue9239-corrected-pack.log, /tmp/issue9239-pass2-tests.log, /tmp/issue9239-pass2-safe-storage-tests.log retained. Earlier scratch paths remain in historical report. Never upload these directories wholesale.

Only explicit allowlisted sanitized media and this report are published with ghdrop. No raw measurements, catalogs, database, secrets, tokens, environment dumps, or private logs uploaded.

FRICTION readiness|Early launches had no BrowserWindow when IPC was attempted|Discarded those samples, added bounded native-window readiness, retained raw errors privately.
FRICTION interrupted-session|Interactive session interrupted during invalid early legacy attempt|Stopped known owned groups and isolated display; reran as a scripted session with immediate PID journaling and finally cleanup.
FRICTION recovery|Direct unlock and cancellation are different paths|Explicit reload after direct unlock; cancellation restart limitation retained, no automatic recovery claim.
FRICTION capture-width|390 request constrained by desktop minWidth|Actual 840x780 honestly labeled; native mobile coverage unverified.
FRICTION stale-repaint|Initial baseline dark/wide still showed old narrow light pixels despite new native bounds|Excluded initial image; final paired stills recaptured with show/focus, renderer viewport/theme observations and forced compositor repaint.
FRICTION fresh-session|First legacy launch timed out on main inspector and had no window within 100s|Retained failed observation; new private D-Bus/runtime session migrated successfully, not hidden as a first-attempt pass.
FRICTION unavailable-platforms|Native Windows/macOS/KWallet/Niri/Wayland unavailable|Explicit unverified rows, no substitute-platform claims.

## Build fingerprints

```json
[
  {
    "role": "base",
    "sourceSHA": "044f07257c9684ae4543bd1e1ebf9c394e9e3830",
    "mainBundleSHA256": "57a61ad969808a59b16ebcfb86aa565cdf5d97f032092421df90806680897d92",
    "bytes": 5474884
  },
  {
    "role": "head",
    "sourceSHA": "fdee11371a81e2132cf2a24e7a133e4cade7a8b7",
    "mainBundleSHA256": "9838ed54702140be5fb12a482248ed04f1d85c01c0f8c74de315a916343c6a2b",
    "bytes": 5475491
  }
]
```

## Backward compatibility runtime transcript

```json
{
  "baseline": "044f07257c9684ae4543bd1e1ebf9c394e9e3830",
  "writer": "fdee11371a81e2132cf2a24e7a133e4cade7a8b7",
  "observed": {
    "baselineReadsCorrectedCiphertext": true,
    "label": "Corrected async fixture",
    "credentials": 1
  }
}
```

## Corrected-head native menu proof

![Corrected HEAD native menu beside pending GNOME unlock prompt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0bbd1f263fdffb36/p2-locked-menu-settled.png)

## Cleanup verification

All recorded spawn PIDs for the scripted :99, :100 and :101 sessions were waited and have exit codes in pass2-owned-pids.json, pass2-retry-owned-pids.json and pass2-final-owned-pids.json. A final /proc audit found no running captured owned PID; any remaining entry was absent or zombie, not executing. The interrupted first session's known app/target groups and isolated :97 display were stopped; the orphaned owned backend on :3774 was identified by its port, confirmed cwd=/home/ubuntu/wt/issue-9239 and isolated T3CODE_HOME, then terminated. Known session keyring daemon PIDs are gone. Final owned-port inspection found no listener on :3774, :3775, :4788 or :9339. The unrelated server on :3773 was left alone. Media encoders and upload commands finish before this handoff.

Retained for independent proof audit: /tmp/issue9239-evidence/ (including pass2-public/, safe index/report, scripts, private fixtures/raw measurements and process audit JSON), /tmp/issue9239-base/, /tmp/issue9239-corrected-pack.log, /tmp/issue9239-pass2-tests.log and /tmp/issue9239-pass2-safe-storage-tests.log. Private files must stay private. Worktree remains clean at fdee11371a81e2132cf2a24e7a133e4cade7a8b7; no new implementation or seeder commit in this pass.

