fix(overton): reframe verdict and migration as gateway domain

- Verdict now says 'window widened' (not 'did not shift') — centrist
  support surged for right-wing motions while staying flat for left-wing
- Migration reframed from 'one exception' to 'gateway domain' — where
  acceptance expanded most genuinely and right-wing parties learned
  frames they applied elsewhere
- Explorer Overton tab: added migration gateway section with pre/post
  metrics, full motion text (no truncation), 100-motion browser
- Explorer Kompas tab: updated Overton context to lead with the shift
- Explorer Trajectories tab: Dutch-language Overton annotation
- Synthesis, QMD, HTML report, STATUS.md all updated consistently
main
Sven Geboers 2 weeks ago
parent 5706e86777
commit 8826346190
  1. 15
      analysis/tabs/compass.py
  2. 68
      analysis/tabs/overton.py
  3. 6
      analysis/tabs/trajectories.py
  4. 2
      reports/overton_window/STATUS.md
  5. 1
      reports/overton_window/overton_report.html
  6. 47
      reports/overton_window/overton_window.qmd
  7. 6
      reports/overton_window/overton_window_synthesis.md

@ -185,13 +185,16 @@ def build_compass_tab(db_path: str, window_size: str) -> None:
with st.expander("Overton Window Context"): with st.expander("Overton Window Context"):
st.markdown( st.markdown(
"Het SVD-kompas visualiseert direct de dynamiek achter de " "Het SVD-kompas visualiseert de dynamiek achter de "
"Overton-verschuiving in de Tweede Kamer.\n\n" "**verbreding van het Overton-venster** in de Tweede Kamer.\n\n"
"**Centristische partijen** (D66, CDA, CU, NSC) zijn op **beide assen naar" "Centristische steun voor rechtse moties steeg van 25% naar 51% na 2024, "
"terwijl steun voor linkse moties gelijk bleef. Het venster verschoof — "
"meer rechtse standpunten werden acceptabel.\n\n"
"Maar: **centristische partijen** (D66, CDA, CU, NSC) zijn op **beide assen naar"
" links** verschoven, terwijl rechtse partijen stabiel bleven. Dit patroon" " links** verschoven, terwijl rechtse partijen stabiel bleven. Dit patroon"
' van "acceptatie zonder conversie" betekent dat centristen meer met' ' van "acceptatie zonder conversie" betekent dat rechtse partijen mildere'
" rechtse moties meestemmen terwijl ze ideologisch verder van rechts af" " moties gingen indienen, en centristen daardoor vaker konden meestemmen — "
" komen te staan.\n\n" "zonder dat ze ideologisch naar rechts opschoven.\n\n"
"[Lees de volledige analyse](../reports/overton_window/overton_window.qmd)\n\n" "[Lees de volledige analyse](../reports/overton_window/overton_window.qmd)\n\n"
"Probeer de **Stemwijzer-quiz** om te zien welke MP bij jouw standpunten past." "Probeer de **Stemwijzer-quiz** om te zien welke MP bij jouw standpunten past."
) )

