Not sure if this is a bug per se, or a design issue, but I was very surprised by the output of this:
from vivarium import ConfigTree
config = ConfigTree()
config.update({'foo': {'bar': 'baz'}}, layer='base')
config.foo = {}
print(config)
print(config.foo)
The line config.foo = {} has no effect. I understand that this is consistent with .update, where dictionaries are used as the data model for nested keys and the update'd tree is merged into the current one, but setting an attribute feels like it should never be a no-op; it should either set something, or error.