Monday, October 12, 2026English edition
The Geopolitician

Country risk, from the local press

How the numbers are made

What we read

Every morning, 3,000 local outlets in 115 countries, through their public RSS feeds, in their own language. A story belongs to the country of the outlet that published it, not to the country it is about: "from Brazil" means what the Brazilian press printed. Countries come in two tiers. Tier 1 (37 countries) gets a written briefing every day: a selection of 3–5 stories, each with a kind, a severity and its sources. Tier 2 (83 countries) has no written briefing yet: its page is built from the articles that passed the risk gate, counted, never read by an editor — and says so.

TierCountriesWhat is publishedWhere the numbers come from
Tier 137A written briefing every day: 3–5 stories, each with a kind, a severity and its sourcesStory severities given by the editor
Tier 283A signals page: the day's articles by kind, pressure against the country's own baseline, attention, the outlets readArticle counts — nobody has read these articles

The eight kinds of signal

Every story and every counted article is one of eight kinds, fixed. Each answers one question for someone with money or operations in the country.

KindThe question it answersRisk label
RegulationWhat rule changed?Regulatory risk
DisruptionWhat stopped working?Operational risk
Internal tensionIs the country holding together?Stability risk
Safety & healthCan people and operations stay?Safety & health risk
CompaniesWho moved?Corporate risk
MarketsWhat did prices do?Financial risk
TradeWhat crossed the border?Trade risk
PoliticsWhat changes the rules next?Political risk

Severity

Each briefing story carries a severity: 1 minor (worth knowing), 2 material (changes a decision for some readers), 3 severe (changes a decision for most readers with exposure). Severities exist only for tier-1 stories; counted articles have none, because nobody has read them.

Pressure, tier 1

For each kind, pressure is the sum of the severities of the stories of that kind over the last 30 days. The level is a word for that sum. The hub shows the level, the change against the 30 days before, the number of stories and the latest one; the 90-day curves are the same sum recomputed every day. A press signal, not a credit rating.

LevelPoints over 30 days
Quiet0
Low1–3
Elevated4–8
High9+

Pressure, tier 2

For a country without a briefing, the same table counts articles rather than severities: the number of articles of each kind that passed the risk gate in the last 30 days, against the country's own baseline — the mean count over the previous three 30-day windows (fewer while the country has less history; none in its first month, and the page then says "no baseline yet"). A baseline below 1 is read as 1, so a single article never reads High against an empty baseline.

LevelArticles over 30 days, against the baseline
Quietno article
Lowup to the baseline
Elevatedup to twice the baseline
Highabove twice the baseline

Attention

Attention counts the articles, across every outlet we read, that mention a country — whatever they are about. A hub shows the day's count against the country's 30-day average and the 90-day curve, once 14 days of data exist. The front page lists the day's spikes: countries whose mentions are at least 2 standard deviations above their 30-day mean, with at least 10 mentions, and the source countries leading the coverage.

The Country Pressure Index

One figure comparable across countries, computed every night for both tiers. For each kind, the day's pressure (severities for tier 1, the 30-day article count for tier 2) is compared with the country's own previous 90 days: z = (today − mean) ÷ max(standard deviation, √max(mean, 1)). The floor keeps a quiet country from surging on one article. Each z is clipped to ±3 and the index is the weighted mean of the eight — the kinds that decide whether people and operations can stay weigh most, company news least.

KindWeight
Regulatory risk1.0
Operational risk1.0
Stability risk1.2
Safety & health risk1.2
Corporate risk0.6
Financial risk0.8
Trade risk0.8
Political risk0.8

What the index reads as

A country has no index until it has 30 days of its own history. The front page's "Where pressure is rising this week" appears once five countries have one, lists the eight highest and names the kind driving each — the largest z. The index compares a country with itself first: +1.0 in Norway and +1.0 in Nigeria mean the same departure from each country's own normal, not the same conditions.

LevelIndex
Easing≤ −0.5
Normal−0.5 … +0.5
Rising+0.5 … +1.5
Surging> +1.5

Polarisation

For each country and day, the outlets we read are grouped by their published leaning — power (including state media), opposition, independent — and the day's articles are clustered into topics. Divergence is the share of the day's topics covered by only one of two camps, power against opposition (1 − the overlap of their topic sets); a pair is read only when each camp has at least 5 articles that day. The hub shows the day's level, the percentage, both camps' article counts, the topics and how many were shared, and the 90-day curve. The level compares the day with the country's own earlier days in the window — at least 14 of them, else nothing is shown: z = (today − mean) ÷ max(standard deviation, 0.05). This is media polarisation, not public opinion: an outlet's leaning describes the outlet, and no claim about the population is made until it has been checked against polls.

LevelDivergence against the country's own history
Convergingz ≤ −1
Normal−1 < z < 1
Diverging1 ≤ z < 2
Highly divergingz ≥ 2

How we rate outlets

Every outlet we read carries a published stance toward the sitting government — power, state, opposition or independent — plus a political orientation (left, centre, right) where it is well known, a confidence and a one-line reason. The stance is not a verdict of ours: a model scores five explicit criteria from −2 (away from the government) to +2 (toward it), each with its reason, from the outlet's ownership, its documented editorial line, a sample of its recent headlines, its legal status and what press-freedom reports say when they are known. The stance is derived from the weighted sum S of the five scores, never asked of the model as a word. Ratings are model-assisted, reviewed, published on each country's Media page with their criteria, and correctable through the contact form: an outlet or a reader who disputes a rating gets it re-examined and, where wrong, changed in the data. An outlet's stance describes the outlet, never its readers.

