@dyno-cloud/schema 0.0.0-stage → 0.1.3

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 (115) hide show
  1. package/json/budget.schema.json +239 -0
  2. package/json/catalogue.schema.json +2217 -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 +912 -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 +2140 -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/AssignedRole.ts +7 -0
  21. package/ts/AudioState.ts +6 -0
  22. package/ts/BrowserEngine.ts +6 -0
  23. package/ts/BudgetId.ts +6 -0
  24. package/ts/BudgetLimit.ts +8 -0
  25. package/ts/BudgetRef.ts +15 -0
  26. package/ts/BudgetVerdict.ts +22 -0
  27. package/ts/BuildLink.ts +6 -0
  28. package/ts/BuildManifest.ts +17 -0
  29. package/ts/CatalogueEntry.ts +7 -0
  30. package/ts/CatalogueResult.ts +22 -0
  31. package/ts/CheckResult.ts +16 -0
  32. package/ts/CompareDeterministic.ts +42 -0
  33. package/ts/CompareResult.ts +12 -0
  34. package/ts/CompareRun.ts +17 -0
  35. package/ts/ContextKind.ts +6 -0
  36. package/ts/Covers.ts +6 -0
  37. package/ts/Deterministic.ts +35 -0
  38. package/ts/DeviceClass.ts +6 -0
  39. package/ts/DeviceEntry.ts +25 -0
  40. package/ts/DeviceKind.ts +6 -0
  41. package/ts/DoctorCheck.ts +16 -0
  42. package/ts/DoctorCheckId.ts +6 -0
  43. package/ts/DoctorReport.ts +20 -0
  44. package/ts/DriverInfo.ts +10 -0
  45. package/ts/DriverMessage.ts +37 -0
  46. package/ts/Environment.ts +13 -0
  47. package/ts/EnvironmentBrowser.ts +23 -0
  48. package/ts/EnvironmentDevice.ts +27 -0
  49. package/ts/EnvironmentOs.ts +12 -0
  50. package/ts/Evidence.ts +11 -0
  51. package/ts/ExposureCheckpoint.ts +9 -0
  52. package/ts/ExposureSample.ts +15 -0
  53. package/ts/FileKind.ts +6 -0
  54. package/ts/Finding.ts +29 -0
  55. package/ts/Fix.ts +22 -0
  56. package/ts/FixAction.ts +7 -0
  57. package/ts/FrameState.ts +6 -0
  58. package/ts/GameHookKind.ts +6 -0
  59. package/ts/HostProfile.ts +47 -0
  60. package/ts/Inputs.ts +34 -0
  61. package/ts/Library.ts +6 -0
  62. package/ts/LibraryBucket.ts +6 -0
  63. package/ts/LiveFrame.ts +19 -0
  64. package/ts/Machine.ts +14 -0
  65. package/ts/ManifestFile.ts +12 -0
  66. package/ts/Measure.ts +50 -0
  67. package/ts/MeasureChange.ts +14 -0
  68. package/ts/MeasureEntry.ts +13 -0
  69. package/ts/MeasureId.ts +6 -0
  70. package/ts/MeasureItem.ts +15 -0
  71. package/ts/MeasureStatus.ts +6 -0
  72. package/ts/MeasureValue.ts +7 -0
  73. package/ts/MemorySample.ts +24 -0
  74. package/ts/MessageDirection.ts +6 -0
  75. package/ts/Method.ts +6 -0
  76. package/ts/OsName.ts +6 -0
  77. package/ts/ProbeEvent.ts +48 -0
  78. package/ts/ProcessMemory.ts +22 -0
  79. package/ts/ProcessRole.ts +6 -0
  80. package/ts/ProfileRef.ts +6 -0
  81. package/ts/Quantity.ts +7 -0
  82. package/ts/RelPath.ts +9 -0
  83. package/ts/Release.ts +12 -0
  84. package/ts/ResultRef.ts +15 -0
  85. package/ts/RuleId.ts +6 -0
  86. package/ts/RunCoverage.ts +8 -0
  87. package/ts/RunInfo.ts +56 -0
  88. package/ts/RunMark.ts +6 -0
  89. package/ts/RunRequest.ts +24 -0
  90. package/ts/Scenario.ts +6 -0
  91. package/ts/Scope.ts +12 -0
  92. package/ts/Severity.ts +6 -0
  93. package/ts/Shard.ts +17 -0
  94. package/ts/Source.ts +6 -0
  95. package/ts/SourceKind.ts +7 -0
  96. package/ts/Statistic.ts +7 -0
  97. package/ts/Status.ts +9 -0
  98. package/ts/Target.ts +15 -0
  99. package/ts/Tier.ts +9 -0
  100. package/ts/TierReport.ts +26 -0
  101. package/ts/Timeline.ts +21 -0
  102. package/ts/TimelineMark.ts +11 -0
  103. package/ts/TimelineMethod.ts +6 -0
  104. package/ts/TimelineProcess.ts +22 -0
  105. package/ts/ToolBuild.ts +14 -0
  106. package/ts/Uncertainty.ts +19 -0
  107. package/ts/UncertaintyKind.ts +6 -0
  108. package/ts/UncleanExit.ts +16 -0
  109. package/ts/Unit.ts +6 -0
  110. package/ts/Verdict.ts +6 -0
  111. package/ts/VerdictChange.ts +12 -0
  112. package/ts/Versions.ts +22 -0
  113. package/ts/Viewport.ts +6 -0
  114. package/ts/index.ts +97 -0
  115. package/README.md +0 -3
