# Frontmatter preview evidence

Real isolated app: existing lead-owned server on port 6888, worktree `/home/ubuntu/wt/issue-23704`. Own default-profile T3 Browser tab; pairing recovered using the isolated worktree CLI. No server start/stop, provider invocation, database writes, push or PR.

Before implementation: `51273020db`. After implementation: `373457aebc`. Fixture commits: `eac2c788bc`, `9102852665`. Only the four authorized implementation/test files were temporarily restored for HMR, then restored to final code. Working implementation diff is empty.

Same reporter bytes, route `/draft/52c1b0b1-6ff3-4fb8-990a-967b991c033f`, layout and theme within each still pair. Files panel maximized, file explorer collapsed. Themes follow browser prefers-color-scheme. CSS viewports 1440×900 and 390×900, zoom 100%, DPR 2. Browser tool reduces desktop screenshots to 1280×800; narrow screenshots are 780×1800. These are responsive web captures, not native mobile.

Diff0 = per-channel absolute difference amplified 8×, no threshold. DiffT = magenta where maximum RGB channel difference >16/255, black elsewhere. No alignment, crops, masks, or exclusions. Pixel counts include app chrome. SHA-256 is shown beneath every artifact link.

| Row / CSS viewport | Before | After | Diff0 | DiffT | Changed pixels (0 / T) |
|---|---|---|---|---|---|
| F1 1440×900 light | [F1-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/984ba8566f351400/F1-before.png)<br><sub>SHA-256 ff07910f24e0cc1f7e6ccc6926247bcfa597ffe7c7a296ac9eaaf5a0c1b42f71</sub> | [F1-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/05043f64d6152828/F1-after.png)<br><sub>SHA-256 c992bd4f49ab6f723b8e72f8263f7425665fe2b6634f0133dbb5318cd9ece8dd</sub> | [F1-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5410b7437900c84e/F1-diff0.png)<br><sub>SHA-256 cda2bf2aa37ae82be22a3b7b10ecbdfa9a804dc0c0624d303cf1fc9239ea3447</sub> | [F1-diffT.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c7887aec9ac552be/F1-diffT.png)<br><sub>SHA-256 c1abfcc2f4fa3bd3b3db8bb399285e034061c182b972e009ceddd7ab83ee96e7</sub> | 18688 / 15900 |
| F2 1440×900 dark | [F2-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3a164bf1889d07cf/F2-before.png)<br><sub>SHA-256 860eb814b6acd7d99f9b7f13a5975d3c0645b65129e1013ea1907f0d6cb79f6d</sub> | [F2-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/baa9784129a68c69/F2-after.png)<br><sub>SHA-256 df35ec8d321ee7933d8968e606a101ec172cfdae5e97368f95107f736109b0ef</sub> | [F2-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6b2c73ff17533dab/F2-diff0.png)<br><sub>SHA-256 a79dbe8dcf61d91a86bd0cdb028b1bca899f5bf28a4e7b0b240d2abc3c14d6e4</sub> | [F2-diffT.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/620a8463ddef25b6/F2-diffT.png)<br><sub>SHA-256 c31d4d70989fb9ef0414886ab8018a006533998ee6dd1699420da103939f8c62</sub> | 18688 / 16333 |
| F3 390×900 light | [F3-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/96f190f353e77297/F3-before.png)<br><sub>SHA-256 b78f71fe2b4b99e7f8ca4a09fde6c757ae229573b93559368e729b5bb7292d59</sub> | [F3-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4888a41c1b97cc3f/F3-after.png)<br><sub>SHA-256 18dfab21f272c256577319391df03c49d56c70f95464d1235b7662d35422b093</sub> | [F3-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/74006c956ca02807/F3-diff0.png)<br><sub>SHA-256 31540e8cbb89b0c436f765defb3195ad0e860716cc24ba28d0785c0011159ff1</sub> | [F3-diffT.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7259e5d6a5fd2303/F3-diffT.png)<br><sub>SHA-256 cb0a7aa17e64479371583a05ac4f81110f85849701b790fe010b4d788c9ba00d</sub> | 70422 / 67809 |
| F4 390×900 dark | [F4-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/244cf627bcf51fab/F4-before.png)<br><sub>SHA-256 3f87c396438b21af650040b7e756068022aa0400277e5fe1fb321c12c09481ef</sub> | [F4-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6b241171b844f6a2/F4-after.png)<br><sub>SHA-256 c6ab8d254d0a8c22d95c3b020d9a5e98a5772cf49525225537e1ab6d89941a20</sub> | [F4-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7b9042ab4999da23/F4-diff0.png)<br><sub>SHA-256 0f28f66ebe6abd71b8ded5f108943461004e17be85c1fb110e01120e3ee28f1c</sub> | [F4-diffT.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6f7399f235341868/F4-diffT.png)<br><sub>SHA-256 fd5067a064caba83dad7431a710a8e59fc03aee8b0ab9f9684cd703738334ad1</sub> | 70428 / 67558 |
| D1 1440×900 light | [D1-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4659e49d3e928e28/D1-before.png)<br><sub>SHA-256 4aea81677b88525892e48a05a2e541e3b645d8dea052919450abaff621becd95</sub> | [D1-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8b91935a81cbc74d/D1-after.png)<br><sub>SHA-256 cccd2d652e1510f807b34798bd7c63d11aa4cc8ae30c53a9171854ffaa9b0c22</sub> | [D1-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c7e7245a28ffba73/D1-diff0.png)<br><sub>SHA-256 b7d4aca41403010d1a466ef431edbe79a3e90947710a489dbfaff81a08f5b438</sub> | [D1-diffT.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/be864fcdd380bb9a/D1-diffT.png)<br><sub>SHA-256 9caa16e11466232de9dc879070b8cf38f8b3c09faab317bb5bc64e9737a76817</sub> | 17596 / 16118 |
| D2 1440×900 dark | [D2-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/6fedbe9122e3a62f/D2-before.png)<br><sub>SHA-256 429e56e2e7ac2c7d8433fc60c5dc333ec515914b09d33f480763c663de227d81</sub> | [D2-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ff5e32224b2a9460/D2-after.png)<br><sub>SHA-256 ca067553db6e20b960e3fa2624305e5f0fe78dc8fd58ebca0b9c45a0b2a15203</sub> | [D2-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b6186e1bef9c2fbb/D2-diff0.png)<br><sub>SHA-256 a4ebb2def446ec5ddfd2eaf40f8cb4e7bb4b90df3467c194d46ae7ae0511ab2c</sub> | [D2-diffT.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d46fe941c01b1a9b/D2-diffT.png)<br><sub>SHA-256 c8694bb60b3a67bc22bcc8417ec7b6831f2d9facfc341b0b25fc9e2b2239cead</sub> | 17545 / 15605 |
| D3 390×900 light | [D3-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ac3fc476b97f6aaa/D3-before.png)<br><sub>SHA-256 4db0a91e251874cf65da7fe377db1d47297d8c4bff8b2d41afc710814c712ae0</sub> | [D3-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0eab6c32b9d869fd/D3-after.png)<br><sub>SHA-256 5b10e7d64a8e311a548a400b6ff2190d480c871219346fcf403283c6f9c4819a</sub> | [D3-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a1fceb20949c4bd3/D3-diff0.png)<br><sub>SHA-256 90248f64d4a115dedd583b27deee77868810862d5a2cf6883ffa728e0cb8dec1</sub> | [D3-diffT.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2df7e81955f2a230/D3-diffT.png)<br><sub>SHA-256 a0d8d8e557d3f93218addc288f30ae3866dd1880102d0dc23b2d5d40ab9e7f59</sub> | 71442 / 68805 |
| D4 390×900 dark | [D4-before.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/68baeea8646d29d7/D4-before.png)<br><sub>SHA-256 dd1bdf9eb89d99e2f865659e5f853a8635564ef03a29ceb6e9b41d00af2b50dc</sub> | [D4-after.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0b6bd7aa93793940/D4-after.png)<br><sub>SHA-256 0e1556650674b6e938ef6987ce5f02c31dffd3b6986d4a7fb804fd4e18fb4ad1</sub> | [D4-diff0.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c93a9272b68e700a/D4-diff0.png)<br><sub>SHA-256 a808cd213aea78e331d3d146f27f88d9b18e0feab25b9fb0d33f782d2c237b84</sub> | [D4-diffT.png](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4e2c3d297063d3e6/D4-diffT.png)<br><sub>SHA-256 eac32bfe6958d4b5cb43f45660b3be32214fdff233a731cc6ef3f047d9746064</sub> | 71443 / 68446 |

