Repository navigation
fix(signals): a halt from a computed's error rethrows the user's error, not the status wrapper - #4423
Conversation
…r, not the status wrapper escalate() halted with the unwrapped cause but rethrew the StatusError, whose own `source` is the reactive node. A flush in a microtask turned that into an unhandled rejection, and a reporter serializing it walked the whole graph (vitest ran out of memory on the #4406 review repro). Rethrow the user's error, as the halt message already reports it. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_015hPxMkC3jg3Uivh65gvaf2
🦋 Changeset detectedLatest commit: 859106c The changes in this PR will be included in the next version bump. This PR includes changesets to release 15 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Size (brotli, eager entry chunk)
|
Every call site now rethrows the cause it halts with, so the parameter goes: -6 B minified on the floors instead of +5. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_015hPxMkC3jg3Uivh65gvaf2
Coverage Report for CI Build 40926542469Coverage remained the same at 78.259%Details
Uncovered ChangesNo uncovered changes found. Coverage RegressionsNo coverage regressions found. Coverage Stats
💛 - Coveralls |
Merging this PR will not alter performance1 warning
Comparing Footnotes
|
Summary
Before: when a memo's error reaches a render effect that no
Erroredcovers, the system halts and rethrows. The rethrown value was Solid's internalStatusErrorwrapper, not the error the user threw. The wrapper's ownsourceproperty is the reactive node. A flush in a microtask turns the rethrow into an unhandled rejection, sounhandledrejection/window.onerrorand any error reporter got the wrapper, and serializing it walks the whole reactive graph. Vitest ran out of memory on the #4406 review repro (an Errored E1 replaced by a held E2, the #4410 shape) onnextand on rc.19. In a plain node run the same scenario computes once, halts, and stays at about 6 MB.After: the halt rethrows the user's error, which is the same value the
REACTIVITY_HALTEDmessage already reports. The repro now fails only on its[E E2]expectation, which the #4410 ruling says is correct.How
escalate()ineffect.tshalted with the unwrapped cause but took a separate value to rethrow, and the compute-error call site passed the wrapper there. Every caller now rethrows the cause it halts with, so the parameter is gone. That makes the floors 6 B smaller minified: the compiled floor measures 27,271 vs 27,277 B onnextlocally.How did you test this change?
tests/errorHalt.test.ts: the rethrown value is the user'sErrorinstance, with no own keys. It fails onnext.🤖 Generated with Claude Code
https://claude.ai/code/session_015hPxMkC3jg3Uivh65gvaf2