feat: Live Share links: snowbound.paperclover.net/<code> opens the share in Snowbound
Live Share's dialog gains Copy Link beside Copy: https://snowbound.paperclover.net/
followed by the code. That address is a new small service, snowbound-site (a
second binary in crates/relay): it serves the hosted web build's folder, and
for a path that is a code, read as loosely as the app reads one, a page with
Open in Snowbound (snowbound://join/<code>), and Open in Web once --web names
where the web build joins. It listens on 127.0.0.1:23593 behind Caddy, with a
systemd unit and pm2 notes in crates/relay/README.md; release_relay.py builds
it beside the relay. It takes over from tools/web/serve.py, with the same cache
rules (b/<hash>/ kept for good, index.html checked every load), and
release_web.py --deploy now also builds it for the VPS and restarts pm2's
snowbound-site only when its binary changed. The relay's unit now listens on
23592.
snowbound:// opens the share: macOS's bundle declares the scheme and the app
takes application:openURLs:, Windows registers it for this user beside the
OneNote file types, and Linux's desktop entry handles x-scheme-handler/
snowbound with %U (files arrive as file:// URLs, which the app now reads).
A link pasted into Open Shared Notebook works as its code does. The code
module moves to the relay crate, which the site and the app both read it
from.
Assisted-by: claude-opus-5.5
3dff91e5b8clover caruso committed on 10/3/2026, 12:26:36 PMparent02acde3