You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
On the branch/proposed-change diff Data view, the left-hand tree omits changed nodes when their hierarchical parent has no changes of its own. The right-hand diff list shows them correctly, so the two panes disagree.
The DiffTree GraphQL response (queried with include_parents: true) intentionally contains the parent nodes with status: UNCHANGED as hierarchy context (added by parent_node_adder.py). The frontend filters out all UNCHANGED nodes in entities/diff/ui/node-diff/index.tsxbefore building the tree, and buildDiffTreeItems (entities/diff/utils/build-diff-tree-items.ts) then silently drops any node whose parent.uuid cannot be found among the tree items.
The drop is transitive: a changed parent that was itself dropped takes its changed children with it (e.g. an ADDED prefix under an UPDATED prefix under an unchanged root prefix disappears too).
Expected Behavior
Every changed node visible in the right-hand diff list also appears in the left tree, nested under its (unchanged) parent — as it did before the regression, where unchanged parents were rendered as context items in the tree.
The right pane shows i.a. two Updated Infra › Interface L3 Ethernet1 (parents jfk1-edge1/jfk1-edge2 are unchanged), Updated Ipam › IP Prefix 10.1.0.0/16, and Added Ipam › IP Prefix 10.1.0.32/31.
The left tree contains only IP Address → 10.1.0.33/31, 10.1.0.32/31 and IPAM Namespace → default. Both interfaces and both prefixes are missing (verified via the tree DOM — not a collapsed-node issue).
Originally reported by a customer (Slack, #ext-rolex, 2026-07-22): an updated Loadbalancer Pool Member shown in the right pane had no entry in the left tree because its pool was unchanged.
Drop site: frontend/app/src/entities/diff/utils/build-diff-tree-items.ts — if (!parentTreeItem) return acc;. This is also order-sensitive for multi-level parent chains.
Component
Frontend UI
Infrahub version
1.10.0 (regression present since #5676, Feb 2025)
Current Behavior
On the branch/proposed-change diff Data view, the left-hand tree omits changed nodes when their hierarchical parent has no changes of its own. The right-hand diff list shows them correctly, so the two panes disagree.
The
DiffTreeGraphQL response (queried withinclude_parents: true) intentionally contains the parent nodes withstatus: UNCHANGEDas hierarchy context (added byparent_node_adder.py). The frontend filters out allUNCHANGEDnodes inentities/diff/ui/node-diff/index.tsxbefore building the tree, andbuildDiffTreeItems(entities/diff/utils/build-diff-tree-items.ts) then silently drops any node whoseparent.uuidcannot be found among the tree items.The drop is transitive: a changed parent that was itself dropped takes its changed children with it (e.g. an
ADDEDprefix under anUPDATEDprefix under an unchanged root prefix disappears too).Expected Behavior
Every changed node visible in the right-hand diff list also appears in the left tree, nested under its (unchanged) parent — as it did before the regression, where unchanged parents were rendered as context items in the tree.
Steps to Reproduce
Reproducible on https://sandbox.infrahub.app (1.10.0), demo login, no data changes needed:
jfk1-update-edge-ips› Data.Updated Infra › Interface L3 Ethernet1(parentsjfk1-edge1/jfk1-edge2are unchanged),Updated Ipam › IP Prefix 10.1.0.0/16, andAdded Ipam › IP Prefix 10.1.0.32/31.IP Address → 10.1.0.33/31, 10.1.0.32/31andIPAM Namespace → default. Both interfaces and both prefixes are missing (verified via the tree DOM — not a collapsed-node issue).Originally reported by a customer (Slack, #ext-rolex, 2026-07-22): an updated Loadbalancer Pool Member shown in the right pane had no entry in the left tree because its pool was unchanged.
Additional Information
1c4a0f9ce(Incrementally load node diff in UI view #5676, "Incrementally load node diff in UI view") moved theUNCHANGEDfilter from the right-pane render into the sharednodescomputation feeding both panes. Before that (Update diff tree construction by using "parent" value of DiffTree query #4199), the tree received all nodes and only the right pane filteredUNCHANGED.frontend/app/src/entities/diff/utils/build-diff-tree-items.ts—if (!parentTreeItem) return acc;. This is also order-sensitive for multi-level parent chains.