# Evidence index — issue 17202

Captured implementation head: `43104e9349bd34737af38919d8dd6d17b7b8e08e`.
Base: `ff1f6fd8849cdd2e0a07096eac4fd4440d1ad989`.
Worktree: `/home/ubuntu/wt/issue-17202`, clean before and after verification.
Before runtime build: `3b95e7831b`; independently checked that the three affected paths have no diff between that build and the base. Before runtime is not claimed to run the exact base SHA.

Visual matrix: **0/0 rows**. Mandatory final runtime: **1/1**, using the explicitly authorized lead capture. Automated proof rows: **6/6**, with boundaries below. No repository edits, application dev servers, browser/native launches, screenshot diffs, or recordings in this evidence pass. Focused tests use their own HTTP test fixtures.

Published head: `a44ddee637e7077b2247488c0b9f1fc167850b73`, after merging main `26c3625f484eadd4d5b6ca5a3dd1f8f8bd5533b4`. All three affected files are identical to the captured implementation head. Main added only unrelated mobile Markdown changes.

## Evidence

- [Raw fresh-session catalog and actual ordinary call/result](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/71023c4c3020ea10/17202-raw-session-proof.json): extracted from Claude Code durable session `bea7c6b6-18cd-4ed5-9d02-3786971050ee`; all 82 offered tool names and the matching invocation/result. Strip `mcp__t3-code__` when comparing logical tool names. No preview/device tools or preview controls are present.
- [Final proof matrix](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/45eee589894c78fc/17202-proof-matrix-final.md).
- [Corrected final runtime transcript](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/54b48fa86adf20d8/17202-final-runtime-transcript.txt). Supersedes the initially uploaded DPR metadata; this index uses only the corrected version.
- [Before runtime transcript](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2a63404c541ae920/17202-before-transcript.txt).
- [Original red regression](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/280beb53bb5558d4/17202-red-output.txt).
- [Preview controls red/green](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/389803a18d849586/17202-controls-output.txt).
- [Final focused green log](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d498afce7d909e26/17202-final-green-output.txt): exit 0, 3 files passed, 26 tests passed, 16.53 seconds, at final head. Earlier 224/24 runs are not added to this count.

## Exact final runtime conditions and observations

Lead-captured real Linux web dev environment: web localhost:7908, server port 15948, isolated `.t3`; final running build recorded as the final head above. Claude Code 2.1.303, Claude Opus 5.5. Fresh provider session created after final server reload. Settings > Integrations: agent browser access false and agent device access false (default), no project override.

Measured render environment: Chrome 154.0.0.0 on Linux x86_64, viewport 1280×800 CSS pixels, devicePixelRatio=2, no device emulation. Metadata correction is recorded locally in `/tmp/17202-render-environment.txt`.

The reused session transcript reports zero preview_* and zero device_* tools; explicitly absent: preview_snapshot, device_screenshot, t3_preview_list, t3_preview_close. These are logical tool names without any harness namespace prefix. orchestrator_capabilities remains offered and its one invocation succeeded. No absent tools were called or fallback browser/device tools used.

The supplementary session-log extract supplies the raw model-request tool catalog plus the actual orchestrator_capabilities invocation and matching successful tool_result for the same fresh thread. It contains no system prompts, private reasoning or credentials. It is a Claude session catalog, not an HTTP tools/list capture; the automated matrix independently exercises raw HTTP discovery.

## Proof rows

| Row | Satisfied by | Scope |
| --- | --- | --- |
| R1 | Final HTTP test and fresh disabled lead session | Neither permission: denied families, both images and both controls absent; probe retained |
| R2 | Final HTTP test | Preview only: preview family, image and controls present; device absent |
| R3 | Final HTTP test | Device only: device family/image present; preview family/image/controls absent |
| R4 | Final HTTP test | Both permissions: both families, images and controls present; probe retained |
| R5 | Final device toolkit and preview controls handler tests | Denied device_list fails tool-not-found; granted screenshot image behavior; control capability enforcement |
| R6 | Final HTTP test | Ungated probe retained across all four combinations; no capability requirement added to ordinary/HTML registration |

Exact final command, run from the worktree root:

```sh
vp test run apps/server/src/mcp/McpHttpServer.test.ts apps/server/src/mcp/McpDeviceToolkit.test.ts apps/server/src/mcp/toolkits/previewControls/handlers.test.ts > /tmp/17202-final-green-output.txt 2>&1
```

## Visual and verification limits

No visible differences are expected because the diff changes server discovery and server tests only; no render implementation changed. No pixel comparison was performed and no pixel-sameness claim is made. The optional screenshot is omitted because it adds no proof for the empty visual matrix. The obsolete pre-controls-fix screenshot was not used.

Remaining unverified: exact enumeration of every granted standard tool; a full HTTP denied-call matrix for preview/image/control tools; live enabled-permission sessions; every provider/client/transport combination. These are beyond the required runtime and automated matrix. Shared server registration is the changed boundary; web/desktop/mobile renderers, contracts and provider adapters are unchanged. No repo-wide tests/typecheck or new lint run was performed in this pass.

## FRICTIONcategory|event|prevention

- Evidence metadata | Initial runtime transcript guessed DPR1; measured DPR2 correction arrived before assembly | Use measured environment metadata and the corrected immutable artifact URL.
- Evidence freshness | Intermediate captures predated preview controls gating | Bind evidence to the final running SHA and a fresh provider session; omit obsolete screenshot.
- Proof scope | Server discovery fix could trigger redundant browser/native capture | Follow the audited empty visual matrix and reuse the authorized final runtime capture.
- Evidence strength | Initial rendered transcript omitted the actual catalog and tool result; recovered from the same durable session | Save a redacted catalog and actual result with the initial capture.
- Evidence accounting | Successive test runs risk inflated totals | Report this final run as 26 passing tests across 3 files, without summing earlier runs.
