theoretically have state-flattening and updating, plus a CompositeAction implementation