# Transcript record inspection

> Survey local provider record types, inspect catalog coverage, and distinguish unknown records from incomplete scans.

`hansard doctor records` surveys the types of records in local harness history.
It reports unknown record, event, content, attachment, and subtype labels by
source and recorded producer version. It does not change provider stores.

```sh
hansard doctor records --json
hansard doctor records --catalog
hansard doctor records --source cursor-cli
```

The catalog lists every registered source type, its catalog size, and its
historical review status. Select an exact source type from that list when
inspecting a copied file or directory:

```sh
hansard doctor records --source-type gemini-cli-history --path ./saved-history --json
```

Reports contain labels and counts, not message bodies or source paths. SQLite
inspection uses a temporary copy of the database and its write-ahead log.

## Read the result

Exit status 1 means that the survey found unknown types or could not finish a
complete inspection. Missing roots, unreadable or changing files, malformed
records, unsupported media, and exhausted limits remain explicit gaps.
`--catalog` exits with status 0 without scanning history.

An empty input or a quiet report does not establish complete historical
support. Some formats have only partial catalogs. A catalog of known labels
does not prove that every field or attachment is preserved.

| Limit              | Default                                              |
| ------------------ | ---------------------------------------------------- |
| `--max-files`      | 10,000 per discovery source                          |
| `--max-records`    | 250,000 per discovery source                         |
| `--max-bytes`      | 268,435,456 bytes per discovery source               |
| `--max-file-bytes` | 67,108,864 bytes, including a SQLite write-ahead log |
| `--timeout-ms`     | 30,000 milliseconds across the survey                |

Source-specific adapters can impose stricter limits. The report names the
effective limits and any uninspected input.

## Format boundaries

| Source                | Inspection boundary                                                                                                                                 |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| Claude Code and Codex | Local record catalogs classify internal records and unknown types. Unknown records containing explicit user or assistant text remain readable.      |
| Cursor CLI            | JSON history blobs. Undecoded protobuf remains a coverage gap.                                                                                      |
| NotebookLM            | Extracted Takeout HTML. Extract a ZIP before scanning its contents.                                                                                 |
| Augment               | Session JSON and exact IDE webview state, including dictionary-compressed histories. Other extensions' records are excluded. LevelDB remains a gap. |
| Aider                 | Configured chat Markdown and LLM sidecars, with separate framing rules. Input-history sidecars remain unsupported.                                  |
| Windsurf              | Supported Cascade Markdown frames and section headings. Unsupported framing remains incomplete.                                                     |
| Antigravity           | Step labels in saved trajectory and step response files. Select the recovery source type explicitly. Uninspected fields remain gaps.                |
| Cline SDK             | Known blocks and unknown-type counts follow the transcript catalog. Explicit text survives unknown blocks. Blocks without visible text stay hidden. |

Generic JSON inspection cannot decode arbitrary compressed or binary cells.
Catalog coverage and import coverage are different. See the
[import coverage reference](https://www.hansard.dev/reference/import-coverage/) for preservation details.

## Refresh after a parser change

The watcher reads the conversations in its import window again with the
current importers. After an update, its archive refresh parses the
conversations whose provider files are gone again from preserved originals. To
parse preserved originals yourself without reading the provider again, use
`hansard rebuild --from-raw` for a supported source. Preview it with `--dry-run`.
See [Choose the right refresh](https://www.hansard.dev/reference/maintenance/#choose-the-right-refresh).
