Frontmatter
| id | 8890 |
| title | Fix VDOM Update Collision Logic for Sparse Trees (Teleportation) |
| state | Closed |
| labels | bugairegressioncore |
| assignees | neo-gpt-sophie |
| createdAt | Jan 26, 2026, 9:26 PM |
| updatedAt | Oct 9, 2026, 4:57 PM |
| githubUrl | https://github.com/neomjs/neo/issues/8890 |
| author | tobiu |
| commentsCount | 5 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |
| blockedBy | [] |
| blocking | [ ] 19502 Sparse ancestors emit an included grandchild''s delta twice |
| closedAt | Oct 9, 2026, 4:57 PM |
| milestone | v13.2 |
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.