# Real-app comparison transcript

Synthetic replay output and a real scratch file; fresh isolated app state on each commit. Web: Chromium 1280×800. iOS: native dev client, pooled iPhone, 402×874 points. Light theme on both.

Native setup used --action-timeout 120000 on the final head retry.

## web base: [b3fdf2b10f](https://github.com/pingdotgg/t3code/commit/b3fdf2b10fb92e5dbc71a83381c602a8a464bbca)

Status: failed

ASSERTION_FAILED: 2 soft assertions failed
1. expected 1 to be 2
2. expected 1 to be 0

- passed: app.open <pairing link>
- passed: locator.tap getByRole("button", name: "Scratch file links, Done, scratch-demo")
- passed: locator.waitFor getByText("End of scratch report.") → visible
- passed: locator.waitFor getByRole("button", name: "Copy message").first() → visible
- passed: locator.waitFor getByText("Syncing messages...") → hidden
- passed: app.screenshot scratch-path-rendering
- passed: browser.evaluate 
- passed: locator.tap getByRole("link").filter({ hasText: "notes.md" }).first()
- passed: locator.waitFor getByText("Exact scratch file contents: river-stone-30768.") → visible
- passed: app.screenshot scratch-file-viewer
- passed: locator.tap getByRole("button", name: "Toggle right panel")
- passed: locator.tap getByRole("link").filter({ hasText: "notes.md", hasNotText: "claude-1000" }).last()
- passed: locator.waitFor getByText("Exact scratch file contents: river-stone-30768.") → visible
- passed: app.screenshot explicit-link-viewer

## web head: [e465ff3b49](https://github.com/pingdotgg/t3code/commit/e465ff3b4984144192661198507a9ca30159cff1)

Status: passed

- passed: app.open <pairing link>
- passed: locator.tap getByRole("button", name: "Scratch file links, Done, scratch-demo")
- passed: locator.waitFor getByText("End of scratch report.") → visible
- passed: locator.waitFor getByRole("button", name: "Copy message").first() → visible
- passed: locator.waitFor getByText("Syncing messages...") → hidden
- passed: app.screenshot scratch-path-rendering
- passed: browser.evaluate 
- passed: locator.tap getByRole("link").filter({ hasText: "notes.md" }).first()
- passed: locator.waitFor getByText("Exact scratch file contents: river-stone-30768.") → visible
- passed: app.screenshot scratch-file-viewer
- passed: locator.tap getByRole("button", name: "Toggle right panel")
- passed: locator.tap getByRole("link").filter({ hasText: "notes.md", hasNotText: "claude-1000" }).last()
- passed: locator.waitFor getByText("Exact scratch file contents: river-stone-30768.") → visible
- passed: app.screenshot explicit-link-viewer

## ios base: [b3fdf2b10f](https://github.com/pingdotgg/t3code/commit/b3fdf2b10fb92e5dbc71a83381c602a8a464bbca)

Status: failed

ASSERTION_FAILED: 3 soft assertions failed
1. expect.toHaveCount failed
   locator: getByRole("link", name: "notes.md, /tmp/claude-1000/.../notes.md")
   expected: count 0
   observed: count 1 (match count 1)
2. expect.toHaveCount failed
   locator: getByRole("link", name: "notes.md, Abbreviated destination")
   expected: count 0
   observed: count 1 (match count 1)
3. expect.toHaveCount failed
   locator: getByRole("link", name: "notes.md, /tmp/factory-pr-30768-a1794362420-evidence-4/session/notes.md")
   expected: count 1
   observed: count 0 (match count 0)

- passed: device.installApp <cached dev client>
- passed: device.openLink t3code-dev://expo-development-client/
- passed: device.alert accept
- passed: expect.toBeVisible getByRole("button", name: "Add environment")
- passed: device.openLink t3code-dev://connections/new
- failed: device.alert accept
- passed: app.startRecording scratch-links-interaction
- passed: locator.tap getByText("Scratch file links").first()
- passed: locator.waitFor getByText("End of scratch report.") → visible
- passed: app.screenshot scratch-path-rendering
- failed: expect.toHaveCount getByRole("link", name: "notes.md, /tmp/claude-1000/.../notes.md")
- failed: expect.toHaveCount getByRole("link", name: "notes.md, Abbreviated destination")
- failed: expect.toHaveCount getByRole("link", name: "notes.md, /tmp/factory-pr-30768-a1794362420-evidence-4/session/notes.md")
- passed: locator.tap getByRole("link").filter({ hasText: "notes.md", hasNotText: "Abbreviated" }).filter({ hasNotText: "claude-1000" }).first()
- passed: locator.waitFor getByTestId("source-native-code-view") → visible
- passed: app.screenshot scratch-file-viewer

## ios head: [e465ff3b49](https://github.com/pingdotgg/t3code/commit/e465ff3b4984144192661198507a9ca30159cff1)

Status: passed

- passed: device.installApp <cached dev client>
- passed: device.openLink t3code-dev://expo-development-client/
- passed: device.alert accept
- passed: expect.toBeVisible getByRole("button", name: "Add environment")
- passed: device.openLink t3code-dev://connections/new
- failed: device.alert accept
- passed: app.startRecording scratch-links-interaction
- passed: locator.tap getByText("Scratch file links").first()
- passed: locator.waitFor getByText("End of scratch report.") → visible
- passed: app.screenshot scratch-path-rendering
- passed: expect.toHaveCount getByRole("link", name: "notes.md, /tmp/claude-1000/.../notes.md")
- passed: expect.toHaveCount getByRole("link", name: "notes.md, Abbreviated destination")
- passed: expect.toHaveCount getByRole("link", name: "notes.md, /tmp/factory-pr-30768-a1794362420-evidence-4/session/notes.md")
- passed: locator.tap getByRole("link").filter({ hasText: "notes.md", hasNotText: "Abbreviated" }).filter({ hasNotText: "claude-1000" }).first()
- passed: locator.waitFor getByTestId("source-native-code-view") → visible
- passed: app.screenshot scratch-file-viewer

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