# Observation record

Field by field, from the recorded trace. The examples are the captured values from observation 02 and observation 04.

## Top level

| Field | Type | Meaning | Example |
| --- | --- | --- | --- |
| `id` | number | A positive integer assigned by the capture harness. File order supplies the sequence; the viewer does not enforce unique or consecutive IDs. | `2` |
| `title` | string | A short name for what happened. | `Update awaiting reload` |
| `action` | string | What was done just before this observation. | `Approved cpu-2. ...` |
| `receivedAt` | string, ISO 8601 with zone | When the observation was received. The app refuses a timestamp without an explicit zone. | `2026-10-10T07:41:29.613Z` |
| `observation` | object | The comparison itself, below. |  |

## observation

| Field | Type | Meaning | Example |
| --- | --- | --- | --- |
| `scope` | string | Where the loaded report comes from. | `managed-onnx-session-self-report` |
| `status` | `matched`, `pending` or `unknown` | The result of the comparison. See [States and codes](https://docs.vraelis.com/states-and-codes). | `pending` |
| `code` | optional string | A diagnostic reason code. The captured run uses it for unavailable evidence; a pending observation can also carry a rejected-reload reason. | `RUNTIME_UNAVAILABLE` |
| `desired` | object | The approved release. |  |
| `loaded` | object or `null` | What the runtime reports it loaded. `null` when there is no report. |  |
| `loadedEvidence` | string, only when `loaded` is `null` | Says the loaded side is missing. | `unavailable` |

## desired, and loaded.metadata

Both carry the same identity fields, so they can be compared one by one.

| Field | Meaning |
| --- | --- |
| `releaseId` | The release's name, such as `cpu-2`. |
| `generation` | Its generation number: `cpu-1` is 1, `cpu-2` is 2. |
| `modelSha256` | SHA-256 digest of the model. |
| `configurationSha256` | SHA-256 digest of the configuration. The same in `cpu-1` and `cpu-2` in the captured run. |
| `releaseSha256` | SHA-256 digest of the release. |
| `receiptSha256` | SHA-256 digest of the receipt recorded for the release. |

## loaded.runtime and loaded.sessionId

| Field | Meaning | Checked against the policy |
| --- | --- | --- |
| `ortVersion` | The ONNX Runtime version the session runs. | Yes: must be exactly `1.23.2`. |
| `executionProviders` | The execution providers in use. | Yes: must be exactly `CPUExecutionProvider`. |
| `pythonVersion` | The Python version of the worker. | No: recorded only. |
| `sessionId` | The runtime session that loaded the release. | No. |

## Supported trace shapes

This reference describes the recorded trace and the evidence app's supported schema, not every observation the backend can produce. The backend can retain a worker report on an unknown observation when it cannot compare that report with authorized desired state. This viewer refuses that shape with `TRACE_LOADED_ON_UNAVAILABLE`; it is not evidence that the backend cannot retain the report. Backend `lastRejection` details are outside the viewer's defined fields and appear only as unvalidated extras in raw JSON and export.

## A complete example

observation 02, reload pending:

```json
{
  "id": 2,
  "title": "Update awaiting reload",
  "action": "Approved cpu-2. The baseline continues serving its loaded cpu-1 until explicit reload.",
  "receivedAt": "2026-10-10T07:41:29.613Z",
  "observation": {
    "scope": "managed-onnx-session-self-report",
    "status": "pending",
    "desired": {
      "generation": 2,
      "releaseSha256": "375de916f3f9128dd8284a9dae474c1fe5edcf253c8a7ab69a1c5f720f31ea12",
      "releaseId": "cpu-2",
      "modelSha256": "444602040ca9aaa4b1a990799fbe6b697763d1a08144ee1f9711eb12adc49d2d",
      "configurationSha256": "6289dfd4c088e75fa4725c3269d9ba6316e0d9e11d863c17af0b2955315bd382",
      "receiptSha256": "d621d4c70a127586002f1261b79ff6cf1e48f258cf819b184f0ff8a68a819e33"
    },
    "loaded": {
      "runtime": {
        "ortVersion": "1.23.2",
        "executionProviders": ["CPUExecutionProvider"],
        "pythonVersion": "3.12.14"
      },
      "sessionId": "4ef27956b34246b5be6c64a6109d9212",
      "metadata": {
        "generation": 1,
        "releaseSha256": "611e3ac6eb818530873c76bac0cd3f328ce87ce99cbcad6407ad47abb96dc0e1",
        "releaseId": "cpu-1",
        "modelSha256": "c1b943a655da728daea6b43332ff557af3da6466b4f9e0c938b42595222dc5ac",
        "configurationSha256": "6289dfd4c088e75fa4725c3269d9ba6316e0d9e11d863c17af0b2955315bd382",
        "receiptSha256": "15357f4908031bbeeb5aae187cb2c28d3d0ea17c5c2bea120176b1a750754ab7"
      }
    }
  }
}
```

---

Vraelis documentation, Products. https://docs.vraelis.com/observation-record
