# Desktop disk-full proof

Both commits were built with `vp i`, `vp run build:desktop`, and `node node_modules/electron/install.js` from apps/desktop. Electron 44.10.1 ran on Linux x86_64 under headless-desktop/Xvfb, 1920x1080, light theme. Each launch used fresh T3 home and XDG config directories, with automatic data seeding disabled. No project or thread was imported.

Invoke the attached driver under headless-desktop:

```
headless-desktop python3 driver.py CHECKOUT SIDE MODE OUTPUT_DIRECTORY LOG_VOLUME
```

SIDE is base or head; MODE is control, ENOSPC, or EDQUOT. Use a new output directory for every invocation and run serially. Dependencies: python3-tk, ImageMagick, ffmpeg, xdotool, Electron runtime.

For ENOSPC, LOG_VOLUME is a dedicated 256 KiB tmpfs owned by the invoking user. For EDQUOT, it is a dedicated 64 MiB ext4 loop filesystem created with `mkfs.ext4 -O quota`, mounted with `usrquota`, owned by the invoking user, and limited using `setquota -u USER 256 256 0 0 MOUNTPOINT`. The quota filesystem still had 52,424 KiB available when quota writes failed. Control uses a normal writable directory.

The driver opens stdout and stderr with O_APPEND, launches the actual built desktop main process, waits 30 seconds, records the screen, fills the volume and appends to both logs until both fail, then sends SIGTERM and waits 20 seconds. It records the real exit code and visible Error windows. Hung processes are SIGKILLed only after evidence is captured. Controls skip volume exhaustion. A separate Electron-as-Node write probe records the underlying errno where present; it does not replace the real app run.

The video begins with the welcome screen and shows the same fill-and-quit interaction. The status overlay belongs to the reproduction driver. Gray rectangles redact the environment display name and local paths in stack frames; exception text and the Node console-write stack remain visible. Result stills were checked against another capture 500 ms later for pixel equality.

Base: 73cbc6b1ede1692c2642b01cf55d9ef75c37c5f4 (merge-base).
Head: bd0856c0b18debd559e6087c4139e0a4120df022.

Proof performed using GPT-6.1 through the Codex harness.
