github solidjs/solid @solidjs/signals@2.0.0-rc.3

Patch Changes

  • 6717398: Fix pending-gated readers stranded one value behind after a transaction landing. A reader gated on isPending that first reads its async source during the landing flush was served the committed old value under the companion's lane, and the staged value then promoted silently — laneReadsCommitted now records such readers into the active transaction's gated-subs for the existing post-commit replay (#2963 contract). Also fix a latest() shadow disposed at a landing swallowing the next transition's value: a disposed shadow is treated as absent and recreated on access, and an optimistic write no longer equality-compares against a dirty node's stale value.

  • bbcce0a: Fix async-generator projections (and memos) freezing after SSR hydration (#3060)

    A createProjection/createMemo driven by an async generator that settled
    during SSR never resumed on the client: after hydration, a dependency change
    or refresh() re-ran the adoption wrapper, which orphaned a fresh generator
    via subFetch and handed back the already-consumed serialized replay — the
    node froze at its SSR value forever. The adoption wrappers now track the
    serialized stream's terminal state (done/error): re-runs before the terminal
    are NotReady retries of the same flight and keep adopting the replay; re-runs
    after it hand over to the live user compute.

    Two deeper bugs surfaced by the fix:

    • Projection drafts are now proxies over a fake target (the store's own
      TargetShape trick) instead of the store proxy itself. Spec invariant
      validation runs against a proxy's target after each trap returns — outside
      the draft's write-override bracket — so Object.keys(state) in a derive
      continuation re-entered the store's ownKeys, hit the seed-invisibility
      firewall gate, and re-threw the projection's own pending NotReadyError into
      the derive. The draft traps (including new ownKeys / getOwnPropertyDescriptor /
      defineProperty coverage) forward to the store inside the bracket; invariants
      only ever see the dummy.
    • The store replay's first-pull thenable swallowed exceptions thrown while
      applying the SSR snapshot (the rejection landed on a derived promise nobody
      observed), silently killing the drain and wedging boundary hydration open.
      Failures now route to the flight's rejection and surface through the normal
      error channel.

Don't miss a new solid release

NewReleases is sending notifications on new releases.