Synapse v1.9.3 — "live wire"¶
Fourth release of the v2.0 train, and the flagship of the refactor half: a real-time push channel replacing blind polling, the graph viewer's WebGL instance no longer resets itself mid-ingest, one unified UI kit, and two long-standing UX papercuts (full-page reload on vault switch, a command palette that could only navigate) closed out. Five workstreams, zero migrations.
Added¶
GET /eventsSSE push channel (flagship, FE-RT-2): a change-driven generator streamsdata_versionand ingest-queue counts to the browser instead of the client polling for them. Heartbeat every 15s, hard 30-minute stream cap (I7-bounded), clean shutdown on client disconnect. The frontendeventsStoreuses a manualfetch()+ReadableStreamreader (instead of nativeEventSource, which can't carry Bearer/CF-Access auth headers), with exponential-backoff reconnect andLast-Event-IDresume.- Command palette v2: executable actions (new chat, import content, run lint scan, switch project, switch theme, regenerate overview) alongside the existing page/section navigation.
Changed¶
GraphViewer.tsx(3,627 lines) had its 7 already-formed subcomponents extracted (move-only, FE-ARCH-1) intocomponents/graph/.- The sigma WebGL instance is no longer killed and rebuilt on every background data refresh
(FE-RT-1). During a long ingest, the periodic
/graphrefetch used to tear down and recreate the entire renderer. It now diffs the incoming payload into the already-mounted graphology graph in place and only rebuilds on a real theme/colorMode change or the true first mount. - Startup fan-out and re-render efficiency (FE-PERF-1/2/3): the Home dashboard's "open
questions" block now asks the server to filter by page type (
GET /pages?type=query); four below-the-fold blocks defer their first fetch torequestIdleCallback;activityStoreskips its state update entirely when a poll snapshot is structurally unchanged; chat streaming batches token/think deltas into onerequestAnimationFrame-scheduled update per frame. - One UI kit: new
components/uiprimitives (Button, Chip, Card, Field, Notice, Skeleton) replace both parallel button systems. A--syn-font-*/--syn-space-*token scale was added; 26 hand-rolled inline SVG icons were replaced withlucide-reactequivalents. - Switching the active vault no longer reloads the page (FE-UIUX-3):
resetAllVaultStores()is the single choke point both the project launcher and the new-project wizard now call after activation.
Fixed¶
- A
GraphViewerbug found during this release's own verification: the live-diff effect merged the wrong attribute shape into the mounted sigma graph, stripping every node's color on the very first background refresh after mount. - A persistent SSE connection was silently hanging the entire E2E suite:
page.goto(..., { waitUntil: "networkidle" })can never resolve once a long-lived stream is open. Fixed by deferring the stream connection past the initial load burst and switching 9 affected E2E spec files fromnetworkidletodomcontentloaded.
Upgrade¶
No Alembic migrations. Pull new images.