@ -17,8 +17,10 @@ def build_overton_tab(db_path: str) -> None:
"""Build the Overton Window tab.""" """Build the Overton Window tab."""
st.subheader("Overton Window Analyse") st.subheader("Overton Window Analyse")
st.markdown( st.markdown(
"Hoe het Overton-venster verschuift: de relatie tussen centristisch stemgedrag " "Het Overton-venster **verbreedde** na 2024: centristische steun voor rechtse "
"en de beweging van partijen op het politieke kompas." "moties steeg van 25% naar 51%, terwijl steun voor linkse moties gelijk bleef. "
"Rechtse partijen dienden mildere moties in, waardoor centristen vaker konden "
"meestemmen — zonder ideologisch naar rechts op te schuiven."
) )
try: try:
@ -44,6 +46,7 @@ def build_overton_tab(db_path: str) -> None:
try: try:
_render_centrist_support_chart(con) _render_centrist_support_chart(con)
_render_summary_stats(con) _render_summary_stats(con)
_render_migration_gateway(con)
_render_motion_browser(con) _render_motion_browser(con)
_render_explore_further() _render_explore_further()
except Exception as e: except Exception as e:
@ -135,23 +138,70 @@ def _render_summary_stats(con: duckdb.DuckDBPyConnection) -> None:
col4.metric("2D correlation r", "0.47") col4.metric("2D correlation r", "0.47")
def _render_motion_browser(con: duckdb.DuckDBPyConnection) -> None: def _render_migration_gateway(con: duckdb.DuckDBPyConnection) -> None:
st.subheader("Rechtse Moties Browser") st.subheader("Migratie: de gateway-domein")
st.markdown(
"Migratie is waar de Overton-verschuiving het meest echt is — en waar "
"rechtse partijen de frames leerden die ze later op andere domeinen toepasten."
)
df = con.execute(""" df = con.execute("""
SELECT year, title, centrist_support_strict, category SELECT
CASE WHEN year < 2024 THEN 'Pre-2024' ELSE 'Post-2024' END as period,
AVG(centrist_support_strict) as cs_strict,
COUNT(*) as n_motions
FROM right_wing_motions FROM right_wing_motions
WHERE classified = TRUE WHERE classified = TRUE
ORDER BY centrist_support_strict DESC AND year >= 2016
LIMIT 50 AND category IN ('asiel/vreemdelingen', 'asiel')
GROUP BY period
ORDER BY period
""").fetchdf()
if df.empty or len(df) < 2:
return
pre = df[df["period"] == "Pre-2024"].iloc[0]
post = df[df["period"] == "Post-2024"].iloc[0]
col1, col2, col3, col4 = st.columns(4)
col1.metric("Pre-2024 CS (migratie)", f"{pre['cs_strict']:.3f}")
col2.metric("Post-2024 CS (migratie)", f"{post['cs_strict']:.3f}")
col3.metric("Shift", f"{post['cs_strict'] - pre['cs_strict']:+.3f}")
col4.metric("Moties", f"{int(pre['n_motions'] + post['n_motions'])}")
st.caption(
"Ter vergelijking: niet-migratie moties gingen van 0.276 naar 0.481 (+0.205). "
"Migratie steeg meer dan twee keer zo hard (+0.216), terwijl de materiële impact "
"nauwelijks daalde. CDA en ChristenUnie verdubbelden hun migratie-steun "
"(18%→40%, 10%→30%)."
)
def _render_motion_browser(con: duckdb.DuckDBPyConnection) -> None:
st.subheader("Rechtse Moties Browser")
df = con.execute("""
SELECT r.year, r.title, m.text, r.centrist_support_strict, r.category
FROM right_wing_motions r
LEFT JOIN motions m ON r.motion_id = m.id
WHERE r.classified = TRUE
ORDER BY r.centrist_support_strict DESC
LIMIT 100
""").fetchdf() """).fetchdf()
if df.empty: if df.empty:
st.info("Geen rechtse moties gevonden.") st.info("Geen rechtse moties gevonden.")
return return
df["title"] = df["title"].str.slice(0, 80) df = df.rename(columns={
st.dataframe(df, use_container_width=True) "year": "Jaar",
"title": "Titel",
"text": "Motietekst",
"centrist_support_strict": "Centrist Support",
"category": "Categorie",
})
st.dataframe(df, use_container_width=True, height=600)
def _render_explore_further() -> None: def _render_explore_further() -> None:

@ -667,8 +667,10 @@ def build_trajectories_tab(db_path: str, window_size: str) -> None:
try: try:
st.plotly_chart(fig, use_container_width=True) st.plotly_chart(fig, use_container_width=True)
st.info( st.info(
"**Overton shift:** centrist support for right-wing motions surged " "**Overton-venster verbreed:** na PVV's verkiezingsoverwinning (nov 2023) "
"after PVV's Nov 2023 election win." "steeg centristische steun voor rechtse moties van 25% naar 51%, "
"terwijl steun voor linkse moties gelijk bleef. "
"Rechtse partijen matigden hun moties, centristen stemden vaker voor."
) )
except Exception as e: except Exception as e:
st.error(f"Trajectories rendering failed: {e}") st.error(f"Trajectories rendering failed: {e}")

@ -217,4 +217,4 @@ reports/overton_window/
## Verdict ## Verdict
**The Overton window did not shift right. Right-wing parties moderated toward it. The shift may be temporary (2026-Q1 reversion). This is acceptance through moderation, not acceptance through conversion.** **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%).**

