# Coverage matrix

> Read the latest test result per test case × environment at a glance — navigate to the Coverage screen, understand the matrix layout, and use the suite, status, and search filters.

The **Coverage matrix** gives you an at-a-glance view of the latest result for every test case across every environment in your project. It answers the question "what is the current state of each test case in each deployment target?" without having to open individual runs.

## Reaching the screen

Open a project, then click **Coverage** in the project sidebar (grid icon). The URL is `/projects/:projectId/coverage-matrix`.

## How to read the matrix

The matrix is a table where:

- **Rows** are the project's test cases, ordered by case number and grouped under suite-band headers. Cases not assigned to any suite appear under an **Unassigned** band.
- **Columns** are the project's environments (see [Environments](https://docs.probara.net/en/guides/environments/)). Column order follows the order environments were created. A project with no environments shows no matrix — create at least one environment first.
- **Each cell** shows the most recent result recorded for that test case in that environment across all runs linked to it. For a parameterized case, a run that holds several run cases of it shows the worst status among them: Failed, then Blocked, Retest, Untested, Skipped, and Passed. See [Parameterized test cases](https://docs.probara.net/en/guides/parameterized-test-cases/#runs).

### Cell states

| Cell appearance                                                                     | Meaning                                                                                                           |
| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| A softly tinted cell with a centred result icon — tick, cross, skip, block or retry | The most recent run result for this case in this environment (`Passed`, `Failed`, `Skipped`, `Blocked`, `Retest`) |
| A small grey dash                                                                   | The case ran in this environment but no result was recorded (**Untested**)                                        |
| An empty cell                                                                       | No result has ever been recorded for this case in that environment (**Not run**)                                  |

The icon carries the state and the tint only reinforces it, so the grid can be read without relying on colour; every cell also announces its state to a screen reader, including the two empty ones.

When multiple runs link to the same environment and include the same test case, only the result with the latest execution timestamp is shown. If two results share the same timestamp, the one with the higher internal ID wins.

Results from runs that have **no environment assigned** are never reflected in the matrix — each column only counts runs explicitly linked to that environment.

## Filters

Above the matrix, the filter bar lets you narrow the visible rows. All active filters compose — rows must satisfy every active filter at once.

### Suite filter

Select one or more suites to show only their test cases. Rows from any selected suite are included (OR semantics across the selection). Deselecting all suites removes the filter and shows all cases again.

- **Single selection** — identical to the previous behavior; only cases in that suite appear.
- **Multiple selections** — cases from any of the selected suites are shown together. For example, selecting both "Authentication" and "Checkout" shows all cases from either suite.
- **Clearing the selection** — all cases (regardless of suite) are shown.

### Status filter

Filters rows by derived latest status. Select one or more statuses, including **Not run** (rows that have at least one empty cell in any environment). Multiple statuses are OR-combined.

### Search bar

The search bar lets you find test cases by name or display ID. Type any text to filter rows to cases whose title or display ID contains your query as a case-insensitive substring.

**Search by** scope selector — click the icon to the left of the search field to choose what to match against:

| Scope             | What it searches                                      |
| ----------------- | ----------------------------------------------------- |
| **All** (default) | Case title **or** display ID                          |
| **Title**         | Case title only                                       |
| **ID**            | Display ID only (the `#<number>` shown in the matrix) |

For example, typing `42` with scope **ID** finds only the case with display ID `#42`; typing `42` with scope **All** also finds any case whose title contains "42".

The search query is written to the URL after a brief pause, so you can bookmark or share a filtered view. Clearing the field removes the text filter.

Changing the search scope does not reset your current query or other active filters.

All active filters (Suite + Status + Search) are reflected in the URL so you can bookmark or share a focused view.

The rows-per-page selector and the range summary appear below the matrix once there are enough test cases to paginate; the previous/next and page-number controls appear only when there are more test cases than fit on one page. Changing the page keeps the column list and active filters stable — only the rows change.

## Related guides

- [Environments](https://docs.probara.net/en/guides/environments/) — create and manage the environments that appear as matrix columns.
- [Run execution panel](https://docs.probara.net/en/guides/runs/execution-panel/) — run test cases and record results that populate the matrix cells.
