@crvouga/atlas 1.14.0 → 1.16.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.
- package/CHANGELOG.md +14 -1
- package/dist/reports/src/catalog-health.d.ts +15 -2
- package/dist/reports/src/catalog-health.js +23 -2
- package/dist/reports/src/evidence-detail.d.ts +19 -0
- package/dist/reports/src/evidence-detail.js +31 -4
- package/dist/reports/src/evidence-types.d.ts +2 -2
- package/dist/reports/src/layer-merge.js +4 -3
- package/dist/reports/src/layer-store.d.ts +1 -1
- package/dist/reports/src/layer-store.js +4 -2
- package/dist/reports/src/layer-types.d.ts +2 -0
- package/dist/reports/src/run-compare.d.ts +182 -0
- package/dist/reports/src/run-compare.js +329 -0
- package/dist/reports/src/test-catalog.d.ts +8 -0
- package/dist/reports/src/test-catalog.js +14 -1
- package/dist/schema/src/api.d.ts +10 -0
- package/dist/schema/src/api.js +15 -5
- package/dist/schema/src/server-config.d.ts +3 -0
- package/dist/schema/src/server-config.js +5 -0
- package/dist/server/src/app.d.ts +2 -0
- package/dist/server/src/app.js +6 -2
- package/dist/server/src/config.js +4 -0
- package/dist/server/src/main.js +1 -0
- package/dist/server/src/openapi.js +2 -2
- package/docs/extending.md +1 -1
- package/docs/reference/http-api.md +4 -4
- package/docs/reference/reports.md +378 -5
- package/docs/reference/server.md +2 -0
- package/docs/server.md +11 -2
- package/docs/ui.md +49 -1
- package/llms-full.txt +65 -8
- package/package.json +1 -1
- package/packages/schema/schemas/catalog-health.schema.json +20 -0
- package/packages/schema/schemas/effective-delta.schema.json +2 -2
- package/packages/schema/schemas/effective-evidence.schema.json +2 -2
- package/packages/schema/schemas/evidence-page.schema.json +1 -1
- package/packages/schema/schemas/layer-rows.schema.json +1 -1
- package/packages/schema/schemas/report-run.schema.json +25 -3
- package/packages/schema/schemas/report-runs.schema.json +1 -1
- package/packages/schema/schemas/review-collection.schema.json +1 -1
- package/packages/schema/schemas/review-manifest.schema.json +1 -1
- package/packages/schema/schemas/server-config.schema.json +17 -0
- package/packages/schema/schemas/test-catalog.schema.json +1 -1
- package/packages/schema/schemas/test-history.schema.json +2 -2
- package/packages/server/openapi.json +63 -21
- package/packages/visualizer/src/explorer/ComparePair.tsx +597 -0
- package/packages/visualizer/src/explorer/CompareView.tsx +340 -0
- package/packages/visualizer/src/explorer/Explorer.tsx +13 -2
- package/packages/visualizer/src/explorer/HealthView.tsx +402 -0
- package/packages/visualizer/src/explorer/RunsView.tsx +10 -0
- package/packages/visualizer/src/explorer/catalog.tsx +33 -0
- package/packages/visualizer/src/explorer/playlist.tsx +1 -1
- package/packages/visualizer/src/explorer/search.ts +18 -3
package/llms-full.txt
CHANGED
|
@@ -1850,6 +1850,7 @@ is said in words and the server does not start. The file has a published
|
|
|
1850
1850
|
| Whose specs the report is laid over | `outlineBranch` | `--outline-branch <branch>` | `ATLAS_OUTLINE_BRANCH` | `main`, then `master`, then the newest |
|
|
1851
1851
|
| Only layers recorded on these branches take part | `include.branches` | `--branch <name>` (repeatable) | `ATLAS_ONLY_BRANCH` | all |
|
|
1852
1852
|
| Leave out layers from modified checkouts and unknown origins | `include.ignoreModified` | `--ignore-modified` | `ATLAS_IGNORE_MODIFIED` | no |
|
|
1853
|
+
| Root mappings `from>to` that join spec paths a producer publishes to the paths the specs are recorded under, for the catalog health report (comma-separated; an empty `from` matches every path) | `catalog.roots` | | `ATLAS_CATALOG_ROOTS` | none |
|
|
1853
1854
|
| How often (seconds) the backends are looked at for layers written by something else | `refreshSeconds` | `--refresh <seconds>` | `ATLAS_REFRESH_SECONDS` | `10` |
|
|
1854
1855
|
| Let anyone look, not upload | `auth.anonymousRead` | `--anonymous-read` | `ATLAS_ANONYMOUS_READ` | no |
|
|
1855
1856
|
| Listen publicly with no tokens (something in front signs people in) | `auth.insecure` | `--insecure` | `ATLAS_INSECURE` | no |
|
|
@@ -2090,8 +2091,16 @@ curl "$ATLAS_SERVER_URL/api/projects/$ATLAS_PROJECT/reports/tests?format=markdow
|
|
|
2090
2091
|
the Tests total. Two spec paths are one logical spec only when a mapping says so
|
|
2091
2092
|
(`?root=<from>><to>`, for example `?root=%3Especs/` to put `checkout/cart.feature` under `specs/`); similar paths
|
|
2092
2093
|
are reported as ambiguous and never merged, and a similar title is never an identity. Give a check the label
|
|
2093
|
-
`outline` to say which scenario outline an example belongs to
|
|
2094
|
-
|
|
2094
|
+
`outline` to say which scenario outline an example belongs to, and `behavior-id` / `example-id` to give a behavior
|
|
2095
|
+
or one example a stable id of your own: Atlas counts them and names an id that sits on more than one check (a
|
|
2096
|
+
rename or a move), but a check is still its spec path and id, so nothing is joined by them. A domain shared by nearly
|
|
2097
|
+
every spec is flagged, but explicit domain metadata always stays authoritative. The document only reads: it changes
|
|
2098
|
+
no status.
|
|
2099
|
+
- Mappings that should always apply are a setting, not a query parameter: `catalog.roots` in `atlas.server.json` (a list
|
|
2100
|
+
of `from>to`) or `ATLAS_CATALOG_ROOTS` (comma-separated; it replaces the file's list). The health document applies
|
|
2101
|
+
them, then adds the request's `?root=`, and says in `roots[].source` which is which. A mapping with no `>` stops the
|
|
2102
|
+
server starting. The viewer's **Catalog health** tab shows the same document, and its mapping form (the `root`
|
|
2103
|
+
address parameter) tries further mappings without changing the server.
|
|
2095
2104
|
- The server keeps the newest 100 results of every test (progress reported as `running` is not history) and every run's last result per test, in memory, as layers
|
|
2096
2105
|
arrive; it is rebuilt from the layers on restart. History never changes a result.
|
|
2097
2106
|
- Without a published spec set, tests are grouped under the specs their layers recorded (`specs[]`: path, domain,
|
|
@@ -3195,7 +3204,7 @@ carry any of these. Every one is optional.
|
|
|
3195
3204
|
| `annotations[]` | Notes about the result: a warning, a deprecation, an accessibility finding, a coverage figure. |
|
|
3196
3205
|
| `attempts[]` | Every try, when the check was retried. |
|
|
3197
3206
|
| `tags[]` | Free labels to filter by: `smoke`, `payments`. |
|
|
3198
|
-
| `labels{}` | Facts about the result that are not its identity: `owner`, `severity`, `browser`, `build`. The viewer reads `build`, `platform`, `applies-to` and `applies-to-by` to tell whether evidence applies to a release (see [the viewer conventions](ui.md#behaviors-read-watch-inspect)). |
|
|
3207
|
+
| `labels{}` | Facts about the result that are not its identity: `owner`, `severity`, `browser`, `build`. The viewer reads `build`, `platform`, `applies-to` and `applies-to-by` to tell whether evidence applies to a release (see [the viewer conventions](ui.md#behaviors-read-watch-inspect)). `behavior-id` and `example-id` declare a stable id for the behavior and for one example of an outline, and `outline` names the outline; the [catalog health](server.md#reading-the-report-as-an-agent) report counts them and names an id shared by several checks. They never change which check a result belongs to. |
|
|
3199
3208
|
| `scope{}` | What the evidence does and does not show: surface, device kind, synthetic data, scripted dependencies, audio, pacing, what was asserted and its limits. Unknown when absent. See [Evidence scope](rich-evidence.md#evidence-scope). |
|
|
3200
3209
|
| `links[]` | Where to read more: the CI run, the issue, the trace client. |
|
|
3201
3210
|
| `extensions{}` | Structured data of your own or a tool's, under a name you own. |
|
|
@@ -4515,6 +4524,25 @@ when Watch is on screen.
|
|
|
4515
4524
|
- The spec index searches titles, paths and declared domains, and can group by the domain from spec metadata (specs with
|
|
4516
4525
|
none are listed under "No domain declared"; the Tests view reports domain problems).
|
|
4517
4526
|
|
|
4527
|
+
## Catalog health
|
|
4528
|
+
|
|
4529
|
+
The **Catalog health** tab (`explorer/HealthView.tsx`, `?tab=health`; `@crvouga/atlas/reports/catalog-health`) explains why the Specs
|
|
4530
|
+
and the Tests disagree. The Specs list links to it ("Why do these counts differ from the Tests?"). On a server it reads
|
|
4531
|
+
`GET /api/reports/tests/health`; elsewhere the same document is worked out in the page from the specs and results it holds, and an
|
|
4532
|
+
older server without the route is told so in words.
|
|
4533
|
+
|
|
4534
|
+
- Denominators are never one number: spec files, defined specs, specs with tests, specs executed and defined but not executed
|
|
4535
|
+
(the coverage gaps, which add to no passed count), tests, outlines, examples and observations (an outline, its examples and
|
|
4536
|
+
their per-environment results are told apart). Each figure has its meaning in its `title`.
|
|
4537
|
+
- A table walks from the Specs total to the Tests total, step by step, with the sentences below it. Findings are an `Accordion`
|
|
4538
|
+
(warnings open), each with its severity as text, its code, how many it affects and the paths. Paths that might be one promise
|
|
4539
|
+
are shown as "may be the same promise as ...; not merged": a similar title never joins two specs.
|
|
4540
|
+
- Root mappings (`from>to`) join spec paths. Those the server is configured with (`catalog.roots`, `ATLAS_CATALOG_ROOTS`) are
|
|
4541
|
+
labelled "Configured on the server"; others are tried in the form and kept in the address (`root`), labelled "Tried here", and
|
|
4542
|
+
change nothing on the server. A mapping that matched no path is a warning. Joined specs list every original path.
|
|
4543
|
+
- Domains are listed as declared; a domain shared by nearly every spec is a finding, never rewritten. Identity states how many
|
|
4544
|
+
checks are known only by title, how many declare `behavior-id` / `example-id`, and the limits of both.
|
|
4545
|
+
|
|
4518
4546
|
## UI catalog
|
|
4519
4547
|
|
|
4520
4548
|
`/catalog` (`catalog/`) is the viewer's inventory of captured UI states ([the guide](ui-catalog.md)). It is computed in the page from
|
|
@@ -4562,6 +4590,35 @@ environment) is unknown unless the producer declared it under the `atlas.failure
|
|
|
4562
4590
|
wording. Records of one source whose outcome changed are listed oldest first, and a later pass is never called a fix.
|
|
4563
4591
|
In the explorer the chosen source is the `source` search parameter (a layer id; unlike `layer` it does not pin a run).
|
|
4564
4592
|
|
|
4593
|
+
## Compare two runs
|
|
4594
|
+
|
|
4595
|
+
The **Compare** tab (`explorer/CompareView.tsx`, `explorer/ComparePair.tsx`, `@crvouga/atlas/reports/run-compare`) sets a
|
|
4596
|
+
baseline run against a candidate run. Both are pinned in the address (`base` and `cand`, run keys; `change` is the group
|
|
4597
|
+
shown and `pair` the behavior opened), so a link reproduces the comparison and a newer run never replaces either. A run
|
|
4598
|
+
that is no longer in the report is said to be missing and is never swapped for another. A run's page offers "Compare with
|
|
4599
|
+
this run as the baseline / candidate".
|
|
4600
|
+
|
|
4601
|
+
- Results are paired by the check they record (spec path and check id), then by the condition they were recorded under
|
|
4602
|
+
(kind, producer, environment, parameters). A title never pairs two results. The same check under another condition is
|
|
4603
|
+
paired and marked "Conditions differ".
|
|
4604
|
+
- Every behavior is in one group: newly failing, recovered, still failing, promise or conditions differ, not run or
|
|
4605
|
+
unfinished, not in the candidate run, not in the baseline run, same outcome. A result the candidate did not run is
|
|
4606
|
+
unknown, never regressed or passed; one only the baseline has is "not in the candidate run" (not run, renamed or
|
|
4607
|
+
dropped: the comparison cannot tell). A reworded behavior, or one recorded under different conditions, is not framed as
|
|
4608
|
+
a regression or recovery: both outcomes are shown beside the changed promise. A different spec-file revision with the
|
|
4609
|
+
same wording is disclosed beside the movement (a fingerprint is of the whole file); a revision that was not recorded is
|
|
4610
|
+
unknown, never the same.
|
|
4611
|
+
- Opening a behavior shows Mantine `Tabs`: **Promise** (wording, spec revision, recorded steps with the ones only one side
|
|
4612
|
+
has), **Outcomes** (each side's own provenance, execution time and failure), **Recordings** (one `<video>` per side with
|
|
4613
|
+
`preload="metadata"`, read only while that tab is on screen; each keeps its own attempt, spec revision and time
|
|
4614
|
+
origin, they are not synchronized, and "Go to a step in both recordings" seeks each to its own recorded step time when
|
|
4615
|
+
the steps are shared by name and timed; otherwise the page says why they are not aligned) and **Figures**.
|
|
4616
|
+
- Figures are compared like for like. Product latency is compared only for the same measurement on the same devices,
|
|
4617
|
+
environments and instrumentation, and reliability only when both sides count at least the minimum of independent
|
|
4618
|
+
executions against the same recorded spec revision (and a difference inside the uncertainty is "cannot be told apart").
|
|
4619
|
+
Otherwise the page says "Not compared" with the reasons and computes no change. Test execution time is labelled as such
|
|
4620
|
+
and is never product latency.
|
|
4621
|
+
|
|
4565
4622
|
## Watch a filtered set as a playlist
|
|
4566
4623
|
|
|
4567
4624
|
The Artifacts tab and an opened run have a **Watch these N results** button. It opens a Mantine `Modal` (`explorer/playlist.tsx`)
|
|
@@ -4710,7 +4767,7 @@ The narrowly scoped exceptions are:
|
|
|
4710
4767
|
| --- | --- | --- |
|
|
4711
4768
|
| Shared shell | Project switching, spec navigation, run selection, connection status, diagnostics, mobile index | AppShell, Burger, NavLink, Menu, Popover, NativeSelect, Drawer |
|
|
4712
4769
|
| UI catalog | Captured UI states per profile as cards with coverage badges, filters in the index column, surface coverage, an open state with its profiles side by side and where each picture came from, manifest download | AppShell navbar, SimpleGrid, Card, Image, MultiSelect, TextInput, Drawer, Accordion, Table, Badge, Alert |
|
|
4713
|
-
| Project home | Tests/runs/artifacts tabs, a run's Artifacts (files of its layers, shared recordings, direct links), Watch playlist of a filtered set, metrics, search, status/environment/domain/artifact-tag filters, run and artifact facets with saved views, grouping, sorting, show more | Container, Tabs, SimpleGrid, Paper, TextInput, MultiSelect, Popover, Button, Accordion, Modal, Grid, Switch |
|
|
4770
|
+
| Project home | Tests/runs/artifacts/compare/catalog health tabs, a two-run comparison with promise, outcome, recording and figure tabs per behavior, a run's Artifacts (files of its layers, shared recordings, direct links), Watch playlist of a filtered set, metrics, search, status/environment/domain/artifact-tag filters, run and artifact facets with saved views, grouping, sorting, show more | Container, Tabs, SimpleGrid, Paper, TextInput, MultiSelect, Popover, Button, Accordion, Modal, Grid, Switch |
|
|
4714
4771
|
| Test detail | Current outcomes, statistics, duration graph, product latency with budgets and baselines, history, artifacts, recording; the `layer` address parameter pins it to one run's result, labelled "This run" against "Latest combined evidence" | Drawer, Table, Badge, Alert, Stage |
|
|
4715
4772
|
| Specs | All six existing kinds, overview/index with title search and folder or declared-domain grouping, Gherkin rules/scenarios/examples with a coverage summary and Read / Watch / Inspect per behavior, Quint declarations/traces, DMN tables, source text | SpecHeader, Accordion, Tabs, Table, CodeHighlightTabs, ResultRow |
|
|
4716
4773
|
| Statecharts | Graph, screen/event/journey details, developer metadata, chart test results | Mantine cards/navigation and product compositions; graph exception above |
|
|
@@ -5800,9 +5857,9 @@ Diagnoses the report's metadata, so a domain filter or a coverage percentage can
|
|
|
5800
5857
|
|
|
5801
5858
|
`counts` keeps the denominators apart: spec files, defined specs, specs with an executed test (and those without: the defined coverage gaps), tests, outlines, examples and per-environment observations. `reconciliation` walks from the Specs count to the Tests count. `findings` name ambiguous and unmatched spec paths, identical or same-titled specs, a domain shared by nearly every spec, tests with no spec, checks that fall back to their title as identity and root mappings that matched nothing.
|
|
5802
5859
|
|
|
5803
|
-
Two paths are one logical spec only when a `root` mapping relates them (`from>to`: paths under `from` are the same specs as paths under `to`; an empty `from` matches every path). Without one, similar paths are reported as ambiguous and never merged. A check's label `outline` names the outline its example belongs to. Send `format=markdown` for Markdown.
|
|
5860
|
+
Two paths are one logical spec only when a `root` mapping relates them (`from>to`: paths under `from` are the same specs as paths under `to`; an empty `from` matches every path). Without one, similar paths are reported as ambiguous and never merged. A check's label `outline` names the outline its example belongs to; the labels `behavior-id` and `example-id` declare stable ids, which are counted and checked for ids shared by several checks. Send `format=markdown` for Markdown.
|
|
5804
5861
|
|
|
5805
|
-
- `root` (query): A root mapping `from>to`, URL-encoded. Repeatable or comma-separated.
|
|
5862
|
+
- `root` (query): A root mapping `from>to`, URL-encoded. Repeatable or comma-separated. It is added to the mappings the server is configured with (`catalog.roots`, `ATLAS_CATALOG_ROOTS`); `roots[].source` says which is which.
|
|
5806
5863
|
- `format` (query): `markdown` for a Markdown report instead of JSON.
|
|
5807
5864
|
- `project` (query): Project slug. Alternatively send X-Atlas-Project or use the project-prefixed route. Omit for the default project. Conflicting selectors are refused.
|
|
5808
5865
|
|
|
@@ -5816,12 +5873,12 @@ Diagnoses the report's metadata, so a domain filter or a coverage percentage can
|
|
|
5816
5873
|
|
|
5817
5874
|
`counts` keeps the denominators apart: spec files, defined specs, specs with an executed test (and those without: the defined coverage gaps), tests, outlines, examples and per-environment observations. `reconciliation` walks from the Specs count to the Tests count. `findings` name ambiguous and unmatched spec paths, identical or same-titled specs, a domain shared by nearly every spec, tests with no spec, checks that fall back to their title as identity and root mappings that matched nothing.
|
|
5818
5875
|
|
|
5819
|
-
Two paths are one logical spec only when a `root` mapping relates them (`from>to`: paths under `from` are the same specs as paths under `to`; an empty `from` matches every path). Without one, similar paths are reported as ambiguous and never merged. A check's label `outline` names the outline its example belongs to. Send `format=markdown` for Markdown.
|
|
5876
|
+
Two paths are one logical spec only when a `root` mapping relates them (`from>to`: paths under `from` are the same specs as paths under `to`; an empty `from` matches every path). Without one, similar paths are reported as ambiguous and never merged. A check's label `outline` names the outline its example belongs to; the labels `behavior-id` and `example-id` declare stable ids, which are counted and checked for ids shared by several checks. Send `format=markdown` for Markdown.
|
|
5820
5877
|
|
|
5821
5878
|
Scoped to one project. The same project may be selected on the unprefixed API using ?project= or X-Atlas-Project. Unknown projects return 404 on reads and are created by an authenticated upload.
|
|
5822
5879
|
|
|
5823
5880
|
- `project` (path, required): Project slug. Alternatively send X-Atlas-Project or use the project-prefixed route. Omit for the default project. Conflicting selectors are refused.
|
|
5824
|
-
- `root` (query): A root mapping `from>to`, URL-encoded. Repeatable or comma-separated.
|
|
5881
|
+
- `root` (query): A root mapping `from>to`, URL-encoded. Repeatable or comma-separated. It is added to the mappings the server is configured with (`catalog.roots`, `ATLAS_CATALOG_ROOTS`); `roots[].source` says which is which.
|
|
5825
5882
|
- `format` (query): `markdown` for a Markdown report instead of JSON.
|
|
5826
5883
|
|
|
5827
5884
|
Responses: `200` The diagnostics.; `304` Unchanged since the `If-None-Match` ETag.; `401` No token, or an unknown one. Send `Authorization: Bearer <token>`.; `503` The server is still reading its backends. Retry after the number of seconds in `Retry-After`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crvouga/atlas",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.16.0",
|
|
4
4
|
"description": "Atlas: specs of any kind, reported as layered evidence. Publish checks from any runner (JUnit, CTRF, a script), combine them across nodes, branches, environments and backends, gate CI on the result, and run statecharts against the real app.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -229,6 +229,18 @@
|
|
|
229
229
|
"maximum": 9007199254740991,
|
|
230
230
|
"description": "Checks whose id equals their title"
|
|
231
231
|
},
|
|
232
|
+
"declaredBehaviorIds": {
|
|
233
|
+
"description": "Checks that declare a `behavior-id` label",
|
|
234
|
+
"type": "integer",
|
|
235
|
+
"minimum": 0,
|
|
236
|
+
"maximum": 9007199254740991
|
|
237
|
+
},
|
|
238
|
+
"declaredExampleIds": {
|
|
239
|
+
"description": "Checks that declare an `example-id` label",
|
|
240
|
+
"type": "integer",
|
|
241
|
+
"minimum": 0,
|
|
242
|
+
"maximum": 9007199254740991
|
|
243
|
+
},
|
|
232
244
|
"basis": {
|
|
233
245
|
"type": "string"
|
|
234
246
|
}
|
|
@@ -278,6 +290,14 @@
|
|
|
278
290
|
"minimum": 0,
|
|
279
291
|
"maximum": 9007199254740991,
|
|
280
292
|
"description": "Distinct paths the mapping changed"
|
|
293
|
+
},
|
|
294
|
+
"source": {
|
|
295
|
+
"description": "Where it was declared: the server's `catalog.roots` setting or this request's `root` parameter",
|
|
296
|
+
"type": "string",
|
|
297
|
+
"enum": [
|
|
298
|
+
"configuration",
|
|
299
|
+
"request"
|
|
300
|
+
]
|
|
281
301
|
}
|
|
282
302
|
},
|
|
283
303
|
"required": [
|
|
@@ -262,7 +262,7 @@
|
|
|
262
262
|
},
|
|
263
263
|
"available": {
|
|
264
264
|
"type": "boolean",
|
|
265
|
-
"description": "False when the reference names no bytes
|
|
265
|
+
"description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
|
|
266
266
|
},
|
|
267
267
|
"scope": {
|
|
268
268
|
"description": "What this recording shows as its producer declared it: its own `scope`, else its attempt's, check's, part's or layer's. Absent: the scope is unknown, never live, physical or audible",
|
|
@@ -741,7 +741,7 @@
|
|
|
741
741
|
},
|
|
742
742
|
"available": {
|
|
743
743
|
"type": "boolean",
|
|
744
|
-
"description": "False when the reference names no bytes
|
|
744
|
+
"description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
|
|
745
745
|
},
|
|
746
746
|
"scope": {
|
|
747
747
|
"description": "What this recording shows as its producer declared it: its own `scope`, else its attempt's, check's, part's or layer's. Absent: the scope is unknown, never live, physical or audible",
|
|
@@ -262,7 +262,7 @@
|
|
|
262
262
|
},
|
|
263
263
|
"available": {
|
|
264
264
|
"type": "boolean",
|
|
265
|
-
"description": "False when the reference names no bytes
|
|
265
|
+
"description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
|
|
266
266
|
},
|
|
267
267
|
"scope": {
|
|
268
268
|
"description": "What this recording shows as its producer declared it: its own `scope`, else its attempt's, check's, part's or layer's. Absent: the scope is unknown, never live, physical or audible",
|
|
@@ -741,7 +741,7 @@
|
|
|
741
741
|
},
|
|
742
742
|
"available": {
|
|
743
743
|
"type": "boolean",
|
|
744
|
-
"description": "False when the reference names no bytes
|
|
744
|
+
"description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
|
|
745
745
|
},
|
|
746
746
|
"scope": {
|
|
747
747
|
"description": "What this recording shows as its producer declared it: its own `scope`, else its attempt's, check's, part's or layer's. Absent: the scope is unknown, never live, physical or audible",
|
|
@@ -249,7 +249,7 @@
|
|
|
249
249
|
},
|
|
250
250
|
"available": {
|
|
251
251
|
"type": "boolean",
|
|
252
|
-
"description": "False when the reference names no bytes
|
|
252
|
+
"description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
|
|
253
253
|
},
|
|
254
254
|
"scope": {
|
|
255
255
|
"description": "What this recording shows as its producer declared it: its own `scope`, else its attempt's, check's, part's or layer's. Absent: the scope is unknown, never live, physical or audible",
|
|
@@ -253,7 +253,7 @@
|
|
|
253
253
|
},
|
|
254
254
|
"available": {
|
|
255
255
|
"type": "boolean",
|
|
256
|
-
"description": "False when the reference names no bytes
|
|
256
|
+
"description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
|
|
257
257
|
},
|
|
258
258
|
"scope": {
|
|
259
259
|
"description": "What this recording shows as its producer declared it: its own `scope`, else its attempt's, check's, part's or layer's. Absent: the scope is unknown, never live, physical or audible",
|
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
"type": "integer",
|
|
162
162
|
"minimum": 0,
|
|
163
163
|
"maximum": 9007199254740991,
|
|
164
|
-
"description": "References that name no bytes"
|
|
164
|
+
"description": "References that name no bytes, or bytes the layer does not hold"
|
|
165
165
|
}
|
|
166
166
|
},
|
|
167
167
|
"required": [
|
|
@@ -314,7 +314,7 @@
|
|
|
314
314
|
},
|
|
315
315
|
"available": {
|
|
316
316
|
"type": "boolean",
|
|
317
|
-
"description": "False when the reference names no bytes
|
|
317
|
+
"description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
|
|
318
318
|
},
|
|
319
319
|
"scope": {
|
|
320
320
|
"description": "What this recording shows as its producer declared it: its own `scope`, else its attempt's, check's, part's or layer's. Absent: the scope is unknown, never live, physical or audible",
|
|
@@ -420,6 +420,28 @@
|
|
|
420
420
|
],
|
|
421
421
|
"additionalProperties": {}
|
|
422
422
|
}
|
|
423
|
+
},
|
|
424
|
+
"kind": {
|
|
425
|
+
"description": "The kind of the part that held it. With the producer, environment and parameters it is the condition the result was recorded under. Absent from an older server",
|
|
426
|
+
"type": "string"
|
|
427
|
+
},
|
|
428
|
+
"parameters": {
|
|
429
|
+
"description": "The other choices that made it its own result (a device size, a locale…). Absent when there are none, and from an older server",
|
|
430
|
+
"type": "object",
|
|
431
|
+
"propertyNames": {
|
|
432
|
+
"type": "string"
|
|
433
|
+
},
|
|
434
|
+
"additionalProperties": {
|
|
435
|
+
"type": "string"
|
|
436
|
+
}
|
|
437
|
+
},
|
|
438
|
+
"specRevision": {
|
|
439
|
+
"description": "The fingerprint of its spec file the layer recorded. Absent means not recorded, never \"the same\"",
|
|
440
|
+
"type": "string"
|
|
441
|
+
},
|
|
442
|
+
"recordedTitle": {
|
|
443
|
+
"description": "The title this run's layer gave the check. `title` is the check's newest title in the whole history; this is the wording as recorded. Absent from an older server",
|
|
444
|
+
"type": "string"
|
|
423
445
|
}
|
|
424
446
|
},
|
|
425
447
|
"required": [
|
|
@@ -494,7 +516,7 @@
|
|
|
494
516
|
"type": "integer",
|
|
495
517
|
"minimum": 0,
|
|
496
518
|
"maximum": 9007199254740991,
|
|
497
|
-
"description": "References that name no bytes"
|
|
519
|
+
"description": "References that name no bytes, or bytes the layer does not hold"
|
|
498
520
|
}
|
|
499
521
|
},
|
|
500
522
|
"required": [
|
|
@@ -194,7 +194,7 @@
|
|
|
194
194
|
},
|
|
195
195
|
"available": {
|
|
196
196
|
"type": "boolean",
|
|
197
|
-
"description": "False when the reference names no bytes
|
|
197
|
+
"description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
|
|
198
198
|
},
|
|
199
199
|
"scope": {
|
|
200
200
|
"description": "What this recording shows as its producer declared it: its own `scope`, else its attempt's, check's, part's or layer's. Absent: the scope is unknown, never live, physical or audible",
|
|
@@ -219,7 +219,7 @@
|
|
|
219
219
|
},
|
|
220
220
|
"available": {
|
|
221
221
|
"type": "boolean",
|
|
222
|
-
"description": "False when the reference names no bytes
|
|
222
|
+
"description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
|
|
223
223
|
},
|
|
224
224
|
"scope": {
|
|
225
225
|
"description": "What this recording shows as its producer declared it: its own `scope`, else its attempt's, check's, part's or layer's. Absent: the scope is unknown, never live, physical or audible",
|
|
@@ -102,6 +102,23 @@
|
|
|
102
102
|
},
|
|
103
103
|
"additionalProperties": false
|
|
104
104
|
},
|
|
105
|
+
"catalog": {
|
|
106
|
+
"default": {
|
|
107
|
+
"roots": []
|
|
108
|
+
},
|
|
109
|
+
"type": "object",
|
|
110
|
+
"properties": {
|
|
111
|
+
"roots": {
|
|
112
|
+
"default": [],
|
|
113
|
+
"description": "Root mappings `from>to` that relate spec paths a producer publishes to the paths the specs are recorded under (an empty `from` matches every path). The catalog health report applies them to every request, beside any `root` the request adds",
|
|
114
|
+
"type": "array",
|
|
115
|
+
"items": {
|
|
116
|
+
"type": "string"
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"additionalProperties": false
|
|
121
|
+
},
|
|
105
122
|
"refreshSeconds": {
|
|
106
123
|
"default": 10,
|
|
107
124
|
"description": "How often the backends are looked at for layers written by something other than this server",
|
|
@@ -975,7 +975,7 @@
|
|
|
975
975
|
},
|
|
976
976
|
"available": {
|
|
977
977
|
"type": "boolean",
|
|
978
|
-
"description": "False when the reference names no bytes
|
|
978
|
+
"description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
|
|
979
979
|
},
|
|
980
980
|
"scope": {
|
|
981
981
|
"description": "What this recording shows as its producer declared it: its own `scope`, else its attempt's, check's, part's or layer's. Absent: the scope is unknown, never live, physical or audible",
|
|
@@ -273,7 +273,7 @@
|
|
|
273
273
|
},
|
|
274
274
|
"available": {
|
|
275
275
|
"type": "boolean",
|
|
276
|
-
"description": "False when the reference names no bytes
|
|
276
|
+
"description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
|
|
277
277
|
},
|
|
278
278
|
"scope": {
|
|
279
279
|
"description": "What this recording shows as its producer declared it: its own `scope`, else its attempt's, check's, part's or layer's. Absent: the scope is unknown, never live, physical or audible",
|
|
@@ -926,7 +926,7 @@
|
|
|
926
926
|
},
|
|
927
927
|
"available": {
|
|
928
928
|
"type": "boolean",
|
|
929
|
-
"description": "False when the reference names no bytes
|
|
929
|
+
"description": "False when the reference names no bytes: no bundle key, address or inline text, or a bundle key that the layer's own bundle does not hold"
|
|
930
930
|
},
|
|
931
931
|
"scope": {
|
|
932
932
|
"description": "What this recording shows as its producer declared it: its own `scope`, else its attempt's, check's, part's or layer's. Absent: the scope is unknown, never live, physical or audible",
|