Skip to main content

Backplane Tracecheck

Vendor-neutral recording integrity checks. Check robot recordings against an explicit recording contract.

Tracecheck reads an MCAP recording (the default ROS 2 bag format) and checks it against a small JSON recording contract: which topics must be present, their schemas and encodings, message counts, rates, timestamp gaps, regressions, sequence continuity and time coverage. It produces a JSON report and a readable HTML report. Findings include relevant file locations where available; missing items are reported as gaps.

  • Free and open source (Apache-2.0).
  • Read-only. Message payloads are never executed, and are not decoded, with one narrow exception: from recognised recorder event messages (rosbag2_dynamic_recorder pause and topic events) only the action and topic name are read.
  • Gaps covered by a pause or topic change that the recorder wrote into the recording are listed as explained instead of failing. The events are the recorder's own account; Tracecheck does not verify them.
  • Checks a ROS 2 bag folder (metadata.yaml plus split .mcap files) as one recording: gaps and sequence breaks across file boundaries count, and the counts in metadata.yaml are compared with what the files contain (C11).
  • No robot, ROS install, account or cloud service needed.
  • Streams large recordings, subject to processing limits and available device resources (see the limit options below). zstd and lz4 chunks are decoded with bounded output.
  • Runs as a Python CLI or in your browser at backplanerobotics.com/tracecheck, where recording files are processed on your device and not uploaded.

Built by Backplane Robotics.

Install

pip install backplane-tracecheck

Requires Python 3.11+.

Quick start

# Write the synthetic demo recordings and contract to ./examples
tracecheck samples

tracecheck validate-contract examples/demo-contract.json
tracecheck check examples/clean.mcap  --contract examples/demo-contract.json --out reports/clean
tracecheck check examples/faults.mcap --contract examples/demo-contract.json --out reports/faults

# A ROS 2 bag folder (metadata.yaml + split .mcap files), checked as one recording
tracecheck check examples/fleet-bag --contract examples/fleet-contract.json --out reports/fleet-bag

# Optional local browser UI (binds to 127.0.0.1 only)
tracecheck serve --open

--out must be a new directory. Existing reports are never overwritten.

Useful options

Option Effect
--fast Read only the summary section: inventory, counts, schemas and metadata in milliseconds. Timing checks (C06–C10) skip. Falls back to a full scan if the file has no usable summary (for a bag folder, if any file has none, the whole folder is scanned in full).
--ignore-missing-crc Don't warn when the writer stored no CRCs (same as "missing_crc": "ignore" in the contract). Corrupt CRCs still fail.
--fail-on fail Exit 0 on warnings, exit 1 only on failures (the default warn also exits 1 on warnings).
--timeout SECONDS Stop a scan that takes too long.
--max-chunk-mib, --max-record-mib, --max-tracked-messages Raise or lower the memory safety limits (defaults: 256, 256, 20,000,000).

Exit codes

  • 0: overall pass.
  • 1: contract failures, warnings or an incomplete scan (all recorded in the report).
  • 2: configuration, input or operational error, including a bag folder that can't be checked (for example, sqlite3 storage or rosbag2 file compression). No report is written.

Check a copy after transfer

Write a manifest where the recording was made, then check the copy after upload, sync or archiving:

tracecheck manifest examples/fleet-bag --out fleet-bag.manifest.json
# ...copy the folder and the manifest somewhere else, then (replace the path with your copy's location):
tracecheck verify /mnt/archive/fleet-bag --manifest fleet-bag.manifest.json

The manifest is JSON. It holds each file's size and SHA-256 (for a bag folder, every file in the folder, including metadata.yaml), plus the message count per topic. verify reports each file as MATCH, CHANGED, MISSING or EXTRA, and compares the topic counts. Exit 0 means every file matches, 1 means something differs, 2 means an error such as an invalid manifest. --json FILE also writes the result as JSON. Output files are never overwritten.

A matching SHA-256 shows that the copy has the same bytes as the files the manifest was written from. It does not show who made the recording, when, or that its contents are true. The manifest is not signed, so keep it somewhere the copy's handlers can't change it.

In the browser

