# Real-app Pi model validation proof

Linux web client, Chromium browser, dark appearance, 1440×1000 CSS pixels (PNG captures at 2× scale). Both sides use fresh isolated worktree `.t3` homes, T3CODE_DEV_SEED=0, the same empty synthetic Git workspace, the same Pi credentials, and the installed real Pi CLI.

Base: fbfebc85378f5d7013adcd72ed86c9ea8cf1ee26 (merge-base with origin/main).
Head: 24dafe03db77bb2be934c2380ca07c227602f8ab.

The seed.py file records the provider configuration seeded for each side. pi-discovery-wrapper.py deliberately exits on the short-lived offline RPC probes, while version checks and live sessions execute the installed real Pi. Both servers logged `WARN Pi RPC discovery failed. { errorTag: 'PiRpcError', operation: 'read' }`. This reproduces the triage wrapper caveat, not an actual interactive startup dialog.

## Run each side

1. Install dependencies with `vp i` in its checkout. Seed its isolated home using seed.py with the checkout, synthetic workspace, and wrapper as arguments. Make the wrapper executable.
2. Start `T3CODE_DEV_SEED=0 vp run dev` from the checkout. Pair a browser with its startup pairing URL.
3. Add the synthetic workspace through `node apps/server/src/bin.ts project add --base-dir .t3 --title 'Pi model validation demo' <workspace>`.
4. Initialize the proof thread through `node apps/server/src/bin.ts thread start --base-dir .t3 --title 'Pi delegation proof' --provider pi --model default --json <workspace> 'Reply with exactly ready. Do not call any tools.'`.
5. Open that thread in the browser. Close the thread details panel to keep host identity private. Use dark appearance and 1440×1000 CSS viewport on both sides.
6. Start a recording. Open the Pi default model picker: only Pi default appears. Close the picker. Type prompt.txt into the composer and press Enter.
7. Wait for the parent turn to complete. The base returns model_unavailable; the head returns completed, executedModel anthropic/claude-haiku-5-5, summary hello.
8. Stop recording. The uploaded videos trim only idle footage after the result (base 18 seconds, head 24 seconds). No task interaction was removed.
9. Blur the composer, close any menu, and capture twice at least 500 ms apart. Both pairs were byte-identical. Inspect final stills and video contact sheets before upload.
10. Run extract-runtime.py against this checkout's own synthetic database and proof thread. It preserves the raw delegate input/output and Pi's capability inventory. The two actual delegate inputs are identical.

Direct CLI control: `pi --model anthropic/claude-haiku-5-5 --no-session --no-tools -p 'Reply with exactly hello'` returned `hello`.

The base also had one earlier exploratory proof thread with the same request, which returned the same error. The paired recordings use newly initialized proof threads on both sides.

Nothing was committed or posted to the pull request. No production database was seeded or modified. Evidence prepared by GPT-6.1 Sol through the Codex harness; the real Pi parent and child used Claude Haiku 5.5.
