Transcript record inspection
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.
hansard doctor records --jsonhansard doctor records --cataloghansard doctor records --source cursor-cliThe 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:
hansard doctor records --source-type gemini-cli-history --path ./saved-history --jsonReports 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
Section titled “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
Section titled “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 for preservation details.
Refresh after a parser change
Section titled “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.