Skip to main content
Every backtest run produces a bundle of 8 artifacts. Together they form a complete, reproducible record of the run: what was computed, what the result was, what data and environment were used, and how to view it. Each file is content-hashed with SHA-256 for tamper detection and reproducibility verification.

The 8-file bundle

summary.json

metrics.json

The full stats block from the backtest kernel. See Backtest system for the field reference.

equity_curve.json

positions.json

Per-bar weights keyed by date, then by symbol. Used by the web UI to render position charts.

data_manifest.json

environment_lock.json

run_trace.json

The complete ordered list of TraceEvent records for the run. See Trace events.

report.html

A self-contained HTML file with embedded charts (equity curve, drawdown, positions) and the metrics table. Openable in any browser; no external dependencies.

Content hashing

Every artifact file is hashed with SHA-256 over its exact byte content. The hashes are recorded in summary.json (and in the run record). This gives you two guarantees:
  1. Tamper detection. If a file is modified after the run, its hash no longer matches.
  2. Reproducibility verification. Re-run the same spec; if the new result_hash matches the old one, the run is bit-identical.
The result_hash in summary.json is a hash over the metrics.json + equity_curve.json + positions.json hashes. It’s the single fingerprint of the run’s numeric output.

Storage backends

Ithaca supports two artifact storage backends, selected by environment:
Set DOOMBERG_ARTIFACT_DIR in production to a persistent, backed-up volume. Artifacts are written as individual files under <dir>/<run_id>/<filename>.
The backend is chosen at startup; runs do not pick their own backend.

REST API

Example: list artifacts

Example: fetch a bundle

Returns a JSON object with each file’s content and hash. The report.html is returned as a string; the rest are parsed JSON.