Citing a run
A citation identifies software. It does not identify a run. A manifest does.
Formerly pretium. Versions through 0.4.3 were published under that name and remain installable forever; cite them as pretium at their exact version and they replay bit for bit. From 0.5.0 the library is tradefloor, with the same version line and the same known-answer digest.
Not enough on its own
"We used tradefloor." That names the software and says nothing of the market you ran. Two people can obey it, get different numbers, and both be correct.
CITATION.cff covers this halfEnough to reproduce
A RunManifest carries the seven things that fix a trajectory, plus the digest it should produce.
reproduce() refuses on a mismatchThe seven things that fix a trajectory
Leave one out and the run is not reproducible. Record all seven and someone with the package and nothing else of yours can replay it.
Write it down, then check it
manifest = tf.RunManifest.of(
engine, spec, seed=7)
manifest.to_json("study.json")
# somewhere else, later
saved = tf.RunManifest.from_json(
open("study.json").read())
tf.reproduce(saved) # or it raises
Why it raises instead of a warning
A manifest that quietly reproduced a different market would be worse than no manifest. So reproduce() compares the digest it got against the digest the manifest expected, and names the field that differs.
In most cases it is the preset. pt-v14 became the default on 2026-08-28, so a manifest written before that date and replayed after it fails unless it named its preset.
What to put in a paper
Momentum, top_k 5, one-day lookback, scored on tradefloor 0.4.0 under preset pt-v14, universe fingerprint 4c1e9f77a3b8d502, seeds 0 to 11, 252 days. Strategy fingerprint 9f2c8d41e7b6a530. Manifest and order log attached.
Illustrative. The fingerprints in that sentence are placeholders, and yours will differ.
Say this
The strategy behaved this way on this preset, at this horizon, in a market that holds the fourteen realism statistics. Here is the manifest.
Not this
The strategy earns this. A result here is a statement about a model market, and the envelope names five gaps that bound it further.