The recent implementation of Disjoint VDOM Updates (Teleportation) introduced a regression where disjoint child updates can be incorrectly dropped from the update batch.
This occurs when:
- A Parent component is updating with
updateDepth > 1.
- The Parent has at least one merged child (triggering Sparse Tree generation via
mergedChildIds).
- A Disjoint Child (Distance < ParentDepth) is updating independently in the same batch.
- The Disjoint Child is NOT in the Parent's
mergedChildIds set.
The current collision filtering logic (parentDepth > distance) deletes the Disjoint Child's update, assuming the Parent will cover it. However, because the Parent is generating a Sparse Tree (mergedChildIds is present), TreeBuilder prunes any child not in the AllowList.
Result: The Disjoint Child is deleted from the batch AND pruned from the Parent payload, leading to a lost update (e.g., Loading Mask failing to show).
The fix is to refine the collision detection in src/mixin/VdomLifecycle.mjs to check if the Parent is excluding the Child (Sparse Mode) before deleting the disjoint update.
The recent implementation of Disjoint VDOM Updates (Teleportation) introduced a regression where disjoint child updates can be incorrectly dropped from the update batch.
This occurs when:
updateDepth > 1.mergedChildIds).mergedChildIdsset.The current collision filtering logic (
parentDepth > distance) deletes the Disjoint Child's update, assuming the Parent will cover it. However, because the Parent is generating a Sparse Tree (mergedChildIdsis present),TreeBuilderprunes any child not in the AllowList.Result: The Disjoint Child is deleted from the batch AND pruned from the Parent payload, leading to a lost update (e.g., Loading Mask failing to show).
The fix is to refine the collision detection in
src/mixin/VdomLifecycle.mjsto check if the Parent is excluding the Child (Sparse Mode) before deleting the disjoint update.