Performance Each object type (class) needs fast access to: Its identifying roles Its supertypes that have alternate identification The roles it plays in identifying other object types Each one-to-many role needs: A method to derive a counterpart (RoleValues) key from a full key Each class needs An adapt() method to convert offered values to a full key an assign_all method that can perform "atomic" identity change Constellation needs assert_instance that for a given class: adapts all keys from identifying values checks either non-existence or uniqueness and type of the identified object for all such keys instantiates the object if previously non-existent (instantiates role subtypes by mixing in if this instance did not exist but the class is mixed in another extant object) assigns non-identifying values Pre-define ObjectType accessor methods on constellation, rather than using method_missing Role objects: TEST: Access through class-level accessors Reindexing on identifier change De-index on change, arrange for re-index on completion Re-index all objects this identifies (keep track of roles-as-identifier) Save "key" value Nested block to accumulate changed identifiers and re-index at end? Switch to rbtree from Hash For InstanceIndex For RoleValues Index into RoleValues by key residual, not full key (worth doing?) Testing Complete pending tests Add heckle coverage Constraints Ensure role methods arguments are flexible for plugins Make mandatory work (propagate retraction? or just optionally?) Functionality Finish Constellation.assert Replace inspect by verbalise Query API and execution