Desktop relative Markdown image proof

Each commit runs in its own checkout with dependencies installed using vp i.
Set CHECKOUT to that checkout, SCRATCH to a new scratch directory, and SIDE to base or head.
Create shared/repo/docs and remote-view/repo/docs under SCRATCH. The remote view has no report.png.
Run the remote in a private mount namespace:
  unshare -rm bash start-remote.sh "$CHECKOUT" "$SCRATCH" "$SIDE"
Run desktop from CHECKOUT in a separate terminal:
  XDG_CONFIG_HOME="$SCRATCH/$SIDE-config" T3CODE_DEV_SEED=0 T3CODE_DESKTOP_REMOTE_DEBUGGING_PORT=49392 headless-desktop vp run dev:desktop
Run seed.sh, then drive-desktop.cjs with Node. It deselects history imports, finishes onboarding,
pairs the remote through Settings > Environments, opens the Replay thread, and sends the relative image.
Close the thread details panel with its toolbar button then Escape if it is initially open.
Blur toolbar focus and leave the pointer outside the conversation.
Run capture.cjs with LABEL=remote-missing. It requires two identical screenshots 500 ms apart.
For the remote-file control, create a green PNG at remote-view/repo/docs/report.png with ImageMagick:
  convert -size 360x160 xc:green "$SCRATCH/remote-view/repo/docs/report.png"
Run cdp.cjs reload.js, then capture.cjs with LABEL=remote-present.
Remove only that synthetic remote PNG before checking the cache separation.
Run cdp.cjs cache-check.js, then capture.cjs with LABEL=cache-separation.
The third Replay response repeats the first response's fixture text.
Do the same steps for the other commit after stopping the first desktop and remote.
The evidence thread uses Replay and a fresh synthetic database.

Observed: base loads desktop red when remote is missing; head shows Image unavailable.
Both load remote green when it exists. With the remote missing, base uses the same desktop URL
for relative and absolute references; head permits the absolute reference and leaves relative unavailable.