F1–F4: Files rendered preview passes: one body heading, no metadata/rule/setext artifact or masked gap. At 390 the body wraps. D1–D4: supplementary **draft Blob attachment** pairs show the same corrected body using AttachmentFilePreview; these do not establish sent asset fetching.

I1 task interaction, 1440×900 light. Same companion bytes and ordered actions. Timing differs because source syntax highlighting loads asynchronously; recordings are normal speed. Approximate timestamps:
- Before (14.109 s): 0–7 rendered → source with YAML intact; 7–9 rendered → first task checked → source; 9–11 source → rendered → uncheck; 11–14 close/reopen, explorer expanded.
- After (19.158 s): 0–6 rendered → source with YAML intact; 6–9 rendered → first task checked → source; 9–16 source → rendered → uncheck; 16–19 close/reopen, explorer expanded.
- Both versions: disk-byte assertion after checking equals original reporter bytes plus `- [x] first task` and `- [ ] second task`; after unchecking, byte comparison equals seeded original. No YAML or second-task mutation.

| Interaction | Before | After |
|---|---|---|
| I1 Files task/source | [I1-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8624e1d2aef30882/I1-before.mp4)<br><sub>SHA-256 e30e9b7667748eaa5009da0e1995ef51cdbc5c50b3bd8772e934a41ea469246c</sub> | [I1-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/598be6e525ae171e/I1-after.mp4)<br><sub>SHA-256 e7b5a718458c186f6574c48708cae47e2add49922432b4bcac634f2d9bf15a03</sub> |
| Draft source/render/close/reopen (supplementary) | [draft-before.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/92a97fb02705b76d/draft-before.mp4)<br><sub>SHA-256 37b95ab545fec971fabc92f91cdc6ed2123e35b96fcc2b60086015d9c8087798</sub> | [draft-after.mp4](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c2c05e30fa768df3/draft-after.mp4)<br><sub>SHA-256 192824ad506ae632f79e6359bd2f94ae2b03d467122a685f51df2cd1ebb76f70</sub> |