@@ -0,0 +1,161 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "RunRequest",
4
+ "description": "What dyno asks a driver to run.",
5
+ "type": "object",
6
+ "properties": {
7
+ "host_profile": {
8
+ "$ref": "#/$defs/HostProfile"
9
+ },
10
+ "idle_after_ms": {
11
+ "description": "The game frame is idle after this long with no new requests.",
12
+ "type": "integer",
13
+ "format": "uint32",
14
+ "minimum": 0
15
+ },
16
+ "launch_url": {
17
+ "description": "The full launch URL, query string included. It never goes into a result.",
18
+ "type": "string"
19
+ },
20
+ "protocol_version": {
21
+ "type": "integer",
22
+ "format": "uint32",
23
+ "minimum": 0
24
+ },
25
+ "scenario": {
26
+ "$ref": "#/$defs/Scenario"
27
+ },
28
+ "spins": {
29
+ "description": "Demo spins to play after load (Phase 2). Null for a load-and-idle run.",
30
+ "type": [
31
+ "integer",
32
+ "null"
33
+ ],
34
+ "format": "uint32",
35
+ "minimum": 0
36
+ },
37
+ "timeout_ms": {
38
+ "description": "The driver stops and sends an error after this long.",
39
+ "type": "integer",
40
+ "format": "uint32",
41
+ "minimum": 0
42
+ }
43
+ },
44
+ "required": [
45
+ "protocol_version",
46
+ "launch_url",
47
+ "host_profile",
48
+ "scenario",
49
+ "idle_after_ms",
50
+ "timeout_ms"
51
+ ],
52
+ "$defs": {
53
+ "HostProfile": {
54
+ "description": "How a host page embeds a game, and the device facts the static formulas use. Reels is the\nfirst host profile. It holds no assumed cost: the device run measures those.",
55
+ "type": "object",
56
+ "properties": {
57
+ "active_message": {
58
+ "description": "The message the host sends when the game becomes active, such as `reels:active`.",
59
+ "type": "string"
60
+ },
61
+ "device_scale_factor": {
62
+ "description": "The device pixel ratio the run forces. The reference iPhone's is 3.",
63
+ "type": "integer",
64
+ "format": "uint32",
65
+ "minimum": 0
66
+ },
67
+ "name": {
68
+ "type": "string"
69
+ },
70
+ "pcm_low_rate_hz": {
71
+ "description": "The lower context rate that fixes suggest. The measure ids name 24 kHz, so a change needs\nnew ids.",
72
+ "type": "integer",
73
+ "format": "uint32",
74
+ "minimum": 0
75
+ },
76
+ "pcm_rate_hz": {
77
+ "description": "The audio context's sample rate on the reference iPhone. Decoded audio is held at this\nrate. The measure ids name 48 kHz, so a change needs new ids.",
78
+ "type": "integer",
79
+ "format": "uint32",
80
+ "minimum": 0
81
+ },
82
+ "ready_message": {
83
+ "description": "The message the game sends when it is ready, such as `reels:ready`.",
84
+ "type": "string"
85
+ },
86
+ "ready_within_ms": {
87
+ "description": "The contract's limit on time to the ready message.",
88
+ "type": "integer",
89
+ "format": "uint32",
90
+ "minimum": 0
91
+ },
92
+ "version": {
93
+ "description": "Bumps when any value below changes.",
94
+ "type": "integer",
95
+ "format": "uint32",
96
+ "minimum": 0
97
+ },
98
+ "viewport": {
99
+ "description": "The game frame's size in CSS pixels.",
100
+ "$ref": "#/$defs/Viewport"
101
+ },
102
+ "webgpu": {
103
+ "description": "Whether the reference browser has WebGPU on. When it is off, a game that asks for WebGPU\ngets WebGL.",
104
+ "type": "boolean"
105
+ }
106
+ },
107
+ "required": [
108
+ "name",
109
+ "version",
110
+ "ready_message",
111
+ "active_message",
112
+ "ready_within_ms",
113
+ "viewport",
114
+ "device_scale_factor",
115
+ "webgpu",
116
+ "pcm_rate_hz",
117
+ "pcm_low_rate_hz"
118
+ ]
119
+ },
120
+ "Scenario": {
121
+ "description": "The harness scenario of a browser run.",
122
+ "oneOf": [
123
+ {
124
+ "description": "The game alone in a fresh harness page (Phase 1).",
125
+ "type": "string",
126
+ "const": "alone"
127
+ },
128
+ {
129
+ "description": "The harness page after 10 earlier games (Phase 2).",
130
+ "type": "string",
131
+ "const": "aged"
132
+ },
133
+ {
134
+ "description": "One game active while the next one preloads (Phase 2).",
135
+ "type": "string",
136
+ "const": "overlap"
137
+ }
138
+ ]
139
+ },
140
+ "Viewport": {
141
+ "description": "A size in CSS pixels.",
142
+ "type": "object",
143
+ "properties": {
144
+ "height": {
145
+ "type": "integer",
146
+ "format": "uint32",
147
+ "minimum": 0
148
+ },
149
+ "width": {
150
+ "type": "integer",
151
+ "format": "uint32",
152
+ "minimum": 0
153
+ }
154
+ },
155
+ "required": [
156
+ "width",
157
+ "height"
158
+ ]
159
+ }
160
+ }
161
+ }
@@ -0,0 +1,99 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "UncleanExit",
4
+ "description": "An observed unclean exit: the last page died with game frames live. Never sampled.",
5
+ "type": "object",
6
+ "properties": {
7
+ "frames": {
8
+ "description": "The game frames that were live when the page died.",
9
+ "type": "array",
10
+ "items": {
11
+ "$ref": "#/$defs/LiveFrame"
12
+ }
13
+ },
14
+ "host_profile": {
15
+ "description": "The host profile, such as reels version 0.",
16
+ "$ref": "#/$defs/ProfileRef"
17
+ },
18
+ "schema_version": {
19
+ "type": "integer",
20
+ "format": "uint32",
21
+ "minimum": 0
22
+ }
23
+ },
24
+ "required": [
25
+ "schema_version",
26
+ "host_profile",
27
+ "frames"
28
+ ],
29
+ "$defs": {
30
+ "FrameState": {
31
+ "description": "Whether a game frame is the one on screen. Reels calls an inactive frame preloaded.",
32
+ "oneOf": [
33
+ {
34
+ "description": "On screen, after the host's active message.",
35
+ "type": "string",
36
+ "const": "active"
37
+ },
38
+ {
39
+ "description": "Mounted but not on screen.",
40
+ "type": "string",
41
+ "const": "inactive"
42
+ }
43
+ ]
44
+ },
45
+ "LiveFrame": {
46
+ "description": "A game frame that was live when the page died.",
47
+ "type": "object",
48
+ "properties": {
49
+ "build_version": {
50
+ "description": "From the frame URL, such as \"v12\" from `/v12/`. Null when the URL has none.",
51
+ "type": [
52
+ "string",
53
+ "null"
54
+ ]
55
+ },
56
+ "frame_state": {
57
+ "$ref": "#/$defs/FrameState"
58
+ },
59
+ "game_id": {
60
+ "type": "string"
61
+ },
62
+ "mount_age_ms": {
63
+ "description": "Time since the frame was mounted.",
64
+ "type": "integer",
65
+ "format": "uint64",
66
+ "minimum": 0
67
+ },
68
+ "ready_seen": {
69
+ "description": "Whether the host saw the game's ready message.",
70
+ "type": "boolean"
71
+ }
72
+ },
73
+ "required": [
74
+ "game_id",
75
+ "frame_state",
76
+ "mount_age_ms",
77
+ "ready_seen"
78
+ ]
79
+ },
80
+ "ProfileRef": {
81
+ "description": "Which host profile, and which version of it, a result used.",
82
+ "type": "object",
83
+ "properties": {
84
+ "name": {
85
+ "type": "string"
86
+ },
87
+ "version": {
88
+ "type": "integer",
89
+ "format": "uint32",
90
+ "minimum": 0
91
+ }
92
+ },
93
+ "required": [
94
+ "name",
95
+ "version"
96
+ ]
97
+ }
98
+ }
99
+ }
package/package.json CHANGED
@@ -1,6 +1,24 @@
1
1
  {
2
2
  "name": "@dyno-cloud/schema",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.3",
4
+ "description": "TypeScript types and JSON Schema for the JSON that dyno writes: check results, compare results, the runner protocol and the probe events.",
5
+ "license": "MIT OR Apache-2.0",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/dyno-labs/dyno.git",
9
+ "directory": "packages/schema"
10
+ },
11
+ "files": [
12
+ "json/*.json",
13
+ "ts/*.ts"
14
+ ],
15
+ "type": "module",
16
+ "sideEffects": false,
17
+ "types": "./ts/index.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./ts/index.ts"
21
+ },
22
+ "./json/*": "./json/*"
23
+ }
24
+ }
@@ -0,0 +1,8 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+ import type { AssetChangeKind } from "./AssetChangeKind";
3
+ import type { RelPath } from "./RelPath";
4
+
5
+ /**
6
+ * One file that differs between the two build manifests.
7
+ */
8
+ export type AssetChange = { path: RelPath, change: AssetChangeKind, base_bytes: number | null, head_bytes: number | null, };
@@ -0,0 +1,6 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+
3
+ /**
4
+ * How a file changed.
5
+ */
6
+ export type AssetChangeKind = "added" | "removed" | "changed";
@@ -0,0 +1,7 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+ import type { ProcessRole } from "./ProcessRole";
3
+
4
+ /**
5
+ * One process's part in a `roles` message.
6
+ */
7
+ export type AssignedRole = { pid: number, role: ProcessRole, };
@@ -0,0 +1,6 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+
3
+ /**
4
+ * An audio context's state.
5
+ */
6
+ export type AudioState = "running" | "suspended" | "closed";
@@ -0,0 +1,6 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+
3
+ /**
4
+ * A browser engine.
5
+ */
6
+ export type BrowserEngine = "blink" | "webkit" | "gecko";
package/ts/BudgetId.ts ADDED
@@ -0,0 +1,6 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+
3
+ /**
4
+ * Every budget a budget file can set. Each id is the key path in the file.
5
+ */
6
+ export type BudgetId = "audio.decoded_mb" | "audio.stereo_saving_mb" | "audio.silence_share_bp" | "audio.silence_saving_mb" | "textures.decoded_mb" | "render.antialias" | "render.resolution_uncapped" | "files.duplicate";
@@ -0,0 +1,8 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+ import type { Severity } from "./Severity";
3
+
4
+ /**
5
+ * A budget's limit as a verdict or rule reads it: sizes in bytes, shares in basis points, and
6
+ * flags as a severity.
7
+ */
8
+ export type BudgetLimit = { "kind": "bytes", warn_above: number | null, fail_above: number | null, } | { "kind": "flag", when_on: Severity, } | { "kind": "basis_points", warn_above: number | null, fail_above: number | null, };
@@ -0,0 +1,15 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+
3
+ /**
4
+ * Which budget file a result used.
5
+ */
6
+ export type BudgetRef = {
7
+ /**
8
+ * The file's `name`, if it has one.
9
+ */
10
+ name: string | null,
11
+ /**
12
+ * Lowercase hex SHA-256 of the parsed budgets as canonical JSON. The same budgets in TOML
13
+ * and JSON give the same hash, and comments do not change it.
14
+ */
15
+ sha256: string, };
@@ -0,0 +1,22 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+ import type { BudgetId } from "./BudgetId";
3
+ import type { BudgetLimit } from "./BudgetLimit";
4
+ import type { MeasureId } from "./MeasureId";
5
+ import type { MeasureValue } from "./MeasureValue";
6
+ import type { Verdict } from "./Verdict";
7
+
8
+ /**
9
+ * The verdict of one budget. Only budgets that `dyno-score` checks get one, never a rule's
10
+ * threshold.
11
+ */
12
+ export type BudgetVerdict = { budget: BudgetId, measure: MeasureId,
13
+ /**
14
+ * A partial value, one whose scope has a `not_covered` entry, is a floor. It gives a verdict
15
+ * only when the full value could not give a worse one. Otherwise the verdict is incomplete.
16
+ */
17
+ verdict: Verdict,
18
+ /**
19
+ * The measure's value. Null when it has no usable value: none, a status other than measured
20
+ * or estimated, or a bad number.
21
+ */
22
+ actual: MeasureValue | null, limit: BudgetLimit, };
@@ -0,0 +1,6 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+
3
+ /**
4
+ * How a run's evidence ties to the build it names.
5
+ */
6
+ export type BuildLink = "none" | "scanned" | "served" | "asserted";
@@ -0,0 +1,17 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+ import type { ManifestFile } from "./ManifestFile";
3
+
4
+ /**
5
+ * Every supplied file of one build. `compare` diffs two manifests to find suspect assets.
6
+ */
7
+ export type BuildManifest = {
8
+ /**
9
+ * Lowercase hex SHA-256 over every file's path and SHA-256, sorted by path, so a rename
10
+ * changes it. It is the join key for lab and field rows, and does not cover external URLs.
11
+ * Null until the inventory is implemented. docs/design/static-scan.md gives the exact bytes.
12
+ */
13
+ build_id: string | null,
14
+ /**
15
+ * Sorted by path.
16
+ */
17
+ files: Array<ManifestFile>, };
@@ -0,0 +1,7 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+ import type { CheckResult } from "./CheckResult";
3
+
4
+ /**
5
+ * One game's result in a catalogue run. Each result keeps its own hash.
6
+ */
7
+ export type CatalogueEntry = { id: string, result: CheckResult, };
@@ -0,0 +1,22 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+ import type { CatalogueEntry } from "./CatalogueEntry";
3
+ import type { Shard } from "./Shard";
4
+ import type { Status } from "./Status";
5
+
6
+ /**
7
+ * The output of a catalogue run.
8
+ */
9
+ export type CatalogueResult = { schema_version: number,
10
+ /**
11
+ * Null when the run covered every game.
12
+ */
13
+ shard: Shard | null,
14
+ /**
15
+ * The worst status of any game, by the precedence on `Status`. Incomplete when the
16
+ * selection has no games, because an empty run checked nothing.
17
+ */
18
+ status: Status,
19
+ /**
20
+ * Sorted by game id.
21
+ */
22
+ games: Array<CatalogueEntry>, };
@@ -0,0 +1,16 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+ import type { Deterministic } from "./Deterministic";
3
+ import type { RunInfo } from "./RunInfo";
4
+
5
+ /**
6
+ * The output of `dyno check` for one target.
7
+ */
8
+ export type CheckResult = {
9
+ /**
10
+ * Read this first. It bumps only on a breaking change.
11
+ */
12
+ schema_version: number,
13
+ /**
14
+ * Lowercase hex SHA-256 of the RFC 8785 canonical JSON of `deterministic`.
15
+ */
16
+ result_hash: string, deterministic: Deterministic, run: RunInfo, };
@@ -0,0 +1,42 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+ import type { AssetChange } from "./AssetChange";
3
+ import type { BudgetRef } from "./BudgetRef";
4
+ import type { MeasureChange } from "./MeasureChange";
5
+ import type { ResultRef } from "./ResultRef";
6
+ import type { Status } from "./Status";
7
+ import type { VerdictChange } from "./VerdictChange";
8
+
9
+ /**
10
+ * Everything the same two results, tool version and budget file give on any machine.
11
+ */
12
+ export type CompareDeterministic = {
13
+ /**
14
+ * The dyno version, such as "0.1.0".
15
+ */
16
+ tool: string, scoring: number,
17
+ /**
18
+ * The budget file applied to both sides. Null to keep each result's own verdicts.
19
+ */
20
+ budget: BudgetRef | null, base: ResultRef, head: ResultRef,
21
+ /**
22
+ * Fail when a budget verdict got worse. Incomplete when either side is incomplete. Invalid
23
+ * when either side's hash does not match its content.
24
+ */
25
+ status: Status,
26
+ /**
27
+ * Why the status is incomplete or invalid. Null otherwise.
28
+ */
29
+ reason: string | null,
30
+ /**
31
+ * Every deterministic measure that moved. Sorted by id, then by canonical JSON.
32
+ */
33
+ measures: Array<MeasureChange>,
34
+ /**
35
+ * Every budget verdict that changed. Sorted by budget id, then by canonical JSON.
36
+ */
37
+ verdicts: Array<VerdictChange>,
38
+ /**
39
+ * Files that differ between the two build manifests. Sorted by path, then by canonical
40
+ * JSON.
41
+ */
42
+ suspect_assets: Array<AssetChange>, };
@@ -0,0 +1,12 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+ import type { CompareDeterministic } from "./CompareDeterministic";
3
+ import type { CompareRun } from "./CompareRun";
4
+
5
+ /**
6
+ * The output of `dyno compare`.
7
+ */
8
+ export type CompareResult = { schema_version: number,
9
+ /**
10
+ * Lowercase hex SHA-256 of the RFC 8785 canonical JSON of `deterministic`.
11
+ */
12
+ result_hash: string, deterministic: CompareDeterministic, run: CompareRun, };
@@ -0,0 +1,17 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+ import type { Machine } from "./Machine";
3
+ import type { Release } from "./Release";
4
+ import type { ToolBuild } from "./ToolBuild";
5
+
6
+ /**
7
+ * What differs between machines and runs. The hash excludes it.
8
+ */
9
+ export type CompareRun = {
10
+ /**
11
+ * RFC 3339 UTC time the compare started.
12
+ */
13
+ started_at: string, duration_ms: number, machine: Machine, tool_build: ToolBuild,
14
+ /**
15
+ * The release labels of each side, from its own run part.
16
+ */
17
+ base_release: Release, head_release: Release, };
@@ -0,0 +1,6 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+
3
+ /**
4
+ * A canvas rendering context's kind.
5
+ */
6
+ export type ContextKind = "webgl" | "webgl2" | "webgpu" | "canvas2d";
package/ts/Covers.ts ADDED
@@ -0,0 +1,6 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+
3
+ /**
4
+ * The set of things a value covers.
5
+ */
6
+ export type Covers = "supplied_files" | "load_to_idle" | "demo_spins" | "fresh_device_runs" | "model_inputs";
@@ -0,0 +1,35 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+ import type { BudgetVerdict } from "./BudgetVerdict";
3
+ import type { BuildManifest } from "./BuildManifest";
4
+ import type { Finding } from "./Finding";
5
+ import type { Inputs } from "./Inputs";
6
+ import type { Measure } from "./Measure";
7
+ import type { RunCoverage } from "./RunCoverage";
8
+ import type { Status } from "./Status";
9
+ import type { Versions } from "./Versions";
10
+
11
+ /**
12
+ * Everything the same build, tool version and budget file give on any machine.
13
+ */
14
+ export type Deterministic = { versions: Versions, inputs: Inputs,
15
+ /**
16
+ * The build's files and id. Null when the check had no build folder, or the inventory has
17
+ * not listed it yet.
18
+ */
19
+ build: BuildManifest | null,
20
+ /**
21
+ * The overall status. The exit code comes from it alone.
22
+ */
23
+ status: Status, run_coverage: RunCoverage,
24
+ /**
25
+ * Static measures. Sorted by id.
26
+ */
27
+ measures: Array<Measure>,
28
+ /**
29
+ * One verdict per budget the budget file sets. Sorted by budget id.
30
+ */
31
+ verdicts: Array<BudgetVerdict>,
32
+ /**
33
+ * Static rule findings. Sorted by rule id, then by canonical JSON.
34
+ */
35
+ findings: Array<Finding>, };
@@ -0,0 +1,6 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+
3
+ /**
4
+ * The phone class a tier is for.
5
+ */
6
+ export type DeviceClass = "reference_iphone";
@@ -0,0 +1,25 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+ import type { DeviceKind } from "./DeviceKind";
3
+ import type { OsName } from "./OsName";
4
+
5
+ /**
6
+ * One device in the catalogue.
7
+ */
8
+ export type DeviceEntry = {
9
+ /**
10
+ * The slug of the name, such as "iphone-14-pro-max".
11
+ */
12
+ key: string,
13
+ /**
14
+ * The model name, such as "iPhone 14 Pro Max".
15
+ */
16
+ name: string, vendor: string, kind: DeviceKind, os_family: OsName,
17
+ /**
18
+ * The year the model came out.
19
+ */
20
+ year: number,
21
+ /**
22
+ * Apple's model identifiers for it, such as "iPhone15,3": what the phone gives as its
23
+ * `ProductType`.
24
+ */
25
+ identifiers: Array<string>, };
@@ -0,0 +1,6 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+
3
+ /**
4
+ * A kind of device.
5
+ */
6
+ export type DeviceKind = "phone" | "tablet" | "desktop";
@@ -0,0 +1,16 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+ import type { DoctorCheckId } from "./DoctorCheckId";
3
+ import type { Verdict } from "./Verdict";
4
+
5
+ /**
6
+ * One doctor check.
7
+ */
8
+ export type DoctorCheck = { id: DoctorCheckId, verdict: Verdict, phase: number,
9
+ /**
10
+ * What the check found, such as the Xcode version. Null when it found nothing.
11
+ */
12
+ detail: string | null,
13
+ /**
14
+ * Why the verdict is incomplete. Null otherwise.
15
+ */
16
+ reason: string | null, };
@@ -0,0 +1,6 @@
1
+ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
2
+
3
+ /**
4
+ * The things `doctor` checks. Declared in alphabetical order, so checks sort by name.
5
+ */
6
+ export type DoctorCheckId = "device_connection" | "device_trust" | "xcode";