CriterionWeightWhat −2 … +2 means
Ownership0.30−2 owned by an opposition party or figure · 0 private, no political owner · +2 state, ruling party or government-controlled
Editorial line0.30toward the sitting government: −2 consistently hostile · 0 no consistent line · +2 consistently supportive
Coverage tone0.15the tone of a sample of recent headlines toward the government, −2 … +2
Status0.15−2 banned or in exile · −1 tolerated opposition · 0 mainstream · +1 semi-official · +2 official agency or state broadcaster
Third-party references0.10what RSF, academic media-bias lists or press-freedom reports say when known, −2 … +2; else 0

What the stances read as

The weighted sum S runs from −2 to +2. The Media page lists the outlets by stance, with their criteria scores, so the reading can be checked line by line.

StanceRule on the weighted sum S
powerS ≥ +0.5, private owner
stateS ≥ +0.5, state-owned (ownership +2)
oppositionS ≤ −0.5
independent−0.5 < S < +0.5
not ratedaxis 2 only, or unknown

Framing divergence

Agenda divergence asks whether the camps cover the same stories; framing divergence asks whether they read a shared story the same way. Every night, for the tier-1 countries, the topics both camps covered the day before are taken from the same clustering, with up to five sample headlines each. A language model reads the headlines of each camp — never the articles, never its own view of the events — and scores, per topic and per camp, the stance the wording conveys toward the sitting government (−2 hostile … +2 supportive) and its tone (−2 alarmed … +2 reassuring). The topic gap is (|stance A − stance B| + |tone A − tone B| ÷ 2) ÷ 6, from 0 (same reading) to 1 (opposite); the day's framing gap is the mean over at most 15 shared topics. The hub shows the gap with its level against the country's own earlier days (the same z rule and 14-day gating as agenda divergence) and the three widest gaps of the day, headline against headline. Media framing, not public opinion.

Vigilance thresholds

Three rules, and only these, raise a flag on a hub and on the front page's "Vigilance today". Each is a condition that must hold on consecutive calendar days, ending on the latest day the source has data for; the flag names the days and links each day's evidence page, and disappears the day the condition stops holding. They are rules on press signals, not travel advice and not a verdict on the country: what they say is that the local press has reported this pressure, at this level, for this many days.

FlagRuleConsecutive days
Heightened vigilance for staff and travelSafety & health pressure and Stability pressure both High on 7 consecutive days.7
Pressure surgePressure index Surging on 3 consecutive days.3
Media polarisation spikeMedia polarisation Highly diverging on 3 consecutive days.3

Flare-up watch

A composite of the press signals above, per country and day, published as Calm, Watch or High. Five components, each the day's z-score against the country's own previous days: Internal tension pressure and Safety & health pressure (the pressure-index z-scores, tier 1 from story severities, tier 2 from article counts), agenda divergence, framing gap (tier 1 only) and attention. Score = Σ weight × z ÷ Σ weight over the components present — a component without 14 days of history drops out and the remaining weights are renormalised — clipped to ±3. A country has no figure until 2 components have 14 days of history. The hub names the components driving the figure (the highest z-scores) and links the day's evidence page; the front page lists the countries at Watch or High. What the figure says, and all it says: Signals consistent with rising crisis risk. A composite of press signals, not a forecast.

ComponentWeight
Internal tension0.25
Safety & health0.20
Agenda divergence0.20
Framing gap0.15
Attention0.20

What the flare-up watch reads as

The score lives on the scale of a z-score: +1.0 means the day's signals sit one standard deviation above the country's own normal. It is not a probability, and no threshold on this page is a prediction; the words are chosen so that they cannot be read as one.

LevelScore
Calm< 0.5
Watch0.5 … 1.5
High> 1.5

Evidence

No number without its list. Every level on a hub, every cell of the front-page matrix and every row of the ranking links an evidence page: for one country and one day, the briefing's stories with their kind and severity, then every article counted as a signal, with its outlet, its leaning where known, and the link. Evidence pages are not indexed by search engines; they exist so that a reader can check.

What we never do

We do not forecast. We never write "collapse", "civil war" or "do not go"; the reader reads the curve. We publish no numeric country rating: the levels are words for a count of what the local press reported, and the index measures departure from a country's own normal, not its risk. We do not read a leaning into the population: an outlet's leaning describes the outlet. We do not reproduce article bodies; we link them.

Data and citation

What we keep, so that every figure can be re-derived: each article read for a briefing country, with its outlet, the outlet's country, the feed's publication time, the time we first saw it, its kind and its embedding — never its body, which we link; the daily counts of mentions between countries, across every outlet we read; each country's day topics and, from them, the world topics of the day, with how many articles each country's press gave them; the daily rows of the pressure index, the flare-up watch, polarisation, framing and attention; and the daily logs of publication, feed liveness and exchange rates. Nothing is deleted. A day lost to an outage stays empty rather than filled in. Every number lives on a dated page with a stable address: cite the page with its date and the outlets it names — the facts are theirs, the counting is ours. Briefings and figures may be quoted with attribution to K-Software and a link; the indices are press signals and must be presented as such, never as a risk rating. Machine access: the RSS feed on every hub, the sitemaps, and llms.txt for AI systems; an open-data endpoint for the daily series is planned.

Corrections and contact

A miscounted article, a wrong kind, a wrong severity or a wrong outlet is corrected in the data and the figures are recomputed at the next nightly run. Report it through the contact form; we answer within two working days. The thresholds on this page are the ones in the code: when they change, this page changes with them. The data and the pages are published by K-Software.