@qawolf/cli 1.33.0 → 1.35.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.
@@ -8,6 +8,32 @@ this file for the parts a single response cannot show you: fields that appear
8
8
  only when something fails, rules about the artifact URLs, and how to read a
9
9
  trace without opening the trace viewer.
10
10
 
11
+ ## Start with the failed flows
12
+
13
+ A run of a whole suite can hold hundreds of flows, and the full response then
14
+ runs to hundreds of kilobytes: more than a shell shows you, and more than any
15
+ investigation needs. The interesting part is a handful of failed flows, so ask
16
+ for those first:
17
+
18
+ ```bash
19
+ qawolf run get --run-id "$RUN_ID" --flow-statuses failed --json
20
+ ```
21
+
22
+ `--flow-statuses` takes one or more of `queued`, `running`, `passed`, `failed`
23
+ and `canceled`, separated by spaces (`--flow-statuses failed canceled`), and
24
+ keeps only the flows whose status matches. The run-level fields (`status`,
25
+ `blockingBugCount`, `git`, `url`) still describe the whole run, so a filtered
26
+ read tells you both how the run went and which flows to look at. Widen the
27
+ filter, or drop it, only when you need the other flows too.
28
+
29
+ A flow that failed and then passed on a retry has status `passed`, so a
30
+ `failed`-only read leaves it out. If the flow you were asked about passed on a
31
+ retry, add `passed` to the filter and read its earlier attempts. For a flow
32
+ that is still queued, running or was canceled, widen the filter or drop it.
33
+
34
+ Do not save the full response to a file and script over it to find the failed
35
+ flows. The filter answers that in one call.
36
+
11
37
  ## The shape
12
38
 
13
39
  A run holds flows, a flow holds attempts, and artifacts hang off an attempt:
@@ -63,7 +89,7 @@ recording) and `traceUrl` (a Playwright `trace.zip`).
63
89
  authentication header is needed and no QA Wolf credentials are involved.
64
90
 
65
91
  ```bash
66
- qawolf run get --run-id "$RUN_ID" --json \
92
+ qawolf run get --run-id "$RUN_ID" --flow-statuses failed --json \
67
93
  | jq -r '.flows[].attempts[-1].traceUrl // empty' \
68
94
  | head -1 \
69
95
  | xargs -r curl -sS -o trace.zip
@@ -159,7 +185,8 @@ Every documented field of the `run.get` response. `[]` marks an array, so
159
185
  - `git.commitUrl` — Link to the commit on the code host.
160
186
  - `runId` — The run this response describes. Treat it as canonical: it can differ from the id you asked for. A deploy notification returns a run id before the run exists, and if a second notification for the same commit is folded into an earlier run, that id resolves to the earlier run instead.
161
187
  - `status` — One of: queued, running, passed, failed, canceled
162
- - `flows` — The run's flows, ordered alphabetically by name.
188
+ - `blockingBugCount` — How many bugs this run found are blocking: still open, and priority urgent, high, or unprioritized — unprioritized counts because nobody has ruled it out yet. This is what `failed` is derived from, so it explains a failure rather than adding a second verdict: gate on `status`, then read this to say how many bugs are holding the build. It counts a bug filed against a later run by an investigation that carried over from this one, and it drops a bug once that bug is resolved.
189
+ - `flows` — The run's flows, ordered alphabetically by name. Only the flows matching flowStatuses when the request set it.
163
190
  - `flows[].attempts` — The flow's finished execution attempts, oldest first, including manual Wolf Browser attempts. Present once at least one attempt has finished, so a flow that passed after retries also lists its failed attempts. Artifact URLs appear only on automated attempts that reached a verdict, stay valid for at least a day (call run.get again for fresh ones), and can return 404 when the attempt did not produce that artifact.
164
191
  - `flows[].attempts[].logsUrl` — Signed URL for the attempt's execution logs.
165
192
  - `flows[].attempts[].traceUrl` — Signed URL for the attempt's Playwright trace (a trace.zip; open it with `npx playwright show-trace`).
@@ -195,6 +195,44 @@ The answer holds one entry per action reached, and the field to read on each is
195
195
 
196
196
  The sequence stops at the first action that fails. `--continue-on-failure` carries on past one that reached the runner and did not take effect, which is only safe for actions that do not depend on each other: a `type` after a failed `click` goes to whatever has focus. A runner that cannot be reached, a screen that cannot serve, or running out of time ends the sequence either way, and the message names every action that did not succeed.
197
197
 
198
+ ## Video recording
199
+
200
+ Use `record` to control video capture on a Playwright runner. Start a flow first
201
+ so the runner has a screen, then start a manual capture:
202
+
203
+ ```sh
204
+ qawolf runner record start --runner ci --json
205
+ # Keep result.state.active.id from the response and use it to stop this capture:
206
+ qawolf runner record stop <recording-id> --runner ci
207
+ qawolf runner record status --runner ci
208
+ qawolf runner record auto on --runner ci
209
+ qawolf runner record auto off --runner ci
210
+ ```
211
+
212
+ Start generates a UUID unless you pass `--recording-id <uuid>`. If a start
213
+ response is lost, the error includes that UUID: check `record status` and reuse
214
+ the UUID when retrying. Stop always names a specific recording, so retrying it
215
+ cannot stop a later capture. Manual recordings span runs and suppress automatic
216
+ capture until stopped. The auto setting affects subsequent full runs.
217
+ An active automatic recording ends with its run; `record stop` cannot interrupt
218
+ it. If a stop publishes a recording with `status: "failed"`, the CLI returns
219
+ exit code 1 and still prints the manifest so callers can inspect it.
220
+
221
+ Published recordings remain accessible after the runner terminates:
222
+
223
+ ```sh
224
+ qawolf runner list-recordings --runner ci --json
225
+ qawolf runner list-recordings --runner ci --recording-id <uuid> --json
226
+ qawolf runner list-recordings --runner ci --page-token '<nextPageToken>' --json
227
+ ```
228
+
229
+ Each response is one page with `recordings` and an optional `nextPageToken`.
230
+ Follow that token for more; the order is storage-key order, not newest-first.
231
+ Entries include status, run ids, a stable platform `url`, and an expiring
232
+ `videoUrl` when video is available. An empty lookup means the recording has not
233
+ been published or does not exist. Abrupt runner loss may leave video unavailable.
234
+ Keep the runner id for history lookups after termination clears the local default.
235
+
198
236
  ## The recorder: what you cannot get from pixels
199
237
 
200
238
  `qawolf runner events recorder` is the capability that has no equivalent in a