Browsing & Filtering
The TEST RUNS tab is a single-pane workspace with a borderless toolbar and a cycle-grouped run list. Search, filter, and layout preferences apply instantly on the client. Filter and search state is reflected in the URL so views are bookmarkable and shareable.
Toolbar
The toolbar shows the page title with a total run count, then (right-aligned):
- Search — filters runs by title.
- Filter — opens a Linear-style fly-out with multi-select fields (keyboard shortcut f). Active selections appear as removable chips below the toolbar.
- Layout toggle — switch between table (default) and cards.
- New run — opens the create-run composer (requires Create test runs permission).
Scope tabs
A pill tab strip sits above search and filters, partitioning the list by lifecycle before any search or facet is applied:
| Tab | What it shows |
|---|---|
| All | Every run regardless of lifecycle state. |
| Active (default) | Open runs still accepting results. This is the view you land on. |
| Closed | Completed, read-only runs. |
The active non-All tab shows its run count. Search and filters operate on the scoped subset.
Cycle groups
Runs are grouped under their assigned cycle. Each group header shows the cycle name and run count. Runs with no cycle appear under No cycle. Click a run row or card to open its detail page.
Run row anatomy
| Element | What it shows |
|---|---|
| Status glyph | A lifecycle-shaped leading icon (planned arc, in-progress ring, closed check). |
| Run id + title | The run identifier (TR-…) and title. Click to open the detail page. |
| Lifecycle pill | The current workflow state badge. |
| Progress bar | A segmented bar showing result-status distribution plus completed-out-of-total count. |
| Contributors | Avatar stack of users who recorded results on the run. |
| Row menu | Context actions (Edit, Delete) depending on permissions. |
Bulk selection
Select multiple runs with the row checkboxes (hold Shift to range-select). A floating bulk bar appears, reading N selected with a × to clear it, and offering four actions:
- Cycle — move every selected run to one cycle. The menu lists the project’s cycles, leaving completed ones out, and leads with No cycle, which detaches the runs from whatever cycle they were in.
- Environment — apply one environment across the selection.
- Owner — assign every still-present case in the selected runs to one tester. This is per-case assignment, not a run-owner field.
- Delete — remove the selected runs (requires Delete test runs permission).
Each bulk action is one cache write plus one queued mutation — the same optimistic pattern as single-row edits. Eight selected runs are one request, not eight.
Large selections
There is no cap on how many runs you can act on. The server takes 200 runs per request, so a selection larger than that is split into batches of 200 behind the scenes and sent for you. You still get one confirmation at the end, and the rows still update the moment you act.
The sync pill counts the batches. A 250-run action is the only place the split is visible: the pill lists batch 1 of 2 and batch 2 of 2 rather than one entry. The toast at the end still reads as a single action.
A batch that fails does not take the rest down with it. The partial receipt below reports the count that landed and reverts only the rows that did not — so a 250-run move whose second batch is refused reads Moved 200 of 250 runs to the cycle — 50 failed, and the 200 keep their new cycle. A whole batch lost this way is reported as a count without a reason, because the server never got to name one.
What the receipt tells you
A batch is not all-or-nothing, and the toast says so rather than rounding up to “done”. When everything lands you get a plain line — Moved 5 runs to the cycle, Removed 3 runs from the cycle, Set the environment on 8 runs, Assigned 4 runs, Deleted 2 runs.
When part of the batch is refused you get a partial receipt in the error tone, naming the count and — when every refusal agrees on one reason — the reason itself: Moved 4 of 5 runs to the cycle — 1 failed (closed), or Couldn’t delete 2 runs (no longer available). Only the runs the server named revert on screen; the rest keep their new value, so you never have to redo the part that worked.
“Unchanged” is not a failure. Moving four runs into a cycle three of them are already in is a clean success, not a partial one — the server reports one updated and three unchanged, and the receipt reads accordingly.
Search
The search field filters runs by title. The search term is stored in the URL so the filtered view persists across reloads.
Filters
Click the filter button to open the fly-out. Each field is multi-select; selections combine with AND across fields and OR within a field.
| Filter | What it matches |
|---|---|
| State | Runs in the selected workflow states. Each option carries its admin-configured state icon and colour. |
| Environment | Runs assigned to the selected environments. |
| Tags | Runs tagged with any of the selected tags. Options carry their admin-configured tag icon and colour. |
| Contributors | Runs where the selected users have recorded at least one result. |
| Created by | Runs created by the selected users. |
| Created | Runs created within a rolling window — Last 24 hours, Last 7 days, Last 30 days, or Older than 30 days. |
| Linked issues | Runs with or without external tracker issues linked to their results (Has linked issues / No linked issues). |
Filters combine with AND logic. A run must match every active filter to appear. Within a multi-select filter, values combine with OR logic.