Gaza Accountability Index

Methodology

Version 1.0.0-rc.1 · draft · scores not yet displayed (scorecard mode)

Purpose and standpoint

The Gaza Accountability Index scores the conduct of states regarding Gaza since 7 October 2023 on one scale, from −100 to +100. Every point comes from a dated action backed by archived sources; full weight requires a primary document. The score describes conduct. It is not a legal finding.

The index is not a court. The site never applies a legal characterisation to a government or an act in its own words; it shows the conduct and the documents, and a quote that contains a legal characterisation is attributed to its speaker. The index scores the action of governments, never populations. It is not complete: where a country publishes nothing, the site shows a gap, not a zero.

The index was started by Mohamed Zouad, who maintains it and signs it. His view is that the response of most governments has been inadequate. The project does not claim neutrality. It claims that the method is published, versioned and reproducible, so that this view cannot enter the numbers. The full statement is on the About page.

The scale

Scores run from −100 to +100 on one scale, with the same rules for every scored country. Zero is not a neutral position: it lies in the Passive band, and the Acting band starts at +1. A country that has done nothing sits below zero, because of the passivity penalty described under Silence is negative.

Bands

Five bands divide the scale. Each band is a range of the displayed integer score.

BandScoreMeaningIllustrative conduct
Sustaining−100 to −51Materially enabling the military campaignMajor arms supplier, active political shielding at the UN, sanctions on the ICC
Enabling−50 to −21Contributing without leadingComponents in the supply chain, trade as usual, abstains on ceasefire votes, defunded UNRWA
Passive−20 to 0Silence or gestures onlyNo arms trade but no measures either; votes yes at the UN and does nothing else
Acting+1 to +40Concrete measures with a costSuspended licences, restored and increased aid, formal statements naming violations, recognised Palestine
Confronting+41 to +100Sustained action across several frontsFull arms embargo, joined or intervened in the ICJ case, sanctions on officials, trade restrictions, led coalitions

Display rounding

All arithmetic uses full precision. The score is displayed rounded half away from zero to an integer: −13.5 is displayed as −14 and +0.5 as +1. The band is read from the displayed integer, not from the unrounded score, so a score of +0.4 is displayed as 0 in the Passive band and a score of +0.5 as +1 in the Acting band. The published data carries both values: score to one decimal and score_display as an integer.

Categories and caps

Indicators are grouped in five categories. Each category has a negative cap and a positive cap: negative points are capped so that one arms deal cannot outweigh everything else, and positive points are capped so that statements cannot offset munitions. A category's subtotal is clipped to its caps before the categories are added.

CategoryCapScored
A. Arms & military−45 / +30Yes
B. Diplomacy & international law−40 / +45Yes
C. Trade & economy−20 / +20Yes
D. Humanitarian−15 / +25Yes
E. Domestic accountability−10 / +10No, experimental

Category E is experimental

Category E (domestic accountability) is recorded and displayed, labelled experimental, and not scored in version 1.0. Its subtotal is computed with its cap of −10 to +10 and shown on the country page; it is never added to the score. Scoring it requires a new methodology version.

Universe and exclusions

The index scores 193 entities: the UN member states other than Israel, and the Holy See, a non-member observer state. Israel and Palestine are not scored. The scale measures the conduct of third states; Israel is a party to the conflict and Palestine is the affected party, so neither can be placed on it. Neither has a country page in version 1. Palestine's status as a non-member observer state is noted on the About page.

Countries are identified by their ISO 3166-1 alpha-3 code and named in English and French with the short names of the UN terminology database (UNTERM). Regions follow the UN M49 regions and sub-regions. Country pages list membership of the UN Security Council (permanent members and elected terms), the EU, NATO, the Arab League, the OIC, the G20, the G7 and BRICS.

Scope: Gaza scored, Lebanon and the West Bank tagged

Version 1 scores conduct related to Gaza. Every event carries one or more scope tags: gaza, lebanon, west-bank, region or related. An event enters the score only when one of its tags is gaza. Conduct related to Lebanon, the West Bank and the wider region is recorded and tagged from the start, and enters the score only through a methodology version 2.0. Acts that belong to a separate proceeding, such as joining another case before the International Court of Justice, are tagged related and are not scored.

The index scores states. Companies appear only as they are named in the public documents it cites.

Scorecard mode

The score is computed at every build from the first release. Its display is controlled by one switch. Until the author turns it on, the site shows scorecards: events, sources, coverage, and category subtotals as counts, with no score and no ranking; the ranking page lists countries in alphabetical order with their number of events. Version 1.0.0-rc.1 is in scorecard mode. Facts with sources are published first; the composite number follows once those facts have been open to public checking.

Rules

Three rules define the scale. Two further rules govern statements and research.

Conduct, not promises

