@mozilla/nimbus-schemas 2024.11.2 → 2024.11.4
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/index.d.ts
CHANGED
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
* make schemas_build
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
export type DesktopApplication = "firefox-desktop" | "firefox-desktop-background-task";
|
|
10
|
-
export type FeatureVariableType = "int" | "string" | "boolean" | "json";
|
|
11
|
-
export type PrefBranch = "default" | "user";
|
|
12
9
|
/**
|
|
13
10
|
* A unique, stable indentifier for the user used as an input to bucket hashing.
|
|
14
11
|
*/
|
|
15
12
|
export type RandomizationUnit = "normandy_id" | "nimbus_id" | "user_id" | "group_id";
|
|
13
|
+
export type DesktopApplication = "firefox-desktop" | "firefox-desktop-background-task";
|
|
14
|
+
export type FeatureVariableType = "int" | "string" | "boolean" | "json";
|
|
15
|
+
export type PrefBranch = "default" | "user";
|
|
16
16
|
export type AnalysisBasis = "enrollments" | "exposures";
|
|
17
17
|
export type LogSource = "jetstream" | "sizing" | "jetstream-preview";
|
|
18
18
|
export type AnalysisErrors = AnalysisError[];
|
|
@@ -32,6 +32,237 @@ export type SizingMetricName = "active_hours" | "search_count" | "days_of_use" |
|
|
|
32
32
|
export type StatisticIngestEnum = "percentage" | "binomial" | "mean" | "count";
|
|
33
33
|
export type Statistics = Statistic[];
|
|
34
34
|
|
|
35
|
+
/**
|
|
36
|
+
* A Nimbus experiment for Firefox Desktop.
|
|
37
|
+
*
|
|
38
|
+
* This schema is more strict than DesktopNimbusExperiment and is backwards
|
|
39
|
+
* comaptible with Firefox Desktop versions less than 95. It is intended for use inside
|
|
40
|
+
* Experimenter itself.
|
|
41
|
+
*/
|
|
42
|
+
export interface DesktopAllVersionsNimbusExperiment {
|
|
43
|
+
/**
|
|
44
|
+
* Version of the NimbusExperiment schema this experiment refers to
|
|
45
|
+
*/
|
|
46
|
+
schemaVersion: string;
|
|
47
|
+
/**
|
|
48
|
+
* Unique identifier for the experiment
|
|
49
|
+
*/
|
|
50
|
+
slug: string;
|
|
51
|
+
/**
|
|
52
|
+
* Unique identifier for the experiiment.
|
|
53
|
+
*
|
|
54
|
+
* This is a duplicate of slug, but is required field for all Remote Settings records.
|
|
55
|
+
*/
|
|
56
|
+
id: string;
|
|
57
|
+
/**
|
|
58
|
+
* A slug identifying the targeted product of this experiment.
|
|
59
|
+
*
|
|
60
|
+
* 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".
|
|
61
|
+
*/
|
|
62
|
+
appName: string;
|
|
63
|
+
/**
|
|
64
|
+
* The platform identifier for the targeted app.
|
|
65
|
+
*
|
|
66
|
+
* 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).
|
|
67
|
+
*
|
|
68
|
+
* Examples are "org.mozilla.firefox_beta" and "firefox-desktop".
|
|
69
|
+
*/
|
|
70
|
+
appId: string;
|
|
71
|
+
/**
|
|
72
|
+
* A specific channel of an application such as "nightly", "beta", or "release".
|
|
73
|
+
*/
|
|
74
|
+
channel: string;
|
|
75
|
+
/**
|
|
76
|
+
* Public name of the experiment that will be displayed on "about:studies".
|
|
77
|
+
*/
|
|
78
|
+
userFacingName: string;
|
|
79
|
+
/**
|
|
80
|
+
* Short public description of the experiment that will be displayed on "about:studies".
|
|
81
|
+
*/
|
|
82
|
+
userFacingDescription: string;
|
|
83
|
+
/**
|
|
84
|
+
* When this property is set to true, the SDK should not enroll new users into the experiment that have not already been enrolled.
|
|
85
|
+
*/
|
|
86
|
+
isEnrollmentPaused: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* When this property is set to true, treat this experiment as a rollout.
|
|
89
|
+
*
|
|
90
|
+
* Rollouts are currently handled as single-branch experiments separated from the bucketing namespace for normal experiments.
|
|
91
|
+
*
|
|
92
|
+
* See-also: https://mozilla-hub.atlassian.net/browse/SDK-405
|
|
93
|
+
*/
|
|
94
|
+
isRollout?: boolean;
|
|
95
|
+
bucketConfig: ExperimentBucketConfig;
|
|
96
|
+
/**
|
|
97
|
+
* A list of outcomes relevant to the experiment analysis.
|
|
98
|
+
*/
|
|
99
|
+
outcomes?: ExperimentOutcome[];
|
|
100
|
+
/**
|
|
101
|
+
* A list of featureIds the experiment contains configurations for.
|
|
102
|
+
*/
|
|
103
|
+
featureIds?: string[];
|
|
104
|
+
/**
|
|
105
|
+
* A JEXL targeting expression used to filter out experiments.
|
|
106
|
+
*/
|
|
107
|
+
targeting?: string | null;
|
|
108
|
+
/**
|
|
109
|
+
* Actual publish date of the experiment.
|
|
110
|
+
*
|
|
111
|
+
* Note that this value is expected to be null in Remote Settings.
|
|
112
|
+
*/
|
|
113
|
+
startDate: string | null;
|
|
114
|
+
/**
|
|
115
|
+
* Actual enrollment end date of the experiment.
|
|
116
|
+
*
|
|
117
|
+
* Note that this value is expected to be null in Remote Settings.
|
|
118
|
+
*/
|
|
119
|
+
enrollmentEndDate?: string | null;
|
|
120
|
+
/**
|
|
121
|
+
* Actual end date of this experiment.
|
|
122
|
+
*
|
|
123
|
+
* Note that this field is expected to be null in Remote Settings.
|
|
124
|
+
*/
|
|
125
|
+
endDate: string | null;
|
|
126
|
+
/**
|
|
127
|
+
* Duration of the experiment from the start date in days.
|
|
128
|
+
*
|
|
129
|
+
* Note that this property is only used during the analysis phase (i.e., not by the SDK).
|
|
130
|
+
*/
|
|
131
|
+
proposedDuration?: number;
|
|
132
|
+
/**
|
|
133
|
+
* This represents the number of days that we expect to enroll new users.
|
|
134
|
+
*
|
|
135
|
+
* Note that this property is only used during the analysis phase (i.e., not by the SDK).
|
|
136
|
+
*/
|
|
137
|
+
proposedEnrollment: number;
|
|
138
|
+
/**
|
|
139
|
+
* The slug of the reference branch (i.e., the branch we consider "control").
|
|
140
|
+
*/
|
|
141
|
+
referenceBranch: string | null;
|
|
142
|
+
/**
|
|
143
|
+
* The list of locale codes (e.g., "en-US" or "fr") that this experiment is targeting.
|
|
144
|
+
*
|
|
145
|
+
* If null, all locales are targeted.
|
|
146
|
+
*/
|
|
147
|
+
locales?: string[] | null;
|
|
148
|
+
/**
|
|
149
|
+
* The date that this experiment was first published to Remote Settings.
|
|
150
|
+
*
|
|
151
|
+
* If null, it has not yet been published.
|
|
152
|
+
*/
|
|
153
|
+
publishedDate?: string | null;
|
|
154
|
+
/**
|
|
155
|
+
* Branch configuration for the experiment.
|
|
156
|
+
*/
|
|
157
|
+
branches: DesktopAllVersionsExperimentBranch[];
|
|
158
|
+
/**
|
|
159
|
+
* When this property is set to true, treat this experiment as aFirefox Labs experiment
|
|
160
|
+
*/
|
|
161
|
+
isFirefoxLabsOptIn?: boolean;
|
|
162
|
+
/**
|
|
163
|
+
* An optional string containing the Fluent ID for the title of the opt-in
|
|
164
|
+
*/
|
|
165
|
+
firefoxLabsTitle?: string;
|
|
166
|
+
/**
|
|
167
|
+
* An optional string containing the Fluent ID for the description of the opt-in
|
|
168
|
+
*/
|
|
169
|
+
firefoxLabsDescription?: string;
|
|
170
|
+
/**
|
|
171
|
+
* Opt out of feature schema validation.
|
|
172
|
+
*/
|
|
173
|
+
featureValidationOptOut?: boolean;
|
|
174
|
+
localizations?: ExperimentLocalizations | null;
|
|
175
|
+
}
|
|
176
|
+
export interface ExperimentBucketConfig {
|
|
177
|
+
randomizationUnit: RandomizationUnit;
|
|
178
|
+
/**
|
|
179
|
+
* Additional inputs to the hashing function.
|
|
180
|
+
*/
|
|
181
|
+
namespace: string;
|
|
182
|
+
/**
|
|
183
|
+
* Index of the starting bucket of the range.
|
|
184
|
+
*/
|
|
185
|
+
start: number;
|
|
186
|
+
/**
|
|
187
|
+
* Number of buckets in the range.
|
|
188
|
+
*/
|
|
189
|
+
count: number;
|
|
190
|
+
/**
|
|
191
|
+
* The total number of buckets.
|
|
192
|
+
*
|
|
193
|
+
* You can assume this will always be 10000
|
|
194
|
+
*/
|
|
195
|
+
total: number;
|
|
196
|
+
}
|
|
197
|
+
export interface ExperimentOutcome {
|
|
198
|
+
/**
|
|
199
|
+
* Identifier for the outcome.
|
|
200
|
+
*/
|
|
201
|
+
slug: string;
|
|
202
|
+
/**
|
|
203
|
+
* e.g., "primary" or "secondary".
|
|
204
|
+
*/
|
|
205
|
+
priority: string;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* The branch definition supported on all Firefox Desktop versions.
|
|
209
|
+
*
|
|
210
|
+
* This version requires the feature field to be present to support older Firefox Desktop
|
|
211
|
+
* clients.
|
|
212
|
+
*/
|
|
213
|
+
export interface DesktopAllVersionsExperimentBranch {
|
|
214
|
+
/**
|
|
215
|
+
* Identifier for the branch.
|
|
216
|
+
*/
|
|
217
|
+
slug: string;
|
|
218
|
+
/**
|
|
219
|
+
* Relative ratio of population for the branch.
|
|
220
|
+
*
|
|
221
|
+
* e.g., if branch A=1 and branch B=3, then branch A would get 25% of the population.
|
|
222
|
+
*/
|
|
223
|
+
ratio: number;
|
|
224
|
+
/**
|
|
225
|
+
* An array of feature configurations.
|
|
226
|
+
*/
|
|
227
|
+
features: ExperimentFeatureConfig[];
|
|
228
|
+
/**
|
|
229
|
+
* An optional string containing the title of the branch
|
|
230
|
+
*/
|
|
231
|
+
firefoxLabsTitle?: string;
|
|
232
|
+
feature: DesktopPre95FeatureConfig;
|
|
233
|
+
}
|
|
234
|
+
export interface ExperimentFeatureConfig {
|
|
235
|
+
/**
|
|
236
|
+
* The identifier for the feature flag.
|
|
237
|
+
*/
|
|
238
|
+
featureId: string;
|
|
239
|
+
/**
|
|
240
|
+
* The values that define the feature configuration.
|
|
241
|
+
*
|
|
242
|
+
* This should be validated against a schema.
|
|
243
|
+
*/
|
|
244
|
+
value: {
|
|
245
|
+
[k: string]: unknown;
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
export interface DesktopPre95FeatureConfig {
|
|
249
|
+
featureId: "this-is-included-for-desktop-pre-95-support";
|
|
250
|
+
value: {
|
|
251
|
+
[k: string]: unknown;
|
|
252
|
+
};
|
|
253
|
+
enabled: false;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Per-locale localization substitutions.
|
|
257
|
+
*
|
|
258
|
+
* The top level key is the locale (e.g., "en-US" or "fr"). Each entry is a mapping of
|
|
259
|
+
* string IDs to their localized equivalents.
|
|
260
|
+
*/
|
|
261
|
+
export interface ExperimentLocalizations {
|
|
262
|
+
[k: string]: {
|
|
263
|
+
[k: string]: string;
|
|
264
|
+
};
|
|
265
|
+
}
|
|
35
266
|
/**
|
|
36
267
|
* A feature.
|
|
37
268
|
*/
|
|
@@ -134,12 +365,12 @@ export interface DesktopFeatureManifest {
|
|
|
134
365
|
[k: string]: DesktopFeature;
|
|
135
366
|
}
|
|
136
367
|
/**
|
|
137
|
-
*
|
|
368
|
+
* A Nimbus experiment for Firefox Desktop.
|
|
138
369
|
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
370
|
+
* This schema is less strict than DesktopAllVersionsNimbusExperiment and is intended for
|
|
371
|
+
* use in Firefox Desktop.
|
|
141
372
|
*/
|
|
142
|
-
export interface
|
|
373
|
+
export interface DesktopNimbusExperiment {
|
|
143
374
|
/**
|
|
144
375
|
* Version of the NimbusExperiment schema this experiment refers to
|
|
145
376
|
*/
|
|
@@ -192,18 +423,6 @@ export interface NimbusExperiment {
|
|
|
192
423
|
* See-also: https://mozilla-hub.atlassian.net/browse/SDK-405
|
|
193
424
|
*/
|
|
194
425
|
isRollout?: boolean;
|
|
195
|
-
/**
|
|
196
|
-
* When this property is set to true, treat this experiment as aFirefox Labs experiment
|
|
197
|
-
*/
|
|
198
|
-
isFirefoxLabsOptIn?: boolean;
|
|
199
|
-
/**
|
|
200
|
-
* An optional string containing the Fluent ID for the title of the opt-in
|
|
201
|
-
*/
|
|
202
|
-
firefoxLabsTitle?: string;
|
|
203
|
-
/**
|
|
204
|
-
* An optional string containing the Fluent ID for the description of the opt-in
|
|
205
|
-
*/
|
|
206
|
-
firefoxLabsDescription?: string;
|
|
207
426
|
bucketConfig: ExperimentBucketConfig;
|
|
208
427
|
/**
|
|
209
428
|
* A list of outcomes relevant to the experiment analysis.
|
|
@@ -213,13 +432,6 @@ export interface NimbusExperiment {
|
|
|
213
432
|
* A list of featureIds the experiment contains configurations for.
|
|
214
433
|
*/
|
|
215
434
|
featureIds?: string[];
|
|
216
|
-
/**
|
|
217
|
-
* Branch configuration for the experiment.
|
|
218
|
-
*/
|
|
219
|
-
branches:
|
|
220
|
-
| ExperimentSingleFeatureBranch[]
|
|
221
|
-
| ExperimentMultiFeatureDesktopBranch[]
|
|
222
|
-
| ExperimentMultiFeatureMobileBranch[];
|
|
223
435
|
/**
|
|
224
436
|
* A JEXL targeting expression used to filter out experiments.
|
|
225
437
|
*/
|
|
@@ -258,11 +470,6 @@ export interface NimbusExperiment {
|
|
|
258
470
|
* The slug of the reference branch (i.e., the branch we consider "control").
|
|
259
471
|
*/
|
|
260
472
|
referenceBranch: string | null;
|
|
261
|
-
/**
|
|
262
|
-
* Opt out of feature schema validation. Only supported on desktop.
|
|
263
|
-
*/
|
|
264
|
-
featureValidationOptOut?: boolean;
|
|
265
|
-
localizations?: ExperimentLocalizations | null;
|
|
266
473
|
/**
|
|
267
474
|
* The list of locale codes (e.g., "en-US" or "fr") that this experiment is targeting.
|
|
268
475
|
*
|
|
@@ -275,75 +482,32 @@ export interface NimbusExperiment {
|
|
|
275
482
|
* If null, it has not yet been published.
|
|
276
483
|
*/
|
|
277
484
|
publishedDate?: string | null;
|
|
278
|
-
}
|
|
279
|
-
export interface ExperimentBucketConfig {
|
|
280
|
-
randomizationUnit: RandomizationUnit;
|
|
281
485
|
/**
|
|
282
|
-
*
|
|
283
|
-
*/
|
|
284
|
-
namespace: string;
|
|
285
|
-
/**
|
|
286
|
-
* Index of the starting bucket of the range.
|
|
287
|
-
*/
|
|
288
|
-
start: number;
|
|
289
|
-
/**
|
|
290
|
-
* Number of buckets in the range.
|
|
291
|
-
*/
|
|
292
|
-
count: number;
|
|
293
|
-
/**
|
|
294
|
-
* The total number of buckets.
|
|
295
|
-
*
|
|
296
|
-
* You can assume this will always be 10000
|
|
297
|
-
*/
|
|
298
|
-
total: number;
|
|
299
|
-
}
|
|
300
|
-
export interface ExperimentOutcome {
|
|
301
|
-
/**
|
|
302
|
-
* Identifier for the outcome.
|
|
303
|
-
*/
|
|
304
|
-
slug: string;
|
|
305
|
-
/**
|
|
306
|
-
* e.g., "primary" or "secondary".
|
|
486
|
+
* Branch configuration for the experiment.
|
|
307
487
|
*/
|
|
308
|
-
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* A single-feature branch definition.
|
|
312
|
-
*
|
|
313
|
-
* Supported by Firefox Desktop for versions before 95, Firefox for Android for versions
|
|
314
|
-
* before 96, and Firefox for iOS for versions before 39.
|
|
315
|
-
*/
|
|
316
|
-
export interface ExperimentSingleFeatureBranch {
|
|
488
|
+
branches: DesktopExperimentBranch[];
|
|
317
489
|
/**
|
|
318
|
-
*
|
|
490
|
+
* When this property is set to true, treat this experiment as aFirefox Labs experiment
|
|
319
491
|
*/
|
|
320
|
-
|
|
492
|
+
isFirefoxLabsOptIn?: boolean;
|
|
321
493
|
/**
|
|
322
|
-
*
|
|
323
|
-
*
|
|
324
|
-
* e.g., if branch A=1 and branch B=3, then branch A would get 25% of the population.
|
|
494
|
+
* An optional string containing the Fluent ID for the title of the opt-in
|
|
325
495
|
*/
|
|
326
|
-
|
|
327
|
-
feature: ExperimentFeatureConfig;
|
|
328
|
-
}
|
|
329
|
-
export interface ExperimentFeatureConfig {
|
|
496
|
+
firefoxLabsTitle?: string;
|
|
330
497
|
/**
|
|
331
|
-
*
|
|
498
|
+
* An optional string containing the Fluent ID for the description of the opt-in
|
|
332
499
|
*/
|
|
333
|
-
|
|
500
|
+
firefoxLabsDescription?: string;
|
|
334
501
|
/**
|
|
335
|
-
*
|
|
336
|
-
*
|
|
337
|
-
* This should be validated against a schema.
|
|
502
|
+
* Opt out of feature schema validation.
|
|
338
503
|
*/
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
};
|
|
504
|
+
featureValidationOptOut?: boolean;
|
|
505
|
+
localizations?: ExperimentLocalizations | null;
|
|
342
506
|
}
|
|
343
507
|
/**
|
|
344
508
|
* The branch definition supported on Firefox Desktop 95+.
|
|
345
509
|
*/
|
|
346
|
-
export interface
|
|
510
|
+
export interface DesktopExperimentBranch {
|
|
347
511
|
/**
|
|
348
512
|
* Identifier for the branch.
|
|
349
513
|
*/
|
|
@@ -358,53 +522,11 @@ export interface ExperimentMultiFeatureDesktopBranch {
|
|
|
358
522
|
* An array of feature configurations.
|
|
359
523
|
*/
|
|
360
524
|
features: ExperimentFeatureConfig[];
|
|
361
|
-
feature: DesktopTombstoneFeatureConfig;
|
|
362
525
|
/**
|
|
363
526
|
* An optional string containing the title of the branch
|
|
364
527
|
*/
|
|
365
528
|
firefoxLabsTitle?: string;
|
|
366
529
|
}
|
|
367
|
-
export interface DesktopTombstoneFeatureConfig {
|
|
368
|
-
featureId: "unused-feature-id-for-legacy-support";
|
|
369
|
-
value: {
|
|
370
|
-
[k: string]: unknown;
|
|
371
|
-
};
|
|
372
|
-
enabled: false;
|
|
373
|
-
}
|
|
374
|
-
/**
|
|
375
|
-
* The branch definition for mobile browsers.
|
|
376
|
-
*
|
|
377
|
-
* Supported on Firefox for Android 96+ and Firefox for iOS 39+.
|
|
378
|
-
*/
|
|
379
|
-
export interface ExperimentMultiFeatureMobileBranch {
|
|
380
|
-
/**
|
|
381
|
-
* Identifier for the branch.
|
|
382
|
-
*/
|
|
383
|
-
slug: string;
|
|
384
|
-
/**
|
|
385
|
-
* Relative ratio of population for the branch.
|
|
386
|
-
*
|
|
387
|
-
* e.g., if branch A=1 and branch B=3, then branch A would get 25% of the population.
|
|
388
|
-
*/
|
|
389
|
-
ratio: number;
|
|
390
|
-
/**
|
|
391
|
-
* An array of feature configurations.
|
|
392
|
-
*/
|
|
393
|
-
features: ExperimentFeatureConfig[];
|
|
394
|
-
}
|
|
395
|
-
/**
|
|
396
|
-
* Per-locale localization substitutions.
|
|
397
|
-
*
|
|
398
|
-
* The top level key is the locale (e.g., "en-US" or "fr"). Each entry is a mapping of
|
|
399
|
-
* string IDs to their localized equivalents.
|
|
400
|
-
*
|
|
401
|
-
* Only supported on desktop.
|
|
402
|
-
*/
|
|
403
|
-
export interface ExperimentLocalizations {
|
|
404
|
-
[k: string]: {
|
|
405
|
-
[k: string]: string;
|
|
406
|
-
};
|
|
407
|
-
}
|
|
408
530
|
/**
|
|
409
531
|
* The SDK-specific feature manifest.
|
|
410
532
|
*/
|
|
@@ -452,6 +574,37 @@ export interface SdkFeatureVariable {
|
|
|
452
574
|
*/
|
|
453
575
|
enum?: string[];
|
|
454
576
|
}
|
|
577
|
+
/**
|
|
578
|
+
* A Nimbus experiment for Nimbus SDK-based applications.
|
|
579
|
+
*/
|
|
580
|
+
export interface SdkNimbusExperiment {
|
|
581
|
+
/**
|
|
582
|
+
* Branch configuration for the experiment.
|
|
583
|
+
*/
|
|
584
|
+
branches: SdkExperimentBranch[];
|
|
585
|
+
}
|
|
586
|
+
/**
|
|
587
|
+
* The branch definition for SDK-based applications
|
|
588
|
+
*
|
|
589
|
+
* Supported on Firefox for Android 96+ and Firefox for iOS 39+ and all versions of
|
|
590
|
+
* Cirrus.
|
|
591
|
+
*/
|
|
592
|
+
export interface SdkExperimentBranch {
|
|
593
|
+
/**
|
|
594
|
+
* Identifier for the branch.
|
|
595
|
+
*/
|
|
596
|
+
slug: string;
|
|
597
|
+
/**
|
|
598
|
+
* Relative ratio of population for the branch.
|
|
599
|
+
*
|
|
600
|
+
* e.g., if branch A=1 and branch B=3, then branch A would get 25% of the population.
|
|
601
|
+
*/
|
|
602
|
+
ratio: number;
|
|
603
|
+
/**
|
|
604
|
+
* An array of feature configurations.
|
|
605
|
+
*/
|
|
606
|
+
features: ExperimentFeatureConfig[];
|
|
607
|
+
}
|
|
455
608
|
export interface AnalysisError {
|
|
456
609
|
analysis_basis?: AnalysisBasis | null;
|
|
457
610
|
source?: LogSource | null;
|
package/package.json
CHANGED
package/schemas/{NimbusExperiment.schema.json → DesktopAllVersionsNimbusExperiment.schema.json}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2019-09/schema",
|
|
3
|
-
"title": "
|
|
4
|
-
"description": "
|
|
3
|
+
"title": "DesktopAllVersionsNimbusExperiment",
|
|
4
|
+
"description": "A Nimbus experiment for Firefox Desktop. This schema is more strict than DesktopNimbusExperiment and is backwards comaptible with Firefox Desktop versions less than 95. It is intended for use inside Experimenter itself.",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"properties": {
|
|
7
7
|
"schemaVersion": {
|
|
@@ -44,18 +44,6 @@
|
|
|
44
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
45
|
"type": "boolean"
|
|
46
46
|
},
|
|
47
|
-
"isFirefoxLabsOptIn": {
|
|
48
|
-
"description": "When this property is set to true, treat this experiment as aFirefox Labs experiment",
|
|
49
|
-
"type": "boolean"
|
|
50
|
-
},
|
|
51
|
-
"firefoxLabsTitle": {
|
|
52
|
-
"description": "An optional string containing the Fluent ID for the title of the opt-in",
|
|
53
|
-
"type": "string"
|
|
54
|
-
},
|
|
55
|
-
"firefoxLabsDescription": {
|
|
56
|
-
"description": "An optional string containing the Fluent ID for the description of the opt-in",
|
|
57
|
-
"type": "string"
|
|
58
|
-
},
|
|
59
47
|
"bucketConfig": {
|
|
60
48
|
"$ref": "#/$defs/ExperimentBucketConfig",
|
|
61
49
|
"description": "Bucketing configuration."
|
|
@@ -74,29 +62,6 @@
|
|
|
74
62
|
},
|
|
75
63
|
"type": "array"
|
|
76
64
|
},
|
|
77
|
-
"branches": {
|
|
78
|
-
"anyOf": [
|
|
79
|
-
{
|
|
80
|
-
"items": {
|
|
81
|
-
"$ref": "#/$defs/ExperimentSingleFeatureBranch"
|
|
82
|
-
},
|
|
83
|
-
"type": "array"
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
"items": {
|
|
87
|
-
"$ref": "#/$defs/ExperimentMultiFeatureDesktopBranch"
|
|
88
|
-
},
|
|
89
|
-
"type": "array"
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
"items": {
|
|
93
|
-
"$ref": "#/$defs/ExperimentMultiFeatureMobileBranch"
|
|
94
|
-
},
|
|
95
|
-
"type": "array"
|
|
96
|
-
}
|
|
97
|
-
],
|
|
98
|
-
"description": "Branch configuration for the experiment."
|
|
99
|
-
},
|
|
100
65
|
"targeting": {
|
|
101
66
|
"anyOf": [
|
|
102
67
|
{
|
|
@@ -163,20 +128,6 @@
|
|
|
163
128
|
],
|
|
164
129
|
"description": "The slug of the reference branch (i.e., the branch we consider \"control\")."
|
|
165
130
|
},
|
|
166
|
-
"featureValidationOptOut": {
|
|
167
|
-
"description": "Opt out of feature schema validation. Only supported on desktop.",
|
|
168
|
-
"type": "boolean"
|
|
169
|
-
},
|
|
170
|
-
"localizations": {
|
|
171
|
-
"anyOf": [
|
|
172
|
-
{
|
|
173
|
-
"$ref": "#/$defs/ExperimentLocalizations"
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
"type": "null"
|
|
177
|
-
}
|
|
178
|
-
]
|
|
179
|
-
},
|
|
180
131
|
"locales": {
|
|
181
132
|
"anyOf": [
|
|
182
133
|
{
|
|
@@ -202,6 +153,39 @@
|
|
|
202
153
|
}
|
|
203
154
|
],
|
|
204
155
|
"description": "The date that this experiment was first published to Remote Settings. If null, it has not yet been published."
|
|
156
|
+
},
|
|
157
|
+
"branches": {
|
|
158
|
+
"description": "Branch configuration for the experiment.",
|
|
159
|
+
"items": {
|
|
160
|
+
"$ref": "#/$defs/DesktopAllVersionsExperimentBranch"
|
|
161
|
+
},
|
|
162
|
+
"type": "array"
|
|
163
|
+
},
|
|
164
|
+
"isFirefoxLabsOptIn": {
|
|
165
|
+
"description": "When this property is set to true, treat this experiment as aFirefox Labs experiment",
|
|
166
|
+
"type": "boolean"
|
|
167
|
+
},
|
|
168
|
+
"firefoxLabsTitle": {
|
|
169
|
+
"description": "An optional string containing the Fluent ID for the title of the opt-in",
|
|
170
|
+
"type": "string"
|
|
171
|
+
},
|
|
172
|
+
"firefoxLabsDescription": {
|
|
173
|
+
"description": "An optional string containing the Fluent ID for the description of the opt-in",
|
|
174
|
+
"type": "string"
|
|
175
|
+
},
|
|
176
|
+
"featureValidationOptOut": {
|
|
177
|
+
"description": "Opt out of feature schema validation.",
|
|
178
|
+
"type": "boolean"
|
|
179
|
+
},
|
|
180
|
+
"localizations": {
|
|
181
|
+
"anyOf": [
|
|
182
|
+
{
|
|
183
|
+
"$ref": "#/$defs/ExperimentLocalizations"
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"type": "null"
|
|
187
|
+
}
|
|
188
|
+
]
|
|
205
189
|
}
|
|
206
190
|
},
|
|
207
191
|
"required": [
|
|
@@ -215,11 +199,11 @@
|
|
|
215
199
|
"userFacingDescription",
|
|
216
200
|
"isEnrollmentPaused",
|
|
217
201
|
"bucketConfig",
|
|
218
|
-
"branches",
|
|
219
202
|
"startDate",
|
|
220
203
|
"endDate",
|
|
221
204
|
"proposedEnrollment",
|
|
222
|
-
"referenceBranch"
|
|
205
|
+
"referenceBranch",
|
|
206
|
+
"branches"
|
|
223
207
|
],
|
|
224
208
|
"dependentSchemas": {
|
|
225
209
|
"isFirefoxLabsOptIn": {
|
|
@@ -268,10 +252,45 @@
|
|
|
268
252
|
}
|
|
269
253
|
},
|
|
270
254
|
"$defs": {
|
|
271
|
-
"
|
|
255
|
+
"DesktopAllVersionsExperimentBranch": {
|
|
256
|
+
"description": "The branch definition supported on all Firefox Desktop versions. This version requires the feature field to be present to support older Firefox Desktop clients.",
|
|
257
|
+
"properties": {
|
|
258
|
+
"slug": {
|
|
259
|
+
"description": "Identifier for the branch.",
|
|
260
|
+
"type": "string"
|
|
261
|
+
},
|
|
262
|
+
"ratio": {
|
|
263
|
+
"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.",
|
|
264
|
+
"type": "integer"
|
|
265
|
+
},
|
|
266
|
+
"features": {
|
|
267
|
+
"description": "An array of feature configurations.",
|
|
268
|
+
"items": {
|
|
269
|
+
"$ref": "#/$defs/ExperimentFeatureConfig"
|
|
270
|
+
},
|
|
271
|
+
"type": "array"
|
|
272
|
+
},
|
|
273
|
+
"firefoxLabsTitle": {
|
|
274
|
+
"description": "An optional string containing the title of the branch",
|
|
275
|
+
"type": "string"
|
|
276
|
+
},
|
|
277
|
+
"feature": {
|
|
278
|
+
"$ref": "#/$defs/DesktopPre95FeatureConfig",
|
|
279
|
+
"description": "The feature key must be provided with values to prevent crashes if the is encountered by Desktop clients earlier than version 95."
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
"required": [
|
|
283
|
+
"slug",
|
|
284
|
+
"ratio",
|
|
285
|
+
"features",
|
|
286
|
+
"feature"
|
|
287
|
+
],
|
|
288
|
+
"type": "object"
|
|
289
|
+
},
|
|
290
|
+
"DesktopPre95FeatureConfig": {
|
|
272
291
|
"properties": {
|
|
273
292
|
"featureId": {
|
|
274
|
-
"const": "
|
|
293
|
+
"const": "this-is-included-for-desktop-pre-95-support",
|
|
275
294
|
"type": "string"
|
|
276
295
|
},
|
|
277
296
|
"value": {
|
|
@@ -344,68 +363,7 @@
|
|
|
344
363
|
},
|
|
345
364
|
"type": "object"
|
|
346
365
|
},
|
|
347
|
-
"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.
|
|
348
|
-
"type": "object"
|
|
349
|
-
},
|
|
350
|
-
"ExperimentMultiFeatureDesktopBranch": {
|
|
351
|
-
"description": "The branch definition supported on Firefox Desktop 95+.",
|
|
352
|
-
"properties": {
|
|
353
|
-
"slug": {
|
|
354
|
-
"description": "Identifier for the branch.",
|
|
355
|
-
"type": "string"
|
|
356
|
-
},
|
|
357
|
-
"ratio": {
|
|
358
|
-
"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.",
|
|
359
|
-
"type": "integer"
|
|
360
|
-
},
|
|
361
|
-
"features": {
|
|
362
|
-
"description": "An array of feature configurations.",
|
|
363
|
-
"items": {
|
|
364
|
-
"$ref": "#/$defs/ExperimentFeatureConfig"
|
|
365
|
-
},
|
|
366
|
-
"type": "array"
|
|
367
|
-
},
|
|
368
|
-
"feature": {
|
|
369
|
-
"$ref": "#/$defs/DesktopTombstoneFeatureConfig",
|
|
370
|
-
"description": "The feature key must be provided with values to prevent crashes if the is encountered by Desktop clients earlier than version 95."
|
|
371
|
-
},
|
|
372
|
-
"firefoxLabsTitle": {
|
|
373
|
-
"description": "An optional string containing the title of the branch",
|
|
374
|
-
"type": "string"
|
|
375
|
-
}
|
|
376
|
-
},
|
|
377
|
-
"required": [
|
|
378
|
-
"slug",
|
|
379
|
-
"ratio",
|
|
380
|
-
"features",
|
|
381
|
-
"feature"
|
|
382
|
-
],
|
|
383
|
-
"type": "object"
|
|
384
|
-
},
|
|
385
|
-
"ExperimentMultiFeatureMobileBranch": {
|
|
386
|
-
"description": "The branch definition for mobile browsers. Supported on Firefox for Android 96+ and Firefox for iOS 39+.",
|
|
387
|
-
"properties": {
|
|
388
|
-
"slug": {
|
|
389
|
-
"description": "Identifier for the branch.",
|
|
390
|
-
"type": "string"
|
|
391
|
-
},
|
|
392
|
-
"ratio": {
|
|
393
|
-
"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.",
|
|
394
|
-
"type": "integer"
|
|
395
|
-
},
|
|
396
|
-
"features": {
|
|
397
|
-
"description": "An array of feature configurations.",
|
|
398
|
-
"items": {
|
|
399
|
-
"$ref": "#/$defs/ExperimentFeatureConfig"
|
|
400
|
-
},
|
|
401
|
-
"type": "array"
|
|
402
|
-
}
|
|
403
|
-
},
|
|
404
|
-
"required": [
|
|
405
|
-
"slug",
|
|
406
|
-
"ratio",
|
|
407
|
-
"features"
|
|
408
|
-
],
|
|
366
|
+
"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.",
|
|
409
367
|
"type": "object"
|
|
410
368
|
},
|
|
411
369
|
"ExperimentOutcome": {
|
|
@@ -425,29 +383,6 @@
|
|
|
425
383
|
],
|
|
426
384
|
"type": "object"
|
|
427
385
|
},
|
|
428
|
-
"ExperimentSingleFeatureBranch": {
|
|
429
|
-
"description": "A single-feature branch definition. Supported by Firefox Desktop for versions before 95, Firefox for Android for versions before 96, and Firefox for iOS for versions before 39.",
|
|
430
|
-
"properties": {
|
|
431
|
-
"slug": {
|
|
432
|
-
"description": "Identifier for the branch.",
|
|
433
|
-
"type": "string"
|
|
434
|
-
},
|
|
435
|
-
"ratio": {
|
|
436
|
-
"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.",
|
|
437
|
-
"type": "integer"
|
|
438
|
-
},
|
|
439
|
-
"feature": {
|
|
440
|
-
"$ref": "#/$defs/ExperimentFeatureConfig",
|
|
441
|
-
"description": "A single feature configuration."
|
|
442
|
-
}
|
|
443
|
-
},
|
|
444
|
-
"required": [
|
|
445
|
-
"slug",
|
|
446
|
-
"ratio",
|
|
447
|
-
"feature"
|
|
448
|
-
],
|
|
449
|
-
"type": "object"
|
|
450
|
-
},
|
|
451
386
|
"RandomizationUnit": {
|
|
452
387
|
"description": "A unique, stable indentifier for the user used as an input to bucket hashing.",
|
|
453
388
|
"enum": [
|
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2019-09/schema",
|
|
3
|
+
"title": "DesktopNimbusExperiment",
|
|
4
|
+
"description": "A Nimbus experiment for Firefox Desktop. This schema is less strict than DesktopAllVersionsNimbusExperiment and is intended for use in Firefox Desktop.",
|
|
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 experiiment. 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 that will be 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": "A list of outcomes relevant to the experiment 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
|
+
"branches": {
|
|
158
|
+
"description": "Branch configuration for the experiment.",
|
|
159
|
+
"items": {
|
|
160
|
+
"$ref": "#/$defs/DesktopExperimentBranch"
|
|
161
|
+
},
|
|
162
|
+
"type": "array"
|
|
163
|
+
},
|
|
164
|
+
"isFirefoxLabsOptIn": {
|
|
165
|
+
"description": "When this property is set to true, treat this experiment as aFirefox Labs experiment",
|
|
166
|
+
"type": "boolean"
|
|
167
|
+
},
|
|
168
|
+
"firefoxLabsTitle": {
|
|
169
|
+
"description": "An optional string containing the Fluent ID for the title of the opt-in",
|
|
170
|
+
"type": "string"
|
|
171
|
+
},
|
|
172
|
+
"firefoxLabsDescription": {
|
|
173
|
+
"description": "An optional string containing the Fluent ID for the description of the opt-in",
|
|
174
|
+
"type": "string"
|
|
175
|
+
},
|
|
176
|
+
"featureValidationOptOut": {
|
|
177
|
+
"description": "Opt out of feature schema validation.",
|
|
178
|
+
"type": "boolean"
|
|
179
|
+
},
|
|
180
|
+
"localizations": {
|
|
181
|
+
"anyOf": [
|
|
182
|
+
{
|
|
183
|
+
"$ref": "#/$defs/ExperimentLocalizations"
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"type": "null"
|
|
187
|
+
}
|
|
188
|
+
]
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
"required": [
|
|
192
|
+
"schemaVersion",
|
|
193
|
+
"slug",
|
|
194
|
+
"id",
|
|
195
|
+
"appName",
|
|
196
|
+
"appId",
|
|
197
|
+
"channel",
|
|
198
|
+
"userFacingName",
|
|
199
|
+
"userFacingDescription",
|
|
200
|
+
"isEnrollmentPaused",
|
|
201
|
+
"bucketConfig",
|
|
202
|
+
"startDate",
|
|
203
|
+
"endDate",
|
|
204
|
+
"proposedEnrollment",
|
|
205
|
+
"referenceBranch",
|
|
206
|
+
"branches"
|
|
207
|
+
],
|
|
208
|
+
"dependentSchemas": {
|
|
209
|
+
"isFirefoxLabsOptIn": {
|
|
210
|
+
"if": {
|
|
211
|
+
"properties": {
|
|
212
|
+
"isFirefoxLabsOptIn": {
|
|
213
|
+
"const": true
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
"then": {
|
|
218
|
+
"if": {
|
|
219
|
+
"properties": {
|
|
220
|
+
"isRollout": {
|
|
221
|
+
"const": false
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
"required": [
|
|
225
|
+
"isRollout"
|
|
226
|
+
]
|
|
227
|
+
},
|
|
228
|
+
"properties": {
|
|
229
|
+
"firefoxLabsTitle": {
|
|
230
|
+
"type": "string"
|
|
231
|
+
},
|
|
232
|
+
"firefoxLabsDescription": {
|
|
233
|
+
"type": "string"
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
"required": [
|
|
237
|
+
"firefoxLabsTitle",
|
|
238
|
+
"firefoxLabsDescription"
|
|
239
|
+
],
|
|
240
|
+
"then": {
|
|
241
|
+
"properties": {
|
|
242
|
+
"branches": {
|
|
243
|
+
"items": {
|
|
244
|
+
"required": [
|
|
245
|
+
"firefoxLabsTitle"
|
|
246
|
+
]
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
"$defs": {
|
|
255
|
+
"DesktopExperimentBranch": {
|
|
256
|
+
"description": "The branch definition supported on Firefox Desktop 95+.",
|
|
257
|
+
"properties": {
|
|
258
|
+
"slug": {
|
|
259
|
+
"description": "Identifier for the branch.",
|
|
260
|
+
"type": "string"
|
|
261
|
+
},
|
|
262
|
+
"ratio": {
|
|
263
|
+
"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.",
|
|
264
|
+
"type": "integer"
|
|
265
|
+
},
|
|
266
|
+
"features": {
|
|
267
|
+
"description": "An array of feature configurations.",
|
|
268
|
+
"items": {
|
|
269
|
+
"$ref": "#/$defs/ExperimentFeatureConfig"
|
|
270
|
+
},
|
|
271
|
+
"type": "array"
|
|
272
|
+
},
|
|
273
|
+
"firefoxLabsTitle": {
|
|
274
|
+
"description": "An optional string containing the title of the branch",
|
|
275
|
+
"type": "string"
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
"required": [
|
|
279
|
+
"slug",
|
|
280
|
+
"ratio",
|
|
281
|
+
"features"
|
|
282
|
+
],
|
|
283
|
+
"type": "object"
|
|
284
|
+
},
|
|
285
|
+
"ExperimentBucketConfig": {
|
|
286
|
+
"properties": {
|
|
287
|
+
"randomizationUnit": {
|
|
288
|
+
"$ref": "#/$defs/RandomizationUnit"
|
|
289
|
+
},
|
|
290
|
+
"namespace": {
|
|
291
|
+
"description": "Additional inputs to the hashing function.",
|
|
292
|
+
"type": "string"
|
|
293
|
+
},
|
|
294
|
+
"start": {
|
|
295
|
+
"description": "Index of the starting bucket of the range.",
|
|
296
|
+
"type": "integer"
|
|
297
|
+
},
|
|
298
|
+
"count": {
|
|
299
|
+
"description": "Number of buckets in the range.",
|
|
300
|
+
"type": "integer"
|
|
301
|
+
},
|
|
302
|
+
"total": {
|
|
303
|
+
"description": "The total number of buckets. You can assume this will always be 10000",
|
|
304
|
+
"type": "integer"
|
|
305
|
+
}
|
|
306
|
+
},
|
|
307
|
+
"required": [
|
|
308
|
+
"randomizationUnit",
|
|
309
|
+
"namespace",
|
|
310
|
+
"start",
|
|
311
|
+
"count",
|
|
312
|
+
"total"
|
|
313
|
+
],
|
|
314
|
+
"type": "object"
|
|
315
|
+
},
|
|
316
|
+
"ExperimentFeatureConfig": {
|
|
317
|
+
"properties": {
|
|
318
|
+
"featureId": {
|
|
319
|
+
"description": "The identifier for the feature flag.",
|
|
320
|
+
"type": "string"
|
|
321
|
+
},
|
|
322
|
+
"value": {
|
|
323
|
+
"description": "The values that define the feature configuration. This should be validated against a schema.",
|
|
324
|
+
"type": "object"
|
|
325
|
+
}
|
|
326
|
+
},
|
|
327
|
+
"required": [
|
|
328
|
+
"featureId",
|
|
329
|
+
"value"
|
|
330
|
+
],
|
|
331
|
+
"type": "object"
|
|
332
|
+
},
|
|
333
|
+
"ExperimentLocalizations": {
|
|
334
|
+
"additionalProperties": {
|
|
335
|
+
"additionalProperties": {
|
|
336
|
+
"type": "string"
|
|
337
|
+
},
|
|
338
|
+
"type": "object"
|
|
339
|
+
},
|
|
340
|
+
"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.",
|
|
341
|
+
"type": "object"
|
|
342
|
+
},
|
|
343
|
+
"ExperimentOutcome": {
|
|
344
|
+
"properties": {
|
|
345
|
+
"slug": {
|
|
346
|
+
"description": "Identifier for the outcome.",
|
|
347
|
+
"type": "string"
|
|
348
|
+
},
|
|
349
|
+
"priority": {
|
|
350
|
+
"description": "e.g., \"primary\" or \"secondary\".",
|
|
351
|
+
"type": "string"
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
"required": [
|
|
355
|
+
"slug",
|
|
356
|
+
"priority"
|
|
357
|
+
],
|
|
358
|
+
"type": "object"
|
|
359
|
+
},
|
|
360
|
+
"RandomizationUnit": {
|
|
361
|
+
"description": "A unique, stable indentifier for the user used as an input to bucket hashing.",
|
|
362
|
+
"enum": [
|
|
363
|
+
"normandy_id",
|
|
364
|
+
"nimbus_id",
|
|
365
|
+
"user_id",
|
|
366
|
+
"group_id"
|
|
367
|
+
],
|
|
368
|
+
"type": "string"
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2019-09/schema",
|
|
3
|
+
"title": "SdkNimbusExperiment",
|
|
4
|
+
"description": "A Nimbus experiment for Nimbus SDK-based applications.",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"branches": {
|
|
8
|
+
"description": "Branch configuration for the experiment.",
|
|
9
|
+
"items": {
|
|
10
|
+
"$ref": "#/$defs/SdkExperimentBranch"
|
|
11
|
+
},
|
|
12
|
+
"type": "array"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"required": [
|
|
16
|
+
"branches"
|
|
17
|
+
],
|
|
18
|
+
"$defs": {
|
|
19
|
+
"ExperimentFeatureConfig": {
|
|
20
|
+
"properties": {
|
|
21
|
+
"featureId": {
|
|
22
|
+
"description": "The identifier for the feature flag.",
|
|
23
|
+
"type": "string"
|
|
24
|
+
},
|
|
25
|
+
"value": {
|
|
26
|
+
"description": "The values that define the feature configuration. This should be validated against a schema.",
|
|
27
|
+
"type": "object"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"required": [
|
|
31
|
+
"featureId",
|
|
32
|
+
"value"
|
|
33
|
+
],
|
|
34
|
+
"type": "object"
|
|
35
|
+
},
|
|
36
|
+
"SdkExperimentBranch": {
|
|
37
|
+
"description": "The branch definition for SDK-based applications Supported on Firefox for Android 96+ and Firefox for iOS 39+ and all versions of Cirrus.",
|
|
38
|
+
"properties": {
|
|
39
|
+
"slug": {
|
|
40
|
+
"description": "Identifier for the branch.",
|
|
41
|
+
"type": "string"
|
|
42
|
+
},
|
|
43
|
+
"ratio": {
|
|
44
|
+
"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
|
+
"type": "integer"
|
|
46
|
+
},
|
|
47
|
+
"features": {
|
|
48
|
+
"description": "An array of feature configurations.",
|
|
49
|
+
"items": {
|
|
50
|
+
"$ref": "#/$defs/ExperimentFeatureConfig"
|
|
51
|
+
},
|
|
52
|
+
"type": "array"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"required": [
|
|
56
|
+
"slug",
|
|
57
|
+
"ratio",
|
|
58
|
+
"features"
|
|
59
|
+
],
|
|
60
|
+
"type": "object"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|