# Rebuild the clipboard evidence

The canonical captures are in `run-2026-10-30T0757`. Earlier runs and the
`exploratory` directory are retained only as raw work history, not proof of
an idle-to-Copy transition.

## Servers and real agent seed

Use separate checkouts at before [1cf14a498f](https://git.cafe/pingdotgg/t3code/commit/1cf14a498fa27712a305097012c6f8f920a6da33)
and after [8f66a27e8d](https://git.cafe/pingdotgg/t3code/commit/8f66a27e8d63292f6bdaf1e3a546debaa93797f5).
Run `vp install` in the baseline checkout. Start each from its own checkout
with `T3CODE_DEV_SEED=0 vp run dev --home-dir <new-isolated-home>`.
Read its actual web port and private startup pairing URL. Never reuse the
developer's live database or the capture homes from this package.

Use the T3 preview browser, with no browser security overrides. It grants
`clipboard-write` at the context level itself; the same grant is present
on both revisions. Open a fresh tab on each startup pairing URL. Execute
`seed-driver.mjs` through the preview tool surface with `seed-prompt.txt`
as `prompt`, leaving the default Codex GPT-6-Astra / Medium / Full access
selection. This is a real agent turn, not a manufactured tool item.

The startup app creates the default project and new thread. After the real
turn finishes, close Thread details and the main sidebar through their
snapshot refs. Rename both threads to `Clipboard Copy Test` with the real
thread menu. Use 1440 x 900 CSS pixels, dark appearance, default fonts and
zoom. Apply `freezeClock` from `seed-driver.mjs` after the turn completes.
The server clock and persisted turn durations remain real; the fixture has
no clock. Reduced-motion emulation is not exposed by the preview tools.

## Capture drivers

The scripts accept the `tools` object available inside `functions.exec`.
They deliberately use T3 preview tools rather than another browser driver.
For example, read `capture-driver.mjs` with `tools.exec_command`, then:

```js
const capture = eval('(' + source.replace('export async function captureOwner', 'async function') + ')');
const result = await capture(tools, { tabId, side: 'before', row: 'R1', dir: newTimestampedOutputDirectory });
```

Create the output directory first. Retain the returned JSON. Run R1 before
R2 on each revision. Run the two revisions sequentially because Chromium
shares its clipboard. Every recording resets it to `clipboard-sentinel-27402`.
The driver requires the last loaded page's output to be `idle`, uses real
click and Ctrl+V events, and reads the unsent paste target afterward.
R2 opens and closes the actual full-screen dialog at 100% zoom. No message
is submitted after pasting.

Each still waits for fonts, observes a 500ms quiet resource-timing window,
blurs the paste target, moves the pointer to blank space, and checks two
PNG captures at least 500ms apart for exact pixel equality. The preview
tool automatically downsamples the whole viewport to 1280 x 800 PNG;
recordings retain 2880 x 1800 pixels at DPR 2.

For R3, evaluate `open-panel-harness.js` in each real app tab, then run the
capture with `row: 'R3'`. It decodes the real published attachment reference,
fetches the actual byte length, and calls the existing panel store's
`openAttachment` with `htmlRender: true`. The filename visibly labels this
as HARNESS R3. This is not proof of a production producer of the flag.

For R4, evaluate `guest-component-harness.js` after opening R3. It mounts
the actual revision's `GuestHtmlRender` with a visible harness disclaimer.
It substitutes the already-published owner asset URL for the unavailable
guest render URL, preserving the actual component's iframe attributes and
the real asset response. Its sizing reference uses the measured 80px short
fixture height. Run `row: 'R4'`; the paste target is the labelled neutral
textarea. This does not verify Connect, invitation, redemption, a guest
session, guest timeline, HTTPS, or the guest asset route/CSP.

Run `generate-evidence.py` against the returned captures to build sheets,
video inspection strips, and two lossless diffs per pair. Diff0 uses the
maximum RGB channel delta multiplied by 255 and clipped. DiffT marks pixels
whose maximum RGB channel delta is greater than 16/255. No masks or
alignment transformations are applied.

## Scope and cleanup

R1/R2 are real owner-app captures; R3 is the matrix's labelled panel-state
harness. R4 has supplementary component-harness captures, while the real
redeemed guest row remains unverified because T3 Connect is unavailable.
Native Electron and mobile are outside this matrix.

All data is synthetic. Server logs have pairing URLs and signed asset
paths redacted. No authentication state or database is in the package.
The agent stopped its servers, closed its tabs, removed only the baseline
checkout it created, and left the after checkout at the requested head.
