@dyno-cloud/schema 0.0.0-stage → 0.1.2

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.
Files changed (107) hide show
  1. package/json/budget.schema.json +239 -0
  2. package/json/catalogue.schema.json +1984 -0
  3. package/json/compare.schema.json +823 -0
  4. package/json/devices.json +399 -0
  5. package/json/doctor.schema.json +144 -0
  6. package/json/driver-message.schema.json +724 -0
  7. package/json/dyno-toml.schema.json +80 -0
  8. package/json/exposure-checkpoint.schema.json +97 -0
  9. package/json/games.schema.json +66 -0
  10. package/json/library-bucket.schema.json +22 -0
  11. package/json/library.schema.json +19 -0
  12. package/json/measures.json +407 -0
  13. package/json/probe-event.schema.json +465 -0
  14. package/json/result.schema.json +1907 -0
  15. package/json/run-request.schema.json +161 -0
  16. package/json/unclean-exit.schema.json +99 -0
  17. package/package.json +22 -4
  18. package/ts/AssetChange.ts +8 -0
  19. package/ts/AssetChangeKind.ts +6 -0
  20. package/ts/AudioState.ts +6 -0
  21. package/ts/BrowserEngine.ts +6 -0
  22. package/ts/BudgetId.ts +6 -0
  23. package/ts/BudgetLimit.ts +8 -0
  24. package/ts/BudgetRef.ts +15 -0
  25. package/ts/BudgetVerdict.ts +22 -0
  26. package/ts/BuildLink.ts +6 -0
  27. package/ts/BuildManifest.ts +17 -0
  28. package/ts/CatalogueEntry.ts +7 -0
  29. package/ts/CatalogueResult.ts +22 -0
  30. package/ts/CheckResult.ts +16 -0
  31. package/ts/CompareDeterministic.ts +42 -0
  32. package/ts/CompareResult.ts +12 -0
  33. package/ts/CompareRun.ts +17 -0
  34. package/ts/ContextKind.ts +6 -0
  35. package/ts/Covers.ts +6 -0
  36. package/ts/Deterministic.ts +35 -0
  37. package/ts/DeviceClass.ts +6 -0
  38. package/ts/DeviceEntry.ts +25 -0
  39. package/ts/DeviceKind.ts +6 -0
  40. package/ts/DoctorCheck.ts +16 -0
  41. package/ts/DoctorCheckId.ts +6 -0
  42. package/ts/DoctorReport.ts +20 -0
  43. package/ts/DriverInfo.ts +10 -0
  44. package/ts/DriverMessage.ts +30 -0
  45. package/ts/Environment.ts +13 -0
  46. package/ts/EnvironmentBrowser.ts +23 -0
  47. package/ts/EnvironmentDevice.ts +27 -0
  48. package/ts/EnvironmentOs.ts +12 -0
  49. package/ts/Evidence.ts +11 -0
  50. package/ts/ExposureCheckpoint.ts +9 -0
  51. package/ts/ExposureSample.ts +15 -0
  52. package/ts/FileKind.ts +6 -0
  53. package/ts/Finding.ts +29 -0
  54. package/ts/Fix.ts +22 -0
  55. package/ts/FixAction.ts +7 -0
  56. package/ts/FrameState.ts +6 -0
  57. package/ts/GameHookKind.ts +6 -0
  58. package/ts/HostProfile.ts +47 -0
  59. package/ts/Inputs.ts +34 -0
  60. package/ts/Library.ts +6 -0
  61. package/ts/LibraryBucket.ts +6 -0
  62. package/ts/LiveFrame.ts +19 -0
  63. package/ts/Machine.ts +14 -0
  64. package/ts/ManifestFile.ts +12 -0
  65. package/ts/Measure.ts +50 -0
  66. package/ts/MeasureChange.ts +14 -0
  67. package/ts/MeasureEntry.ts +13 -0
  68. package/ts/MeasureId.ts +6 -0
  69. package/ts/MeasureItem.ts +15 -0
  70. package/ts/MeasureStatus.ts +6 -0
  71. package/ts/MeasureValue.ts +7 -0
  72. package/ts/MessageDirection.ts +6 -0
  73. package/ts/Method.ts +6 -0
  74. package/ts/OsName.ts +6 -0
  75. package/ts/ProbeEvent.ts +48 -0
  76. package/ts/ProfileRef.ts +6 -0
  77. package/ts/Quantity.ts +7 -0
  78. package/ts/RelPath.ts +9 -0
  79. package/ts/Release.ts +12 -0
  80. package/ts/ResultRef.ts +15 -0
  81. package/ts/RuleId.ts +6 -0
  82. package/ts/RunCoverage.ts +8 -0
  83. package/ts/RunInfo.ts +50 -0
  84. package/ts/RunMark.ts +6 -0
  85. package/ts/RunRequest.ts +24 -0
  86. package/ts/Scenario.ts +6 -0
  87. package/ts/Scope.ts +12 -0
  88. package/ts/Severity.ts +6 -0
  89. package/ts/Shard.ts +17 -0
  90. package/ts/Source.ts +6 -0
  91. package/ts/SourceKind.ts +7 -0
  92. package/ts/Statistic.ts +7 -0
  93. package/ts/Status.ts +9 -0
  94. package/ts/Target.ts +15 -0
  95. package/ts/Tier.ts +9 -0
  96. package/ts/TierReport.ts +26 -0
  97. package/ts/ToolBuild.ts +14 -0
  98. package/ts/Uncertainty.ts +19 -0
  99. package/ts/UncertaintyKind.ts +6 -0
  100. package/ts/UncleanExit.ts +16 -0
  101. package/ts/Unit.ts +6 -0
  102. package/ts/Verdict.ts +6 -0
  103. package/ts/VerdictChange.ts +12 -0
  104. package/ts/Versions.ts +22 -0
  105. package/ts/Viewport.ts +6 -0
  106. package/ts/index.ts +89 -0
  107. package/README.md +0 -3