Draft interaction, 390×900 dark: before 9.230 s; after 7.727 s. At 0 s switch rendered → source; approximately 1–6 s inspect original YAML, closing fence, body heading; approximately 6–8 s return rendered → close → reopen. Before shows metadata in rendered view; after hides it. No task editing in attachment preview. Source syntax highlighting briefly loads, then displays original metadata.

L1 passes: real composer file intake, draft chip, rendered/source/close, exact reporter fixture. C1 passes in Files and draft: Control heading, Paragraph, body horizontal rule, Body after rule, checkbox retained. C2 visual proof is not claimed: formatting normalized its opener to `***`; the focused unit test covers true unterminated frontmatter.

Unverified: A1–A4 and I2 **sent attachment**. No persisted sent fixture was available in this tab's isolated draft state. Sending via composer would invoke a provider; no provider was invoked and no synthetic sent state was injected. Draft proof is supplementary, not a substitute for these matrix rows. Desktop shares web components but was not separately launched. Native mobile, relay/tunnel, other providers, chat Markdown and other preview formats were not exercised; mobile renderer remains unchanged.

What else changed: reproducible Markdown fixtures and `seed.mjs` only were committed. Run `node apps/web/test/fixtures/frontmatter-preview/seed.mjs <workspace-root>` to recreate all four files. Exact root reporter fixture remains untracked and untouched. Targeted `vp fmt` and `vp lint` pass for seed.mjs. No additional tests added.

FRICTION: New default-profile tab did not inherit lead cookie or tab-local draft; recovered pairing and recreated project through Add project → Local folder. Initial supplied route selected default server project until local draft was recreated. Tree items required role locators because snapshot omitted shadow tree entries. Narrow Files explorer initially left too little width; collapsed before retained matched captures. Captures include the real app chrome; no claim of native mobile or performance measurement.
