Change8

@solidjs/signals@2.0.0-rc.4

📦 solid-jsView on GitHub →
4 features🐛 7 fixes🔧 14 symbols

Summary

This release introduces a new diagnostic footer for better pain-point discovery and significantly enhances the patch-mode list driver for improved performance and handling of store mutations. It also includes several bug fixes related to memoization, projection stores, and transition handling.

Migration Steps

  1. The target for patch-channel state is now capped at 20 named fields. Future patch-channel state should go inside the `pc` extension.

✨ New Features

  • Introduced point-of-pain discovery for diagnostics, allowing `DEV.diagnostics.setConsoleFooter(fn)` to register a footer printed once per diagnostic code after its first console report. This helps users find repair skills for diagnostic warnings.
  • Implemented a patch-mode list driver for keyed `<For>` over store arrays, optimizing create/bind operations, LIS moves, and node removal by avoiding `mapArray` and per-row owners. It supports `$ll` metadata for unaware renderers and declined lists, and uses raw-identity matching for array identity swaps.
  • Enabled shallow store lists through the compiled driver, graduating slot patches from prototype to channel semantics. The list driver collects shallow row compiled bodies at bind and dispatches them from the array's slot channel, rebasing indices with structural ops.
  • Made optimistic family arrays drivable by the patch-mode list driver, completing the family channel. Structural optimism in drafts emits identity-diffed row ops, and reverts emit an identity RESYNC.

🐛 Bug Fixes

  • Fixed external-audit issues on the patch-list driver surface: family arrays now decline the driver to prevent freezing on optimistic or projection structure, and shallow slot-patch registration is now multi-consumer to prevent overwrites.
  • Grouped write-side patch-channel fields (`wk`, `p`, `ro`, `sp`) into a lazily-allocated `pc` extension on store targets and deleted the dead prototype binding registry (`b`).
  • Fixed `isPending` memos reading inconsistently during an action-held transition (#3078). Untracked top-level reads of subscriber-less auto-dispose memos are no longer destructive, and the fresh-read pairing rule now correctly suppresses the pending verdict for computes seeing staged writes during an action.
  • Fixed projection stores leaking unsettled writes to effect-phase readers (#3082). Projection reads in `onSettled` / `createTrackedEffect` callbacks now get committed visibility.
  • Fixed projection transition isolation and `latest()` parity (#3074, #3075). Untracked readers now see committed values after `flush()`, and `latest()` now works through projections.
  • Fixed shallow slot-patch emission racing row creation, preventing crashes on clear-then-refill and pure appends.
  • Fixed store folds silently stranding while any transition is in flight (#3089). Folds now always arm the scheduler, and drafts written under a still-running transition defer to that transition's settle.

Affected Symbols