@@ -0,0 +1,80 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "LinkFile",
4
+ "description": "A link file: one `[[game]]` table per build folder.",
5
+ "type": "object",
6
+ "properties": {
7
+ "build": {
8
+ "description": "How CI makes the build folders. dyno does not run it.",
9
+ "anyOf": [
10
+ {
11
+ "$ref": "#/$defs/BuildCommand"
12
+ },
13
+ {
14
+ "type": "null"
15
+ }
16
+ ]
17
+ },
18
+ "game": {
19
+ "description": "One `[[game]]` table per build folder.",
20
+ "type": "array",
21
+ "default": [],
22
+ "items": {
23
+ "$ref": "#/$defs/LinkedGame"
24
+ }
25
+ },
26
+ "schema_version": {
27
+ "description": "The file format version. Must equal the schema version this dyno reads.",
28
+ "type": "integer",
29
+ "format": "uint32",
30
+ "minimum": 0
31
+ }
32
+ },
33
+ "additionalProperties": false,
34
+ "required": [
35
+ "schema_version"
36
+ ],
37
+ "$defs": {
38
+ "BuildCommand": {
39
+ "description": "How CI makes the build folders, such as the workflow that the dyno site's setup pull request\nwrites. dyno does not run it.",
40
+ "type": "object",
41
+ "properties": {
42
+ "command": {
43
+ "description": "The shell command that makes every build folder from a fresh checkout, run in this file's\nfolder.",
44
+ "type": "string"
45
+ }
46
+ },
47
+ "additionalProperties": false,
48
+ "required": [
49
+ "command"
50
+ ]
51
+ },
52
+ "LinkedGame": {
53
+ "description": "One build folder and the game it belongs to.",
54
+ "type": "object",
55
+ "properties": {
56
+ "build": {
57
+ "description": "The build folder or .zip, relative to this file. Unique in the file.",
58
+ "type": "string"
59
+ },
60
+ "id": {
61
+ "description": "The game's id on the dyno site, a UUID.",
62
+ "type": "string"
63
+ },
64
+ "name": {
65
+ "description": "The game's name: the `--game` label when none is given.",
66
+ "type": [
67
+ "string",
68
+ "null"
69
+ ],
70
+ "default": null
71
+ }
72
+ },
73
+ "additionalProperties": false,
74
+ "required": [
75
+ "id",
76
+ "build"
77
+ ]
78
+ }
79
+ }
80
+ }
@@ -0,0 +1,97 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "ExposureCheckpoint",
4
+ "description": "Sampled exposure, written to storage every 30 s or so and sent on the next load. A page\nthat dies loses only the time since its last checkpoint.",
5
+ "type": "object",
6
+ "properties": {
7
+ "host_profile": {
8
+ "$ref": "#/$defs/ProfileRef"
9
+ },
10
+ "samples": {
11
+ "type": "array",
12
+ "items": {
13
+ "$ref": "#/$defs/ExposureSample"
14
+ }
15
+ },
16
+ "schema_version": {
17
+ "type": "integer",
18
+ "format": "uint32",
19
+ "minimum": 0
20
+ }
21
+ },
22
+ "required": [
23
+ "schema_version",
24
+ "host_profile",
25
+ "samples"
26
+ ],
27
+ "$defs": {
28
+ "ExposureSample": {
29
+ "description": "Live time for one game frame in one state.",
30
+ "type": "object",
31
+ "properties": {
32
+ "build_version": {
33
+ "type": [
34
+ "string",
35
+ "null"
36
+ ]
37
+ },
38
+ "frame_state": {
39
+ "$ref": "#/$defs/FrameState"
40
+ },
41
+ "game_id": {
42
+ "type": "string"
43
+ },
44
+ "live_ms": {
45
+ "description": "Time the frame was live in this state.",
46
+ "type": "integer",
47
+ "format": "uint64",
48
+ "minimum": 0
49
+ },
50
+ "sampled_share": {
51
+ "description": "The share of sessions that log exposure, from above 0 to 1.",
52
+ "type": "number",
53
+ "format": "double"
54
+ }
55
+ },
56
+ "required": [
57
+ "game_id",
58
+ "frame_state",
59
+ "live_ms",
60
+ "sampled_share"
61
+ ]
62
+ },
63
+ "FrameState": {
64
+ "description": "Whether a game frame is the one on screen. Reels calls an inactive frame preloaded.",
65
+ "oneOf": [
66
+ {
67
+ "description": "On screen, after the host's active message.",
68
+ "type": "string",
69
+ "const": "active"
70
+ },
71
+ {
72
+ "description": "Mounted but not on screen.",
73
+ "type": "string",
74
+ "const": "inactive"
75
+ }
76
+ ]
77
+ },
78
+ "ProfileRef": {
79
+ "description": "Which host profile, and which version of it, a result used.",
80
+ "type": "object",
81
+ "properties": {
82
+ "name": {
83
+ "type": "string"
84
+ },
85
+ "version": {
86
+ "type": "integer",
87
+ "format": "uint32",
88
+ "minimum": 0
89
+ }
90
+ },
91
+ "required": [
92
+ "name",
93
+ "version"
94
+ ]
95
+ }
96
+ }
97
+ }
@@ -0,0 +1,66 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "GamesFile",
4
+ "description": "A games file: the games a catalogue run checks.",
5
+ "type": "object",
6
+ "properties": {
7
+ "game": {
8
+ "description": "One `[[game]]` table per game.",
9
+ "type": "array",
10
+ "items": {
11
+ "$ref": "#/$defs/GameEntry"
12
+ }
13
+ },
14
+ "schema_version": {
15
+ "description": "The file format version. Must equal the schema version this dyno reads.",
16
+ "type": "integer",
17
+ "format": "uint32",
18
+ "minimum": 0
19
+ }
20
+ },
21
+ "additionalProperties": false,
22
+ "required": [
23
+ "schema_version",
24
+ "game"
25
+ ],
26
+ "$defs": {
27
+ "GameEntry": {
28
+ "description": "One game in a games file. It needs a build, a launch URL or both.",
29
+ "type": "object",
30
+ "properties": {
31
+ "build": {
32
+ "description": "The build folder or .zip, relative to the games file.",
33
+ "type": [
34
+ "string",
35
+ "null"
36
+ ],
37
+ "default": null
38
+ },
39
+ "id": {
40
+ "description": "Unique in the file. Shards split the games in id order.",
41
+ "type": "string"
42
+ },
43
+ "launch_url": {
44
+ "description": "An http or https URL, checked when the file loads.",
45
+ "type": [
46
+ "string",
47
+ "null"
48
+ ],
49
+ "default": null
50
+ },
51
+ "release": {
52
+ "description": "The release version label for the result.",
53
+ "type": [
54
+ "string",
55
+ "null"
56
+ ],
57
+ "default": null
58
+ }
59
+ },
60
+ "additionalProperties": false,
61
+ "required": [
62
+ "id"
63
+ ]
64
+ }
65
+ }
66
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "LibraryBucket",
4
+ "description": "What a library does. Only the rendering bucket says how the game draws.",
5
+ "oneOf": [
6
+ {
7
+ "description": "Draws the game, such as Pixi.",
8
+ "type": "string",
9
+ "const": "rendering"
10
+ },
11
+ {
12
+ "description": "Plays sound, such as Howler.",
13
+ "type": "string",
14
+ "const": "audio"
15
+ },
16
+ {
17
+ "description": "Anything else, such as an SDK or a utility.",
18
+ "type": "string",
19
+ "const": "other"
20
+ }
21
+ ]
22
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Library",
4
+ "description": "A library the static scan can detect.",
5
+ "oneOf": [
6
+ {
7
+ "type": "string",
8
+ "enum": [
9
+ "pixi",
10
+ "howler"
11
+ ]
12
+ },
13
+ {
14
+ "description": "StakeEngine's web-sdk. It bundles its own Pixi, which the scan detects as Pixi.",
15
+ "type": "string",
16
+ "const": "web_sdk"
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,407 @@
1
+ [
2
+ {
3
+ "id": "static.inventory.files",
4
+ "source": "static",
5
+ "phase": 1,
6
+ "unit": "count",
7
+ "covers": "supplied_files",
8
+ "quantity": "files",
9
+ "statistic": "all_files"
10
+ },
11
+ {
12
+ "id": "static.bytes.by_type",
13
+ "source": "static",
14
+ "phase": 1,
15
+ "unit": "bytes",
16
+ "covers": "supplied_files",
17
+ "quantity": "download_bytes",
18
+ "statistic": "all_files"
19
+ },
20
+ {
21
+ "id": "static.bytes.compressed",
22
+ "source": "static",
23
+ "phase": 1,
24
+ "unit": "bytes",
25
+ "covers": "supplied_files",
26
+ "quantity": "compressed_bytes",
27
+ "statistic": "all_files"
28
+ },
29
+ {
30
+ "id": "static.bytes.duplicates",
31
+ "source": "static",
32
+ "phase": 1,
33
+ "unit": "bytes",
34
+ "covers": "supplied_files",
35
+ "quantity": "duplicate_bytes",
36
+ "statistic": "all_files"
37
+ },
38
+ {
39
+ "id": "static.textures.decoded",
40
+ "source": "static",
41
+ "phase": 1,
42
+ "unit": "bytes",
43
+ "covers": "supplied_files",
44
+ "quantity": "textures",
45
+ "statistic": "all_files"
46
+ },
47
+ {
48
+ "id": "static.audio.decoded_48k",
49
+ "source": "static",
50
+ "phase": 1,
51
+ "unit": "bytes",
52
+ "covers": "supplied_files",
53
+ "quantity": "audio",
54
+ "statistic": "all_files_at48k"
55
+ },
56
+ {
57
+ "id": "static.audio.decoded_24k",
58
+ "source": "static",
59
+ "phase": 1,
60
+ "unit": "bytes",
61
+ "covers": "supplied_files",
62
+ "quantity": "audio",
63
+ "statistic": "all_files_at24k"
64
+ },
65
+ {
66
+ "id": "static.audio.stereo_files",
67
+ "source": "static",
68
+ "phase": 1,
69
+ "unit": "count",
70
+ "covers": "supplied_files",
71
+ "quantity": "stereo_sounds",
72
+ "statistic": "all_files"
73
+ },
74
+ {
75
+ "id": "static.audio.stereo_mono_safe",
76
+ "source": "static",
77
+ "phase": 1,
78
+ "unit": "count",
79
+ "covers": "supplied_files",
80
+ "quantity": "mono_safe_stereo_sounds",
81
+ "statistic": "all_files"
82
+ },
83
+ {
84
+ "id": "static.audio.sprite_silence",
85
+ "source": "static",
86
+ "phase": 1,
87
+ "unit": "basis_points",
88
+ "covers": "supplied_files",
89
+ "quantity": "sprite_silence",
90
+ "statistic": "largest"
91
+ },
92
+ {
93
+ "id": "static.audio.silence_by_decode",
94
+ "source": "static",
95
+ "phase": 1,
96
+ "unit": "basis_points",
97
+ "covers": "supplied_files",
98
+ "quantity": "audio_silence",
99
+ "statistic": "all_files"
100
+ },
101
+ {
102
+ "id": "static.render.antialias",
103
+ "source": "static",
104
+ "phase": 1,
105
+ "unit": "flag",
106
+ "covers": "supplied_files",
107
+ "quantity": "antialias",
108
+ "statistic": "all_files"
109
+ },
110
+ {
111
+ "id": "static.render.resolution_uncapped",
112
+ "source": "static",
113
+ "phase": 1,
114
+ "unit": "flag",
115
+ "covers": "supplied_files",
116
+ "quantity": "resolution_uncapped",
117
+ "statistic": "all_files"
118
+ },
119
+ {
120
+ "id": "static.render.backend",
121
+ "source": "static",
122
+ "phase": 1,
123
+ "unit": "text",
124
+ "covers": "supplied_files",
125
+ "quantity": "render_backend",
126
+ "statistic": "all_files"
127
+ },
128
+ {
129
+ "id": "static.render.canvas",
130
+ "source": "static",
131
+ "phase": 1,
132
+ "unit": "bytes",
133
+ "covers": "supplied_files",
134
+ "quantity": "canvas",
135
+ "statistic": "all_files"
136
+ },
137
+ {
138
+ "id": "static.bundle.engines",
139
+ "source": "static",
140
+ "phase": 1,
141
+ "unit": "count",
142
+ "covers": "supplied_files",
143
+ "quantity": "libraries",
144
+ "statistic": "all_files"
145
+ },
146
+ {
147
+ "id": "static.bundle.external_urls",
148
+ "source": "static",
149
+ "phase": 1,
150
+ "unit": "count",
151
+ "covers": "supplied_files",
152
+ "quantity": "external_urls",
153
+ "statistic": "all_files"
154
+ },
155
+ {
156
+ "id": "static.bundle.source_map",
157
+ "source": "static",
158
+ "phase": 2,
159
+ "unit": "bytes",
160
+ "covers": "supplied_files",
161
+ "quantity": "script_bytes",
162
+ "statistic": "all_files"
163
+ },
164
+ {
165
+ "id": "lab.time.first_frame",
166
+ "source": "lab",
167
+ "phase": 1,
168
+ "unit": "ms",
169
+ "covers": "load_to_idle",
170
+ "quantity": "first_frame_time",
171
+ "statistic": "since_navigation"
172
+ },
173
+ {
174
+ "id": "lab.time.ready",
175
+ "source": "lab",
176
+ "phase": 1,
177
+ "unit": "ms",
178
+ "covers": "load_to_idle",
179
+ "quantity": "ready_time",
180
+ "statistic": "since_navigation"
181
+ },
182
+ {
183
+ "id": "lab.bytes.loaded_by_idle",
184
+ "source": "lab",
185
+ "phase": 1,
186
+ "unit": "bytes",
187
+ "covers": "load_to_idle",
188
+ "quantity": "download_bytes",
189
+ "statistic": "by_idle"
190
+ },
191
+ {
192
+ "id": "lab.bytes.to_playable",
193
+ "source": "lab",
194
+ "phase": 1,
195
+ "unit": "bytes",
196
+ "covers": "load_to_idle",
197
+ "quantity": "download_bytes",
198
+ "statistic": "to_playable"
199
+ },
200
+ {
201
+ "id": "lab.audio.decoded",
202
+ "source": "lab",
203
+ "phase": 1,
204
+ "unit": "bytes",
205
+ "covers": "load_to_idle",
206
+ "quantity": "audio",
207
+ "statistic": "by_idle"
208
+ },
209
+ {
210
+ "id": "lab.audio.context_rate",
211
+ "source": "lab",
212
+ "phase": 1,
213
+ "unit": "hertz",
214
+ "covers": "load_to_idle",
215
+ "quantity": "audio_rate",
216
+ "statistic": "at_idle"
217
+ },
218
+ {
219
+ "id": "lab.textures.uploaded",
220
+ "source": "lab",
221
+ "phase": 1,
222
+ "unit": "bytes",
223
+ "covers": "load_to_idle",
224
+ "quantity": "textures",
225
+ "statistic": "by_idle"
226
+ },
227
+ {
228
+ "id": "lab.textures.resident",
229
+ "source": "lab",
230
+ "phase": 1,
231
+ "unit": "bytes",
232
+ "covers": "load_to_idle",
233
+ "quantity": "textures",
234
+ "statistic": "at_idle"
235
+ },
236
+ {
237
+ "id": "lab.canvas.contexts",
238
+ "source": "lab",
239
+ "phase": 1,
240
+ "unit": "count",
241
+ "covers": "load_to_idle",
242
+ "quantity": "canvas_contexts",
243
+ "statistic": "by_idle"
244
+ },
245
+ {
246
+ "id": "lab.canvas.bytes",
247
+ "source": "lab",
248
+ "phase": 1,
249
+ "unit": "bytes",
250
+ "covers": "load_to_idle",
251
+ "quantity": "canvas",
252
+ "statistic": "at_idle"
253
+ },
254
+ {
255
+ "id": "lab.js_heap",
256
+ "source": "lab",
257
+ "phase": 1,
258
+ "unit": "bytes",
259
+ "covers": "load_to_idle",
260
+ "quantity": "js_heap",
261
+ "statistic": "at_idle"
262
+ },
263
+ {
264
+ "id": "lab.inactive.audio_running",
265
+ "source": "lab",
266
+ "phase": 1,
267
+ "unit": "flag",
268
+ "covers": "load_to_idle",
269
+ "quantity": "audio_running",
270
+ "statistic": "while_inactive"
271
+ },
272
+ {
273
+ "id": "lab.inactive.frame_rate",
274
+ "source": "lab",
275
+ "phase": 1,
276
+ "unit": "hertz",
277
+ "covers": "load_to_idle",
278
+ "quantity": "frame_rate",
279
+ "statistic": "while_inactive"
280
+ },
281
+ {
282
+ "id": "lab.inactive.allocated",
283
+ "source": "lab",
284
+ "phase": 1,
285
+ "unit": "bytes",
286
+ "covers": "load_to_idle",
287
+ "quantity": "allocated_bytes",
288
+ "statistic": "while_inactive"
289
+ },
290
+ {
291
+ "id": "lab.self_check.frame_dpr",
292
+ "source": "lab",
293
+ "phase": 1,
294
+ "unit": "milli",
295
+ "covers": "load_to_idle",
296
+ "quantity": "frame_dpr",
297
+ "statistic": "at_idle"
298
+ },
299
+ {
300
+ "id": "lab.self_check.frame_requests",
301
+ "source": "lab",
302
+ "phase": 1,
303
+ "unit": "count",
304
+ "covers": "load_to_idle",
305
+ "quantity": "frame_requests",
306
+ "statistic": "by_idle"
307
+ },
308
+ {
309
+ "id": "lab.self_check.webgl_renderer",
310
+ "source": "lab",
311
+ "phase": 1,
312
+ "unit": "text",
313
+ "covers": "load_to_idle",
314
+ "quantity": "webgl_renderer",
315
+ "statistic": "at_idle"
316
+ },
317
+ {
318
+ "id": "model.footprint",
319
+ "source": "model",
320
+ "phase": 1,
321
+ "unit": "bytes",
322
+ "covers": "model_inputs",
323
+ "quantity": "footprint",
324
+ "statistic": "modelled_active"
325
+ },
326
+ {
327
+ "id": "model.footprint_inactive",
328
+ "source": "model",
329
+ "phase": 2,
330
+ "unit": "bytes",
331
+ "covers": "model_inputs",
332
+ "quantity": "footprint",
333
+ "statistic": "modelled_inactive"
334
+ },
335
+ {
336
+ "id": "play.spins",
337
+ "source": "lab",
338
+ "phase": 2,
339
+ "unit": "count",
340
+ "covers": "demo_spins",
341
+ "quantity": "spins",
342
+ "statistic": "during_spins"
343
+ },
344
+ {
345
+ "id": "play.peak",
346
+ "source": "lab",
347
+ "phase": 2,
348
+ "unit": "bytes",
349
+ "covers": "demo_spins",
350
+ "quantity": "memory",
351
+ "statistic": "peak_during_spins"
352
+ },
353
+ {
354
+ "id": "play.growth_per_100_spins",
355
+ "source": "lab",
356
+ "phase": 2,
357
+ "unit": "bytes_change",
358
+ "covers": "demo_spins",
359
+ "quantity": "memory",
360
+ "statistic": "growth_per100_spins"
361
+ },
362
+ {
363
+ "id": "play.bonus_peak",
364
+ "source": "lab",
365
+ "phase": 2,
366
+ "unit": "bytes",
367
+ "covers": "demo_spins",
368
+ "quantity": "memory",
369
+ "statistic": "peak_during_bonus"
370
+ },
371
+ {
372
+ "id": "device.phys_footprint",
373
+ "source": "device",
374
+ "phase": 2,
375
+ "unit": "bytes",
376
+ "covers": "fresh_device_runs",
377
+ "quantity": "footprint",
378
+ "statistic": "at_idle"
379
+ },
380
+ {
381
+ "id": "device.phys_footprint_peak",
382
+ "source": "device",
383
+ "phase": 2,
384
+ "unit": "bytes",
385
+ "covers": "fresh_device_runs",
386
+ "quantity": "footprint",
387
+ "statistic": "peak"
388
+ },
389
+ {
390
+ "id": "device.footprint_over_baseline",
391
+ "source": "device",
392
+ "phase": 2,
393
+ "unit": "bytes_change",
394
+ "covers": "fresh_device_runs",
395
+ "quantity": "footprint",
396
+ "statistic": "median_peak_over_baseline"
397
+ },
398
+ {
399
+ "id": "device.kills",
400
+ "source": "device",
401
+ "phase": 2,
402
+ "unit": "count",
403
+ "covers": "fresh_device_runs",
404
+ "quantity": "kills",
405
+ "statistic": "of_runs"
406
+ }
407
+ ]