# Issue 15708 final web evidence

Before source: [e54e71d725](https://git.cafe/pingdotgg/t3code/commit/e54e71d725). After source: [20749b942a](https://git.cafe/pingdotgg/t3code/commit/20749b942a), adapter revision [c984f4f34a](https://git.cafe/pingdotgg/t3code/commit/c984f4f34a), portable recipe `scripts/issue-15708-repro.md` committed in 20749b942a. Real app served from the lead's isolated worktree .t3, web8401/backend16441. No database writes or adapter/test edits by evidence agent.

Ubuntu Linux; Node26.12.1; ClaudeCLI2.1.303; Claude Sonnet5.5 High, Full access, Follow-up behavior Steer. Chrome154.0.0.0 Linux, DPR2. CSS viewports1440x900 and390x844; interface16px,prompt14px,code13px; system sans stack (-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,sans-serif). Light/dark built-in appearance. PNG output wide1280x800 (tool downscale8/9 CSS size; not native DPR2 export), narrow780x1688. Browser resize/evaluate confirmed1440x900; fresh two-animation-frame verification also confirmed exact final notice/thread. Supplemental later fresh wide frame has a narrower sidebar after repeated responsive resize, so it is not substituted into matched comparisons.

Before clean runtime thread0c034839-ed96-445e-aeb2-ffca4b722ac6 on actual main build: foreground task_started19:44:04.658Z, codeword prompt.offer19:44:17.261Z, then Stop; no notice. After clean runtime e15852f3-edf8-4b07-8303-bbdb0d0fa92d on final build: foreground task_started19:40:57.933Z, codeword prompt.offer19:41:18.832Z, then Stop; notice reads: Claude did not confirm reading your steer before Stop. It may not have been delivered. Resend it if needed: followed by quoted codeword prompt. Both use identical foreground curl prompt to127.0.0.1:18708/evidence-held and codeword PELICAN-FS28-15708. These are independent real runs, not database-injected warning rows. Before captured later than after due sequential source swaps. Source branch restored20749b, clean after captures.

## Image matrix and pixel comparisons

Threshold0 means any RGB channel differs; amplified image is absolute RGB delta multiplied4 and clamped255. Threshold16 means max absolute RGB channel delta>16; magenta marks changed pixels. Counts cover whole output image, without masks. No zero-diff claim.

|CSS viewport/theme|Before|After|Diff0 x4|Diff16|Changed0 / total|Changed16 / total|
|---|---|---|---|---|---|---|
|1440-light|[before-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9c6ce7edb469d5be/before-1440-light.png)|[after-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/28b4f0ef71af6ac6/after-1440-light.png)|[diff0-amplified4-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cdfcfda22524c56d/diff0-amplified4-1440-light.png)|[diff16-1440-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5ff1765cd77db082/diff16-1440-light.png)|18574/1024000 (1.8139%)|13969/1024000 (1.3642%)|
|1440-dark|[before-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/42534d6e5ef03de8/before-1440-dark.png)|[after-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e5ad48f5c59158cf/after-1440-dark.png)|[diff0-amplified4-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/95505b174ff22933/diff0-amplified4-1440-dark.png)|[diff16-1440-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/966eb8d35bf8ea8f/diff16-1440-dark.png)|18358/1024000 (1.7928%)|13813/1024000 (1.3489%)|
|390-light|[before-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/92799c6ff9e23951/before-390-light.png)|[after-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/180327bc802a3639/after-390-light.png)|[diff0-amplified4-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3aeaddff6ca28363/diff0-amplified4-390-light.png)|[diff16-390-light.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6e42604490d47d70/diff16-390-light.png)|12441/1316640 (0.9449%)|11440/1316640 (0.8689%)|
|390-dark|[before-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/64b7b95c736f9765/before-390-dark.png)|[after-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3e1b4ec074404f4e/after-390-dark.png)|[diff0-amplified4-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bf35c7f7ecc45cbe/diff0-amplified4-390-dark.png)|[diff16-390-dark.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5f8fe0cb62538195/diff16-390-dark.png)|12444/1316640 (0.9451%)|10595/1316640 (0.8047%)|

Visible differences: after adds amber warning icon, truncated one-line notice and disclosure chevron; interrupted divider moves downward by the added row (about36CSS px). Prompt, tool command, steer text and composer remain visibly comparable. Narrow header thread title changes/truncates. Wide header title and selected sidebar thread title differ; a new before thread appears at top in the later before capture, shifting sidebar ordering and lower clipped rows; relative sidebar ages differ by minutes, and environment artwork pixels may differ. These incidental pixels are included in counts. No screenshot proves actual codeword recall.

## Full-tail recordings and expanded detail

[Before full interaction](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f71d433cced7b468/before-full-interaction.mp4) (87.945s); [After full interaction](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e3fd1a8e4fd81ad2/after-full-interaction.mp4) (86.429s). Both real app runs use the same first prompt, wait for foreground task_started, send exact codeword using Steer message, click Stop, retain terminal view, then resize to390x844light. The after additionally opens the new notice detail; before has no notice to expand. Recordings have different natural provider/tool latency and retention lengths, not synchronized playback. Black sidebars in the video tail preserve the original wide recording canvas when viewport becomes narrow. No video stitching or simulated UI. Exported tail frames independently inspected: [before terminal](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d8b2665baf3f643b/before-full-tail.png) shows interrupted with no warning; [after terminal/detail](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/49694d956bfe53ad/after-full-tail.png) shows the entire honest warning and quoted steer plus interrupted divider. Earlier truncated recordings are superseded, not timing proof.

Full-tail run chronology (UTC, from real provider protocol; video timestamps are not a precision latency measurement):

- Before actual main build thread380c353a-35b8-486b-b437-1780df7a5f0a: first prompt.offer19:51:24.308; foreground task_started19:51:35.196; codeword prompt.offer19:51:50.813; query.interrupt19:51:53.894; query.close19:51:53.895. Browser confirmed interrupted=true, warning=false; recording retained terminal and narrow view until19:52:39.705.
- After final build thread5e66d476-b8c5-4dcb-9fb4-6ad6e991de5b: foreground task_started19:48:44.512; codeword prompt.offer19:49:04.749 (UUID34b6c0b0-f4eb-435f-ac06-6cade04209d7); query.interrupt19:49:09.721; query.close19:49:09.723. Browser confirmed warning and interrupted, then390light detail opened; recording retained expanded state more than2seconds and stopped19:50:01.948. No current-query assistant/stream/result confirmation consumed that codeword before Stop.

Supplemental [expanded web notice390light](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6a6e303aec407649/after-expanded-390-light.png) visibly supports the complete resend instruction and quoted steer; it is real existing disclosure UI, not an inspector mock. Full screenshot local path `/tmp/issue-15708-evidence/after-expanded-390-light.png`.

## Remaining rows

V1 web four-cell images/diffs and full-tail interaction pair captured. Native V2 iOS390light/dark row+expanded detail+expansion recording remains **UNVERIFIED**. EAS authentication and availability succeeded. Fresh simulator development build0d64b057-66fc-4e34-a223-3919e4e6fc94 is IN_PROGRESS at last check, source20749b, ios.simulator=true, developmentClient=true, internal distribution; no release publication. No simulator was started, so no simulator stop needed. Native Device panel reports exactly “Agent device access is turned off for this environment.” EAS is available separately, but no verified usable client/backend transport was established within this pass. ngrok executable absent. Existing EXPO_PUBLIC_SHOWCASE coordinates pairing with fixture backend and capture scene/theme; it did not supply standalone data, and no production client code was changed to make proof. Own Metro18078 was started for required EAS transport, stopped via retained session once no usable backend route was available, and port18078 is no longer listening. Lead8401/16441 server and held18708 endpoint were never stopped. Transient apps/mobile/eas.json restored byte-for-byte; final git status clean at20749b. No further source swaps pending.

R1 consumed control supplied by lead: [assistant UUID acknowledgement and no-warning control](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c9123d943076c65b/issue-15708-consumed.txt). R2 recall control supplied by lead; R3 focused assertions belong to implementer, not re-run by this evidence agent. Web proof does not certify native rendering or provider recall.

FRICTION category|what|avoid
FRICTION preferences|Own paired browser defaulted Queue; initial attempts did not follow Steer path|Set Follow-up behavior Steer before recording; await real prompt.offer before Stop
FRICTION capture|Initial recorder tails ended on Stop click before final UI; replaced with full-tail recordings and inspected exported tail PNGs|Retain recording after final DOM state, inspect video tail before publishing timing claims
FRICTION viewport|Wide saved PNG1280x800 at CSS1440x900 DPR2; repeated responsive resize also changes sidebar width|Record CSS and artifact dimensions; compare same-capture layout and disclose downscale; fresh2rAF check confirmed current final content
FRICTION native|Device panel disabled; no matching simulator build among50 inspected builds, fresh build still pending and no usable remote backend route|Build early; retain buildID and explicitly leave native unverified
FRICTION EAS|Wrong-cwd initial invocation generated root eas.json; removed/unstaged immediately;214MB archive compression delayed submission|Run EAS from apps/mobile; restore transient config exactly and verify git status
