The daily series exactly as it stood on any morning it was ever
published — reconstructable from a recipe that is verified value-exact against the
public git record before it ships. Every count and date in the text below is read out of
data/vintages_panel.json by this page's
own script as it renders; the HTML source carries no numbers to go stale.
A backtest is honest only if, for every morning it simulates, it reads the numbers a reader could actually have seen that morning — not the numbers as they stand today. Archival economics databases call that a vintage: the series as of a publish date, kept alongside the series as it is now. ALFRED, the St. Louis Fed's archival counterpart to FRED, is the reference implementation of the idea, and this panel is the same move applied to this index.
Every daily publish here is a git commit, so the archive has existed since the first
morning; what the panel adds is the product. There are
— vintages on record, published from
— to
—, and each one can be rebuilt exactly —
every value, every day — from the current file plus the few lines this payload records
about it. Until now that took a dozen git show invocations and trust in your own
plumbing; now it is one small file and a rule you can check.
The payload states its own reconstruction rule. This page quotes it — a paraphrase would be a second copy of a fact, and second copies drift:
—
In words: truncate the current series at the vintage's last observation;
drop the days the vintage never had (gaps that were healed after it
published); overwrite the values its diffs record. For a clean vintage the
diff is empty and the whole recipe is one truncation. The builder executes this exact recipe
against git show for every vintage on every build, and refuses to publish a panel
that does not reproduce git truth — a panel that is only mostly right would be a
look-ahead-bias generator with a trustworthy name, which is worse than nothing.
| Published | Commit | Rows | Last observation | Revised days | Recipe |
|---|
Rendered from the payload at load
time. The commit is the public check: git show SHA:docs/data/history.csv in a
clone of this repository returns the file as served that morning, with no tooling and no
cooperation from this project.
— of
— vintages are byte-identical to today's series over
their span — for each of them the recipe is a single truncation, and the diff
carries nothing at all. The remaining — carry their
revisions inline rather than as a footnote:
— cell-level differences across
— distinct days, all belonging to the
publishes of —. That episode is registered
— it sits on a dated methodology change recorded in the changelog, and
data/vintages.json re-proves every night that no
unregistered revision has joined it. A revision with a dated published cause is a version; a
revision without one is a defect.
Truncation alone is not enough, and the panel's own verifier demonstrated that on its first build. The earliest vintage stops at —. Today's file carries — days on or before that date; the vintage itself carried —. The difference is — days (—) that were missing that morning and were healed afterwards. A reconstruction that keeps them hands the backtester rows that did not exist on the morning being simulated — exactly the look-ahead this product exists to prevent. The verifier caught the mismatch by counting rather than reasoning, and the recipe has dropped those days by name ever since.
Take the earliest vintage: published —, commit
—. Your browser has just fetched today's
history.csv and run the recipe on it:
— The row count above is compared against the vintage's registered count, not asserted; if the two ever disagree, this page says so in red instead of showing you arithmetic that no longer holds.
Every other artifact on this site could, in principle, be rebuilt by a well-funded newcomer after the fact: the pipeline is public, the sources are public, the parameters are frozen in writing. A vintage archive is the exception. It exists only if someone was saving the series while it was current — the past state of a file is not recoverable from its present state unless the record was kept as it happened. A competitor who launches an index tonight can reproduce a current series; what they cannot produce is what their index said last month, because last month their index said nothing. Their vintage record starts the day they start keeping one, and the gap between their first vintage and this one grows by one day, every day, for as long as this file exists. This panel currently spans — publishes across — days, and tomorrow it spans one more.