@crvouga/atlas 0.0.0-stage → 0.2.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 (606) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +21 -0
  3. package/README.md +649 -2
  4. package/dist/bun/src/driver.d.ts +67 -0
  5. package/dist/bun/src/driver.js +90 -0
  6. package/dist/bun/src/index.d.ts +2 -0
  7. package/dist/bun/src/index.js +2 -0
  8. package/dist/core/src/cli.d.ts +1 -0
  9. package/dist/core/src/cli.js +177 -0
  10. package/dist/core/src/config.d.ts +477 -0
  11. package/dist/core/src/config.js +100 -0
  12. package/dist/core/src/events/cloudevents.d.ts +56 -0
  13. package/dist/core/src/events/cloudevents.js +152 -0
  14. package/dist/core/src/graph.d.ts +113 -0
  15. package/dist/core/src/graph.js +221 -0
  16. package/dist/core/src/index.d.ts +17 -0
  17. package/dist/core/src/index.js +17 -0
  18. package/dist/core/src/lint.d.ts +53 -0
  19. package/dist/core/src/lint.js +138 -0
  20. package/dist/core/src/plan.d.ts +109 -0
  21. package/dist/core/src/plan.js +324 -0
  22. package/dist/core/src/privacy.d.ts +8 -0
  23. package/dist/core/src/privacy.js +42 -0
  24. package/dist/core/src/report/formats.d.ts +69 -0
  25. package/dist/core/src/report/formats.js +109 -0
  26. package/dist/core/src/report/markdown.d.ts +8 -0
  27. package/dist/core/src/report/markdown.js +140 -0
  28. package/dist/core/src/run/clients.d.ts +42 -0
  29. package/dist/core/src/run/clients.js +250 -0
  30. package/dist/core/src/run/execute.d.ts +854 -0
  31. package/dist/core/src/run/execute.js +877 -0
  32. package/dist/core/src/run/frames.d.ts +16 -0
  33. package/dist/core/src/run/frames.js +52 -0
  34. package/dist/core/src/run/http.d.ts +41 -0
  35. package/dist/core/src/run/http.js +71 -0
  36. package/dist/core/src/run/types.d.ts +248 -0
  37. package/dist/core/src/run/types.js +39 -0
  38. package/dist/core/src/signals.d.ts +110 -0
  39. package/dist/core/src/signals.js +121 -0
  40. package/dist/core/src/spec/compose.d.ts +28 -0
  41. package/dist/core/src/spec/compose.js +71 -0
  42. package/dist/core/src/spec/index.d.ts +5 -0
  43. package/dist/core/src/spec/index.js +5 -0
  44. package/dist/core/src/spec/load.d.ts +8 -0
  45. package/dist/core/src/spec/load.js +46 -0
  46. package/dist/core/src/spec/parse.d.ts +5 -0
  47. package/dist/core/src/spec/parse.js +32 -0
  48. package/dist/core/src/spec/scxml.d.ts +19 -0
  49. package/dist/core/src/spec/scxml.js +239 -0
  50. package/dist/core/src/spec/types.d.ts +96 -0
  51. package/dist/core/src/spec/types.js +25 -0
  52. package/dist/detox/src/index.d.ts +75 -0
  53. package/dist/detox/src/index.js +110 -0
  54. package/dist/playwright/src/driver.d.ts +44 -0
  55. package/dist/playwright/src/driver.js +82 -0
  56. package/dist/playwright/src/index.d.ts +3 -0
  57. package/dist/playwright/src/index.js +3 -0
  58. package/dist/playwright/src/media.d.ts +68 -0
  59. package/dist/playwright/src/media.js +283 -0
  60. package/dist/playwright/src/signals.d.ts +34 -0
  61. package/dist/playwright/src/signals.js +56 -0
  62. package/dist/reports/src/browser-navigation.d.ts +2 -0
  63. package/dist/reports/src/browser-navigation.js +28 -0
  64. package/dist/reports/src/bundle.d.ts +24 -0
  65. package/dist/reports/src/bundle.js +114 -0
  66. package/dist/reports/src/catalog.d.ts +37 -0
  67. package/dist/reports/src/catalog.js +127 -0
  68. package/dist/reports/src/clock.d.ts +14 -0
  69. package/dist/reports/src/clock.js +4 -0
  70. package/dist/reports/src/completion-order.d.ts +10 -0
  71. package/dist/reports/src/completion-order.js +76 -0
  72. package/dist/reports/src/evidence-live.d.ts +40 -0
  73. package/dist/reports/src/evidence-live.js +118 -0
  74. package/dist/reports/src/evidence-types.d.ts +90 -0
  75. package/dist/reports/src/evidence-types.js +15 -0
  76. package/dist/reports/src/evidence-view.d.ts +68 -0
  77. package/dist/reports/src/evidence-view.js +113 -0
  78. package/dist/reports/src/explorer-types.d.ts +56 -0
  79. package/dist/reports/src/explorer-types.js +0 -0
  80. package/dist/reports/src/explorer-versions.d.ts +4 -0
  81. package/dist/reports/src/explorer-versions.js +21 -0
  82. package/dist/reports/src/export-evidence.d.ts +11 -0
  83. package/dist/reports/src/export-evidence.js +94 -0
  84. package/dist/reports/src/fetcher.d.ts +50 -0
  85. package/dist/reports/src/fetcher.js +205 -0
  86. package/dist/reports/src/format-date.d.ts +1 -0
  87. package/dist/reports/src/format-date.js +10 -0
  88. package/dist/reports/src/format.d.ts +16 -0
  89. package/dist/reports/src/format.js +71 -0
  90. package/dist/reports/src/frames.d.ts +46 -0
  91. package/dist/reports/src/frames.js +245 -0
  92. package/dist/reports/src/hash.d.ts +17 -0
  93. package/dist/reports/src/hash.js +43 -0
  94. package/dist/reports/src/html-frame.d.ts +13 -0
  95. package/dist/reports/src/html-frame.js +63 -0
  96. package/dist/reports/src/http.d.ts +3 -0
  97. package/dist/reports/src/http.js +0 -0
  98. package/dist/reports/src/junit.d.ts +23 -0
  99. package/dist/reports/src/junit.js +119 -0
  100. package/dist/reports/src/keyboard.d.ts +16 -0
  101. package/dist/reports/src/keyboard.js +135 -0
  102. package/dist/reports/src/keys.d.ts +53 -0
  103. package/dist/reports/src/keys.js +122 -0
  104. package/dist/reports/src/layer-catalog.d.ts +5 -0
  105. package/dist/reports/src/layer-catalog.js +39 -0
  106. package/dist/reports/src/layer-merge.d.ts +43 -0
  107. package/dist/reports/src/layer-merge.js +154 -0
  108. package/dist/reports/src/layer-source.d.ts +6 -0
  109. package/dist/reports/src/layer-source.js +32 -0
  110. package/dist/reports/src/layer-store.d.ts +10 -0
  111. package/dist/reports/src/layer-store.js +36 -0
  112. package/dist/reports/src/layer-types.d.ts +32 -0
  113. package/dist/reports/src/layer-types.js +0 -0
  114. package/dist/reports/src/layers-route.d.ts +20 -0
  115. package/dist/reports/src/layers-route.js +259 -0
  116. package/dist/reports/src/namespace-guard.d.ts +11 -0
  117. package/dist/reports/src/namespace-guard.js +40 -0
  118. package/dist/reports/src/navigation.d.ts +8 -0
  119. package/dist/reports/src/navigation.js +0 -0
  120. package/dist/reports/src/object-io.d.ts +9 -0
  121. package/dist/reports/src/object-io.js +41 -0
  122. package/dist/reports/src/object-store.d.ts +67 -0
  123. package/dist/reports/src/object-store.js +32 -0
  124. package/dist/reports/src/performance-part.d.ts +9 -0
  125. package/dist/reports/src/performance-part.js +42 -0
  126. package/dist/reports/src/performance.d.ts +13 -0
  127. package/dist/reports/src/performance.js +45 -0
  128. package/dist/reports/src/persist.d.ts +10 -0
  129. package/dist/reports/src/persist.js +38 -0
  130. package/dist/reports/src/phone.d.ts +5 -0
  131. package/dist/reports/src/phone.js +18 -0
  132. package/dist/reports/src/protocol.d.ts +78 -0
  133. package/dist/reports/src/protocol.js +36 -0
  134. package/dist/reports/src/publication.d.ts +4 -0
  135. package/dist/reports/src/publication.js +35 -0
  136. package/dist/reports/src/publish.d.ts +52 -0
  137. package/dist/reports/src/publish.js +189 -0
  138. package/dist/reports/src/read.d.ts +62 -0
  139. package/dist/reports/src/read.js +214 -0
  140. package/dist/reports/src/recording-bundle.d.ts +22 -0
  141. package/dist/reports/src/recording-bundle.js +4 -0
  142. package/dist/reports/src/recording-keys.d.ts +9 -0
  143. package/dist/reports/src/recording-keys.js +50 -0
  144. package/dist/reports/src/remote-report.d.ts +39 -0
  145. package/dist/reports/src/remote-report.js +304 -0
  146. package/dist/reports/src/report-loader.d.ts +22 -0
  147. package/dist/reports/src/report-loader.js +0 -0
  148. package/dist/reports/src/report-parts.d.ts +10 -0
  149. package/dist/reports/src/report-parts.js +112 -0
  150. package/dist/reports/src/report-types.d.ts +194 -0
  151. package/dist/reports/src/report-types.js +29 -0
  152. package/dist/reports/src/reports-explorer-route.d.ts +90 -0
  153. package/dist/reports/src/reports-explorer-route.js +65 -0
  154. package/dist/reports/src/reports-list-route.d.ts +23 -0
  155. package/dist/reports/src/reports-list-route.js +55 -0
  156. package/dist/reports/src/reports-route.d.ts +267 -0
  157. package/dist/reports/src/reports-route.js +204 -0
  158. package/dist/reports/src/reports-store.d.ts +11 -0
  159. package/dist/reports/src/reports-store.js +28 -0
  160. package/dist/reports/src/resilient-cache.d.ts +3 -0
  161. package/dist/reports/src/resilient-cache.js +33 -0
  162. package/dist/reports/src/retention.d.ts +9 -0
  163. package/dist/reports/src/retention.js +16 -0
  164. package/dist/reports/src/scenario.d.ts +15 -0
  165. package/dist/reports/src/scenario.js +35 -0
  166. package/dist/reports/src/snapshot-bundle.d.ts +18 -0
  167. package/dist/reports/src/snapshot-bundle.js +94 -0
  168. package/dist/reports/src/snapshot-surface.d.ts +29 -0
  169. package/dist/reports/src/snapshot-surface.js +339 -0
  170. package/dist/reports/src/source-content.d.ts +30 -0
  171. package/dist/reports/src/source-content.js +63 -0
  172. package/dist/reports/src/source-entries.d.ts +4 -0
  173. package/dist/reports/src/source-entries.js +34 -0
  174. package/dist/reports/src/source-part.d.ts +4 -0
  175. package/dist/reports/src/source-part.js +66 -0
  176. package/dist/reports/src/source-reader.d.ts +6 -0
  177. package/dist/reports/src/source-reader.js +17 -0
  178. package/dist/reports/src/spec-evidence.d.ts +6 -0
  179. package/dist/reports/src/spec-evidence.js +20 -0
  180. package/dist/reports/src/spec-inventory.d.ts +14 -0
  181. package/dist/reports/src/spec-inventory.js +75 -0
  182. package/dist/reports/src/status.d.ts +4 -0
  183. package/dist/reports/src/status.js +8 -0
  184. package/dist/reports/src/store-prefix.d.ts +21 -0
  185. package/dist/reports/src/store-prefix.js +53 -0
  186. package/dist/reports/src/test-catalog-entity.d.ts +3 -0
  187. package/dist/reports/src/test-catalog-entity.js +34 -0
  188. package/dist/reports/src/types.d.ts +5 -0
  189. package/dist/reports/src/types.js +0 -0
  190. package/dist/reports/src/use-report-nav.d.ts +25 -0
  191. package/dist/reports/src/use-report-nav.js +181 -0
  192. package/dist/schema/src/common.d.ts +57 -0
  193. package/dist/schema/src/common.js +32 -0
  194. package/dist/schema/src/index.d.ts +5 -0
  195. package/dist/schema/src/index.js +5 -0
  196. package/dist/schema/src/manifest.d.ts +457 -0
  197. package/dist/schema/src/manifest.js +247 -0
  198. package/dist/schema/src/report-sources.d.ts +68 -0
  199. package/dist/schema/src/report-sources.js +53 -0
  200. package/dist/schema/src/runs-index.d.ts +52 -0
  201. package/dist/schema/src/runs-index.js +24 -0
  202. package/dist/schema/src/spec.d.ts +245 -0
  203. package/dist/schema/src/spec.js +133 -0
  204. package/dist/vitest/src/index.d.ts +22 -0
  205. package/dist/vitest/src/index.js +33 -0
  206. package/dist/webdriver/src/driver.d.ts +69 -0
  207. package/dist/webdriver/src/driver.js +230 -0
  208. package/dist/webdriver/src/index.d.ts +11 -0
  209. package/dist/webdriver/src/index.js +10 -0
  210. package/dist/webdriver/src/protocol.d.ts +60 -0
  211. package/dist/webdriver/src/protocol.js +146 -0
  212. package/package.json +181 -4
  213. package/packages/bun/README.md +69 -0
  214. package/packages/core/README.md +78 -0
  215. package/packages/core/bin/atlas.mjs +8 -0
  216. package/packages/detox/README.md +73 -0
  217. package/packages/playwright/README.md +77 -0
  218. package/packages/reports/README.md +47 -0
  219. package/packages/reports/STORAGE.md +73 -0
  220. package/packages/schema/README.md +23 -0
  221. package/packages/schema/schemas/atlas-change.schema.json +34 -0
  222. package/packages/schema/schemas/atlas.schema.json +32 -0
  223. package/packages/schema/schemas/cloud-event.schema.json +40 -0
  224. package/packages/schema/schemas/journeys.schema.json +17 -0
  225. package/packages/schema/schemas/manifest.schema.json +160 -0
  226. package/packages/schema/schemas/path-record.schema.json +151 -0
  227. package/packages/schema/schemas/report-sources.schema.json +95 -0
  228. package/packages/schema/schemas/run-info.schema.json +176 -0
  229. package/packages/schema/schemas/run-summary.schema.json +206 -0
  230. package/packages/schema/schemas/runs-index.schema.json +23 -0
  231. package/packages/schema/schemas/state-node.schema.json +238 -0
  232. package/packages/schema/schemas/state-record.schema.json +354 -0
  233. package/packages/schema/schemas/timeline-entry.schema.json +124 -0
  234. package/packages/schema/schemas/transition-record.schema.json +125 -0
  235. package/packages/visualizer/README.md +154 -0
  236. package/packages/visualizer/bin/atlas-visualizer.mjs +176 -0
  237. package/packages/visualizer/example/specs/coffee/ordering/checkout.scxml +82 -0
  238. package/packages/visualizer/example/specs/coffee/ordering/journeys.yaml +129 -0
  239. package/packages/visualizer/example/specs/coffee/ordering/known-issues.md +14 -0
  240. package/packages/visualizer/example/specs/coffee/ordering/machine.yaml +158 -0
  241. package/packages/visualizer/example/specs/coffee/ordering/open-questions.md +25 -0
  242. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/chart.mmd +67 -0
  243. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/ctrf.json +245 -0
  244. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/junit.xml +12 -0
  245. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/manifest.json +2003 -0
  246. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/001.vtt +9 -0
  247. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/002.vtt +9 -0
  248. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/003.vtt +9 -0
  249. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/004.vtt +9 -0
  250. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/005.vtt +17 -0
  251. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/006.vtt +9 -0
  252. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/007.vtt +17 -0
  253. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/008.vtt +17 -0
  254. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/009.vtt +13 -0
  255. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/010.vtt +9 -0
  256. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/011.vtt +9 -0
  257. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/012.vtt +9 -0
  258. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/013.vtt +9 -0
  259. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/01.mp4 +0 -0
  260. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/01.poster.webp +0 -0
  261. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/02.mp4 +0 -0
  262. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/02.poster.webp +0 -0
  263. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/03.mp4 +0 -0
  264. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/03.poster.webp +0 -0
  265. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/04.mp4 +0 -0
  266. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/04.poster.webp +0 -0
  267. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/01.png +0 -0
  268. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/01.webp +0 -0
  269. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/02.png +0 -0
  270. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/02.webp +0 -0
  271. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/03.png +0 -0
  272. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/03.webp +0 -0
  273. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/04.png +0 -0
  274. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/04.webp +0 -0
  275. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/05.png +0 -0
  276. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/05.webp +0 -0
  277. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-2/01.png +0 -0
  278. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-2/01.webp +0 -0
  279. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-3/failed-01.png +0 -0
  280. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-3/failed-01.webp +0 -0
  281. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-4/01.png +0 -0
  282. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-4/01.webp +0 -0
  283. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-5/01.png +0 -0
  284. package/packages/visualizer/fixtures/failures/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-5/01.webp +0 -0
  285. package/packages/visualizer/fixtures/failures/specs/coffee/ordering/checkout.scxml +82 -0
  286. package/packages/visualizer/fixtures/failures/specs/coffee/ordering/journeys.yaml +129 -0
  287. package/packages/visualizer/fixtures/failures/specs/coffee/ordering/known-issues.md +14 -0
  288. package/packages/visualizer/fixtures/failures/specs/coffee/ordering/machine.yaml +158 -0
  289. package/packages/visualizer/fixtures/failures/specs/coffee/ordering/open-questions.md +25 -0
  290. package/packages/visualizer/fixtures/full/runs/2026-10-02T09-10-00-000Z-fast/chart.mmd +67 -0
  291. package/packages/visualizer/fixtures/full/runs/2026-10-02T09-10-00-000Z-fast/ctrf.json +247 -0
  292. package/packages/visualizer/fixtures/full/runs/2026-10-02T09-10-00-000Z-fast/junit.xml +12 -0
  293. package/packages/visualizer/fixtures/full/runs/2026-10-02T09-10-00-000Z-fast/manifest.json +1875 -0
  294. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/chart.mmd +67 -0
  295. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/ctrf.json +244 -0
  296. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/junit.xml +12 -0
  297. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/manifest.json +1977 -0
  298. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/captions/001.vtt +9 -0
  299. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/captions/002.vtt +9 -0
  300. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/captions/003.vtt +9 -0
  301. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/captions/004.vtt +9 -0
  302. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/captions/005.vtt +17 -0
  303. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/captions/006.vtt +9 -0
  304. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/clips/journey-1/01.mp4 +0 -0
  305. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/clips/journey-1/01.poster.webp +0 -0
  306. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/clips/journey-1/02.mp4 +0 -0
  307. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/clips/journey-1/02.poster.webp +0 -0
  308. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/paths/journey-1/01.png +0 -0
  309. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/paths/journey-1/01.webp +0 -0
  310. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/paths/journey-1/02.png +0 -0
  311. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/paths/journey-1/02.webp +0 -0
  312. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/paths/journey-1/03.png +0 -0
  313. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/paths/journey-1/03.webp +0 -0
  314. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/paths/journey-2/01.png +0 -0
  315. package/packages/visualizer/fixtures/full/runs/2026-10-04T16-20-00-000Z-showcase/media/paths/journey-2/01.webp +0 -0
  316. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/chart.mmd +67 -0
  317. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/ctrf.json +472 -0
  318. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/junit.xml +16 -0
  319. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/manifest.json +3701 -0
  320. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/001.vtt +9 -0
  321. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/002.vtt +9 -0
  322. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/003.vtt +9 -0
  323. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/004.vtt +9 -0
  324. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/005.vtt +9 -0
  325. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/006.vtt +13 -0
  326. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/007.vtt +9 -0
  327. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/008.vtt +13 -0
  328. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/009.vtt +17 -0
  329. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/010.vtt +9 -0
  330. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/011.vtt +13 -0
  331. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/012.vtt +9 -0
  332. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/013.vtt +9 -0
  333. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/014.vtt +9 -0
  334. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/015.vtt +9 -0
  335. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/016.vtt +9 -0
  336. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/017.vtt +9 -0
  337. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/018.vtt +17 -0
  338. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/019.vtt +9 -0
  339. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/020.vtt +9 -0
  340. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/021.vtt +9 -0
  341. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/022.vtt +17 -0
  342. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/023.vtt +17 -0
  343. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/024.vtt +13 -0
  344. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/025.vtt +9 -0
  345. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/026.vtt +9 -0
  346. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/027.vtt +9 -0
  347. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/028.vtt +9 -0
  348. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/01.mp4 +0 -0
  349. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/01.poster.webp +0 -0
  350. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/02.mp4 +0 -0
  351. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/02.poster.webp +0 -0
  352. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/03.mp4 +0 -0
  353. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/03.poster.webp +0 -0
  354. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/04.mp4 +0 -0
  355. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/04.poster.webp +0 -0
  356. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/01.png +0 -0
  357. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/01.webp +0 -0
  358. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/02.png +0 -0
  359. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/02.webp +0 -0
  360. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/03.png +0 -0
  361. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/03.webp +0 -0
  362. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/04.png +0 -0
  363. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/04.webp +0 -0
  364. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/05.png +0 -0
  365. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/05.webp +0 -0
  366. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/06.png +0 -0
  367. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/06.webp +0 -0
  368. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/07.png +0 -0
  369. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/07.webp +0 -0
  370. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/08.png +0 -0
  371. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/08.webp +0 -0
  372. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/09.png +0 -0
  373. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/09.webp +0 -0
  374. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/10.png +0 -0
  375. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/10.webp +0 -0
  376. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/11.png +0 -0
  377. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/11.webp +0 -0
  378. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/12.png +0 -0
  379. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/12.webp +0 -0
  380. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/13.png +0 -0
  381. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/13.webp +0 -0
  382. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/14.png +0 -0
  383. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/14.webp +0 -0
  384. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-2/01.png +0 -0
  385. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-2/01.webp +0 -0
  386. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-3/01.png +0 -0
  387. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-3/01.webp +0 -0
  388. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-4/01.png +0 -0
  389. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-4/01.webp +0 -0
  390. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-5/01.png +0 -0
  391. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-5/01.webp +0 -0
  392. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-6/01.png +0 -0
  393. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-6/01.webp +0 -0
  394. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-7/01.png +0 -0
  395. package/packages/visualizer/fixtures/full/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-7/01.webp +0 -0
  396. package/packages/visualizer/fixtures/full/specs/coffee/ordering/checkout.scxml +82 -0
  397. package/packages/visualizer/fixtures/full/specs/coffee/ordering/journeys.yaml +129 -0
  398. package/packages/visualizer/fixtures/full/specs/coffee/ordering/known-issues.md +14 -0
  399. package/packages/visualizer/fixtures/full/specs/coffee/ordering/machine.yaml +158 -0
  400. package/packages/visualizer/fixtures/full/specs/coffee/ordering/open-questions.md +25 -0
  401. package/packages/visualizer/fixtures/large/runs/2026-10-06T14-40-00-000Z-fast/ctrf.json +1280 -0
  402. package/packages/visualizer/fixtures/large/runs/2026-10-06T14-40-00-000Z-fast/junit.xml +26 -0
  403. package/packages/visualizer/fixtures/large/runs/2026-10-06T14-40-00-000Z-fast/manifest.json +28393 -0
  404. package/packages/visualizer/fixtures/large/specs/accounts/sign-up/identity-check.machine.yaml +397 -0
  405. package/packages/visualizer/fixtures/large/specs/accounts/sign-up/journeys.yaml +129 -0
  406. package/packages/visualizer/fixtures/large/specs/accounts/sign-up/machine.yaml +830 -0
  407. package/packages/visualizer/fixtures/large/specs/atlas.yaml +65 -0
  408. package/packages/visualizer/fixtures/large/specs/billing/invoices/journeys.yaml +132 -0
  409. package/packages/visualizer/fixtures/large/specs/billing/invoices/machine.yaml +830 -0
  410. package/packages/visualizer/fixtures/large/specs/billing/invoices/refund-handling.scxml +288 -0
  411. package/packages/visualizer/fixtures/large/specs/catalog/browsing/journeys.yaml +126 -0
  412. package/packages/visualizer/fixtures/large/specs/catalog/browsing/machine.yaml +831 -0
  413. package/packages/visualizer/fixtures/large/specs/catalog/browsing/product-comparison.machine.yaml +395 -0
  414. package/packages/visualizer/fixtures/large/specs/orders/checkout/journeys.yaml +120 -0
  415. package/packages/visualizer/fixtures/large/specs/orders/checkout/machine.yaml +724 -0
  416. package/packages/visualizer/fixtures/large/specs/orders/checkout/open-questions.md +16 -0
  417. package/packages/visualizer/fixtures/large/specs/orders/checkout/payment.scxml +288 -0
  418. package/packages/visualizer/fixtures/large/specs/shipping/deliveries/delivery-scheduling.machine.yaml +397 -0
  419. package/packages/visualizer/fixtures/large/specs/shipping/deliveries/journeys.yaml +132 -0
  420. package/packages/visualizer/fixtures/large/specs/shipping/deliveries/known-issues.md +13 -0
  421. package/packages/visualizer/fixtures/large/specs/shipping/deliveries/machine.yaml +830 -0
  422. package/packages/visualizer/fixtures/large/specs/support/tickets/escalation.machine.yaml +395 -0
  423. package/packages/visualizer/fixtures/large/specs/support/tickets/journeys.yaml +123 -0
  424. package/packages/visualizer/fixtures/large/specs/support/tickets/machine.yaml +720 -0
  425. package/packages/visualizer/fixtures/malformed/runs/2026-10-06T10-00-00-000Z-showcase/manifest.json +68 -0
  426. package/packages/visualizer/fixtures/malformed/runs/2026-10-06T11-00-00-000Z-showcase/ctrf.json +50 -0
  427. package/packages/visualizer/fixtures/malformed/runs/2026-10-06T11-00-00-000Z-showcase/junit.xml +6 -0
  428. package/packages/visualizer/fixtures/malformed/runs/2026-10-06T11-00-00-000Z-showcase/manifest.json +1281 -0
  429. package/packages/visualizer/fixtures/malformed/runs/2026-10-06T12-00-00-000Z-showcase/ctrf.json +50 -0
  430. package/packages/visualizer/fixtures/malformed/runs/2026-10-06T12-00-00-000Z-showcase/junit.xml +6 -0
  431. package/packages/visualizer/fixtures/malformed/runs/2026-10-06T12-00-00-000Z-showcase/manifest.json +1232 -0
  432. package/packages/visualizer/fixtures/malformed/runs/2026-10-06T13-00-00-000Z-showcase/manifest.json +1244 -0
  433. package/packages/visualizer/fixtures/malformed/specs/coffee/ordering/checkout.scxml +82 -0
  434. package/packages/visualizer/fixtures/malformed/specs/coffee/ordering/journeys.yaml +134 -0
  435. package/packages/visualizer/fixtures/malformed/specs/coffee/ordering/known-issues.md +14 -0
  436. package/packages/visualizer/fixtures/malformed/specs/coffee/ordering/loyalty.scxml +4 -0
  437. package/packages/visualizer/fixtures/malformed/specs/coffee/ordering/machine.yaml +156 -0
  438. package/packages/visualizer/fixtures/malformed/specs/coffee/ordering/open-questions.md +25 -0
  439. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/chart.mmd +67 -0
  440. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/ctrf.json +149 -0
  441. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/junit.xml +9 -0
  442. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/manifest.json +1718 -0
  443. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/001.vtt +9 -0
  444. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/002.vtt +17 -0
  445. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/003.vtt +17 -0
  446. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/004.vtt +9 -0
  447. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/005.vtt +9 -0
  448. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/01.mp4 +0 -0
  449. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/01.poster.webp +0 -0
  450. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/02.mp4 +0 -0
  451. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/02.poster.webp +0 -0
  452. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/03.mp4 +0 -0
  453. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/03.poster.webp +0 -0
  454. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/01.png +0 -0
  455. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/01.webp +0 -0
  456. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/02.png +0 -0
  457. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/02.webp +0 -0
  458. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/03.png +0 -0
  459. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/03.webp +0 -0
  460. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/05.png +0 -0
  461. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/05.webp +0 -0
  462. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-3/01.png +0 -0
  463. package/packages/visualizer/fixtures/partial/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-3/01.webp +0 -0
  464. package/packages/visualizer/fixtures/partial/runs/2026-10-06T15-05-00-000Z-showcase/media/paths/journey-1/00-start-01.png +0 -0
  465. package/packages/visualizer/fixtures/partial/runs/2026-10-06T15-05-00-000Z-showcase/media/paths/journey-1/00-start-01.webp +0 -0
  466. package/packages/visualizer/fixtures/partial/runs/2026-10-06T15-05-00-000Z-showcase/media/paths/journey-1/02.png +0 -0
  467. package/packages/visualizer/fixtures/partial/runs/2026-10-06T15-05-00-000Z-showcase/media/paths/journey-1/02.webp +0 -0
  468. package/packages/visualizer/fixtures/partial/specs/coffee/ordering/checkout.scxml +82 -0
  469. package/packages/visualizer/fixtures/partial/specs/coffee/ordering/journeys.yaml +129 -0
  470. package/packages/visualizer/fixtures/partial/specs/coffee/ordering/known-issues.md +14 -0
  471. package/packages/visualizer/fixtures/partial/specs/coffee/ordering/machine.yaml +158 -0
  472. package/packages/visualizer/fixtures/partial/specs/coffee/ordering/open-questions.md +25 -0
  473. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/ctrf.json +79 -0
  474. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/junit.xml +7 -0
  475. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/manifest.json +1504 -0
  476. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/001.vtt +9 -0
  477. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/002.vtt +9 -0
  478. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/003.vtt +9 -0
  479. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/captions/004.vtt +17 -0
  480. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/01.mp4 +0 -0
  481. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/01.poster.webp +0 -0
  482. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/02.mp4 +0 -0
  483. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/clips/journey-1/02.poster.webp +0 -0
  484. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/01.png +0 -0
  485. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/01.webp +0 -0
  486. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/02.png +0 -0
  487. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/02.webp +0 -0
  488. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/03.png +0 -0
  489. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/03.webp +0 -0
  490. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/04.png +0 -0
  491. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-1/04.webp +0 -0
  492. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-2/01.png +0 -0
  493. package/packages/visualizer/fixtures/removed/runs/2026-10-06T14-40-00-000Z-showcase/media/paths/journey-2/01.webp +0 -0
  494. package/packages/visualizer/fixtures/removed/specs/coffee/ordering/checkout.scxml +82 -0
  495. package/packages/visualizer/fixtures/removed/specs/coffee/ordering/journeys.yaml +129 -0
  496. package/packages/visualizer/fixtures/removed/specs/coffee/ordering/known-issues.md +14 -0
  497. package/packages/visualizer/fixtures/removed/specs/coffee/ordering/machine.yaml +158 -0
  498. package/packages/visualizer/fixtures/removed/specs/coffee/ordering/open-questions.md +25 -0
  499. package/packages/visualizer/fixtures/spec-only/runs/.gitkeep +0 -0
  500. package/packages/visualizer/fixtures/spec-only/specs/coffee/ordering/checkout.scxml +82 -0
  501. package/packages/visualizer/fixtures/spec-only/specs/coffee/ordering/journeys.yaml +129 -0
  502. package/packages/visualizer/fixtures/spec-only/specs/coffee/ordering/known-issues.md +14 -0
  503. package/packages/visualizer/fixtures/spec-only/specs/coffee/ordering/machine.yaml +158 -0
  504. package/packages/visualizer/fixtures/spec-only/specs/coffee/ordering/open-questions.md +25 -0
  505. package/packages/visualizer/index.html +13 -0
  506. package/packages/visualizer/scripts/make-fixtures.ts +1490 -0
  507. package/packages/visualizer/scripts/publish-data.ts +22 -0
  508. package/packages/visualizer/src/app/AppShell.tsx +56 -0
  509. package/packages/visualizer/src/app/atlas-context.tsx +23 -0
  510. package/packages/visualizer/src/app/gazetteer.module.css +97 -0
  511. package/packages/visualizer/src/app/gazetteer.tsx +105 -0
  512. package/packages/visualizer/src/app/report-sources.tsx +122 -0
  513. package/packages/visualizer/src/app/router.tsx +69 -0
  514. package/packages/visualizer/src/app/search-query.tsx +14 -0
  515. package/packages/visualizer/src/components/DataIssues.module.css +136 -0
  516. package/packages/visualizer/src/components/DataIssues.tsx +70 -0
  517. package/packages/visualizer/src/components/Header.module.css +189 -0
  518. package/packages/visualizer/src/components/Header.tsx +127 -0
  519. package/packages/visualizer/src/components/Legend.module.css +84 -0
  520. package/packages/visualizer/src/components/Legend.tsx +50 -0
  521. package/packages/visualizer/src/components/Screen.module.css +312 -0
  522. package/packages/visualizer/src/components/Screen.tsx +141 -0
  523. package/packages/visualizer/src/components/Status.module.css +116 -0
  524. package/packages/visualizer/src/components/Status.tsx +60 -0
  525. package/packages/visualizer/src/components/icons.tsx +156 -0
  526. package/packages/visualizer/src/components/labels.tsx +22 -0
  527. package/packages/visualizer/src/data/adapters/adapter.ts +112 -0
  528. package/packages/visualizer/src/data/adapters/context.tsx +11 -0
  529. package/packages/visualizer/src/data/adapters/index.ts +29 -0
  530. package/packages/visualizer/src/data/adapters/report-backend.test.ts +96 -0
  531. package/packages/visualizer/src/data/adapters/report-backend.ts +42 -0
  532. package/packages/visualizer/src/data/fixtures.test.ts +407 -0
  533. package/packages/visualizer/src/data/model/build.ts +418 -0
  534. package/packages/visualizer/src/data/model/event-kind.test.ts +59 -0
  535. package/packages/visualizer/src/data/model/event-kind.ts +54 -0
  536. package/packages/visualizer/src/data/model/index.ts +3 -0
  537. package/packages/visualizer/src/data/model/journeys.test.ts +159 -0
  538. package/packages/visualizer/src/data/model/journeys.ts +29 -0
  539. package/packages/visualizer/src/data/model/simulation.test.ts +115 -0
  540. package/packages/visualizer/src/data/model/simulation.ts +187 -0
  541. package/packages/visualizer/src/data/model/status.test.ts +34 -0
  542. package/packages/visualizer/src/data/model/status.ts +43 -0
  543. package/packages/visualizer/src/data/model/types.ts +280 -0
  544. package/packages/visualizer/src/data/parse/issues.test.ts +82 -0
  545. package/packages/visualizer/src/data/parse/issues.ts +114 -0
  546. package/packages/visualizer/src/data/parse/manifest.ts +173 -0
  547. package/packages/visualizer/src/data/parse/markdown.test.ts +119 -0
  548. package/packages/visualizer/src/data/parse/markdown.ts +133 -0
  549. package/packages/visualizer/src/data/parse/spec.test.ts +106 -0
  550. package/packages/visualizer/src/data/parse/spec.ts +557 -0
  551. package/packages/visualizer/src/data/parse/structured.ts +44 -0
  552. package/packages/visualizer/src/data/queries.ts +369 -0
  553. package/packages/visualizer/src/data/testing/load-fixture.ts +63 -0
  554. package/packages/visualizer/src/evidence/api.ts +41 -0
  555. package/packages/visualizer/src/evidence/check-detail.tsx +257 -0
  556. package/packages/visualizer/src/evidence/decision-table.tsx +68 -0
  557. package/packages/visualizer/src/evidence/document-page.tsx +40 -0
  558. package/packages/visualizer/src/evidence/evidence-context.tsx +159 -0
  559. package/packages/visualizer/src/evidence/evidence.module.css +877 -0
  560. package/packages/visualizer/src/evidence/feature-page.tsx +88 -0
  561. package/packages/visualizer/src/evidence/format.ts +56 -0
  562. package/packages/visualizer/src/evidence/gherkin.ts +98 -0
  563. package/packages/visualizer/src/evidence/marks.tsx +118 -0
  564. package/packages/visualizer/src/evidence/model-page.tsx +60 -0
  565. package/packages/visualizer/src/evidence/model-trace.tsx +57 -0
  566. package/packages/visualizer/src/evidence/overview.tsx +134 -0
  567. package/packages/visualizer/src/evidence/quint.ts +45 -0
  568. package/packages/visualizer/src/evidence/recording-page.tsx +69 -0
  569. package/packages/visualizer/src/evidence/recording.module.css +464 -0
  570. package/packages/visualizer/src/evidence/recording.tsx +197 -0
  571. package/packages/visualizer/src/evidence/snapshot.tsx +108 -0
  572. package/packages/visualizer/src/evidence/sources-panel.tsx +134 -0
  573. package/packages/visualizer/src/evidence/sources.module.css +168 -0
  574. package/packages/visualizer/src/evidence/spec-header.tsx +64 -0
  575. package/packages/visualizer/src/evidence/spec-index.tsx +82 -0
  576. package/packages/visualizer/src/evidence/spec-page.tsx +92 -0
  577. package/packages/visualizer/src/evidence/spec-snapshot.tsx +26 -0
  578. package/packages/visualizer/src/layout/graph.test.ts +113 -0
  579. package/packages/visualizer/src/layout/graph.ts +324 -0
  580. package/packages/visualizer/src/layout/layout.ts +237 -0
  581. package/packages/visualizer/src/layout/use-chart-layout.ts +18 -0
  582. package/packages/visualizer/src/main.tsx +31 -0
  583. package/packages/visualizer/src/map/ChartMap.tsx +252 -0
  584. package/packages/visualizer/src/map/EventEdge.tsx +138 -0
  585. package/packages/visualizer/src/map/map.module.css +546 -0
  586. package/packages/visualizer/src/map/nodes.tsx +145 -0
  587. package/packages/visualizer/src/map/path.ts +24 -0
  588. package/packages/visualizer/src/reachable.test.ts +54 -0
  589. package/packages/visualizer/src/spec-kind.test.ts +27 -0
  590. package/packages/visualizer/src/spec-kind.ts +56 -0
  591. package/packages/visualizer/src/state/ui-store.ts +44 -0
  592. package/packages/visualizer/src/styles/global.css +105 -0
  593. package/packages/visualizer/src/styles/tokens.css +80 -0
  594. package/packages/visualizer/src/views/ChartPage.tsx +52 -0
  595. package/packages/visualizer/src/views/ProductPage.tsx +35 -0
  596. package/packages/visualizer/src/views/SidePanel.tsx +339 -0
  597. package/packages/visualizer/src/views/views.module.css +546 -0
  598. package/packages/visualizer/vite/atlas-dev-plugin.ts +169 -0
  599. package/packages/visualizer/vite/atlas-files.test.ts +119 -0
  600. package/packages/visualizer/vite/atlas-files.ts +199 -0
  601. package/packages/visualizer/vite/publish.test.ts +52 -0
  602. package/packages/visualizer/vite/publish.ts +99 -0
  603. package/packages/visualizer/vite/reports-dev-plugin.ts +82 -0
  604. package/packages/visualizer/vite.config.ts +13 -0
  605. package/packages/vitest/README.md +58 -0
  606. package/packages/webdriver/README.md +77 -0
