10 KiB
Overton Window Analysis — Status
Last updated: 2026-06-07
Active plan: docs/plans/2026-06-06-001-overton-coherent-narrative-plan.md
Working branch: feat/right-wing-motion-analysis
Context
The Overton window analysis is a flagship output of Stemwijzer's Track 2: Analytical Depth and Transparency (see STRATEGY.md). Stemwijzer is a Dutch parliamentary analysis platform with three tracks:
- Data pipeline reliability — robust ingestion of all Tweede Kamer votes
- Analytical depth and transparency — interpretable political dimensions (this analysis)
- Agent-native architecture — self-documenting, agent-operable codebase
The Overton analysis demonstrates what the platform can do: SVD compass, 29K+ scored motions, 2D extremity scoring, and Procrustes-aligned drift detection — all in service of a real political science question.
Goal
A coherent, multi-surface story about whether the Dutch Overton window shifted — accessible as an interactive Quarto article, live in the Streamlit Explorer, and backed by reproducible analysis scripts. The narrative serves dual purpose: a political science finding AND a platform showcase that drives engagement with the Stemwijzer compass and explorer.
Three tiers:
- Narrative spine — Quarto article (the story, with "About Stemwijzer" section)
- Detailed appendices — Markdown reports in
reports/overton_window/(the evidence) - Live exploration — Streamlit Explorer Overton tab + existing Kompas/Trajectories tabs (the data)
Completed
Core Analysis (U1-U5 from plan 001)
- Right-wing motion classification (2,986 → 3,030 classified)
- 1D extremity scoring (LLM, 2,986 motions)
- Sentiment analysis (LLM, 2,986 motions)
- Category derivation (7+13 categories)
- Temporal aggregation (yearly trends, 2016-2026)
Overton Window Analysis (plans 002-003)
- Centrist support breakpoint (strict 4-party: D66/CDA/CU/NSC)
- Opposition-only filtering (coalition control)
- Domain decomposition (migration vs non-migration)
- SVD spatial drift (Procrustes-aligned PCA)
- Content extremity trends (material impact declined, style rose)
- "Acceptance without conversion" confirmed
- Findings report written
2D Extremity Scoring (plan 004)
- Project-local skill:
.opencode/skills/score-extremity/SKILL.md - 2D scoring (stijl-extremiteit + materiele impact, 1-5)
- Pearson r = 0.47 (right-wing), r = 0.43 (all-motion) — dimensions separable
- All 29,591 motions scored via subagent pipeline
- 2D temporal decomposition (material fell, style rose — divergence confirmed)
- Gravity-controlled analysis (M≥4 centrist support shifted +0.263)
Gap Analysis & Extensions (plans 005-006)
- Quarterly temporal trajectory (33 quarters, inflection at 2024-Q2)
- Causal timing (electoral jump, not coalition-driven)
- Left-wing response (18.3× asymmetry, Volt exception)
- Mechanism classification (consensus framing confirmed, κ=0.41 moderate)
- Party differentiation (JA21 drives moderation, PVV entered government)
- Voting margin analysis (ρ=0.812, far superior to pass rate)
- Predictive model (AUC-ROC=0.81, RF=0.84)
- Coalition coding fix (2024 split at July 1)
- All-motion 2D extremity (29,591 motions, stijl=1.36, mat=2.12)
- HTML report with gravity-controlled charts + example motions
Code Quality
- Shared helpers extracted to
analysis/right_wing/common.py - requests.Timeout bug fixed
- p-value walrus operator fixed
- 35 tests for common.py (TDD)
- DROP TABLE bug fixed in classify_motions.py
Knowledge Capture
- Overton methodology documented (7-step,
docs/solutions/best-practices/) - Domain decomposition methodology documented
- Extended analysis methodology documented
- Large-scale subagent scoring methodology documented
- Narrative architecture documented
In Progress
Plan 007: Coherent Narrative (current)
- U1: Clean up stale reports (remove findings_report.md, blog_post.html)
- U1: Fix hashline corruption in synthesis report
- U1: Add cross-reference headers to all reports
- U1: Switch HTML report to strict 4-party centrist definition
- U2: Install Quarto CLI
- U2: Write Quarto narrative spine (8 sections, interactive Plotly)
- U3: Add Overton context panel to Explorer Kompas tab
- U3: Add 2024 breakpoint annotation to Trajectories tab
- U3: Create new Overton tab (centrist support trend, right-wing motion browser)
- U3: Wire Overton tab into Explorer
- U4: Write
build_all_reports.pymaster script - U5: Write
reports/overton_window/README.mdreading guide - U5: Update project README.md
Deferred
Analysis Depth
- European comparison (AfD, Meloni, Le Pen, Sweden Democrats)
- Mechanism taxonomy revision (κ=0.41 → improve agreement)
- Forward-looking scenario analysis (permanent vs temporary shift)
- Anti-institutional pivot deep-dive (abolition → contestation)
- Re-populate category column in right_wing_motions (wiped by DROP TABLE)
Presentation
- Quarto blog post with interactive charts
- Table of contents / reading guide linking all 17 reports
- Single-script reproducible build with Quarto render
Infrastructure
- Agent-native architecture improvements (pipeline_run_stage, UI integration)
- CRUD completeness (delete_motion, mop up entity gaps)
Report Directory Map
reports/overton_window/
├── STATUS.md ← THIS FILE
├── README.md ← Reading guide (U5, pending)
├── overton_window.qmd ← Narrative spine (U2, pending)
├── _quarto.yml ← Quarto config (U2, pending)
│
├── overton_window_synthesis.md ★ Master synthesis (291 lines)
├── overton_report.html ★ Public HTML dashboard
│
├── breakpoint_analysis.md Appendix: Centrist support breakpoint
├── breakpoint_figure_1.png Fig: Centrist support over time
├── breakpoint_figure_2.png Fig: Extremity-stratified
├── breakpoint_figure_3.png Fig: Left-wing support
├── breakpoint_figure_4.png Fig: Gravity-controlled CS
│
├── extremity_2d_temporal.md Appendix: 2D extremity temporal
├── extremity_2d_temporal_figure.png Fig: 4-panel 2D temporal
│
├── temporal_trajectory.md Appendix: Quarterly trajectory
├── temporal_trajectory_figure.png Fig: 33-quarter trajectory
│
├── causal_timing.md Appendix: Causal attribution
├── causal_timing_figure.png Fig: Pre/post event timing
│
├── svd_stability_report.md Appendix: Procrustes SVD drift
├── svd_drift_chart.png Fig: 2D party compass
├── svd_trajectory_figure.png Fig: Party trajectories
│
├── mechanism_classification.md Appendix: Why motions gain support
├── mechanism_validation.md Appendix: κ=0.41 validation
│
├── party_differentiation.md Appendix: Per-party shifts
├── party_differentiation_figure.png Fig: JA21/FVD/PVV/SGP comparison
│
├── left_wing_response.md Appendix: Left-wing voting
├── left_wing_response_figure.png Fig: Left party support
│
├── voting_margin.md Appendix: Voting margin analysis
├── voting_margin_figure.png Fig: Margin distribution
│
├── predictive_model.md Appendix: ML prediction
├── predictive_model_figure.png Fig: Feature importance
│
├── success_correlation.md Appendix: Pass rate (ceiling)
│
├── 2d_extremity_correlation_report.md Appendix: Full 29,591 correlation
│
├── findings_report.md ✗ REMOVED (superseded)
├── blog_post.html ✗ REMOVED (replaced by Quarto)
Data Sources
| Table | Rows | Purpose |
|---|---|---|
right_wing_motions |
29,588 | Classified right-wing motions with centrist support metrics |
extremity_scores |
2,986 | Original 1D LLM scores (legacy) |
extremity_scores_2d |
3,089 | 2D scores for right-wing motions (active) |
extremity_scores_all |
29,591 | 2D scores for ALL motions (baseline) |
sentiment_scores |
2,986 | Dutch sentiment scores (legacy) |
motions |
29,570+ | Main motions table |
mp_votes |
— | Per-MP per-motion vote records |
party_axis_scores |
— | Procrustes-aligned PCA party positions |
overton_svd_center |
11 | Yearly SVD centrist/right-wing centers |
Key Numbers (canonical)
| Metric | Pre-2024 | Post-2024 | Δ |
|---|---|---|---|
| Centrist support (strict 4-party) | 0.251 | 0.507 | +0.256 |
| Opposition-only CS | 0.270 | 0.543 | +0.272 |
| Material impact (right-wing) | 2.79 | 2.45 | −0.34 |
| M≥4 share (% high-impact) | 23.7% | 11.3% | −12.4 pp |
| SVD cultural gap | 0.282 | 0.428 | +0.146 |
| Stylistic extremity | 1.718 | 1.815 | +0.097 |
| Migration CS | 0.153 | 0.369 | +0.216 |
| All-motion stijl | — | 1.36 | — |
| All-motion materieel | — | 2.12 | — |
| Stijl-materieel r (RW) | — | 0.47 | — |
| Stijl-materieel r (all) | — | 0.43 | — |
| Voting margin ρ | — | 0.812 | — |
| Mechanism κ | — | 0.41 | — |
| AUC-ROC (logistic) | — | 0.81 | — |
| Inflection quarter | — | 2024-Q2 | — |
| Peak centrist support | — | 0.648 (2024-Q4) | — |
| Latest (2026-Q1) | — | 0.334 | — |
Verdict
The Overton window widened: more right-wing positions became politically acceptable after 2024. Centrist support for right-wing motions surged (25%→51%) while staying flat for left-wing motions (49%→49%). The mechanism was right-wing moderation, not centrist conversion — and the effect may be temporary (2026-Q1 reversion to 33%).