Research / Sources / Schemas and history
Schemas and history
Every record here is checked against a JSON Schema, and every schema carries a semantic version: MAJOR when a change can make an existing record invalid, MINOR when it only adds, PATCH for wording. CI refuses a change whose version bump is too small (METHOD.md Section 10). Below is each schema as it stands and every version it has been.
Source 1.0.0
sources/<slug>.md: where a figure came from, and how it was read · source.schema.json
16 fields at 1.0.0
| Field | Type | Required | Allowed values |
|---|---|---|---|
| title | string | yes | |
| organisation | string | yes | |
| organisation_id | string | ||
| year | integer | yes | |
| published_in | string | ||
| url | string | ||
| free_copy_url | string | ||
| source_type | one of | yes | peer-reviewed, working-paper, regulator, court, industry-body, research-institute, vendor, press |
| method | one of | yes | survey, records, official-statistics, model, case-study, legal-text, estimate, unknown |
| access | one of | yes | primary, secondary |
| read_via | string | ||
| read_on | string | yes | |
| location | string | yes | |
| jurisdictions | list of string | yes | |
| industries | list of string | yes | |
| industry_as_published | string |
Versions
- 1.0.0 2026-09-25no field changes
- unversioned 2026-09-25first published, 16 fields
Finding 2.3.0
diseases/<disease>/<metric>.yaml and context/<metric>.yaml: one figure · finding.schema.json
41 fields at 2.3.0
| Field | Type | Required | Allowed values |
|---|---|---|---|
| label | string | yes | |
| exposure_value | number or null | yes | |
| exposure_unit | one of | yes | ratio_of_contract, ratio_of_other, per_wet_day, per_incident, none |
| denominator | one of | budget_at_decision, budget_at_announcement, construction_cost, amount_claimed, arbitration_cost, total_injury_cost, overrun_additional_cost, annual_capital_budget | |
| currency | string | ||
| price_year | integer | ||
| exposure_basis | string | yes | |
| exposure_kind | one of | yes | contractor_loss, derived_contractor_loss, money_at_stake, owner_side, societal, context |
| confidence | one of | yes | high, moderate, low |
| exposure_range | object | ||
| exposure_range.low | number | yes | |
| exposure_range.high | number | yes | |
| exposure_range.kind | one of | yes | confidence_interval, reported_min_max, scenario, across_studies |
| derivation | one of | yes | as_published, calculated |
| calculation | string | ||
| sources | list of | yes | |
| considered | list of records | ||
| considered[].source | yes | ||
| considered[].reason | string | yes | |
| sample_note | string | yes | |
| caveat | string | yes | |
| status | one of | yes | current, disputed, withdrawn |
| dispute_url | string | ||
| withdrawn_reason | string | ||
| history | list of records | ||
| history[].exposure_value | number or null | ||
| history[].exposure_unit | string | ||
| history[].denominator | string | ||
| history[].exposure_range | object | ||
| history[].exposure_kind | string | ||
| history[].confidence | string | ||
| history[].is_headline | boolean | ||
| history[].changed_on | string | yes | |
| history[].change_url | string | ||
| history[].reason | string | yes | |
| subtype | string | ||
| statistic | one of | mean, median, pooled_ratio, total, single_case, modelled, none, unknown | |
| sample_size | object | ||
| sample_size.n | integer | yes | |
| sample_size.unit | one of | yes | projects, respondents, organisations, decisions, awards, contracts, cases, years, other |
| sample_size.note | string |
Versions
- 2.3.0 2026-09-26+5 added
What changed from the version before
statistic added optional sample_size added optional sample_size.n added required sample_size.unit added required sample_size.note added optional - 2.2.0 2026-09-26~1 changed
What changed from the version before
exposure_kind changed allows derived_contractor_loss - 2.1.0 2026-09-26+1 added
What changed from the version before
subtype added optional - 2.0.0 2026-09-25-1 removed
What changed from the version before
is_headline removed - 1.2.0 2026-09-25no field changes
- unversioned 2026-09-25~1 changed
What changed from the version before
denominator changed allows annual_capital_budget - unversioned 2026-09-25~1 changed
What changed from the version before
denominator changed allows overrun_additional_cost - unversioned 2026-09-25first published, 36 fields
Protection 1.0.0
protections/<disease>/<mechanism>.yaml: evidence that a protection matters · protection.schema.json
9 fields at 1.0.0
| Field | Type | Required | Allowed values |
|---|---|---|---|
| label | string | yes | |
| claim | string | yes | |
| sources | finding: sources | yes | |
| considered | finding: considered | ||
| confidence | one of | yes | high, moderate, low |
| caveat | string | yes | |
| status | one of | yes | current, disputed, withdrawn |
| dispute_url | string | ||
| withdrawn_reason | string |
Versions
- 1.0.0 2026-09-25no field changes
- unversioned 2026-09-25first published, 9 fields