Announcing a review scores nothing; a suspended licence scores. Points come from decisions, laws, votes, deliveries, funding and formal acts that are on the record. Indicator C1 scores a formal review of a trade or association agreement, not an announcement that one may be opened. A statement scores only when it is formal, is on the official record and meets the definition of indicator B9 or B10.

Silence is negative

A country with no qualifying event in categories B, C or D in the past 365 days receives the passivity penalty: 15 points are subtracted from its score. A country with no event at all therefore scores −15, not 0. UN General Assembly votes (B1) do not qualify: whichever way a country votes, its votes do not end the penalty. The methodology treats inaction, at the scale of harm in Gaza, as a choice. The penalty is described under Passivity below. The sensitivity tables, which show its effect on the ranking, are computed at every build and published once scores are displayed.

Material weight beats symbolic weight

Selling munitions costs more points than a statement earns. Arms deliveries alone can reach −40 (A1), and a full two-way arms embargo earns +25 (A7); all formal statements together are capped at +10 (B9) and −10 (B10). The points, the caps and the weights are public and listed in the indicator table.

Statements are scored, with caps

Formal statements are scored: +2 or +5 for a statement that calls for a ceasefire or names violations (B9), −5 for a statement that declares unconditional support or denies documented violations (B10), with indicator caps of +10 and −10. Without them, states with no arms trade and modest aid budgets would have few ways to score above zero; the caps keep words below deeds. A statement counts only with the exact quote, the speaker, the date and the official transcript or the official video with a timestamp. A paraphrase in the press is not enough. Statements by spokespersons are not scored, and posts on social media are not scored unless an official transcript exists.

Same protocol for every country

Every country is researched with the same protocol, which spends the same effort on positive and negative indicators and records what was checked when nothing is found. Event summaries follow one template, {Actor} {past-tense verb} {object}{, qualifier}., with no adjectives; a check at every build rejects summaries that contain a word from the published list banned-words.txt or an exclamation mark, that exceed 200 characters, or that do not start with the actor. Positive and negative events use the same layout. The summary line of every country card is generated from the same template.

Indicator table

The index uses 34 indicators in five categories. The 31 indicators of categories A to D are scored; the 3 indicators of category E are recorded and shown, and not scored in version 1.0. Each row gives the points, the event type, the indicator-level cap and stacking rule, the primary sources and the cadence; the evidence rules are listed under each category's table. Names and point values follow the indicator table of the project specification, with the definitions below.

A. Arms & military (cap −45 / +30)

IDIndicatorPointsTypeIndicator cap and stackingPrimary sourcesCadence
A1Major conventional arms delivered to Israel, scaled by share of Israel's imports−40 to 0 (formula a1)computed—SIPRI Arms Transfers DatabaseAnnual (March)
A2Ammunition, components, dual-use military goods exported (HS 93, 8710, 8802, 8526)−25 to 0 (formula a2)computed—Israeli Tax Authority customs data; UN Comtrade; National licence registers; NGO investigationsQuarterly
A3Participation in the F-35 supply chain−15standing—UN Special Rapporteur reports; Lockheed supplier disclosuresOn change
A4Arms purchased from Israel (new contracts since Oct 2023)−15 to 0 (formula a4)computed—SIPRI; National procurement noticesAnnual
A5Military cooperation: joint exercises, intelligence sharing, basing, weapons transit via ports or airspace−5 per instancerepeatablecap −15Defence ministry releases; Investigative journalismOn event
A6Export licences suspended (partial)+10standingsuperseded by A7Government decision; Official gazetteOn event
A7Full two-way arms embargo in force+25standingsupersedes A6Law or decreeOn event
A8Transit denied to arms shipments (ports, airspace, flagged vessels)+5 per instancerepeatablecap +10Port authority; Government statementOn event

Evidence rules

B. Diplomacy & international law (cap −40 / +45)

IDIndicatorPointsTypeIndicator cap and stackingPrimary sourcesCadence
B1UN General Assembly votes on Gaza ceasefire, UNRWA, Palestine statusYes +3 / Abstain −2 / No −5 / Absent −2repeatable—UN Digital Library voting recordsPer vote
B2UN Security Council veto of a ceasefire resolution (members only)−20repeatable—UNSC recordsPer vote
B3ICJ genocide case: declaration of intervention filed+15standing—ICJ press releasesOn event
B4Formal position rejecting or opposing ICJ provisional measures−15repeatable—Government statementOn event
B5ICC: public commitment to execute arrest warrants+8standinglatest position of B5 and B6 holdsGovernment statementOn event
B6ICC: stated refusal to execute warrants, or hosting a wanted official−10standinglatest position of B5 and B6 holdsGovernment statement; Visit recordsOn event
B7Sanctions on ICC judges or prosecutors−20standing—Official sanctions listOn event
B8Recognition of the State of Palestine after Oct 2023Recognised after 2023-10-07 +8 / Pre-existing recognition +3standingonly the largest holding tier countsForeign ministryOn event
B9Head of government or foreign minister formally names violations, calls for ceasefire or an end to the blockadeFormal call for ceasefire or end of blockade +2 / Names specific violations or uses a legal characterisation +5, per instancerepeatablecap +10Official transcriptOn event
B10Head of government declares unconditional support or denies documented violations−5 per instancerepeatablecap −10Official transcriptOn event
B11Sanctions on Israeli ministers or settler entitiesSanctions on Israeli ministers +10 / Sanctions on settler entities +5standingone event per tier, tiers addOfficial sanctions listOn event
B12Ambassador recalled / relations downgraded / severedAmbassador recalled +5 / Relations downgraded +8 / Relations severed +10standingonly the largest holding tier countsForeign ministryOn event

