You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[2.0 / next] isPending(s) reads true for a signal whose writes net to its committed value in the tick an action opens a hold (D-8) #4485
On next @ ab3d2ad, writes that net to a signal's committed value pend it when they happen in the same tick as an action that holds another write. A render effect reading isPending(s) shows true for the whole hold. It then runs once more at the landing with the same values.
const[s,setS]=createSignal(1);const[x,setX]=createSignal(0);createRoot(()=>{createRenderEffect(x,()=>{});createRenderEffect(()=>[s(),isPending(s)],v=>runs.push(v));});flush();letrelease;action(function*(){setX(1);setS(2);setS(1);// nets to the committed 1yieldnewPromise(r=>(release=r));})();awaittick();// runs: [[1, true]] ← isPending(s) is true; unowned isPending(s) is falserelease();awaittick();// runs: [[1, true], [1, false]]
The same thing happens when setS(2); setS(1) runs on the mainline just before the action, in the same tick. When the netted writes come in a later tick, or there is no hold at all, the reader shows [1, false] and is not re-run at the landing.
Rule. D-8: "A tick whose writes net to the slot's committed value made no proposal: the slot is not held, pends nothing." So isPending(s) should be false, and the screen should be [[1, false]].
Where. The re-run is the seat table's row V2: the stagedScreen seam in read runs before any netted check and lists the reader as a stale reader of the flush's hold. I haven't traced where the true verdict comes from yet. Found while reviewing #4472. It is in the same family as #4469's landing re-runs.
Activity
test(signals): pin #4469's plain reader at the commit; D-23 known dev…
perf(signals): fold #4485's netted arm into read's tail and verdictVa…
ryansolid commentedon Oct 30, 2026
Fixed on
nextby #4498 (b5077ea); it ships in the next RC.Generated by Claude Code
fix(signals): writes that net in an action's tick pend nothing for a …