I think we should have at least one function to set (no-namespace) attributes for trusted code that won't throw (and will assert that there's no colons or whatever), for things like `SetId`, which right now silently swallows exceptions.