# Web Lineage proof for [ #30334](https://github.com/pingdotgg/t3code/pull/30334)

Both sides run their own unmodified app, with fresh isolated homes and synthetic data. Base: [ab2bf940f6](https://github.com/pingdotgg/t3code/commit/ab2bf940f620f4ddf920588eb6c6cc88f2e67428). Head: [dccfafb07e](https://github.com/pingdotgg/t3code/commit/dccfafb07e197c32abeb315d034dcae5b5bcbdf1).

## Driver

Copy seed-driver.ts to apps/server/proof-driver.ts in each checkout (untracked). Install dependencies with `vp i`. Start each checkout with `T3CODE_DEV_SEED=0 node scripts/scenarios/start-app.ts web <fresh-home> 127.0.0.1 <web-port>`; use different homes and ports. Once each server is ready, run `node apps/server/proof-driver.ts <fresh-home>` in its checkout and retain the process until done.

The driver creates repoB with a small math.py, registers it through the CLI, enables Linked environments, and issues a synthetic linked-client MCP session labelled T3 Code · A. Through the real HTTP MCP endpoint it launches Parent on A carrying delegatedFrom = {environmentId: scenario-environment-a, threadId: scenario-parent-a, title: Parent on A}. This reproduces the receiving side of remote delegation without a second live agent. An in-process OpenCode 1.19.5 protocol replay reports one general native task, its child session, and its completed answer. The real OpenCode adapter creates the subagent through makeSubagentChildThread; the driver never inserts or rewrites thread rows.

## Browser steps used on both sides

1. Open the pairing path written by start-app under the matching web origin, reload if already on the pairing route, and wait for sign-in to leave /pair.
2. Read child.json in that home. Open /<environmentId>/<child.threadId> by link. The environmentId is in its t3-thread link.
3. Use Chromium, light theme, 1440 × 900 CSS pixels (device pixel ratio 2). Leave the thread details rail visible.
4. Read the Lineage card. Base shows two Parent on A rows: the remote delegator plus the real local parent. Head shows only the local parent marked Done. Both retain the From T3 Code · A header badge because linkOrigin is retained.
5. Capture twice at least 500 ms apart; the PNG hashes were identical on each side. Inspect each image before uploading.

The model name in the UI comes from the replay; no paid model ran. This verifies the native child projection and the real web UI, not live cross-environment forwarding, Grok behavior, or a native mobile subtitle.
