Thanks Spiff for the thoughts. I think we’d be happy to contribute a PR.
Regarding the cleanup example, I think you could imagine different users might have different perspectives on what they might consider cruft. Consider the following spec tree authored on the root layer with Asset_1 being originally introduced (concretely defined) on a sub layer
over "Asset_1"
{
over "Geometry" (append apiSchemas = "MaterialBindingAPI")
{
rel material:binding = <../Materials/OverrideMaterial> (materialBindingStrength = "strongerThanDescendants")
}
over "Materials"
{
def Material "OverrideMaterial" (references = @material_library.usd@</metal>)
{
}
}
}
It defines a new material and overrides the material binding on the geometry scope. Were Asset_1 to be removed on the sublayer, you could imagine wanting a helper available to remove the entire Asset_1 spec tree on the root layer, even though it contains a concretely defining specifier as a leaf.