# PR #33262 evidence matrix (pruned by the lead)

Derived from proof audit pass 1 ([full matrix](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b53d43628cfbdcf4/matrix.md)).
Before = `4c361199f4` (merge-base, main). After = `89764a9450` (PR head).

The diff adds one fixed-position block (`Copy Email Address` + separator) after the optional
Copy Link block and before the optional Copy Image block, gated only on `parseMailtoAddress(params.linkURL)`.
The rows below cover every caller that reaches the menu with a mailto link (chat renderer, integrated-browser
guest), the gate's positive and negative outcomes, the clipboard value, and the unchanged neighbouring branches.

Dropped from the full matrix, with reason:
- R04 iframe, R05 popup: same installer and same template; the item does not depend on frame or owner.
- R06 linked image, R07 selection, R08 editable, R09-R14 spelling: these vary pre-existing blocks whose order and
  content the diff does not touch; the new block is a constant two entries. Spelling counts would need a harness.
- R16 plain text, D01, D02: unchanged guards and non-link paths; covered by existing tests.
- URL decoding subcases (bad escapes, multi-recipient, `%2B`): parser behaviour, covered by the unit test and the
  reviewers' parser probes; one encoded+query+fragment input gets a native clipboard proof in R02.

Dimensions: Linux Electron under `headless-desktop`, Xvfb 1920x1080x24, one 1440x900 app window, dark app theme,
default native menu theme. Light/dark and 390 px collapse: the native popup is not themed by app CSS, and the
desktop window minimum width is 400 px.

| ID | Fixture | Seed | Expected after | Before | Evidence |
|---|---|---|---|---|---|
| R01 | Chat, autolinked `restaurant@example.com` | assistant message `Contact restaurant@example.com for reservations.` | Copy Email Address, separator, Cut/Copy/Paste/Select All; clipboard exactly `restaurant@example.com`; Ctrl+V into composer pastes it | roles only; clipboard sentinel unchanged | recording (before and after) + stills with menu open + xclip transcript |
| R02 | Chat, labelled `[Reservations](mailto:owner%40example.com?subject=Booking#details)` | same assistant message | same menu; clipboard exactly `owner@example.com` (17 bytes) | roles only | stills + xclip transcript |
| R03 | Integrated browser guest, `<a href="mailto:guest@example.com">` | synthetic page on loopback, opened in the Browser panel | same menu, owned by the guest; clipboard `guest@example.com` | roles only | stills + xclip transcript |
| R15 | Guest, `mailto:?subject=Booking` (empty address) | same synthetic page | roles only, no orphan separator; sentinel unchanged | roles only | stills (before = after) |
| R17 | Guest, `https://example.com/` anchor | same synthetic page | Copy Link, separator, roles; no Copy Email Address | same | stills (unchanged control) |
| R18 | Chat, `[Example](https://example.com)` | same assistant message | chat's own link menu (Open in integrated browser / system browser / Copy Link) | same | stills (unchanged control) |
