# Issue 3714 evidence capture

Issue: [#3714](https://git.cafe/pingdotgg/t3code/issues/3714). Captured 2026-10-22 UTC by gpt-6.1-sol, Codex harness.

Base: [3b95e7831b](https://git.cafe/pingdotgg/t3code/commit/3b95e7831b11b17627dff16843bc087bfca397ec). Final: [707d3a9487](https://git.cafe/pingdotgg/t3code/commit/707d3a9487988f69f6f0e16666142b8835d85c2c), branch fix/issue-3714. Final checkout clean before and after capture. The evidence agent changed no implementation, test, or documentation files in the shared checkout; no PR, push, merge, or forge write. Lead-owned dev server left running and untouched.

## Unchanged final tests: red and green

Command for both revisions:

```sh
PLAYWRIGHT_BROWSERS_PATH=/tmp/tmp.LFIo8iGZQi vp test run apps/server/src/preview/ServerBrowserPage.test.ts apps/server/src/mcp/PreviewAutomationBroker.test.ts
```

Base: 2 failed, 40 passed (42), exit 1. The two failures are the page's missing-target diagnostic assertion and the broker's target-message forwarding assertion, not setup failures. Final: 42 passed (42), exit 0. Full commands, SHA, assertions, expected/received messages and exit codes are in tests-base.txt and tests-fix.txt.

The exact final committed test files were copied into a disposable detached base worktree as a test-only overlay; base implementation and contracts stayed unchanged. Both runs used identical file bytes:

- ServerBrowserPage.test.ts SHA-256: 3f3ddd419250f1b4ce62931200c42da0874113ed42f88e2e6ae23457d0d93478
- PreviewAutomationBroker.test.ts SHA-256: 4af3b8a748440817dda660f5138fd76430544266148df2e907ae0d9a2a3ebc18

No new tests or flaky navigation regression were added. Existing tests cover refs, ambiguity, dialog completion and broker compatibility alongside the regression tests.

## Pinned real-service runtime

runtime.mjs ran unchanged once against each exact revision above. runtime-base.jsonl and runtime-fix.jsonl record inputs, broker-visible errors, timeout tags, elapsed milliseconds, Chromium identity, clientId server-browser, counters and source SHA. The driver and raw transcripts are included in the bundle.

Environment: Linux x86_64, Node v26.12.1, installed Chrome for Testing headless shell 154.0.8037.92, viewport 1280x800. Actual PreviewAutomationBroker, ServerBrowser, ServerBrowserContexts and ServerBrowserPage services drive a real Chromium tab against a temporary loopback HTTP fixture. Real configuration, manager and unavailable-desktop channel are used. A fixture identity service supplies the environment ID, and the executable dependency selects the installed binary read-only. Sandbox explicitly disabled for this isolated browser process. State and profiles are temporary, never live ~/.t3 state. No additional T3 dev server was started.

This is direct broker/service integration, **not the app's MCP HTTP transport**. The transcript's isError field is the driver's mapping of broker success/failure, not an observed MCP envelope. It proves final broker error text and actual server-browser behavior; it does not claim the running host loaded final source.

Observed on both revisions:

- CSS missing preflight count 0 and a unique missing supported role locator time out at 15000ms with no counter change. Base returns the generic summary. Final names each exact target, qualifies the observation as after the timeout and suggests a fresh snapshot.
- Existing hidden and disabled targets each have preflight count 1. Final says the target still matches after timeout and warns the click may have happened. The fixture counter remains 0 for those controls. Hidden exercises the scroll wait; disabled exercises locator.click after locating its point.
- Working CSS click before failure and recovery afterward succeed on the same tab/connection. Fresh snapshot aria-ref and coordinate clicks each succeed once. Working counter ends at 4. Auto-wait begins with a disabled button, enables it during the normal wait, and increments once. badClicks remains 0.
- Slow-navigation click reaches the HTTP fixture exactly once and persists dispatched=yes, but times out. On final the post-timeout count is blocked by pending navigation, so the bounded fallback preserves the original locator.click timeout; it does not manufacture a target-state claim. Releasing navigation, waiting for the destination, and navigating back all succeed. This observation is not a deterministic red/green wording regression test.

## Focused fault/compatibility probes

compatibility.mjs and compatibility-base/fix.jsonl are controlled probes, separate from the real-browser transcript. Final preserves the original timeout when count rejects and when count never settles (251ms observed), and preserves coordinate failures. Optional reason round-trips on final, while old no-reason payloads retain the exact old summary. A non-click server waitFor timeout forwards a reason capped at 500 characters; the legacy host's reason remains absent. Each request is delivered once. These do not claim complete connection-mode or fault coverage.

## Visual and surface scope

Visual matrix **EMPTY**. The base-to-final diff is five server/contracts/test files, 113 insertions and 4 deletions. No rendered UI, layout, native-client UI, settings, palette, keybinding, provider adapter, or documentation changes. No screenshot or recording rows are justified. The runtime snapshot bitmap was deliberately omitted from the transcript; only its text/ref information is used as interaction evidence.

The supplied live-preview-before-unknown-sha.txt is retained unchanged as symptom-only evidence. Its running host SHA remains UNKNOWN and it is not labeled as the base revision.

## FRICTION

- Built-in preview status/open succeeded in an own background tab, but the host source SHA was unknown. Pinned proof therefore uses the explicitly authorized isolated real-service runtime fixture; full MCP HTTP transport remains unverified.
- Direct desktop/Electron attachment unavailable and UNVERIFIED. Headless proof must not be presented as native desktop verification or proof for the originally reported old desktop build.
- Mobile-native, remote/relay/tunnel and multi-environment transport paths were not exercised; no distinct rendered path changed.
- Pending navigation prevents the post-timeout count from completing. The real runtime exercised the bounded original-error fallback; no timing-dependent test was introduced.
- No new lint/typecheck runs were performed in this evidence-only capture. The two scoped test files are the executed checks reported here.
