Stable identity used by Angular's @for track expression in the builder's
recursive renderer. Survives content edits (setField/setOperator/setValue)
so focused inputs do not lose focus when ancestor groups re-emit fresh
references through the path-update mutators. Factories
(createFilterExpression) auto-populate; consumer-constructed trees
normalise via ensureFilterTreeIds.