@crvouga/atlas 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (444) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/README.md +191 -611
  3. package/dist/bun/src/driver.d.ts +41 -7
  4. package/dist/bun/src/driver.js +47 -6
  5. package/dist/bun/src/index.d.ts +8 -0
  6. package/dist/bun/src/index.js +8 -0
  7. package/dist/core/src/cli.d.ts +14 -1
  8. package/dist/core/src/cli.js +35 -1
  9. package/dist/core/src/config.d.ts +77 -4
  10. package/dist/core/src/config.js +110 -17
  11. package/dist/core/src/events/cloudevents.d.ts +54 -9
  12. package/dist/core/src/events/cloudevents.js +60 -9
  13. package/dist/core/src/graph.d.ts +21 -0
  14. package/dist/core/src/graph.js +26 -0
  15. package/dist/core/src/index.d.ts +11 -0
  16. package/dist/core/src/index.js +11 -0
  17. package/dist/core/src/lint.d.ts +30 -0
  18. package/dist/core/src/lint.js +13 -0
  19. package/dist/core/src/plan.d.ts +39 -1
  20. package/dist/core/src/plan.js +28 -1
  21. package/dist/core/src/privacy.d.ts +29 -2
  22. package/dist/core/src/privacy.js +19 -2
  23. package/dist/core/src/report/formats.d.ts +34 -4
  24. package/dist/core/src/report/formats.js +24 -4
  25. package/dist/core/src/report/markdown.d.ts +15 -0
  26. package/dist/core/src/report/markdown.js +8 -0
  27. package/dist/core/src/run/clients.d.ts +44 -5
  28. package/dist/core/src/run/clients.js +46 -2
  29. package/dist/core/src/run/execute.d.ts +75 -16
  30. package/dist/core/src/run/execute.js +71 -18
  31. package/dist/core/src/run/frames.d.ts +13 -4
  32. package/dist/core/src/run/frames.js +19 -4
  33. package/dist/core/src/run/http.d.ts +34 -1
  34. package/dist/core/src/run/http.js +14 -1
  35. package/dist/core/src/run/types.d.ts +76 -3
  36. package/dist/core/src/run/types.js +19 -3
  37. package/dist/core/src/signals.d.ts +49 -5
  38. package/dist/core/src/signals.js +22 -5
  39. package/dist/core/src/spec/compose.d.ts +23 -1
  40. package/dist/core/src/spec/compose.js +10 -1
  41. package/dist/core/src/spec/index.d.ts +9 -1
  42. package/dist/core/src/spec/index.js +9 -1
  43. package/dist/core/src/spec/load.d.ts +22 -1
  44. package/dist/core/src/spec/load.js +31 -1
  45. package/dist/core/src/spec/parse.d.ts +16 -2
  46. package/dist/core/src/spec/parse.js +25 -2
  47. package/dist/core/src/spec/scxml.d.ts +25 -4
  48. package/dist/core/src/spec/scxml.js +36 -4
  49. package/dist/core/src/spec/types.d.ts +52 -1
  50. package/dist/core/src/spec/types.js +24 -0
  51. package/dist/detox/src/index.d.ts +54 -11
  52. package/dist/detox/src/index.js +45 -7
  53. package/dist/playwright/src/driver.d.ts +39 -3
  54. package/dist/playwright/src/driver.js +27 -3
  55. package/dist/playwright/src/index.d.ts +10 -0
  56. package/dist/playwright/src/index.js +10 -0
  57. package/dist/playwright/src/media.d.ts +50 -4
  58. package/dist/playwright/src/media.js +55 -4
  59. package/dist/playwright/src/signals.d.ts +44 -5
  60. package/dist/playwright/src/signals.js +29 -5
  61. package/dist/reports/src/attachment-files.d.ts +44 -0
  62. package/dist/reports/src/attachment-files.js +121 -0
  63. package/dist/reports/src/attachment-response.d.ts +31 -0
  64. package/dist/reports/src/attachment-response.js +55 -0
  65. package/dist/reports/src/aws-credentials.d.ts +48 -0
  66. package/dist/reports/src/aws-credentials.js +221 -0
  67. package/dist/reports/src/browser-navigation.d.ts +14 -0
  68. package/dist/reports/src/browser-navigation.js +7 -0
  69. package/dist/reports/src/bundle.d.ts +34 -2
  70. package/dist/reports/src/bundle.js +38 -2
  71. package/dist/reports/src/catalog.d.ts +34 -3
  72. package/dist/reports/src/catalog.js +17 -3
  73. package/dist/reports/src/cli-stores.d.ts +36 -0
  74. package/dist/reports/src/cli-stores.js +73 -0
  75. package/dist/reports/src/clock.d.ts +7 -2
  76. package/dist/reports/src/clock.js +5 -2
  77. package/dist/reports/src/completion-order.d.ts +18 -5
  78. package/dist/reports/src/completion-order.js +18 -5
  79. package/dist/reports/src/compose.d.ts +80 -0
  80. package/dist/reports/src/compose.js +117 -0
  81. package/dist/reports/src/copy-store.d.ts +29 -0
  82. package/dist/reports/src/copy-store.js +52 -0
  83. package/dist/reports/src/directory-outline.d.ts +38 -0
  84. package/dist/reports/src/directory-outline.js +103 -0
  85. package/dist/reports/src/directory-store.d.ts +20 -0
  86. package/dist/reports/src/directory-store.js +166 -0
  87. package/dist/reports/src/doctor.d.ts +29 -0
  88. package/dist/reports/src/doctor.js +85 -0
  89. package/dist/reports/src/effective-delta.d.ts +34 -0
  90. package/dist/reports/src/effective-delta.js +25 -0
  91. package/dist/reports/src/evidence-detail.d.ts +64 -0
  92. package/dist/reports/src/evidence-detail.js +92 -0
  93. package/dist/reports/src/evidence-live.d.ts +35 -5
  94. package/dist/reports/src/evidence-live.js +18 -2
  95. package/dist/reports/src/evidence-types.d.ts +68 -1
  96. package/dist/reports/src/evidence-types.js +5 -1
  97. package/dist/reports/src/evidence-view.d.ts +43 -4
  98. package/dist/reports/src/evidence-view.js +13 -2
  99. package/dist/reports/src/explorer-types.d.ts +40 -3
  100. package/dist/reports/src/explorer-types.js +8 -0
  101. package/dist/reports/src/explorer-versions.d.ts +9 -1
  102. package/dist/reports/src/explorer-versions.js +18 -1
  103. package/dist/reports/src/export-evidence.d.ts +16 -1
  104. package/dist/reports/src/export-evidence.js +52 -1
  105. package/dist/reports/src/fetcher.d.ts +27 -3
  106. package/dist/reports/src/fetcher.js +11 -3
  107. package/dist/reports/src/format-date.d.ts +6 -0
  108. package/dist/reports/src/format-date.js +6 -0
  109. package/dist/reports/src/format.d.ts +16 -0
  110. package/dist/reports/src/format.js +10 -0
  111. package/dist/reports/src/frames.d.ts +36 -3
  112. package/dist/reports/src/frames.js +22 -3
  113. package/dist/reports/src/hash.d.ts +18 -0
  114. package/dist/reports/src/hash.js +13 -0
  115. package/dist/reports/src/host.d.ts +29 -0
  116. package/dist/reports/src/host.js +64 -0
  117. package/dist/reports/src/html-frame.d.ts +5 -6
  118. package/dist/reports/src/html-frame.js +12 -1
  119. package/dist/reports/src/http-store.d.ts +56 -0
  120. package/dist/reports/src/http-store.js +148 -0
  121. package/dist/reports/src/http.d.ts +7 -0
  122. package/dist/reports/src/http.js +6 -0
  123. package/dist/reports/src/ingest.d.ts +54 -0
  124. package/dist/reports/src/ingest.js +210 -0
  125. package/dist/reports/src/init.d.ts +40 -0
  126. package/dist/reports/src/init.js +369 -0
  127. package/dist/reports/src/junit.d.ts +33 -6
  128. package/dist/reports/src/junit.js +87 -21
  129. package/dist/reports/src/keyboard.d.ts +20 -0
  130. package/dist/reports/src/keyboard.js +11 -0
  131. package/dist/reports/src/keys.d.ts +21 -3
  132. package/dist/reports/src/keys.js +21 -3
  133. package/dist/reports/src/layer-axes.d.ts +35 -5
  134. package/dist/reports/src/layer-axes.js +25 -5
  135. package/dist/reports/src/layer-catalog.d.ts +28 -1
  136. package/dist/reports/src/layer-catalog.js +18 -1
  137. package/dist/reports/src/layer-merge.d.ts +98 -9
  138. package/dist/reports/src/layer-merge.js +147 -31
  139. package/dist/reports/src/layer-source.d.ts +18 -0
  140. package/dist/reports/src/layer-source.js +11 -0
  141. package/dist/reports/src/layer-store.d.ts +42 -0
  142. package/dist/reports/src/layer-store.js +63 -5
  143. package/dist/reports/src/layer-types.d.ts +32 -1
  144. package/dist/reports/src/layers-route.d.ts +47 -4
  145. package/dist/reports/src/layers-route.js +86 -7
  146. package/dist/reports/src/live-reporter.d.ts +34 -0
  147. package/dist/reports/src/live-reporter.js +122 -0
  148. package/dist/reports/src/media-types.d.ts +11 -0
  149. package/dist/reports/src/media-types.js +22 -0
  150. package/dist/reports/src/namespace-guard.d.ts +10 -1
  151. package/dist/reports/src/namespace-guard.js +10 -1
  152. package/dist/reports/src/navigation.d.ts +12 -0
  153. package/dist/reports/src/navigation.js +7 -0
  154. package/dist/reports/src/object-io.d.ts +11 -4
  155. package/dist/reports/src/object-io.js +4 -4
  156. package/dist/reports/src/object-store-conformance.d.ts +27 -0
  157. package/dist/reports/src/object-store-conformance.js +87 -0
  158. package/dist/reports/src/object-store.d.ts +33 -24
  159. package/dist/reports/src/object-store.js +17 -24
  160. package/dist/reports/src/parse-with.d.ts +16 -0
  161. package/dist/reports/src/parse-with.js +14 -0
  162. package/dist/reports/src/performance-part.d.ts +25 -1
  163. package/dist/reports/src/performance-part.js +15 -1
  164. package/dist/reports/src/performance.d.ts +22 -2
  165. package/dist/reports/src/performance.js +12 -2
  166. package/dist/reports/src/persist.d.ts +12 -3
  167. package/dist/reports/src/persist.js +12 -3
  168. package/dist/reports/src/phone.d.ts +18 -1
  169. package/dist/reports/src/phone.js +18 -1
  170. package/dist/reports/src/protocol.d.ts +26 -4
  171. package/dist/reports/src/protocol.js +15 -4
  172. package/dist/reports/src/publication.d.ts +21 -1
  173. package/dist/reports/src/publication.js +21 -1
  174. package/dist/reports/src/publish-checks.d.ts +35 -0
  175. package/dist/reports/src/publish-checks.js +122 -0
  176. package/dist/reports/src/publish.d.ts +42 -9
  177. package/dist/reports/src/publish.js +36 -7
  178. package/dist/reports/src/read.d.ts +46 -16
  179. package/dist/reports/src/read.js +38 -14
  180. package/dist/reports/src/recording-bundle.d.ts +13 -2
  181. package/dist/reports/src/recording-bundle.js +4 -2
  182. package/dist/reports/src/recording-keys.d.ts +15 -1
  183. package/dist/reports/src/recording-keys.js +15 -1
  184. package/dist/reports/src/remote-report.d.ts +28 -7
  185. package/dist/reports/src/remote-report.js +15 -7
  186. package/dist/reports/src/report-cli.d.ts +51 -0
  187. package/dist/reports/src/report-cli.js +486 -0
  188. package/dist/reports/src/report-index.d.ts +99 -0
  189. package/dist/reports/src/report-index.js +337 -0
  190. package/dist/reports/src/report-loader.d.ts +10 -0
  191. package/dist/reports/src/report-loader.js +6 -0
  192. package/dist/reports/src/report-parts.d.ts +29 -3
  193. package/dist/reports/src/report-parts.js +37 -3
  194. package/dist/reports/src/report-status.d.ts +48 -0
  195. package/dist/reports/src/report-status.js +156 -0
  196. package/dist/reports/src/report-types.d.ts +73 -0
  197. package/dist/reports/src/report-types.js +3 -0
  198. package/dist/reports/src/reporter.d.ts +67 -0
  199. package/dist/reports/src/reporter.js +128 -0
  200. package/dist/reports/src/reports-explorer-route.d.ts +541 -0
  201. package/dist/reports/src/reports-explorer-route.js +11 -0
  202. package/dist/reports/src/reports-list-route.d.ts +9 -0
  203. package/dist/reports/src/reports-list-route.js +9 -0
  204. package/dist/reports/src/reports-route.d.ts +561 -22
  205. package/dist/reports/src/reports-route.js +11 -3
  206. package/dist/reports/src/reports-store.d.ts +19 -2
  207. package/dist/reports/src/reports-store.js +10 -2
  208. package/dist/reports/src/resilient-cache.d.ts +14 -1
  209. package/dist/reports/src/resilient-cache.js +8 -1
  210. package/dist/reports/src/retention.d.ts +17 -1
  211. package/dist/reports/src/retention.js +5 -1
  212. package/dist/reports/src/run-bundle.d.ts +63 -0
  213. package/dist/reports/src/run-bundle.js +159 -0
  214. package/dist/reports/src/s3-store.d.ts +79 -0
  215. package/dist/reports/src/s3-store.js +295 -0
  216. package/dist/reports/src/scenario.d.ts +14 -4
  217. package/dist/reports/src/scenario.js +5 -4
  218. package/dist/reports/src/sigv4.d.ts +72 -0
  219. package/dist/reports/src/sigv4.js +96 -0
  220. package/dist/reports/src/snapshot-bundle.d.ts +24 -1
  221. package/dist/reports/src/snapshot-bundle.js +27 -2
  222. package/dist/reports/src/snapshot-surface.d.ts +20 -9
  223. package/dist/reports/src/snapshot-surface.js +32 -19
  224. package/dist/reports/src/source-content.d.ts +23 -0
  225. package/dist/reports/src/source-content.js +30 -1
  226. package/dist/reports/src/source-entries.d.ts +13 -0
  227. package/dist/reports/src/source-entries.js +6 -0
  228. package/dist/reports/src/source-part.d.ts +15 -0
  229. package/dist/reports/src/source-part.js +8 -0
  230. package/dist/reports/src/source-reader.d.ts +11 -0
  231. package/dist/reports/src/source-reader.js +5 -0
  232. package/dist/reports/src/spec-evidence.d.ts +12 -2
  233. package/dist/reports/src/spec-evidence.js +6 -2
  234. package/dist/reports/src/spec-inventory.d.ts +15 -1
  235. package/dist/reports/src/spec-inventory.js +22 -1
  236. package/dist/reports/src/spec-link.d.ts +28 -0
  237. package/dist/reports/src/spec-link.js +70 -0
  238. package/dist/reports/src/spec-set.d.ts +63 -0
  239. package/dist/reports/src/spec-set.js +177 -0
  240. package/dist/reports/src/status.d.ts +10 -0
  241. package/dist/reports/src/status.js +5 -0
  242. package/dist/reports/src/store-prefix.d.ts +28 -0
  243. package/dist/reports/src/store-prefix.js +22 -0
  244. package/dist/reports/src/store-url.d.ts +89 -0
  245. package/dist/reports/src/store-url.js +160 -0
  246. package/dist/reports/src/test-catalog-entity.d.ts +11 -0
  247. package/dist/reports/src/test-catalog-entity.js +6 -0
  248. package/dist/reports/src/types.d.ts +6 -1
  249. package/dist/reports/src/use-report-nav.d.ts +35 -0
  250. package/dist/reports/src/use-report-nav.js +12 -0
  251. package/dist/runners/src/codecept.d.ts +14 -0
  252. package/dist/runners/src/codecept.js +16 -0
  253. package/dist/runners/src/jest.d.ts +50 -0
  254. package/dist/runners/src/jest.js +52 -0
  255. package/dist/runners/src/mocha.d.ts +40 -0
  256. package/dist/runners/src/mocha.js +39 -0
  257. package/dist/runners/src/node-test.d.ts +28 -0
  258. package/dist/runners/src/node-test.js +44 -0
  259. package/dist/runners/src/publish.d.ts +30 -0
  260. package/dist/runners/src/publish.js +68 -0
  261. package/dist/schema/src/api.d.ts +800 -0
  262. package/dist/schema/src/api.js +201 -0
  263. package/dist/schema/src/cli-results.d.ts +210 -0
  264. package/dist/schema/src/cli-results.js +124 -0
  265. package/dist/schema/src/common.d.ts +53 -0
  266. package/dist/schema/src/common.js +42 -0
  267. package/dist/schema/src/index.d.ts +16 -0
  268. package/dist/schema/src/index.js +16 -0
  269. package/dist/schema/src/layer.d.ts +2273 -0
  270. package/dist/schema/src/layer.js +462 -0
  271. package/dist/schema/src/live-run.d.ts +123 -0
  272. package/dist/schema/src/live-run.js +30 -0
  273. package/dist/schema/src/manifest.d.ts +97 -2
  274. package/dist/schema/src/manifest.js +84 -0
  275. package/dist/schema/src/project.d.ts +20 -0
  276. package/dist/schema/src/project.js +10 -0
  277. package/dist/schema/src/report-sources.d.ts +29 -0
  278. package/dist/schema/src/report-sources.js +27 -1
  279. package/dist/schema/src/runs-index.d.ts +17 -1
  280. package/dist/schema/src/runs-index.js +15 -0
  281. package/dist/schema/src/server-config.d.ts +177 -0
  282. package/dist/schema/src/server-config.js +85 -0
  283. package/dist/schema/src/spec.d.ts +69 -0
  284. package/dist/schema/src/spec.js +58 -0
  285. package/dist/server/src/app.d.ts +72 -0
  286. package/dist/server/src/app.js +557 -0
  287. package/dist/server/src/auth.d.ts +41 -0
  288. package/dist/server/src/auth.js +59 -0
  289. package/dist/server/src/config.d.ts +83 -0
  290. package/dist/server/src/config.js +204 -0
  291. package/dist/server/src/dev.d.ts +12 -0
  292. package/dist/server/src/dev.js +89 -0
  293. package/dist/server/src/events.d.ts +29 -0
  294. package/dist/server/src/events.js +101 -0
  295. package/dist/server/src/host.d.ts +30 -0
  296. package/dist/server/src/host.js +115 -0
  297. package/dist/server/src/index.d.ts +18 -0
  298. package/dist/server/src/index.js +18 -0
  299. package/dist/server/src/live-runs.d.ts +52 -0
  300. package/dist/server/src/live-runs.js +229 -0
  301. package/dist/server/src/llms.d.ts +19 -0
  302. package/dist/server/src/llms.js +63 -0
  303. package/dist/server/src/main.d.ts +30 -0
  304. package/dist/server/src/main.js +114 -0
  305. package/dist/server/src/openapi.d.ts +56 -0
  306. package/dist/server/src/openapi.js +438 -0
  307. package/dist/server/src/problem.d.ts +8 -0
  308. package/dist/server/src/problem.js +39 -0
  309. package/dist/server/src/projects.d.ts +3 -0
  310. package/dist/server/src/projects.js +154 -0
  311. package/dist/server/src/settings-page.d.ts +9 -0
  312. package/dist/server/src/settings-page.js +93 -0
  313. package/dist/server/src/settings.d.ts +23 -0
  314. package/dist/server/src/settings.js +72 -0
  315. package/dist/server/src/site.d.ts +15 -0
  316. package/dist/server/src/site.js +78 -0
  317. package/dist/server/src/store-api.d.ts +28 -0
  318. package/dist/server/src/store-api.js +180 -0
  319. package/dist/server/src/validate.d.ts +71 -0
  320. package/dist/server/src/validate.js +197 -0
  321. package/dist/vitest/src/index.d.ts +27 -5
  322. package/dist/vitest/src/index.js +18 -5
  323. package/dist/webdriver/src/driver.d.ts +63 -11
  324. package/dist/webdriver/src/driver.js +57 -6
  325. package/dist/webdriver/src/index.d.ts +8 -0
  326. package/dist/webdriver/src/index.js +1 -0
  327. package/dist/webdriver/src/protocol.d.ts +75 -6
  328. package/dist/webdriver/src/protocol.js +79 -6
  329. package/docs/agents.md +137 -0
  330. package/docs/deploying.md +345 -0
  331. package/docs/dogfooding.md +175 -0
  332. package/docs/extending.md +242 -0
  333. package/docs/integrating.md +485 -0
  334. package/docs/reference/bun.md +141 -0
  335. package/docs/reference/cli.md +148 -0
  336. package/docs/reference/core.md +2432 -0
  337. package/docs/reference/detox.md +150 -0
  338. package/docs/reference/http-api.md +799 -0
  339. package/docs/reference/playwright.md +303 -0
  340. package/docs/reference/reports.md +7152 -0
  341. package/docs/reference/runners.md +169 -0
  342. package/docs/reference/schema.md +1762 -0
  343. package/docs/reference/server.md +825 -0
  344. package/docs/reference/vitest.md +45 -0
  345. package/docs/reference/webdriver.md +330 -0
  346. package/docs/report-backends.md +144 -0
  347. package/docs/report-contract.md +400 -0
  348. package/docs/reporting-issues.md +160 -0
  349. package/docs/runners.md +69 -0
  350. package/docs/server.md +321 -0
  351. package/docs/statecharts.md +643 -0
  352. package/llms-full.txt +4114 -0
  353. package/llms.txt +49 -0
  354. package/package.json +61 -11
  355. package/packages/core/README.md +2 -1
  356. package/packages/reports/README.md +65 -0
  357. package/packages/reports/STORAGE.md +4 -0
  358. package/packages/runners/README.md +6 -0
  359. package/packages/runners/compat/codecept.cjs +2 -0
  360. package/packages/runners/compat/jest.cjs +2 -0
  361. package/packages/runners/compat/mocha.cjs +2 -0
  362. package/packages/schema/README.md +14 -0
  363. package/packages/schema/schemas/atlas-change.schema.json +4 -0
  364. package/packages/schema/schemas/check-detail.schema.json +1032 -0
  365. package/packages/schema/schemas/checks-result.schema.json +26 -0
  366. package/packages/schema/schemas/command-error.schema.json +35 -0
  367. package/packages/schema/schemas/doctor-result.schema.json +60 -0
  368. package/packages/schema/schemas/effective-delta.schema.json +490 -0
  369. package/packages/schema/schemas/effective-evidence.schema.json +471 -0
  370. package/packages/schema/schemas/evidence-page.schema.json +271 -0
  371. package/packages/schema/schemas/hello-event.schema.json +26 -0
  372. package/packages/schema/schemas/init-plan.schema.json +347 -0
  373. package/packages/schema/schemas/layer-rows.schema.json +199 -0
  374. package/packages/schema/schemas/layer.schema.json +2888 -0
  375. package/packages/schema/schemas/live-run-start.schema.json +42 -0
  376. package/packages/schema/schemas/live-run-update.schema.json +93 -0
  377. package/packages/schema/schemas/live-run.schema.json +225 -0
  378. package/packages/schema/schemas/merge-result.schema.json +40 -0
  379. package/packages/schema/schemas/outline.schema.json +62 -0
  380. package/packages/schema/schemas/problem.schema.json +37 -0
  381. package/packages/schema/schemas/project-slug.schema.json +8 -0
  382. package/packages/schema/schemas/project.schema.json +22 -0
  383. package/packages/schema/schemas/projects.schema.json +33 -0
  384. package/packages/schema/schemas/publish-checks.schema.json +1413 -0
  385. package/packages/schema/schemas/publish-result.schema.json +168 -0
  386. package/packages/schema/schemas/ready.schema.json +68 -0
  387. package/packages/schema/schemas/report-event.schema.json +100 -0
  388. package/packages/schema/schemas/report-status.schema.json +370 -0
  389. package/packages/schema/schemas/server-config.schema.json +208 -0
  390. package/packages/schema/schemas/server-editable-settings.schema.json +132 -0
  391. package/packages/schema/schemas/server-info.schema.json +114 -0
  392. package/packages/schema/schemas/server-settings-snapshot.schema.json +285 -0
  393. package/packages/schema/schemas/spec-set.schema.json +103 -0
  394. package/packages/schema/schemas/store-listing.schema.json +29 -0
  395. package/packages/schema/schemas/store-write-result.schema.json +28 -0
  396. package/packages/schema/schemas/stream-result.schema.json +59 -0
  397. package/packages/server/README.md +43 -0
  398. package/packages/server/openapi.json +11021 -0
  399. package/packages/visualizer/README.md +32 -11
  400. package/packages/visualizer/bin/atlas-client.mjs +176 -0
  401. package/packages/visualizer/bin/atlas-visualizer.mjs +2 -175
  402. package/packages/visualizer/src/app/AppShell.tsx +32 -16
  403. package/packages/visualizer/src/app/report-sources.tsx +7 -4
  404. package/packages/visualizer/src/app/router.tsx +3 -3
  405. package/packages/visualizer/src/components/ActivityIndicator.module.css +4 -0
  406. package/packages/visualizer/src/components/ActivityIndicator.tsx +6 -0
  407. package/packages/visualizer/src/components/Header.module.css +101 -192
  408. package/packages/visualizer/src/components/Header.tsx +88 -13
  409. package/packages/visualizer/src/components/ProjectPicker.tsx +64 -0
  410. package/packages/visualizer/src/data/adapters/adapter.ts +5 -17
  411. package/packages/visualizer/src/data/adapters/index.ts +10 -1
  412. package/packages/visualizer/src/data/adapters/report-backend.test.ts +3 -2
  413. package/packages/visualizer/src/data/adapters/report-backend.ts +1 -1
  414. package/packages/visualizer/src/data/queries.ts +14 -7
  415. package/packages/visualizer/src/evidence/api.ts +16 -3
  416. package/packages/visualizer/src/evidence/artifacts.module.css +213 -0
  417. package/packages/visualizer/src/evidence/artifacts.tsx +272 -0
  418. package/packages/visualizer/src/evidence/check-detail.tsx +21 -4
  419. package/packages/visualizer/src/evidence/document-page.tsx +6 -2
  420. package/packages/visualizer/src/evidence/evidence-context.tsx +79 -12
  421. package/packages/visualizer/src/evidence/evidence.module.css +11 -1
  422. package/packages/visualizer/src/evidence/feature-page.tsx +7 -3
  423. package/packages/visualizer/src/evidence/model-page.tsx +6 -2
  424. package/packages/visualizer/src/evidence/project-home.tsx +45 -0
  425. package/packages/visualizer/src/evidence/recording-page.tsx +4 -1
  426. package/packages/visualizer/src/evidence/spec-index.tsx +2 -1
  427. package/packages/visualizer/src/evidence/spec-page.tsx +23 -16
  428. package/packages/visualizer/src/evidence/test-filter.tsx +21 -0
  429. package/packages/visualizer/src/find/Finder.tsx +1 -7
  430. package/packages/visualizer/src/find/open.ts +4 -0
  431. package/packages/visualizer/src/live/live-query.ts +21 -0
  432. package/packages/visualizer/src/live/live-runs.tsx +69 -0
  433. package/packages/visualizer/src/live/live-stream.ts +225 -0
  434. package/packages/visualizer/src/live/report-progress.ts +62 -0
  435. package/packages/visualizer/src/live/test-progress.tsx +34 -0
  436. package/packages/visualizer/src/runtime.ts +35 -0
  437. package/packages/visualizer/src/state/ui-store.ts +3 -2
  438. package/packages/visualizer/src/views/ChartPage.tsx +2 -0
  439. package/packages/visualizer/src/views/ChartTests.tsx +43 -0
  440. package/packages/visualizer/src/views/SidePanel.tsx +2 -0
  441. package/packages/visualizer/vite/atlas-files.test.ts +4 -4
  442. package/packages/visualizer/vite/atlas-files.ts +1 -5
  443. package/packages/visualizer/vite/atlas-server-proxy.ts +37 -0
  444. package/packages/visualizer/vite.config.ts +11 -3
