Skip to content

Latest commit

 

History

History
319 lines (247 loc) · 18.3 KB

File metadata and controls

319 lines (247 loc) · 18.3 KB

🗳️ Voting Patterns Template — European Parliament

📌 Template Instructions: Copy to analysis/daily/{date}/{article-type}-run{N}/intelligence/voting-patterns.md. Replace every [REQUIRED] marker with analysis derived from get_voting_records, analyze_voting_patterns, analyze_coalition_dynamics, and compare_political_groups. See methodologies/per-artifact-methodologies.md §voting-patterns.

🎯 Purpose: Group-by-group coalition arithmetic for the period. Answers "how did each political group behave, where did blocs cohere, where did they fracture, and which cross-group coalitions carried majorities?" Distinct from coalition-dynamics.md (alliance-pair focused) — this file is bloc-behaviour focused.


📋 Document Metadata

Field Value
Report ID [REQUIRED: VP-YYYY-MM-DD-runNN]
Analysis Period [REQUIRED: e.g. Q1 2026 (2026-01-01 to 2026-03-31)]
Roll-Call Votes Covered [REQUIRED: count]
Plenary Sessions Covered [REQUIRED: list of part-sessions]
Confidence [REQUIRED: 🟢 HIGH / 🟡 MEDIUM / 🔴 LOW — explain in body if not HIGH]

1️⃣ Group Size & Theoretical Coalition Arithmetic

