# MCP App initial color-scheme evidence

Both sides: Linux, Chromium through T3 Code's Browser panel; real web dev server from separate detached worktrees; 1280 x 800 CSS viewport; dark system appearance; sidebar and thread details closed. Each server started with T3CODE_DEV_SEED=0 vp run dev, against its own fresh database.

Before: 5be6bc99c234b0db92ffb0b3ebd8746fd579112b.
After: 7f2ac6d0e5a612d61b37ad14147d83badc21bdb1.

Seed procedure, identical on each side:
1. Pair the Browser panel with the dev server. Set window.PROOF_WORKSPACE to an empty synthetic workspace directory.
2. Evaluate seed-browser.js. It uploads a synthetic analytics HTML document via the server's attachment API and creates a project over RPC. Save its returned attachmentId.
3. Run python3 prepare-replay.py CHECKOUT ATTACHMENT_ID. This replaces only the dev replay showcase transcript, not production rendering code.
4. Evaluate start-turn.js in the same page. This creates a thread and sends its prompt over RPC to the free dev replay provider. Navigate to the new thread with the environment/thread route. Close sidebar and thread details, set dark appearance and the viewport above.
5. Run capture-driver.mjs's record sequence for that tab and URL. It records a page reload, waits for the app iframe and observes for another six seconds. Run the still sequence separately, compare both screenshots and retain the second only if decoded pixels match.

The synthetic app uses native Canvas/CanvasText colors and waits four seconds before sending ui/initialize. It does not implement its own initial theme handling. The real attachment route injects each commit's theme bootstrap, and the real McpAppFrame chooses its URL and handles initialization.

Observed: before paints white during the four-second delay, then turns dark when initialization supplies the host theme. After paints dark immediately and remains dark through initialization. Loading-state screenshot pairs each had zero differing pixels at least 500 ms apart. Recordings were opened as decoded frame sequences and reviewed through the loading and initialized states before upload. Stills were opened at full resolution.

Scope: synthetic completed MCP tool output replayed through the real adapter, orchestration, persisted history, attachment serving, chat UI and sandboxed iframe. No live Claude or Datadog call, desktop Electron run, mobile run, thread-switch reproduction, or theme-switch test was performed.

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