# Minimap comparison evidence

Real web client, Chromium, 1600 × 800, light theme, Chat width Wide, details panel closed. Each commit ran its own development server with a fresh database and synthetic conversations created through `t3.project` and `t3.thread`; no live data was copied. The built-in replay fixture supplied the responses. Terminal drawer height: 280 px. The environment is the same for every image below.

## Reproduction

1. Open six loaded turns. Hover ticks 1, 2, 5 and 6, then approach the first from 3 px above and the last from 3 px below. Repeat with two turns.
2. Sweep continuously through the rail. Leave the strip horizontally onto the preview, move vertically beyond it, then drag to select an underlying response. Click the first tick to navigate.
3. Open a 70-turn thread and load earlier turns. Capture the rail before opening the terminal. Open the actual terminal, print four synthetic output lines, and navigate to the last turn so turns 69–70 sit fully above the composer. Hover capped-rail ticks 1, 2, 69 and 70.

## Observations

Base: endpoint alignment changes; last-tick and above/below approaches hit the chevrons; leaving the strip retains the preview; the drag selects preview-title text. Head: endpoint previews stay centered, both approaches activate, leaving dismisses, and the drag selects `second fixture turn complete` from the response. Clicking the first tick navigates on both sides. Moving vertically beyond the entire preview dismisses on both sides.

The 70-tick rail has an uncapped natural height of 552 px, exceeding both applicable caps. Before opening the terminal both rails measure 512 px. With the terminal open, the timeline spans y=52–520: base remains 512 px at y=30–542, intruding into the header and terminal, while head shrinks to 232 px at y=170–402. All four head endpoint previews remain inside the timeline. Visible terminal output and the final complete responses are preserved in every terminal still; the terminal was not redacted.

## Recording and capture details

The red ring follows the actual pointer, including movements over the base preview; the small header caption identifies each stage. Those overlays ignore pointer events. A provider label is hidden for privacy and carets are hidden for stable captures; no minimap, preview, message, terminal or hit-target styles were changed. Each published still matched another screenshot byte-for-byte taken 500 ms apart. All stills and sampled recording frames were visually inspected.

The recordings show the same sequence at normal speed, 25 fps, 1600 × 800, with no cuts between interaction stages. Initial fixture creation and loading are omitted. Before lasts 55.56 s; after lasts 52.16 s. Small timing differences come from waiting for stable screenshots; matching stage captions and the table below identify equivalent points.

[Before continuous recording](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d2fcd288f5df13f2/before-continuous.mp4) · [After continuous recording](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/42807acff2bad3b4/after-continuous.mp4)

