Every #[component] now runs its body in a reactive::Scope registered against its shadow node, and Document::remove_node disposes the scopes registered across the subtree it removes. Effects built for a component stop when its node goes away instead of panicking with "node was removed" the next time one of their inputs changes, and on_cleanup callbacks registered in a component body now run at that point. Scopes opened for dynamically built children (show, for_each, virtual_list) used to be re-rooted at the document, so they only died if remove_node happened to reach them. reactive::owner_scope() returns the scope that created the running computation, which lets those scopes hang off the component that built them while still surviving that component's effects re-running. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017W8YfdzDmZcR8A76jRjvZY
BE3 Agent committed on 9/10/2026, 11:38:54 PMparent612692f
12 files changedLine totals unavailable