Two issues discovered during testing:
1. data-effect expressions for signal-backed markers short-circuited
before reading $signalID when the map hadn't loaded yet. Datastar
never tracked those signals as dependencies, so the effect never
re-ran. Fix: read signal values unconditionally before the guard.
2. prepareSignalsForPatch never reset changed=false on regular signals
(only computed ones), causing every SyncSignals() call to re-push
all signals — including stale server-side values for the draggable
pin, overwriting the client-side drag position.