@crvouga/atlas 0.5.0 → 0.6.1

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 (148) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +51 -16
  3. package/dist/core/src/cli.d.ts +1 -1
  4. package/dist/core/src/cli.js +8 -3
  5. package/dist/core/src/config.d.ts +7 -0
  6. package/dist/core/src/config.js +48 -14
  7. package/dist/core/src/run/execute.d.ts +6 -0
  8. package/dist/core/src/run/execute.js +4 -2
  9. package/dist/reports/src/doctor.d.ts +1 -1
  10. package/dist/reports/src/doctor.js +3 -1
  11. package/dist/reports/src/http-store.d.ts +4 -0
  12. package/dist/reports/src/http-store.js +6 -3
  13. package/dist/reports/src/init.js +24 -16
  14. package/dist/reports/src/live-reporter.d.ts +34 -0
  15. package/dist/reports/src/live-reporter.js +122 -0
  16. package/dist/reports/src/package-managers.d.ts +35 -0
  17. package/dist/reports/src/package-managers.js +23 -0
  18. package/dist/reports/src/report-cli.d.ts +1 -1
  19. package/dist/reports/src/report-cli.js +3 -2
  20. package/dist/reports/src/store-url.js +1 -1
  21. package/dist/runners/src/codecept.d.ts +14 -0
  22. package/dist/runners/src/codecept.js +16 -0
  23. package/dist/runners/src/jest.d.ts +50 -0
  24. package/dist/runners/src/jest.js +52 -0
  25. package/dist/runners/src/mocha.d.ts +40 -0
  26. package/dist/runners/src/mocha.js +39 -0
  27. package/dist/runners/src/node-test.d.ts +28 -0
  28. package/dist/runners/src/node-test.js +44 -0
  29. package/dist/runners/src/publish.d.ts +30 -0
  30. package/dist/runners/src/publish.js +68 -0
  31. package/dist/schema/src/api.d.ts +1 -0
  32. package/dist/schema/src/api.js +1 -1
  33. package/dist/schema/src/cli-results.d.ts +233 -2
  34. package/dist/schema/src/cli-results.js +14 -0
  35. package/dist/schema/src/index.d.ts +2 -0
  36. package/dist/schema/src/index.js +2 -0
  37. package/dist/schema/src/live-run.d.ts +123 -0
  38. package/dist/schema/src/live-run.js +30 -0
  39. package/dist/schema/src/manifest.d.ts +2 -2
  40. package/dist/schema/src/project.d.ts +20 -0
  41. package/dist/schema/src/project.js +10 -0
  42. package/dist/schema/src/report-sources.d.ts +1 -0
  43. package/dist/schema/src/report-sources.js +2 -1
  44. package/dist/schema/src/runs-index.d.ts +1 -1
  45. package/dist/schema/src/server-config.d.ts +84 -0
  46. package/dist/schema/src/server-config.js +12 -0
  47. package/dist/server/src/app.d.ts +10 -0
  48. package/dist/server/src/app.js +148 -10
  49. package/dist/server/src/config.d.ts +1 -1
  50. package/dist/server/src/config.js +20 -3
  51. package/dist/server/src/dev.d.ts +3 -3
  52. package/dist/server/src/dev.js +22 -13
  53. package/dist/server/src/events.d.ts +3 -3
  54. package/dist/server/src/events.js +1 -1
  55. package/dist/server/src/index.d.ts +2 -0
  56. package/dist/server/src/index.js +2 -0
  57. package/dist/server/src/live-runs.d.ts +52 -0
  58. package/dist/server/src/live-runs.js +229 -0
  59. package/dist/server/src/llms.js +17 -8
  60. package/dist/server/src/main.d.ts +1 -1
  61. package/dist/server/src/main.js +7 -5
  62. package/dist/server/src/openapi.d.ts +2 -5
  63. package/dist/server/src/openapi.js +71 -7
  64. package/dist/server/src/projects.d.ts +3 -0
  65. package/dist/server/src/projects.js +154 -0
  66. package/dist/server/src/settings-page.d.ts +9 -0
  67. package/dist/server/src/settings-page.js +93 -0
  68. package/dist/server/src/settings.d.ts +23 -0
  69. package/dist/server/src/settings.js +72 -0
  70. package/dist/server/src/site.d.ts +8 -6
  71. package/dist/server/src/site.js +45 -10
  72. package/dist/server/src/store-api.js +43 -22
  73. package/docs/agents.md +166 -15
  74. package/docs/deploying.md +24 -20
  75. package/docs/dogfooding.md +7 -3
  76. package/docs/extending.md +3 -3
  77. package/docs/integrating.md +19 -11
  78. package/docs/quickstart.md +81 -0
  79. package/docs/reference/cli.md +9 -7
  80. package/docs/reference/core.md +6 -0
  81. package/docs/reference/http-api.md +498 -2
  82. package/docs/reference/reports.md +84 -1
  83. package/docs/reference/runners.md +169 -0
  84. package/docs/reference/schema.md +120 -0
  85. package/docs/reference/server.md +154 -14
  86. package/docs/report-backends.md +8 -8
  87. package/docs/report-contract.md +7 -7
  88. package/docs/reporting-issues.md +3 -3
  89. package/docs/runners.md +69 -0
  90. package/docs/server.md +155 -25
  91. package/docs/statecharts.md +22 -20
  92. package/llms-full.txt +1079 -126
  93. package/llms.txt +7 -4
  94. package/package.json +33 -9
  95. package/packages/core/README.md +3 -1
  96. package/packages/runners/README.md +6 -0
  97. package/packages/runners/compat/codecept.cjs +2 -0
  98. package/packages/runners/compat/jest.cjs +2 -0
  99. package/packages/runners/compat/mocha.cjs +2 -0
  100. package/packages/schema/schemas/atlas-change.schema.json +4 -0
  101. package/packages/schema/schemas/hello-event.schema.json +4 -0
  102. package/packages/schema/schemas/live-run-start.schema.json +42 -0
  103. package/packages/schema/schemas/live-run-update.schema.json +93 -0
  104. package/packages/schema/schemas/live-run.schema.json +225 -0
  105. package/packages/schema/schemas/project-slug.schema.json +8 -0
  106. package/packages/schema/schemas/project.schema.json +22 -0
  107. package/packages/schema/schemas/projects.schema.json +33 -0
  108. package/packages/schema/schemas/server-config.schema.json +14 -0
  109. package/packages/schema/schemas/server-editable-settings.schema.json +132 -0
  110. package/packages/schema/schemas/server-settings-snapshot.schema.json +285 -0
  111. package/packages/server/openapi.json +5101 -779
  112. package/packages/visualizer/README.md +13 -13
  113. package/packages/visualizer/bin/atlas-client.mjs +176 -0
  114. package/packages/visualizer/bin/atlas-visualizer.mjs +2 -175
  115. package/packages/visualizer/src/app/AppShell.tsx +26 -17
  116. package/packages/visualizer/src/app/report-sources.tsx +2 -1
  117. package/packages/visualizer/src/components/ActivityIndicator.module.css +4 -0
  118. package/packages/visualizer/src/components/ActivityIndicator.tsx +6 -0
  119. package/packages/visualizer/src/components/Header.module.css +101 -227
  120. package/packages/visualizer/src/components/Header.tsx +79 -41
  121. package/packages/visualizer/src/components/ProjectPicker.tsx +64 -0
  122. package/packages/visualizer/src/data/adapters/report-backend.test.ts +3 -2
  123. package/packages/visualizer/src/data/adapters/report-backend.ts +1 -1
  124. package/packages/visualizer/src/data/queries.ts +14 -7
  125. package/packages/visualizer/src/evidence/api.ts +2 -1
  126. package/packages/visualizer/src/evidence/check-detail.tsx +19 -4
  127. package/packages/visualizer/src/evidence/document-page.tsx +6 -2
  128. package/packages/visualizer/src/evidence/evidence-context.tsx +17 -12
  129. package/packages/visualizer/src/evidence/evidence.module.css +11 -1
  130. package/packages/visualizer/src/evidence/feature-page.tsx +7 -3
  131. package/packages/visualizer/src/evidence/model-page.tsx +6 -2
  132. package/packages/visualizer/src/evidence/project-home.tsx +45 -0
  133. package/packages/visualizer/src/evidence/recording-page.tsx +4 -1
  134. package/packages/visualizer/src/evidence/spec-index.tsx +2 -1
  135. package/packages/visualizer/src/evidence/test-filter.tsx +21 -0
  136. package/packages/visualizer/src/live/live-query.ts +21 -0
  137. package/packages/visualizer/src/live/live-runs.tsx +69 -0
  138. package/packages/visualizer/src/live/live-stream.ts +30 -9
  139. package/packages/visualizer/src/live/report-progress.ts +62 -0
  140. package/packages/visualizer/src/live/test-progress.tsx +34 -0
  141. package/packages/visualizer/src/runtime.ts +17 -1
  142. package/packages/visualizer/src/state/ui-store.ts +3 -2
  143. package/packages/visualizer/src/views/ChartPage.tsx +2 -0
  144. package/packages/visualizer/src/views/ChartTests.tsx +43 -0
  145. package/packages/visualizer/src/views/SidePanel.tsx +2 -0
  146. package/packages/visualizer/vite/atlas-files.test.ts +4 -4
  147. package/packages/visualizer/vite/atlas-files.ts +1 -5
  148. package/packages/visualizer/vite/atlas-server-proxy.ts +2 -1
