@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.
- package/CHANGELOG.md +12 -0
- package/README.md +51 -16
- package/dist/core/src/cli.d.ts +1 -1
- package/dist/core/src/cli.js +8 -3
- package/dist/core/src/config.d.ts +7 -0
- package/dist/core/src/config.js +48 -14
- package/dist/core/src/run/execute.d.ts +6 -0
- package/dist/core/src/run/execute.js +4 -2
- package/dist/reports/src/doctor.d.ts +1 -1
- package/dist/reports/src/doctor.js +3 -1
- package/dist/reports/src/http-store.d.ts +4 -0
- package/dist/reports/src/http-store.js +6 -3
- package/dist/reports/src/init.js +24 -16
- package/dist/reports/src/live-reporter.d.ts +34 -0
- package/dist/reports/src/live-reporter.js +122 -0
- package/dist/reports/src/package-managers.d.ts +35 -0
- package/dist/reports/src/package-managers.js +23 -0
- package/dist/reports/src/report-cli.d.ts +1 -1
- package/dist/reports/src/report-cli.js +3 -2
- package/dist/reports/src/store-url.js +1 -1
- package/dist/runners/src/codecept.d.ts +14 -0
- package/dist/runners/src/codecept.js +16 -0
- package/dist/runners/src/jest.d.ts +50 -0
- package/dist/runners/src/jest.js +52 -0
- package/dist/runners/src/mocha.d.ts +40 -0
- package/dist/runners/src/mocha.js +39 -0
- package/dist/runners/src/node-test.d.ts +28 -0
- package/dist/runners/src/node-test.js +44 -0
- package/dist/runners/src/publish.d.ts +30 -0
- package/dist/runners/src/publish.js +68 -0
- package/dist/schema/src/api.d.ts +1 -0
- package/dist/schema/src/api.js +1 -1
- package/dist/schema/src/cli-results.d.ts +233 -2
- package/dist/schema/src/cli-results.js +14 -0
- package/dist/schema/src/index.d.ts +2 -0
- package/dist/schema/src/index.js +2 -0
- package/dist/schema/src/live-run.d.ts +123 -0
- package/dist/schema/src/live-run.js +30 -0
- package/dist/schema/src/manifest.d.ts +2 -2
- package/dist/schema/src/project.d.ts +20 -0
- package/dist/schema/src/project.js +10 -0
- package/dist/schema/src/report-sources.d.ts +1 -0
- package/dist/schema/src/report-sources.js +2 -1
- package/dist/schema/src/runs-index.d.ts +1 -1
- package/dist/schema/src/server-config.d.ts +84 -0
- package/dist/schema/src/server-config.js +12 -0
- package/dist/server/src/app.d.ts +10 -0
- package/dist/server/src/app.js +148 -10
- package/dist/server/src/config.d.ts +1 -1
- package/dist/server/src/config.js +20 -3
- package/dist/server/src/dev.d.ts +3 -3
- package/dist/server/src/dev.js +22 -13
- package/dist/server/src/events.d.ts +3 -3
- package/dist/server/src/events.js +1 -1
- package/dist/server/src/index.d.ts +2 -0
- package/dist/server/src/index.js +2 -0
- package/dist/server/src/live-runs.d.ts +52 -0
- package/dist/server/src/live-runs.js +229 -0
- package/dist/server/src/llms.js +17 -8
- package/dist/server/src/main.d.ts +1 -1
- package/dist/server/src/main.js +7 -5
- package/dist/server/src/openapi.d.ts +2 -5
- package/dist/server/src/openapi.js +71 -7
- package/dist/server/src/projects.d.ts +3 -0
- package/dist/server/src/projects.js +154 -0
- package/dist/server/src/settings-page.d.ts +9 -0
- package/dist/server/src/settings-page.js +93 -0
- package/dist/server/src/settings.d.ts +23 -0
- package/dist/server/src/settings.js +72 -0
- package/dist/server/src/site.d.ts +8 -6
- package/dist/server/src/site.js +45 -10
- package/dist/server/src/store-api.js +43 -22
- package/docs/agents.md +166 -15
- package/docs/deploying.md +24 -20
- package/docs/dogfooding.md +7 -3
- package/docs/extending.md +3 -3
- package/docs/integrating.md +19 -11
- package/docs/quickstart.md +81 -0
- package/docs/reference/cli.md +9 -7
- package/docs/reference/core.md +6 -0
- package/docs/reference/http-api.md +498 -2
- package/docs/reference/reports.md +84 -1
- package/docs/reference/runners.md +169 -0
- package/docs/reference/schema.md +120 -0
- package/docs/reference/server.md +154 -14
- package/docs/report-backends.md +8 -8
- package/docs/report-contract.md +7 -7
- package/docs/reporting-issues.md +3 -3
- package/docs/runners.md +69 -0
- package/docs/server.md +155 -25
- package/docs/statecharts.md +22 -20
- package/llms-full.txt +1079 -126
- package/llms.txt +7 -4
- package/package.json +33 -9
- package/packages/core/README.md +3 -1
- package/packages/runners/README.md +6 -0
- package/packages/runners/compat/codecept.cjs +2 -0
- package/packages/runners/compat/jest.cjs +2 -0
- package/packages/runners/compat/mocha.cjs +2 -0
- package/packages/schema/schemas/atlas-change.schema.json +4 -0
- package/packages/schema/schemas/hello-event.schema.json +4 -0
- package/packages/schema/schemas/live-run-start.schema.json +42 -0
- package/packages/schema/schemas/live-run-update.schema.json +93 -0
- package/packages/schema/schemas/live-run.schema.json +225 -0
- package/packages/schema/schemas/project-slug.schema.json +8 -0
- package/packages/schema/schemas/project.schema.json +22 -0
- package/packages/schema/schemas/projects.schema.json +33 -0
- package/packages/schema/schemas/server-config.schema.json +14 -0
- package/packages/schema/schemas/server-editable-settings.schema.json +132 -0
- package/packages/schema/schemas/server-settings-snapshot.schema.json +285 -0
- package/packages/server/openapi.json +5101 -779
- package/packages/visualizer/README.md +13 -13
- package/packages/visualizer/bin/atlas-client.mjs +176 -0
- package/packages/visualizer/bin/atlas-visualizer.mjs +2 -175
- package/packages/visualizer/src/app/AppShell.tsx +26 -17
- package/packages/visualizer/src/app/report-sources.tsx +2 -1
- package/packages/visualizer/src/components/ActivityIndicator.module.css +4 -0
- package/packages/visualizer/src/components/ActivityIndicator.tsx +6 -0
- package/packages/visualizer/src/components/Header.module.css +101 -227
- package/packages/visualizer/src/components/Header.tsx +79 -41
- package/packages/visualizer/src/components/ProjectPicker.tsx +64 -0
- package/packages/visualizer/src/data/adapters/report-backend.test.ts +3 -2
- package/packages/visualizer/src/data/adapters/report-backend.ts +1 -1
- package/packages/visualizer/src/data/queries.ts +14 -7
- package/packages/visualizer/src/evidence/api.ts +2 -1
- package/packages/visualizer/src/evidence/check-detail.tsx +19 -4
- package/packages/visualizer/src/evidence/document-page.tsx +6 -2
- package/packages/visualizer/src/evidence/evidence-context.tsx +17 -12
- package/packages/visualizer/src/evidence/evidence.module.css +11 -1
- package/packages/visualizer/src/evidence/feature-page.tsx +7 -3
- package/packages/visualizer/src/evidence/model-page.tsx +6 -2
- package/packages/visualizer/src/evidence/project-home.tsx +45 -0
- package/packages/visualizer/src/evidence/recording-page.tsx +4 -1
- package/packages/visualizer/src/evidence/spec-index.tsx +2 -1
- package/packages/visualizer/src/evidence/test-filter.tsx +21 -0
- package/packages/visualizer/src/live/live-query.ts +21 -0
- package/packages/visualizer/src/live/live-runs.tsx +69 -0
- package/packages/visualizer/src/live/live-stream.ts +30 -9
- package/packages/visualizer/src/live/report-progress.ts +62 -0
- package/packages/visualizer/src/live/test-progress.tsx +34 -0
- package/packages/visualizer/src/runtime.ts +17 -1
- package/packages/visualizer/src/state/ui-store.ts +3 -2
- package/packages/visualizer/src/views/ChartPage.tsx +2 -0
- package/packages/visualizer/src/views/ChartTests.tsx +43 -0
- package/packages/visualizer/src/views/SidePanel.tsx +2 -0
- package/packages/visualizer/vite/atlas-files.test.ts +4 -4
- package/packages/visualizer/vite/atlas-files.ts +1 -5
- package/packages/visualizer/vite/atlas-server-proxy.ts +2 -1
package/docs/dogfooding.md
CHANGED
|
@@ -24,7 +24,11 @@ upgrade, and what to do when something is wrong.
|
|
|
24
24
|
|
|
25
25
|
## Install
|
|
26
26
|
|
|
27
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
package/docs/integrating.md
CHANGED
|
@@ -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
|
|
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`.
|
|
64
|
-
|
|
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
|
|
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
|
|
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
|
|
412
|
-
against `repoRoot`, which 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
|
|
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
|
|
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
|
|
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
|
-
|
|
|
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.
|
package/docs/reference/cli.md
CHANGED
|
@@ -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
|
|
20
|
-
atlas
|
|
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
|
|
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
|
|
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
|
|
76
|
-
browser talks to one host and a change to the
|
|
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).
|
|
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.
|
package/docs/reference/core.md
CHANGED
|
@@ -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
|
|