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] A visible button's condition throws in its click handler during a held update #4109
A button is shown with <Show when={condition()}>, and its click handler reads the same condition() memo.
An update makes that memo throw while a rendered async sibling holds the frame. The button stays visible, but clicking it again throws the new error. The ordinary outside read sees the failure before the frame that still shows the button reveals.
Click Use value. It logs condition: true and starts a five-second update.
While Update pending… click Use value again. is visible, click Use value again.
The click handler throws Condition failed, even though the button is still visible and the async sibling still shows initial.
When the async sibling resolves, it becomes updated and the error boundary replaces the button with the error.
Both clicks are manual. Reload the playground to repeat.
Expected behavior
While the held frame still shows the button, the ordinary condition() read in its event handler should retain the committed true result. The failure should become observable when the frame reveals and the error boundary replaces the button.
Screenshots or Videos
No response
Platform
OS: Linux
Browser: Chromium 154.0.8037.57
Solid: playground pinned to next@d5e32a9af41c7bfe0bc090f7438ee4297d540b17, which includes fix(signals): a held error waits for its frame (D-41) #4085. The source regression also reproduces on next@ccd99481deed3ebb567ee11ab7a152ced84d122b.
Additional context
Follow-up to #4085. The hosted repro verifies that the second click throws while the button and pending indicator remain visible. The boundary only replaces the button after the async sibling resolves.
D-41 specifies that ordinary outside reads retain the committed outcome during a hold. It already records an early-read deviation for derived stores; this example uses a synchronous scalar memo.
Activity
perf(signals): gate the pass-staged error on a running flush alone (#…