# PR #26030 evidence matrix (lead-scoped from proof audit pass 1)

Source matrix and seeding recipe (pass 1): https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/906060d0b421e87d/matrix.md
Use its "Real-app fixture recipe" section (simulated mount, PATH stub, deferred `message.dispatch` seeding, new unsent draft with `@` mention) verbatim.

## Scope decision

The diff converts a Windows drive path to a POSIX path at four server entry points and then takes the
existing absolute host-file branch, the same one a POSIX absolute path already takes. Renderers
downstream of that branch (Markdown, CSV, Mermaid, Office, archive, SQLite, notebook, fonts, PDF, video,
audio...) are unchanged code. So the proof is one real-app row per entry point, every drive spelling the
client sends, plus the non-WSL control. Pass-1 rows A07–A17, A19–A25, A27–A50 are renderer-family
variants of the same branch and are out of scope; C02–C05 are covered by unit tests / the earlier RPC
transcript; C07 (real Windows + WSL) is `cannot-verify windows`.

All captures are **simulated WSL**: Linux server, `WSL_DISTRO_NAME=Ubuntu`, stub `wslpath` on PATH
mapping `X:\a\b` / `X:/a/b` to `<mountRoot>/x/a/b`, custom mountRoot (not /mnt). Synthetic files only, located
outside the project directory.

Before = merge-base `dc84b0962efa4f4e05ef392c08986a9cd7c994d1`, after = head `c4cb969cf5fb3ef8aa43259002fbf3058979058d`.

| Row | Entry point | Fixture | Action | Expected before → after | Capture |
|---|---|---|---|---|---|
| R1 chips + text preview | `getMetadata`, `readFile` | One user message (deferred dispatch, no provider turn) with: `` `C:\Users\me\Documents\notes.md` ``, `` `C:/Users/me/Documents/plain.ts:5:2` ``, `[notes.md](C:/Users/me/Documents/notes.md)`, `[notes.md](file:///C:/Users/me/Documents/notes.md)` | Hover a chip (size tooltip); click backslash chip → Files panel; click `plain.ts:5:2` → line 5 revealed | Before: no size in tooltip; panel shows read error with workspace-joined path. After: size in tooltip; panel shows file contents (read-only host file) | Recording (hover + clicks) at 1440 dark; settled stills of the open text panel at 1440 and 390, light and dark |
| R2 media-file image | `issueAssetUrl` media-file | Same thread, second message: `![wide sample](C:/Users/me/Documents/wide.png)` and `[wide.png](C:/Users/me/Documents/wide.png)` (valid synthetic PNG) | Scroll into view; click the image chip → expanded dialog | Before: image unavailable / asset error. After: image renders inline and in the dialog | Stills of the message with embed at 1440 and 390, light and dark; still of dialog at 1440 dark |
| R3 draft-workspace-file | `issueAssetUrl` draft-workspace-file (+ draft text readFile) | New **unsent** draft in the project; type `@X:/Users/me/Documents/wide.png ` (trailing space) | Click the mention chip → panel | Before: asset error. After: image in panel. Confirm the asset request carries `_tag: "draft-workspace-file"` (log it in the manifest) | Recording at 1440 dark; settled still of open panel at 1440 dark and light |
| C1 non-WSL control | all | Head server restarted with both `WSL_DISTRO_NAME` and `WSL_INTEROP` unset, fresh DB/browser state, same fixture bytes and message | Repeat R1 click on backslash chip and R2 scroll | Head matches before: drive paths fail exactly as on main | Stills at 1440 dark, before and head side by side |

Diff images (zero threshold amplified, and a stated threshold) for each Before|After still pair.
