Skip to content
Static snapshot of QMint (git 5b73a0bb93c1) — live experiments run locally

Docs · Science

Reproducibility

Pinned environments, seeds, records and manifests.

Environment

Dependencies are pinned in requirements.lock (generated by uv pip compile --extra all). The environment lock hash recorded in every manifest and record is sha256(requirements.lock).

uv venv && uv pip install -r requirements.lock && uv pip install --no-deps -e .qmint doctor --json --report reports/environment.json

qmint doctor reports required and optional dependencies (optional ones show SKIPPED with the extra to install), drift from the lock, free disk, network and paid-hardware flags, merged lane entrypoints, and whether known credential variables are set — booleans only, never values.

Configuration

VariableDefaultEffect
QMINT_ALLOW_NETWORKoffPublic-network access. Off: require_network raises; run_core also blocks sockets.
QMINT_ALLOW_PAID_HARDWAREoffPaid QPU jobs. Off: require_paid_hardware raises.
QMINT_SEED42Base seed. Child streams use derive_seed(seed, label) (SHA-256, platform independent).
QMINT_ROOTcheckoutRepository root used for paths and manifests.

Runs

  • python scripts/run_core.py --offline --seed 42 runs every merged lane stage offline. Unmerged stages are SKIPPED with a reason; a failing stage stops the run (exit 1) unless --keep-going. --require-all turns skips into failure; --check-determinism runs each stage twice and fails on differing outputs. Writes run_core_status.json and run_core.manifest.json.
  • python scripts/run_all.py --seed 42 also runs real-data stages. It refuses (exit 2) unless datasets/manifests declare real inputs under datasets/cache/ whose hashes verify. Fixtures are never substituted.
  • python scripts/verify_manifest.py <dir-or-file>… re-hashes every manifest entry and the environment lock; exit 1 on any mismatch or missing file, 2 if no manifest is found.

Records

experiments/run_registry.jsonl is an append-only index; each record is stored at experiments/results/<id>.json. A record wraps one frozen contract payload (C0–C7), validated on write and read, with an evidence kind and provenance (git sha, environment-lock sha256, command, seed).

  • Records are refused when the evidence kind or provenance is missing, the id exists, or issuer-secret material would be stored.
  • Stochastic results without a reproducibility check are flagged REPRODUCIBILITY_UNCHECKED; a same-seed rerun that differs is flagged IRREPRODUCIBLE_STOCHASTIC_RESULT.
  • Logs are one JSON object per line, with credential-like keys, issuer secrets and credential values redacted.

Lane entrypoint convention

qmint.<pkg>.entrypoints may define cli_main(argv) -> int, run_core_stage(*, seed, out_dir) -> dict and run_realdata_stage(*, seed, out_dir, cache_dir) -> dict (returning {"outputs": [...]}), and may raise qmint.core.lanes.StageSkipped(reason). Missing modules print NOT_AVAILABLE (CLI exit 3).