{
 "_meta": {
  "license": "CC BY 4.0",
  "citation": "Krishna, Ishan (2026). India Geopolitical Risk Monitor. https://igrm.in/",
  "codebook": "https://igrm.in/codebook.html",
  "source": "https://igrm.in/data/replication.json",
  "what": "An independent rebuild of the published index from the published codebook and the published shares, diffed against the published series. Written without reading the pipeline: if it disagrees, either the codebook does not say enough for a stranger to reproduce the number, or the pipeline does something the codebook does not describe. Both are defects, and neither can be argued away.",
  "inputs": [
   "docs/codebook.html",
   "docs/data/shares.csv",
   "docs/data/history.csv"
  ],
  "why_not_a_critic": "A second model reading the work and objecting to it reasons over the same context, and its loop ends when the writing becomes persuasive rather than when the number becomes right. This adversary is not permitted an opinion; its whole output is a diff.",
  "precision": 1,
  "precision_note": "history.csv publishes one decimal place, so the rebuild is rounded the same way and equality is required. An earlier version compared an unrounded rebuild against a rounded file and reported three 0.05 disagreements that were entirely an artifact of comparing different precisions.",
  "finding": "19914 of 19914 published values are reproduced exactly, by code that has never read the pipeline, from the codebook and the shares file alone.",
  "generated": "2026-08-23T17:40:47Z"
 },
 "best": {
  "n_published": 19914,
  "n_compared": 19914,
  "n_missing": 0,
  "missing_examples": [],
  "n_agree": 19914,
  "agreement": 1.0,
  "max_abs_diff": 0.05,
  "max_abs_diff_at": "2018-02-06 china_east",
  "per_column": {
   "china_east": {
    "n_published": 3319,
    "n_compared": 3319,
    "n_missing": 0,
    "agree": 3319,
    "max_diff": 0.05,
    "agreement": 1.0
   },
   "composite": {
    "n_published": 3319,
    "n_compared": 3319,
    "n_missing": 0,
    "agree": 3319,
    "max_diff": 0.05,
    "agreement": 1.0
   },
   "gulf_energy": {
    "n_published": 3319,
    "n_compared": 3319,
    "n_missing": 0,
    "agree": 3319,
    "max_diff": 0.0499,
    "agreement": 1.0
   },
   "pakistan_west": {
    "n_published": 3319,
    "n_compared": 3319,
    "n_missing": 0,
    "agree": 3319,
    "max_diff": 0.05,
    "agreement": 1.0
   },
   "shipping": {
    "n_published": 3319,
    "n_compared": 3319,
    "n_missing": 0,
    "agree": 3319,
    "max_diff": 0.0499,
    "agreement": 1.0
   },
   "us_trade": {
    "n_published": 3319,
    "n_compared": 3319,
    "n_missing": 0,
    "agree": 3319,
    "max_diff": 0.0499,
    "agreement": 1.0
   }
  },
  "percentile_convention": "weak",
  "window_convention": "calendar"
 },
 "coverage": {
  "n_published_values": 19914,
  "n_values_compared": 19914,
  "n_published_values_without_a_reconstruction": 0,
  "missing_value_examples": [],
  "n_published_days_without_a_shares_row": 0,
  "days": [],
  "why": "The agreement rate is computed over days both files cover. If shares.csv froze while history.csv advanced, the overlap would shrink, the remaining days would still match, and the percentage would stay at 100 while the newest scores had no published input behind them. This counts that directly."
 },
 "all_conventions": [
  {
   "n_published": 19914,
   "n_compared": 19914,
   "n_missing": 0,
   "missing_examples": [],
   "n_agree": 19914,
   "agreement": 1.0,
   "max_abs_diff": 0.05,
   "max_abs_diff_at": "2018-02-06 china_east",
   "per_column": {
    "china_east": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 3319,
     "max_diff": 0.05,
     "agreement": 1.0
    },
    "composite": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 3319,
     "max_diff": 0.05,
     "agreement": 1.0
    },
    "gulf_energy": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 3319,
     "max_diff": 0.0499,
     "agreement": 1.0
    },
    "pakistan_west": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 3319,
     "max_diff": 0.05,
     "agreement": 1.0
    },
    "shipping": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 3319,
     "max_diff": 0.0499,
     "agreement": 1.0
    },
    "us_trade": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 3319,
     "max_diff": 0.0499,
     "agreement": 1.0
    }
   },
   "percentile_convention": "weak",
   "window_convention": "calendar"
  },
  {
   "n_published": 19914,
   "n_compared": 19914,
   "n_missing": 0,
   "missing_examples": [],
   "n_agree": 12950,
   "agreement": 0.650296,
   "max_abs_diff": 2.2986,
   "max_abs_diff_at": "2026-08-16 us_trade",
   "per_column": {
    "china_east": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 2008,
     "max_diff": 1.626,
     "agreement": 0.605002
    },
    "composite": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 2532,
     "max_diff": 0.8589,
     "agreement": 0.76288
    },
    "gulf_energy": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 2101,
     "max_diff": 1.8781,
     "agreement": 0.633022
    },
    "pakistan_west": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 2106,
     "max_diff": 1.1479,
     "agreement": 0.634528
    },
    "shipping": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 2156,
     "max_diff": 2.1137,
     "agreement": 0.649593
    },
    "us_trade": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 2047,
     "max_diff": 2.2986,
     "agreement": 0.616752
    }
   },
   "percentile_convention": "weak",
   "window_convention": "observations"
  },
  {
   "n_published": 19914,
   "n_compared": 19914,
   "n_missing": 0,
   "missing_examples": [],
   "n_agree": 2956,
   "agreement": 0.148438,
   "max_abs_diff": 2.2301,
   "max_abs_diff_at": "2026-08-16 us_trade",
   "per_column": {
    "china_east": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 372,
     "max_diff": 1.7918,
     "agreement": 0.112082
    },
    "composite": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 173,
     "max_diff": 0.7904,
     "agreement": 0.052124
    },
    "gulf_energy": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 846,
     "max_diff": 1.9466,
     "agreement": 0.254896
    },
    "pakistan_west": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 401,
     "max_diff": 1.063,
     "agreement": 0.12082
    },
    "shipping": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 537,
     "max_diff": 2.1822,
     "agreement": 0.161796
    },
    "us_trade": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 627,
     "max_diff": 2.2301,
     "agreement": 0.188912
    }
   },
   "percentile_convention": "midrank",
   "window_convention": "observations"
  },
  {
   "n_published": 19914,
   "n_compared": 19914,
   "n_missing": 0,
   "missing_examples": [],
   "n_agree": 2324,
   "agreement": 0.116702,
   "max_abs_diff": 1.8507,
   "max_abs_diff_at": "2020-04-10 us_trade",
   "per_column": {
    "china_east": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 244,
     "max_diff": 1.1356,
     "agreement": 0.073516
    },
    "composite": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 64,
     "max_diff": 0.5448,
     "agreement": 0.019283
    },
    "gulf_energy": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 729,
     "max_diff": 0.5285,
     "agreement": 0.219644
    },
    "pakistan_west": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 354,
     "max_diff": 0.8144,
     "agreement": 0.106659
    },
    "shipping": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 435,
     "max_diff": 0.9519,
     "agreement": 0.131064
    },
    "us_trade": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 498,
     "max_diff": 1.8507,
     "agreement": 0.150045
    }
   },
   "percentile_convention": "midrank",
   "window_convention": "calendar"
  },
  {
   "n_published": 19914,
   "n_compared": 19914,
   "n_missing": 0,
   "missing_examples": [],
   "n_agree": 643,
   "agreement": 0.032289,
   "max_abs_diff": 3.7,
   "max_abs_diff_at": "2020-04-10 us_trade",
   "per_column": {
    "china_east": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 55,
     "max_diff": 2.4082,
     "agreement": 0.016571
    },
    "composite": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 60,
     "max_diff": 1.0696,
     "agreement": 0.018078
    },
    "gulf_energy": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 209,
     "max_diff": 2.0151,
     "agreement": 0.062971
    },
    "pakistan_west": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 90,
     "max_diff": 1.5876,
     "agreement": 0.027117
    },
    "shipping": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 90,
     "max_diff": 2.2507,
     "agreement": 0.027117
    },
    "us_trade": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 139,
     "max_diff": 3.7,
     "agreement": 0.04188
    }
   },
   "percentile_convention": "strict",
   "window_convention": "observations"
  },
  {
   "n_published": 19914,
   "n_compared": 19914,
   "n_missing": 0,
   "missing_examples": [],
   "n_agree": 0,
   "agreement": 0.0,
   "max_abs_diff": 3.7,
   "max_abs_diff_at": "2020-04-10 us_trade",
   "per_column": {
    "china_east": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 0,
     "max_diff": 2.3,
     "agreement": 0.0
    },
    "composite": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 0,
     "max_diff": 1.0696,
     "agreement": 0.0
    },
    "gulf_energy": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 0,
     "max_diff": 1.0678,
     "agreement": 0.0
    },
    "pakistan_west": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 0,
     "max_diff": 1.5876,
     "agreement": 0.0
    },
    "shipping": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 0,
     "max_diff": 1.8778,
     "agreement": 0.0
    },
    "us_trade": {
     "n_published": 3319,
     "n_compared": 3319,
     "n_missing": 0,
     "agree": 0,
     "max_diff": 3.7,
     "agreement": 0.0
    }
   },
   "percentile_convention": "strict",
   "window_convention": "calendar"
  }
 ],
 "ambiguities_in_the_codebook": [
  {
   "ambiguity": "The codebook says 'percentile ... 0-100' but does not define the convention at ties: strictly-below, at-or-below and midrank all satisfy it and differ by up to 100/n points on identical data.",
   "resolved_by_measurement": "weak",
   "margin_over_next": 0.349704
  },
  {
   "ambiguity": "'trailing 730 days' does not say whether the window counts calendar days or observations. The series has real gaps (2025-06-15..07-01, missing upstream and unfixable), so the two readings select different windows.",
   "resolved_by_measurement": "calendar",
   "margin_over_next": 0.349704
  },
  {
   "ambiguity": "The codebook does not state how a value exactly half-way between two published decimals is rounded. Three days land there: 10.75, 1.25 and 31.25.",
   "resolved_by_measurement": "round-half-to-even (Python's round). 1.25 publishes as 1.2 and 31.25 as 31.2, not 1.3 and 31.3.",
   "margin_over_next": 0.349704,
   "note": "Worth three values in twenty thousand, and listed anyway: the point of this file is the complete set of sentences a stranger would need, not the important ones."
  }
 ]
}