# M2 · round2 evidence

Before [15707a84](https://git.cafe/pingdotgg/t3code/commit/15707a84b03e27bb257d60e027812ebf94bbda25); after [597f1aea](https://git.cafe/pingdotgg/t3code/commit/597f1aea6191d434ad23877e0e94121b7858382e).

VM fs-11, Linux x86_64; Chromium 156.0.8078.70; no device emulation; DPR 2; font scaling 100%, root 16px; CSS viewport 1440×1000. The original Browser panel refused connections twice, so local Chromium 156 uses Playwright/CDP. Whole-viewport PNGs are 2880×2000; movies are 1440×1000, captured by timed CDP screenshots at approximately 10fps with variable frame durations. Reduced motion is emulated as reduce; fonts and browser network idle are awaited. Each accepted still matches another capture 500ms later. Video stills are paused at a deterministic source frame. The harness native boundary is rendered in this desktop browser; no native device or mobile emulation is claimed.

**What else changed — round 2:**

- W2 fullscreen and all eight W9 controls: zero changed pixels at threshold 0 and >8/255. Nothing else changed in these settled pairs.
- W10: only the harness repository diagnostic changes from `(absent)` to `fixture-org/media-upstream`. The two production media resources follow the selected environment in both revisions. M2: only that same repository diagnostic changes on each page. `(absent)` is a display sentinel, never a field/value sent by base code; raw transcript resource objects show the true omission. These diagnostic text changes are intentional evidence of this PR, not product layout changes.
- Recordings have small action/capture timing offsets and different playing video clock/pattern frames; both use the same scripted sequence. The captions below report per-side times. W10 starts with about1s of the default controls scene before selecting E1, and its video-loading indicator can appear while each scene mounts. These transient intervals differ between runs; settled frames contain no loading indicator. The clips do not establish frame-exact performance equivalence.
- Round 1’s declared transient loading/spinner, cursor/tooltip and capture-offset differences remain recorded in its retained rows. Its earlier fullscreen exclusion and the four missing subcase flags are replaced by this round’s evidence.

Diff0 saturates every nonzero channel delta to255, including a one-level change. Diff >8/255 highlights channel deltas strictly greater than8. All18 new pairs settled. [metrics-round2.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b0c61375d4993203/metrics-round2.json); [validation-round2.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/acd29a4b9edcd10e/validation-round2.json).

**M2 — inline and strip gallery paging, completed in round 2**

**Labelled mobile production-resource/modal harness; native viewer is an interactive DOM stub.** Production inline and strip handlers open the real FilePreviewModal. Production gallery grouping/deduplication freezes three sources; actual modal resolution calls the asset-refresh stub for all3, preserving each source’s resource. Next/Previous controls select those resolved sources at the native-view boundary. Each current page, full gallery and all6 resolution requests (3 per opening) are logged and checked: base omits repository; head carries B throughout. The strip includes a duplicate input, and still has3 pages. No device/native gesture or rendering claim. The displayed `(absent)` marker exists only in the harness diagnostics.

**Same sequence:** inline open1→Next2→Next3→Previous2→close; strip open1→Next2→Next3→close. These are completed-observation timestamps after the action (not instant click times):

**Before:** 1.713s inline three-image body; 2.545s inline open page 1; 4.264s inline next page 2; 5.907s inline next page 3; 7.587s inline previous page 2; 8.360s inline close; 9.157s strip open deduplicated page 1; 10.815s strip next page 2; 12.534s strip next page 3; 14.338s strip close.

**After:** 1.711s inline three-image body; 2.530s inline open page 1; 4.341s inline next page 2; 6.147s inline next page 3; 8.956s inline previous page 2; 9.769s inline close; 10.558s strip open deduplicated page 1; 12.768s strip next page 2; 14.663s strip next page 3; 16.328s strip close.

| Before · [15707a84](https://git.cafe/pingdotgg/t3code/commit/15707a84b03e27bb257d60e027812ebf94bbda25) | After · [597f1aea](https://git.cafe/pingdotgg/t3code/commit/597f1aea6191d434ad23877e0e94121b7858382e) | Diff0 ×255 | Diff >8/255 |
|---|---|---|---|
| [m2-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9cc2c9b46601ee35/m2-before.mp4) | [m2-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/efd4baceba6bd9e9/m2-after.mp4) | N/A: recording | N/A: recording |

**inline-page1**

| Before · [15707a84](https://git.cafe/pingdotgg/t3code/commit/15707a84b03e27bb257d60e027812ebf94bbda25) | After · [597f1aea](https://git.cafe/pingdotgg/t3code/commit/597f1aea6191d434ad23877e0e94121b7858382e) | Diff0 ×255 | Diff >8/255 |
|---|---|---|---|
| ![m2-inline-page1-before-2.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9d1ef9855634f1a1/m2-inline-page1-before-2.png) | ![m2-inline-page1-after-2.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a273bdd6f3f74dba/m2-inline-page1-after-2.png) | ![m2-inline-page1-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9e57e16f70734ead/m2-inline-page1-diff0.png) | ![m2-inline-page1-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a6974c55912cf1c7/m2-inline-page1-diff8.png) |

**inline-page2**

| Before · [15707a84](https://git.cafe/pingdotgg/t3code/commit/15707a84b03e27bb257d60e027812ebf94bbda25) | After · [597f1aea](https://git.cafe/pingdotgg/t3code/commit/597f1aea6191d434ad23877e0e94121b7858382e) | Diff0 ×255 | Diff >8/255 |
|---|---|---|---|
| ![m2-inline-page2-before-2.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/db9beb27c9f649d2/m2-inline-page2-before-2.png) | ![m2-inline-page2-after-2.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0ff9d41dd17dc1e1/m2-inline-page2-after-2.png) | ![m2-inline-page2-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c68bac338d553950/m2-inline-page2-diff0.png) | ![m2-inline-page2-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b95481949b7a45ea/m2-inline-page2-diff8.png) |

**inline-page3**

| Before · [15707a84](https://git.cafe/pingdotgg/t3code/commit/15707a84b03e27bb257d60e027812ebf94bbda25) | After · [597f1aea](https://git.cafe/pingdotgg/t3code/commit/597f1aea6191d434ad23877e0e94121b7858382e) | Diff0 ×255 | Diff >8/255 |
|---|---|---|---|
| ![m2-inline-page3-before-2.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f0c3c75a9b65a03b/m2-inline-page3-before-2.png) | ![m2-inline-page3-after-2.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fbf992ee567f7fa6/m2-inline-page3-after-2.png) | ![m2-inline-page3-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5af58037b698de46/m2-inline-page3-diff0.png) | ![m2-inline-page3-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5b14cd44566eb5f5/m2-inline-page3-diff8.png) |

**strip-page1**

| Before · [15707a84](https://git.cafe/pingdotgg/t3code/commit/15707a84b03e27bb257d60e027812ebf94bbda25) | After · [597f1aea](https://git.cafe/pingdotgg/t3code/commit/597f1aea6191d434ad23877e0e94121b7858382e) | Diff0 ×255 | Diff >8/255 |
|---|---|---|---|
| ![m2-strip-page1-before-2.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f280c8d15448f018/m2-strip-page1-before-2.png) | ![m2-strip-page1-after-2.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/33a97f81a8dcf027/m2-strip-page1-after-2.png) | ![m2-strip-page1-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/33a03f4cb12e5c9b/m2-strip-page1-diff0.png) | ![m2-strip-page1-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b5ac98e1f8cbce41/m2-strip-page1-diff8.png) |

**strip-page2**

| Before · [15707a84](https://git.cafe/pingdotgg/t3code/commit/15707a84b03e27bb257d60e027812ebf94bbda25) | After · [597f1aea](https://git.cafe/pingdotgg/t3code/commit/597f1aea6191d434ad23877e0e94121b7858382e) | Diff0 ×255 | Diff >8/255 |
|---|---|---|---|
| ![m2-strip-page2-before-2.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ccf0dacfc4a18fc5/m2-strip-page2-before-2.png) | ![m2-strip-page2-after-2.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/17134423aa0f8877/m2-strip-page2-after-2.png) | ![m2-strip-page2-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c513d7a6c1adb695/m2-strip-page2-diff0.png) | ![m2-strip-page2-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1c9fbc48636d3acb/m2-strip-page2-diff8.png) |

**strip-page3**

| Before · [15707a84](https://git.cafe/pingdotgg/t3code/commit/15707a84b03e27bb257d60e027812ebf94bbda25) | After · [597f1aea](https://git.cafe/pingdotgg/t3code/commit/597f1aea6191d434ad23877e0e94121b7858382e) | Diff0 ×255 | Diff >8/255 |
|---|---|---|---|
| ![m2-strip-page3-before-2.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5b8767ccbec24e68/m2-strip-page3-before-2.png) | ![m2-strip-page3-after-2.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b35fa35277ff1c9a/m2-strip-page3-after-2.png) | ![m2-strip-page3-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/543a3e1dd9128d47/m2-strip-page3-diff0.png) | ![m2-strip-page3-diff8.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/deed845d780121eb/m2-strip-page3-diff8.png) |

[m2-before-transcript.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/515ed66ccf47d7bc/m2-before-transcript.json), [m2-after-transcript.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3a046a8f54f9394a/m2-after-transcript.json). Every page’s repository resource and every modal resolution request is validated in [validation-round2.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/acd29a4b9edcd10e/validation-round2.json). Only the repository diagnostic text differs in these6 pairs.

**Retained round1 subcases and tables**

Round1 inline second-image and strip open/close resource transcript. Its open/close proof is retained; the driven paging sequence and actual modal resolution above replace its previous paging limitation.

| Before<br>[15707a84](https://git.cafe/pingdotgg/t3code/commit/15707a84b03e27bb257d60e027812ebf94bbda25) | After<br>[597f1aea](https://git.cafe/pingdotgg/t3code/commit/597f1aea6191d434ad23877e0e94121b7858382e) | Diff0<br>[15707a84](https://git.cafe/pingdotgg/t3code/commit/15707a84b03e27bb257d60e027812ebf94bbda25) → [597f1aea](https://git.cafe/pingdotgg/t3code/commit/597f1aea6191d434ad23877e0e94121b7858382e) | DiffT >8/255<br>[15707a84](https://git.cafe/pingdotgg/t3code/commit/15707a84b03e27bb257d60e027812ebf94bbda25) → [597f1aea](https://git.cafe/pingdotgg/t3code/commit/597f1aea6191d434ad23877e0e94121b7858382e) |
|---|---|---|---|
| [mobile-before-transcript.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/03f98e822c48f48b/mobile-before-transcript.json) | [mobile-after-transcript.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4ff1198c8a8d8a0e/mobile-after-transcript.json) | N/A: runtime | N/A: runtime |


# Round2 seed and driver scripts

Primary final runs: [fullscreen-v3.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e4c34e243eec104f/fullscreen-v3.cjs), [web-controls-w9-v4.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eea4e63abbe6e6b9/web-controls-w9-v4.cjs), [web-controls-w10-v4.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d96f443137b9281c/web-controls-w10-v4.cjs), [mobile-driver-v2-v3.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5d8f28de087b0d69/mobile-driver-v2-v3.cjs), [web-harness-v2.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7b5df47e690cb6d1/web-harness-v2.js), [web-harness-v4.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4de886d78b815be1/web-harness-v4.js), [build-mobile-v2.mjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/73dad88379bd5a00/build-mobile-v2.mjs), [mobile-entry-v2.tsx](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/897380c633ff0c12/mobile-entry-v2.tsx), [mobile-stubs-v2.tsx](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/85e61b1e1b338d28/mobile-stubs-v2.tsx), [cdp-recorder.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6abaa2d2fbec6c14/cdp-recorder.cjs).

All written/reused scripts, including earlier capture attempts retained for reproducibility:

- [browser.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bf11351a0ea2566e/browser.cjs)
- [build-mobile-v2.mjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/73dad88379bd5a00/build-mobile-v2.mjs)
- [build-mobile.mjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e8d8c5eaa36e8c6c/build-mobile.mjs)
- [cdp-recorder.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6abaa2d2fbec6c14/cdp-recorder.cjs)
- [fixture-proxy.mjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/392dde86ed7d6aa3/fixture-proxy.mjs)
- [fullscreen-v3.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e4c34e243eec104f/fullscreen-v3.cjs)
- [fullscreen.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7b181dbde8f5149b/fullscreen.cjs)
- [inspect-legacy.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/06d363d0fd1cab67/inspect-legacy.py)
- [make-report-round2.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c413e204231ade60/make-report-round2.py)
- [make-v3.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/213d60e58ab0dd5f/make-v3.py)
- [mobile-after.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/04f639968cfd74d4/mobile-after.js)
- [mobile-before.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/866af0f85dc785cb/mobile-before.js)
- [mobile-driver-v2-v3.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5d8f28de087b0d69/mobile-driver-v2-v3.cjs)
- [mobile-driver-v2.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fc6761be3ef020df/mobile-driver-v2.cjs)
- [mobile-driver.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4ddc601ddeececd4/mobile-driver.cjs)
- [mobile-entry-v2.tsx](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/897380c633ff0c12/mobile-entry-v2.tsx)
- [mobile-entry.tsx](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9d4641ca5fb194de/mobile-entry.tsx)
- [mobile-stubs-v2.tsx](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/85e61b1e1b338d28/mobile-stubs-v2.tsx)
- [mobile-stubs.tsx](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0b31836191d1de6a/mobile-stubs.tsx)
- [package-round2.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d7486665b81980fe/package-round2.py)
- [prepare.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/693510f379b596d0/prepare.py)
- [probe.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0664110a6ccd1b94/probe.cjs)
- [upload-round2.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7692a4f35989fe44/upload-round2.py)
- [validate-round2.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5577ae5b28266490/validate-round2.py)
- [web-bootstrap.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/159eac95737b569c/web-bootstrap.js)
- [web-controls-v2-v3.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3b3004e89944c71e/web-controls-v2-v3.cjs)
- [web-controls-v2.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/09d9e6f9df25ee05/web-controls-v2.cjs)
- [web-controls-w10-v4.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d96f443137b9281c/web-controls-w10-v4.cjs)
- [web-controls-w9-v4.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eea4e63abbe6e6b9/web-controls-w9-v4.cjs)
- [web-controls.cjs](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/be48fd7a7c7eaa55/web-controls.cjs)
- [web-harness-v2.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7b5df47e690cb6d1/web-harness-v2.js)
- [web-harness-v4.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4de886d78b815be1/web-harness-v4.js)
- [web-harness.js](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/be7a17e6152f0aca/web-harness.js)

Exact synthetic media bytes: [wide.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/eeae2fdf6d229c6f/wide.png), [tall.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6d06b3102cf404b2/tall.png), [dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8b13bda53082c30f/dark.png), [light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/52c41690318beff5/light.png), [pattern.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b8e2f73010ccb3be/pattern.mp4), [tone.wav](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c0b6e469c9a53c65/tone.wav).