Evidence rules

C. Trade & economy (cap −20 / +20)

IDIndicatorPointsTypeIndicator cap and stackingPrimary sourcesCadence
C1Trade or association agreement suspended or formally reviewedFormal review +4 / Suspension +10standingonly the largest holding tier countsGovernment or EU decisionOn event
C2New trade, investment or cooperation agreement signed with Israel since Oct 2023−10standing—Treaty registers; Ministry releasesOn event
C3Bilateral trade with Israel continued at or above pre-war level−8 to 0 (formula c3)computed—UN Comtrade; IMF DOTSAnnual
C4Ban on settlement goods (labelling alone +2)Labelling alone +2 / Ban on settlement goods +5standingonly the largest holding tier countsCustoms regulationOn event
C5Sovereign fund or public pension divestment from named companies+5repeatable—Fund ethics council decisionsOn event
C6Public procurement exclusion of implicated companies+3repeatable—Procurement rulesOn event

Evidence rules

D. Humanitarian (cap −15 / +25)

IDIndicatorPointsTypeIndicator cap and stackingPrimary sourcesCadence
D1Humanitarian funding to the Gaza response, scaled per capita of GNI0 to +12 (formula d1)computed—OCHA Financial Tracking Service APIMonthly
D2UNRWA funding suspended−10standing—UNRWA donor tablesOn event
D3UNRWA funding restored / increased above 2022 levelFunding restored +5 / Funding increased above the 2022 level +8standingonly the largest holding tier countsUNRWA donor tablesOn event
D4Medical evacuations hosted, field hospitals deployed+5repeatable—WHO; Health ministryOn event
D5Visa or refugee pathway opened for Gazans+5repeatable—Immigration regulationsOn event

Evidence rules

E. Domestic accountability (cap −10 / +10) · experimental · not scored

IDIndicatorPointsTypeIndicator cap and stackingPrimary sourcesCadence
E1Domestic investigation or prosecution of nationals or companies for conduct in Gaza+5repeatable—Prosecutor announcements; Court filingsOn event
E2Bans on Palestine solidarity protests or symbols−5repeatable—Interior ministry decrees; Court rulingsOn event
E3Universal-jurisdiction complaints accepted for investigation+5repeatable—Court recordsOn event

Evidence rules

Indicator-level caps and stacking rules

Some indicators have their own cap, or a rule on how their events combine. These rules apply to the indicator's summed contributions before the category cap.

IndicatorRule
A5 military cooperation−5 per confirmed instance; the sum is capped at −15
A6 and A7 arms export measuresA7 (full two-way embargo, +25) supersedes A6 (partial suspension, +10) for the same country; the two do not add
A8 transit denied+5 per instance; the sum is capped at +10
B1 UN General Assembly votesno indicator cap; the category cap applies
B5 and B6 ICC arrest warrantsthe latest formal position of the country holds; B5 and B6 do not add
B8 recognition of Palestineone standing state: +8 for a recognition after 7 October 2023, otherwise +3 for a recognition that predates it, held from 7 October 2023
B9 formal statements+2 or +5 per statement; the sum is capped at +10
B10 unconditional support or denial−5 per statement; the sum is capped at −10
B11 sanctionssanctions on ministers (+10) and on settler entities (+5) are separate standing states; both can hold
B12 diplomatic relationsone standing state: the most severe current measure counts (ambassador recalled +5, relations downgraded +8, relations severed +10); the measures do not add
C1 trade or association agreementreview (+4) and suspension (+10) do not add; suspension supersedes review
C4 settlement goodslabelling (+2) and ban (+5) do not add; the ban supersedes labelling
D3 UNRWA fundingrestored (+5) and increased (+8) do not add; increased supersedes restored

Definitions per indicator

Qualifying UN General Assembly votes

