You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
[0.6.1] — 2026-05-30
Fixed
Transport — Musubi.Transport.Socket.build_connect_socket/2 no
longer crashes the WebSocket handshake with FunctionClauseError when
Phoenix's cookie session store delivers connect_info = %{session: nil} (the shape it produces on a cookieless first visit). The handler
now normalizes nil to %{} before passing the session through to Musubi.Socket.put_session/2 (#63).
@musubi/react — Drop the react ^18.3.0 / react-dom ^18.3.0
devDependencies that were causing pnpm-workspace consumers on React
19 to ship two React copies in their production bundle and crash
with minified React error #525 on the first Suspense render. React
is now hoisted at the repo root and pinned via pnpm.overrides; the
package's public peerDependencies (react ^18.2.0 || ^19.0.0) is
unchanged (#63).
@musubi/react — useMusubiRootSuspense no longer wedges
Suspense in an infinite mount/unmount loop under React 19. The
previous timer-based orphan sweep raced React 19's
MessageChannel-scheduled commit and tore the mount entry down before
any consumer could claim it. The cleanup path is now a FinalizationRegistry-backed safety net: each render-phase mount
allocates a fresh unregister token and adds the fiber's useId
claim to a Set<claimerId> on the shared entry. The finalizer
fires only after React releases the discarded fiber, drops this
fiber's claim, and bails while the set is non-empty (other sibling
consumers still hold the entry) or while refs > 0 (a committed
consumer owns the lifecycle). Falls back to "cleanup on channel
termination" on hosts that lack FinalizationRegistry. (#63).