Surfaced by the e2e gap suite (EXP-1/2, test.fixme in e2e/tests/export.spec.js).
Gap: PreviewFrame exposes a getPng() imperative handle (web/src/preview/PreviewFrame.tsx:221) but it has zero callers, and there is no PNG or SVG download path anywhere in web/src. The legacy app offered PNG/SVG export. RendererHeader hosts only Present + optional Fit.
Fix (feature): add export-to-PNG and export-to-SVG controls (wire getPng() + a renderToSvg download). Then flip EXP-1/2 test.fixme → test.
Surfaced by the e2e gap suite (EXP-1/2,
test.fixmeine2e/tests/export.spec.js).Gap:
PreviewFrameexposes agetPng()imperative handle (web/src/preview/PreviewFrame.tsx:221) but it has zero callers, and there is no PNG or SVG download path anywhere inweb/src. The legacy app offered PNG/SVG export.RendererHeaderhosts only Present + optional Fit.Fix (feature): add export-to-PNG and export-to-SVG controls (wire
getPng()+ a renderToSvg download). Then flip EXP-1/2test.fixme→test.