Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/api-contracts-0-74-0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@qawolf/cli": minor
---

Upgrades `@qawolf/api-contracts` to `0.74.0`.

`qawolf run getAttemptArtifacts --attempt-id <id>` reads metadata and signed artifact URLs for a finished run attempt. `qawolf run find` includes failed-attempt discovery metadata. `qawolf run get` includes attempt IDs and reports when a run was superseded by a newer run.
4 changes: 2 additions & 2 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
"@clack/prompts": "1.5.1",
"@napi-rs/keyring": "1.3.0",
"@oxc-node/core": "0.1.0",
"@qawolf/api-contracts": "0.73.0",
"@qawolf/api-contracts": "0.74.0",
"@qawolf/emails": "1.1.1",
"@qawolf/flow-targets": "1.0.0",
"@qawolf/flows": "0.1.4",
Expand Down
3 changes: 2 additions & 1 deletion skills/qawolf-cli/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,8 +178,9 @@ that `url`; never guess a route and never send a repository link in its place.
| `qawolf legacyTrigger resume` | write | Resume one legacy trigger, the older per-environment kind; use trigger.resume for a current one. Its copies in pull request environments resume too, and a scheduled one jumps to the next upcoming slot even if it was not paused. For migration only; it goes when legacy triggers go. |
| `qawolf run create` | write | Create a run for the selected flows and/or tags in an environment. |
| `qawolf run diagnose` | write | Diagnose failed flows in a run as reproductions of a bug or maintenance report owned by the caller's team. The issue's type selects the diagnosis. Each flow must have failed in the run. A flow that is already diagnosed moves to this issue. The diagnosis appears on the run, and the reproduction appears under the issue's reproductions. Coverage requests cannot be diagnosed; use issue.addFlows to cover flows instead. |
| `qawolf run find` | read | List an environment's recent runs, newest first. |
| `qawolf run find` | read | List an environment's recent runs, newest first, including failed-attempt discovery metadata. |
| `qawolf run get` | read | Get a run's status, per-flow results, links, and how many of its bugs are blocking. |
| `qawolf run getAttemptArtifacts` | read | Get metadata and signed artifact URLs for one finished run attempt. |
| `qawolf run reattempt` | write | Request new attempts for a run's flows, in the same run. A flow is eligible once its result is failed or canceled and QA Wolf's automatic retries have finished. A fully investigated run no longer accepts reattempts. Attempts run with the latest flow code. Poll run.get for results. |
| `qawolf run stop` | write | Stop a run, including its queued flows and automatic retries. Stopping is asynchronous and can update run-status messages and commit statuses in connected integrations. Repeated requests are safe, and finished runs keep their results. A run that is still being created returns not found; retry once run.get returns the run. If run.get returns a different runId, use that ID. Poll run.get for results. |
| `qawolf runner act` | write | Perform one raw action on a runner's screen. A browser runner takes click, double_click, scroll, move, drag, keypress, navigate and type; a mobile runner takes tap, swipe, fill and type. A browser runner answers mobile actions with action-not-supported-on-browser; a mobile runner answers the other browser actions with action-not-supported-on-mobile. Use - to read a whole action as JSON from stdin |
Expand Down
12 changes: 9 additions & 3 deletions skills/qawolf-cli/references/run-results.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,10 @@ A run that has been requested but not yet created answers exit `8` too, and
says it is still being created. That one clears on its own, so read the message
rather than the code before deciding whether to poll.

Poll `status` until it reaches `passed`, `failed` or `canceled`. The other
values mean the run is still going.
Poll `status` until it reaches `passed`, `failed`, `canceled` or `superseded`.
When it is `superseded`, this run will never change again. Read the replacement
run in `supersededBy.runId` for the verdict. `queued` and `running` mean the run
is still going.

## Fields a passing run does not show you

Expand Down Expand Up @@ -185,13 +187,17 @@ Every documented field of the `run.get` response. `[]` marks an array, so
- `git.commitUrl` — Link to the commit on the code host.
- `needsReview` — True once every flow has finished its attempts and at least one failed flow still has no diagnosis, including one whose investigation carried over to a later run. `status` stays `running` until that failure is diagnosed, so a caller that is not waiting for a diagnosis can stop polling here and read the run's failed flows.
- `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.
- `status` — One of: queued, running, passed, failed, canceled
- `status` — One of: queued, running, passed, failed, canceled, superseded
- `supersededBy` — The run that replaced this one, present only when `status` is `superseded`. A newer deployment to the same branch and environment (and service, when the deployment named one) cancels the older run's unfinished flows and takes over. Deduplication ignores the commit, so the replacement may be testing a later commit than this run did. Only the direct replacement is named; that run can itself be superseded.
- `supersededBy.runId` — The id of the run.
- `supersededBy.url` — Absolute URL of the replacement run's page.
- `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.
- `flows` — The run's flows, ordered alphabetically by name. Only the flows matching flowStatuses when the request set it.
- `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.
- `flows[].attempts[].logsUrl` — Signed URL for the attempt's execution logs.
- `flows[].attempts[].traceUrl` — Signed URL for the attempt's Playwright trace (a trace.zip; open it with `npx playwright show-trace`).
- `flows[].attempts[].videoUrl` — Signed URL for the attempt's screen recording.
- `flows[].attempts[].attemptId` — The id of the run attempt.
- `flows[].attempts[].kind` — One of: automated, manual
- `flows[].attempts[].startedAt` — Absent when the attempt failed before it could start.
- `flows[].attempts[].status` — One of: passed, failed, canceled
Expand Down
6 changes: 4 additions & 2 deletions src/commands/qawolfCliRunResults.template.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,10 @@ A run that has been requested but not yet created answers exit `8` too, and
says it is still being created. That one clears on its own, so read the message
rather than the code before deciding whether to poll.

Poll `status` until it reaches `passed`, `failed` or `canceled`. The other
values mean the run is still going.
Poll `status` until it reaches `passed`, `failed`, `canceled` or `superseded`.
When it is `superseded`, this run will never change again. Read the replacement
run in `supersededBy.runId` for the verdict. `queued` and `running` mean the run
is still going.

## Fields a passing run does not show you

Expand Down
Loading