Routing pasted images to the attachment strip wasn't enough — the editor's ImageBlock feature still handled the paste itself and left a stuck "upload in progress" node, since there's no public upload URL for it to resolve to. Turn the feature off entirely. It's the root cause: it's the only thing that registers paste/drop-to-upload. Image *links* still render through the base commonmark schema (a plain <img>), and pasted image files continue to go to the attachment strip via use-file-input. Drop the now-dead image-block upload/chrome CSS and keep a simple inline-image style. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01QtNQeBpkDJPC9obiB25pV6
Notes
CORS for desktop app
In dev: each renderer process has its own localhost port. The renderer process passes this in the Origin header for requests, and expects appropriate ACAO headers in the response.
In packaged app: the renderer process does not include Origin header, so expects no extra ACAO headers from the server, otherwise the client would fail to accept responses.