# AI judgments of sessions

> Sequential asks every eligible session your project's questions and stores the answers as probabilities. A stored judgment does not change.

> **In short**
>
> - Background judging is on by default for each project. Owners and admins turn it off or on under **Settings** → **Projects** → your project → **Insights**. Your Sequential server must also allow it.
> - Sequential judges an eligible session after it has had no new event for 30 minutes.
> - The judge reads a short text digest of the events, never the recording.
> - Sequential stores the answers as probabilities. The judge writes no prose.
> - A stored judgment never changes. If you reword, add or remove a question, the change applies only to sessions judged afterwards.

## What it is for

Nobody watches every recording. Filters find only what you already know to look for. Judging asks each judged session the same questions, so you can compare and rank the answers.

The questions are your project's rubric. See "Example questions" and "The default rubric" below, and [Rubric](/docs/rubric).

## How a session is judged

1. **Sequential finds sessions with no new events.** If background judging is on for your project, Sequential looks every 5 minutes for unjudged sessions. A session needs a session id, at least 3 events and no new event for 30 minutes.
2. **Sequential writes a digest.** It turns the stored events into a short text: one line per event, long pauses and a few session facts. The judge reads this text, never the recording.
3. **The judge answers every question in one request.** Sequential sends the digest and your rubric's questions to the judge. Sequential does not keep the digest. See [AI and third parties](/docs/ai-and-third-parties).
4. **Sequential stores the answers as numbers.** It stores a probability for each answer. See "What Sequential stores" below.

Sequential never sends the user id to the judge. It removes hosts and query strings from URLs. It also drops some custom-event properties by their name. See "Digest lines and session facts" below.

> **The property filter reads names, not values**
>
> Sequential does not check property values. If a property has an ordinary name, Sequential sends its value unchanged. The **Insights** tab has no property name filter. It also keeps hosts and query strings in text such as error messages. See "The Insights tab" below.

## A judgment does not change

Sequential judges each session once in the background. So each answer stays tied to the questions that produced it. Also, a wording edit does not start a paid re-judge of your older sessions.

| Change | When it applies |
|---|---|
| Reword, add, remove or turn off a question | Only to sessions judged afterwards. Earlier sessions keep their answers and show "judged with an earlier rubric". |
| Sequential moves to a newer version of the judge | Only to sessions judged afterwards. Earlier sessions show "judged with an earlier rubric". |
| Change a weight | At once. Every judged session re-ranks. |
| New events arrive after judging | Never. The judgment does not include them. |

Nothing in the app changes a stored judgment. The thumbs up and down on Watch and Ask record whether an answer was right. They never re-judge. See [Feedback and calibration](/docs/feedback-and-calibration).

## When the judge cannot tell

An unclear answer is a result, not a failure. It is not a "no". "I can't tell whether an error stopped them" and "no error stopped them" are different answers.

Signal chips on Watch and in the **Insights** tab, and weak matches in Ask, hide what the judge rated unlikely. So a missing chip or a short Ask result does not prove that something did not happen.

## Limits

- **Background judging can be off.** An owner or admin can switch it off for the project. The Sequential server can also keep it off for every project. Watch then says why. The **Insights** tab and **Ask** do not need this switch.
- **Sequential skips short and old sessions.** Sequential never judges a session with fewer than 3 meaningful events. Background judging picks up only sessions whose last event is within the past 7 days. Turning it on does not judge older history by itself.
- **There is a daily allowance.** Background judging has its own daily allowance per project. **Ask** in the app, the rubric editor's **Try it** preview and the **Insights** tab each have their own allowance. When an allowance runs out, judging resumes after midnight UTC.
- **Sequential trims long sessions.** The judge reads at most 255 events. See "How long sessions are trimmed" below.
- **Sequential does not retry a failed session.** Sequential retries temporary errors, such as a timeout. Any other error from the judge leaves the session unjudged. Watch counts failed and too-short sessions under **Not yet judged**.
- **A new question lowers older sessions.** An older judgment scores nothing on a question added after it, so it can rank lower on Watch.
- **The judge reads only 80 characters of properties.** Sequential cuts each custom event's properties to 80 characters in total. Put the meaning in the event name.
- **The Insights tab and Watch can disagree.** The tab makes its own judgment from a different digest. It never changes what Watch uses.

### Example questions

For example, judging can answer:

- Did the trial user who opened billing add a card, or give up?
- Did an error stop someone finishing checkout, or were they unsure what to do?
- Which of yesterday's sessions should a product manager watch first?

### The default rubric

The default rubric asks:

- What did the user come to do?
- How did it end?
- How much friction did they hit?
- Did an error stop them?
- Does it look like a product bug?
- Is the session worth watching?

It also has a few more signals and moments.

### What Sequential stores

The table shows what Sequential stores for each group in your rubric.

| Rubric group | Example | What Sequential stores |
|---|---|---|
| **Verdicts** | Intent | A probability for each option, such as 0.81 for "Buy or subscribe" |
| **Scales** | Friction | A probability for each level |
| **Signals** | Hit an error | The probability of yes. A signal is a yes-or-no question. |
| **Moments** | A moment from your rubric | The probability that it happened, and the event it most likely was. There is no event if the judge rates the moment unlikely or cannot identify one event. |

