# Report structure and artifact formats

Canonical: https://fairleadhq.com/docs/recorder/schema/

Updated: 2026-10-10
Publication state: published
Product version: Recorder source f6ed5b96

Agent summary: Choose the right format before building a parser or integration. The sample ZIP contains local artifacts, not a serialized runtime Report.

## Prerequisites

- A report or artifact to inspect

## Inputs

- Runtime Report or HAR or action-export data

## Outputs

- The correct format and compatibility boundary

## Limitations

- The sample ZIP contains local artifacts, not a serialized runtime Report

## Permissions

- None declared.

## Privacy

- Review diagnostic content before sharing


Choose the right format before building a parser or integration.

Recorder uses different formats for assembled reports, HTTP archives, action flows, and generated scripts. Choose the format that matches the artifact you actually have.

For a normal developer handoff, start with [the shared artifact bundle](https://fairleadhq.com/docs/recorder/developers/artifact-bundle/). The folder does not contain a serialized runtime Report. The Runtime Report section below is a format reference for a separately supplied report or integration.

## Runtime Report

The assembled report used for project storage and viewer data has these top-level fields:

| Field | Contents |
| --- | --- |
| `meta` | Report version, page URL, user agent, start/stop times, duration, title, description, notes, context, and session header identifiers |
| `http_requests` | HTTP and WebSocket diagnostic records |
| `console_logs` | Console entries and exceptions |
| `user_actions` | Recorded action events |
| `semantic_actions` | Grouped multi-event actions |
| `browser_logs` | Browser diagnostic messages |
| `lifecycle_events` | Page lifecycle observations |
| `performance_events` | Long-task, paint, and resource observations |
| `attachments` | Attachment records |
| `annotations` | Optional source-linked notes |
| `summary` | Event counts and diagnostic totals |

`meta.version` identifies the runtime Report format. Schema `1.37.0` adds optional workflow fields for compatibility with older reports:

| Field | Values and meaning |
| --- | --- |
| `meta.session_type` | `explore`, `test`, or `verify`: the selected session purpose |
| `meta.lookup` | The issue or test case as entered/found, with `id`, `found`, `source`, optional title, and optional URL; `null` when empty |
| `meta.result` | `passed`, `failed`, or `blocked` for Test case; `fixed` or `not_fixed` for Verify fix; `null` before selection and for Explore |

Read `meta.version` from the report you are consuming; do not substitute the extension version, HAR creator version, or sample ZIP filename. The sample ZIP does not include a runtime Report from which to read this value.

An optional `project_id` identifies ownership where supplied. A stored-session retrieval response may group records differently before the viewer assembles them into this report shape.

## Identifiers and timestamps

Report metadata contains `started_at`, `stopped_at`, and `duration_ms`. Event records use their own timestamps, including `@timestamp`; request timing has its own start information. Preserve the units and timezone of each field rather than comparing unlike values.

Issue and reproduction identifiers appear in report metadata; per-request evidence can include correlation identifiers. See [backend correlation](https://fairleadhq.com/docs/recorder/session-correlation/).

The stopped timeline follows the [retained-timeline limit](https://fairleadhq.com/docs/recorder/developers/capture-support/#recording-retention). Session duration and a starting timestamp do not prove the full elapsed session is present. Inferred action associations are not verified causal relationships.

## Local artifact formats

`network.har` uses HAR 1.2 HTTP structure. `steps.json` is Chrome DevTools Recorder action JSON. `playwright.spec.ts` and `puppeteer.js` are source code for their respective frameworks. `console.log` is text, `session.md` and `notes.md` are readable Markdown, and screenshot attachments are PNG files. The Markdown summaries are for handoff; use the structured artifacts for parsing requests and action flows.

The local download is not a serialized copy of every runtime Report field. See [Inspect a shared artifact bundle](https://fairleadhq.com/docs/recorder/developers/artifact-bundle/) before choosing files for a developer handoff.

Inspect actual artifacts and handle unavailable or redacted content explicitly. Do not parse generated scripts as if they were a stable report API.

## Sample reproduction bundle

<span id="website-preview-sample"></span>

The [sample bundle ZIP](https://fairleadhq.com/downloads/fairlead-recorder-sample-v1.zip) contains a real reproduction: **Blocked tag stays after card leaves the Blocked lane**. Unzip it and start with `session.md` for the reproduction steps, expected result, and actual result.

The recording folder is named `Blocked tag stays after card leaves the Blocked lane-536bcb5d-e115-4676-aa62-21ddf3fb76c7`. Inside it:

```text
Blocked tag stays after card leaves the Blocked lane-536bcb5d-e115-4676-aa62-21ddf3fb76c7/
├── session.md
├── notes.md
├── network.har
├── steps.json
├── playwright.spec.ts
├── puppeteer.js
└── screenshots/
    ├── 001-area.png
    ├── 002-full.png
    └── 003-area.png
```

| Artifact | What this sample contains |
| --- | --- |
| `session.md` | Tester-written description and evidence, session start and duration, 21 numbered actions, and evidence counts. Read the description's conclusions alongside the captured files. |
| `notes.md` | Four source-linked observations: entering Blocked, the move request, the board response, and a screenshot. |
| `network.har` | HAR 1.2 with six entries in `log.entries`, all HTTP 200. The creation request and response bodies are redacted; later move payloads and board responses are available. |
| `steps.json` | A DevTools flow with `title` and 22 `steps`: viewport setup, initial navigation, and recorded interactions. Its step indexes differ from the numbered Markdown actions. |
| `playwright.spec.ts`, `puppeteer.js` | Generated actions using the recorded URL, values, and locators. They do not assert that the Blocked tag clears. |
| `screenshots/` | Three PNGs. `002-full.png` shows the card while it is in Blocked; `003-area.png` shows the card and badge without a lane heading. The `full` suffix denotes a viewport capture, not a stitched page. |

The ZIP also contains `__MACOSX/` and `._` metadata entries from archive packaging; ignore those when reading evidence. It has no `metadata.json`, serialized runtime Report, or `console.log`. Although `session.md` links to `console.log`, that file is absent. Its summary reports zero console errors; an absent file alone is not proof that no messages occurred.

These files were packaged as a ZIP for the website. The filename's `v1` is a sample download label, not a schema version for every enclosed artifact. Use each file's own format; for example, `steps.json` is a DevTools flow, not Fairlead Report JSON.

For a guided reading of the request bodies and timestamps, follow [the sample investigation](https://fairleadhq.com/docs/recorder/developers/trace-a-failure/#worked-example-the-sticky-blocked-tag).

The sample includes session and notes Markdown from the supplied recording; see [Inspect a shared artifact bundle](https://fairleadhq.com/docs/recorder/developers/artifact-bundle/) for their roles and omission rules. Files vary by recording and extension version.

## About Quackban and credits

[SpaceDucking](https://www.spaceducking.com/) is a testing resource created by [Ministry of Testing (MoT)](https://www.ministryoftesting.com/). [Quackban](https://www.spaceducking.com/apps/quackban), the Kanban-style application featured in this sample, was created within the MoTaverse, Ministry of Testing's community, and is available through SpaceDucking.

Credit for SpaceDucking and Quackban belongs to Ministry of Testing and the contributing MoTaverse creators. Fairlead used Quackban to demonstrate recording and investigating a bug with Fairlead Recorder.

## Compatibility

Keep the report's version with stored fixtures when building tooling. Validate the fields your consumer needs, handle optional fields, and test against artifacts from the extension version you support. Do not assume compatibility from one sample recording or rename files to make them fit another contract.