In order to abstract away the storage logistics of the predicate service, which needs to persist across sub-environment changes, we can add a predicate service that manages its own data.
This includes message queueing, sending requests to clients, and storing predicate data (which predicates users have created).