@mozilla/nimbus-schemas 2025.1.1 → 3000.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -7
- package/index.d.ts +261 -227
- package/package.json +1 -1
- package/schemas/DesktopAllVersionsNimbusExperiment.schema.json +25 -24
- package/schemas/DesktopFeature.schema.json +4 -0
- package/schemas/DesktopFeatureManifest.schema.json +4 -0
- package/schemas/DesktopNimbusExperiment.schema.json +24 -23
- package/schemas/ExperimentBucketConfig.schema.json +46 -0
- package/schemas/ExperimentFeatureConfig.schema.json +19 -0
- package/schemas/ExperimentLocalizations.schema.json +12 -0
- package/schemas/ExperimentOutcome.schema.json +19 -0
- package/schemas/NimbusExperimentV7.schema.json +306 -0
- package/schemas/SdkFeatureManifest.schema.json +4 -0
- package/schemas/SdkNimbusExperiment.schema.json +226 -3
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2019-09/schema",
|
|
3
|
+
"title": "NimbusExperimentV7",
|
|
4
|
+
"description": "A Nimbus experiment for V7.",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"schemaVersion": {
|
|
8
|
+
"description": "Version of the NimbusExperiment schema this experiment refers to",
|
|
9
|
+
"type": "string"
|
|
10
|
+
},
|
|
11
|
+
"slug": {
|
|
12
|
+
"description": "Unique identifier for the experiment",
|
|
13
|
+
"type": "string"
|
|
14
|
+
},
|
|
15
|
+
"id": {
|
|
16
|
+
"description": "Unique identifier for the experiment. This is a duplicate of slug, but is required field for all Remote Settings records.",
|
|
17
|
+
"type": "string"
|
|
18
|
+
},
|
|
19
|
+
"appName": {
|
|
20
|
+
"description": "A slug identifying the targeted product of this experiment. It should be a lowercased_with_underscores name that is short and unambiguous and it should match the app_name found in https://probeinfo.telemetry.mozilla.org/glean/repositories. Examples are \"fenix\" and \"firefox_desktop\".",
|
|
21
|
+
"type": "string"
|
|
22
|
+
},
|
|
23
|
+
"appId": {
|
|
24
|
+
"description": "The platform identifier for the targeted app. This should match app's identifier exactly as it appears in the relevant app store listing (for relevant platforms) or the app's Glean initialization (for other platforms). Examples are \"org.mozilla.firefox_beta\" and \"firefox-desktop\".",
|
|
25
|
+
"type": "string"
|
|
26
|
+
},
|
|
27
|
+
"channel": {
|
|
28
|
+
"description": "A specific channel of an application such as 'nightly', 'beta', or 'release'.",
|
|
29
|
+
"type": "string"
|
|
30
|
+
},
|
|
31
|
+
"userFacingName": {
|
|
32
|
+
"description": "Public name of the experiment displayed on 'about:studies'.",
|
|
33
|
+
"type": "string"
|
|
34
|
+
},
|
|
35
|
+
"userFacingDescription": {
|
|
36
|
+
"description": "Short public description of the experiment. that will be displayed on \"about:studies\".",
|
|
37
|
+
"type": "string"
|
|
38
|
+
},
|
|
39
|
+
"isEnrollmentPaused": {
|
|
40
|
+
"description": "When this property is set to true, the SDK should not enroll new users into the experiment that have not already been enrolled.",
|
|
41
|
+
"type": "boolean"
|
|
42
|
+
},
|
|
43
|
+
"isRollout": {
|
|
44
|
+
"description": "When this property is set to true, treat this experiment as a rollout. Rollouts are currently handled as single-branch experiments separated from the bucketing namespace for normal experiments. See-also: https://mozilla-hub.atlassian.net/browse/SDK-405",
|
|
45
|
+
"type": "boolean"
|
|
46
|
+
},
|
|
47
|
+
"bucketConfig": {
|
|
48
|
+
"$ref": "#/$defs/ExperimentBucketConfig",
|
|
49
|
+
"description": "Bucketing configuration."
|
|
50
|
+
},
|
|
51
|
+
"outcomes": {
|
|
52
|
+
"description": "List of outcomes relevant to analysis.",
|
|
53
|
+
"items": {
|
|
54
|
+
"$ref": "#/$defs/ExperimentOutcome"
|
|
55
|
+
},
|
|
56
|
+
"type": "array"
|
|
57
|
+
},
|
|
58
|
+
"featureIds": {
|
|
59
|
+
"description": "A list of featureIds the experiment contains configurations for.",
|
|
60
|
+
"items": {
|
|
61
|
+
"type": "string"
|
|
62
|
+
},
|
|
63
|
+
"type": "array"
|
|
64
|
+
},
|
|
65
|
+
"targeting": {
|
|
66
|
+
"anyOf": [
|
|
67
|
+
{
|
|
68
|
+
"type": "string"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"type": "null"
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"description": "A JEXL targeting expression used to filter out experiments."
|
|
75
|
+
},
|
|
76
|
+
"startDate": {
|
|
77
|
+
"anyOf": [
|
|
78
|
+
{
|
|
79
|
+
"format": "date",
|
|
80
|
+
"type": "string"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"type": "null"
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"description": "Actual publish date of the experiment. Note that this value is expected to be null in Remote Settings."
|
|
87
|
+
},
|
|
88
|
+
"enrollmentEndDate": {
|
|
89
|
+
"anyOf": [
|
|
90
|
+
{
|
|
91
|
+
"format": "date",
|
|
92
|
+
"type": "string"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"type": "null"
|
|
96
|
+
}
|
|
97
|
+
],
|
|
98
|
+
"description": "Actual enrollment end date of the experiment. Note that this value is expected to be null in Remote Settings."
|
|
99
|
+
},
|
|
100
|
+
"endDate": {
|
|
101
|
+
"anyOf": [
|
|
102
|
+
{
|
|
103
|
+
"format": "date",
|
|
104
|
+
"type": "string"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"type": "null"
|
|
108
|
+
}
|
|
109
|
+
],
|
|
110
|
+
"description": "Actual end date of this experiment. Note that this field is expected to be null in Remote Settings."
|
|
111
|
+
},
|
|
112
|
+
"proposedDuration": {
|
|
113
|
+
"description": "Duration of the experiment from the start date in days. Note that this property is only used during the analysis phase (i.e., not by the SDK).",
|
|
114
|
+
"type": "integer"
|
|
115
|
+
},
|
|
116
|
+
"proposedEnrollment": {
|
|
117
|
+
"description": "This represents the number of days that we expect to enroll new users. Note that this property is only used during the analysis phase (i.e., not by the SDK).",
|
|
118
|
+
"type": "integer"
|
|
119
|
+
},
|
|
120
|
+
"referenceBranch": {
|
|
121
|
+
"anyOf": [
|
|
122
|
+
{
|
|
123
|
+
"type": "string"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"type": "null"
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
"description": "The slug of the reference branch (i.e., the branch we consider \"control\")."
|
|
130
|
+
},
|
|
131
|
+
"locales": {
|
|
132
|
+
"anyOf": [
|
|
133
|
+
{
|
|
134
|
+
"items": {
|
|
135
|
+
"type": "string"
|
|
136
|
+
},
|
|
137
|
+
"type": "array"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"type": "null"
|
|
141
|
+
}
|
|
142
|
+
],
|
|
143
|
+
"description": "The list of locale codes (e.g., \"en-US\" or \"fr\") that this experiment is targeting. If null, all locales are targeted."
|
|
144
|
+
},
|
|
145
|
+
"publishedDate": {
|
|
146
|
+
"anyOf": [
|
|
147
|
+
{
|
|
148
|
+
"format": "date-time",
|
|
149
|
+
"type": "string"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"type": "null"
|
|
153
|
+
}
|
|
154
|
+
],
|
|
155
|
+
"description": "The date that this experiment was first published to Remote Settings. If null, it has not yet been published."
|
|
156
|
+
},
|
|
157
|
+
"localizations": {
|
|
158
|
+
"anyOf": [
|
|
159
|
+
{
|
|
160
|
+
"$ref": "#/$defs/ExperimentLocalizations"
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"type": "null"
|
|
164
|
+
}
|
|
165
|
+
],
|
|
166
|
+
"description": "Per-locale localization substitutions."
|
|
167
|
+
},
|
|
168
|
+
"branches": {
|
|
169
|
+
"description": "Branch configuration for the experiment.",
|
|
170
|
+
"items": {
|
|
171
|
+
"$ref": "#/$defs/BaseExperimentBranch"
|
|
172
|
+
},
|
|
173
|
+
"type": "array"
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
"required": [
|
|
177
|
+
"schemaVersion",
|
|
178
|
+
"slug",
|
|
179
|
+
"id",
|
|
180
|
+
"appName",
|
|
181
|
+
"appId",
|
|
182
|
+
"channel",
|
|
183
|
+
"userFacingName",
|
|
184
|
+
"userFacingDescription",
|
|
185
|
+
"isEnrollmentPaused",
|
|
186
|
+
"bucketConfig",
|
|
187
|
+
"startDate",
|
|
188
|
+
"endDate",
|
|
189
|
+
"proposedEnrollment",
|
|
190
|
+
"referenceBranch",
|
|
191
|
+
"branches"
|
|
192
|
+
],
|
|
193
|
+
"$defs": {
|
|
194
|
+
"BaseExperimentBranch": {
|
|
195
|
+
"properties": {
|
|
196
|
+
"slug": {
|
|
197
|
+
"description": "Identifier for the branch.",
|
|
198
|
+
"type": "string"
|
|
199
|
+
},
|
|
200
|
+
"ratio": {
|
|
201
|
+
"description": "Relative ratio of population for the branch. e.g., if branch A=1 and branch B=3, then branch A would get 25% of the population.",
|
|
202
|
+
"type": "integer"
|
|
203
|
+
},
|
|
204
|
+
"features": {
|
|
205
|
+
"description": "An array of feature configurations.",
|
|
206
|
+
"items": {
|
|
207
|
+
"$ref": "#/$defs/ExperimentFeatureConfig"
|
|
208
|
+
},
|
|
209
|
+
"type": "array"
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
"required": [
|
|
213
|
+
"slug",
|
|
214
|
+
"ratio",
|
|
215
|
+
"features"
|
|
216
|
+
],
|
|
217
|
+
"type": "object"
|
|
218
|
+
},
|
|
219
|
+
"ExperimentBucketConfig": {
|
|
220
|
+
"description": "Common Bucketing Configuration used across all versions.",
|
|
221
|
+
"properties": {
|
|
222
|
+
"randomizationUnit": {
|
|
223
|
+
"$ref": "#/$defs/RandomizationUnit"
|
|
224
|
+
},
|
|
225
|
+
"namespace": {
|
|
226
|
+
"description": "Additional inputs to the hashing function.",
|
|
227
|
+
"type": "string"
|
|
228
|
+
},
|
|
229
|
+
"start": {
|
|
230
|
+
"description": "Index of the starting bucket of the range.",
|
|
231
|
+
"type": "integer"
|
|
232
|
+
},
|
|
233
|
+
"count": {
|
|
234
|
+
"description": "Number of buckets in the range.",
|
|
235
|
+
"type": "integer"
|
|
236
|
+
},
|
|
237
|
+
"total": {
|
|
238
|
+
"description": "The total number of buckets. You can assume this will always be 10000.",
|
|
239
|
+
"type": "integer"
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
"required": [
|
|
243
|
+
"randomizationUnit",
|
|
244
|
+
"namespace",
|
|
245
|
+
"start",
|
|
246
|
+
"count",
|
|
247
|
+
"total"
|
|
248
|
+
],
|
|
249
|
+
"type": "object"
|
|
250
|
+
},
|
|
251
|
+
"ExperimentFeatureConfig": {
|
|
252
|
+
"properties": {
|
|
253
|
+
"featureId": {
|
|
254
|
+
"description": "The identifier for the feature flag.",
|
|
255
|
+
"type": "string"
|
|
256
|
+
},
|
|
257
|
+
"value": {
|
|
258
|
+
"description": "The values that define the feature configuration. This should be validated against a schema.",
|
|
259
|
+
"type": "object"
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
"required": [
|
|
263
|
+
"featureId",
|
|
264
|
+
"value"
|
|
265
|
+
],
|
|
266
|
+
"type": "object"
|
|
267
|
+
},
|
|
268
|
+
"ExperimentLocalizations": {
|
|
269
|
+
"additionalProperties": {
|
|
270
|
+
"additionalProperties": {
|
|
271
|
+
"type": "string"
|
|
272
|
+
},
|
|
273
|
+
"type": "object"
|
|
274
|
+
},
|
|
275
|
+
"description": "Per-locale localization substitutions. The top level key is the locale (e.g., \"en-US\" or \"fr\"). Each entry is a mapping of string IDs to their localized equivalents.",
|
|
276
|
+
"type": "object"
|
|
277
|
+
},
|
|
278
|
+
"ExperimentOutcome": {
|
|
279
|
+
"properties": {
|
|
280
|
+
"slug": {
|
|
281
|
+
"description": "Identifier for the outcome.",
|
|
282
|
+
"type": "string"
|
|
283
|
+
},
|
|
284
|
+
"priority": {
|
|
285
|
+
"description": "e.g., \"primary\" or \"secondary\".",
|
|
286
|
+
"type": "string"
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
"required": [
|
|
290
|
+
"slug",
|
|
291
|
+
"priority"
|
|
292
|
+
],
|
|
293
|
+
"type": "object"
|
|
294
|
+
},
|
|
295
|
+
"RandomizationUnit": {
|
|
296
|
+
"description": "A unique, stable identifier for the user used as an input to bucket hashing.",
|
|
297
|
+
"enum": [
|
|
298
|
+
"normandy_id",
|
|
299
|
+
"nimbus_id",
|
|
300
|
+
"user_id",
|
|
301
|
+
"group_id"
|
|
302
|
+
],
|
|
303
|
+
"type": "string"
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
@@ -44,6 +44,10 @@
|
|
|
44
44
|
},
|
|
45
45
|
"description": "The variables that this feature can set.",
|
|
46
46
|
"type": "object"
|
|
47
|
+
},
|
|
48
|
+
"allow-coenrollment": {
|
|
49
|
+
"description": "If true, clients can enroll in multiple experiments and rollouts that use this feature.",
|
|
50
|
+
"type": "boolean"
|
|
47
51
|
}
|
|
48
52
|
},
|
|
49
53
|
"required": [
|
|
@@ -4,8 +4,158 @@
|
|
|
4
4
|
"description": "A Nimbus experiment for Nimbus SDK-based applications.",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"properties": {
|
|
7
|
+
"schemaVersion": {
|
|
8
|
+
"description": "Version of the NimbusExperiment schema this experiment refers to",
|
|
9
|
+
"type": "string"
|
|
10
|
+
},
|
|
11
|
+
"slug": {
|
|
12
|
+
"description": "Unique identifier for the experiment",
|
|
13
|
+
"type": "string"
|
|
14
|
+
},
|
|
15
|
+
"id": {
|
|
16
|
+
"description": "Unique identifier for the experiment. This is a duplicate of slug, but is required field for all Remote Settings records.",
|
|
17
|
+
"type": "string"
|
|
18
|
+
},
|
|
19
|
+
"appName": {
|
|
20
|
+
"description": "A slug identifying the targeted product of this experiment. It should be a lowercased_with_underscores name that is short and unambiguous and it should match the app_name found in https://probeinfo.telemetry.mozilla.org/glean/repositories. Examples are \"fenix\" and \"firefox_desktop\".",
|
|
21
|
+
"type": "string"
|
|
22
|
+
},
|
|
23
|
+
"appId": {
|
|
24
|
+
"description": "The platform identifier for the targeted app. This should match app's identifier exactly as it appears in the relevant app store listing (for relevant platforms) or the app's Glean initialization (for other platforms). Examples are \"org.mozilla.firefox_beta\" and \"firefox-desktop\".",
|
|
25
|
+
"type": "string"
|
|
26
|
+
},
|
|
27
|
+
"channel": {
|
|
28
|
+
"description": "A specific channel of an application such as 'nightly', 'beta', or 'release'.",
|
|
29
|
+
"type": "string"
|
|
30
|
+
},
|
|
31
|
+
"userFacingName": {
|
|
32
|
+
"description": "Public name of the experiment displayed on 'about:studies'.",
|
|
33
|
+
"type": "string"
|
|
34
|
+
},
|
|
35
|
+
"userFacingDescription": {
|
|
36
|
+
"description": "Short public description of the experiment. that will be displayed on \"about:studies\".",
|
|
37
|
+
"type": "string"
|
|
38
|
+
},
|
|
39
|
+
"isEnrollmentPaused": {
|
|
40
|
+
"description": "When this property is set to true, the SDK should not enroll new users into the experiment that have not already been enrolled.",
|
|
41
|
+
"type": "boolean"
|
|
42
|
+
},
|
|
43
|
+
"isRollout": {
|
|
44
|
+
"description": "When this property is set to true, treat this experiment as a rollout. Rollouts are currently handled as single-branch experiments separated from the bucketing namespace for normal experiments. See-also: https://mozilla-hub.atlassian.net/browse/SDK-405",
|
|
45
|
+
"type": "boolean"
|
|
46
|
+
},
|
|
47
|
+
"bucketConfig": {
|
|
48
|
+
"$ref": "#/$defs/ExperimentBucketConfig",
|
|
49
|
+
"description": "Bucketing configuration."
|
|
50
|
+
},
|
|
51
|
+
"outcomes": {
|
|
52
|
+
"description": "List of outcomes relevant to analysis.",
|
|
53
|
+
"items": {
|
|
54
|
+
"$ref": "#/$defs/ExperimentOutcome"
|
|
55
|
+
},
|
|
56
|
+
"type": "array"
|
|
57
|
+
},
|
|
58
|
+
"featureIds": {
|
|
59
|
+
"description": "A list of featureIds the experiment contains configurations for.",
|
|
60
|
+
"items": {
|
|
61
|
+
"type": "string"
|
|
62
|
+
},
|
|
63
|
+
"type": "array"
|
|
64
|
+
},
|
|
65
|
+
"targeting": {
|
|
66
|
+
"anyOf": [
|
|
67
|
+
{
|
|
68
|
+
"type": "string"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"type": "null"
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"description": "A JEXL targeting expression used to filter out experiments."
|
|
75
|
+
},
|
|
76
|
+
"startDate": {
|
|
77
|
+
"anyOf": [
|
|
78
|
+
{
|
|
79
|
+
"format": "date",
|
|
80
|
+
"type": "string"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"type": "null"
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"description": "Actual publish date of the experiment. Note that this value is expected to be null in Remote Settings."
|
|
87
|
+
},
|
|
88
|
+
"enrollmentEndDate": {
|
|
89
|
+
"anyOf": [
|
|
90
|
+
{
|
|
91
|
+
"format": "date",
|
|
92
|
+
"type": "string"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"type": "null"
|
|
96
|
+
}
|
|
97
|
+
],
|
|
98
|
+
"description": "Actual enrollment end date of the experiment. Note that this value is expected to be null in Remote Settings."
|
|
99
|
+
},
|
|
100
|
+
"endDate": {
|
|
101
|
+
"anyOf": [
|
|
102
|
+
{
|
|
103
|
+
"format": "date",
|
|
104
|
+
"type": "string"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"type": "null"
|
|
108
|
+
}
|
|
109
|
+
],
|
|
110
|
+
"description": "Actual end date of this experiment. Note that this field is expected to be null in Remote Settings."
|
|
111
|
+
},
|
|
112
|
+
"proposedDuration": {
|
|
113
|
+
"description": "Duration of the experiment from the start date in days. Note that this property is only used during the analysis phase (i.e., not by the SDK).",
|
|
114
|
+
"type": "integer"
|
|
115
|
+
},
|
|
116
|
+
"proposedEnrollment": {
|
|
117
|
+
"description": "This represents the number of days that we expect to enroll new users. Note that this property is only used during the analysis phase (i.e., not by the SDK).",
|
|
118
|
+
"type": "integer"
|
|
119
|
+
},
|
|
120
|
+
"referenceBranch": {
|
|
121
|
+
"anyOf": [
|
|
122
|
+
{
|
|
123
|
+
"type": "string"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"type": "null"
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
"description": "The slug of the reference branch (i.e., the branch we consider \"control\")."
|
|
130
|
+
},
|
|
131
|
+
"locales": {
|
|
132
|
+
"anyOf": [
|
|
133
|
+
{
|
|
134
|
+
"items": {
|
|
135
|
+
"type": "string"
|
|
136
|
+
},
|
|
137
|
+
"type": "array"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"type": "null"
|
|
141
|
+
}
|
|
142
|
+
],
|
|
143
|
+
"description": "The list of locale codes (e.g., \"en-US\" or \"fr\") that this experiment is targeting. If null, all locales are targeted."
|
|
144
|
+
},
|
|
145
|
+
"publishedDate": {
|
|
146
|
+
"anyOf": [
|
|
147
|
+
{
|
|
148
|
+
"format": "date-time",
|
|
149
|
+
"type": "string"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"type": "null"
|
|
153
|
+
}
|
|
154
|
+
],
|
|
155
|
+
"description": "The date that this experiment was first published to Remote Settings. If null, it has not yet been published."
|
|
156
|
+
},
|
|
7
157
|
"branches": {
|
|
8
|
-
"description": "Branch configuration for the experiment.",
|
|
158
|
+
"description": "Branch configuration for the SDK experiment.",
|
|
9
159
|
"items": {
|
|
10
160
|
"$ref": "#/$defs/SdkExperimentBranch"
|
|
11
161
|
},
|
|
@@ -13,9 +163,55 @@
|
|
|
13
163
|
}
|
|
14
164
|
},
|
|
15
165
|
"required": [
|
|
166
|
+
"schemaVersion",
|
|
167
|
+
"slug",
|
|
168
|
+
"id",
|
|
169
|
+
"appName",
|
|
170
|
+
"appId",
|
|
171
|
+
"channel",
|
|
172
|
+
"userFacingName",
|
|
173
|
+
"userFacingDescription",
|
|
174
|
+
"isEnrollmentPaused",
|
|
175
|
+
"bucketConfig",
|
|
176
|
+
"startDate",
|
|
177
|
+
"endDate",
|
|
178
|
+
"proposedEnrollment",
|
|
179
|
+
"referenceBranch",
|
|
16
180
|
"branches"
|
|
17
181
|
],
|
|
18
182
|
"$defs": {
|
|
183
|
+
"ExperimentBucketConfig": {
|
|
184
|
+
"description": "Common Bucketing Configuration used across all versions.",
|
|
185
|
+
"properties": {
|
|
186
|
+
"randomizationUnit": {
|
|
187
|
+
"$ref": "#/$defs/RandomizationUnit"
|
|
188
|
+
},
|
|
189
|
+
"namespace": {
|
|
190
|
+
"description": "Additional inputs to the hashing function.",
|
|
191
|
+
"type": "string"
|
|
192
|
+
},
|
|
193
|
+
"start": {
|
|
194
|
+
"description": "Index of the starting bucket of the range.",
|
|
195
|
+
"type": "integer"
|
|
196
|
+
},
|
|
197
|
+
"count": {
|
|
198
|
+
"description": "Number of buckets in the range.",
|
|
199
|
+
"type": "integer"
|
|
200
|
+
},
|
|
201
|
+
"total": {
|
|
202
|
+
"description": "The total number of buckets. You can assume this will always be 10000.",
|
|
203
|
+
"type": "integer"
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
"required": [
|
|
207
|
+
"randomizationUnit",
|
|
208
|
+
"namespace",
|
|
209
|
+
"start",
|
|
210
|
+
"count",
|
|
211
|
+
"total"
|
|
212
|
+
],
|
|
213
|
+
"type": "object"
|
|
214
|
+
},
|
|
19
215
|
"ExperimentFeatureConfig": {
|
|
20
216
|
"properties": {
|
|
21
217
|
"featureId": {
|
|
@@ -33,15 +229,42 @@
|
|
|
33
229
|
],
|
|
34
230
|
"type": "object"
|
|
35
231
|
},
|
|
232
|
+
"ExperimentOutcome": {
|
|
233
|
+
"properties": {
|
|
234
|
+
"slug": {
|
|
235
|
+
"description": "Identifier for the outcome.",
|
|
236
|
+
"type": "string"
|
|
237
|
+
},
|
|
238
|
+
"priority": {
|
|
239
|
+
"description": "e.g., \"primary\" or \"secondary\".",
|
|
240
|
+
"type": "string"
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
"required": [
|
|
244
|
+
"slug",
|
|
245
|
+
"priority"
|
|
246
|
+
],
|
|
247
|
+
"type": "object"
|
|
248
|
+
},
|
|
249
|
+
"RandomizationUnit": {
|
|
250
|
+
"description": "A unique, stable identifier for the user used as an input to bucket hashing.",
|
|
251
|
+
"enum": [
|
|
252
|
+
"normandy_id",
|
|
253
|
+
"nimbus_id",
|
|
254
|
+
"user_id",
|
|
255
|
+
"group_id"
|
|
256
|
+
],
|
|
257
|
+
"type": "string"
|
|
258
|
+
},
|
|
36
259
|
"SdkExperimentBranch": {
|
|
37
|
-
"description": "The branch definition for SDK-based applications Supported on Firefox for Android 96
|
|
260
|
+
"description": "The branch definition for SDK-based applications. Supported on Firefox for Android 96+, Firefox for iOS 39+, and all versions of Cirrus.",
|
|
38
261
|
"properties": {
|
|
39
262
|
"slug": {
|
|
40
263
|
"description": "Identifier for the branch.",
|
|
41
264
|
"type": "string"
|
|
42
265
|
},
|
|
43
266
|
"ratio": {
|
|
44
|
-
"description": "Relative ratio of population for the branch. e.g., if branch A=1 and branch B=3, then branch A
|
|
267
|
+
"description": "Relative ratio of population for the branch. e.g., if branch A=1 and branch B=3, then branch A would get 25% of the population.",
|
|
45
268
|
"type": "integer"
|
|
46
269
|
},
|
|
47
270
|
"features": {
|