@mozilla/nimbus-schemas 3000.0.0 → 3002.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.
@@ -4,76 +4,42 @@
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
7
  "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'.",
8
+ "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\".",
29
9
  "type": "string"
30
10
  },
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\".",
11
+ "appName": {
12
+ "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\".",
37
13
  "type": "string"
38
14
  },
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"
15
+ "branches": {
16
+ "description": "Branch configuration for the SDK experiment.",
17
+ "items": {
18
+ "$ref": "#/$defs/SdkExperimentBranch"
19
+ },
20
+ "type": "array"
46
21
  },
47
22
  "bucketConfig": {
48
23
  "$ref": "#/$defs/ExperimentBucketConfig",
49
24
  "description": "Bucketing configuration."
50
25
  },
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"
26
+ "channel": {
27
+ "description": "A specific channel of an application such as \"nightly\", \"beta\", or \"release\".",
28
+ "type": "string"
64
29
  },
65
- "targeting": {
30
+ "endDate": {
66
31
  "anyOf": [
67
32
  {
33
+ "format": "date",
68
34
  "type": "string"
69
35
  },
70
36
  {
71
37
  "type": "null"
72
38
  }
73
39
  ],
74
- "description": "A JEXL targeting expression used to filter out experiments."
40
+ "description": "Actual end date of this experiment. Note that this field is expected to be null in Remote Settings."
75
41
  },
76
- "startDate": {
42
+ "enrollmentEndDate": {
77
43
  "anyOf": [
78
44
  {
79
45
  "format": "date",
@@ -83,40 +49,79 @@
83
49
  "type": "null"
84
50
  }
85
51
  ],
86
- "description": "Actual publish date of the experiment. Note that this value is expected to be null in Remote Settings."
52
+ "description": "Actual enrollment end date of the experiment. Note that this value is expected to be null in Remote Settings."
87
53
  },
88
- "enrollmentEndDate": {
54
+ "featureIds": {
55
+ "description": "A list of featureIds the experiment contains configurations for.",
56
+ "items": {
57
+ "type": "string"
58
+ },
59
+ "type": "array"
60
+ },
61
+ "id": {
62
+ "description": "Unique identifier for the experiiment. This is a duplicate of slug, but is required field for all Remote Settings records.",
63
+ "type": "string"
64
+ },
65
+ "isEnrollmentPaused": {
66
+ "description": "When this property is set to true, the SDK should not enroll new users into the experiment that have not already been enrolled.",
67
+ "type": "boolean"
68
+ },
69
+ "isRollout": {
70
+ "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",
71
+ "type": "boolean"
72
+ },
73
+ "locales": {
89
74
  "anyOf": [
90
75
  {
91
- "format": "date",
92
- "type": "string"
76
+ "items": {
77
+ "type": "string"
78
+ },
79
+ "type": "array"
93
80
  },
94
81
  {
95
82
  "type": "null"
96
83
  }
97
84
  ],
98
- "description": "Actual enrollment end date of the experiment. Note that this value is expected to be null in Remote Settings."
85
+ "description": "The list of locale codes (e.g., \"en-US\" or \"fr\") that this experiment is targeting. If null, all locales are targeted."
99
86
  },
100
- "endDate": {
87
+ "localizations": {
101
88
  "anyOf": [
102
89
  {
103
- "format": "date",
104
- "type": "string"
90
+ "$ref": "#/$defs/ExperimentLocalizations"
105
91
  },
106
92
  {
107
93
  "type": "null"
108
94
  }
109
95
  ],
110
- "description": "Actual end date of this experiment. Note that this field is expected to be null in Remote Settings."
96
+ "description": "Per-locale localization substitutions."
97
+ },
98
+ "outcomes": {
99
+ "description": "A list of outcomes relevant to the experiment analysis.",
100
+ "items": {
101
+ "$ref": "#/$defs/ExperimentOutcome"
102
+ },
103
+ "type": "array"
111
104
  },
112
105
  "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).",
106
+ "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
107
  "type": "integer"
115
108
  },
116
109
  "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).",
110
+ "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
111
  "type": "integer"
119
112
  },
113
+ "publishedDate": {
114
+ "anyOf": [
115
+ {
116
+ "format": "date-time",
117
+ "type": "string"
118
+ },
119
+ {
120
+ "type": "null"
121
+ }
122
+ ],
123
+ "description": "The date that this experiment was first published to Remote Settings. If null, it has not yet been published."
124
+ },
120
125
  "referenceBranch": {
121
126
  "anyOf": [
122
127
  {
@@ -126,40 +131,46 @@
126
131
  "type": "null"
127
132
  }
128
133
  ],
129
- "description": "The slug of the reference branch (i.e., the branch we consider \"control\")."
134
+ "description": "The slug of the reference branch (i.e., the branch we consider \"control\")."
130
135
  },
131
- "locales": {
136
+ "schemaVersion": {
137
+ "description": "Version of the NimbusExperiment schema this experiment refers to",
138
+ "type": "string"
139
+ },
140
+ "slug": {
141
+ "description": "Unique identifier for the experiment",
142
+ "type": "string"
143
+ },
144
+ "startDate": {
132
145
  "anyOf": [
133
146
  {
134
- "items": {
135
- "type": "string"
136
- },
137
- "type": "array"
147
+ "format": "date",
148
+ "type": "string"
138
149
  },
139
150
  {
140
151
  "type": "null"
141
152
  }
142
153
  ],
143
- "description": "The list of locale codes (e.g., \"en-US\" or \"fr\") that this experiment is targeting. If null, all locales are targeted."
154
+ "description": "Actual publish date of the experiment. Note that this value is expected to be null in Remote Settings."
144
155
  },
145
- "publishedDate": {
156
+ "targeting": {
146
157
  "anyOf": [
147
158
  {
148
- "format": "date-time",
149
159
  "type": "string"
150
160
  },
151
161
  {
152
162
  "type": "null"
153
163
  }
154
164
  ],
155
- "description": "The date that this experiment was first published to Remote Settings. If null, it has not yet been published."
165
+ "description": "A JEXL targeting expression used to filter out experiments."
156
166
  },
157
- "branches": {
158
- "description": "Branch configuration for the SDK experiment.",
159
- "items": {
160
- "$ref": "#/$defs/SdkExperimentBranch"
161
- },
162
- "type": "array"
167
+ "userFacingDescription": {
168
+ "description": "Short public description of the experiment that will be displayed on \"about:studies\".",
169
+ "type": "string"
170
+ },
171
+ "userFacingName": {
172
+ "description": "Public name of the experiment that will be displayed on \"about:studies\".",
173
+ "type": "string"
163
174
  }
164
175
  },
165
176
  "required": [
@@ -173,6 +184,7 @@
173
184
  "userFacingDescription",
174
185
  "isEnrollmentPaused",
175
186
  "bucketConfig",
187
+ "featureIds",
176
188
  "startDate",
177
189
  "endDate",
178
190
  "proposedEnrollment",
@@ -181,25 +193,24 @@
181
193
  ],
182
194
  "$defs": {
183
195
  "ExperimentBucketConfig": {
184
- "description": "Common Bucketing Configuration used across all versions.",
185
196
  "properties": {
186
- "randomizationUnit": {
187
- "$ref": "#/$defs/RandomizationUnit"
197
+ "count": {
198
+ "description": "Number of buckets in the range.",
199
+ "type": "integer"
188
200
  },
189
201
  "namespace": {
190
202
  "description": "Additional inputs to the hashing function.",
191
203
  "type": "string"
192
204
  },
205
+ "randomizationUnit": {
206
+ "$ref": "#/$defs/RandomizationUnit"
207
+ },
193
208
  "start": {
194
209
  "description": "Index of the starting bucket of the range.",
195
210
  "type": "integer"
196
211
  },
197
- "count": {
198
- "description": "Number of buckets in the range.",
199
- "type": "integer"
200
- },
201
212
  "total": {
202
- "description": "The total number of buckets. You can assume this will always be 10000.",
213
+ "description": "The total number of buckets. You can assume this will always be 10000.",
203
214
  "type": "integer"
204
215
  }
205
216
  },
@@ -219,6 +230,7 @@
219
230
  "type": "string"
220
231
  },
221
232
  "value": {
233
+ "additionalProperties": true,
222
234
  "description": "The values that define the feature configuration. This should be validated against a schema.",
223
235
  "type": "object"
224
236
  }
@@ -229,15 +241,25 @@
229
241
  ],
230
242
  "type": "object"
231
243
  },
232
- "ExperimentOutcome": {
233
- "properties": {
234
- "slug": {
235
- "description": "Identifier for the outcome.",
244
+ "ExperimentLocalizations": {
245
+ "additionalProperties": {
246
+ "additionalProperties": {
236
247
  "type": "string"
237
248
  },
249
+ "type": "object"
250
+ },
251
+ "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.",
252
+ "type": "object"
253
+ },
254
+ "ExperimentOutcome": {
255
+ "properties": {
238
256
  "priority": {
239
257
  "description": "e.g., \"primary\" or \"secondary\".",
240
258
  "type": "string"
259
+ },
260
+ "slug": {
261
+ "description": "Identifier for the outcome.",
262
+ "type": "string"
241
263
  }
242
264
  },
243
265
  "required": [
@@ -259,20 +281,20 @@
259
281
  "SdkExperimentBranch": {
260
282
  "description": "The branch definition for SDK-based applications. Supported on Firefox for Android 96+, Firefox for iOS 39+, and all versions of Cirrus.",
261
283
  "properties": {
262
- "slug": {
263
- "description": "Identifier for the branch.",
264
- "type": "string"
265
- },
266
- "ratio": {
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.",
268
- "type": "integer"
269
- },
270
284
  "features": {
271
285
  "description": "An array of feature configurations.",
272
286
  "items": {
273
287
  "$ref": "#/$defs/ExperimentFeatureConfig"
274
288
  },
275
289
  "type": "array"
290
+ },
291
+ "ratio": {
292
+ "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.",
293
+ "type": "integer"
294
+ },
295
+ "slug": {
296
+ "description": "Identifier for the branch.",
297
+ "type": "string"
276
298
  }
277
299
  },
278
300
  "required": [