Current section

19 Versions

Jump to

Compare versions

9 files changed
+50 additions
-16 deletions
  @@ -11,6 +11,26 @@ not in lockstep yet; entries note which surface they affect.
11 11
12 12 ## [Unreleased]
13 13
14 + ## [0.10.0] — 2026-06-24
15 +
16 + ### Fixed
17 +
18 + - **`@musubi/client` / `@musubi/react`** — Snapshotting a store whose node is
19 + absent from the index now returns `undefined` instead of a stub object cast to
20 + the fully-hydrated snapshot type. The stub typechecked as complete, so a
21 + consumer dereferencing a "guaranteed" field (`snap.artifact.id`) crashed at
22 + runtime — most visibly on a websocket reconnect (e.g. iOS Safari backgrounded
23 + then resumed) when a re-render hit the reset index. `StoreProxy.snapshot()`
24 + and `useMusubiSnapshot` now return `StoreSnapshot<M, R> | undefined`.
25 + **Breaking (types):** unguarded `.field` access on a snapshot is now a `tsc`
26 + error — guard with `if (!snap) …` (the same skeleton you render on cold mount).
27 + - **`@musubi/client`** — Version-mismatch recovery no longer empties the store
28 + index before re-mounting. It keeps serving the last-good (stale-but-complete)
29 + snapshot through the remount window and lets the remount's initial patch
30 + (whole-root `replace ""`) swap in fresh state atomically, closing the
31 + reconnect-window stub on the self-healing path. The terminal disconnect path
32 + still resets; the type guard above covers it.
33 +
14 34 ## [0.9.2] — 2026-06-23
15 35
16 36 ### Fixed
  @@ -326,7 +346,8 @@ Initial public release of the Musubi runtime (then `Arbor`):
326 346 - TypeScript client and React adapter that materialize the diff stream
327 347 into immutable snapshots.
328 348
329 - [Unreleased]: https://github.com/fahchen/musubi/compare/v0.9.2...HEAD
349 + [Unreleased]: https://github.com/fahchen/musubi/compare/v0.10.0...HEAD
350 + [0.10.0]: https://github.com/fahchen/musubi/compare/v0.9.2...v0.10.0
330 351 [0.9.2]: https://github.com/fahchen/musubi/compare/v0.9.1...v0.9.2
331 352 [0.9.1]: https://github.com/fahchen/musubi/compare/v0.9.0...v0.9.1
332 353 [0.9.0]: https://github.com/fahchen/musubi/compare/v0.8.0...v0.9.0
  @@ -34,7 +34,7 @@ Add Musubi to your Phoenix application:
34 34 ```elixir
35 35 def deps do
36 36 [
37 - {:musubi, "~> 0.9.2"}
37 + {:musubi, "~> 0.10.0"}
38 38 ]
39 39 end
40 40 ```
  @@ -10,7 +10,7 @@ In the Phoenix app:
10 10 ```elixir
11 11 def deps do
12 12 [
13 - {:musubi, "~> 0.9.2"}
13 + {:musubi, "~> 0.10.0"}
14 14 ]
15 15 end
16 16 ```
  @@ -1,6 +1,6 @@
1 1 {<<"links">>,[{<<"GitHub">>,<<"https://github.com/fahchen/musubi">>}]}.
2 2 {<<"name">>,<<"musubi">>}.
3 - {<<"version">>,<<"0.9.2">>}.
3 + {<<"version">>,<<"0.10.0">>}.
4 4 {<<"description">>,
5 5 <<"Server-authoritative, page-scoped runtime library for Elixir/Phoenix applications.">>}.
6 6 {<<"elixir">>,<<"~> 1.18">>}.
  @@ -1,7 +1,7 @@
1 1 defmodule Musubi.MixProject do
2 2 use Mix.Project
3 3
4 - @version "0.9.2"
4 + @version "0.10.0"
5 5 @source_url "https://github.com/fahchen/musubi"
6 6
7 7 def project do
Loading more files…