Side connectors (left/right/bottom) snapped to the top of the target card
instead of attaching where you dragged. onConnect was discarding the
sourceHandle/targetHandle from the connection, so React Flow fell back to
the first handle (t, top). Connections now attach to the exact side, matching
tldraw-style behavior, and the handle ids persist across reload and live sync.
Changed
components/Canvas.tsx—onConnectkeepssourceHandle/targetHandle; edge load, persist,getBoard, andreceiveEdgesall carry the handle ids.lib/canvas-store.ts—StoredEdgegains optionalsourceHandle/targetHandlefields.