Semiotic 3.8.0
Chart-level notifications, worker-backed force layouts, x-band annotations, sturdier interval lanes, custom-layout readback, and explicit experimental boundaries for DataPitfalls and GoFish adapters.
AI-Generated·
3.8.0 is a chart-operations release: chart-level notifications, worker-backed force layouts, richer interval and annotation primitives, and clearer experimental boundaries for the adapters that are still being proven with real consumers. Full release notes are onGitHub.
Chart-Level Notifications
ChartContainer now accepts a notificationsprop for findings that belong to the whole chart rather than one mark: data-pitfalls warnings, accessibility-audit findings, unplaceable data quality results, or host-authored notices. They collapse into a severity-aware bell with a count badge and open into dismissible cards, so streaming notices do not reflow the plot area.
The notification layer also includes an aria-live summary, semantic class hooks, stable dismiss-by-id behavior, and anonNotificationDismiss callback for host telemetry or store synchronization.
Force Layouts Move Off the Main Thread
ForceDirectedGraph gains layoutExecution,layoutLoadingContent, and onLayoutStateChange. In auto mode, expensive layouts settle in a short-lived module Web Worker and fall back to the synchronous path when workers are unavailable. SSR and first hydration stay synchronous for markup parity.
The underlying force model is also more realistic: degree-aware charge, degree-normalized link strength, radius-aware collision, weaker centering, and d3-force under the recipe-level forceLayout. The same seed can produce different geometry than earlier 3.x builds, so position-pinned visual snapshots should be regenerated.
Time, Intervals, and Custom Layouts
New x-band annotations mark eras or phases as full-height shaded regions in both canvas and SSR output.intervalLanesLayout now has a minBarWidth floor and packs in rendered-pixel space, keeping zero- and short-duration intervals visible without overlapping their neighbors.
Custom chart hosts get a new readback path:ref.current.getCustomLayout() returns the most recent layout result for XY, ordinal, network, and geo custom HOCs. Inspectors, validation layers, and stats readouts can now consume the computed placement without re-running the layout function.
Experimental Adapters Stay Experimental
The DataPitfalls bridge and GoFish DisplayList adapter are intentionally still outside the stable public API. Importunstable_toDataPitfallsChain andunstable_buildDataPitfallsBridge fromsemiotic/experimental; importunstable_fromGofishIR from the same endpoint. The names are explicit because those contracts depend on external render-IR and review schemas that are still settling.
Upgrade Notes
Bump package consumers and MCP metadata to 3.8.0. If you use Content Security Policy with force-directed graphs, allow workers from your own origin with worker-src 'self'. If you had imported DataPitfalls helpers from semiotic/ai, switch to the experimental names from semiotic/experimental.
See Chart Containers,Data Pitfalls Bridge, andGoFish DisplayList for the updated docs.