superseded, and decisions went back to initializing. A declaration-class field changed. Changing one of these starts a new experiment on purpose, because the variants were generated against the old value; the question is which one changed, and whether you meant it.
Which fields restart an experiment
control (its content), rewards, format, requirements, parameters and options.holdout. Nothing else does. See Declarations.
Two call sites disagree
The most common cause. One path sends the declaration with"window_seconds": 86400 and another with 604800; one includes a reward the other omits; one call site was updated and the other was not. Each alternation supersedes the experiment again. Staging and production count as two call sites: a test key and a live key configure the same experiment. Put the declaration in one place: a shared constant sent by every decide, or a declare step with serving code that sends only element and user_id.
The control was edited
The control’s content is identity: changing the copy of your current version, even a typo, is a new control and a new experiment. If the old copy must change, accept the restart; if you only wanted to guide future variants, that isinstructions, which updates in place.
The format was inferred, then declared
On a first call withoutformat, Curious infers one from the control. A later call that declares a format that differs from the inferred one (a max_characters, a different field type) supersedes the experiment. Declare the format from the first call when you have one in mind.
The holdout changed
options.holdout is fixed for an experiment’s life; a different value supersedes it. The other options (assignment, approval, minimum_effect_size) update in place.