Flatten the parser's hierarchical material graph into the flat
{name, category}[] array the IDS validator consumes. Surfaces
every name AND category as a candidate match — IDS material
<value> fixtures pass when ANY surface matches the constraint, so
we proactively duplicate categories under their own entries.
Flatten the parser's hierarchical material graph into the flat
{name, category}[]array the IDS validator consumes. Surfaces every name AND category as a candidate match — IDS material<value>fixtures pass when ANY surface matches the constraint, so we proactively duplicate categories under their own entries.