India Geopolitical Risk Monitor

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.

The numbers as they stood, not as they stand

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 recipe, quoted rather than paraphrased

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.

Every vintage on record

PublishedCommitRowsLast observation Revised daysRecipe

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.

What the diffs admit

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.

The refusal that proves the recipe

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.

A worked example, reconstructed as you read

Take the earliest vintage: published , commit . Your browser has just fetched today's history.csv and run the recipe on it:

  1. Truncate at : rows of the current file survive.
  2. Drop the absent days: rows remain.
  3. Overwrite the diff days with the values the vintage actually showed. For example, on the vintage recorded at , where today's file says . A backtest run as of that morning must be given the former.

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.

Why a later entrant cannot backfill this

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.