# Reproduction driver

Environment for both recordings and stills: real web dev client and its own server,
Linux, Chromium, dark theme, 1280 x 800 CSS viewport (device scale 2).
Each commit ran from its own detached worktree with a fresh database created by
`T3CODE_DEV_SEED=0 vp run dev`. No production data was copied.

1. Pair the browser with that dev server. Keep the automatic `server` project.
2. Add an empty synthetic workspace as a project titled `proj`:
   `node apps/server/src/bin.ts project add --base-dir .t3 --title proj <synthetic-workspace>`.
3. In Settings > Labs, enable Boring sidebar. Leave both sort settings at their
   default, Last user message (`updated_at`). Set dark theme and a 1280 x 800 viewport.
4. Run `seed.js` in the authenticated web page. It uses the same web start-turn
   command as the Replay console helper, with explicit target projects and titles.
   It removes setup-only threads, then creates A and B in server and D in proj,
   with 1200 ms between messages. Messages are user-authored via the web transport.
5. Open Thread A. Close its details panel. Wait for the Replay turn to finish.
   Confirm the sidebar shows proj/D, then server/B/A.
6. Start the browser recording. From the corresponding worktree, run:
   `node apps/server/src/bin.ts thread send --base-dir .t3 <A-id> "Update from a delegate thread (agent-sent)" --json`.
   Use `window.evidence.A` from step 4. This CLI invokes the real MCP t3_thread_send tool.
7. Wait for the agent notice and Replay response. Stop recording after it finishes.
8. Capture two stills with a 500 ms pause between screenshot requests; compare
   pixel data and keep a still only when the images are identical. Both pairs
   used here had zero different pixels. Open the stills and recording frame
   contact sheets to inspect the entire interaction before uploading.

Observed on base 41443e5706: server moves above proj after the agent message.
Observed on head 51449009b0: proj stays above server after the same message.
Thread B stays above A on both sides, as expected from the existing Boring
sidebar thread sorting behavior.

Read-only inspection of each isolated dev database confirmed:

| Message | role | createdBy | creationSource |
| --- | --- | --- | --- |
| Thread A | user | user | web |
| Thread B | user | user | web |
| Thread D | user | user | web |
| Update from a delegate thread (agent-sent) | user | agent | mcp |

Recordings and screenshots are unmodified app captures. The details panel was
closed to exclude environment information. Setup-only captures containing
operational details were excluded from publication.

Not covered: native desktop/mobile, project selection in the command palette,
after-delete navigation, older-server timestamp fallback, and independently
triggering each other source of agent-authored notices.

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