backplanerobotics.com/tracecheck runs the same checks in a Web Worker, using a JavaScript port of the engine in web/src/engine/.

  • The recording file is read locally in slices and not uploaded.
  • The site's Content-Security-Policy only allows connections back to the site itself.
  • An optional Send feedback form posts only the fields shown in it to /api/feedback. It never attaches recordings, reports, contracts or filenames. See docs/FEEDBACK.md.
  • For the same inputs, the browser and CLI produce identical JSON reports, apart from timestamps and tool fields. The web test suite checks this.

A minimal contract

{
  "version": 1,
  "name": "My recording requirements",
  "topics": {
    "/my/topic": { "required": true, "min_count": 1 }
  }
}

Start minimal, then read the report's channel inventory to see the actual schema names, encodings and fingerprints. Add only the requirements you can justify. See docs/CONTRACT_REFERENCE.md for every key.

The checks

ID Check
C01 Readable bounded MCAP scan (with CRC verification where present)
C02 Required topics contain messages
C03 Profile, schema and encoding
C04 Required file metadata
C05 Message counts
C06 Average recorded rate
C07 Sorted timestamp gaps
C08 Record-order timestamp regressions
C09 Sequence continuity
C10 Expected interval coverage
C11 ROS 2 bag metadata agreement (bag folders only)

Statuses

  • PASS: the configured requirement was met.
  • WARN: a scoped limitation, for example message data with no CRC coverage. Default ROS 2 files with chunk CRCs pass.
  • FAIL: an unmet requirement or a failed scan. It does not mean the robot is unsafe.
  • SKIPPED: no conclusion was reached.

Tracecheck does not certify safety, establish legal or regulatory compliance, determine causality or measure transport latency. File hashes in reports identify the exact bytes checked; they do not establish authenticity.

Development

python -m venv .venv
.venv/Scripts/activate        # Windows; use `source .venv/bin/activate` elsewhere
pip install -e ".[dev]"
python -m pytest

After an intentional behaviour change, regenerate the golden results shared by both test suites and review the diff:

tracecheck samples && python tools/make_golden.py

Website (Node 20+):

cd web
npm install
npm test          # engine parity tests against examples/ and the Python engine
npm run dev       # local dev server
npm run build     # static site in web/dist (deployed by Cloudflare Workers, see wrangler.jsonc)

Repository layout

Path Contents
src/tracecheck/ Python package and CLI
tests/ Engine, streaming, contract, CLI and local-server tests
examples/ Synthetic MCAP recordings, contracts and golden results (invented data)
docs/ Contract reference and third-party notices
tools/ Maintenance scripts (golden-result generator)
web/ Browser-only website and Tracecheck web app for backplanerobotics.com

License

Apache-2.0. See LICENSE and NOTICE. Copyright 2026 Backplane Robotics LLC.

Metadata

Release files for backplane-tracecheck 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for backplane-tracecheck 0.3.0
File Size Uploaded Provenance
backplane_tracecheck-0.3.0.tar.gz 677.4 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for backplane-tracecheck 0.3.0
File Interpreter ABI Platform
backplane_tracecheck-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 735.3 kB

Release files / backplane_tracecheck-0.3.0.tar.gz

Download URL backplane_tracecheck-0.3.0.tar.gz
Size 677.4 kB
Tags Source
SHA-256 checksum
How to use checksums
89eddd5b862f08f9f35eab6f8bb1590a40bac471d904660b25585f690d70b8e3
BLAKE2b-256 checksum
How to use checksums
7da84974e76d54c06722f7c7e5ec8e191a44dacf2afcfdd593693cb37e7ced36
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / backplane_tracecheck-0.3.0-py3-none-any.whl

Download URL backplane_tracecheck-0.3.0-py3-none-any.whl
Size 57.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
81cc00d04847ba7b1e617a61fc93c1f19e382bdaf0331955344f82fd862b2834
BLAKE2b-256 checksum
How to use checksums
0c6ece0ba287d398379cc304a4cf388f9bb4b79482480496f6f879716ffc2a62
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Security for backplane-tracecheck 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for backplane_tracecheck-0.3.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page