Fields
Relative thresholds are a fractional change against the control’s observed value: the bound is the control’s value times
1 + threshold. 0.10, upper means the variant may not exceed the control by more than ten percent; -0.10, lower means it may not fall more than ten percent below. Absolute thresholds are the bound itself: a rate between 0 and 1 for a binary constraint, a value for a continuous one.
How enforcement works
Before variants are compared, each live variant’s observed metric is evaluated against each constraint, literally and in your units. A variant is concluded for a clear breach: enough observations to judge, and the breach not attributable to sampling noise. A noisy early reading never concludes anything. The conclusion is recorded with its reason and the observed value against the threshold, and Curious generates replacements in the next round. The control is never evaluated and never concluded. A relative constraint needs the control’s own observations to resolve its bound; until the control has matured observations for that event, the constraint waits.Constraints are policy, not identity
Changing a constraint never restarts the experiment. Tighten a threshold, loosen a window, add or remove a guardrail, and the new declaration applies from the next evaluation. Each(name, type, bound, properties) identity may appear once in a declaration; threshold, threshold_type and window_seconds are its adjustable fields.