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] An own error over a held write flashes the Errored fallback at the landing when the reader is a memo (inline render effect doesn't) #4407
A reader computes latest(a) + b() + 1 and throws its own error at one value. a and b are written in the same batch as a slow async memo that holds the write. When the hold lands, the reader's result goes title=2 → [E own:3] → title=6 if it is read through a memo, but title=2 → title=6 if the same function runs directly in a render effect. JSX grouping changes the result (the #4401 / #4284 parity rule: a latest() read inline and through a memo show the same screen).
The content isn't remounted (one mount) and the final screen is right, but the Errored boundary's fallback is shown during the landing flush.
Reproduction
const[a,setA]=createSignal(1);const[b,setB]=createSignal(0);const[c,setC]=createSignal(1);letresolve!: ()=>void;createRoot(()=>{constslow=createMemo(()=>{constv=c();returnv>1 ? newPromise<number>(r=>(resolve=()=>r(v))) : v;});createRenderEffect(slow,()=>{});constf=()=>{constv=latest(a)+b()+1;if(v===3)thrownewError("own:3");returnv;};constview=createErrorBoundary(()=>untrack(()=>{constm=createMemo(f);// inline form: createRenderEffect(f, show)createRenderEffect(()=>m(),v=>log(`title=${v}`));return"content";}),e=>`[E ${e()?.message}]`);createRenderEffect(()=>view(),v=>v!=="content"&&log(String(v)));});flush();setA(2);setB(3);setC(2);flush();// held by `slow`// ...settle...resolve();// landing
Full probe (memo and store sources, five reader shapes, memo vs effect): zz-own-err-3945.test.ts, run on next at 9baaba3.
shape
memo reader
effect reader
own error only
title=2, [E own:3], title=6
title=2, title=6
catches an errored source, then own error
title=2, [E own:3], title=6
title=2, title=2, title=6
rethrows source error as own
title=2, [E own:3], [E own-x]
title=2, title=2, [E own-x]
Expected
The memo and inline forms show the same sequence, without the fallback in between: the own:3 pass (latest(a) = 2 beside the held b() = 0) isn't a screen the landing should show.
Activity
fix(signals): an own-error memo's landing re-derive runs before the h…
ryansolid commentedon Oct 29, 2026
Fixed on
nextby #4409 (822fa01); it ships in the next RC.Generated by Claude Code