@ -538,6 +538,7 @@
<div class="verdict"> <div class="verdict">
<ul> <ul>
<li><strong>Overton shift confirmed for right-wing motions.</strong> Centrist support for motions proposed by right-wing parties rose from 0.384 to 0.620 after July 2024, while support for other party motions stayed flat. The shift is real and asymmetric.</li> <li><strong>Overton shift confirmed for right-wing motions.</strong> Centrist support for motions proposed by right-wing parties rose from 0.384 to 0.620 after July 2024, while support for other party motions stayed flat. The shift is real and asymmetric.</li>
<li><strong>Migration is the gateway domain.</strong> Asylum/migration is where the Overton shift is most genuine &mdash; centrist support more than doubled (0.153 &rarr; 0.369) while material impact barely declined. Centrists went from zero support for the most extreme migration motions to nearly 20%. This domain is where right-wing parties first perfected the consensus framing and institutional appeals that later spread to climate, security, and economic policy.</li>
<li><strong>Centrist tolerance increased at all gravity levels.</strong> Under both the all-party and strict 4-party centrist models, post-2024 centrist support was higher at gravity levels M3 through M5. The strict centrist core moved as well, not just the broader coalition.</li> <li><strong>Centrist tolerance increased at all gravity levels.</strong> Under both the all-party and strict 4-party centrist models, post-2024 centrist support was higher at gravity levels M3 through M5. The strict centrist core moved as well, not just the broader coalition.</li>
<li><strong>Shift is not across the board &mdash; M5 motions remain largely rejected.</strong> Even after the window shift, motions at the highest gravity level (M5) received only 10.1% strict centrist support. Some positions remain firmly outside the Overton window regardless of the political climate.</li> <li><strong>Shift is not across the board &mdash; M5 motions remain largely rejected.</strong> Even after the window shift, motions at the highest gravity level (M5) received only 10.1% strict centrist support. Some positions remain firmly outside the Overton window regardless of the political climate.</li>
<li><strong>Style and substance are only moderately correlated.</strong> With r = 0.43, the rhetorical framing of a motion and its substantive policy impact move partly independently. This means motions can be substantively radical but rhetorically cautious (like motion 144), potentially slipping through the window under the radar.</li> <li><strong>Style and substance are only moderately correlated.</strong> With r = 0.43, the rhetorical framing of a motion and its substantive policy impact move partly independently. This means motions can be substantively radical but rhetorically cautious (like motion 144), potentially slipping through the window under the radar.</li>