B1 counts plenary resolutions and decisions of the UN General Assembly adopted by recorded vote on or after 7 October 2023 whose subject is Gaza (ceasefire, truce, humanitarian access), UNRWA, or the status and rights of Palestine. A decision adopted by recorded vote counts as a resolution does; the endorsement of the New York Declaration on 12 September 2025 was adopted as decision A/DEC/80/506. Committee votes, procedural votes and votes on amendments are excluded. Each vote scores yes +3, abstention −2, no −5 and absent −2; a formal "did not participate" counts as absent. Each qualifying vote is listed with its symbol, date, subject and a one-line reason for inclusion, and adding a vote to the list is a new minor version. The list below is filled from votes.yaml and is empty until the votes are verified against the UN records.

No qualifying votes are listed yet; the list is filled once each vote is verified.

Formula

The score is a sum of capped category subtotals, recomputed for every date from the event table, with a published formula and no manual overrides.

subk(c,t)=∑e∈Ek(c)pe⋅we⋅de(t)(after indicator-level caps)clipk(c,t)=clip(subk(c,t), capk−, capk+)k∈{A,B,C,D}raw(c,t)=∑k∈{A,B,C,D}clipk(c,t)−passivity(c,t)S(c,t)=clip(raw(c,t), −100, +100)\begin{aligned} \mathrm{sub}_k(c,t) &= \sum_{e \in E_k(c)} p_e \cdot w_e \cdot d_e(t) \qquad \text{(after indicator-level caps)} \\ \mathrm{clip}_k(c,t) &= \mathrm{clip}\big(\mathrm{sub}_k(c,t),\ \mathrm{cap}_k^{-},\ \mathrm{cap}_k^{+}\big) \qquad k \in \{A, B, C, D\} \\ \mathrm{raw}(c,t) &= \sum_{k \in \{A, B, C, D\}} \mathrm{clip}_k(c,t) - \mathrm{passivity}(c,t) \\ S(c,t) &= \mathrm{clip}\big(\mathrm{raw}(c,t),\ -100,\ +100\big) \end{aligned}

Here c is the country and t the date. E_k(c) is the set of published events of country c in category k with the scope tag gaza. For each event e, p_e is its points, w_e its confidence weight and d_e(t) its time factor: the decay d for a repeatable event, and 1 or 0 for a standing state or a computed quantity depending on whether it holds at t. clip(x, a, b) bounds x between a and b. cap_k⁻ and cap_k⁺ are the category caps. passivity(c,t) is 15 when the passivity penalty applies and 0 otherwise.

In plain language: each event contributes its points multiplied by its confidence weight and by its time factor. The contributions are added per indicator, and the indicator-level caps and stacking rules are applied. The indicator totals are added per category, and each category total is clipped to its caps. The clipped totals of categories A to D are added, and the passivity penalty is subtracted when it applies. The result is clipped to the range −100 to +100. Category E is computed the same way with its cap of −10 to +10 and shown on the country page; it is never summed into the score.

Worked example

This example is illustrative. The country is hypothetical and the numbers are not data. All events are at confidence confirmed (weight 1.0). Figures are shown to one decimal; the computation uses full precision.

CategoryContributionsSubtotal after cap
AA1 −22.0 (s = 0.3025, −40 × √0.3025), A3 −15, A6 +10−27 (within −45)
BB1 +3, +3 and −2 × 0.8007 (decay, 462 days after the vote) = −1.6; B10 −5; B5 +8+7.4
CC3 −5−5
DD1 +6; D2 ended, 0; D3 +5+11
Enonenot summed

The country has qualifying events in the past 365 days, so no passivity penalty applies. raw = −27 + 7.4 − 5 + 11 = −13.6. S = −13.6, displayed as −14, in the Passive band.

User-adjustable weights

Readers can set a weight w_k between 0 and 2 for each of the categories A to D; the default is 1. Weights multiply each category's capped subtotal. Events do not change.

Suser(c,t)=clip(∑k∈{A,B,C,D}wk⋅clipk(c,t)−passivity(c,t), −100, +100),wk∈[0,2]S_{\text{user}}(c,t) = \mathrm{clip}\Big(\sum_{k \in \{A, B, C, D\}} w_k \cdot \mathrm{clip}_k(c,t) - \mathrm{passivity}(c,t),\ -100,\ +100\Big), \qquad w_k \in [0, 2]

The result is computed in the reader's browser from the capped subtotals and the passivity flag published for every country. The link to a weighted view encodes the weights as ?w=A,B,C,D, with one decimal per value.

Event types and decay

Each indicator has one event type, and each event takes the type of its indicator.

The decay d is 1 for the first 365 days after the event, falls linearly to 0.25 at 730 days, and is 0 after 730 days and before the event date. A 2023 vote therefore weighs less than a 2026 vote. An event past 730 days stays on the country page and in the data; it no longer contributes to the score.