@@ -24,7 +24,11 @@ upgrade, and what to do when something is wrong.
24
24
 
25
25
  ## Install
26
26
 
27
- Atlas runs on Bun, and on Node 22.18 or later. It is one package:
27
+ <!-- generated:runtime-requirements -->
28
+ Supported runtimes (from `package.json`): **node `>=22.18.0`** or **bun `>=1.2.0`**. Node consumers do not need Bun unless they use the Bun WebView driver.
29
+ <!-- /generated:runtime-requirements -->
30
+
31
+ It is one package:
28
32
 
29
33
  ```sh
30
34
  bun add -d @crvouga/atlas
@@ -51,7 +55,7 @@ and nothing runs just because the package is installed.
51
55
  | `@crvouga/atlas/reports/<module>` | Publishing, storing, combining, gating and serving test evidence for specs of any kind. |
52
56
 
53
57
  It also installs two commands: `atlas` (report, lint, plan, run, merge, export) and
54
- `atlas-visualizer` (browse specs, runs and reports).
58
+ `atlas client` (browse specs, runs and reports).
55
59
 
56
60
  `playwright` and `detox` are optional peers: install the one your driver uses, as above. The
57
61
  documentation ships in the package, matching the version you installed: the README of each part at
@@ -151,7 +155,7 @@ Do this once per project. Check first that the package is on npm:
151
155
  | `@crvouga/atlas-schema` | `@crvouga/atlas/schema` |
152
156
  | `@crvouga/atlas-schema/schemas/<file>` | `@crvouga/atlas/schemas/<file>` |
153
157
  | `@crvouga/atlas-reports/<module>` | `@crvouga/atlas/reports/<module>` |
154
- | `@crvouga/atlas-visualizer` (the `atlas-visualizer` command) | installed with `@crvouga/atlas` |
158
+ | `@crvouga/atlas client` (the `atlas client` command) | installed with `@crvouga/atlas` |
155
159
 
156
160
  `@crvouga/atlas`, `@crvouga/atlas/spec` and `@crvouga/atlas/signals` are unchanged. One pass
157
161
  over a project's sources does the rest:
package/docs/extending.md CHANGED
@@ -31,7 +31,7 @@ carry any of these. Every one is optional.
31
31
  | `attempts[]` | Every try, when the check was retried. |
32
32
  | `tags[]` | Free labels to filter by: `smoke`, `payments`. |
33
33
  | `labels{}` | Facts about the result that are not its identity: `owner`, `severity`, `browser`, `build`. |
34
- | `links[]` | Where to read more: the CI run, the issue, the trace viewer. |
34
+ | `links[]` | Where to read more: the CI run, the issue, the trace client. |
35
35
  | `extensions{}` | Structured data of your own or a tool's, under a name you own. |
36
36
  | `measurements[]` | Numbers, with units and an allowance (already part of the contract). |
37
37
 
@@ -224,7 +224,7 @@ Annotation `type`: `note`, `warning`, `deprecation`, `issue`, `accessibility`, `
224
224
  | Something that should be shown well | Ask for a renderer (below). |
