# The run record

> What an open run shows: the strip of verbs above it, the header with its status and the two actors, the interlock notice, the datalog chart, the judged criteria and the occurrence episodes.

Selecting a run opens its record on the right half of the browser: a strip of verbs that
stays put while the record scrolls, then the header, the datalog chart, the judged
criteria, the **Report** and **Labels** dossiers ([Labels and
reports](histories-documents)), the occurrences, and the comments and annotations
([Comments and annotations](histories-notes)). With nothing selected the panel reads
"Select a run to review its datalog, verdict, judged criteria, labels and occurrences."

## The strip {#the-strip}

The verbs act on the open run, so they ride the record and not the page's own bar. The
portable copies come first, then the generated documents, then the danger verb. A role that does
not carry what a verb needs does not see that verb at all: the strip is the size of what the
signed-in role may do. A verb the situation refuses stays where it is, greyed, and its tooltip
says what is missing ("Pick a run first.", "This run is still recording. Finish it first.",
"Another run command is still running.").

| Command | What it does | Greyed when (situation) | Needs (not drawn without it) |
| --- | --- | --- | --- |
| Export CSV | Downloads the raw datalog as CSV. | Another verb of the strip is still running. | Export/import histories |
| Export XLSX | Downloads the run identity, the metadata and the typed datalog as an Excel workbook. | The same. | Export/import histories |
| Export GLAB | Downloads the whole run as a portable `.glab` file. | The run is not Completed, Aborted or Failed. | Export/import histories |
| Generate PDF, with **Report used by Generate PDF** | Composes the run's PDF with the picked layout ("(procedure's report)" or any layout of the library) and opens it. | The run is still Running or Held. | Export/import histories |
| New label, with **Label used by New label** | Records a new label artifact from one of the labels the run's procedure configures, in the run's Labels section, and sends nothing. | No label is configured ("This run's procedure configures no label."), the picked label's template is gone or empty, the station is read-only. | View histories, Run procedures |
| Delete | Deletes the run and its file after confirmation. | The run is Running, Held or Saving; the station is read-only. | Manage histories |

What each export contains, and where the PDF opens, is [Exporting a run](histories-export);
the label picker is described with the Labels dossier.

## The header {#the-header}

The run name, a status line ("Viewing · name"; "Running · name (snapshot pending)" for a
run that has recorded nothing yet; "No data · name" for a finished run whose file holds no
rows) and the two actors:

- **Started by** comes from the run index, so it is present for every run, even one still
  recording: the operator's name as it was then, Station, Automation or Agent.
- **Stopped by** lives only in the frozen run file. It reads **Still recording** while the
  run is active, names who requested the Stop or Abort, or explains an ending nobody asked
  for: **Interlock**, **Nobody (the run failed)**, or **Nobody (ended on its own)** for a
  window that ran itself out, an Instant run or a single command.

An imported run adds `Imported <when> · from <file>`. The chips repeat the Automation and
Imported marks, show **Recording** while the run is active, and the verdict badge once it
is not. A run ended by the unit's stop interlock carries the notice **Ended by the
interlock**: "This run remains Aborted with verdict NOK. The termination reason records
that this Unit's external stop signal ended it."

## The datalog chart {#the-datalog-chart}

The record plots the run's recorded channels inline, on a relative-seconds axis from the
first sample, each series in the colour frozen with the run and labelled by the name the
channel carried on the unit. The stacked bands are frozen with the run as well, so the
record and the report draw the picture the station was showing even after the model is
regrouped: one ruler per band, along the single time axis. Annotations draw as prominent markers and comments
timestamped during the run as muted ones. The approved-range bands of the procedure's
evaluation are re-resolved from the current configuration each time the run is opened,
because the run file carries limits only as display text: a deleted evaluation drops
them, and a relative limit is not drawn. The chart carries the shared toolbar
([Charts](view-charts)), including the button that opens the same chart in a window of its
own (`/chart/run/<id>`), which reloads the run from its file and links its zoom with the
inline chart; that window is read-only and takes the same permission as the browser.

## Judged criteria {#judged-criteria}

When the run's procedure judged criteria, the record lists one row per judged window:

| Column | Content |
| --- | --- |
| Cycle | The cycle the criterion was judged in, 1-based. |
| Criterion | The criterion's name as configured when the run recorded. |
| Channel | The channel it watched. |
| Limits | The approved range, as display text frozen into the run. |
| Severity | How the criterion was configured to weigh on the verdict. |
| Outcome | Ok, Nok or Indeterminate for this window. |
| Evidence | "n evaluated · n out · n unavailable · n invalid": the four sample counters. |
| Affected | The channels whose unavailable or invalid samples weakened the evidence, or the gap mark when the evidence was complete. |
| Worst | The largest distance beyond a bound seen in the window, when there was one. |
| Note | Why the outcome is indeterminate, when it is. |

## Occurrences {#occurrences}

When the run observed occurrences, the record derives **episodes**, one row per activation
rather than one per raw transition:

| Column | Content |
| --- | --- |
| Occurrence | The occurrence's name. |
| Severity | Critical, Warning or Info, as frozen at observation. |
| Started | When the episode began, or "Unknown". |
| End / status | When and how it ended ("Cleared"), or its open status: "Active · live", "Active at run end", "Interrupted", "Incomplete", "Inconsistent". |
| Active time | How long the condition held, with "· live" while it still does and "· observed" when the run's end bounded it. |
| Signal unavailable | How long the watched signal was unreadable during the episode ("None" when it never was, "· partial" when the loss could not be fully measured). |
| Message | The message frozen with the occurrence. |

Below the episodes, a **Technical timeline** disclosure ("Technical timeline · N events · N
observation sessions") lists every raw recorded edge (Activated, Cleared, Unavailable,
Restored) and every observation-session boundary, with the occurrence, the severity, the
transition, the instant and the message. A boundary row explains why a new observation
session began: after the run resumed, after the watcher restarted, after the definition
changed, or a new run observation session.

While the selected run is still recording, its occurrence evidence stays live: the clocks
tick every second, the evidence and the run's index row are re-read every two seconds, so
the terminal state appears without pressing Refresh.

## What the record does not do {#what-the-record-does-not-do}

It does not show the recorded rows as a table: the datalog is read on the chart or in a
CSV or XLSX export. It does not re-judge anything: the criteria are the run's frozen
results, and the bands on the chart are context from today's configuration, never a
verdict. And it edits nothing of the run but its notes, annotations and documents.