Δ (days)d(Δ)
0 to 3651
366 to 7301 − 0.75 × (Δ − 365) / 365, from 1 to 0.25
over 730, or before the event0

Only events with the status published contribute. A retracted event contributes 0 on every date, including past dates: the history is recomputed, and the corrections log records what changed. The site is rebuilt every night, so decay and the passivity window move forward even when no event has changed.

Confidence

Each event has one confidence level. Its weight multiplies the event's points.

LevelWeightRule
Confirmed1.0At least one source of kind official, court, or dataset.
Corroborated0.7Two independent ngo or press sources that name the underlying document.
Reported0.4One credible ngo or press source; flagged on the country page.
Disputed0.4An official denial is on record (a reply or an official source) and counter-evidence exists; both sides linked.

Evidence and sources

Leads never score; a country page can note that a matter is under investigation. Every draft event is read a second time, independently, against the archived text, and the verdict of that second reading is recorded before review. Events move from draft to reviewed to published; only published events score.

Computed indicators

Five indicators are computed from datasets and never typed in by hand: A1, A2, A4, C3 and D1. Each is recomputed when its source publishes a new release and holds until the next release. The formula output and the raw rows can be downloaded from the Data page. The votes of B1, the vetoes of B2 and the recognition states of B8 are also generated, from the UN voting records, a table of Security Council vetoes and the recognition dates in the country list.

A1 — major arms delivered to Israel

For each SIPRI release, published in March of year Y+1 with data through year Y, s = TIV(country → Israel, year Y) ÷ TIV(all suppliers → Israel, year Y). Points = −40 × √s, rounded to one decimal. The value holds from the release's publication date to the next release's publication date. Before the first release after 7 October 2023 (March 2024), A1 is no-data for every country. The square root keeps secondary suppliers visible: on a linear scale a supplier with a 1 % share would score −0.4; with the root it scores −4, while the largest supplier stays near the bottom of the range.

A4 — arms purchased from Israel

From the same SIPRI release: a new order placed with Israel in year Y with a TIV above 0 scores by tier of TIV. Only contracts signed on or after 7 October 2023 count.

A2 — military exports in customs data

V is the value of exports to Israel over the trailing 12 months under HS chapter 93 and heading 8710, plus headings 8526 and 8802 when the flow is confirmed as military (see Definitions per indicator). The source is the country's own reporting to UN Comtrade; if that is absent or confidential, Israel's mirror import data by country of origin; if both are absent, A2 is no-data. Points by tier of V. The value is recomputed at each annual or quarterly Comtrade release and holds until the next.

C3 — trade as usual

T is the total of goods exports and imports with Israel over the trailing 12 months, from the country's own reporting, or else from mirror data. r = T ÷ T(2022). If r is at least 0.9, points by tier of T; if r is below 0.9, 0. A drop in trade is not rewarded here; only a decision is, through C1. A rise is not penalised beyond the tier.

D1 — humanitarian funding

F is the total of paid and committed contributions from the country's government (donor organisation type "Government") to the OCHA-tracked flash appeals for the occupied Palestinian territory (oPt) and to the oPt pooled fund over the trailing 12 months, as recorded by the OCHA Financial Tracking Service (FTS). x = F ÷ GNI, where GNI is the country's total gross national income, not GNI per capita, from the World Bank (Atlas method, current US dollars, latest available year). Points by tier of x. Zero is a real zero, because FTS is the reference for government humanitarian funding; some bilateral and in-kind aid is not reported to FTS, and D4 and D5 capture part of it (see Known limitations). The value is recomputed monthly and holds for one month.

Thresholds and tiers

The scale factor of A1 and the tiers of A2, A4, C3 and D1:

A1 (formula a1) — Major conventional arms delivered to Israel, scaled by share of Israel's imports

ConditionPoints
0 ≤ s ≤ 1−40 × √s, rounded to one decimal
Before 11 March 2024No data

A2 (formula a2) — Ammunition, components, dual-use military goods exported (HS 93, 8710, 8802, 8526)

ConditionPoints
V ≥ 100,000,000 USD−25
V ≥ 10,000,000 USD−15
V ≥ 1,000,000 USD−8
V ≥ 100,000 USD−3
V < 100,000 USD0

A4 (formula a4) — Arms purchased from Israel (new contracts since Oct 2023)

ConditionPoints
TIV ≥ 500−15
TIV ≥ 100−10
TIV ≥ 10−5
TIV > 0−2
TIV = 00

C3 (formula c3) — Bilateral trade with Israel continued at or above pre-war level

ConditionPoints
r < 0.9 (r = T ÷ T(2022))0
r ≥ 0.9 and T ≥ 10,000,000,000 USD−8
r ≥ 0.9 and T ≥ 1,000,000,000 USD−5
r ≥ 0.9 and T ≥ 100,000,000 USD−3
r ≥ 0.9 and T ≥ 10,000,000 USD−2
r ≥ 0.9 and T < 10,000,000 USD0

