Draft. We are still working on this page.
A fund shows its allocator a backtest. Every number in it rests on a state built up day by day: a covariance of the market's factors. If that state at any date was shaped by a later day, the backtest saw the future, and its results are worth nothing. Today the fund says it did not, in a document. Here the claim is a receipt anyone can recompute.
The daily research factors from the Ken French Data Library: market, size, value and the risk-free rate. 1,259 trading days, 2 January 2018 to 30 December 2022. The vendor's own archive ships inside the kit, fixed by its SHA-256 (af8aec07…), fetched 8 July 2026. The vendor restates its data monthly; this pin is the record.
The dates were taken in strictly increasing order. The history went in the way it happened.
At each date the state is the geometry of everything recorded up to that date: a covariance of the four factors, made invertible with a small fixed ridge, g = (Σ + 0.01·I)⁻¹. A backtest that reads these states at each date reads only what was known on that date, if each state really was built from its own past.
That "if" is the whole question. It is answered by rebuilding every state from its own past and comparing bytes.
For each of the 1,258 dates, the kit takes the record up to that date, and only that, and rebuilds the state. Each rebuilt state's digest equals the digest the history recorded, with no tolerance: byte for byte. The last one is be07f371….
A test that cannot fail proves nothing, so the kit commits the crime itself. It takes 16 March 2020, the worst day in the record's future (market factor −12.01), and folds it into the state for 31 December 2019, index 502.
The digests break at index 502 and at all 756 indices after it. The state moves by max|Δg| 0.2808, about 1.69× the record's own floor of 0.1657, which is what re-entering a day the state already held would cost. Had the history peeked, the green above was impossible.
An ordinary future day. A statistically unremarkable later day (20 October 2022) also breaks the bytes at every date after it: detection is byte by byte. But it moves the state by about 0.032× the floor, inside the record's own noise. It changes bytes, not substance, and the kit says so beside the headline.
A cleaned-up history. Drop the five worst days before the peek, after the fact, and the chain fails to rebuild from index 23, the first dropped day, onward. A history tidied up later cannot forge this receipt.
The published receipt records the question, the verdict and the two digests: the final state's, and the kit's own. It carries its own SHA-256, so a changed character shows.
{
"case": "point-in-time",
"question": "Did the backtest’s state ever see the future?",
"domain": "quantitative research",
"register": "detection",
"status": "frontier",
"verdict": "valid",
"geometry_digest_v3": "be07f3713ccc406cfd6e880a6b92dadedf6950f503e326ebc2bdfd9f897b2472",
"kit_sha256": "982ec9f9ca86bc70c9a93f7056f6a67c4e4e05dea39015d511bb9c739db4aeaf",
"page": "/point-in-time/",
"note": "Public register only — the verdict and the two digests already shown on this case. This receipt's own SHA-256 is recomputable here in your browser; the geometry g-digest is recomputable from the kit on your bench. No engine mechanism is disclosed, and nothing here is asked to be taken on trust."
}
Receipt SHA-256 7825b964e9b045eb4f33498fd5be32f2cb4759fc9b078f632c3fb934494c88f6
In Habitat's shared receipt format, the same result is a second receipt that also names what it read (the kit and the vendor's file, each by its SHA-256), the window of dates, and every measure above. Its digest is e6fbe490e840a56329e9d3089b4e2403be03a676352456505ab28643081ec56a.
The fund runs the kit on its own machine. Its allocator opens the receipt on Habitat Desk, which shows the verdict and checks the receipt in the browser. Desk never accepts the data itself.
Most readers can stop above. These two checks are for anyone who wants to see it hold.
shasum -a 256 recompute-kit-point-in-time.tar.gz # must print 982ec9f9ca86bc70c9a93f7056f6a67c4e4e05dea39015d511bb9c739db4aeaf tar xzf recompute-kit-point-in-time.tar.gz cd recompute-kit-point-in-time python3 verify.py --require v3_fsum
PASS means every state rebuilt byte for byte from the vendor's own archive, the brake test failed where it must, and the final digest is be07f371….