Okay, let's see what we've got here. How am I creating these new metadata objects currently?
- Given a set of keys the metadata produces, create a metadata with no restrictions on other keys, and no registry data.
- Given an existing metadata, do one of the following actions:
- Narrow the keys that it provides
- Impose restrictions on which other keys can be present
- Add an entry to the registry
- Convert the metadata into one which restricts which keys can be present
- Combine the characteristics of two metadatas
- Provide additional keys
- (After I've had a chance to fix things up) Converting a metadata that provides keys into one that requires keys
Having thought some about the "restriction" concept, I think it's compatible with keeping the maximal flag, and can be computed as None if the flag is False, and as the union of the requirements and provisions if it's True. Then, instead of calculating the new restricted values in the case of a union, the only thing to check is whether the calculated sets are equal if they're both non-None.
So, that gives me a few methods to add. Let's see how that goes...
Okay, the new constructors went through. I had to pin back the version of Black, because flake8-black can't handle the new version of Black. That should be cleared up soon.
Anyway, the next step is to write and wire in the evolution methods. I want to take a bit more time to review the notes I took for them. I think I'll wrap this up now, and poke at the worldbuilding document a little.