# Evidence index — preview snapshot takeover

Actual BEFORE [c4fa4629](https://git.cafe/pingdotgg/t3code/commit/c4fa4629eb645b95aae2beef56c70f705b736049); actual AFTER [b7fddd87](https://git.cafe/pingdotgg/t3code/commit/b7fddd87a69bb9f868bfd54928aaf4ae881c9432). AFTER is the final merged checkout, not the earlier replacement. Baseline preview source is identical to newer main [8bcef34f](https://git.cafe/pingdotgg/t3code/commit/8bcef34f16ca2a08aa19c35dd64b71290bd4412f): `git diff c4fa4629eb645b95aae2beef56c70f705b736049 8bcef34f16ca2a08aa19c35dd64b71290bd4412f -- apps/server/src/preview` was empty. Captures are not relabelled as that newer main.

**What else changed:** at125% zoom, PNG output changes from1600x889 to1280x711, and the old black right/bottom padding and wrong backdrop geometry disappear. Raw PNGs and clearly labelled normalized comparisons are both retained. Wide plain pages retain visible composition but have nonzero text, border and diagonal-edge resampling differences (C1:99,213/910,080 pixels differ at threshold0;46,846 exceed10; mean absolute RGB difference1.1814). A6b and XML also have nonzero edge/text resampling differences. Only A3,A4,A6a,C2 support a zero-difference claim.

**Reverse/timing observation:** Reset zoom returns the menu label100%, but both captures still appear enlarged. The125%-layout interpretation after reset is inferred from the image/reference match; no post-reset runtime metrics were captured. Reconnect has a visible blank app reload interval before correct live content returns in both versions. Do not describe this as seamless or assert the reset fully restores layout. Whole-client evidence also differs in synthetic conversation text, timestamps, activity counts and reload timing; those are visible fixture setup differences, not preview implementation claims.

Coverage:12/12 mandatory matrix rows captured,13 scenarios because A6 has640 and641 subcases. N1 is a thirteenth conditional row and remains unverified. This is capture coverage, not an assertion that every acceptance criterion passed. XML is appended as X1 and AFTER SHA supersedes097dc0d6 in the original matrix. The supplied test interpretation is corrected: main-red is intentional baseline evidence; owner reported XML-fix46/46 green. Capturer did not run tests or certify the final merged-head rerun.

Environment: Linux6.1.102 x86_64; matching Chrome for Testing156.0.8078.70. Actual service capture is production headless Chromium, defaultDPR2; independent reference is headed Chromium under Xvfb3200x2000x24. Root font16px, fixture18px sans-serif; fontconfig maps sans-serif to Liberation Mono. Widths below are configured CSS viewports, height800. At125%, measured layout1152x640,DPR2.5,scrollY600. Viewer recordings are1440x1000,DPR1,25fps. Reference display initially:209, final interaction references:210, same geometry/depth.

Snapshot route: actual fresh dev servers (before13773/5733; after15092/7052), explicit `/tmp/ev-20924`, `T3CODE_DEV_SEED=0`, `--no-seed`; real provider-issued thread-scoped MCP `preview_snapshot(save=true)`. No helper capture imports. Browser/provider auth and raw pairing footage excluded. Outer client recordings use a separate direct headed Playwright client against the fresh server. [Reproduction route and limitations](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/45b10ae902357e85/capture-route.md); [revision/fixture manifest](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1be62b4ce986c07a/manifest.json); [environment](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0bc89619e145a495/environment-info.json); [nonsecret raw service trace](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e1df9dbc5f6c7293/public-trace.json).

Static pages are inline-only, no animations/transitions/external subresources. Service capture waits load+fonts+600ms, then two500ms-apart PNGs are byte-identical. Reference waits networkidle+fonts and emulates reduced motion. **Limitation:** server MCP has no reduced-motion emulation setting, so its media preference stayed no-preference; the synthetic content itself has no motion. N1 requires a genuine native attachment and was not substituted with a server-owned page.

Normalization: preserve all raw headed references, then Pillow LANCZOS to actual AFTER dimensions. Baseline zoom is also normalized1600x889→1280x711; this is labelled, not hidden. Each before/after, before/reference and after/reference pair has threshold0 RGB difference amplified4× and a mask for max-channel difference>10. [Exact processing script](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5df00f7194dca05d/process-images.py); [all39 pair statistics](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/05fd49354af5228c/image-diff-statistics.json). Review sheets show every pair and both thresholds; native image files remain unmodified.

|Row / fixture / configured viewport / theme|BEFORE [c4fa4629](https://git.cafe/pingdotgg/t3code/commit/c4fa4629eb645b95aae2beef56c70f705b736049) raw PNG|AFTER [b7fddd87](https://git.cafe/pingdotgg/t3code/commit/b7fddd87a69bb9f868bfd54928aaf4ae881c9432) raw PNG|Headed raw / normalized reference|Labelled comparison + both diff thresholds|Observation|
|---|---|---|---|---|---|
|A1 / blur / 1440x800 / light|[1280x711](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/37973480ba15b8f9/before-A1.png)|[1280x711](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ab2f0795f306fbab/after-A1.png)|[2880x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/17c543a61494e1fb/reference-A1-raw.png) / [normalized](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/801d9ef96557441c/reference-A1-normalized.png)|[review all pairs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7a6bb9bc917a7524/comparison-A1.png)|Blue-only/mirrored backdrop fixed; soft stripes and right red restored.|
|A2 / blur / 1440x800 / dark|[1280x711](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/08e375ec7ee119c6/before-A2.png)|[1280x711](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f0aafc91aff79bdd/after-A2.png)|[2880x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a962a9e3444319c3/reference-A2-raw.png) / [normalized](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/662fa65bee062771/reference-A2-normalized.png)|[review all pairs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1d4cbc3a334111e7/comparison-A2.png)|Dark backdrop fixed; right red and diagonal detail restored.|
|A3 / blur / 390x800 / light|[780x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f91b0f3d71e50398/before-A3.png)|[780x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/91a142a64ec7f381/after-A3.png)|[780x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c7130b383b24bddb/reference-A3-raw.png) / [normalized](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0778084d6f2ed18f/reference-A3-normalized.png)|[review all pairs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8efd29ab5302a9c9/comparison-A3.png)|Unshrunk control: before/after/reference byte-identical.|
|A4 / blur / 390x800 / dark|[780x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/02d208467af5f72c/before-A4.png)|[780x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/47602e6d6e7f6abd/after-A4.png)|[780x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/160b61805865e22e/reference-A4-raw.png) / [normalized](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1aab2fc18bcfa0c5/reference-A4-normalized.png)|[review all pairs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6845c7258910433e/comparison-A4.png)|Unshrunk dark control: before/after/reference byte-identical.|
|A5 / blur / 1280x800 / light|[1280x800](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1c4717f6721b6560/before-A5.png)|[1280x800](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a04e9bf437efa0c1/after-A5.png)|[2560x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d0115f7f3d7eae64/reference-A5-raw.png) / [normalized](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/776286db0c672cf7/reference-A5-normalized.png)|[review all pairs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c1b4a50728267d7d/comparison-A5.png)|Original1280-width reproduction fixed.|
|A6a / blur / 640x800 / light|[1280x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6e6b2e09efabc751/before-A6a.png)|[1280x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f498f4c1e28105f8/after-A6a.png)|[1280x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a29e315f8ed70c74/reference-A6a-raw.png) / [normalized](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bbbf2b7cba95f685/reference-A6a-normalized.png)|[review all pairs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d6842a3084390511/comparison-A6a.png)|Exact640 boundary: before/after/reference byte-identical.|
|A6b / blur / 641x800 / light|[1280x1598](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f9c1131a697cf56c/before-A6b.png)|[1280x1598](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8ba215a9e23acd34/after-A6b.png)|[1282x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/52145d5654fd7358/reference-A6b-raw.png) / [normalized](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9ab8879e54f08298/reference-A6b-normalized.png)|[review all pairs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b605dedb4a7f6a85/comparison-A6b.png)|641 shrink branch: composition retained; nonzero resampling/edge differences.|
|C1 / plain / 1440x800 / light|[1280x711](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7d27d50f3444a831/before-C1.png)|[1280x711](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5087536280b32931/after-C1.png)|[2880x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8deb7c3927995830/reference-C1-raw.png) / [normalized](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1ec2f2b781a47076/reference-C1-normalized.png)|[review all pairs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5a318df8c647d68f/comparison-C1.png)|Plain wide geometry/content preserved; text/edge resampling differs.|
|C2 / plain / 390x800 / dark|[780x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1514237b2f0ae002/before-C2.png)|[780x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/abdad03a0df20e1a/after-C2.png)|[780x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0f32b08a48a6e5c5/reference-C2-raw.png) / [normalized](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1feef2c004a0fd7c/reference-C2-normalized.png)|[review all pairs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/156df926b76b521d/comparison-C2.png)|Plain unshrunk dark: before/after/reference byte-identical.|
|X1 / xml / 1280x800 / light|[1280x800](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/25178dc6ced2c72e/before-X1.png)|[1280x800](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/712113856ab7d814/after-X1.png)|[2560x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/358232198336dfc0/reference-X1-raw.png) / [normalized](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/213ff1cd44441534/reference-X1-normalized.png)|[review all pairs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1334541731fc7c3d/comparison-X1.png)|XML wide snapshot succeeds before and final after; text-edge resampling differs. Intermediate unfixed replacement was not captured.|
|A7 / blur / 1440x800 / dark|[1600x889](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ab8244797b27311e/before-A7.png)|[1280x711](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a6cd99d8b60cb49d/after-A7.png)|[2880x1600](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4286157f150cb089/reference-A7-raw.png) / [normalized](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/066d1e6d39f213b8/reference-A7-normalized.png)|[review all pairs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9c8c9334b1f8e11f/comparison-A7.png)|At125%, before1600x889 with black padding/duplicated region; after1280x711 fills frame and matches headed composition.|

|Recording row|BEFORE [c4fa4629](https://git.cafe/pingdotgg/t3code/commit/c4fa4629eb645b95aae2beef56c70f705b736049)|AFTER [b7fddd87](https://git.cafe/pingdotgg/t3code/commit/b7fddd87a69bb9f868bfd54928aaf4ae881c9432)|Result|
|---|---|---|---|
|A7 internal interaction|[MP4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a9846259fc3126f8/before-A7-C4.mp4)|[MP4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/72a1bc0f01c70c00/after-A7-C4.mp4)|Same script; actual tool timings retained; correct live page geometry through scroll/zoom.|
|C3 immediate start/stop|[MP4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/74a0d65dd7668dba/before-C3.mp4)|[MP4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a9ffc9998a11fc92/after-C3.mp4)|Both playable1440x800 single-frame outputs,0.0333s; first frame matches A2 page.|
|C4 external real Browser viewer|[MP4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/58078f7f950dc133/before-C4-viewer.mp4)|[MP4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/236b3850c5ba2bce/after-C4-viewer.mp4)|Snapshot during recording; live content continues; reconnect recovers after visible reload gap. Reset discrepancy above applies to both.|
|N1 native display attachment|Unverified|Unverified|No genuine native attachment; no desktop claim.|

[before timestamps](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ca5b1085e196e9bb/before-interaction-timing.json); [after timestamps](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a28d648e56f87b04/after-interaction-timing.json); [frame/duration manifest](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/75afeedbe092f1c0/recording-manifest.json); [viewer trim provenance](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/aed27e65f2ede8c0/viewer-trim-manifest.json); [identical interaction driver](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5f97eabfdcc69bda/interaction-final.py); [headed interaction reference driver](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/091f6f1a64c318ce/reference-interaction.mjs).

Visual review: every still triplet and generated diff was inspected through the per-row comparison sheets. Auxiliary scroll/final stills and both versions of viewer screenshots were inspected. All internal recording frames and sampled external viewer storyboards were inspected. This does not establish absence of a one-frame transient at an unsampled external video frame; full25fps videos are retained for independent review.

|FRICTION category|event|prevention|
|---|---|---|
|Storage|Outer live MCP save destination violated scratch-only storage; artifact excluded, no live cleanup. Exact path/raw response retained privately.|Use direct fresh-client viewer recorder; fresh server MCP only for fixture snapshots.|
|Auth|Fresh empty thread alone has no thread-bound snapshot credential.|Issue credential through real provider turn; do not invent auth or import helpers.|
|Reference|Playwright screenshot convenience resets CDP zoom.|Use raw unscaled CDP capture; retain measured metrics.|
|Lifecycle|Interrupting a dev session ended sibling fixture/display processes.|Final launches retain dedicated-session PIDs; verify ports after teardown.|
|Upload|A staging copy raced an in-progress diff and produced one empty file; ghdrop rejected it.|Wait for image processing, recopy final files, validate nonzero files, and upload corrected immutable versions.|
|Coverage|Reduced-motion media unavailable through server MCP; native attachment absent.|Disclose preference gap and N1; do not infer those paths.|

All owned servers/browsers stopped; [teardown record](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c7db8898376f4ffb/teardown.json). Authorized checkout remains clean at [b7fddd87](https://git.cafe/pingdotgg/t3code/commit/b7fddd87a69bb9f868bfd54928aaf4ae881c9432); no checkout/source edits, commits, pushes, comments or watches. Scratch remains under `/tmp/ev-20924`.

[All public assets with immutable URLs, sizes and hashes](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c6f9bd23977ec0a6/assets-manifest.json).

[Standalone evidence bundle](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e0f8be5e36c4248b/evidence-bundle.tar.gz).