225
225
  | A field every tool should have | Open an issue. It is added as an optional field, and the rules above guarantee nothing breaks. |
226
226
 
227
- **A renderer** is one entry in the viewer's list (`artifactRenderers` in
227
+ **A renderer** is one entry in the client's list (`artifactRenderers` in
228
228
  `packages/visualizer/src/evidence/artifacts.tsx`): how to show an attachment of a media type. The first one that
229
229
  matches wins:
230
230
 
@@ -236,7 +236,7 @@ registerArtifactRenderer({
236
236
  });
237
237
  ```
238
238
 
239
- The viewer is part of Atlas, so a renderer for a new media type is a contribution to Atlas: file an issue
239
+ The client is part of Atlas, so a renderer for a new media type is a contribution to Atlas: file an issue
240
240
  ([reporting issues](reporting-issues.md)) with a sample file. Until it lands, the attachment is still stored,
241
241
  listed with its name, role, type and size, and offered for download, and everything else about the result is
242
242
  unaffected.
@@ -13,6 +13,11 @@ layers over your specs, whatever produced them, whichever machine or branch they
13
13
  commands of this guide for your project (`--write` applies them; `--format json` is for agents). See
14
14
  [Atlas for AI agents](agents.md). The rest of this guide explains what those commands do.
15
15
 
16
+ **Only have the repository link?** Start with [the consumer playbook](agents.md#given-only-this-repository-link)
17
+ for installation choices and version-matched docs. **No server yet?** [Verify Atlas locally](quickstart.md)
18
+ proves publish, repeat-publish, failure and recovery with copyable commands and no credentials. This guide's
19
+ directory/artifact integration works without a server too.
20
+
16
21
  Read [the report contract](report-contract.md) once if you want the exact rules. You do not need it to
17
22
  integrate. To run it for a whole team, with a bucket and one node everyone looks at, see
18
23
  [running Atlas for a project](deploying.md). This guide ships with the package, matching your version, at
@@ -28,7 +33,7 @@ integrate. To run it for a whole team, with a bucket and one node everyone looks
28
33
  ```
