Repository navigation
Immutable
release. Only release title and notes can be modified.
What's Changed
Fixed
match()ignored thestalehandler for any signal that was not a literalTask(src/nodes/effect.ts,src/graph.ts): Previously,match()chosestaleonly whenisTask(s) && s.isPending(). Two cases fell back tookand showed the retained value with no in-flight signal: (1) aListorStorederived from an async computation, whose asynchrony lives in an internalTaskregistered through the ADR-0018 async-source registry; (2) aSlotwhose backing signal is aTask. Integration layers store writable props as slots, so an async value passed into one lost itsstalestate. Nowmatch()uses the freeisPending()utility, and the async-source resolver follows a slot'scurrent()backing (and chains of slots) to the signal that carries the async state.isPending(slot)andabort(slot)therefore act on the backing signal. Mutually delegating slots resolve to no async source and do not loop. A slot backed by aSlotDescriptorhas no async source. Effects that usestalenow run it during a re-fetch in these cases; effects without astalehandler are not affected.
Full Changelog: v1.6.0...v1.6.1