# Provider instance ID proof

AI-assisted; verified with the tests and tools listed above.

The standalone driver uses Playwright directly. It does not import the pipeline or the repository's e2e fixtures.

1. Create separate clean checkouts of base `a7779fc558e0f567384a05fb589b02cc520630d5` and head `1b01697eac889b40770b2d98989df06c7c50d301`. Run `vp i` in each.
2. Set `PROOF_SCRATCH` to an empty private output directory. Start `T3CODE_DEV_SEED=0 vp run dev` in each checkout, redirecting output to `$PROOF_SCRATCH/base-server.log` and `$PROOF_SCRATCH/head-server.log`. Retain their process IDs for cleanup. Do not use existing T3 data. Wait for both pairing URLs in the logs.
3. In a separate tools directory, create a `scripts` subdirectory and run `npm install --prefix scripts playwright-core@1.64.1`. Install its browser with `node scripts/node_modules/playwright-core/cli.js install --only-shell chromium`. Set `PROOF_CHECKOUT` to that tools directory (or any installed checkout with `scripts/node_modules/playwright-core`).
4. Run `node driver.cjs` with both environment variables exported. It reads the private startup links, waits for pairing to finish, then records only Settings interactions in fresh authenticated browser contexts.
5. Each side uses Chromium, dark theme, 1280×800. For constructor, toString and valueOf: Settings → Providers → Add provider → keep Codex → Configure manually → enter the ID as Label and Instance ID → Next → Add instance. Reload Providers after all attempts.
6. A new timestamped output directory contains the screenshots, recording and observations. Before each still the driver requires two screenshots 500 ms apart to be byte-identical. A fixed banner identifies the submitted ID. Configuration input values/placeholders and toast descriptions are hidden before rendering; the machine hostname is replaced with “Local environment”. These presentation masks do not change submitted values or server behavior.

Observed: all three creates fail on base, and none is listed after reload. All three succeed on head and remain listed after reload. The head's settings file also contains all three own properties; base contains none. No model turn is run.

Public recordings were converted losslessly in content from WebM to browser-compatible H.264 MP4 using ffmpeg (`-c:v libx264 -pix_fmt yuv420p -movflags +faststart`). All stills and recording contact sheets were visually inspected before upload.

Stop the retained dev processes and remove only the checkouts and scratch directories created for this proof. Startup logs and browser storage contain credentials and must remain private.
