@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,724 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "DriverMessage",
4
+ "description": "One line from a driver. `t_ms` is the time since the driver started the navigation.\n\nThere are two clocks. A driver message's `t_ms` is on the driver's clock. A probe event's\n`t_ms` is `performance.now()` in the game frame, which starts at a different moment.",
5
+ "oneOf": [
6
+ {
7
+ "description": "The first line: the driver and the protocol version it speaks.",
8
+ "type": "object",
9
+ "properties": {
10
+ "driver": {
11
+ "$ref": "#/$defs/DriverInfo"
12
+ },
13
+ "protocol_version": {
14
+ "type": "integer",
15
+ "format": "uint32",
16
+ "minimum": 0
17
+ },
18
+ "type": {
19
+ "type": "string",
20
+ "const": "hello"
21
+ }
22
+ },
23
+ "required": [
24
+ "type",
25
+ "protocol_version",
26
+ "driver"
27
+ ]
28
+ },
29
+ {
30
+ "description": "One event from the probe in the game frame. The event keeps the frame's own clock.",
31
+ "type": "object",
32
+ "properties": {
33
+ "event": {
34
+ "$ref": "#/$defs/ProbeEvent"
35
+ },
36
+ "type": {
37
+ "type": "string",
38
+ "const": "probe"
39
+ }
40
+ },
41
+ "required": [
42
+ "type",
43
+ "event"
44
+ ]
45
+ },
46
+ {
47
+ "description": "One finished request on the game frame's own session.",
48
+ "type": "object",
49
+ "properties": {
50
+ "bytes": {
51
+ "description": "Bytes received over the network for this request.",
52
+ "type": "integer",
53
+ "format": "uint64",
54
+ "minimum": 0
55
+ },
56
+ "mime_type": {
57
+ "description": "The response's MIME type. Null when it had none.",
58
+ "type": [
59
+ "string",
60
+ "null"
61
+ ]
62
+ },
63
+ "t_ms": {
64
+ "type": "number",
65
+ "format": "double"
66
+ },
67
+ "type": {
68
+ "type": "string",
69
+ "const": "request"
70
+ },
71
+ "url": {
72
+ "type": "string"
73
+ }
74
+ },
75
+ "required": [
76
+ "type",
77
+ "url",
78
+ "bytes",
79
+ "t_ms"
80
+ ]
81
+ },
82
+ {
83
+ "description": "The game frame's JS heap in use.",
84
+ "type": "object",
85
+ "properties": {
86
+ "t_ms": {
87
+ "type": "number",
88
+ "format": "double"
89
+ },
90
+ "type": {
91
+ "type": "string",
92
+ "const": "heap"
93
+ },
94
+ "used_bytes": {
95
+ "type": "integer",
96
+ "format": "uint64",
97
+ "minimum": 0
98
+ }
99
+ },
100
+ "required": [
101
+ "type",
102
+ "used_bytes",
103
+ "t_ms"
104
+ ]
105
+ },
106
+ {
107
+ "description": "Self-check readings from inside the game frame.",
108
+ "type": "object",
109
+ "properties": {
110
+ "device_pixel_ratio": {
111
+ "type": "number",
112
+ "format": "double"
113
+ },
114
+ "frame_clock_at_ms": {
115
+ "description": "When the game frame's document clock started, on the driver's clock: a probe event\nat frame time `t` happened at `t + frame_clock_at_ms` after the navigation. Null from\na driver that does not read it.",
116
+ "type": [
117
+ "number",
118
+ "null"
119
+ ],
120
+ "format": "double",
121
+ "default": null
122
+ },
123
+ "t_ms": {
124
+ "type": "number",
125
+ "format": "double"
126
+ },
127
+ "type": {
128
+ "type": "string",
129
+ "const": "self_check"
130
+ },
131
+ "webgl_renderer": {
132
+ "description": "The unmasked WebGL renderer. Null when WebGL is off.",
133
+ "type": [
134
+ "string",
135
+ "null"
136
+ ]
137
+ }
138
+ },
139
+ "required": [
140
+ "type",
141
+ "device_pixel_ratio",
142
+ "t_ms"
143
+ ]
144
+ },
145
+ {
146
+ "description": "A step in the run.",
147
+ "type": "object",
148
+ "properties": {
149
+ "mark": {
150
+ "$ref": "#/$defs/RunMark"
151
+ },
152
+ "t_ms": {
153
+ "type": "number",
154
+ "format": "double"
155
+ },
156
+ "type": {
157
+ "type": "string",
158
+ "const": "mark"
159
+ }
160
+ },
161
+ "required": [
162
+ "type",
163
+ "mark",
164
+ "t_ms"
165
+ ]
166
+ },
167
+ {
168
+ "description": "The last line of a run that finished.",
169
+ "type": "object",
170
+ "properties": {
171
+ "t_ms": {
172
+ "type": "number",
173
+ "format": "double"
174
+ },
175
+ "type": {
176
+ "type": "string",
177
+ "const": "done"
178
+ }
179
+ },
180
+ "required": [
181
+ "type",
182
+ "t_ms"
183
+ ]
184
+ },
185
+ {
186
+ "description": "The last line of a run that failed.",
187
+ "type": "object",
188
+ "properties": {
189
+ "message": {
190
+ "type": "string"
191
+ },
192
+ "t_ms": {
193
+ "type": "number",
194
+ "format": "double"
195
+ },
196
+ "type": {
197
+ "type": "string",
198
+ "const": "error"
199
+ }
200
+ },
201
+ "required": [
202
+ "type",
203
+ "message",
204
+ "t_ms"
205
+ ]
206
+ }
207
+ ],
208
+ "$defs": {
209
+ "AudioState": {
210
+ "description": "An audio context's state.",
211
+ "type": "string",
212
+ "enum": [
213
+ "running",
214
+ "suspended",
215
+ "closed"
216
+ ]
217
+ },
218
+ "ContextKind": {
219
+ "description": "A canvas rendering context's kind.",
220
+ "type": "string",
221
+ "enum": [
222
+ "webgl",
223
+ "webgl2",
224
+ "webgpu",
225
+ "canvas2d"
226
+ ]
227
+ },
228
+ "DriverInfo": {
229
+ "description": "The browser driver behind a run: the Rust CDP driver, or a fallback subprocess.",
230
+ "type": "object",
231
+ "properties": {
232
+ "browser": {
233
+ "description": "The browser and its version, such as \"Chromium 140.0.7339.0\".",
234
+ "type": [
235
+ "string",
236
+ "null"
237
+ ]
238
+ },
239
+ "name": {
240
+ "type": "string"
241
+ },
242
+ "version": {
243
+ "type": "string"
244
+ }
245
+ },
246
+ "required": [
247
+ "name",
248
+ "version"
249
+ ]
250
+ },
251
+ "GameHookKind": {
252
+ "description": "An optional game hook.",
253
+ "oneOf": [
254
+ {
255
+ "type": "string",
256
+ "enum": [
257
+ "spin_start",
258
+ "round_settled"
259
+ ]
260
+ },
261
+ {
262
+ "description": "The game can take a spin. Bytes to playable stop here.",
263
+ "type": "string",
264
+ "const": "playable"
265
+ },
266
+ {
267
+ "description": "The game moved to a new phase, named in `detail`.",
268
+ "type": "string",
269
+ "const": "game_phase"
270
+ }
271
+ ]
272
+ },
273
+ "MessageDirection": {
274
+ "description": "Which way a host message went.",
275
+ "type": "string",
276
+ "enum": [
277
+ "to_host",
278
+ "from_host"
279
+ ]
280
+ },
281
+ "ProbeEvent": {
282
+ "description": "One probe event. `t_ms` is `performance.now()` in the game frame.",
283
+ "oneOf": [
284
+ {
285
+ "description": "The first `requestAnimationFrame` callback ran.",
286
+ "type": "object",
287
+ "properties": {
288
+ "t_ms": {
289
+ "type": "number",
290
+ "format": "double"
291
+ },
292
+ "type": {
293
+ "type": "string",
294
+ "const": "first_frame"
295
+ }
296
+ },
297
+ "required": [
298
+ "type",
299
+ "t_ms"
300
+ ]
301
+ },
302
+ {
303
+ "description": "A message crossed between the game frame and the host page, such as `reels:ready`.",
304
+ "type": "object",
305
+ "properties": {
306
+ "direction": {
307
+ "$ref": "#/$defs/MessageDirection"
308
+ },
309
+ "name": {
310
+ "type": "string"
311
+ },
312
+ "t_ms": {
313
+ "type": "number",
314
+ "format": "double"
315
+ },
316
+ "type": {
317
+ "type": "string",
318
+ "const": "host_message"
319
+ }
320
+ },
321
+ "required": [
322
+ "type",
323
+ "direction",
324
+ "name",
325
+ "t_ms"
326
+ ]
327
+ },
328
+ {
329
+ "description": "`decodeAudioData` finished. Decoded bytes are length x channels x 4.",
330
+ "type": "object",
331
+ "properties": {
332
+ "channels": {
333
+ "type": "integer",
334
+ "format": "uint32",
335
+ "minimum": 0
336
+ },
337
+ "length": {
338
+ "type": "integer",
339
+ "format": "uint64",
340
+ "minimum": 0
341
+ },
342
+ "sample_rate": {
343
+ "type": "integer",
344
+ "format": "uint32",
345
+ "minimum": 0
346
+ },
347
+ "t_ms": {
348
+ "type": "number",
349
+ "format": "double"
350
+ },
351
+ "type": {
352
+ "type": "string",
353
+ "const": "audio_decoded"
354
+ }
355
+ },
356
+ "required": [
357
+ "type",
358
+ "length",
359
+ "channels",
360
+ "sample_rate",
361
+ "t_ms"
362
+ ]
363
+ },
364
+ {
365
+ "description": "An audio context changed state.",
366
+ "type": "object",
367
+ "properties": {
368
+ "sample_rate": {
369
+ "type": "integer",
370
+ "format": "uint32",
371
+ "minimum": 0
372
+ },
373
+ "state": {
374
+ "$ref": "#/$defs/AudioState"
375
+ },
376
+ "t_ms": {
377
+ "type": "number",
378
+ "format": "double"
379
+ },
380
+ "type": {
381
+ "type": "string",
382
+ "const": "audio_context_state"
383
+ }
384
+ },
385
+ "required": [
386
+ "type",
387
+ "state",
388
+ "sample_rate",
389
+ "t_ms"
390
+ ]
391
+ },
392
+ {
393
+ "description": "A texture upload, such as `texImage2D` or `compressedTexImage2D`.",
394
+ "type": "object",
395
+ "properties": {
396
+ "bytes": {
397
+ "type": "integer",
398
+ "format": "uint64",
399
+ "minimum": 0
400
+ },
401
+ "face": {
402
+ "description": "The cube map face, 0 to 5; 0 for a 2D texture. None for `texStorage2D` on a cube\nmap, which allocates every face at once.",
403
+ "type": [
404
+ "integer",
405
+ "null"
406
+ ],
407
+ "format": "uint32",
408
+ "default": null,
409
+ "minimum": 0
410
+ },
411
+ "height": {
412
+ "type": "integer",
413
+ "format": "uint32",
414
+ "minimum": 0
415
+ },
416
+ "level": {
417
+ "description": "The mip level. None for `texStorage2D`, which allocates every level at once.",
418
+ "type": [
419
+ "integer",
420
+ "null"
421
+ ],
422
+ "format": "uint32",
423
+ "default": null,
424
+ "minimum": 0
425
+ },
426
+ "source": {
427
+ "description": "The path of the http image or video it came from, without host, query or fragment.\nThe lab probe follows a fetched file to an ImageBitmap, a `blob:` object URL or a\nresponse made from it (also through Pixi 8's worker). None for data, a render target,\na canvas, or a `data:` URL. An upload by `texSubImage2D` into `texStorage2D` storage is\nnot seen, so its source is not either.",
428
+ "type": [
429
+ "string",
430
+ "null"
431
+ ],
432
+ "default": null
433
+ },
434
+ "source_kind": {
435
+ "description": "What an upload with no source held, when the lab probe can tell: `empty` for an\nallocation with no pixels, `canvas` for a canvas the game drew. None otherwise, and\nalways from the field probe.",
436
+ "anyOf": [
437
+ {
438
+ "$ref": "#/$defs/SourceKind"
439
+ },
440
+ {
441
+ "type": "null"
442
+ }
443
+ ],
444
+ "default": null
445
+ },
446
+ "t_ms": {
447
+ "type": "number",
448
+ "format": "double"
449
+ },
450
+ "texture": {
451
+ "description": "The probe's number for the texture, which a later upload or `texture_deleted`\nrepeats. None from a probe that does not number textures.",
452
+ "type": [
453
+ "integer",
454
+ "null"
455
+ ],
456
+ "format": "uint32",
457
+ "default": null,
458
+ "minimum": 0
459
+ },
460
+ "type": {
461
+ "type": "string",
462
+ "const": "texture_uploaded"
463
+ },
464
+ "width": {
465
+ "type": "integer",
466
+ "format": "uint32",
467
+ "minimum": 0
468
+ }
469
+ },
470
+ "required": [
471
+ "type",
472
+ "width",
473
+ "height",
474
+ "bytes",
475
+ "t_ms"
476
+ ]
477
+ },
478
+ {
479
+ "description": "The game deleted a texture.",
480
+ "type": "object",
481
+ "properties": {
482
+ "t_ms": {
483
+ "type": "number",
484
+ "format": "double"
485
+ },
486
+ "texture": {
487
+ "type": "integer",
488
+ "format": "uint32",
489
+ "minimum": 0
490
+ },
491
+ "type": {
492
+ "type": "string",
493
+ "const": "texture_deleted"
494
+ }
495
+ },
496
+ "required": [
497
+ "type",
498
+ "texture",
499
+ "t_ms"
500
+ ]
501
+ },
502
+ {
503
+ "description": "A canvas got a rendering context.",
504
+ "type": "object",
505
+ "properties": {
506
+ "antialias": {
507
+ "type": [
508
+ "boolean",
509
+ "null"
510
+ ]
511
+ },
512
+ "canvas": {
513
+ "description": "The probe's number for the canvas, which its `canvas_resized` events repeat. None from\na probe that does not number canvases.",
514
+ "type": [
515
+ "integer",
516
+ "null"
517
+ ],
518
+ "format": "uint32",
519
+ "default": null,
520
+ "minimum": 0
521
+ },
522
+ "device_pixel_ratio": {
523
+ "type": "number",
524
+ "format": "double"
525
+ },
526
+ "height": {
527
+ "type": "integer",
528
+ "format": "uint32",
529
+ "minimum": 0
530
+ },
531
+ "kind": {
532
+ "$ref": "#/$defs/ContextKind"
533
+ },
534
+ "t_ms": {
535
+ "type": "number",
536
+ "format": "double"
537
+ },
538
+ "type": {
539
+ "type": "string",
540
+ "const": "context_created"
541
+ },
542
+ "width": {
543
+ "description": "The canvas's backing size in pixels when it got its context.",
544
+ "type": "integer",
545
+ "format": "uint32",
546
+ "minimum": 0
547
+ }
548
+ },
549
+ "required": [
550
+ "type",
551
+ "kind",
552
+ "width",
553
+ "height",
554
+ "device_pixel_ratio",
555
+ "t_ms"
556
+ ]
557
+ },
558
+ {
559
+ "description": "A canvas with a rendering context got a new backing size, as when Pixi sizes its canvas\nto the screen after it starts.",
560
+ "type": "object",
561
+ "properties": {
562
+ "canvas": {
563
+ "type": "integer",
564
+ "format": "uint32",
565
+ "minimum": 0
566
+ },
567
+ "height": {
568
+ "type": "integer",
569
+ "format": "uint32",
570
+ "minimum": 0
571
+ },
572
+ "t_ms": {
573
+ "type": "number",
574
+ "format": "double"
575
+ },
576
+ "type": {
577
+ "type": "string",
578
+ "const": "canvas_resized"
579
+ },
580
+ "width": {
581
+ "type": "integer",
582
+ "format": "uint32",
583
+ "minimum": 0
584
+ }
585
+ },
586
+ "required": [
587
+ "type",
588
+ "canvas",
589
+ "width",
590
+ "height",
591
+ "t_ms"
592
+ ]
593
+ },
594
+ {
595
+ "description": "A WebGL context was lost.",
596
+ "type": "object",
597
+ "properties": {
598
+ "t_ms": {
599
+ "type": "number",
600
+ "format": "double"
601
+ },
602
+ "type": {
603
+ "type": "string",
604
+ "const": "context_lost"
605
+ }
606
+ },
607
+ "required": [
608
+ "type",
609
+ "t_ms"
610
+ ]
611
+ },
612
+ {
613
+ "description": "Frame times since the last histogram, sent every `FRAME_TIMES_EVERY_MS`. `counts[i]`\ncounts frames that took at most `bucket_upper_ms[i]`, and more than the bucket before it.\nThe edges are `FRAME_TIME_BUCKETS_MS`.",
614
+ "type": "object",
615
+ "properties": {
616
+ "bucket_upper_ms": {
617
+ "type": "array",
618
+ "items": {
619
+ "type": "integer",
620
+ "format": "uint32",
621
+ "minimum": 0
622
+ }
623
+ },
624
+ "counts": {
625
+ "type": "array",
626
+ "items": {
627
+ "type": "integer",
628
+ "format": "uint32",
629
+ "minimum": 0
630
+ }
631
+ },
632
+ "t_ms": {
633
+ "type": "number",
634
+ "format": "double"
635
+ },
636
+ "type": {
637
+ "type": "string",
638
+ "const": "frame_times"
639
+ }
640
+ },
641
+ "required": [
642
+ "type",
643
+ "bucket_upper_ms",
644
+ "counts",
645
+ "t_ms"
646
+ ]
647
+ },
648
+ {
649
+ "description": "An optional game hook (Phase 2). Only the game knows these events.",
650
+ "type": "object",
651
+ "properties": {
652
+ "detail": {
653
+ "type": [
654
+ "string",
655
+ "null"
656
+ ]
657
+ },
658
+ "hook": {
659
+ "$ref": "#/$defs/GameHookKind"
660
+ },
661
+ "t_ms": {
662
+ "type": "number",
663
+ "format": "double"
664
+ },
665
+ "type": {
666
+ "type": "string",
667
+ "const": "game_hook"
668
+ }
669
+ },
670
+ "required": [
671
+ "type",
672
+ "hook",
673
+ "t_ms"
674
+ ]
675
+ }
676
+ ]
677
+ },
678
+ "RunMark": {
679
+ "description": "The steps of a run.",
680
+ "oneOf": [
681
+ {
682
+ "description": "The harness page started loading the game frame.",
683
+ "type": "string",
684
+ "const": "navigated"
685
+ },
686
+ {
687
+ "description": "The game frame went idle.",
688
+ "type": "string",
689
+ "const": "idle"
690
+ },
691
+ {
692
+ "description": "The harness made the game active, such as by sending `reels:active` `true`.",
693
+ "type": "string",
694
+ "const": "activated"
695
+ },
696
+ {
697
+ "description": "The harness made the game inactive.",
698
+ "type": "string",
699
+ "const": "deactivated"
700
+ },
701
+ {
702
+ "description": "The game frame committed a new document, as a script redirect does. Probe events after\nit are on the new document's clock.",
703
+ "type": "string",
704
+ "const": "frame_document"
705
+ }
706
+ ]
707
+ },
708
+ "SourceKind": {
709
+ "description": "What a texture upload with no source path held. Facts only: an allocation\nwith no pixels is often a render target, but the probe does not see what fills it.",
710
+ "oneOf": [
711
+ {
712
+ "description": "No pixels: `texStorage2D`, or `texImage2D` with null pixels.",
713
+ "type": "string",
714
+ "const": "empty"
715
+ },
716
+ {
717
+ "description": "A canvas the game drew, such as text.",
718
+ "type": "string",
719
+ "const": "canvas"
720
+ }
721
+ ]
722
+ }
723
+ }
724
+ }