# Additional caller evidence — actual base and head applications

PR [#24611](https://git.cafe/pingdotgg/t3code/pulls/24611). Existing evidence is retained in the PR body. This supplement replaces none of it.

## Environment and provenance

fs-15 (observed hostname `fs-15`); Linux 6.1.102 x86_64; headed Chromium 148 on task-owned Xvfb :246; viewport 1440×1000, DPR 1, light theme. Installed Codex 0.163.0, gpt-6.1-sol, low effort, full access. Real provider turns returned OK without tools or file edits. No motion proof is needed for static text.

Before is the actual merge-base application [843f4e3529](https://git.cafe/pingdotgg/t3code/commit/843f4e35292391897089535e8f1af59b322e70f8); after is the actual PR-head application [43cb23920c](https://git.cafe/pingdotgg/t3code/commit/43cb23920cf601caaf146c75477abc5dfee95cb2). `git diff --stat` contains only String.ts and String.test.ts (31 additions, 1 deletion). A single worktree was checked out at each revision with the prior server stopped. Each server used `vp run dev --no-seed --home-dir /tmp/ev-24611/<sha>`. No helper-output substitution, direct fixture database writes, live userdata access, baked origins, source edits, commits, or pushes.

Inputs were entered in the real app. Settings → Providers added the custom model `evidence-title-unavailable`, and General → Text generation selected it. This deliberately exercises the ordinary fallback-title path: failed automatic title generation leaves the client seed visible. The composer still uses working gpt-6.1-sol. Plan mode was enabled through General → Legacy features for the plan row. These are fixture settings in isolated state, not changes to the product or live configuration.

## Captured rows

| Row | Input / real-app action | Before | After | Diff0 | DiffT |
|---|---|---|---|---|---|
| S1 — composer seed, server persistence, provider send | Send `"i".repeat(49) + "😀 Evidence only: do not use tools or change files. Reply with OK."`; actual Codex replies OK. Sidebar and breadcrumb show the seeded title. | ![Before: replacement glyph in sidebar and breadcrumb](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1768f1e2dd2d7fa6/send-before.png) | ![After: clean truncated title and real OK reply](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8eff0d2501116b62/send-after.png) | ![S1 zero-threshold absolute delta ×8](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/52a17059248a56a6/send-Diff0.png) | ![S1 channel delta above 16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a9b7693ed6b5fbdb/send-DiffT.png) |
| P1 — proposed-plan implementation title | Ask Codex in plan mode for heading `"# " + "i".repeat(39) + "😀 tail"`; plan says only reply OK; choose Implementation actions → Implement in a new thread. `Implement ` adds 10 units, putting the emoji across cut 50. The real new thread receives the plan and Codex replies OK. | ![Before: broken Implement title](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e532d59700f93f9e/plan-before.png) | ![After: clean Implement title](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9fa626a774dae1d6/plan-after.png) | ![P1 zero-threshold absolute delta ×8](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d1fb070b8ed50c06/plan-Diff0.png) | ![P1 channel delta above 16](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7564d24f8e2ae4c3/plan-DiffT.png) |

Original plan source: ![Before: real provider proposed plan](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/12131a02b2b3ca33/plan-source-before.png) ![After: real provider proposed plan](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9f5237d730ce6183/plan-source-after.png)

Supporting-source pair diffs: [Diff0](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b23693a9c05a68ca/plan-source-Diff0.png) · [DiffT](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/76e4f539f44b89cd/plan-source-DiffT.png).

## What else changed (unmasked differences)

- S1: 1,734 viewport pixels differ at zero threshold; 1,059 exceed channel delta 16. Besides the removed replacement glyph and dots, the sidebar title rasterization differs, its relative age badge reads `now` versus `1m`, and the submit button has a small hover/shading delta. No normalization or masking was applied.
- P1: 315 viewport pixels differ at zero threshold; 276 exceed channel delta 16. Changes are the broken-title glyph/dots in breadcrumb and sidebar (including the earlier S1 title still listed), plus the earlier thread's relative age badge. Plan body, intact source emoji, real OK reply, layout and controls match visually.
- Supporting plan-source pair: 1,947 pixels differ at zero threshold; 1,609 exceed 16. The real plan text and source emoji match; differences include the earlier S1 sidebar title and age badge, implementation dropdown focus outline.
- Independent before/after runs have different IDs, server message timestamps and native provider session IDs. The UI normally hides message timestamps until hover. These differences remain in the server transcript; they were not edited away.
- Duplicate before stills were pixel-identical. Initial after duplicate samples caught only the empty composer caret blinking (17 pixels), so the published after sources are the original frames with that caret off. Settled completion is also shown by OK responses, absence of Stop generation, and completed provider/outbox records.

## Server string transcript and reproduction

[Read-only isolated-server transcript](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3c8c5ed8b2de38c3/server-transcript.json) records actual title events, JSON projection and SQLite title strings, messages, plans, runs and completed effects. Before event/JSON titles contain `\ud83d`; SQLite title reads as `\ufffd`. After titles end after the 49 ASCII units, followed by `...`. Both source prompts retain the intact emoji. These are the client-produced titles round-tripped through the real server, not a claim that the shared helper runs on the server.

Public drivers: [UI seed/capture driver](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/53f9922e0b47c6d2/capture.py) · [read-only server transcript extractor](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bf75929807a12a29/server-proof.py) · [full-viewport diff generator](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/dea140a897d9fa41/diff.py) · [metrics](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b8488be8eb6ebcc5/diff-metrics.json). The driver accepts the browser CDP endpoint and has no credential or startup token. Pair with a fresh isolated server before use; run `configure`, then `send --label send-<version>`, then `plan --label plan-<version>`. The scripts automate the same real UI steps used here.

## Scope and unverified rows

[Complete read-only caller matrix](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/14320da8752a052a/ev-24611-matrix.md): seven direct shared-helper calls. Both distinct web callers are captured (normal composer runtime seed and proposed-plan new-thread title). No shared-helper caller exists in apps/server. Server CLI titles, Git toasts, watch notifications and restart-provider notes use separate truncators that are outside this PR; they are not claimed fixed or visually covered.

Unverified: mobile (the one requested `command -v android-emulator adb` check found neither; no installation attempted); native desktop (only browser client exercised, no native Electron session); multi-model send and attachment/fallback-title runtime branches (shared helper/source inventory only, not independently captured); remote/relay/tunnel (no second device/environment or tunnel configured in the isolated fixture). Local composer sends, actual Codex provider execution, plan implementation and persisted title round-trip are now observed. Other provider adapters are not independently exercised. Native activity labels require mobile and remain unverified.

Model/harness: capture and independent proof audits use Codex gpt-6.1-sol through T3 Code. No code changes.
