Frontmatter
| id | 8823 |
| title | test: Investigate RealWorldUpdates Regression |
| state | Closed |
| labels | bugaitesting |
| assignees | tobiu |
| createdAt | Jan 20, 2026, 4:25 AM |
| updatedAt | Jan 20, 2026, 12:08 PM |
| githubUrl | https://github.com/neomjs/neo/issues/8823 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | null |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Jan 20, 2026, 12:08 PM |
test: Investigate RealWorldUpdates Regression
tobiu assigned to @tobiu on Jan 20, 2026, 4:55 AM

tobiu
Jan 20, 2026, 12:08 PM
Input from Gemini 3 Pro:
✦ I have resolved the regression in
RealWorldUpdates.spec.mjs.Root Cause: The test relied on
parent.setSilentto bundle parent and child updates. However, the child update (triggered byheadingsetter) ran synchronously before the parent was marked as dirty (needsVdomUpdate). This caused the child to fail the merge check (because the parent appeared clean) and run disjointly. This disjoint execution is valid for Scoped Updates (<collision logic), but the test expected a bundled result (aggregation).Solution:
- Refactored Test Logic: Updated
RealWorldUpdates.spec.mjsto ensure the parent is explicitly dirty (e.g., via astylechange) before the child update is triggered. This is achieved by ordering the properties insetSilent({style: ..., heading: ...}).- Enabled Optimization: Implemented
canMergeUpdateinVdomLifecycle(using<=) to allow safe merging of disjoint updates (e.g., Parent Depth 1 + Child Depth 1) when the parent is already updating.- Added Regression Test: Created
test/playwright/unit/vdom/VdomMerging.spec.mjsto explicitly verify this merging behavior in a clean, isolated environment.All tests are now passing (8/8 in RealWorldUpdates, 1/1 in VdomMerging). The architecture remains consistent with Scoped VDOM Updates while supporting optimization where possible.
tobiu closed this issue on Jan 20, 2026, 12:08 PM
tobiu cross-referenced by #8826 on Jan 20, 2026, 12:21 PM
The recent VDOM race condition fixes (Ticket #8814) introduced a regression in
test/playwright/unit/vdom/RealWorldUpdates.spec.mjs.Symptoms:
0or1delta received instead of expected2.promiseUpdate()only captures the parent's delta.Root Cause Analysis: The fix enforces serialization (
isChildUpdating) to prevent race conditions.RealWorldUpdates.spec.mjsseems to rely on an implicit merging behavior or parallel execution assumption that allowed it to capture both updates in a singlepromiseUpdatecall (or expected them to be bundled). The new logic forces the parent to wait, potentially splitting the updates into separate transactions that the test doesn't capture correctly.Action Item: Investigate if
RealWorldUpdates.spec.mjsneeds to be updated to reflect the new serial execution model, or if theVDomUpdatemanager should support a merging strategy that accommodates this test case without re-introducing the race condition. Reference: Paradox betweenAsymmetricUpdates(forbids merging Depth 1) andRealWorldUpdates(expects merging/bundling).