A quantum result without provenance is not a result. It is a number detached from the physical conditions that produced it.
The data engineering problem is harder than it first appears. A run is not only a circuit and a count table. It is a bundle containing input intent, source code, parameter values, compiler decisions, target model, calibration snapshot, execution timing, shot data, mitigation configuration, post-processing code, uncertainty model, and human interpretation.
The platform should make reproducibility the default path.
13.1 The experiment bundle
Every production quantum run should produce an experiment bundle.
View diagram source
flowchart TB
Bundle[Experiment bundle] --> Intent[Problem intent]
Bundle --> Source[Source program]
Bundle --> Circuit[Circuit / IR]
Bundle --> Compile[Compiler artifact]
Bundle --> Calibration[Calibration snapshot]
Bundle --> Execution[Execution metadata]
Bundle --> Shots[Shot data]
Bundle --> Mitigation[Mitigation settings]
Bundle --> Post[Post-processing code]
Bundle --> Report[Trust report]A minimal bundle schema should include:
experiment_id: exp_2026_04_18_001
project: catalyst-screening
owner: research-platform@example.com
intent:
problem_class: hamiltonian-estimation
success_metric: energy_estimate_with_ci
source:
repository: git@example.com:team/quantum-apps.git
commit: 6d1f...
environment_hash: sha256:...
program:
source_language: qiskit
circuit_hash: sha256:...
parameters_hash: sha256:...
compiler:
compiler_name: qiskit-transpiler
compiler_version: 2.x
target_profile_hash: sha256:...
execution:
backend: provider:device
shots: 20000
submitted_at: 2026-04-18T19:00:00Z
calibration_snapshot: cal_...
results:
raw_counts_uri: s3://...
mitigated_result_uri: s3://...
trust_report_uri: s3://...This is deliberately similar to modern ML experiment tracking, but quantum needs stronger coupling to hardware state.
13.2 Provenance graph
Linear logs are insufficient. Quantum provenance is a graph.
View diagram source
flowchart LR
Problem[Problem specification] --> Program[Source program]
Program --> Circuit[Logical circuit]
Circuit --> Transpile[Transpiled circuit]
Target[Target profile] --> Transpile
Calibration[Calibration snapshot] --> Transpile
Transpile --> Executable[Executable workload]
Executable --> Job[Job]
Job --> Raw[Raw results]
Calibration --> Raw
Raw --> Mitigated[Mitigated estimate]
Mitigation[Mitigation config] --> Mitigated
Mitigated --> Report[Trust report]The same source program may produce different executable workloads under different calibration snapshots. The same executable may produce different statistical estimates under different shot counts. The same raw result may produce different final estimates under different mitigation settings. The provenance graph makes those distinctions explicit.
13.3 Data classes
Not all quantum data has the same value or sensitivity.
| Data class | Examples | Retention default |
|---|---|---|
| source intent | problem statement, observable definitions | long-lived |
| executable artifacts | circuits, IR, compiled schedules | long-lived for published runs |
| calibration metadata | fidelities, T1/T2, readout metrics | medium-lived, access-controlled |
| raw shots | bitstrings, counts, timestamps | workload-specific |
| mitigation artifacts | calibration matrices, extrapolation curves | same as result |
| trust reports | result interpretation and uncertainty | long-lived |
| operational telemetry | queue time, failure mode, device health | aggregated long-lived |
The platform should avoid a single retention policy for all artifacts. Raw shot data can be large, while trust reports are compact and valuable.
View diagram source
flowchart TD
Data[Quantum data] --> Raw[Raw shot data]
Data --> Derived[Derived estimates]
Data --> Meta[Metadata]
Data --> Telemetry[Operational telemetry]
Raw --> RetainRaw[Retain by project policy]
Derived --> RetainDerived[Retain for reproducibility]
Meta --> RetainMeta[Retain with access control]
Telemetry --> Aggregate[Aggregate for operations]13.4 Immutable run records
Run records should be immutable. Corrections should create new versions rather than overwriting old results.
View diagram source
stateDiagram-v2
[*] --> Created
Created --> Submitted
Submitted --> Executing
Executing --> Succeeded
Executing --> Failed
Submitted --> Cancelled
Succeeded --> Interpreted
Failed --> Analyzed
Interpreted --> Superseded
Analyzed --> Superseded
Superseded --> [*]An immutable record allows two important behaviors:
- Operators can debug what happened without losing the original evidence.
- Researchers can publish revised interpretations without rewriting history.
A useful version chain looks like this:
View diagram source
flowchart LR
RawV1[Raw result v1] --> MitV1[Mitigation v1]
RawV1 --> MitV2[Mitigation v2]
MitV1 --> ReportV1[Trust report v1]
MitV2 --> ReportV2[Trust report v2]
ReportV1 -. superseded by .-> ReportV213.5 Shot-level versus aggregate storage
Shot-level records preserve ordering and associated per-shot metadata. An aggregate histogram preserves joint outcomes within each measured bitstring, but usually loses shot order and temporal correlations. For a fixed measurement setting and an appropriate sampling model, counts can support observable estimation and count-based reanalysis, including readout mitigation. Neither format recovers analog readout signals that were never retained.
View diagram source
flowchart TB
Shots[Shot stream] --> Preserve{Preserve individual shots?}
Preserve -- yes --> ShotLake[Shot-level lake]
Preserve -- no --> Counts[Aggregate counts]
ShotLake --> Reprocess[Reprocess with new methods]
Counts --> Estimate[Reanalyze methods supported by counts and metadata]
Estimate --> NewEstimate
Reprocess --> NewEstimate[New estimate]Decision rule:
| Use shot-level storage when | Use aggregate storage when |
|---|---|
| shot order or timing correlations matter | fixed-setting histograms retain the required statistics |
| drift analysis needs per-shot context | retained time-binned counts are sufficient for the planned analysis |
| a method requires individual shot features | count-based methods have the required calibration and measurement metadata |
| the evidence contract requires per-shot records | the evidence contract can be met with counts and provenance |
| per-shot metadata is necessary | provider exposes only counts and the limitation is recorded |
The default should depend on result value, not habit.
13.6 Metadata that operators actually need
Good metadata answers operational questions quickly.
| Question | Metadata required |
|---|---|
| Was the device healthy? | calibration snapshot, benchmark context, incident flags |
| Why did this job wait? | queue state, priority, reservation status |
| Why did this compile this way? | target profile, compiler version, optimization level |
| Can we compare these two runs? | calibration age, qubit mapping, shots, mitigation settings |
| Can we republish this result? | source commit, artifact hashes, trust report |
| Did a platform change affect this? | release version, feature flags, runtime options |
View diagram source
flowchart LR
Query[Operational question] --> Metadata[Metadata index]
Metadata --> Artifacts[Artifact store]
Metadata --> Telemetry[Telemetry store]
Metadata --> Audit[Audit log]
Artifacts --> Answer[Answer with evidence]
Telemetry --> Answer
Audit --> AnswerMetadata should be indexed. A pile of JSON next to result files is better than nothing, but it is not an operational data system.
13.7 Dataset design for quantum results
A useful result store separates identity, artifacts, metrics, and lineage.
View diagram source
erDiagram
EXPERIMENT ||--o{ RUN : has
RUN ||--o{ ARTIFACT : produces
RUN ||--o{ METRIC : reports
RUN ||--o{ EVENT : emits
RUN }o--|| COMPILATION : uses
RUN }o--|| CALIBRATION_SNAPSHOT : references
ARTIFACT }o--|| STORAGE_OBJECT : stored_asMinimal tables or collections:
| Object | Purpose |
|---|---|
| experiment | stable intent and project context |
| run | one submitted execution attempt |
| artifact | source, circuit, compiled executable, result, report |
| metric | fidelity, queue time, variance, cost, useful-result flag |
| event | lifecycle and incident timeline |
| compilation | compiler version, options, target profile |
| calibration snapshot | device state reference |
This model supports both research and operations. Researchers ask, “which method worked?” Operators ask, “which platform state caused failures?” Both need the same lineage.
13.8 Reproducibility levels
Reproducibility is not binary.
View diagram source
flowchart TB
L0[L0: claim only] --> L1[L1: result artifact]
L1 --> L2[L2: source and parameters]
L2 --> L3[L3: compiler and calibration provenance]
L3 --> L4[L4: raw data and post-processing]
L4 --> L5[L5: replayable or statistically comparable workflow]| Level | Meaning |
|---|---|
| L0 | prose result only; not acceptable for serious work |
| L1 | final result file exists |
| L2 | source program and parameters are available |
| L3 | compiler, target, and calibration metadata are linked |
| L4 | raw data and post-processing are preserved |
| L5 | another team can reproduce or statistically compare the result |
Most internal exploratory work can target L3. Published or business-critical results should target L4 or L5.
13.9 Result promotion pipeline
Do not let every notebook output become an official result. Promote results through gates.
View diagram source
flowchart LR
Exploratory[Exploratory run] --> Candidate[Candidate result]
Candidate --> Validate[Validation suite]
Validate --> Review[Human review]
Review --> Promote{Promote?}
Promote -- no --> Archive[Archive as exploratory]
Promote -- yes --> Official[Official result]
Official --> Publish[Publish or use downstream]Promotion criteria:
- calibration state is acceptable,
- benchmark context is known,
- uncertainty is reported,
- source and artifacts are versioned,
- mitigation settings are documented,
- result survives independent review,
- alternative explanations have been checked.
A quantum platform should make unofficial outputs easy to generate and official outputs hard to fake.
13.10 Reproducibility checklist
Before a result is trusted, require:
| Requirement | Status |
|---|---|
| source commit recorded | required |
| circuit or IR hash recorded | required |
| compiler version recorded | required |
| target profile recorded | required |
| calibration snapshot recorded | required |
| raw counts or shots retained | depends on policy |
| mitigation settings recorded | required if used |
| statistical uncertainty reported | required |
| benchmark context linked | required for hardware claims |
| trust report generated | required for promoted result |
View diagram source
flowchart TD
Result[Candidate result] --> Checklist[Reproducibility checklist]
Checklist --> Complete{Complete?}
Complete -- no --> Missing[Return missing evidence]
Missing --> Checklist
Complete -- yes --> Trusted[Eligible for trusted use]