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
A memo over latest(m) keeps m's last value when m starts throwing #4377
Found by the async app generator's E9 pair, which compares latest(x) read at a leaf with the same read inside a derivation (#4371). Reproduces on next5f60713.
const[a,setA]=createSignal(0);constm=createMemo(()=>{if(a()===1)thrownewError("boom");returna();});constd=createMemo(()=>latest(m));render(()=><Erroredfallback={e=>"[ERR]"}><span>{d()}</span></Errored>,el);// deriverender(()=><Erroredfallback={e=>"[ERR]"}><span>{latest(m)}</span></Errored>,el2);// leafsetA(1);flush();// then settle
Leaf: [ERR]. This is correct, and it's what a fresh render shows.
Derive: <span>0</span>, which never changes. d keeps m's last value instead of rethrowing m's error.
So m is synchronous, but reading it through latest() inside a memo swallows its error. In the generator this is the most common E9 signature: 7 of 1,000 cases.
Activity
test(web): async-gen pairs E8 (birth seat) and E9 (latest in a derive)
test(web): async app generator — generated async apps, liveness oracl…
test: pin #4377 (a memo over latest(m) shows m's error as the leaf does)
test: pin #4377 (a memo over latest(m) shows m's error as the leaf do…
ryansolid commentedon Oct 28, 2026
Fixed on
nextby #4386 (cbc0eeb); it ships in the next RC.Generated by Claude Code
test(web): async-gen refetch oracle counts only answers the payload c…