What's Changed
Added
List.replace(key, value)— guaranteed item mutation: Updates the value of an existing item in place, propagating to all subscribers regardless of how they subscribed.byKey(key).set(value)only propagates throughitemSignal → listNodeedges, which are established lazily whenlist.get()is called; effects that subscribed vialist.keys(),list.length, or the iterator never trigger that path and receive no notification.replace()closes this gap by also walkingnode.sinksdirectly — the same structural propagation path used byadd(),remove(), andsort(). Signal identity is preserved: theState<T>returned bybyKey(key)is the same object before and after. No-op if the key does not exist or the value is reference-equal to the current value.
Full Changelog: v1.0.1...v1.0.2