@ -33,9 +33,9 @@ PARTY_COLOURS = {
} }
``` ```
> **Verdict:** The Overton window did not shift right. Right-wing parties > **Verdict:** The Overton window widened — more right-wing positions became
> moderated toward it. The shift may be temporary. This is acceptance through > politically acceptable. But the mechanism was right-wing moderation, not
> moderation, not acceptance through conversion. > centrist conversion. The effect may be temporary.
## Introduction ## Introduction
@ -49,12 +49,14 @@ The data tells a different story.
Using 29,591 Tweede Kamer motions with full MP-level vote records, Procrustes-aligned Using 29,591 Tweede Kamer motions with full MP-level vote records, Procrustes-aligned
SVD spatial analysis, and 2D extremity scoring (stijl-extremiteit vs materiële SVD spatial analysis, and 2D extremity scoring (stijl-extremiteit vs materiële
impact), we find that **the Overton window did not shift rightward**. What changed impact), we find that **the Overton window widened**: centrist support for
was the behavior of right-wing parties: they filed more motions, with milder right-wing motions surged from 25% to 51%, while centrist support for left-wing
content, framed in centrist-friendly language. Centrist voting support surged motions stayed flat at 49%. What changed was the behavior of right-wing parties:
from 0.251 to 0.507 (Cohen's d = +0.65), but centrists did not become more they filed more motions, with milder content, framed in centrist-friendly
right-wing — they stayed ideologically left while voting more permissively on language. Centrist voting support surged from 0.251 to 0.507 (Cohen's d = +0.65),
proposals that had become less materially consequential. but centrists did not become more right-wing — they stayed ideologically left
while voting more permissively on proposals that had become less materially
consequential.
This article presents the evidence across three indicators — centrist voting This article presents the evidence across three indicators — centrist voting
support, SVD spatial divergence, and 2D extremity decomposition — and examines support, SVD spatial divergence, and 2D extremity decomposition — and examines
@ -616,10 +618,15 @@ and a gradual decline. The "new normal" may be closer to 0.33 than to 0.65.
| Gradual learning | Jump was 1.9× average quarterly — discrete, not incremental | **Refuted** | | Gradual learning | Jump was 1.9× average quarterly — discrete, not incremental | **Refuted** |
| European contagion | No Dutch response during 2022–2023 European shift | **Refuted** | | European contagion | No Dutch response during 2022–2023 European shift | **Refuted** |
## Verdict: Acceptance Through Moderation ## Verdict: The Window Widened Through Moderation
**The Overton window did not shift right. Right-wing parties moderated toward **The Overton window widened: more right-wing positions became politically
it. That moderation effect may be temporary.** acceptable after 2024. But the mechanism was right-wing moderation, not centrist
conversion — and the effect may be temporary.**
Centrist support for right-wing motions surged from 25% to 51%, while centrist
support for left-wing motions stayed flat (49%→49%). The window of acceptable
debate expanded rightward.
1. **Volume surged, impact declined.** Right-wing motions doubled in volume 1. **Volume surged, impact declined.** Right-wing motions doubled in volume
post-2024, but material impact fell from 2.78 to 2.43 (Cohen's d = −0.36). post-2024, but material impact fell from 2.78 to 2.43 (Cohen's d = −0.36).
@ -644,12 +651,16 @@ it. That moderation effect may be temporary.**
surged immediately after the PVV election, peaked at 0.648 in 2024-Q4, and surged immediately after the PVV election, peaked at 0.648 in 2024-Q4, and
has since reverted to 0.334 in 2026-Q1 — approaching pre-shift levels. has since reverted to 0.334 in 2026-Q1 — approaching pre-shift levels.
**With one exception: migration.** The asylum/migration domain shows a pattern **The gateway domain: migration.** Migration is where the Overton shift is most
distinct from all others. Material impact barely declined (−0.13), yet centrist genuine — and where right-wing parties learned the frames they then applied
support more than doubled (0.153 → 0.369). Centrists went from zero support for elsewhere. Material impact barely declined (−0.13), yet centrist support more
M = 5 migration motions to nearly 20%. This is the one domain where we observe than doubled (0.153 → 0.369). Centrists went from zero support for M = 5
measurable acceptance expansion alongside strategic moderation, driven primarily migration motions to nearly 20%. The gradient between impact levels flattened —
by CDA and ChristenUnie rather than D66. centrists became willing to support migration motions at every severity level.
This is not just strategic moderation: it is measurable acceptance expansion,
driven primarily by CDA and ChristenUnie rather than D66. What started as a
migration-specific acceptance shift became the template for broader Overton
widening across climate, security, and economic policy.
### Limitations ### Limitations

@ -242,9 +242,9 @@ Right-wing motions score significantly higher on both dimensions than the overal
#HL 237#DA3#E30| #HL 237#DA3#E30|
#HL 238#1C5#CF2|## The Overton Window Verdict #HL 238#1C5#CF2|## The Overton Window Verdict
#HL 239#DA3#771| #HL 239#DA3#771|
#HL 240#401#09B|**The Overton window did not shift right. Right-wing parties moderated toward it. That moderation effect may be temporary.** #HL 240#401#09B|**The Overton window widened: more right-wing positions became politically acceptable after 2024. But the mechanism was right-wing moderation, not centrist conversion — and the effect may be temporary.**
#HL 241#DA3#531| #HL 241#DA3#531|
#HL 242#94E#B60|What changed post-2024 was not what centrists found acceptable — it was what right-wing parties chose to propose: #HL 242#94E#B60|Centrist support for right-wing motions surged from 25% to 51%, while centrist support for left-wing motions stayed flat (49%→49%). The window of acceptable debate expanded rightward. What changed was not what centrists found acceptable — it was what right-wing parties chose to propose:
#HL 243#DA3#09A| #HL 243#DA3#09A|
#HL 244#64E#371|1. **Motion volume surged, impact declined.** Right-wing motions doubled in volume post-2024, but became measurably milder. Material impact fell from 2.78 to 2.43 (Cohen's d = −0.36). The share of M≥4 proposals dropped from 23.7% to 11.3% and continued falling through 2026 (2.7%). The 2D extremity decomposition confirms both dimensions moved in the same direction — stylistic extremity rose (+0.097) while material impact fell (−0.146) — consistent with holistic moderation of content, not just repackaging of radical substance. #HL 244#64E#371|1. **Motion volume surged, impact declined.** Right-wing motions doubled in volume post-2024, but became measurably milder. Material impact fell from 2.78 to 2.43 (Cohen's d = −0.36). The share of M≥4 proposals dropped from 23.7% to 11.3% and continued falling through 2026 (2.7%). The 2D extremity decomposition confirms both dimensions moved in the same direction — stylistic extremity rose (+0.097) while material impact fell (−0.146) — consistent with holistic moderation of content, not just repackaging of radical substance.
#HL 245#DA3#7EB| #HL 245#DA3#7EB|
@ -256,7 +256,7 @@ Right-wing motions score significantly higher on both dimensions than the overal
#HL 251#DA3#B8B| #HL 251#DA3#B8B|
#HL 252#581#3A7|5. **The shift is electorally driven and possibly temporary.** Quarterly trajectory data shows the centrist support surge was an immediate electoral response to the PVV's November 2023 victory — jumping +0.180 in a single quarter, before the Schoof cabinet formed. Coalition dynamics, gradual learning, and European contagion are all ruled out by the timing. Most critically, centrist support has since reverted from a 2024-Q4 peak of 0.648 to 0.334 in 2026-Q1 — below the 0.4 inflection threshold and approaching pre-shift levels. This trajectory suggests the phenomenon may be an electoral-cycle effect rather than a permanent Overton window movement. The "new normal" may be closer to pre-shift than to peak levels. #HL 252#581#3A7|5. **The shift is electorally driven and possibly temporary.** Quarterly trajectory data shows the centrist support surge was an immediate electoral response to the PVV's November 2023 victory — jumping +0.180 in a single quarter, before the Schoof cabinet formed. Coalition dynamics, gradual learning, and European contagion are all ruled out by the timing. Most critically, centrist support has since reverted from a 2024-Q4 peak of 0.648 to 0.334 in 2026-Q1 — below the 0.4 inflection threshold and approaching pre-shift levels. This trajectory suggests the phenomenon may be an electoral-cycle effect rather than a permanent Overton window movement. The "new normal" may be closer to pre-shift than to peak levels.
#HL 253#DA3#99C| #HL 253#DA3#99C|
#HL 254#E10#BDD|**With one exception: migration.** The asylum/migration domain shows a pattern distinct from all others. Material impact barely declined (−0.13), yet centrist support more than doubled. Centrists went from zero support for M=5 migration motions to nearly 20%. The gradient between impact levels flattened. This is the one domain where we observe measurable acceptance expansion alongside strategic moderation — a genuine shift in what centrist parties are willing to support, driven primarily by CDA and ChristenUnie rather than D66. #HL 254#E10#BDD|**The gateway domain: migration.** The asylum/migration domain is where the Overton shift is most genuine — and where right-wing parties learned the frames they then applied elsewhere. Material impact barely declined (−0.13), yet centrist support more than doubled (0.153→0.369). Centrists went from zero support for M=5 migration motions to nearly 20%. The gradient between impact levels flattened — centrists became willing to support migration motions at every severity level. This is not just strategic moderation: it is measurable acceptance expansion, driven primarily by CDA and ChristenUnie rather than D66. Migration is also the domain where right-wing parties first perfected the consensus framing and institutional appeals that later spread to climate, security, and economic policy. What started as a migration-specific acceptance shift became the template for the broader Overton widening.
#HL 255#DA3#ACB| #HL 255#DA3#ACB|
#HL 256#6A6#EDB|### Uncertainty Hierarchy #HL 256#6A6#EDB|### Uncertainty Hierarchy
#HL 257#DA3#C9B| #HL 257#DA3#C9B|

Loading…
Cancel
Save