| Stage | Before [b3fdf2b10f](https://git.cafe/pingdotgg/t3code/commit/b3fdf2b10fb92e5dbc71a83381c602a8a464bbca) | After [f080b1e518](https://git.cafe/pingdotgg/t3code/commit/f080b1e518bcb7e9d4dda6a6dfecf14592469457) |
|---|---|---|
| Six turns-tick-1 | ![before Six turns-tick-1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1d78e419cfb6601a/before-six-turns-tick-1.png) | ![after Six turns-tick-1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4aeca8713f277106/after-six-turns-tick-1.png) |
| Six turns-tick-2 | ![before Six turns-tick-2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/37798ace2ada38a3/before-six-turns-tick-2.png) | ![after Six turns-tick-2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b214b56940106f88/after-six-turns-tick-2.png) |
| Six turns-tick-5 | ![before Six turns-tick-5](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3e719f9327686901/before-six-turns-tick-5.png) | ![after Six turns-tick-5](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f7237b34884474fa/after-six-turns-tick-5.png) |
| Six turns-tick-6 | ![before Six turns-tick-6](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/73b603e802e58ee6/before-six-turns-tick-6.png) | ![after Six turns-tick-6](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/aa5f7658301936f0/after-six-turns-tick-6.png) |
| Six turns-approach-first-from-above | ![before Six turns-approach-first-from-above](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/14dc3fdeeea69fba/before-six-turns-approach-first-from-above.png) | ![after Six turns-approach-first-from-above](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e66666a87f302897/after-six-turns-approach-first-from-above.png) |
| Six turns-approach-last-from-below | ![before Six turns-approach-last-from-below](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/418c9db83e7fc745/before-six-turns-approach-last-from-below.png) | ![after Six turns-approach-last-from-below](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d561dfdca5b26538/after-six-turns-approach-last-from-below.png) |
| Two turns-tick-1 | ![before Two turns-tick-1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1bae2e492bea57b7/before-two-turns-tick-1.png) | ![after Two turns-tick-1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6bc646f9982e6714/after-two-turns-tick-1.png) |
| Two turns-tick-2 | ![before Two turns-tick-2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a53c06163b10ffbd/before-two-turns-tick-2.png) | ![after Two turns-tick-2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/29b891296133568c/after-two-turns-tick-2.png) |
| Two turns-approach-first-from-above | ![before Two turns-approach-first-from-above](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/85171f430d5ead8d/before-two-turns-approach-first-from-above.png) | ![after Two turns-approach-first-from-above](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7fb7017a4449d769/after-two-turns-approach-first-from-above.png) |
| Two turns-approach-last-from-below | ![before Two turns-approach-last-from-below](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ffdd3f35d2b10ffa/before-two-turns-approach-last-from-below.png) | ![after Two turns-approach-last-from-below](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f0850099ad8ecd64/after-two-turns-approach-last-from-below.png) |
| hover-on-strip | ![before hover-on-strip](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f2a78aac7899eaf6/before-hover-on-strip.png) | ![after hover-on-strip](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a964b652f9e2f435/after-hover-on-strip.png) |
| leave-strip-onto-preview | ![before leave-strip-onto-preview](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/db091365e2c74eb9/before-leave-strip-onto-preview.png) | ![after leave-strip-onto-preview](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/153d58a86b9cf84a/after-leave-strip-onto-preview.png) |
| move-vertically-beyond-preview | ![before move-vertically-beyond-preview](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c269e4bad97da4d2/before-move-vertically-beyond-preview.png) | ![after move-vertically-beyond-preview](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/102a672a1c7fe0de/after-move-vertically-beyond-preview.png) |
| select-underlying-response | ![before select-underlying-response](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3be665023f2bab0b/before-select-underlying-response.png) | ![after select-underlying-response](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c84663bebacf19ce/after-select-underlying-response.png) |
| click-first-tick-navigation | ![before click-first-tick-navigation](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/75176c92c6aa7fc8/before-click-first-tick-navigation.png) | ![after click-first-tick-navigation](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7e2f5c07a32dea02/after-click-first-tick-navigation.png) |
| seventy-turns-rail-before-terminal | ![before seventy-turns-rail-before-terminal](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e665dacd03ffe547/before-seventy-turns-rail-before-terminal.png) | ![after seventy-turns-rail-before-terminal](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a3151d26db8d10d4/after-seventy-turns-rail-before-terminal.png) |
| terminal-open-capped-rail-tick-1 | ![before terminal-open-capped-rail-tick-1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/527b9339091b2484/before-terminal-open-capped-rail-tick-1.png) | ![after terminal-open-capped-rail-tick-1](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e0f45658630f5679/after-terminal-open-capped-rail-tick-1.png) |
| terminal-open-capped-rail-tick-2 | ![before terminal-open-capped-rail-tick-2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/731987fead40e43a/before-terminal-open-capped-rail-tick-2.png) | ![after terminal-open-capped-rail-tick-2](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/95cf037f6b3a7147/after-terminal-open-capped-rail-tick-2.png) |
| terminal-open-capped-rail-tick-69 | ![before terminal-open-capped-rail-tick-69](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/48d18fc840f3db39/before-terminal-open-capped-rail-tick-69.png) | ![after terminal-open-capped-rail-tick-69](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bb5644e9a63a64c8/after-terminal-open-capped-rail-tick-69.png) |
| terminal-open-capped-rail-tick-70 | ![before terminal-open-capped-rail-tick-70](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bfebb2f23b5ac4f9/before-terminal-open-capped-rail-tick-70.png) | ![after terminal-open-capped-rail-tick-70](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c02a834af59c3ea1/after-terminal-open-capped-rail-tick-70.png) |

## Driver and runner

[Single scenario / seed and interaction driver](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8868bc7d33a11691/minimap-proof.e2e.ts) · [Neutral terminal shell helper](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8f5210bd204eb389/evidence-shell)

The scenario contains exactly one test. It was run from a current-main harness checkout using `vp run scenarios:prove scripts/scenarios/minimap-proof.e2e.ts --base BASE --head HEAD` with the commits linked above. The runner returned exit 0, `failsOnBase: true`, and `passesOnHead: true`. Uploads were performed with `ghdrop upload -m` after inspecting the captures.

Harness configuration: use only the `web` target in `scripts/e2e.config.ts`; set its viewport to `{ width: 1600, height: 800 }` and `colorScheme: "light"`; add `inheritEnv: ["SHELL"]` to its app command. Make the shell helper executable and set `SHELL` to it. Set `T3CODE_DEV_SEED=0`. The shell helper sets a neutral prompt so screenshots disclose no environment path or identity. These harness-only settings and the scenario are uncommitted evidence tooling.

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