Within the Nimbus SDK there are multiple states, most of which have a "reason" associated with them. The reason field functions as a child state, and is required for parent states that have reasons.
The client is not already enrolled in a recipe of the same type that would result in a feature conflict, and matched targeting and bucketing criteria for this recipe.
The client explicitly opted into this recipe.
This state and its reasons are for enrollments that have never been enrolled, and did not enroll.
The client did not fall into the bucketing selected for this recipe.
The client did not match the criteria set forth by the targeting string.
The client has opted out of experimentation at the application level.
The recipe has paused enrollments.
The feature(s) the recipe targets a) are being experimented on by another recipe of the same type in which the client is already enrolled, and b) are not enabled for coenrollment.
This state and its reasons are for enrollments that were previously in one of the
Enrolled states, but are no longer enrolled.
The client manually opted out of the recipe.
The client threw an error during enrollment re-evaluation.
The recipe has ended, and the client was enrolled at some point.
Disqualified statuses end up here when a recipe ends.
The client threw an error during enrollment evaluation.
- The explicit order in which recipe criteria are evaluated is as follows:
- Feature conflicts
- This state can be reached via Firefox mobile's secret menu.
- Experiments and rollouts do not share feature conflicts. A client can be enrolled in up to one rollout and one experiment for a given feature, unless that feature has been enabled for coenrollment.
- This status will only contain enrollments for recipes in which the client has never been enrolled. If the client is enrolled but throws an error during enrollment re-evaluation it will be moved to Disqualified::Error
The following state diagrams describe the interactions between states for the enrollment state machine in the mobile Nimbus SDK.