29
34
  node 1: suite A, ios ──▶ layer ─┐
30
35
  node 2: suite A, android ──▶ layer ─┤ ┌──▶ atlas report status (gate: exit 1 on failure)
31
- node 3: suite B, shard 1 ──▶ layer ─┼──▶ backends ──▶ combine ──┼──▶ the viewer (browse it)
36
+ node 3: suite B, shard 1 ──▶ layer ─┼──▶ backends ──▶ combine ──┼──▶ the client (browse it)
32
37
  node 4: suite B, shard 2 ──▶ layer ─┤ └──▶ your own code (combineBackends)
33
38
  a laptop, one scenario ──▶ layer ─┘
34
39
  ```
@@ -60,8 +65,11 @@ bun add -d @crvouga/atlas # or: npm install -D @crvouga/atlas, pnpm add -
60
65
  bunx atlas report --help # npx atlas report --help
61
66
  ```
62
67
 
63
- Expected: the usage text of `atlas report`. Atlas runs on Bun and on Node 22.18 or later. Add the
64
- directory you publish to (`atlas-reports/`) to `.gitignore`.
68
+ Expected: the usage text of `atlas report`. Add the directory you publish to (`atlas-reports/`) to `.gitignore`.
69
+
70
+ <!-- generated:runtime-requirements -->
71
+ Supported runtimes (from `package.json`): **node `>=22.18.0`** or **bun `>=1.2.0`**. Node consumers do not need Bun unless they use the Bun WebView driver.
72
+ <!-- /generated:runtime-requirements -->
65
73
 
66
74
  ## 3. Make each suite publish a layer
67
75
 
@@ -394,7 +402,7 @@ unknown is not a pass.
394
402
 
395
403
  ## 6. Browse it
396
404
 
397
- The visualizer lays your stores over your specs directory. Add a module to your project:
405
+ The Atlas client lays your stores over your specs directory. Add a module to your project:
398
406
 
399
407
  ```ts
400
408
  // atlas.reports.ts
@@ -404,14 +412,14 @@ export const reportsDevFetch = reportsHost({ specs: './specs', stores: ['./atlas
404
412
  ```
405
413
 
406
414
  ```sh
407
- ATLAS_REPORTS_MODULE="$(pwd)/atlas.reports.ts" bunx atlas-visualizer dev --specs ./specs
415
+ ATLAS_REPORTS_MODULE="$(pwd)/atlas.reports.ts" bunx atlas client dev --specs ./specs
408
416
  ```
409
417
 
