A Coordination Tracker
Edition of Tuesday 18 Aug  ·  Methodology

The Weimar Triangle

A weekly read on whether France, Germany and Poland are pulling in the same direction — across Ukraine, defence, enlargement, and the rule of law.

MethodologyHow six official sources become a weekly read on whether Paris, Berlin and Warsaw are pulling in the same direction.

This tracker watches what the three governments actually say — not what commentators say about them. Every week it reads the official statements of France, Germany and Poland and checks, topic by topic, whether their positions line up. Here is how that works, in four steps.

1
Collect the source material
Two official voices per country — the foreign ministry and the top executive office — read in German, French and Polish, straight from each institution's own newsroom rather than the thinner English pages.
France Germany Poland 6 sources
2
Read every item
Each statement is read to work out whether it's relevant to the Weimar Triangle — which countries and which issues it touches, whether it explicitly invokes the three-way format — and, for relevant items, to draw out a one-sentence summary of the position it takes. Irrelevant items are set aside.
Countries involved Issue areas Three-way signal Position summary
3
Score the stance
Every relevant statement is rated from −2 to +2 against the goals the three governments jointly agreed in 2024 — the same way researchers hand-code party manifestos. Each score is backed by a direct quote.
−2 −1 0 +1 +2
opposes ← → advances the goal
4
Compare & label
Statements on the same topic within a 7-day window are grouped, and the capitals' average scores are compared to see whether they converge or diverge.
Aligned Mixed Divergent
What counts as relevant

Every source is a specific foreign ministry or executive office, so the source country always counts — a Polish statement about Ukraine counts Poland even when the text never names it. On top of that, each item is read to see which other Weimar Triangle countries it concerns, which tracked issues it touches (Ukraine, defence, hybrid threats, enlargement, green transition, rule of law), and whether it explicitly invokes the Weimar Triangle. An item is kept when it's from one of these six ministries/offices and touches a tracked issue, when two or more of the three countries are involved on a tracked issue, or when it names the trilateral format directly.

Comparing positions

The Recent page groups relevant events into clusters where two or more countries published on the same topic within the same week. This surfaces the moments where, say, Germany and Poland both speak about Ukraine within days of each other — even without a joint statement — so their positions can be compared side by side.

How the stance is scored

Statements are rated against the goals the three governments jointly agreed in the Weimar declarations of February and May 2024, on a five-point scale:

Each rating is stored with a verbatim quote from the statement that justifies it, so every score on this site can be checked by reading the quote behind it. No hidden similarity math sits behind the headline scores.

What the labels mean

A cluster's label combines two things: how close the capitals' average scores are to each other, and whether that shared position actually backs the goal.

Aligned Averages sit within half a point of each other, and the shared position supports the goal.
Mixed Averages sit within about a point and a half — broad agreement with real differences of emphasis.
Divergent The capitals are pulling in visibly different directions on the topic.
Aligned against goal The three agree with each other, but their shared position works against Weimar's stated aims — agreement is not the same as alignment.
Noncommittal The shared average is too close to neutral to read as either support or opposition.
Corrections

Scores are model-assigned and always quote-backed, but models make mistakes. If a rating looks wrong, a quote reads out of context, or a statement was misclassified, please report it — corrections are reviewed and the underlying record is fixed, and that fix becomes part of the public history too.

Caveats
For the technically mindedThe model, the data format, pipeline status, and how provenance is tracked
The language model

Relevance classification, position extraction, and stance rating are all done by Gemma 4, an open-weight language model, run through Ollama — locally during development and via Ollama Cloud in the automated pipeline. For each item the model is asked which countries and issue areas it concerns, a one-sentence position summary per topic, a stance rating, and the quote that supports it. Its output is stored separately from the raw scraped text (under data/enriched/), and both are committed to git. An item is flagged weimar_relevant under the rules above, with a stronger trilateral_signal flag when all three actors are present or the format is named explicitly.

Storage & provenance

Each event is split across two YAML files committed to git, both keyed by the same relative path {source}/{YYYY-MM}/{date}-{hash}.yaml: the raw scraped fields live under data/events/ (title, text, source_url, source_published_at, ingested_at), and the computed classification plus the model's extracted block live under data/enriched/. The {hash} is the first eight hex characters of a SHA-256 hash of the source URL and title, giving automatic deduplication. The full history is auditable via git log.

Every file also records how it was produced, so a native-language item is never mistaken for an English fallback. Each raw event carries collection (native or fallback) and collection_method (rss, html, or a Wayback backfill); each enriched sidecar carries enriched_by — the model_id, the prompt_version that produced its ratings, and whether it was enriched locally or in GitHub Actions. Values on data collected before this tracking was added are reconstructed from git history.

Sources & pipeline status

Six official sources, two per country — a foreign ministry and a top executive office. Last ingest run — 2026-08-20:

SourceLangMethodSuccessFetchedStatus
France Diplomatie FR French RSS 2026-08-20 10 (+1) ok
Élysée FR French HTML scraper 2026-08-20 0 (+0) ok
German MFA DE German RSS 2026-08-20 1 (+1) ok
German Chancellery DE German HTML scraper 2026-08-20 1 (+1) ok
Polish MFA PL Polish HTML scraper 2026-08-20 0 (+0) ok
Polish PM Chancellery PL Polish HTML scraper 2026-08-20 1 (+1) ok
Coming next

Suggestions are welcome — if there's a feature or format you'd find useful, email hello@minilaterals.com.

Total events tracked: 1547  ·  Weimar-relevant: 987