D1 (formula d1) — Humanitarian funding to the Gaza response, scaled per capita of GNI

ConditionPoints
x ≥ 0.0100 %+12
x ≥ 0.0050 %+9
x ≥ 0.0020 %+6
x ≥ 0.0005 %+3
x > 0+1
x = 00

How the computed indicators are built

The formulas of A1, A2, A4, C3 and D1 leave some choices to the build: which dates a window covers, which records count, which year of a denominator applies. These choices were made when the data fetchers were written, on 27 September 2026, and each is stated here with its reason. The code is in packages/pipeline/src/fetch and packages/pipeline/src/generate of the public repository.

  • Every dataset response is archived before it is used. Each response of the OCHA Financial Tracking Service (FTS), the World Bank and UN Comtrade is saved to the Wayback Machine, and the tables in data/structured/ are built from the archived bytes, never from a separate live request. Reason: every row can then be checked against a public copy, with its SHA-256 hash. For UN Comtrade the data of record are the keyless preview queries (/public/v1/preview/…), archived and parsed; queries made with a subscription key are used only to cross-check them. Reason: a query with a key cannot be archived without publishing the key.
  • D1 windows are the twelve calendar months before the month the value applies to. A D1 value holds for one calendar month; for October 2024 the window is October 2023 to September 2024. Reason: the methodology recomputes D1 monthly over the trailing 12 months, and a window of whole months ending before the month gives each month one value, fixed before the month starts.
  • FTS flows count by their FTS date. A flow enters every window that contains the date FTS gives it, including the flows dated before 7 October 2023 that FTS lists under the flash appeals for the occupied Palestinian territory. Reason: FTS dates each contribution and lists these flows as funding of the appeals the rule names; the date recorded by FTS is the only date applied, for every donor alike. Windows that include such flows end in September 2024 at the latest.
  • Government flows are attributed by their FTS source location. A flow counts for a country when its donor organisation has the FTS type "Governments" (the spelling FTS uses; the methodology says "Government") and its source location is that country. Reason: governments fund through several organisation entries, and the source location is the field FTS fills for all of them. A government flow whose source location is missing or is not a scored country is not attributed by name. At the fetch of 27 September 2026 these included flows of the United Kingdom, the Swiss Agency for Development and Cooperation, the Qatar Fund for Development and the German Federal Foreign Office; each is to be attributed by its FTS organisation id, with the archived FTS organisation record as the reason, and the overrides are listed here once applied (none is applied at this build). Flows of the Palestinian Authority and of Jersey stay unattributed, because neither is a scored country.
  • GNI is the latest World Bank year not after the window, else the most recent year. Reason: the ratio x = F ÷ GNI then compares funding and income of the same period where the World Bank has published it; where it has not, the most recent year is the only figure available. For some countries the most recent year published is old: Liechtenstein (2009), Eritrea (2011), South Sudan (2015), Yemen (2018), Cuba (2019) and the Syrian Arab Republic (2022). Monaco has no GNI in the World Bank data, so its D1 is no-data for every month in which FTS records funding from it.
  • A4 leaves out the orders of 2023. Only orders of 2024 or later count. Reason: SIPRI dates orders by year only, so an order of 2023 cannot be placed before or after 7 October 2023; counting none of them avoids counting orders signed before the war.
  • A2 and C3 use calendar-year Comtrade data. Each value covers one calendar year of trade and holds from the reporter's first release of that year's data (Israel's, for mirror data) to its first release of the next year's. Reason: the annual series is the one UN Comtrade publishes for every reporter, and the release date, read from Comtrade's archived data-availability record, is the day the figures became public.
  • A2 counts HS 8526 and 8802 only where a confirmation is recorded. The rows of both headings are kept in comtrade_a2.csv, and they count for a country only when a licence register, a parliamentary answer or a published investigation citing the customs code, recorded in a table of confirmations, shows that the flow is military. Reason: both headings are mostly civil goods (radar and remote-control apparatus, aircraft). No confirmation is recorded at this build, so headings 8526 and 8802 count for no country.

Passivity

A country receives a passivity penalty of 15 points at date t when it has no qualifying event in the trailing 365 days. A qualifying event is a published event on an indicator in B2 to B12, C1 to C6 or D1 to D5, dated in the 365 days up to and including t, whose current weighted contribution is at least 2 in absolute value.

The penalty is how the rule "silence is negative" is applied. Only the passivity penalty applies to a country with no data at all. The ranking with the penalty at 5, 15 and 25 points is the first sensitivity table; like the others, it is computed at every build and published once scores are displayed.

ParameterValue
Penalty15 points
Window365 days, up to and including t
Qualifying indicatorsB2–B12, C1–C6, D1–D5
Minimum absolute contribution2
Event statusespublished
Excluded: B1B1 votes do not qualify: spec §2 describes a country that votes yes at the UN and does nothing else as Passive.
Excluded: A1–A8Category A never qualifies: selling or refusing arms is not the kind of engagement the penalty measures, and A6–A8 events almost always come with B or C events anyway.
Excluded: E1–E3Category E is experimental and unscored in v1.0.
Sensitivity values5, 15 and 25 points

Coverage

Coverage is computed over the 31 scored indicators. Each country has one assessment status per indicator; a status of none-found or no-data carries the date checked and a note or the search queries used:

applicable=31−nnot-applicable,coverage=nhas-events+nnone-foundapplicable\text{applicable} = 31 - n_{\text{not-applicable}}, \qquad \text{coverage} = \frac{n_{\text{has-events}} + n_{\text{none-found}}}{\text{applicable}}

The coverage bar sits next to every score. Filled segments are indicators with events or with nothing found; hatched segments are indicators with no data; empty segments are unchecked indicators. The country page lists, for every indicator, what was checked and when.

No data is not zero

When a country has no data on A1 or A2, its card shows "no export data", never a zero. A country that publishes nothing is not scored as if it had exported nothing: only the passivity penalty applies to a country with no data at all. This keeps a lack of published data from being read as an absence of conduct.

An unchecked indicator is a build warning. A country with unchecked indicators can be published only in scorecard mode, and scores are not displayed while any published country has an unchecked indicator.

Sensitivity tables

Five sensitivity tables show how the ranking changes when one parameter changes. Each gives the full ranking under the alternative setting and the Spearman rank correlation with the default ranking. The tables are computed at every build and published once scores are displayed.

  1. Passivity penalty at 5, 15 and 25 points.
  2. Each category weight (A, B, C, D) at 0.5 and at 1.5, with the others at 1.
  3. Weight of reported events at 0.2 and at 0.6.
  4. Statements excluded: B9 and B10 contribute 0.
  5. Decay off: d = 1 for every repeatable event.

In scorecard mode the tables are not displayed, because each of them contains a ranking.

Symmetry table

For each negative indicator, the symmetry table names its positive counterpart, or states why none exists. A check at every build fails if the table is missing or incomplete. Positive and negative events use the same layout on every page.

NegativePositive counterpartNote
A1 deliveriesA7 embargo—
A2 componentsA6 partial suspension—
A3 F-35A6 (halt of F-35 parts)—
A4 purchases from IsraelA7 (two-way embargo)—
A5 cooperationA8 transit denied—
B1 no/abstainB1 yessame indicator
B2 vetoB3 interventionboth are legal-institutional acts
B4 rejects ICJB3—
B6 refuses ICCB5 executes ICC—
B7 sanctions ICCB5—
B10 denialB9 naming—
C2 new agreementC1 suspension—
C3 trade as usualC1, C4—
D2 UNRWA cutD3 UNRWA restored—
E2 protest bansE1 investigationsexperimental

Versioning and changelog

Methodology versions follow semantic versioning.

Each version is a complete, self-contained folder methodology/vX.Y.Z/ in the public repository. Every score carries the version that produced it. A new version recomputes the whole history. When a version is superseded, its last outputs are frozen and stay available at /api/v1/methodology/vX.Y.Z/…. Every change ships with an entry in the changelog, methodology/CHANGELOG.md, and a file diff.json that lists every country whose displayed score moved by 1 or more, with the cause.

A change is proposed as a pull request with a written rationale. The build posts the diff on the pull request. The proposal is announced on the Changes page and stays open for public comment for 14 days in a linked discussion; it is merged only after that period. A major version also needs a sign-off from at least one named reviewer.

Version 1.0.0-rc.1 is a release candidate. Before scores are displayed, the points and thresholds are tested by hand-scoring ten countries, and named external reviewers review the indicator table and thresholds; any adjustment is recorded in the changelog.

Reproducibility and consistency checks

Every score can be rebuilt from a copy of the public repository: for a given date, the build regenerates every output byte for byte from data/ and methodology/, and the published manifest.json records the git commit and a hash of every file. The following checks run at every build and block publication when they fail:

  1. Two events on the same indicator for the same country, in overlapping windows, with different points, are an error unless the indicator is scaled, that is, its points can differ between events; each event on a scaled indicator records the reason for its points. The scaled indicators are A1, A2, A4, A5, B1, B8, B9, B11, B12, C1, C3, C4, D1 and D3.
  2. Every confirmed event has a source of kind official, court or dataset.
  3. Every source has an archived copy, a SHA-256 hash and a retrieval timestamp, except a dataset row, which relies on the archived copy of its dataset, and a failed capture, which is flagged and cannot support a published event; every piece of evidence has a quote.
  4. Every B9 and B10 quote appears verbatim in the extracted text of its archived source, after whitespace normalisation; the quotes of other events must appear too, unless the source is a dataset row.
  5. The symmetry table is present and complete.
  6. Event summaries contain no word from banned-words.txt and no exclamation mark, are at most 200 characters long, and start with the actor.
  7. A fresh build produces byte-identical outputs.
  8. No country has an unchecked indicator when scores are displayed.

A change to the date, points, confidence or evidence of a published event is also rejected unless it comes with an entry in the corrections log.

Corrections and right of reply

Every correction and retraction is listed on the Corrections page: what was wrong, who flagged it, what changed and when. Nothing is deleted: a retracted event stays in the record, marked retracted, and no longer scores. Anyone can report an error through the public issue form.

Any government or embassy can reply to a specific event. The reply is published verbatim on the country page within 10 days of receipt, in the original language with a translation, with the project's answer beneath it. The contested event moves to confidence disputed (weight 0.4) until it is resolved by a correction, a retraction, or a documented rejection with reasons. How to submit a reply is explained on the Reply page.

Deviations from the specification

The implementation differs from the project specification on these points:

  1. Historical snapshots are static files, /api/v1/scores/{YYYY-MM-DD}.json, with an index file that lists the available dates, instead of a query GET /v1/scores?date=.
  2. There is no automated extraction pipeline. Events are researched and drafted in sessions of Claude Code, an AI assistant, run by the author with the published sources protocol; the two-reader check of the specification is kept as a mandatory second reading of every draft.
  3. The dataset is a set of files in a public git repository, and the review interface is the pull request on GitHub.
  4. The Compare page shows category values as a dot plot instead of a radar chart. The map is drawn as SVG from Natural Earth data instead of map tiles.
  5. Category E is recorded and not scored. Israel and Palestine are not scored.
  6. Indicator A2 counts HS headings 8526 and 8802 only when the military nature of the flow is confirmed (see Definitions per indicator).

Scores moved by this version

No earlier version to compare with.

Changelog

Every version, newest last, from methodology/CHANGELOG.md in the repository.

Every change to points, caps, thresholds, decay, passivity, the qualifying-votes list, the symmetry table or the universe ships as a new version folder under methodology/ with an entry here and a diff.json listing every country whose displayed score moved by 1 or more, with the cause (docs/02-methodology-spec.md §11, docs/08-governance.md §1). Major: scale, category or universe changes. Minor: indicator, point or threshold changes, new qualifying votes. Patch: wording.

1.0.0-rc.1 — initial

Folder methodology/v1.0.0/, status release candidate; scores are computed but not displayed (scorecard mode, D-16).

  • Encodes docs/02-methodology-spec.md v1.0 and the indicator table of the specification §3: 34 indicators, of which 31 are scored (categories A–D) and 3 are tracked and unscored (category E, D-12).
  • Category caps A −45/+30, B −40/+45, C −20/+20, D −15/+25; E −10/+10, computed and shown, never summed. Score clipped to −100…+100, rounded half away from zero; bands read from the rounded integer.
  • Indicator-level caps (A5 −15, A8 +10, B9 +10, B10 −10) and stacking rules (one standing state for B8, B12, C1, C4, D3; B11 ministers and settlers held separately; latest position for B5/B6; A7 supersedes A6).
  • Event types follow the final decisions of docs/02 §3: B3, B5, B6 and C2 are standing states, and A6 is a standing state for every suspension, ending on the date the suspension is lifted.
  • Scaled indicators, whose points may differ between events of the same country and which record the reason for their points: A1, A2, A4, A5, B1, B8, B9, B11, B12, C1, C3, C4, D1 and D3. This keeps the list of docs/02 §12.1 (A5, B9, B12 tiers) and extends it to the computed indicators (A1, A2, A4, C3, D1) and the other indicators with tiers (B1, B8, B11, C1, C4, D3).
  • Confidence weights 1.0 / 0.7 / 0.4 / 0.4; decay flat for 365 days, then linear to 0.25 at 730 days, then 0; passivity penalty 15 with the qualifying rule of docs/02 §6.
  • Formulas and thresholds for the computed indicators A1, A2, A4, C3 and D1 (docs/02 §5).
  • Symmetry table of docs/02 §13. Qualifying-votes list empty until the votes are verified (P-14).
  • Tone-lint list banned-words.txt for event summaries.
  • votes.yaml entries also carry quote and locator: the verbatim passage of the archived UN press release stating the recorded vote, which becomes the press-release evidence of each generated B1 event. Shape only; the list is still empty and no score changes.

Known limitations

How the rules are read

The scoring engine (packages/scoring) and the build (packages/pipeline) read some rules of this version in a way the text above does not spell out. Each reading applies to every country alike.