410
418
  `reportsHost(options)` returns `(request: Request, repoRoot: string) => Promise<Response>`, the
411
- function the viewer calls for every `/api/reports/…` request. `specs` and directory `stores` resolve
412
- against `repoRoot`, which the viewer sets to where you ran the command (`INIT_CWD`), not against the
419
+ function the client calls for every `/api/reports/…` request. `specs` and directory `stores` resolve
420
+ against `repoRoot`, which the client sets to where you ran the command (`INIT_CWD`), not against the
413
421
  module. A wrong path comes back as a JSON error that names it. A `stores` entry that is not a string is
414
- a backend of your own: `{ id, label?, store }`. You can call it yourself to look at what the viewer
422
+ a backend of your own: `{ id, label?, store }`. You can call it yourself to look at what the client
415
423
  sees:
416
424
 
417
425
  ```ts
@@ -424,11 +432,11 @@ const page = await (await reportsDevFetch(new Request('http://x/api/reports/evid
424
432
 
425
433
  | Route (after `/api/reports`) | Returns |
426
434
  | --- | --- |
427
- | `/evidence?cursor=` | A page of layer headers, the backends and any notices. The viewer combines them with the specs. |
435
+ | `/evidence?cursor=` | A page of layer headers, the backends and any notices. The client combines them with the specs. |
428
436
  | `/evidence/rows/:backend/:id` | One layer's checks. |
429
437
  | `/outline`, `/outline/spec?path=` | The specs directory as an outline, and one spec's text. |
430
438
 
431
- The combined result of each spec is computed in the viewer. To get it without a browser, use
439
+ The combined result of each spec is computed in the client. To get it without a browser, use
432
440
  `atlas report status --format json`: its `specs` array has each spec's counts per environment.
433
441
 
434
442
  Specs are the files of the specs directory (`.feature` as Gherkin, `.qnt` as Quint, `.dmn`, `.als`,
@@ -469,7 +477,7 @@ An integration is complete when each of these holds. Run them and keep the outpu
469
477
  | `X is unavailable` | A backend is down. The rest were combined; fix it or leave it out. |
470
478
  | `check id "…" appears twice` | Your suite emits two checks with one name. Make the names unique. Importers number repeats as `#2`. |
471
479
  | `Potentially outdated: spec changed` | The spec changed since the layer was recorded. Advisory: the recorded outcome still counts. Re-run to refresh. |
472
- | Viewer shows `No report store is configured` | `ATLAS_REPORTS_MODULE` is unset, or `stores` is empty. |
480
+ | Client shows `No report store is configured` | `ATLAS_REPORTS_MODULE` is unset, or `stores` is empty. |
473
481
 
474
482
  ## Rules
475
483
 
