69b83379d5
Fix 1 (Important): RollUp_FourLevelDeepBadQuality_ReachesRoot — proves bad quality at a 4-segment-deep leaf propagates HasBadQuality up every ancestor to the root. Fix 2 (Important): Filter_DeepLeafMatch_RetainsAllAncestorBranches — proves filtering on a terminal segment of a 3-level path retains all ancestor branches. Fix 3 (Minor): BuildAttributeTree now returns roots.AsReadOnly() so the returned IReadOnlyList<DebugTreeNode> reference is not a mutable list. Fix 4 (Minor): Added <remarks> XML doc to BuildAttributeTree noting the caller-contract that at most one AttributeValueChanged per AttributeName should be passed. All 18 DebugTreeBuilder tests pass.