@@ -0,0 +1,2888 @@
1
+ {
2
+ "$id": "https://github.com/crvouga/atlas/schemas/layer.schema.json",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "type": "object",
5
+ "properties": {
6
+ "schemaVersion": {
7
+ "description": "The major version of this contract",
8
+ "type": "number",
9
+ "const": 1
10
+ },
11
+ "id": {
12
+ "description": "64 lowercase hex digits. Opaque to readers",
13
+ "type": "string",
14
+ "pattern": "^[0-9a-f]{64}$"
15
+ },
16
+ "producer": {
17
+ "description": "A stable name for the suite or tool. With the check id, environment and parameters it picks the slot a layer fills",
18
+ "type": "string",
19
+ "minLength": 1
20
+ },
21
+ "recordedAtMs": {
22
+ "description": "When the checks ran, in epoch milliseconds. The newest completed result wins its slot",
23
+ "type": "number",
24
+ "minimum": 0
25
+ },
26
+ "sha": {
27
+ "description": "The commit the checks ran against. Provenance only; it never partitions a report",
28
+ "anyOf": [
29
+ {
30
+ "type": "string"
31
+ },
32
+ {
33
+ "type": "null"
34
+ }
35
+ ]
36
+ },
37
+ "branch": {
38
+ "description": "Provenance only",
39
+ "anyOf": [
40
+ {
41
+ "type": "string"
42
+ },
43
+ {
44
+ "type": "null"
45
+ }
46
+ ]
47
+ },
48
+ "runUrl": {
49
+ "description": "Where to read the CI run that produced it",
50
+ "anyOf": [
51
+ {
52
+ "type": "string"
53
+ },
54
+ {
55
+ "type": "null"
56
+ }
57
+ ]
58
+ },
59
+ "environment": {
60
+ "description": "The client that was checked: desktop-web, mobile-web, ios, android, or any other lowercase name",
61
+ "anyOf": [
62
+ {
63
+ "type": "string"
64
+ },
65
+ {
66
+ "type": "null"
67
+ }
68
+ ]
69
+ },
70
+ "parameters": {
71
+ "description": "Other choices that make a result its own slot, such as a device size",
72
+ "default": {},
73
+ "type": "object",
74
+ "propertyNames": {
75
+ "type": "string"
76
+ },
77
+ "additionalProperties": {
78
+ "type": "string"
79
+ }
80
+ },
81
+ "freshness": {
82
+ "description": "`modified`: recorded from a checkout with uncommitted changes. `unknown`: origin not captured",
83
+ "type": "string",
84
+ "enum": [
85
+ "unknown",
86
+ "modified"
87
+ ]
88
+ },
89
+ "specs": {
90
+ "default": [],
91
+ "type": "array",
92
+ "items": {
93
+ "type": "object",
94
+ "properties": {
95
+ "path": {
96
+ "type": "string",
97
+ "minLength": 1
98
+ },
99
+ "domain": {
100
+ "type": "string"
101
+ },
102
+ "kind": {
103
+ "type": "string"
104
+ },
105
+ "title": {
106
+ "type": "string"
107
+ },
108
+ "fingerprint": {
109
+ "description": "Identity of the spec text the layer was recorded against, to warn when the spec changed since",
110
+ "type": "string"
111
+ }
112
+ },
113
+ "required": [
114
+ "path",
115
+ "domain",
116
+ "kind",
117
+ "title"
118
+ ],
119
+ "additionalProperties": {}
120
+ }
121
+ },
122
+ "parts": {
123
+ "type": "array",
124
+ "items": {
125
+ "type": "object",
126
+ "properties": {
127
+ "freshness": {
128
+ "type": "string",
129
+ "enum": [
130
+ "unknown",
131
+ "modified"
132
+ ]
133
+ },
134
+ "parameters": {
135
+ "type": "object",
136
+ "propertyNames": {
137
+ "type": "string"
138
+ },
139
+ "additionalProperties": {
140
+ "type": "string"
141
+ }
142
+ },
143
+ "sha": {
144
+ "description": "Repeats the layer sha; readers use the layer",
145
+ "default": "",
146
+ "type": "string"
147
+ },
148
+ "id": {
149
+ "type": "string",
150
+ "minLength": 1
151
+ },
152
+ "kind": {
153
+ "description": "An open category: behavior, performance, accessibility… A new kind needs no change to a reader",
154
+ "type": "string",
155
+ "minLength": 1
156
+ },
157
+ "title": {
158
+ "type": "string"
159
+ },
160
+ "recordedAtMs": {
161
+ "type": "number",
162
+ "minimum": 0
163
+ },
164
+ "checks": {
165
+ "type": "array",
166
+ "items": {
167
+ "type": "object",
168
+ "properties": {
169
+ "id": {
170
+ "description": "The check's stable identity within its producer. The same check must keep the same id in every layer, or layers cannot replace one another",
171
+ "type": "string",
172
+ "minLength": 1
173
+ },
174
+ "title": {
175
+ "type": "string"
176
+ },
177
+ "status": {
178
+ "type": "string",
179
+ "enum": [
180
+ "passed",
181
+ "failed",
182
+ "running",
183
+ "not-run"
184
+ ]
185
+ },
186
+ "detail": {
187
+ "description": "Why it failed, or what was measured",
188
+ "default": "",
189
+ "type": "string"
190
+ },
191
+ "specPath": {
192
+ "description": "The spec this check belongs to, relative to the repository, such as specs/join.feature",
193
+ "type": "string"
194
+ },
195
+ "measurements": {
196
+ "default": [],
197
+ "type": "array",
198
+ "items": {
199
+ "type": "object",
200
+ "properties": {
201
+ "name": {
202
+ "type": "string",
203
+ "minLength": 1
204
+ },
205
+ "value": {
206
+ "description": "A finite number",
207
+ "type": "number"
208
+ },
209
+ "unit": {
210
+ "type": "string"
211
+ },
212
+ "limit": {
213
+ "description": "The allowance. A measurement over it is reported, and never fails the check by itself",
214
+ "type": "number"
215
+ }
216
+ },
217
+ "required": [
218
+ "name",
219
+ "value",
220
+ "unit"
221
+ ],
222
+ "additionalProperties": {}
223
+ }
224
+ },
225
+ "durationMs": {
226
+ "description": "How long the check took, when the producer measured it",
227
+ "type": "number",
228
+ "minimum": 0
229
+ },
230
+ "tags": {
231
+ "description": "Free labels to filter and group by: smoke, slow, flaky…",
232
+ "type": "array",
233
+ "items": {
234
+ "type": "string"
235
+ }
236
+ },
237
+ "labels": {
238
+ "description": "Facts about the result, not part of its identity: owner, severity, browser, os, build. Unlike `parameters` they never split a result into another slot",
239
+ "type": "object",
240
+ "propertyNames": {
241
+ "type": "string"
242
+ },
243
+ "additionalProperties": {
244
+ "type": "string"
245
+ }
246
+ },
247
+ "links": {
248
+ "type": "array",
249
+ "items": {
250
+ "type": "object",
251
+ "properties": {
252
+ "url": {
253
+ "type": "string",
254
+ "minLength": 1
255
+ },
256
+ "name": {
257
+ "type": "string"
258
+ },
259
+ "rel": {
260
+ "description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
261
+ "type": "string"
262
+ }
263
+ },
264
+ "required": [
265
+ "url"
266
+ ],
267
+ "additionalProperties": {}
268
+ }
269
+ },
270
+ "attachments": {
271
+ "type": "array",
272
+ "items": {
273
+ "type": "object",
274
+ "properties": {
275
+ "id": {
276
+ "description": "Lets another attachment, step or annotation refer to this one",
277
+ "type": "string"
278
+ },
279
+ "name": {
280
+ "type": "string",
281
+ "minLength": 1
282
+ },
283
+ "role": {
284
+ "type": "string"
285
+ },
286
+ "contentType": {
287
+ "description": "An IANA media type. Absent means application/octet-stream",
288
+ "type": "string"
289
+ },
290
+ "bundleKey": {
291
+ "description": "The key of its bytes in the layer",
292
+ "type": "string"
293
+ },
294
+ "uri": {
295
+ "description": "Where else to read it: an https URL, or a path a host understands",
296
+ "type": "string"
297
+ },
298
+ "text": {
299
+ "description": "A small UTF-8 value, inline",
300
+ "type": "string"
301
+ },
302
+ "bytes": {
303
+ "type": "integer",
304
+ "minimum": 0,
305
+ "maximum": 9007199254740991
306
+ },
307
+ "sha256": {
308
+ "type": "string"
309
+ },
310
+ "width": {
311
+ "type": "number",
312
+ "minimum": 0
313
+ },
314
+ "height": {
315
+ "type": "number",
316
+ "minimum": 0
317
+ },
318
+ "durationMs": {
319
+ "description": "For video and audio",
320
+ "type": "number",
321
+ "minimum": 0
322
+ },
323
+ "description": {
324
+ "type": "string"
325
+ },
326
+ "at": {
327
+ "type": "object",
328
+ "properties": {
329
+ "step": {
330
+ "description": "The `id` of a step",
331
+ "type": "string"
332
+ },
333
+ "offsetMs": {
334
+ "type": "number",
335
+ "minimum": 0
336
+ }
337
+ },
338
+ "additionalProperties": {}
339
+ },
340
+ "poster": {
341
+ "description": "The `id` of an attachment that stands for this one before it is opened",
342
+ "type": "string"
343
+ },
344
+ "captions": {
345
+ "description": "The `id`s of attachments (WebVTT, SRT) that caption this one",
346
+ "type": "array",
347
+ "items": {
348
+ "type": "string"
349
+ }
350
+ },
351
+ "extensions": {
352
+ "type": "object",
353
+ "propertyNames": {
354
+ "type": "string",
355
+ "minLength": 1
356
+ },
357
+ "additionalProperties": {}
358
+ }
359
+ },
360
+ "required": [
361
+ "name"
362
+ ],
363
+ "additionalProperties": {}
364
+ }
365
+ },
366
+ "annotations": {
367
+ "type": "array",
368
+ "items": {
369
+ "type": "object",
370
+ "properties": {
371
+ "type": {
372
+ "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…",
373
+ "type": "string",
374
+ "minLength": 1
375
+ },
376
+ "message": {
377
+ "type": "string"
378
+ },
379
+ "level": {
380
+ "description": "Conventionally info, warning or error. Anything else is shown as a note",
381
+ "type": "string"
382
+ },
383
+ "at": {
384
+ "type": "object",
385
+ "properties": {
386
+ "step": {
387
+ "description": "The `id` of a step",
388
+ "type": "string"
389
+ },
390
+ "offsetMs": {
391
+ "type": "number",
392
+ "minimum": 0
393
+ }
394
+ },
395
+ "additionalProperties": {}
396
+ },
397
+ "source": {
398
+ "type": "object",
399
+ "properties": {
400
+ "file": {
401
+ "type": "string"
402
+ },
403
+ "line": {
404
+ "type": "integer",
405
+ "minimum": -9007199254740991,
406
+ "maximum": 9007199254740991
407
+ },
408
+ "column": {
409
+ "type": "integer",
410
+ "minimum": -9007199254740991,
411
+ "maximum": 9007199254740991
412
+ }
413
+ },
414
+ "additionalProperties": {}
415
+ },
416
+ "links": {
417
+ "type": "array",
418
+ "items": {
419
+ "type": "object",
420
+ "properties": {
421
+ "url": {
422
+ "type": "string",
423
+ "minLength": 1
424
+ },
425
+ "name": {
426
+ "type": "string"
427
+ },
428
+ "rel": {
429
+ "description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
430
+ "type": "string"
431
+ }
432
+ },
433
+ "required": [
434
+ "url"
435
+ ],
436
+ "additionalProperties": {}
437
+ }
438
+ },
439
+ "extensions": {
440
+ "type": "object",
441
+ "propertyNames": {
442
+ "type": "string",
443
+ "minLength": 1
444
+ },
445
+ "additionalProperties": {}
446
+ }
447
+ },
448
+ "required": [
449
+ "type",
450
+ "message"
451
+ ],
452
+ "additionalProperties": {}
453
+ }
454
+ },
455
+ "extensions": {
456
+ "type": "object",
457
+ "propertyNames": {
458
+ "type": "string",
459
+ "minLength": 1
460
+ },
461
+ "additionalProperties": {}
462
+ },
463
+ "steps": {
464
+ "description": "The check's timeline",
465
+ "type": "array",
466
+ "items": {
467
+ "type": "object",
468
+ "properties": {
469
+ "id": {
470
+ "type": "string"
471
+ },
472
+ "parentId": {
473
+ "type": "string"
474
+ },
475
+ "name": {
476
+ "type": "string"
477
+ },
478
+ "kind": {
479
+ "description": "An open vocabulary: action, assertion, hook, request, span, given, when, then…",
480
+ "type": "string"
481
+ },
482
+ "status": {
483
+ "description": "Conventionally passed, failed, skipped. Anything else is shown as it is",
484
+ "type": "string"
485
+ },
486
+ "offsetMs": {
487
+ "description": "When it started, after the check did",
488
+ "type": "number",
489
+ "minimum": 0
490
+ },
491
+ "durationMs": {
492
+ "type": "number",
493
+ "minimum": 0
494
+ },
495
+ "detail": {
496
+ "type": "string"
497
+ },
498
+ "attachments": {
499
+ "type": "array",
500
+ "items": {
501
+ "type": "object",
502
+ "properties": {
503
+ "id": {
504
+ "description": "Lets another attachment, step or annotation refer to this one",
505
+ "type": "string"
506
+ },
507
+ "name": {
508
+ "type": "string",
509
+ "minLength": 1
510
+ },
511
+ "role": {
512
+ "type": "string"
513
+ },
514
+ "contentType": {
515
+ "description": "An IANA media type. Absent means application/octet-stream",
516
+ "type": "string"
517
+ },
518
+ "bundleKey": {
519
+ "description": "The key of its bytes in the layer",
520
+ "type": "string"
521
+ },
522
+ "uri": {
523
+ "description": "Where else to read it: an https URL, or a path a host understands",
524
+ "type": "string"
525
+ },
526
+ "text": {
527
+ "description": "A small UTF-8 value, inline",
528
+ "type": "string"
529
+ },
530
+ "bytes": {
531
+ "type": "integer",
532
+ "minimum": 0,
533
+ "maximum": 9007199254740991
534
+ },
535
+ "sha256": {
536
+ "type": "string"
537
+ },
538
+ "width": {
539
+ "type": "number",
540
+ "minimum": 0
541
+ },
542
+ "height": {
543
+ "type": "number",
544
+ "minimum": 0
545
+ },
546
+ "durationMs": {
547
+ "description": "For video and audio",
548
+ "type": "number",
549
+ "minimum": 0
550
+ },
551
+ "description": {
552
+ "type": "string"
553
+ },
554
+ "at": {
555
+ "type": "object",
556
+ "properties": {
557
+ "step": {
558
+ "description": "The `id` of a step",
559
+ "type": "string"
560
+ },
561
+ "offsetMs": {
562
+ "type": "number",
563
+ "minimum": 0
564
+ }
565
+ },
566
+ "additionalProperties": {}
567
+ },
568
+ "poster": {
569
+ "description": "The `id` of an attachment that stands for this one before it is opened",
570
+ "type": "string"
571
+ },
572
+ "captions": {
573
+ "description": "The `id`s of attachments (WebVTT, SRT) that caption this one",
574
+ "type": "array",
575
+ "items": {
576
+ "type": "string"
577
+ }
578
+ },
579
+ "extensions": {
580
+ "type": "object",
581
+ "propertyNames": {
582
+ "type": "string",
583
+ "minLength": 1
584
+ },
585
+ "additionalProperties": {}
586
+ }
587
+ },
588
+ "required": [
589
+ "name"
590
+ ],
591
+ "additionalProperties": {}
592
+ }
593
+ },
594
+ "annotations": {
595
+ "type": "array",
596
+ "items": {
597
+ "type": "object",
598
+ "properties": {
599
+ "type": {
600
+ "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…",
601
+ "type": "string",
602
+ "minLength": 1
603
+ },
604
+ "message": {
605
+ "type": "string"
606
+ },
607
+ "level": {
608
+ "description": "Conventionally info, warning or error. Anything else is shown as a note",
609
+ "type": "string"
610
+ },
611
+ "at": {
612
+ "type": "object",
613
+ "properties": {
614
+ "step": {
615
+ "description": "The `id` of a step",
616
+ "type": "string"
617
+ },
618
+ "offsetMs": {
619
+ "type": "number",
620
+ "minimum": 0
621
+ }
622
+ },
623
+ "additionalProperties": {}
624
+ },
625
+ "source": {
626
+ "type": "object",
627
+ "properties": {
628
+ "file": {
629
+ "type": "string"
630
+ },
631
+ "line": {
632
+ "type": "integer",
633
+ "minimum": -9007199254740991,
634
+ "maximum": 9007199254740991
635
+ },
636
+ "column": {
637
+ "type": "integer",
638
+ "minimum": -9007199254740991,
639
+ "maximum": 9007199254740991
640
+ }
641
+ },
642
+ "additionalProperties": {}
643
+ },
644
+ "links": {
645
+ "type": "array",
646
+ "items": {
647
+ "type": "object",
648
+ "properties": {
649
+ "url": {
650
+ "type": "string",
651
+ "minLength": 1
652
+ },
653
+ "name": {
654
+ "type": "string"
655
+ },
656
+ "rel": {
657
+ "description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
658
+ "type": "string"
659
+ }
660
+ },
661
+ "required": [
662
+ "url"
663
+ ],
664
+ "additionalProperties": {}
665
+ }
666
+ },
667
+ "extensions": {
668
+ "type": "object",
669
+ "propertyNames": {
670
+ "type": "string",
671
+ "minLength": 1
672
+ },
673
+ "additionalProperties": {}
674
+ }
675
+ },
676
+ "required": [
677
+ "type",
678
+ "message"
679
+ ],
680
+ "additionalProperties": {}
681
+ }
682
+ },
683
+ "extensions": {
684
+ "type": "object",
685
+ "propertyNames": {
686
+ "type": "string",
687
+ "minLength": 1
688
+ },
689
+ "additionalProperties": {}
690
+ }
691
+ },
692
+ "required": [
693
+ "name"
694
+ ],
695
+ "additionalProperties": {}
696
+ }
697
+ },
698
+ "attempts": {
699
+ "description": "Every try, when the check was retried",
700
+ "type": "array",
701
+ "items": {
702
+ "type": "object",
703
+ "properties": {
704
+ "index": {
705
+ "type": "integer",
706
+ "minimum": 0,
707
+ "maximum": 9007199254740991
708
+ },
709
+ "status": {
710
+ "type": "string",
711
+ "enum": [
712
+ "passed",
713
+ "failed",
714
+ "running",
715
+ "not-run"
716
+ ]
717
+ },
718
+ "durationMs": {
719
+ "type": "number",
720
+ "minimum": 0
721
+ },
722
+ "startedAtMs": {
723
+ "type": "number",
724
+ "minimum": 0
725
+ },
726
+ "detail": {
727
+ "type": "string"
728
+ },
729
+ "steps": {
730
+ "type": "array",
731
+ "items": {
732
+ "type": "object",
733
+ "properties": {
734
+ "id": {
735
+ "type": "string"
736
+ },
737
+ "parentId": {
738
+ "type": "string"
739
+ },
740
+ "name": {
741
+ "type": "string"
742
+ },
743
+ "kind": {
744
+ "description": "An open vocabulary: action, assertion, hook, request, span, given, when, then…",
745
+ "type": "string"
746
+ },
747
+ "status": {
748
+ "description": "Conventionally passed, failed, skipped. Anything else is shown as it is",
749
+ "type": "string"
750
+ },
751
+ "offsetMs": {
752
+ "description": "When it started, after the check did",
753
+ "type": "number",
754
+ "minimum": 0
755
+ },
756
+ "durationMs": {
757
+ "type": "number",
758
+ "minimum": 0
759
+ },
760
+ "detail": {
761
+ "type": "string"
762
+ },
763
+ "attachments": {
764
+ "type": "array",
765
+ "items": {
766
+ "type": "object",
767
+ "properties": {
768
+ "id": {
769
+ "description": "Lets another attachment, step or annotation refer to this one",
770
+ "type": "string"
771
+ },
772
+ "name": {
773
+ "type": "string",
774
+ "minLength": 1
775
+ },
776
+ "role": {
777
+ "type": "string"
778
+ },
779
+ "contentType": {
780
+ "description": "An IANA media type. Absent means application/octet-stream",
781
+ "type": "string"
782
+ },
783
+ "bundleKey": {
784
+ "description": "The key of its bytes in the layer",
785
+ "type": "string"
786
+ },
787
+ "uri": {
788
+ "description": "Where else to read it: an https URL, or a path a host understands",
789
+ "type": "string"
790
+ },
791
+ "text": {
792
+ "description": "A small UTF-8 value, inline",
793
+ "type": "string"
794
+ },
795
+ "bytes": {
796
+ "type": "integer",
797
+ "minimum": 0,
798
+ "maximum": 9007199254740991
799
+ },
800
+ "sha256": {
801
+ "type": "string"
802
+ },
803
+ "width": {
804
+ "type": "number",
805
+ "minimum": 0
806
+ },
807
+ "height": {
808
+ "type": "number",
809
+ "minimum": 0
810
+ },
811
+ "durationMs": {
812
+ "description": "For video and audio",
813
+ "type": "number",
814
+ "minimum": 0
815
+ },
816
+ "description": {
817
+ "type": "string"
818
+ },
819
+ "at": {
820
+ "type": "object",
821
+ "properties": {
822
+ "step": {
823
+ "description": "The `id` of a step",
824
+ "type": "string"
825
+ },
826
+ "offsetMs": {
827
+ "type": "number",
828
+ "minimum": 0
829
+ }
830
+ },
831
+ "additionalProperties": {}
832
+ },
833
+ "poster": {
834
+ "description": "The `id` of an attachment that stands for this one before it is opened",
835
+ "type": "string"
836
+ },
837
+ "captions": {
838
+ "description": "The `id`s of attachments (WebVTT, SRT) that caption this one",
839
+ "type": "array",
840
+ "items": {
841
+ "type": "string"
842
+ }
843
+ },
844
+ "extensions": {
845
+ "type": "object",
846
+ "propertyNames": {
847
+ "type": "string",
848
+ "minLength": 1
849
+ },
850
+ "additionalProperties": {}
851
+ }
852
+ },
853
+ "required": [
854
+ "name"
855
+ ],
856
+ "additionalProperties": {}
857
+ }
858
+ },
859
+ "annotations": {
860
+ "type": "array",
861
+ "items": {
862
+ "type": "object",
863
+ "properties": {
864
+ "type": {
865
+ "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…",
866
+ "type": "string",
867
+ "minLength": 1
868
+ },
869
+ "message": {
870
+ "type": "string"
871
+ },
872
+ "level": {
873
+ "description": "Conventionally info, warning or error. Anything else is shown as a note",
874
+ "type": "string"
875
+ },
876
+ "at": {
877
+ "type": "object",
878
+ "properties": {
879
+ "step": {
880
+ "description": "The `id` of a step",
881
+ "type": "string"
882
+ },
883
+ "offsetMs": {
884
+ "type": "number",
885
+ "minimum": 0
886
+ }
887
+ },
888
+ "additionalProperties": {}
889
+ },
890
+ "source": {
891
+ "type": "object",
892
+ "properties": {
893
+ "file": {
894
+ "type": "string"
895
+ },
896
+ "line": {
897
+ "type": "integer",
898
+ "minimum": -9007199254740991,
899
+ "maximum": 9007199254740991
900
+ },
901
+ "column": {
902
+ "type": "integer",
903
+ "minimum": -9007199254740991,
904
+ "maximum": 9007199254740991
905
+ }
906
+ },
907
+ "additionalProperties": {}
908
+ },
909
+ "links": {
910
+ "type": "array",
911
+ "items": {
912
+ "type": "object",
913
+ "properties": {
914
+ "url": {
915
+ "type": "string",
916
+ "minLength": 1
917
+ },
918
+ "name": {
919
+ "type": "string"
920
+ },
921
+ "rel": {
922
+ "description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
923
+ "type": "string"
924
+ }
925
+ },
926
+ "required": [
927
+ "url"
928
+ ],
929
+ "additionalProperties": {}
930
+ }
931
+ },
932
+ "extensions": {
933
+ "type": "object",
934
+ "propertyNames": {
935
+ "type": "string",
936
+ "minLength": 1
937
+ },
938
+ "additionalProperties": {}
939
+ }
940
+ },
941
+ "required": [
942
+ "type",
943
+ "message"
944
+ ],
945
+ "additionalProperties": {}
946
+ }
947
+ },
948
+ "extensions": {
949
+ "type": "object",
950
+ "propertyNames": {
951
+ "type": "string",
952
+ "minLength": 1
953
+ },
954
+ "additionalProperties": {}
955
+ }
956
+ },
957
+ "required": [
958
+ "name"
959
+ ],
960
+ "additionalProperties": {}
961
+ }
962
+ },
963
+ "attachments": {
964
+ "type": "array",
965
+ "items": {
966
+ "type": "object",
967
+ "properties": {
968
+ "id": {
969
+ "description": "Lets another attachment, step or annotation refer to this one",
970
+ "type": "string"
971
+ },
972
+ "name": {
973
+ "type": "string",
974
+ "minLength": 1
975
+ },
976
+ "role": {
977
+ "type": "string"
978
+ },
979
+ "contentType": {
980
+ "description": "An IANA media type. Absent means application/octet-stream",
981
+ "type": "string"
982
+ },
983
+ "bundleKey": {
984
+ "description": "The key of its bytes in the layer",
985
+ "type": "string"
986
+ },
987
+ "uri": {
988
+ "description": "Where else to read it: an https URL, or a path a host understands",
989
+ "type": "string"
990
+ },
991
+ "text": {
992
+ "description": "A small UTF-8 value, inline",
993
+ "type": "string"
994
+ },
995
+ "bytes": {
996
+ "type": "integer",
997
+ "minimum": 0,
998
+ "maximum": 9007199254740991
999
+ },
1000
+ "sha256": {
1001
+ "type": "string"
1002
+ },
1003
+ "width": {
1004
+ "type": "number",
1005
+ "minimum": 0
1006
+ },
1007
+ "height": {
1008
+ "type": "number",
1009
+ "minimum": 0
1010
+ },
1011
+ "durationMs": {
1012
+ "description": "For video and audio",
1013
+ "type": "number",
1014
+ "minimum": 0
1015
+ },
1016
+ "description": {
1017
+ "type": "string"
1018
+ },
1019
+ "at": {
1020
+ "type": "object",
1021
+ "properties": {
1022
+ "step": {
1023
+ "description": "The `id` of a step",
1024
+ "type": "string"
1025
+ },
1026
+ "offsetMs": {
1027
+ "type": "number",
1028
+ "minimum": 0
1029
+ }
1030
+ },
1031
+ "additionalProperties": {}
1032
+ },
1033
+ "poster": {
1034
+ "description": "The `id` of an attachment that stands for this one before it is opened",
1035
+ "type": "string"
1036
+ },
1037
+ "captions": {
1038
+ "description": "The `id`s of attachments (WebVTT, SRT) that caption this one",
1039
+ "type": "array",
1040
+ "items": {
1041
+ "type": "string"
1042
+ }
1043
+ },
1044
+ "extensions": {
1045
+ "type": "object",
1046
+ "propertyNames": {
1047
+ "type": "string",
1048
+ "minLength": 1
1049
+ },
1050
+ "additionalProperties": {}
1051
+ }
1052
+ },
1053
+ "required": [
1054
+ "name"
1055
+ ],
1056
+ "additionalProperties": {}
1057
+ }
1058
+ },
1059
+ "annotations": {
1060
+ "type": "array",
1061
+ "items": {
1062
+ "type": "object",
1063
+ "properties": {
1064
+ "type": {
1065
+ "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…",
1066
+ "type": "string",
1067
+ "minLength": 1
1068
+ },
1069
+ "message": {
1070
+ "type": "string"
1071
+ },
1072
+ "level": {
1073
+ "description": "Conventionally info, warning or error. Anything else is shown as a note",
1074
+ "type": "string"
1075
+ },
1076
+ "at": {
1077
+ "type": "object",
1078
+ "properties": {
1079
+ "step": {
1080
+ "description": "The `id` of a step",
1081
+ "type": "string"
1082
+ },
1083
+ "offsetMs": {
1084
+ "type": "number",
1085
+ "minimum": 0
1086
+ }
1087
+ },
1088
+ "additionalProperties": {}
1089
+ },
1090
+ "source": {
1091
+ "type": "object",
1092
+ "properties": {
1093
+ "file": {
1094
+ "type": "string"
1095
+ },
1096
+ "line": {
1097
+ "type": "integer",
1098
+ "minimum": -9007199254740991,
1099
+ "maximum": 9007199254740991
1100
+ },
1101
+ "column": {
1102
+ "type": "integer",
1103
+ "minimum": -9007199254740991,
1104
+ "maximum": 9007199254740991
1105
+ }
1106
+ },
1107
+ "additionalProperties": {}
1108
+ },
1109
+ "links": {
1110
+ "type": "array",
1111
+ "items": {
1112
+ "type": "object",
1113
+ "properties": {
1114
+ "url": {
1115
+ "type": "string",
1116
+ "minLength": 1
1117
+ },
1118
+ "name": {
1119
+ "type": "string"
1120
+ },
1121
+ "rel": {
1122
+ "description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
1123
+ "type": "string"
1124
+ }
1125
+ },
1126
+ "required": [
1127
+ "url"
1128
+ ],
1129
+ "additionalProperties": {}
1130
+ }
1131
+ },
1132
+ "extensions": {
1133
+ "type": "object",
1134
+ "propertyNames": {
1135
+ "type": "string",
1136
+ "minLength": 1
1137
+ },
1138
+ "additionalProperties": {}
1139
+ }
1140
+ },
1141
+ "required": [
1142
+ "type",
1143
+ "message"
1144
+ ],
1145
+ "additionalProperties": {}
1146
+ }
1147
+ },
1148
+ "extensions": {
1149
+ "type": "object",
1150
+ "propertyNames": {
1151
+ "type": "string",
1152
+ "minLength": 1
1153
+ },
1154
+ "additionalProperties": {}
1155
+ }
1156
+ },
1157
+ "required": [
1158
+ "index",
1159
+ "status"
1160
+ ],
1161
+ "additionalProperties": {}
1162
+ }
1163
+ }
1164
+ },
1165
+ "required": [
1166
+ "id",
1167
+ "title",
1168
+ "status"
1169
+ ],
1170
+ "additionalProperties": {}
1171
+ }
1172
+ },
1173
+ "tags": {
1174
+ "description": "Free labels to filter and group by: smoke, slow, flaky…",
1175
+ "type": "array",
1176
+ "items": {
1177
+ "type": "string"
1178
+ }
1179
+ },
1180
+ "labels": {
1181
+ "description": "Facts about the result, not part of its identity: owner, severity, browser, os, build. Unlike `parameters` they never split a result into another slot",
1182
+ "type": "object",
1183
+ "propertyNames": {
1184
+ "type": "string"
1185
+ },
1186
+ "additionalProperties": {
1187
+ "type": "string"
1188
+ }
1189
+ },
1190
+ "links": {
1191
+ "type": "array",
1192
+ "items": {
1193
+ "type": "object",
1194
+ "properties": {
1195
+ "url": {
1196
+ "type": "string",
1197
+ "minLength": 1
1198
+ },
1199
+ "name": {
1200
+ "type": "string"
1201
+ },
1202
+ "rel": {
1203
+ "description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
1204
+ "type": "string"
1205
+ }
1206
+ },
1207
+ "required": [
1208
+ "url"
1209
+ ],
1210
+ "additionalProperties": {}
1211
+ }
1212
+ },
1213
+ "attachments": {
1214
+ "type": "array",
1215
+ "items": {
1216
+ "type": "object",
1217
+ "properties": {
1218
+ "id": {
1219
+ "description": "Lets another attachment, step or annotation refer to this one",
1220
+ "type": "string"
1221
+ },
1222
+ "name": {
1223
+ "type": "string",
1224
+ "minLength": 1
1225
+ },
1226
+ "role": {
1227
+ "type": "string"
1228
+ },
1229
+ "contentType": {
1230
+ "description": "An IANA media type. Absent means application/octet-stream",
1231
+ "type": "string"
1232
+ },
1233
+ "bundleKey": {
1234
+ "description": "The key of its bytes in the layer",
1235
+ "type": "string"
1236
+ },
1237
+ "uri": {
1238
+ "description": "Where else to read it: an https URL, or a path a host understands",
1239
+ "type": "string"
1240
+ },
1241
+ "text": {
1242
+ "description": "A small UTF-8 value, inline",
1243
+ "type": "string"
1244
+ },
1245
+ "bytes": {
1246
+ "type": "integer",
1247
+ "minimum": 0,
1248
+ "maximum": 9007199254740991
1249
+ },
1250
+ "sha256": {
1251
+ "type": "string"
1252
+ },
1253
+ "width": {
1254
+ "type": "number",
1255
+ "minimum": 0
1256
+ },
1257
+ "height": {
1258
+ "type": "number",
1259
+ "minimum": 0
1260
+ },
1261
+ "durationMs": {
1262
+ "description": "For video and audio",
1263
+ "type": "number",
1264
+ "minimum": 0
1265
+ },
1266
+ "description": {
1267
+ "type": "string"
1268
+ },
1269
+ "at": {
1270
+ "type": "object",
1271
+ "properties": {
1272
+ "step": {
1273
+ "description": "The `id` of a step",
1274
+ "type": "string"
1275
+ },
1276
+ "offsetMs": {
1277
+ "type": "number",
1278
+ "minimum": 0
1279
+ }
1280
+ },
1281
+ "additionalProperties": {}
1282
+ },
1283
+ "poster": {
1284
+ "description": "The `id` of an attachment that stands for this one before it is opened",
1285
+ "type": "string"
1286
+ },
1287
+ "captions": {
1288
+ "description": "The `id`s of attachments (WebVTT, SRT) that caption this one",
1289
+ "type": "array",
1290
+ "items": {
1291
+ "type": "string"
1292
+ }
1293
+ },
1294
+ "extensions": {
1295
+ "type": "object",
1296
+ "propertyNames": {
1297
+ "type": "string",
1298
+ "minLength": 1
1299
+ },
1300
+ "additionalProperties": {}
1301
+ }
1302
+ },
1303
+ "required": [
1304
+ "name"
1305
+ ],
1306
+ "additionalProperties": {}
1307
+ }
1308
+ },
1309
+ "annotations": {
1310
+ "type": "array",
1311
+ "items": {
1312
+ "type": "object",
1313
+ "properties": {
1314
+ "type": {
1315
+ "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…",
1316
+ "type": "string",
1317
+ "minLength": 1
1318
+ },
1319
+ "message": {
1320
+ "type": "string"
1321
+ },
1322
+ "level": {
1323
+ "description": "Conventionally info, warning or error. Anything else is shown as a note",
1324
+ "type": "string"
1325
+ },
1326
+ "at": {
1327
+ "type": "object",
1328
+ "properties": {
1329
+ "step": {
1330
+ "description": "The `id` of a step",
1331
+ "type": "string"
1332
+ },
1333
+ "offsetMs": {
1334
+ "type": "number",
1335
+ "minimum": 0
1336
+ }
1337
+ },
1338
+ "additionalProperties": {}
1339
+ },
1340
+ "source": {
1341
+ "type": "object",
1342
+ "properties": {
1343
+ "file": {
1344
+ "type": "string"
1345
+ },
1346
+ "line": {
1347
+ "type": "integer",
1348
+ "minimum": -9007199254740991,
1349
+ "maximum": 9007199254740991
1350
+ },
1351
+ "column": {
1352
+ "type": "integer",
1353
+ "minimum": -9007199254740991,
1354
+ "maximum": 9007199254740991
1355
+ }
1356
+ },
1357
+ "additionalProperties": {}
1358
+ },
1359
+ "links": {
1360
+ "type": "array",
1361
+ "items": {
1362
+ "type": "object",
1363
+ "properties": {
1364
+ "url": {
1365
+ "type": "string",
1366
+ "minLength": 1
1367
+ },
1368
+ "name": {
1369
+ "type": "string"
1370
+ },
1371
+ "rel": {
1372
+ "description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
1373
+ "type": "string"
1374
+ }
1375
+ },
1376
+ "required": [
1377
+ "url"
1378
+ ],
1379
+ "additionalProperties": {}
1380
+ }
1381
+ },
1382
+ "extensions": {
1383
+ "type": "object",
1384
+ "propertyNames": {
1385
+ "type": "string",
1386
+ "minLength": 1
1387
+ },
1388
+ "additionalProperties": {}
1389
+ }
1390
+ },
1391
+ "required": [
1392
+ "type",
1393
+ "message"
1394
+ ],
1395
+ "additionalProperties": {}
1396
+ }
1397
+ },
1398
+ "extensions": {
1399
+ "type": "object",
1400
+ "propertyNames": {
1401
+ "type": "string",
1402
+ "minLength": 1
1403
+ },
1404
+ "additionalProperties": {}
1405
+ }
1406
+ },
1407
+ "required": [
1408
+ "id",
1409
+ "kind",
1410
+ "title",
1411
+ "recordedAtMs",
1412
+ "checks"
1413
+ ],
1414
+ "additionalProperties": {}
1415
+ }
1416
+ },
1417
+ "source": {
1418
+ "default": null,
1419
+ "anyOf": [
1420
+ {
1421
+ "type": "object",
1422
+ "properties": {
1423
+ "source": {
1424
+ "type": "string",
1425
+ "minLength": 1
1426
+ },
1427
+ "packageDir": {
1428
+ "type": "string"
1429
+ },
1430
+ "bucket": {
1431
+ "type": "string"
1432
+ },
1433
+ "status": {
1434
+ "type": "string",
1435
+ "enum": [
1436
+ "passed",
1437
+ "failed",
1438
+ "skipped"
1439
+ ]
1440
+ },
1441
+ "updatedAtMs": {
1442
+ "type": "number",
1443
+ "minimum": 0
1444
+ },
1445
+ "environment": {
1446
+ "type": "string"
1447
+ },
1448
+ "parameters": {
1449
+ "type": "object",
1450
+ "propertyNames": {
1451
+ "type": "string"
1452
+ },
1453
+ "additionalProperties": {
1454
+ "type": "string"
1455
+ }
1456
+ },
1457
+ "evidence": {
1458
+ "type": "array",
1459
+ "items": {
1460
+ "type": "object",
1461
+ "properties": {
1462
+ "kind": {
1463
+ "type": "string"
1464
+ },
1465
+ "title": {
1466
+ "type": "string"
1467
+ },
1468
+ "checks": {
1469
+ "type": "array",
1470
+ "items": {
1471
+ "type": "object",
1472
+ "properties": {
1473
+ "id": {
1474
+ "description": "The check's stable identity within its producer. The same check must keep the same id in every layer, or layers cannot replace one another",
1475
+ "type": "string",
1476
+ "minLength": 1
1477
+ },
1478
+ "title": {
1479
+ "type": "string"
1480
+ },
1481
+ "status": {
1482
+ "type": "string",
1483
+ "enum": [
1484
+ "passed",
1485
+ "failed",
1486
+ "running",
1487
+ "not-run"
1488
+ ]
1489
+ },
1490
+ "detail": {
1491
+ "description": "Why it failed, or what was measured",
1492
+ "default": "",
1493
+ "type": "string"
1494
+ },
1495
+ "specPath": {
1496
+ "description": "The spec this check belongs to, relative to the repository, such as specs/join.feature",
1497
+ "type": "string"
1498
+ },
1499
+ "measurements": {
1500
+ "default": [],
1501
+ "type": "array",
1502
+ "items": {
1503
+ "type": "object",
1504
+ "properties": {
1505
+ "name": {
1506
+ "type": "string",
1507
+ "minLength": 1
1508
+ },
1509
+ "value": {
1510
+ "description": "A finite number",
1511
+ "type": "number"
1512
+ },
1513
+ "unit": {
1514
+ "type": "string"
1515
+ },
1516
+ "limit": {
1517
+ "description": "The allowance. A measurement over it is reported, and never fails the check by itself",
1518
+ "type": "number"
1519
+ }
1520
+ },
1521
+ "required": [
1522
+ "name",
1523
+ "value",
1524
+ "unit"
1525
+ ],
1526
+ "additionalProperties": {}
1527
+ }
1528
+ },
1529
+ "durationMs": {
1530
+ "description": "How long the check took, when the producer measured it",
1531
+ "type": "number",
1532
+ "minimum": 0
1533
+ },
1534
+ "tags": {
1535
+ "description": "Free labels to filter and group by: smoke, slow, flaky…",
1536
+ "type": "array",
1537
+ "items": {
1538
+ "type": "string"
1539
+ }
1540
+ },
1541
+ "labels": {
1542
+ "description": "Facts about the result, not part of its identity: owner, severity, browser, os, build. Unlike `parameters` they never split a result into another slot",
1543
+ "type": "object",
1544
+ "propertyNames": {
1545
+ "type": "string"
1546
+ },
1547
+ "additionalProperties": {
1548
+ "type": "string"
1549
+ }
1550
+ },
1551
+ "links": {
1552
+ "type": "array",
1553
+ "items": {
1554
+ "type": "object",
1555
+ "properties": {
1556
+ "url": {
1557
+ "type": "string",
1558
+ "minLength": 1
1559
+ },
1560
+ "name": {
1561
+ "type": "string"
1562
+ },
1563
+ "rel": {
1564
+ "description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
1565
+ "type": "string"
1566
+ }
1567
+ },
1568
+ "required": [
1569
+ "url"
1570
+ ],
1571
+ "additionalProperties": {}
1572
+ }
1573
+ },
1574
+ "attachments": {
1575
+ "type": "array",
1576
+ "items": {
1577
+ "type": "object",
1578
+ "properties": {
1579
+ "id": {
1580
+ "description": "Lets another attachment, step or annotation refer to this one",
1581
+ "type": "string"
1582
+ },
1583
+ "name": {
1584
+ "type": "string",
1585
+ "minLength": 1
1586
+ },
1587
+ "role": {
1588
+ "type": "string"
1589
+ },
1590
+ "contentType": {
1591
+ "description": "An IANA media type. Absent means application/octet-stream",
1592
+ "type": "string"
1593
+ },
1594
+ "bundleKey": {
1595
+ "description": "The key of its bytes in the layer",
1596
+ "type": "string"
1597
+ },
1598
+ "uri": {
1599
+ "description": "Where else to read it: an https URL, or a path a host understands",
1600
+ "type": "string"
1601
+ },
1602
+ "text": {
1603
+ "description": "A small UTF-8 value, inline",
1604
+ "type": "string"
1605
+ },
1606
+ "bytes": {
1607
+ "type": "integer",
1608
+ "minimum": 0,
1609
+ "maximum": 9007199254740991
1610
+ },
1611
+ "sha256": {
1612
+ "type": "string"
1613
+ },
1614
+ "width": {
1615
+ "type": "number",
1616
+ "minimum": 0
1617
+ },
1618
+ "height": {
1619
+ "type": "number",
1620
+ "minimum": 0
1621
+ },
1622
+ "durationMs": {
1623
+ "description": "For video and audio",
1624
+ "type": "number",
1625
+ "minimum": 0
1626
+ },
1627
+ "description": {
1628
+ "type": "string"
1629
+ },
1630
+ "at": {
1631
+ "type": "object",
1632
+ "properties": {
1633
+ "step": {
1634
+ "description": "The `id` of a step",
1635
+ "type": "string"
1636
+ },
1637
+ "offsetMs": {
1638
+ "type": "number",
1639
+ "minimum": 0
1640
+ }
1641
+ },
1642
+ "additionalProperties": {}
1643
+ },
1644
+ "poster": {
1645
+ "description": "The `id` of an attachment that stands for this one before it is opened",
1646
+ "type": "string"
1647
+ },
1648
+ "captions": {
1649
+ "description": "The `id`s of attachments (WebVTT, SRT) that caption this one",
1650
+ "type": "array",
1651
+ "items": {
1652
+ "type": "string"
1653
+ }
1654
+ },
1655
+ "extensions": {
1656
+ "type": "object",
1657
+ "propertyNames": {
1658
+ "type": "string",
1659
+ "minLength": 1
1660
+ },
1661
+ "additionalProperties": {}
1662
+ }
1663
+ },
1664
+ "required": [
1665
+ "name"
1666
+ ],
1667
+ "additionalProperties": {}
1668
+ }
1669
+ },
1670
+ "annotations": {
1671
+ "type": "array",
1672
+ "items": {
1673
+ "type": "object",
1674
+ "properties": {
1675
+ "type": {
1676
+ "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…",
1677
+ "type": "string",
1678
+ "minLength": 1
1679
+ },
1680
+ "message": {
1681
+ "type": "string"
1682
+ },
1683
+ "level": {
1684
+ "description": "Conventionally info, warning or error. Anything else is shown as a note",
1685
+ "type": "string"
1686
+ },
1687
+ "at": {
1688
+ "type": "object",
1689
+ "properties": {
1690
+ "step": {
1691
+ "description": "The `id` of a step",
1692
+ "type": "string"
1693
+ },
1694
+ "offsetMs": {
1695
+ "type": "number",
1696
+ "minimum": 0
1697
+ }
1698
+ },
1699
+ "additionalProperties": {}
1700
+ },
1701
+ "source": {
1702
+ "type": "object",
1703
+ "properties": {
1704
+ "file": {
1705
+ "type": "string"
1706
+ },
1707
+ "line": {
1708
+ "type": "integer",
1709
+ "minimum": -9007199254740991,
1710
+ "maximum": 9007199254740991
1711
+ },
1712
+ "column": {
1713
+ "type": "integer",
1714
+ "minimum": -9007199254740991,
1715
+ "maximum": 9007199254740991
1716
+ }
1717
+ },
1718
+ "additionalProperties": {}
1719
+ },
1720
+ "links": {
1721
+ "type": "array",
1722
+ "items": {
1723
+ "type": "object",
1724
+ "properties": {
1725
+ "url": {
1726
+ "type": "string",
1727
+ "minLength": 1
1728
+ },
1729
+ "name": {
1730
+ "type": "string"
1731
+ },
1732
+ "rel": {
1733
+ "description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
1734
+ "type": "string"
1735
+ }
1736
+ },
1737
+ "required": [
1738
+ "url"
1739
+ ],
1740
+ "additionalProperties": {}
1741
+ }
1742
+ },
1743
+ "extensions": {
1744
+ "type": "object",
1745
+ "propertyNames": {
1746
+ "type": "string",
1747
+ "minLength": 1
1748
+ },
1749
+ "additionalProperties": {}
1750
+ }
1751
+ },
1752
+ "required": [
1753
+ "type",
1754
+ "message"
1755
+ ],
1756
+ "additionalProperties": {}
1757
+ }
1758
+ },
1759
+ "extensions": {
1760
+ "type": "object",
1761
+ "propertyNames": {
1762
+ "type": "string",
1763
+ "minLength": 1
1764
+ },
1765
+ "additionalProperties": {}
1766
+ },
1767
+ "steps": {
1768
+ "description": "The check's timeline",
1769
+ "type": "array",
1770
+ "items": {
1771
+ "type": "object",
1772
+ "properties": {
1773
+ "id": {
1774
+ "type": "string"
1775
+ },
1776
+ "parentId": {
1777
+ "type": "string"
1778
+ },
1779
+ "name": {
1780
+ "type": "string"
1781
+ },
1782
+ "kind": {
1783
+ "description": "An open vocabulary: action, assertion, hook, request, span, given, when, then…",
1784
+ "type": "string"
1785
+ },
1786
+ "status": {
1787
+ "description": "Conventionally passed, failed, skipped. Anything else is shown as it is",
1788
+ "type": "string"
1789
+ },
1790
+ "offsetMs": {
1791
+ "description": "When it started, after the check did",
1792
+ "type": "number",
1793
+ "minimum": 0
1794
+ },
1795
+ "durationMs": {
1796
+ "type": "number",
1797
+ "minimum": 0
1798
+ },
1799
+ "detail": {
1800
+ "type": "string"
1801
+ },
1802
+ "attachments": {
1803
+ "type": "array",
1804
+ "items": {
1805
+ "type": "object",
1806
+ "properties": {
1807
+ "id": {
1808
+ "description": "Lets another attachment, step or annotation refer to this one",
1809
+ "type": "string"
1810
+ },
1811
+ "name": {
1812
+ "type": "string",
1813
+ "minLength": 1
1814
+ },
1815
+ "role": {
1816
+ "type": "string"
1817
+ },
1818
+ "contentType": {
1819
+ "description": "An IANA media type. Absent means application/octet-stream",
1820
+ "type": "string"
1821
+ },
1822
+ "bundleKey": {
1823
+ "description": "The key of its bytes in the layer",
1824
+ "type": "string"
1825
+ },
1826
+ "uri": {
1827
+ "description": "Where else to read it: an https URL, or a path a host understands",
1828
+ "type": "string"
1829
+ },
1830
+ "text": {
1831
+ "description": "A small UTF-8 value, inline",
1832
+ "type": "string"
1833
+ },
1834
+ "bytes": {
1835
+ "type": "integer",
1836
+ "minimum": 0,
1837
+ "maximum": 9007199254740991
1838
+ },
1839
+ "sha256": {
1840
+ "type": "string"
1841
+ },
1842
+ "width": {
1843
+ "type": "number",
1844
+ "minimum": 0
1845
+ },
1846
+ "height": {
1847
+ "type": "number",
1848
+ "minimum": 0
1849
+ },
1850
+ "durationMs": {
1851
+ "description": "For video and audio",
1852
+ "type": "number",
1853
+ "minimum": 0
1854
+ },
1855
+ "description": {
1856
+ "type": "string"
1857
+ },
1858
+ "at": {
1859
+ "type": "object",
1860
+ "properties": {
1861
+ "step": {
1862
+ "description": "The `id` of a step",
1863
+ "type": "string"
1864
+ },
1865
+ "offsetMs": {
1866
+ "type": "number",
1867
+ "minimum": 0
1868
+ }
1869
+ },
1870
+ "additionalProperties": {}
1871
+ },
1872
+ "poster": {
1873
+ "description": "The `id` of an attachment that stands for this one before it is opened",
1874
+ "type": "string"
1875
+ },
1876
+ "captions": {
1877
+ "description": "The `id`s of attachments (WebVTT, SRT) that caption this one",
1878
+ "type": "array",
1879
+ "items": {
1880
+ "type": "string"
1881
+ }
1882
+ },
1883
+ "extensions": {
1884
+ "type": "object",
1885
+ "propertyNames": {
1886
+ "type": "string",
1887
+ "minLength": 1
1888
+ },
1889
+ "additionalProperties": {}
1890
+ }
1891
+ },
1892
+ "required": [
1893
+ "name"
1894
+ ],
1895
+ "additionalProperties": {}
1896
+ }
1897
+ },
1898
+ "annotations": {
1899
+ "type": "array",
1900
+ "items": {
1901
+ "type": "object",
1902
+ "properties": {
1903
+ "type": {
1904
+ "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…",
1905
+ "type": "string",
1906
+ "minLength": 1
1907
+ },
1908
+ "message": {
1909
+ "type": "string"
1910
+ },
1911
+ "level": {
1912
+ "description": "Conventionally info, warning or error. Anything else is shown as a note",
1913
+ "type": "string"
1914
+ },
1915
+ "at": {
1916
+ "type": "object",
1917
+ "properties": {
1918
+ "step": {
1919
+ "description": "The `id` of a step",
1920
+ "type": "string"
1921
+ },
1922
+ "offsetMs": {
1923
+ "type": "number",
1924
+ "minimum": 0
1925
+ }
1926
+ },
1927
+ "additionalProperties": {}
1928
+ },
1929
+ "source": {
1930
+ "type": "object",
1931
+ "properties": {
1932
+ "file": {
1933
+ "type": "string"
1934
+ },
1935
+ "line": {
1936
+ "type": "integer",
1937
+ "minimum": -9007199254740991,
1938
+ "maximum": 9007199254740991
1939
+ },
1940
+ "column": {
1941
+ "type": "integer",
1942
+ "minimum": -9007199254740991,
1943
+ "maximum": 9007199254740991
1944
+ }
1945
+ },
1946
+ "additionalProperties": {}
1947
+ },
1948
+ "links": {
1949
+ "type": "array",
1950
+ "items": {
1951
+ "type": "object",
1952
+ "properties": {
1953
+ "url": {
1954
+ "type": "string",
1955
+ "minLength": 1
1956
+ },
1957
+ "name": {
1958
+ "type": "string"
1959
+ },
1960
+ "rel": {
1961
+ "description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
1962
+ "type": "string"
1963
+ }
1964
+ },
1965
+ "required": [
1966
+ "url"
1967
+ ],
1968
+ "additionalProperties": {}
1969
+ }
1970
+ },
1971
+ "extensions": {
1972
+ "type": "object",
1973
+ "propertyNames": {
1974
+ "type": "string",
1975
+ "minLength": 1
1976
+ },
1977
+ "additionalProperties": {}
1978
+ }
1979
+ },
1980
+ "required": [
1981
+ "type",
1982
+ "message"
1983
+ ],
1984
+ "additionalProperties": {}
1985
+ }
1986
+ },
1987
+ "extensions": {
1988
+ "type": "object",
1989
+ "propertyNames": {
1990
+ "type": "string",
1991
+ "minLength": 1
1992
+ },
1993
+ "additionalProperties": {}
1994
+ }
1995
+ },
1996
+ "required": [
1997
+ "name"
1998
+ ],
1999
+ "additionalProperties": {}
2000
+ }
2001
+ },
2002
+ "attempts": {
2003
+ "description": "Every try, when the check was retried",
2004
+ "type": "array",
2005
+ "items": {
2006
+ "type": "object",
2007
+ "properties": {
2008
+ "index": {
2009
+ "type": "integer",
2010
+ "minimum": 0,
2011
+ "maximum": 9007199254740991
2012
+ },
2013
+ "status": {
2014
+ "type": "string",
2015
+ "enum": [
2016
+ "passed",
2017
+ "failed",
2018
+ "running",
2019
+ "not-run"
2020
+ ]
2021
+ },
2022
+ "durationMs": {
2023
+ "type": "number",
2024
+ "minimum": 0
2025
+ },
2026
+ "startedAtMs": {
2027
+ "type": "number",
2028
+ "minimum": 0
2029
+ },
2030
+ "detail": {
2031
+ "type": "string"
2032
+ },
2033
+ "steps": {
2034
+ "type": "array",
2035
+ "items": {
2036
+ "type": "object",
2037
+ "properties": {
2038
+ "id": {
2039
+ "type": "string"
2040
+ },
2041
+ "parentId": {
2042
+ "type": "string"
2043
+ },
2044
+ "name": {
2045
+ "type": "string"
2046
+ },
2047
+ "kind": {
2048
+ "description": "An open vocabulary: action, assertion, hook, request, span, given, when, then…",
2049
+ "type": "string"
2050
+ },
2051
+ "status": {
2052
+ "description": "Conventionally passed, failed, skipped. Anything else is shown as it is",
2053
+ "type": "string"
2054
+ },
2055
+ "offsetMs": {
2056
+ "description": "When it started, after the check did",
2057
+ "type": "number",
2058
+ "minimum": 0
2059
+ },
2060
+ "durationMs": {
2061
+ "type": "number",
2062
+ "minimum": 0
2063
+ },
2064
+ "detail": {
2065
+ "type": "string"
2066
+ },
2067
+ "attachments": {
2068
+ "type": "array",
2069
+ "items": {
2070
+ "type": "object",
2071
+ "properties": {
2072
+ "id": {
2073
+ "description": "Lets another attachment, step or annotation refer to this one",
2074
+ "type": "string"
2075
+ },
2076
+ "name": {
2077
+ "type": "string",
2078
+ "minLength": 1
2079
+ },
2080
+ "role": {
2081
+ "type": "string"
2082
+ },
2083
+ "contentType": {
2084
+ "description": "An IANA media type. Absent means application/octet-stream",
2085
+ "type": "string"
2086
+ },
2087
+ "bundleKey": {
2088
+ "description": "The key of its bytes in the layer",
2089
+ "type": "string"
2090
+ },
2091
+ "uri": {
2092
+ "description": "Where else to read it: an https URL, or a path a host understands",
2093
+ "type": "string"
2094
+ },
2095
+ "text": {
2096
+ "description": "A small UTF-8 value, inline",
2097
+ "type": "string"
2098
+ },
2099
+ "bytes": {
2100
+ "type": "integer",
2101
+ "minimum": 0,
2102
+ "maximum": 9007199254740991
2103
+ },
2104
+ "sha256": {
2105
+ "type": "string"
2106
+ },
2107
+ "width": {
2108
+ "type": "number",
2109
+ "minimum": 0
2110
+ },
2111
+ "height": {
2112
+ "type": "number",
2113
+ "minimum": 0
2114
+ },
2115
+ "durationMs": {
2116
+ "description": "For video and audio",
2117
+ "type": "number",
2118
+ "minimum": 0
2119
+ },
2120
+ "description": {
2121
+ "type": "string"
2122
+ },
2123
+ "at": {
2124
+ "type": "object",
2125
+ "properties": {
2126
+ "step": {
2127
+ "description": "The `id` of a step",
2128
+ "type": "string"
2129
+ },
2130
+ "offsetMs": {
2131
+ "type": "number",
2132
+ "minimum": 0
2133
+ }
2134
+ },
2135
+ "additionalProperties": {}
2136
+ },
2137
+ "poster": {
2138
+ "description": "The `id` of an attachment that stands for this one before it is opened",
2139
+ "type": "string"
2140
+ },
2141
+ "captions": {
2142
+ "description": "The `id`s of attachments (WebVTT, SRT) that caption this one",
2143
+ "type": "array",
2144
+ "items": {
2145
+ "type": "string"
2146
+ }
2147
+ },
2148
+ "extensions": {
2149
+ "type": "object",
2150
+ "propertyNames": {
2151
+ "type": "string",
2152
+ "minLength": 1
2153
+ },
2154
+ "additionalProperties": {}
2155
+ }
2156
+ },
2157
+ "required": [
2158
+ "name"
2159
+ ],
2160
+ "additionalProperties": {}
2161
+ }
2162
+ },
2163
+ "annotations": {
2164
+ "type": "array",
2165
+ "items": {
2166
+ "type": "object",
2167
+ "properties": {
2168
+ "type": {
2169
+ "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…",
2170
+ "type": "string",
2171
+ "minLength": 1
2172
+ },
2173
+ "message": {
2174
+ "type": "string"
2175
+ },
2176
+ "level": {
2177
+ "description": "Conventionally info, warning or error. Anything else is shown as a note",
2178
+ "type": "string"
2179
+ },
2180
+ "at": {
2181
+ "type": "object",
2182
+ "properties": {
2183
+ "step": {
2184
+ "description": "The `id` of a step",
2185
+ "type": "string"
2186
+ },
2187
+ "offsetMs": {
2188
+ "type": "number",
2189
+ "minimum": 0
2190
+ }
2191
+ },
2192
+ "additionalProperties": {}
2193
+ },
2194
+ "source": {
2195
+ "type": "object",
2196
+ "properties": {
2197
+ "file": {
2198
+ "type": "string"
2199
+ },
2200
+ "line": {
2201
+ "type": "integer",
2202
+ "minimum": -9007199254740991,
2203
+ "maximum": 9007199254740991
2204
+ },
2205
+ "column": {
2206
+ "type": "integer",
2207
+ "minimum": -9007199254740991,
2208
+ "maximum": 9007199254740991
2209
+ }
2210
+ },
2211
+ "additionalProperties": {}
2212
+ },
2213
+ "links": {
2214
+ "type": "array",
2215
+ "items": {
2216
+ "type": "object",
2217
+ "properties": {
2218
+ "url": {
2219
+ "type": "string",
2220
+ "minLength": 1
2221
+ },
2222
+ "name": {
2223
+ "type": "string"
2224
+ },
2225
+ "rel": {
2226
+ "description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
2227
+ "type": "string"
2228
+ }
2229
+ },
2230
+ "required": [
2231
+ "url"
2232
+ ],
2233
+ "additionalProperties": {}
2234
+ }
2235
+ },
2236
+ "extensions": {
2237
+ "type": "object",
2238
+ "propertyNames": {
2239
+ "type": "string",
2240
+ "minLength": 1
2241
+ },
2242
+ "additionalProperties": {}
2243
+ }
2244
+ },
2245
+ "required": [
2246
+ "type",
2247
+ "message"
2248
+ ],
2249
+ "additionalProperties": {}
2250
+ }
2251
+ },
2252
+ "extensions": {
2253
+ "type": "object",
2254
+ "propertyNames": {
2255
+ "type": "string",
2256
+ "minLength": 1
2257
+ },
2258
+ "additionalProperties": {}
2259
+ }
2260
+ },
2261
+ "required": [
2262
+ "name"
2263
+ ],
2264
+ "additionalProperties": {}
2265
+ }
2266
+ },
2267
+ "attachments": {
2268
+ "type": "array",
2269
+ "items": {
2270
+ "type": "object",
2271
+ "properties": {
2272
+ "id": {
2273
+ "description": "Lets another attachment, step or annotation refer to this one",
2274
+ "type": "string"
2275
+ },
2276
+ "name": {
2277
+ "type": "string",
2278
+ "minLength": 1
2279
+ },
2280
+ "role": {
2281
+ "type": "string"
2282
+ },
2283
+ "contentType": {
2284
+ "description": "An IANA media type. Absent means application/octet-stream",
2285
+ "type": "string"
2286
+ },
2287
+ "bundleKey": {
2288
+ "description": "The key of its bytes in the layer",
2289
+ "type": "string"
2290
+ },
2291
+ "uri": {
2292
+ "description": "Where else to read it: an https URL, or a path a host understands",
2293
+ "type": "string"
2294
+ },
2295
+ "text": {
2296
+ "description": "A small UTF-8 value, inline",
2297
+ "type": "string"
2298
+ },
2299
+ "bytes": {
2300
+ "type": "integer",
2301
+ "minimum": 0,
2302
+ "maximum": 9007199254740991
2303
+ },
2304
+ "sha256": {
2305
+ "type": "string"
2306
+ },
2307
+ "width": {
2308
+ "type": "number",
2309
+ "minimum": 0
2310
+ },
2311
+ "height": {
2312
+ "type": "number",
2313
+ "minimum": 0
2314
+ },
2315
+ "durationMs": {
2316
+ "description": "For video and audio",
2317
+ "type": "number",
2318
+ "minimum": 0
2319
+ },
2320
+ "description": {
2321
+ "type": "string"
2322
+ },
2323
+ "at": {
2324
+ "type": "object",
2325
+ "properties": {
2326
+ "step": {
2327
+ "description": "The `id` of a step",
2328
+ "type": "string"
2329
+ },
2330
+ "offsetMs": {
2331
+ "type": "number",
2332
+ "minimum": 0
2333
+ }
2334
+ },
2335
+ "additionalProperties": {}
2336
+ },
2337
+ "poster": {
2338
+ "description": "The `id` of an attachment that stands for this one before it is opened",
2339
+ "type": "string"
2340
+ },
2341
+ "captions": {
2342
+ "description": "The `id`s of attachments (WebVTT, SRT) that caption this one",
2343
+ "type": "array",
2344
+ "items": {
2345
+ "type": "string"
2346
+ }
2347
+ },
2348
+ "extensions": {
2349
+ "type": "object",
2350
+ "propertyNames": {
2351
+ "type": "string",
2352
+ "minLength": 1
2353
+ },
2354
+ "additionalProperties": {}
2355
+ }
2356
+ },
2357
+ "required": [
2358
+ "name"
2359
+ ],
2360
+ "additionalProperties": {}
2361
+ }
2362
+ },
2363
+ "annotations": {
2364
+ "type": "array",
2365
+ "items": {
2366
+ "type": "object",
2367
+ "properties": {
2368
+ "type": {
2369
+ "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…",
2370
+ "type": "string",
2371
+ "minLength": 1
2372
+ },
2373
+ "message": {
2374
+ "type": "string"
2375
+ },
2376
+ "level": {
2377
+ "description": "Conventionally info, warning or error. Anything else is shown as a note",
2378
+ "type": "string"
2379
+ },
2380
+ "at": {
2381
+ "type": "object",
2382
+ "properties": {
2383
+ "step": {
2384
+ "description": "The `id` of a step",
2385
+ "type": "string"
2386
+ },
2387
+ "offsetMs": {
2388
+ "type": "number",
2389
+ "minimum": 0
2390
+ }
2391
+ },
2392
+ "additionalProperties": {}
2393
+ },
2394
+ "source": {
2395
+ "type": "object",
2396
+ "properties": {
2397
+ "file": {
2398
+ "type": "string"
2399
+ },
2400
+ "line": {
2401
+ "type": "integer",
2402
+ "minimum": -9007199254740991,
2403
+ "maximum": 9007199254740991
2404
+ },
2405
+ "column": {
2406
+ "type": "integer",
2407
+ "minimum": -9007199254740991,
2408
+ "maximum": 9007199254740991
2409
+ }
2410
+ },
2411
+ "additionalProperties": {}
2412
+ },
2413
+ "links": {
2414
+ "type": "array",
2415
+ "items": {
2416
+ "type": "object",
2417
+ "properties": {
2418
+ "url": {
2419
+ "type": "string",
2420
+ "minLength": 1
2421
+ },
2422
+ "name": {
2423
+ "type": "string"
2424
+ },
2425
+ "rel": {
2426
+ "description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
2427
+ "type": "string"
2428
+ }
2429
+ },
2430
+ "required": [
2431
+ "url"
2432
+ ],
2433
+ "additionalProperties": {}
2434
+ }
2435
+ },
2436
+ "extensions": {
2437
+ "type": "object",
2438
+ "propertyNames": {
2439
+ "type": "string",
2440
+ "minLength": 1
2441
+ },
2442
+ "additionalProperties": {}
2443
+ }
2444
+ },
2445
+ "required": [
2446
+ "type",
2447
+ "message"
2448
+ ],
2449
+ "additionalProperties": {}
2450
+ }
2451
+ },
2452
+ "extensions": {
2453
+ "type": "object",
2454
+ "propertyNames": {
2455
+ "type": "string",
2456
+ "minLength": 1
2457
+ },
2458
+ "additionalProperties": {}
2459
+ }
2460
+ },
2461
+ "required": [
2462
+ "index",
2463
+ "status"
2464
+ ],
2465
+ "additionalProperties": {}
2466
+ }
2467
+ }
2468
+ },
2469
+ "required": [
2470
+ "id",
2471
+ "title",
2472
+ "status"
2473
+ ],
2474
+ "additionalProperties": {}
2475
+ }
2476
+ }
2477
+ },
2478
+ "required": [
2479
+ "kind",
2480
+ "title",
2481
+ "checks"
2482
+ ],
2483
+ "additionalProperties": {}
2484
+ }
2485
+ },
2486
+ "tests": {
2487
+ "type": "array",
2488
+ "items": {
2489
+ "type": "object",
2490
+ "properties": {
2491
+ "testId": {
2492
+ "type": "string",
2493
+ "minLength": 1
2494
+ },
2495
+ "title": {
2496
+ "type": "string"
2497
+ },
2498
+ "status": {
2499
+ "type": "string",
2500
+ "enum": [
2501
+ "passed",
2502
+ "failed",
2503
+ "skipped"
2504
+ ]
2505
+ },
2506
+ "system": {
2507
+ "default": "",
2508
+ "type": "string"
2509
+ },
2510
+ "runtime": {
2511
+ "default": "",
2512
+ "type": "string"
2513
+ },
2514
+ "seed": {
2515
+ "default": "",
2516
+ "type": "string"
2517
+ },
2518
+ "durationMs": {
2519
+ "default": 0,
2520
+ "type": "number",
2521
+ "minimum": 0
2522
+ }
2523
+ },
2524
+ "required": [
2525
+ "testId",
2526
+ "title",
2527
+ "status"
2528
+ ],
2529
+ "additionalProperties": {}
2530
+ }
2531
+ }
2532
+ },
2533
+ "required": [
2534
+ "source",
2535
+ "packageDir",
2536
+ "bucket",
2537
+ "status",
2538
+ "updatedAtMs",
2539
+ "tests"
2540
+ ],
2541
+ "additionalProperties": {}
2542
+ },
2543
+ {
2544
+ "type": "null"
2545
+ }
2546
+ ]
2547
+ },
2548
+ "recording": {
2549
+ "default": null,
2550
+ "anyOf": [
2551
+ {
2552
+ "anyOf": [
2553
+ {
2554
+ "type": "object",
2555
+ "properties": {
2556
+ "type": {
2557
+ "type": "string",
2558
+ "const": "layer"
2559
+ }
2560
+ },
2561
+ "required": [
2562
+ "type"
2563
+ ],
2564
+ "additionalProperties": {}
2565
+ },
2566
+ {
2567
+ "type": "object",
2568
+ "properties": {
2569
+ "type": {
2570
+ "type": "string",
2571
+ "const": "commit"
2572
+ },
2573
+ "sha": {
2574
+ "type": "string",
2575
+ "minLength": 1
2576
+ },
2577
+ "source": {
2578
+ "type": "string",
2579
+ "minLength": 1
2580
+ }
2581
+ },
2582
+ "required": [
2583
+ "type",
2584
+ "sha",
2585
+ "source"
2586
+ ],
2587
+ "additionalProperties": {}
2588
+ }
2589
+ ]
2590
+ },
2591
+ {
2592
+ "type": "null"
2593
+ }
2594
+ ]
2595
+ },
2596
+ "bundle": {
2597
+ "default": {},
2598
+ "type": "object",
2599
+ "propertyNames": {
2600
+ "type": "string"
2601
+ },
2602
+ "additionalProperties": {
2603
+ "type": "object",
2604
+ "properties": {
2605
+ "contentType": {
2606
+ "type": "string"
2607
+ },
2608
+ "parts": {
2609
+ "type": "array",
2610
+ "items": {
2611
+ "type": "object",
2612
+ "properties": {
2613
+ "blob": {
2614
+ "type": "string"
2615
+ },
2616
+ "offset": {
2617
+ "type": "integer",
2618
+ "minimum": 0,
2619
+ "maximum": 9007199254740991
2620
+ },
2621
+ "size": {
2622
+ "type": "integer",
2623
+ "minimum": 0,
2624
+ "maximum": 9007199254740991
2625
+ }
2626
+ },
2627
+ "required": [
2628
+ "blob",
2629
+ "offset",
2630
+ "size"
2631
+ ],
2632
+ "additionalProperties": {}
2633
+ }
2634
+ }
2635
+ },
2636
+ "required": [
2637
+ "contentType",
2638
+ "parts"
2639
+ ],
2640
+ "additionalProperties": {}
2641
+ }
2642
+ },
2643
+ "tags": {
2644
+ "description": "Free labels to filter and group by: smoke, slow, flaky…",
2645
+ "type": "array",
2646
+ "items": {
2647
+ "type": "string"
2648
+ }
2649
+ },
2650
+ "labels": {
2651
+ "description": "Facts about the result, not part of its identity: owner, severity, browser, os, build. Unlike `parameters` they never split a result into another slot",
2652
+ "type": "object",
2653
+ "propertyNames": {
2654
+ "type": "string"
2655
+ },
2656
+ "additionalProperties": {
2657
+ "type": "string"
2658
+ }
2659
+ },
2660
+ "links": {
2661
+ "type": "array",
2662
+ "items": {
2663
+ "type": "object",
2664
+ "properties": {
2665
+ "url": {
2666
+ "type": "string",
2667
+ "minLength": 1
2668
+ },
2669
+ "name": {
2670
+ "type": "string"
2671
+ },
2672
+ "rel": {
2673
+ "description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
2674
+ "type": "string"
2675
+ }
2676
+ },
2677
+ "required": [
2678
+ "url"
2679
+ ],
2680
+ "additionalProperties": {}
2681
+ }
2682
+ },
2683
+ "attachments": {
2684
+ "type": "array",
2685
+ "items": {
2686
+ "type": "object",
2687
+ "properties": {
2688
+ "id": {
2689
+ "description": "Lets another attachment, step or annotation refer to this one",
2690
+ "type": "string"
2691
+ },
2692
+ "name": {
2693
+ "type": "string",
2694
+ "minLength": 1
2695
+ },
2696
+ "role": {
2697
+ "type": "string"
2698
+ },
2699
+ "contentType": {
2700
+ "description": "An IANA media type. Absent means application/octet-stream",
2701
+ "type": "string"
2702
+ },
2703
+ "bundleKey": {
2704
+ "description": "The key of its bytes in the layer",
2705
+ "type": "string"
2706
+ },
2707
+ "uri": {
2708
+ "description": "Where else to read it: an https URL, or a path a host understands",
2709
+ "type": "string"
2710
+ },
2711
+ "text": {
2712
+ "description": "A small UTF-8 value, inline",
2713
+ "type": "string"
2714
+ },
2715
+ "bytes": {
2716
+ "type": "integer",
2717
+ "minimum": 0,
2718
+ "maximum": 9007199254740991
2719
+ },
2720
+ "sha256": {
2721
+ "type": "string"
2722
+ },
2723
+ "width": {
2724
+ "type": "number",
2725
+ "minimum": 0
2726
+ },
2727
+ "height": {
2728
+ "type": "number",
2729
+ "minimum": 0
2730
+ },
2731
+ "durationMs": {
2732
+ "description": "For video and audio",
2733
+ "type": "number",
2734
+ "minimum": 0
2735
+ },
2736
+ "description": {
2737
+ "type": "string"
2738
+ },
2739
+ "at": {
2740
+ "type": "object",
2741
+ "properties": {
2742
+ "step": {
2743
+ "description": "The `id` of a step",
2744
+ "type": "string"
2745
+ },
2746
+ "offsetMs": {
2747
+ "type": "number",
2748
+ "minimum": 0
2749
+ }
2750
+ },
2751
+ "additionalProperties": {}
2752
+ },
2753
+ "poster": {
2754
+ "description": "The `id` of an attachment that stands for this one before it is opened",
2755
+ "type": "string"
2756
+ },
2757
+ "captions": {
2758
+ "description": "The `id`s of attachments (WebVTT, SRT) that caption this one",
2759
+ "type": "array",
2760
+ "items": {
2761
+ "type": "string"
2762
+ }
2763
+ },
2764
+ "extensions": {
2765
+ "type": "object",
2766
+ "propertyNames": {
2767
+ "type": "string",
2768
+ "minLength": 1
2769
+ },
2770
+ "additionalProperties": {}
2771
+ }
2772
+ },
2773
+ "required": [
2774
+ "name"
2775
+ ],
2776
+ "additionalProperties": {}
2777
+ }
2778
+ },
2779
+ "annotations": {
2780
+ "type": "array",
2781
+ "items": {
2782
+ "type": "object",
2783
+ "properties": {
2784
+ "type": {
2785
+ "description": "An open vocabulary: note, warning, deprecation, issue, accessibility, coverage…",
2786
+ "type": "string",
2787
+ "minLength": 1
2788
+ },
2789
+ "message": {
2790
+ "type": "string"
2791
+ },
2792
+ "level": {
2793
+ "description": "Conventionally info, warning or error. Anything else is shown as a note",
2794
+ "type": "string"
2795
+ },
2796
+ "at": {
2797
+ "type": "object",
2798
+ "properties": {
2799
+ "step": {
2800
+ "description": "The `id` of a step",
2801
+ "type": "string"
2802
+ },
2803
+ "offsetMs": {
2804
+ "type": "number",
2805
+ "minimum": 0
2806
+ }
2807
+ },
2808
+ "additionalProperties": {}
2809
+ },
2810
+ "source": {
2811
+ "type": "object",
2812
+ "properties": {
2813
+ "file": {
2814
+ "type": "string"
2815
+ },
2816
+ "line": {
2817
+ "type": "integer",
2818
+ "minimum": -9007199254740991,
2819
+ "maximum": 9007199254740991
2820
+ },
2821
+ "column": {
2822
+ "type": "integer",
2823
+ "minimum": -9007199254740991,
2824
+ "maximum": 9007199254740991
2825
+ }
2826
+ },
2827
+ "additionalProperties": {}
2828
+ },
2829
+ "links": {
2830
+ "type": "array",
2831
+ "items": {
2832
+ "type": "object",
2833
+ "properties": {
2834
+ "url": {
2835
+ "type": "string",
2836
+ "minLength": 1
2837
+ },
2838
+ "name": {
2839
+ "type": "string"
2840
+ },
2841
+ "rel": {
2842
+ "description": "Why it is linked, in an open vocabulary: issue, run, trace, docs, source…",
2843
+ "type": "string"
2844
+ }
2845
+ },
2846
+ "required": [
2847
+ "url"
2848
+ ],
2849
+ "additionalProperties": {}
2850
+ }
2851
+ },
2852
+ "extensions": {
2853
+ "type": "object",
2854
+ "propertyNames": {
2855
+ "type": "string",
2856
+ "minLength": 1
2857
+ },
2858
+ "additionalProperties": {}
2859
+ }
2860
+ },
2861
+ "required": [
2862
+ "type",
2863
+ "message"
2864
+ ],
2865
+ "additionalProperties": {}
2866
+ }
2867
+ },
2868
+ "extensions": {
2869
+ "type": "object",
2870
+ "propertyNames": {
2871
+ "type": "string",
2872
+ "minLength": 1
2873
+ },
2874
+ "additionalProperties": {}
2875
+ }
2876
+ },
2877
+ "required": [
2878
+ "schemaVersion",
2879
+ "id",
2880
+ "producer",
2881
+ "recordedAtMs",
2882
+ "sha",
2883
+ "branch",
2884
+ "runUrl",
2885
+ "parts"
2886
+ ],
2887
+ "additionalProperties": {}
2888
+ }