Group Seats % of 720 Role
EPP [#] [%] [REQUIRED: one-line strategic role]
S&D [#] [%] [REQUIRED]
PfE [#] [%] [REQUIRED]
ECR [#] [%] [REQUIRED]
Renew [#] [%] [REQUIRED]
Greens/EFA [#] [%] [REQUIRED]
The Left [#] [%] [REQUIRED]
ESN [#] [%] [REQUIRED]
NI [#] [%] [REQUIRED]

Majority threshold: 361 votes (of 720). Simple majority of votes cast: varies by attendance.


2️⃣ Observed Coalition Patterns (Period)

%%{init: {"theme":"dark","themeVariables":{"primaryColor":"#1565C0","primaryTextColor":"#ffffff","primaryBorderColor":"#0A3F7F","lineColor":"#90CAF9","secondaryColor":"#2E7D32","secondaryTextColor":"#ffffff","tertiaryColor":"#FF9800","tertiaryTextColor":"#000000","mainBkg":"#1565C0","secondBkg":"#2E7D32","tertiaryBkg":"#FF9800","noteBkgColor":"#FFC107","noteTextColor":"#000000","errorBkgColor":"#D32F2F","fontFamily":"Inter, Helvetica, Arial, sans-serif"}}}%%
graph LR
    %% Palette note: this diagram uses political-group colours (EPP blue, S&D red, Renew orange, Greens green, ECR light-blue)
    %% which intentionally differ from the general Hack23 semantic palette defined in ai-driven-analysis-guide.md §Colour legend.
    %% Party colours take precedence over the semantic palette whenever a diagram depicts named political groups.
    EPP[EPP<br/>[#]] ---|[agreement %]| SD[S&D<br/>[#]]
    SD ---|[agreement %]| REN[Renew<br/>[#]]
    EPP ---|[agreement %]| REN
    EPP -.-|[agreement %]| ECR[ECR<br/>[#]]
    REN ---|[agreement %]| GRE[Greens/EFA<br/>[#]]

    style EPP fill:#1565C0,color:#ffffff
    style SD fill:#D32F2F,color:#ffffff
    style REN fill:#FF9800,color:#000000
    style GRE fill:#2E7D32,color:#ffffff
    style ECR fill:#0288D1,color:#ffffff
Loading
Coalition Groups Typical Majority Use Cases Cohesion (%) Evidence
Grand Centre EPP + S&D + Renew [# votes] [REQUIRED: policy domains] [%] [REQUIRED: ≥1 RCV ID]
Progressive-Centrist S&D + Renew + Greens/EFA + Left [# votes] [REQUIRED] [%] [REQUIRED]
Conservative-Right EPP + ECR + selective PfE [# votes] [REQUIRED] [%] [REQUIRED]
Opposition Blocs PfE + ECR + ESN [# votes] [REQUIRED] [%] [REQUIRED]

3️⃣ Per-Group Behaviour

For each group: cohesion, defection highlights, sample votes.

EPP

  • Internal cohesion: [REQUIRED: % with evidence — e.g. 91% across 567 RCVs]
  • Dominant position: [REQUIRED: 1-2 sentences]
  • Notable defections: [REQUIRED: ≥1 named MEP + RCV ID, or note "none observed this period"]
  • Cross-group alliances: [REQUIRED: most frequent partners]

S&D

  • Internal cohesion: [REQUIRED]
  • Dominant position: [REQUIRED]
  • Notable defections: [REQUIRED]
  • Cross-group alliances: [REQUIRED]

Renew

  • Internal cohesion: [REQUIRED]
  • Dominant position: [REQUIRED]
  • Notable defections: [REQUIRED]
  • Cross-group alliances: [REQUIRED]

Greens/EFA

  • Internal cohesion: [REQUIRED]
  • Dominant position: [REQUIRED]
  • Notable defections: [REQUIRED]
  • Cross-group alliances: [REQUIRED]

ECR

  • Internal cohesion: [REQUIRED]
  • Dominant position: [REQUIRED]
  • Notable defections: [REQUIRED]
  • Cross-group alliances: [REQUIRED]

PfE

  • Internal cohesion: [REQUIRED]
  • Dominant position: [REQUIRED]
  • Notable defections: [REQUIRED]
  • Cross-group alliances: [REQUIRED]

The Left

  • Internal cohesion: [REQUIRED]
  • Dominant position: [REQUIRED]
  • Notable defections: [REQUIRED]
  • Cross-group alliances: [REQUIRED]

ESN / NI

  • Behaviour notes: [REQUIRED: aggregate position given fragmentation]

4️⃣ Bloc-Behaviour Index

Bloc Members Votes Won Votes Lost Win Rate Trend vs. Prior Period
Grand Centre [EPP+S&D+Renew] [#] [#] [%] [↑ / → / ↓]
Progressive-Centrist [S&D+Renew+Greens+Left] [#] [#] [%] [↑ / → / ↓]
National-Right [PfE+ECR+ESN] [#] [#] [%] [↑ / → / ↓]
EPP-led right [EPP+ECR±PfE] [#] [#] [%] [↑ / → / ↓]

5️⃣ Stress Points & Outlier Votes

RCV ID Topic Outcome Why outlier? Coalition flipped?
[REQUIRED] [REQUIRED] [For/Against/Abstain counts] [REQUIRED: ≥30 words] [yes/no]
[REQUIRED] [REQUIRED] [...] [REQUIRED] [...]
[REQUIRED] [REQUIRED] [...] [REQUIRED] [...]

≥3 outlier votes required.


6️⃣ Forward Implications

Upcoming Vote Expected Coalition Confidence What would flip it
[REQUIRED: plenary date + topic] [REQUIRED] [🟢/🟡/🔴] [REQUIRED]
[REQUIRED] [REQUIRED] [🟢/🟡/🔴] [REQUIRED]

≥3 forward forecasts.


7️⃣ Voting Data Freshness

Required field — consumed by mcp-reliability-audit.md §"Data-source bridge" and by Stage-C completeness gate. Copy the value from VotingRecordsFallbackResult.freshnessLabel produced by getVotingRecordsWithFallback in src/mcp/ep-open-data-client.ts.

Field Value
Data source [REQUIRED: "mcp" / "ep-open-data-portal" / "unavailable"]
Freshness label [REQUIRED: 🟢 MCP (...→...) / 🟡 EP Open Data Portal fallback (...→...) / 🔴 voting data unavailable for window...]
EP MCP tool get_voting_records (dateFrom / dateTo)
Fallback used? [yes — queried EP Open Data Portal /api/v2/decision / no — MCP data sufficient / n/a — both sources empty]
Attribution [REQUIRED when fallback active: "European Parliament Open Data Portal — https://data.europarl.europa.eu — CC BY 4.0"]
Confidence adjustment [REQUIRED: explain whether 🟡 or 🔴 widens WEP bands or degrades Admiralty grade per osint-tradecraft-standards.md §3]

When source = "unavailable": Do NOT substitute structural-proxy cohesion scores without an explicit 🔴 LOW-confidence flag on every claim in §§2–4. Widen all WEP bands by ~10 pp. See analysis/methodologies/osint-tradecraft-standards.md §3.1 and .github/prompts/07-mcp-reference.md §11 item #6.


8️⃣ Confidence Ledger

  • Roll-call IDs present: [count cited in this file]
  • ⚠️ Aggregate vs. per-MEP: [REQUIRED: note where EP roll-call delay limits claims to LOW]
  • 🔬 Tools used: analyze_voting_patterns, analyze_coalition_dynamics, compare_political_groups, get_voting_records (per session), ep-get-voting-records (fallback, if active)

9️⃣ EP MCP Tool Inputs

EP MCP tool Used for which section Notes
get_voting_records §1 RCV-evidence column (every claim cites RCV ID) Aggregate margins; flag LOW if <4 weeks.
ep-get-voting-records (fallback) §1 RCV-evidence column when MCP returns empty EP Open Data Portal /api/v2/decision; activate via getVotingRecordsWithFallback; CC BY 4.0 attribution required.
analyze_voting_patterns §2 Per-MEP behaviour rubric When per-MEP feed available; aggregate otherwise.
analyze_coalition_dynamics §3 Group-cohesion proxy Two-window deltas.
compare_political_groups §4 Seat-share normalisation Confirms majority arithmetic.
track_legislation §5 Procedure context COD/CNS/APP per RCV.
get_meeting_decisions §6 Adopted-decision ↔ RCV cross-check Verifies passage.
get_adopted_texts §8 Outcome confirmation Adopted-text reflects RCV result.
correlate_intelligence §9 Anomaly alerts Defection / abstention spikes.
detect_voting_anomalies §9 Outlier RCVs Configurable sensitivity threshold.

🔟 Worked Pass-1 → Pass-2 Example (Strasbourg-I 2025 voting digest)

❌ Pass-1 (thin, 22 words):

"Several important votes happened. AI Act passed. CRA implementation was approved. Coalitions held. Some defections noted but minor."

✅ Pass-2 (compliant, 110 words, sourced):

Top 5 RCVs (Strasbourg-I 2025-10-21/24): (1) 2024/0123(COD) Critical Raw Materials Act final 412/189/68 — passage margin 178; (2) 2024/0145(COD) AI-Office implementing-act amendment 392/214/41 — Renew lost 11 of 84 (Strack-Zimmermann + 10) per analyze_voting_patterns; (3) 2025/2014(RSP) Ukraine-aid 50bn extension 487/126/52 — broadest cross-party majority of session; (4) 2024/0099(COD) CRA implementation amendment 367/241/45 — closest passage of session; (5) 2025/2901(RSP) Iran-MEK delisting 287/198/153 — high abstention signal (153 = 22 %). PfE+ESN+ECR cohesion on RCVs (1)+(4): 84 % per analyze_coalition_dynamics — right-flank consolidation continues.


1️⃣1️⃣ Worked Top-5 RCV Table

# Procedure code + short title Date For Against Abstain Margin Anchor group split
1 2024/0123(COD) Critical Raw Materials Act — final 2025-10-22 412 189 68 +178 EPP 184/188 (98 %); S&D 134/136 (99 %); Renew 79/84 (94 %); ECR 41/78 (53 %); PfE 0/84; Greens/EFA 47/53 (89 %)
2 2024/0145(COD) AI-Office IA amendment 2025-10-22 392 214 41 +178 EPP 184/188 (98 %); S&D 132/136 (97 %); Renew 73/84 (87 %, 11 defectors); ECR 22/78 (28 %); PfE 0/84
3 2025/2014(RSP) Ukraine-aid 50 bn extension 2025-10-23 487 126 52 +361 EPP 188/188; S&D 136/136; Renew 84/84; ECR 56/78; PfE 18/84; ESN 0/30
4 2024/0099(COD) CRA implementation amendment 2025-10-23 367 241 45 +126 EPP 181/188; S&D 121/136 (15 dissenters); Renew 81/84; Greens/EFA 12/53 (24 % only); ECR 39/78
5 2025/2901(RSP) Iran-MEK delisting 2025-10-24 287 198 153 +89 EPP 117/188; S&D 91/136; Renew 51/84; high abstention reflects free-vote on terrorism listing

1️⃣2️⃣ Per-Group Behaviour Rubric (4 EP voting behaviours)

Behaviour Definition Worked observation (Strasbourg-I 2025) Score 1-5
Discipline % of group voting with whip on top-5 RCVs EPP 98 %, S&D 97 %, Renew 89 %, Greens/EFA 87 %, ECR 65 %, PfE 92 %, ESN 88 % 4 (Grand Coalition); 3 (right-flank)
Defection named MEPs voting against own group ≥1 of top-5 Strack-Zimmermann + 10 Renew on RCV 2; 15 S&D dissenters on RCV 4 2 (low — Grand Coalition); 4 (S&D fissure on CRA)
Abstention abstention rate on contested RCVs RCV 5 (Iran-MEK) 22 % abstention — high signal 5 on RCV 5; 1-2 elsewhere
No-show % of MEPs absent (not voting / not authorised substitute) Top-5 average 8 % (515-pp turnout / 720 seats); rises to 14 % on Thursday RCV 5 2 (Tue/Wed); 4 (Thu)

1️⃣3️⃣ Anti-patterns — REJECT on Pass-2 Review

# Banned pattern Why it fails
1 RCV cited without procedure code (e.g. "the AI Act vote") Unindexed; reviewer cannot trace.
2 Per-MEP defection claim while EP roll-call publication delay >4 weeks Tradecraft violation.
3 Top-5 RCV table without abstain column Abstain is a signal, not noise.
4 Group behaviour score without RCV citation Score is judgment-only.
5 "Coalition held" verdict on a vote where one anchor group ≤80 % cohesion Definition mismatch.
6 Defection narrative without naming defectors (where public-record permits) Hides the political signal.
7 Margin column missing or computed from only For-Against (ignores Abstain) Margin = For - Against; absent column = unverifiable.

1️⃣4️⃣ Cross-References — Controlling Methodology


1️⃣5️⃣ Stage-C Completeness Signals

scripts/validate-analysis-completeness.js checks for this artifact:

Check Threshold Source
Line floor per article-type (breaking 150, week-in-review 150, month-in-review 180, motions 200) reference-quality-thresholds.json
Required H2 substrings "Top RCVs" / "Roll-Call" / "Behaviour" / "Anomalies" structural contract
Mermaid block ≥1 (xychart of For/Against/Abstain across top-5 preferred) visual contract
Tradecraft markers Admiralty per RCV; LOW flag for <4-week-old votes; abstain column populated osint-tradecraft-standards.md
Source diversity ≥3 EP MCP tools (must include get_voting_records or ep-get-voting-records fallback) per-artifact rule
Top-5 coverage 5 distinct RCVs cited with procedure codes template logic
Voting data freshness §7 "Voting Data Freshness" table present and source field populated D-02 fallback compliance

Document Control: /analysis/daily/{date}/{type}-run{N}/intelligence/voting-patterns.md · Template v1.2 · Depth floor: per article-type minimum defined in ../methodologies/reference-quality-thresholds.json (authoritative — e.g. breaking 150, week-in-review 150, month-in-review 180, motions 200).