@@ -0,0 +1,81 @@
1
+ # Verify Atlas locally
2
+
3
+ Prove that the installed Atlas can publish, combine and gate evidence before connecting your project's real
4
+ suites. This walkthrough needs no server, token, browser, Docker, existing specs or changes to Atlas itself.
5
+ The checks below are synthetic plumbing checks, not evidence about your product.
6
+
7
+ First [install Atlas with your project's package manager](agents.md#install-in-the-consumer-project).
8
+ Run the following from your **consumer project's root** using a POSIX shell (macOS, Linux, or Windows with
9
+ WSL/Git Bash). `atlas` means the installed binary: substitute `bunx atlas`, `npm exec -- atlas`,
10
+ `pnpm exec atlas` or `yarn exec atlas` on each command. In a package script, `atlas` works directly.
11
+
12
+ ## Publish one check, twice
13
+
14
+ Create a scratch directory. Keep this shell open for the rest of the walkthrough. Explicit `--store` flags
15
+ keep these synthetic checks local even if `ATLAS_STORE` points at a shared server.
16
+
17
+ <!-- smoke:begin -->
18
+ ```sh
19
+ atlas_smoke=$(mktemp -d)
20
+ cat > "$atlas_smoke/pass.json" <<'JSON'
21
+ {"producer":"integration-smoke","environment":"local","recordedAtMs":1000,"checks":[{"id":"plumbing","title":"Atlas integration plumbing","status":"passed"}]}
22
+ JSON
23
+ atlas report publish --store "$atlas_smoke/store" --checks "$atlas_smoke/pass.json" --format json
24
+ atlas report status --store "$atlas_smoke/store" --require-environments local --format json
25
+ atlas report publish --store "$atlas_smoke/store" --checks "$atlas_smoke/pass.json" --format json
26
+ atlas report status --store "$atlas_smoke/store" --require-environments local --format json
27
+ ```
28
+ <!-- smoke:end -->
29
+
30
+ Expected: each command exits `0`. Both status documents have `ok: true`, `checks.total: 1`,
31
+ `checks.passed: 1`, and `layers: 1`. Publishing identical evidence did not add a second layer.
32
+
33
+ ## Prove a failure fails the gate
34
+
35
+ Publish the same check, from the same producer and environment, with a later time and a failure.
36
+ The shell captures the expected nonzero exit so this works under `set -e` too.
37
+
38
+ <!-- smoke:begin -->
39
+ ```sh
40
+ cat > "$atlas_smoke/fail.json" <<'JSON'
41
+ {"producer":"integration-smoke","environment":"local","recordedAtMs":2000,"checks":[{"id":"plumbing","title":"Atlas integration plumbing","status":"failed","detail":"Intentional smoke failure"}]}
42
+ JSON
43
+ atlas report publish --store "$atlas_smoke/store" --checks "$atlas_smoke/fail.json" --format json
44
+ atlas_gate_exit=0
45
+ atlas report status --store "$atlas_smoke/store" --format json || atlas_gate_exit=$?
46
+ test "$atlas_gate_exit" -eq 1
47
+ ```
48
+ <!-- smoke:end -->
49
+
50
+ Expected: publish exits `0` because the upload worked. Status exits `1`, with `ok: false`,
51
+ `checks.failed: 1` and the check in `failing`. The final `test` exits `0`, proving status returned exactly `1`.
52
+ An exit of `2` means a command error and does not satisfy this check.
53
+
54
+ ## Prove a later fix replaces it
55
+
56
+ Keep the check's identity and publish a newer passing result. Do not delete the failing layer.
57
+
58
+ <!-- smoke:begin -->
59
+ ```sh
60
+ atlas report publish --store "$atlas_smoke/store" --checks "$atlas_smoke/pass.json" --recorded-at 3000 --format json
61
+ atlas report status --store "$atlas_smoke/store" --require-environments local --format json
62
+ ```
63
+ <!-- smoke:end -->
64
+
65
+ Expected: status exits `0`, with `ok: true`, `checks.total: 1`, `checks.passed: 1`, `checks.failed: 0`,
66
+ and `layers: 3`. Three historical layers contribute one current check.
67
+
68
+ The files are disposable; their location is in `$atlas_smoke`. No file was created in your project.
69
+ For automation, parse the JSON documents rather than console prose; the command schemas are listed in
70
+ [the agent guide](agents.md#what-an-agent-can-rely-on).
71
+
72
+ ## Connect a real suite
73
+
74
+ Continue with [integrating Atlas](integrating.md#3-make-each-suite-publish-a-layer). Run a real suite,
75
+ publish its JUnit/CTRF file even when it fails, and inspect `status --format json`. A passing synthetic check
76
+ does not complete the integration: preserve your suite's original exit code and verify real evidence and CI
77
+ as described in [the completion checklist](integrating.md#7-done-when).
78
+
79
+ For a shared server, use [the server setup](server.md), select a stable `ATLAS_PROJECT` slug, and follow
80
+ [the agent workflow](agents.md#the-shortest-path). Statecharts and browser drivers are optional; importing
81
+ existing test reports needs neither.
@@ -16,8 +16,9 @@ atlas — executable statecharts
16
16
  [--no-retry] [--output <dir>]
17
17
  atlas merge [--config atlas.config.ts] [--output <dir>] <run-dir> <run-dir>...
18
18
  atlas export --specs <dir> --format scxml|mermaid|markdown|json [--out <file>]
19
- atlas serve [--data <dir>] [--port 8080] [--store <url>]... the Atlas server: results in, the live report out
20
- atlas dev [--port 5180] the server and the viewer's dev server, on one host
19
+ atlas server [--data <dir>] [--port 8080] [--store <url>]... one Atlas node: API, projects and client
20
+ atlas client build [--no-data] [--out <dir>] build the project-agnostic Atlas client
21
+ atlas dev [--port 5180] develop the Atlas server and client on one host
21
22
  atlas init [--server <url>] [--write] integrate this project: detect its suites, print the plan (atlas init --help)
22
23
  atlas report publish|stream|status|merge|doctor|policy … layered evidence for any kind of spec (atlas report --help)
23
24
 
@@ -57,7 +58,7 @@ atlas serve: the Atlas server
57
58
  [--outline-branch <b>] [--branch <name>]... [--ignore-modified] [--refresh <seconds>]
58
59
  [--anonymous-read] [--insecure] [--no-log]
59
60
 
60
- One process serves the viewer and the API. Test results are uploaded to it from anywhere (laptops, CI) and it
61
+ One process serves the client and the API. Test results are uploaded to it from anywhere (laptops, CI) and it
61
62
  shows everyone the combined report, live. It keeps its data in --data (default ./atlas-data) and can read more
62
63
  backends (--store): S3, other servers, folders. Uploads go to the data folder unless --write names another.
63
64
 
@@ -68,12 +69,12 @@ atlas serve: the Atlas server
68
69
  ## atlas dev
69
70
 
70
71
  ```text
71
- atlas dev: the Atlas server and the viewer, for working on either
72
+ atlas dev: the Atlas server and the client, for working on either
72
73
 
73
74
  atlas dev [--port 5180] [--host 127.0.0.1] [--data <dir>] [--store <url|id=url>]... [--config atlas.server.json]
74
75
 
75
- Starts the server (API only, on a port of its own) and the viewer's dev server, which proxies /api to it, so the
76
- browser talks to one host and a change to the viewer shows at once. In production `atlas serve` does both from
76
+ Starts the server (API only, on a port of its own) and the client's dev server, which proxies /api to it, so the
77
+ browser talks to one host and a change to the client shows at once. In production `atlas serve` does both from
77
78
  one process.
78
79
  ```
79
80
 
@@ -101,7 +102,8 @@ atlas report — layered evidence for any kind of spec
101
102
  atlas report policy --store s3://bucket/prefix [--role publisher|reader|both]
102
103
 
103
104
  A store is a directory or s3://bucket/prefix (add ?region=…&endpoint=… for R2, MinIO and the
104
- rest). When no --store is given, ATLAS_STORE is used. Keys never go in the URL: set
105
+ rest). Select a project on an Atlas node with --project <slug> or ATLAS_PROJECT. This scopes specs, reports and recordings together.
106
+ When no --store is given, ATLAS_STORE is used. Keys never go in the URL: set
105
107
  AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY, or sign in with `aws sso login`, or use a role.
106
108
 
107
109
  publish Write one immutable layer: the checks of one producer, on one environment. Safe to repeat.
@@ -49,6 +49,8 @@ See docs/statecharts.md
49
49
  export type AtlasConfig<C = unknown> = {
50
50
  /** The directory holding the charts (`*.scxml`, `*.machine.{json,yaml}`) and `journeys.yaml`. */
51
51
  specs: string;
52
+ /** Live reporting endpoint. Defaults to ATLAS_SERVER_URL when set; false disables streaming. */
53
+ reporting?: LiveReporterOptions | false;
52
54
  /** The chart to run; the root chart when omitted. */
53
55
  chart?: string;
54
56
  /** Where generated paths start (an XState state value); the initial state when omitted. */
@@ -149,6 +151,8 @@ not thrown.
149
151
  export type RunCommandOptions = PrepareOptions & {
150
152
  /** `fast` when omitted. */
151
153
  mode?: RunMode;
154
+ /** Override live reporting. Defaults to config.reporting or ATLAS_SERVER_URL. */
155
+ reporting?: LiveReporterOptions | false;
152
156
  /** Only these paths, by id. */
153
157
  paths?: string[];
154
158
  /** Only paths that start from these seeds ("start" for paths that `setup` starts). */
@@ -1071,6 +1075,8 @@ export type RunOptions<C> = RunContext<C> & {
1071
1075
  reuse?: { runDir: string; outcomes: Record<string, PathOutcome> };
1072
1076
  /** Receives progress lines; writes to stdout when omitted. */
1073
1077
  log?: (line: string) => void;
1078
+ /** Receives privacy-checked manifest snapshots as paths and steps change. */
1079
+ onProgress?: (manifest: Manifest) => void;
1074
1080
  };
1075
1081
  ```
1076
1082