The judge writes no prose. Sequential builds the sentences on Watch from these stored numbers and your rubric's wording. The replay's **Insights** tab builds its sentences from that tab's own judgment. See [Reading a verdict](/docs/reading-verdicts).

### Digest lines and session facts

Each event becomes one numbered line, except System events. The digest also has a line for each pause of 10 seconds or more.

Each line has the event's time. For anything but a page view, it also has the page the event happened on.

| Event | What the judge reads |
|---|---|
| Page view | The path, such as `/settings/billing`, or a mobile screen name |
| Click, rage click, dead click | The element's text or id, such as "Add card" |
| Form submit | The form's name |
| Error | The error message and type |
| Custom event | Its name, such as `trial_started`, and its properties as `key=value`, cut to 80 characters in total |
| Identify | Only that the visitor was identified |

Sequential cuts each name, path, element text or error message to 60 characters.

Sequential cuts each page URL to its path. In other text, Sequential removes the host and query string from a full URL.

Sequential drops a custom-event property if its name starts with `$`. It also drops a property if its name contains a word such as `email`, `name`, `phone`, `address`, `user`, `account`, `ip`, `card`, `password` or `token`.

Session facts are:

- duration
- device type
- identified or anonymous
- entry page
- browser
- operating system
- country
- pages visited

If the recording's DevTools capture measured them, the facts also include counts of JavaScript errors, failed requests and console errors.

### Unclear answers and hidden results

Some answers are unclear because the digest does not have enough information. Sequential keeps an unclear answer and a "no" apart on purpose.

These views hide what the judge rated unlikely. They do not label it:

- signal chips on Watch
- signal chips in the **Insights** tab
- weak matches in Ask

See [Reading a verdict](/docs/reading-verdicts).

### Missing counts

Sequential leaves out what it did not measure. It never replaces it with zero.

A session recorded without DevTools capture has no error counts. The default rubric tells the judge that a missing count means "not measured". A zero would say "nothing went wrong" and pull the answer the wrong way.

### Which label edits count as rewording

The judge does not read weights, question labels, or the label of an option that has criteria. So these changes apply at once.

| Change | When it applies |
|---|---|
| Change a question label, or the label of an option that has criteria | At once. The new label shows on past judgments made under the same wording. |
| Rename a scale's level, or an option whose criteria are blank | Only to sessions judged afterwards, like a rewording. The judge reads these labels. |

### The Watch score

Watch puts judged sessions into three groups. In each group, the session with the highest Watch score comes first. [Watch](/docs/watch) tells what each group holds.

To calculate the Watch score:

- Each weighted signal adds its weight times the probability of yes.
- Each weighted scale adds its weight times the session's position on the scale.

The default rubric weights **Worth watching** 45%, **Friction** 25%, **Hit an error** 15% and **Product bug** 15%. Your weights are in the **Watch score %** field on each signal and scale, under **Settings** → **Projects** → your project → **Insights**.

Sequential calculates the score from the stored answers and your current rubric each time you open Watch. So a weight change never needs a new judgment.

Ranking follows your current rubric at once. A removed or turned-off question stops counting toward every session's Watch score. An older judgment scores nothing on a question added after it, so it can rank lower. See [Watch](/docs/watch).

### The Insights tab

The replay's **Insights** tab judges one recording on demand. It builds its own digest in your browser, from the recording and its events. It differs from the background digest:

- It adds clicks and page changes from the recording.
- It leaves out the DevTools counts.
- It keeps the host, such as `app.example.com`, on page views and the referrer.
- It sends up to 3 properties of each custom event or error, without the name filter.
- It does not remove hosts or query strings from text such as an error message or a property that holds a link.

When you open the tab, it judges the recording with your current rubric. It reuses the result for up to 7 days.

**Re-run** forces a new judgment, at most once every 10 minutes per session. On-demand judging has its own daily allowance per project.

The tab can judge a recording while background judging is off. It never changes what Watch uses, so the two can disagree. See [Session insights](/docs/session-insights).

### Get better judgments

The judge knows only what your events tell it.

- **Name your milestones.** Custom events such as `trial_started` or `invite_sent` show whether someone got what they came for. Put the meaning in the name, because the judge reads only the first 80 characters of the properties. See [Send custom events](/docs/custom-events).
- **Make events readable.** A click with no text or id reads as "element". A screen with no path or name reads as "(unnamed screen)". An error needs its message.
- **Record with DevTools capture.** A session can break without sending an error event. Then the DevTools counts of errors and failed requests can be the only sign. See [DevTools in replays](/docs/devtools).
- **Ask answerable questions.** The judge always gives an answer. A guess looks the same as a measurement. Ask whether they opened the docs, not whether they read them carefully.

### How long sessions are trimmed

The judge reads at most 255 events. Sequential gives priority to errors, rage clicks, dead clicks, form submits and page views. If it must drop events, it drops custom events and plain clicks first.

If the text is still too large for the judge, Sequential retries once with the higher-priority half of the events. That judgment ranks like any other. On hover, a Watch row's expanded details show "Based on X of Y events".

## Related

- [Reading a verdict](/docs/reading-verdicts)
- [Rubric](/docs/rubric)
- [Watch](/docs/watch)
- [Ask](/docs/ask)
- [Session insights](/docs/session-insights)
- [Feedback and calibration](/docs/feedback-and-calibration)
- [AI and third parties](/docs/ai-and-third-parties)
- [DevTools in replays](/docs/devtools)
