Frontmatter
| id | 8465 |
| title | Investigate VDOM ID Collisions and Create Reproduction Test |
| state | Closed |
| labels | bugaitestingcore |
| assignees | tobiu |
| createdAt | Jan 9, 2026, 2:31 PM |
| updatedAt | Jan 9, 2026, 2:50 PM |
| githubUrl | https://github.com/neomjs/neo/issues/8465 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Jan 9, 2026, 2:50 PM |
Investigate VDOM ID Collisions and Create Reproduction Test

Input from Gemini 3 Pro:
✦ I have implemented an architectural resolution for VDOM ID collisions, which were the root cause of the "Zombie Update" artifacts observed in the Portal app.
Investigation Summary
The issue was traced to
ComponentManager.wrapperNodes. This Map uses VDOM node IDs as keys to map back to component instances for components that use a wrapper node (e.g.Portal.view.news.blog.List). When multiple components with wrapper nodes were created, their auto-generated VDOM IDs (e.g.neo-vnode-1) would collide in the global Map, causing the framework to incorrectly resolve component references during tree flattening.Resolution
Instead of relying on auto-generated IDs for wrapper nodes, the framework now automatically assigns a stable, unique ID derived from the component instance ID:
VdomLifecycle: Automatically assignsme.id + '__wrapper'to the root VDOM node if it is a wrapper node.Component.Base: Synchronizes this stable ID inafterSetIdto maintain consistency if the component ID changes.Verification
- Added a new unit test:
test/playwright/unit/vdom/AutoId.spec.mjs. This test successfully reproduces the collision bug by forcingIdGeneratorresets and verifies that the fix prevents the collision.- Reverted the manual
onConstructedID fixes in the Portal app, as they are no longer required.The system is now robust against auto-generated VDOM ID collisions for wrapped components.
Commit: 98552e98e (#8465)
Investigate the root cause of issue #8464 where components appeared to share VDOM IDs or cross-contaminate.
Suspicions:
_vdomobjects leading to shared IDs.VDomUpdatemanager.Goal: Create a unit test
test/playwright/unit/vdom/AutoId.spec.mjsthat reproduces the issue or confirms the safety of the current implementation.