@@ -0,0 +1,1244 @@
1
+ {
2
+ "$schema": "https://github.com/crvouga/atlas/schemas/manifest.schema.json",
3
+ "schemaVersion": 1,
4
+ "charts": [
5
+ {
6
+ "id": "Coffee order",
7
+ "file": "coffee/ordering/machine.yaml",
8
+ "description": "A customer picks a drink, pays for it, and picks it up when it is ready.",
9
+ "parentState": null,
10
+ "handOffs": {}
11
+ },
12
+ {
13
+ "id": "Checkout",
14
+ "file": "coffee/ordering/checkout.scxml",
15
+ "description": "Paying for the order, by card or with a wallet.",
16
+ "parentState": "Checking out",
17
+ "handOffs": {
18
+ "Paid": "Payment goes through",
19
+ "Checkout abandoned": "Leaves checkout"
20
+ }
21
+ }
22
+ ],
23
+ "map": {
24
+ "nodes": [
25
+ {
26
+ "id": "Browsing the menu",
27
+ "parent": null,
28
+ "chart": "Coffee order",
29
+ "type": "atomic",
30
+ "initial": null,
31
+ "inScope": false
32
+ },
33
+ {
34
+ "id": "Customizing the drink",
35
+ "parent": null,
36
+ "chart": "Coffee order",
37
+ "type": "compound",
38
+ "initial": "Choosing a size",
39
+ "inScope": false
40
+ },
41
+ {
42
+ "id": "Choosing a size",
43
+ "parent": "Customizing the drink",
44
+ "chart": "Coffee order",
45
+ "type": "atomic",
46
+ "initial": null,
47
+ "inScope": false
48
+ },
49
+ {
50
+ "id": "Choosing the milk",
51
+ "parent": "Customizing the drink",
52
+ "chart": "Coffee order",
53
+ "type": "atomic",
54
+ "initial": null,
55
+ "inScope": false
56
+ },
57
+ {
58
+ "id": "Ready to add the drink",
59
+ "parent": "Customizing the drink",
60
+ "chart": "Coffee order",
61
+ "type": "atomic",
62
+ "initial": null,
63
+ "inScope": false
64
+ },
65
+ {
66
+ "id": "Reviewing the cart",
67
+ "parent": null,
68
+ "chart": "Coffee order",
69
+ "type": "atomic",
70
+ "initial": null,
71
+ "inScope": true
72
+ },
73
+ {
74
+ "id": "Checking out",
75
+ "parent": null,
76
+ "chart": "Coffee order",
77
+ "type": "atomic",
78
+ "initial": null,
79
+ "inScope": true
80
+ },
81
+ {
82
+ "id": "Order in progress",
83
+ "parent": null,
84
+ "chart": "Coffee order",
85
+ "type": "parallel",
86
+ "initial": null,
87
+ "inScope": true
88
+ },
89
+ {
90
+ "id": "Drink",
91
+ "parent": "Order in progress",
92
+ "chart": "Coffee order",
93
+ "type": "compound",
94
+ "initial": "Paid, waiting for the barista",
95
+ "inScope": false
96
+ },
97
+ {
98
+ "id": "Paid, waiting for the barista",
99
+ "parent": "Drink",
100
+ "chart": "Coffee order",
101
+ "type": "atomic",
102
+ "initial": null,
103
+ "inScope": false
104
+ },
105
+ {
106
+ "id": "Drink being made",
107
+ "parent": "Drink",
108
+ "chart": "Coffee order",
109
+ "type": "atomic",
110
+ "initial": null,
111
+ "inScope": false
112
+ },
113
+ {
114
+ "id": "Drink ready for pickup",
115
+ "parent": "Drink",
116
+ "chart": "Coffee order",
117
+ "type": "atomic",
118
+ "initial": null,
119
+ "inScope": false
120
+ },
121
+ {
122
+ "id": "Updates",
123
+ "parent": "Order in progress",
124
+ "chart": "Coffee order",
125
+ "type": "compound",
126
+ "initial": "Updates on",
127
+ "inScope": false
128
+ },
129
+ {
130
+ "id": "Updates on",
131
+ "parent": "Updates",
132
+ "chart": "Coffee order",
133
+ "type": "atomic",
134
+ "initial": null,
135
+ "inScope": false
136
+ },
137
+ {
138
+ "id": "Updates off",
139
+ "parent": "Updates",
140
+ "chart": "Coffee order",
141
+ "type": "atomic",
142
+ "initial": null,
143
+ "inScope": false
144
+ },
145
+ {
146
+ "id": "Told the drink was thrown away",
147
+ "parent": null,
148
+ "chart": "Coffee order",
149
+ "type": "atomic",
150
+ "initial": null,
151
+ "inScope": false
152
+ },
153
+ {
154
+ "id": "Order complete",
155
+ "parent": null,
156
+ "chart": "Coffee order",
157
+ "type": "final",
158
+ "initial": null,
159
+ "inScope": false
160
+ },
161
+ {
162
+ "id": "Choosing how to pay",
163
+ "parent": null,
164
+ "chart": "Checkout",
165
+ "type": "atomic",
166
+ "initial": null,
167
+ "inScope": true
168
+ },
169
+ {
170
+ "id": "Entering card details",
171
+ "parent": null,
172
+ "chart": "Checkout",
173
+ "type": "atomic",
174
+ "initial": null,
175
+ "inScope": true
176
+ },
177
+ {
178
+ "id": "Confirming with the wallet",
179
+ "parent": null,
180
+ "chart": "Checkout",
181
+ "type": "atomic",
182
+ "initial": null,
183
+ "inScope": true
184
+ },
185
+ {
186
+ "id": "Waiting for the payment",
187
+ "parent": null,
188
+ "chart": "Checkout",
189
+ "type": "atomic",
190
+ "initial": null,
191
+ "inScope": true
192
+ },
193
+ {
194
+ "id": "Told the payment is slow",
195
+ "parent": null,
196
+ "chart": "Checkout",
197
+ "type": "atomic",
198
+ "initial": null,
199
+ "inScope": true
200
+ },
201
+ {
202
+ "id": "Told the payment was declined",
203
+ "parent": null,
204
+ "chart": "Checkout",
205
+ "type": "atomic",
206
+ "initial": null,
207
+ "inScope": true
208
+ },
209
+ {
210
+ "id": "Paid",
211
+ "parent": null,
212
+ "chart": "Checkout",
213
+ "type": "final",
214
+ "initial": null,
215
+ "inScope": true
216
+ },
217
+ {
218
+ "id": "Checkout abandoned",
219
+ "parent": null,
220
+ "chart": "Checkout",
221
+ "type": "final",
222
+ "initial": null,
223
+ "inScope": true
224
+ }
225
+ ],
226
+ "edges": [
227
+ {
228
+ "id": "Browsing the menu :: Picks a drink",
229
+ "source": "Browsing the menu",
230
+ "target": "Customizing the drink",
231
+ "event": "Picks a drink",
232
+ "kind": "user",
233
+ "inScope": false
234
+ },
235
+ {
236
+ "id": "Choosing a size :: Picks a size",
237
+ "source": "Choosing a size",
238
+ "target": "Choosing the milk",
239
+ "event": "Picks a size",
240
+ "kind": "user",
241
+ "inScope": false
242
+ },
243
+ {
244
+ "id": "Choosing the milk :: Picks a milk",
245
+ "source": "Choosing the milk",
246
+ "target": "Ready to add the drink",
247
+ "event": "Picks a milk",
248
+ "kind": "user",
249
+ "inScope": false
250
+ },
251
+ {
252
+ "id": "Ready to add the drink :: Adds the drink to the cart",
253
+ "source": "Ready to add the drink",
254
+ "target": "Reviewing the cart",
255
+ "event": "Adds the drink to the cart",
256
+ "kind": "user",
257
+ "inScope": false
258
+ },
259
+ {
260
+ "id": "Customizing the drink :: Goes back to the menu",
261
+ "source": "Customizing the drink",
262
+ "target": "Browsing the menu",
263
+ "event": "Goes back to the menu",
264
+ "kind": "user",
265
+ "inScope": false
266
+ },
267
+ {
268
+ "id": "Reviewing the cart :: Removes the last drink",
269
+ "source": "Reviewing the cart",
270
+ "target": "Browsing the menu",
271
+ "event": "Removes the last drink",
272
+ "kind": "user",
273
+ "inScope": false
274
+ },
275
+ {
276
+ "id": "Reviewing the cart :: Starts checkout",
277
+ "source": "Reviewing the cart",
278
+ "target": "Checking out",
279
+ "event": "Starts checkout",
280
+ "kind": "user",
281
+ "inScope": true
282
+ },
283
+ {
284
+ "id": "Paid, waiting for the barista :: Barista starts the drink",
285
+ "source": "Paid, waiting for the barista",
286
+ "target": "Drink being made",
287
+ "event": "Barista starts the drink",
288
+ "kind": "system",
289
+ "inScope": false
290
+ },
291
+ {
292
+ "id": "Drink being made :: Barista finishes the drink",
293
+ "source": "Drink being made",
294
+ "target": "Drink ready for pickup",
295
+ "event": "Barista finishes the drink",
296
+ "kind": "system",
297
+ "inScope": false
298
+ },
299
+ {
300
+ "id": "Drink ready for pickup :: Picks up the drink",
301
+ "source": "Drink ready for pickup",
302
+ "target": "Order complete",
303
+ "event": "Picks up the drink",
304
+ "kind": "user",
305
+ "inScope": false
306
+ },
307
+ {
308
+ "id": "Drink ready for pickup :: Drink sits ready for ten minutes",
309
+ "source": "Drink ready for pickup",
310
+ "target": "Told the drink was thrown away",
311
+ "event": "Drink sits ready for ten minutes",
312
+ "kind": "time",
313
+ "inScope": false
314
+ },
315
+ {
316
+ "id": "Updates on :: Turns off updates",
317
+ "source": "Updates on",
318
+ "target": "Updates off",
319
+ "event": "Turns off updates",
320
+ "kind": "user",
321
+ "inScope": false
322
+ },
323
+ {
324
+ "id": "Updates off :: Turns on updates",
325
+ "source": "Updates off",
326
+ "target": "Updates on",
327
+ "event": "Turns on updates",
328
+ "kind": "user",
329
+ "inScope": false
330
+ },
331
+ {
332
+ "id": "Told the drink was thrown away :: Orders again",
333
+ "source": "Told the drink was thrown away",
334
+ "target": "Browsing the menu",
335
+ "event": "Orders again",
336
+ "kind": "user",
337
+ "inScope": false
338
+ },
339
+ {
340
+ "id": "Choosing how to pay :: Picks card",
341
+ "source": "Choosing how to pay",
342
+ "target": "Entering card details",
343
+ "event": "Picks card",
344
+ "kind": "user",
345
+ "inScope": true
346
+ },
347
+ {
348
+ "id": "Choosing how to pay :: Picks wallet",
349
+ "source": "Choosing how to pay",
350
+ "target": "Confirming with the wallet",
351
+ "event": "Picks wallet",
352
+ "kind": "user",
353
+ "inScope": true
354
+ },
355
+ {
356
+ "id": "Choosing how to pay :: Closes checkout",
357
+ "source": "Choosing how to pay",
358
+ "target": "Checkout abandoned",
359
+ "event": "Closes checkout",
360
+ "kind": "user",
361
+ "inScope": true
362
+ },
363
+ {
364
+ "id": "Entering card details :: Submits the card",
365
+ "source": "Entering card details",
366
+ "target": "Waiting for the payment",
367
+ "event": "Submits the card",
368
+ "kind": "user",
369
+ "inScope": true
370
+ },
371
+ {
372
+ "id": "Entering card details :: Goes back to the payment options",
373
+ "source": "Entering card details",
374
+ "target": "Choosing how to pay",
375
+ "event": "Goes back to the payment options",
376
+ "kind": "user",
377
+ "inScope": true
378
+ },
379
+ {
380
+ "id": "Confirming with the wallet :: Confirms with the wallet",
381
+ "source": "Confirming with the wallet",
382
+ "target": "Waiting for the payment",
383
+ "event": "Confirms with the wallet",
384
+ "kind": "user",
385
+ "inScope": true
386
+ },
387
+ {
388
+ "id": "Confirming with the wallet :: Cancels the wallet",
389
+ "source": "Confirming with the wallet",
390
+ "target": "Choosing how to pay",
391
+ "event": "Cancels the wallet",
392
+ "kind": "user",
393
+ "inScope": true
394
+ },
395
+ {
396
+ "id": "Waiting for the payment :: Payment provider approves the payment",
397
+ "source": "Waiting for the payment",
398
+ "target": "Paid",
399
+ "event": "Payment provider approves the payment",
400
+ "kind": "system",
401
+ "inScope": true
402
+ },
403
+ {
404
+ "id": "Waiting for the payment :: Payment provider declines the payment",
405
+ "source": "Waiting for the payment",
406
+ "target": "Told the payment was declined",
407
+ "event": "Payment provider declines the payment",
408
+ "kind": "system",
409
+ "inScope": true
410
+ },
411
+ {
412
+ "id": "Waiting for the payment :: Payment takes longer than a minute",
413
+ "source": "Waiting for the payment",
414
+ "target": "Told the payment is slow",
415
+ "event": "Payment takes longer than a minute",
416
+ "kind": "time",
417
+ "inScope": true
418
+ },
419
+ {
420
+ "id": "Told the payment is slow :: Checks the payment again",
421
+ "source": "Told the payment is slow",
422
+ "target": "Waiting for the payment",
423
+ "event": "Checks the payment again",
424
+ "kind": "user",
425
+ "inScope": true
426
+ },
427
+ {
428
+ "id": "Told the payment was declined :: Tries another way to pay",
429
+ "source": "Told the payment was declined",
430
+ "target": "Choosing how to pay",
431
+ "event": "Tries another way to pay",
432
+ "kind": "user",
433
+ "inScope": true
434
+ },
435
+ {
436
+ "id": "Paid :: Payment goes through",
437
+ "source": "Paid",
438
+ "target": "Order in progress",
439
+ "event": "Payment goes through",
440
+ "kind": "hand-off",
441
+ "inScope": true
442
+ },
443
+ {
444
+ "id": "Checkout abandoned :: Leaves checkout",
445
+ "source": "Checkout abandoned",
446
+ "target": "Reviewing the cart",
447
+ "event": "Leaves checkout",
448
+ "kind": "hand-off",
449
+ "inScope": true
450
+ }
451
+ ]
452
+ },
453
+ "states": {
454
+ "Reviewing the cart": {
455
+ "name": "Reviewing the cart",
456
+ "chart": "Coffee order",
457
+ "description": "The drinks in the cart, the total, and a checkout button.",
458
+ "snapshot": "cart",
459
+ "confidence": "confirmed",
460
+ "source": [],
461
+ "expectedEvents": [],
462
+ "status": "passed",
463
+ "screenshot": null,
464
+ "screenshotsByPath": {},
465
+ "recognizer": {
466
+ "matched": true,
467
+ "signals": [
468
+ {
469
+ "signal": "test ID \"cart\"",
470
+ "expected": "visible",
471
+ "visible": true
472
+ }
473
+ ]
474
+ },
475
+ "looksLike": [],
476
+ "businessEvents": null,
477
+ "checks": [
478
+ {
479
+ "check": "The screen shows \"Reviewing the cart\"",
480
+ "passed": true,
481
+ "expected": "test ID \"cart\" visible",
482
+ "actual": "visible"
483
+ }
484
+ ],
485
+ "reachedBy": [
486
+ "journey-1"
487
+ ],
488
+ "notes": [
489
+ "Shown too briefly to capture; not seeing it is not a failure."
490
+ ]
491
+ },
492
+ "Checking out": {
493
+ "name": "Checking out",
494
+ "chart": "Coffee order",
495
+ "description": "Checkout runs as its own chart.",
496
+ "snapshot": "checking-out",
497
+ "confidence": "confirmed",
498
+ "source": [],
499
+ "expectedEvents": [],
500
+ "status": "passed",
501
+ "screenshot": null,
502
+ "screenshotsByPath": {},
503
+ "recognizer": {
504
+ "matched": true,
505
+ "signals": [
506
+ {
507
+ "signal": "test ID \"checking-out\"",
508
+ "expected": "visible",
509
+ "visible": true
510
+ }
511
+ ]
512
+ },
513
+ "looksLike": [],
514
+ "businessEvents": null,
515
+ "checks": [],
516
+ "reachedBy": [
517
+ "journey-1"
518
+ ],
519
+ "notes": []
520
+ },
521
+ "Order in progress": {
522
+ "name": "Order in progress",
523
+ "chart": "Coffee order",
524
+ "description": "The drink is made while the customer chooses how to hear about it.",
525
+ "snapshot": "order-in-progress",
526
+ "confidence": "confirmed",
527
+ "source": [],
528
+ "expectedEvents": [],
529
+ "status": "passed",
530
+ "screenshot": null,
531
+ "screenshotsByPath": {},
532
+ "recognizer": {
533
+ "matched": true,
534
+ "signals": [
535
+ {
536
+ "signal": "test ID \"order-in-progress\"",
537
+ "expected": "visible",
538
+ "visible": true
539
+ }
540
+ ]
541
+ },
542
+ "looksLike": [],
543
+ "businessEvents": null,
544
+ "checks": [],
545
+ "reachedBy": [
546
+ "journey-1"
547
+ ],
548
+ "notes": []
549
+ },
550
+ "Choosing how to pay": {
551
+ "name": "Choosing how to pay",
552
+ "chart": "Checkout",
553
+ "description": "Card and wallet buttons, and the order total.",
554
+ "snapshot": "pay-options",
555
+ "confidence": "confirmed",
556
+ "source": [],
557
+ "expectedEvents": [],
558
+ "status": "passed",
559
+ "screenshot": null,
560
+ "screenshotsByPath": {},
561
+ "recognizer": {
562
+ "matched": true,
563
+ "signals": [
564
+ {
565
+ "signal": "test ID \"pay-options\"",
566
+ "expected": "visible",
567
+ "visible": true
568
+ }
569
+ ]
570
+ },
571
+ "looksLike": [],
572
+ "businessEvents": null,
573
+ "checks": [
574
+ {
575
+ "check": "The screen shows \"Choosing how to pay\"",
576
+ "passed": true,
577
+ "expected": "test ID \"pay-options\" visible",
578
+ "actual": "visible"
579
+ }
580
+ ],
581
+ "reachedBy": [
582
+ "journey-1"
583
+ ],
584
+ "notes": [
585
+ "Shown too briefly to capture; not seeing it is not a failure."
586
+ ]
587
+ },
588
+ "Entering card details": {
589
+ "name": "Entering card details",
590
+ "chart": "Checkout",
591
+ "description": "A form for the card number, expiry and code.",
592
+ "snapshot": "card-form",
593
+ "confidence": "confirmed",
594
+ "source": [],
595
+ "expectedEvents": [],
596
+ "status": "passed",
597
+ "screenshot": null,
598
+ "screenshotsByPath": {},
599
+ "recognizer": {
600
+ "matched": true,
601
+ "signals": [
602
+ {
603
+ "signal": "test ID \"card-form\"",
604
+ "expected": "visible",
605
+ "visible": true
606
+ }
607
+ ]
608
+ },
609
+ "looksLike": [],
610
+ "businessEvents": null,
611
+ "checks": [
612
+ {
613
+ "check": "The screen shows \"Entering card details\"",
614
+ "passed": true,
615
+ "expected": "test ID \"card-form\" visible",
616
+ "actual": "visible"
617
+ }
618
+ ],
619
+ "reachedBy": [
620
+ "journey-1"
621
+ ],
622
+ "notes": [
623
+ "Shown too briefly to capture; not seeing it is not a failure."
624
+ ]
625
+ },
626
+ "Confirming with the wallet": {
627
+ "name": "Confirming with the wallet",
628
+ "chart": "Checkout",
629
+ "description": "The wallet sheet asks the customer to confirm the payment.",
630
+ "snapshot": "wallet-sheet",
631
+ "confidence": "confirmed",
632
+ "source": [],
633
+ "expectedEvents": [],
634
+ "status": "not-reached",
635
+ "screenshot": null,
636
+ "screenshotsByPath": {},
637
+ "recognizer": null,
638
+ "looksLike": [],
639
+ "businessEvents": null,
640
+ "checks": [],
641
+ "reachedBy": [],
642
+ "notes": []
643
+ },
644
+ "Waiting for the payment": {
645
+ "name": "Waiting for the payment",
646
+ "chart": "Checkout",
647
+ "description": "A spinner while the payment provider answers.",
648
+ "snapshot": "paying",
649
+ "confidence": "confirmed",
650
+ "source": [],
651
+ "expectedEvents": [
652
+ "Payment requested"
653
+ ],
654
+ "status": "passed",
655
+ "screenshot": null,
656
+ "screenshotsByPath": {},
657
+ "recognizer": {
658
+ "matched": true,
659
+ "signals": [
660
+ {
661
+ "signal": "test ID \"paying\"",
662
+ "expected": "visible",
663
+ "visible": true
664
+ }
665
+ ]
666
+ },
667
+ "looksLike": [],
668
+ "businessEvents": {
669
+ "expected": [
670
+ "Payment requested"
671
+ ],
672
+ "observed": [
673
+ "Payment requested"
674
+ ],
675
+ "missing": [],
676
+ "noSignal": [],
677
+ "events": [
678
+ {
679
+ "specversion": "1.0",
680
+ "id": "77cd9167585f23e5ed83",
681
+ "source": "/fixture/orders",
682
+ "type": "com.example.payment.requested",
683
+ "time": "2026-10-06T13:04:00.000Z",
684
+ "subject": "order-fixture-68572b",
685
+ "datacontenttype": "application/json",
686
+ "data": {
687
+ "name": "Payment requested"
688
+ }
689
+ }
690
+ ]
691
+ },
692
+ "checks": [
693
+ {
694
+ "check": "The screen shows \"Waiting for the payment\"",
695
+ "passed": true,
696
+ "expected": "test ID \"paying\" visible",
697
+ "actual": "visible"
698
+ }
699
+ ],
700
+ "reachedBy": [
701
+ "journey-1"
702
+ ],
703
+ "notes": [
704
+ "Shown too briefly to capture; not seeing it is not a failure."
705
+ ]
706
+ },
707
+ "Told the payment is slow": {
708
+ "name": "Told the payment is slow",
709
+ "chart": "Checkout",
710
+ "description": "A message says the payment is taking longer than usual, with \"Check again\".",
711
+ "snapshot": "paying-slow",
712
+ "confidence": "assumed",
713
+ "source": [],
714
+ "expectedEvents": [],
715
+ "status": "not-reached",
716
+ "screenshot": null,
717
+ "screenshotsByPath": {},
718
+ "recognizer": null,
719
+ "looksLike": [],
720
+ "businessEvents": null,
721
+ "checks": [],
722
+ "reachedBy": [],
723
+ "notes": []
724
+ },
725
+ "Told the payment was declined": {
726
+ "name": "Told the payment was declined",
727
+ "chart": "Checkout",
728
+ "description": "A message says the payment was declined, with \"Try another way\".",
729
+ "snapshot": "payment-declined",
730
+ "confidence": "confirmed",
731
+ "source": [],
732
+ "expectedEvents": [
733
+ "Payment declined"
734
+ ],
735
+ "status": "not-reached",
736
+ "screenshot": null,
737
+ "screenshotsByPath": {},
738
+ "recognizer": null,
739
+ "looksLike": [],
740
+ "businessEvents": null,
741
+ "checks": [],
742
+ "reachedBy": [],
743
+ "notes": []
744
+ },
745
+ "Paid": {
746
+ "name": "Paid",
747
+ "chart": "Checkout",
748
+ "description": "A check mark confirms the payment.",
749
+ "snapshot": "paid",
750
+ "confidence": "confirmed",
751
+ "source": [],
752
+ "expectedEvents": [
753
+ "Payment captured"
754
+ ],
755
+ "status": "passed",
756
+ "screenshot": null,
757
+ "screenshotsByPath": {},
758
+ "recognizer": {
759
+ "matched": true,
760
+ "signals": [
761
+ {
762
+ "signal": "test ID \"paid\"",
763
+ "expected": "visible",
764
+ "visible": true
765
+ }
766
+ ]
767
+ },
768
+ "looksLike": [],
769
+ "businessEvents": {
770
+ "expected": [
771
+ "Payment captured"
772
+ ],
773
+ "observed": [
774
+ "Payment captured"
775
+ ],
776
+ "missing": [],
777
+ "noSignal": [],
778
+ "events": [
779
+ {
780
+ "specversion": "1.0",
781
+ "id": "53a19439633de9154544",
782
+ "source": "/fixture/orders",
783
+ "type": "com.example.payment.captured",
784
+ "time": "2026-10-06T13:05:00.000Z",
785
+ "subject": "order-fixture-68572b",
786
+ "datacontenttype": "application/json",
787
+ "data": {
788
+ "name": "Payment captured"
789
+ }
790
+ }
791
+ ]
792
+ },
793
+ "checks": [
794
+ {
795
+ "check": "The screen shows \"Paid\"",
796
+ "passed": true,
797
+ "expected": "test ID \"paid\" visible",
798
+ "actual": "visible"
799
+ }
800
+ ],
801
+ "reachedBy": [
802
+ "journey-1"
803
+ ],
804
+ "notes": [
805
+ "Shown too briefly to capture; not seeing it is not a failure."
806
+ ]
807
+ },
808
+ "Checkout abandoned": {
809
+ "name": "Checkout abandoned",
810
+ "chart": "Checkout",
811
+ "description": "Checkout closes and the cart is kept.",
812
+ "snapshot": "checkout-closed",
813
+ "confidence": "confirmed",
814
+ "source": [],
815
+ "expectedEvents": [],
816
+ "status": "not-reached",
817
+ "screenshot": null,
818
+ "screenshotsByPath": {},
819
+ "recognizer": null,
820
+ "looksLike": [],
821
+ "businessEvents": null,
822
+ "checks": [],
823
+ "reachedBy": [],
824
+ "notes": []
825
+ }
826
+ },
827
+ "transitions": {
828
+ "Reviewing the cart :: Starts checkout": {
829
+ "id": "Reviewing the cart :: Starts checkout",
830
+ "source": "Reviewing the cart",
831
+ "target": "Checking out",
832
+ "event": "Starts checkout",
833
+ "kind": "user",
834
+ "how": "The user starts checkout in the app.",
835
+ "status": "passed",
836
+ "clip": null,
837
+ "timeline": [
838
+ {
839
+ "atMs": 700,
840
+ "kind": "tap",
841
+ "label": "Start checkout",
842
+ "x": 57,
843
+ "y": 738
844
+ },
845
+ {
846
+ "atMs": 2100,
847
+ "kind": "screen",
848
+ "label": "Now: Checking out"
849
+ }
850
+ ],
851
+ "reason": null,
852
+ "reachedBy": [
853
+ "journey-1"
854
+ ]
855
+ },
856
+ "Choosing how to pay :: Picks card": {
857
+ "id": "Choosing how to pay :: Picks card",
858
+ "source": "Choosing how to pay",
859
+ "target": "Entering card details",
860
+ "event": "Picks card",
861
+ "kind": "user",
862
+ "how": "The user picks card in the app.",
863
+ "status": "passed",
864
+ "clip": null,
865
+ "timeline": [
866
+ {
867
+ "atMs": 700,
868
+ "kind": "tap",
869
+ "label": "Pick card",
870
+ "x": 331,
871
+ "y": 749
872
+ },
873
+ {
874
+ "atMs": 2100,
875
+ "kind": "screen",
876
+ "label": "Now: Entering card details"
877
+ }
878
+ ],
879
+ "reason": null,
880
+ "reachedBy": [
881
+ "journey-1"
882
+ ]
883
+ },
884
+ "Choosing how to pay :: Picks wallet": {
885
+ "id": "Choosing how to pay :: Picks wallet",
886
+ "source": "Choosing how to pay",
887
+ "target": "Confirming with the wallet",
888
+ "event": "Picks wallet",
889
+ "kind": "user",
890
+ "how": null,
891
+ "status": "not-reached",
892
+ "clip": null,
893
+ "timeline": [],
894
+ "reason": "No path reached it.",
895
+ "reachedBy": []
896
+ },
897
+ "Choosing how to pay :: Closes checkout": {
898
+ "id": "Choosing how to pay :: Closes checkout",
899
+ "source": "Choosing how to pay",
900
+ "target": "Checkout abandoned",
901
+ "event": "Closes checkout",
902
+ "kind": "user",
903
+ "how": null,
904
+ "status": "not-reached",
905
+ "clip": null,
906
+ "timeline": [],
907
+ "reason": "No path reached it.",
908
+ "reachedBy": []
909
+ },
910
+ "Entering card details :: Submits the card": {
911
+ "id": "Entering card details :: Submits the card",
912
+ "source": "Entering card details",
913
+ "target": "Waiting for the payment",
914
+ "event": "Submits the card",
915
+ "kind": "user",
916
+ "how": "The user submits the card in the app.",
917
+ "status": "passed",
918
+ "clip": null,
919
+ "timeline": [
920
+ {
921
+ "atMs": 300,
922
+ "kind": "tap",
923
+ "label": "Card number",
924
+ "x": 195,
925
+ "y": 308
926
+ },
927
+ {
928
+ "atMs": 650,
929
+ "kind": "type",
930
+ "label": "Card number",
931
+ "text": "4242 4242 4242 4242"
932
+ },
933
+ {
934
+ "atMs": 1500,
935
+ "kind": "tap",
936
+ "label": "Submit the card",
937
+ "x": 59,
938
+ "y": 631
939
+ },
940
+ {
941
+ "atMs": 2100,
942
+ "kind": "screen",
943
+ "label": "Now: Waiting for the payment"
944
+ }
945
+ ],
946
+ "reason": null,
947
+ "reachedBy": [
948
+ "journey-1"
949
+ ]
950
+ },
951
+ "Entering card details :: Goes back to the payment options": {
952
+ "id": "Entering card details :: Goes back to the payment options",
953
+ "source": "Entering card details",
954
+ "target": "Choosing how to pay",
955
+ "event": "Goes back to the payment options",
956
+ "kind": "user",
957
+ "how": null,
958
+ "status": "not-reached",
959
+ "clip": null,
960
+ "timeline": [],
961
+ "reason": "No path reached it.",
962
+ "reachedBy": []
963
+ },
964
+ "Confirming with the wallet :: Confirms with the wallet": {
965
+ "id": "Confirming with the wallet :: Confirms with the wallet",
966
+ "source": "Confirming with the wallet",
967
+ "target": "Waiting for the payment",
968
+ "event": "Confirms with the wallet",
969
+ "kind": "user",
970
+ "how": null,
971
+ "status": "not-reached",
972
+ "clip": null,
973
+ "timeline": [],
974
+ "reason": "No path reached it.",
975
+ "reachedBy": []
976
+ },
977
+ "Confirming with the wallet :: Cancels the wallet": {
978
+ "id": "Confirming with the wallet :: Cancels the wallet",
979
+ "source": "Confirming with the wallet",
980
+ "target": "Choosing how to pay",
981
+ "event": "Cancels the wallet",
982
+ "kind": "user",
983
+ "how": null,
984
+ "status": "not-reached",
985
+ "clip": null,
986
+ "timeline": [],
987
+ "reason": "No path reached it.",
988
+ "reachedBy": []
989
+ },
990
+ "Waiting for the payment :: Payment provider approves the payment": {
991
+ "id": "Waiting for the payment :: Payment provider approves the payment",
992
+ "source": "Waiting for the payment",
993
+ "target": "Paid",
994
+ "event": "Payment provider approves the payment",
995
+ "kind": "system",
996
+ "how": "The fixture sends POST /webhooks/payments as Payment provider webhook.",
997
+ "status": "passed",
998
+ "clip": null,
999
+ "timeline": [
1000
+ {
1001
+ "atMs": 400,
1002
+ "kind": "note",
1003
+ "label": "The user waits on this screen"
1004
+ },
1005
+ {
1006
+ "atMs": 900,
1007
+ "kind": "system",
1008
+ "label": "Payment provider approves the payment",
1009
+ "system": {
1010
+ "source": "Payment provider webhook",
1011
+ "endpoint": "POST /webhooks/payments",
1012
+ "eventType": "payment.approved",
1013
+ "payload": {
1014
+ "type": "payment.approved",
1015
+ "data": {
1016
+ "paymentId": "pay_fixture_0004",
1017
+ "status": "approved"
1018
+ }
1019
+ },
1020
+ "responseStatus": 200
1021
+ }
1022
+ },
1023
+ {
1024
+ "atMs": 1300,
1025
+ "kind": "notification",
1026
+ "label": "Approved",
1027
+ "notification": {
1028
+ "channel": "push",
1029
+ "title": "Approved",
1030
+ "body": "Next: paid."
1031
+ }
1032
+ },
1033
+ {
1034
+ "atMs": 1900,
1035
+ "kind": "screen",
1036
+ "label": "Now: Paid"
1037
+ }
1038
+ ],
1039
+ "reason": null,
1040
+ "reachedBy": [
1041
+ "journey-1"
1042
+ ]
1043
+ },
1044
+ "Waiting for the payment :: Payment provider declines the payment": {
1045
+ "id": "Waiting for the payment :: Payment provider declines the payment",
1046
+ "source": "Waiting for the payment",
1047
+ "target": "Told the payment was declined",
1048
+ "event": "Payment provider declines the payment",
1049
+ "kind": "system",
1050
+ "how": null,
1051
+ "status": "not-reached",
1052
+ "clip": null,
1053
+ "timeline": [],
1054
+ "reason": "No path reached it.",
1055
+ "reachedBy": []
1056
+ },
1057
+ "Waiting for the payment :: Payment takes longer than a minute": {
1058
+ "id": "Waiting for the payment :: Payment takes longer than a minute",
1059
+ "source": "Waiting for the payment",
1060
+ "target": "Told the payment is slow",
1061
+ "event": "Payment takes longer than a minute",
1062
+ "kind": "time",
1063
+ "how": null,
1064
+ "status": "not-reached",
1065
+ "clip": null,
1066
+ "timeline": [],
1067
+ "reason": "No path reached it.",
1068
+ "reachedBy": []
1069
+ },
1070
+ "Told the payment is slow :: Checks the payment again": {
1071
+ "id": "Told the payment is slow :: Checks the payment again",
1072
+ "source": "Told the payment is slow",
1073
+ "target": "Waiting for the payment",
1074
+ "event": "Checks the payment again",
1075
+ "kind": "user",
1076
+ "how": null,
1077
+ "status": "not-reached",
1078
+ "clip": null,
1079
+ "timeline": [],
1080
+ "reason": "No path reached it.",
1081
+ "reachedBy": []
1082
+ },
1083
+ "Told the payment was declined :: Tries another way to pay": {
1084
+ "id": "Told the payment was declined :: Tries another way to pay",
1085
+ "source": "Told the payment was declined",
1086
+ "target": "Choosing how to pay",
1087
+ "event": "Tries another way to pay",
1088
+ "kind": "user",
1089
+ "how": null,
1090
+ "status": "not-reached",
1091
+ "clip": null,
1092
+ "timeline": [],
1093
+ "reason": "No path reached it.",
1094
+ "reachedBy": []
1095
+ },
1096
+ "Paid :: Payment goes through": {
1097
+ "id": "Paid :: Payment goes through",
1098
+ "source": "Paid",
1099
+ "target": "Order in progress",
1100
+ "event": "Payment goes through",
1101
+ "kind": "hand-off",
1102
+ "how": "The child chart reached an end, so the parent chart moves on.",
1103
+ "status": "passed",
1104
+ "clip": null,
1105
+ "timeline": [
1106
+ {
1107
+ "atMs": 200,
1108
+ "kind": "note",
1109
+ "label": "Checkout is done and hands back with \"Payment goes through\""
1110
+ },
1111
+ {
1112
+ "atMs": 700,
1113
+ "kind": "screen",
1114
+ "label": "Now: Order in progress"
1115
+ }
1116
+ ],
1117
+ "reason": null,
1118
+ "reachedBy": [
1119
+ "journey-1"
1120
+ ]
1121
+ },
1122
+ "Checkout abandoned :: Leaves checkout": {
1123
+ "id": "Checkout abandoned :: Leaves checkout",
1124
+ "source": "Checkout abandoned",
1125
+ "target": "Reviewing the cart",
1126
+ "event": "Leaves checkout",
1127
+ "kind": "hand-off",
1128
+ "how": null,
1129
+ "status": "not-reached",
1130
+ "clip": null,
1131
+ "timeline": [],
1132
+ "reason": "No path reached it.",
1133
+ "reachedBy": []
1134
+ }
1135
+ },
1136
+ "paths": [
1137
+ {
1138
+ "id": "journey-1",
1139
+ "name": "Orders a drink and pays by card",
1140
+ "kind": "journey",
1141
+ "description": "The everyday order, from the menu to picking the drink up.",
1142
+ "status": "passed",
1143
+ "attempts": [
1144
+ {
1145
+ "status": "passed",
1146
+ "error": null,
1147
+ "stoppedAt": null,
1148
+ "trace": null
1149
+ }
1150
+ ],
1151
+ "steps": [
1152
+ {
1153
+ "transition": "Reviewing the cart :: Starts checkout",
1154
+ "event": "Starts checkout",
1155
+ "status": "passed",
1156
+ "reason": null
1157
+ },
1158
+ {
1159
+ "transition": "Choosing how to pay :: Picks card",
1160
+ "event": "Picks card",
1161
+ "status": "passed",
1162
+ "reason": null
1163
+ },
1164
+ {
1165
+ "transition": "Entering card details :: Submits the card",
1166
+ "event": "Submits the card",
1167
+ "status": "passed",
1168
+ "reason": null
1169
+ },
1170
+ {
1171
+ "transition": "Waiting for the payment :: Payment provider approves the payment",
1172
+ "event": "Payment provider approves the payment",
1173
+ "status": "passed",
1174
+ "reason": null
1175
+ },
1176
+ {
1177
+ "transition": "Paid :: Payment goes through",
1178
+ "event": "Payment goes through",
1179
+ "status": "passed",
1180
+ "reason": null
1181
+ }
1182
+ ],
1183
+ "stoppedAt": null
1184
+ }
1185
+ ],
1186
+ "coverage": {
1187
+ "Coffee order": {
1188
+ "states": {
1189
+ "total": 3,
1190
+ "passed": 3,
1191
+ "failed": 0,
1192
+ "flaky": 0,
1193
+ "notReached": 0
1194
+ },
1195
+ "transitions": {
1196
+ "total": 1,
1197
+ "passed": 1,
1198
+ "failed": 0,
1199
+ "flaky": 0,
1200
+ "notReached": 0
1201
+ }
1202
+ },
1203
+ "Checkout": {
1204
+ "states": {
1205
+ "total": 8,
1206
+ "passed": 4,
1207
+ "failed": 0,
1208
+ "flaky": 0,
1209
+ "notReached": 4
1210
+ },
1211
+ "transitions": {
1212
+ "total": 14,
1213
+ "passed": 4,
1214
+ "failed": 0,
1215
+ "flaky": 0,
1216
+ "notReached": 10
1217
+ }
1218
+ },
1219
+ "overall": {
1220
+ "states": {
1221
+ "total": 11,
1222
+ "passed": 7,
1223
+ "failed": 0,
1224
+ "flaky": 0,
1225
+ "notReached": 4
1226
+ },
1227
+ "transitions": {
1228
+ "total": 15,
1229
+ "passed": 5,
1230
+ "failed": 0,
1231
+ "flaky": 0,
1232
+ "notReached": 10
1233
+ }
1234
+ }
1235
+ },
1236
+ "privacy": {
1237
+ "passed": true,
1238
+ "findings": []
1239
+ },
1240
+ "reports": {
1241
+ "junit": "junit.xml",
1242
+ "ctrf": "ctrf.json"
1243
+ }
1244
+ }