You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
motief/docs/plans/2026-05-08-003-fix-overton-...

12 KiB

title type status date origin
Fix Overton analysis — SVD axis interpretation, pass rate, synthesis fix active 2026-05-08 docs/plans/2026-05-08-002-feat-overton-window-shift-plan.md

Fix Overton Window Analysis — Critical Corrections

Summary

The current reports have critical issues: (1) the findings report SVD section was never updated after the Procrustes rewrite — and the original sign-convention assumption was wrong (after flip correction, negative y = right-wing/nationalist), meaning centrists moved LEFT culturally, not right — the SVD shows divergence not convergence, which is actually stronger Overton evidence; (2) pass rate still pollutes tables and charts despite being a useless metric at 96%+ ceiling; (3) the synthesis doesn't name the key finding: "acceptance without conversion" — centrists vote more with right-wing despite becoming spatially MORE distant from them, the defining signature of an Overton window widening. Fix the reports, redraw Figure 1 to drop pass-rate panels, and produce a coherent narrative around this interpretation.


Requirements

  • R1. Rewrite SVD section with correct axis interpretation and sign convention: axis 1 (economic, positive=pro-market) shows centrist leftward drift (-0.22). Axis 2 (cultural, negative=right-wing/nationalist after flip correction) shows centrists moved left culturally (+0.08 toward kosmopolitisch) while right-wing moved further right (-0.07 toward nationalist) — net cultural divergence of +0.15. The centrist-voting-rise / SVD-divergence combination is "acceptance without conversion."
  • R2. Drop pass rate from all tables, chart panels, and narrative. Keep only centrist_support.
  • R3. Rewrite Figure 1: single panel with 4–5 lines (RW overall, opposition-only, migration, non-migration, + all-motions baseline). No pass-rate panel.
  • R4. Rewrite synthesis to name the central tension: centrist_support rises post-2024 but SVD axes show centrists moved LEFT economically and diverged from right culturally. This is not a contradiction — it's consistent with right-wing motions becoming more mainstream rather than centrists drifting right.
  • R5. Update next steps section to reflect completed work.
  • R6. Qualify "no extremity increase" with LLM bias caveats noted in the manual audit.

Scope Boundaries

  • In scope: Rewriting reports (markdown + chart regenerated from analysis script).
  • Out of scope: Re-running LLM scoring, new data collection, changes to classification pipeline.
  • Only analysis/right_wing/overton_breakpoint_analysis.py and the three report files in reports/overton_window/ are affected.

Context & Research

Relevant Code and Patterns

  • analysis/config.py — SVD_THEMES[1] = economic, SVD_THEMES[2] = cultural/nationalist
  • analysis/right_wing/overton_breakpoint_analysis.py — Figure 1 generation at ~line 500
  • reports/overton_window/svd_stability_report.md — already has Procrustes-aligned results, needs axis interpretation
  • reports/overton_window/findings_report.md — main synthesis, stale SVD section (still says "stability gate failed")

Key Axis Data (from svd_stability_report.md)

Year Centrist Ax1 (econ) Centrist Ax2 (cultural) Right Ax1 Right Ax2
2016 0.340 0.010 0.132 -0.272
2026 0.117 0.091 0.054 -0.337
Δ -0.223 (LEFT) +0.081 (RIGHT) -0.078 -0.065 (MORE nationalist)

Cultural axis distance (centrist−right): 2016: 0.282 → 2026: 0.428. INCREASED by +0.146.

Central Tension

Centrist support for right-wing motions surged (d=+0.85 opposition-only), yet SVD axes show centrists:

  • Moved LEFT economically (divergence from right)
  • Moved slightly right culturally, but right moved even further right (INCREASING cultural divergence)

Resolution: the Overton window widened → right-wing motions became more mainstream (closer to centrist positions on ax2), earning centrist support WITHOUT centrists meaningfully changing their overall position. The SVD measures overall voting-position similarity, not specific-motion support.


Key Technical Decisions

  • Keep Figure 2 as-is — centrist_support per bucket with IQR is correct and informative.
  • Figure 1: merge into single panel — 4–5 centrist_support lines + annotation, no pass rate. Pass rate adds no signal and clutters the visual.
  • SVD section: keep Procrustes results, fix interpretation only — the data is right, the framing was wrong.
  • Do not add p-values or confidence intervals — staying with descriptive stats as the plan commits to.

Implementation Units

U1. Fix Figure 1 — Drop Pass Rate, Merge Panels

Goal: Replace the 2-panel Figure 1 with a single chart showing centrist_support lines only.

Requirements: R1, R2, R3

Dependencies: None

Files:

  • Modify: analysis/right_wing/overton_breakpoint_analysis.py (Figure 1 generation)
  • Regenerate: reports/overton_window/breakpoint_figure_1.png

Approach:

  • Replace 2-panel layout (ax1 centrist_support, ax2 pass_rate) with a single panel.
  • Lines: RW overall (solid blue), opposition-only (dashed blue), migration (red), non-migration (green), all-motions baseline (gray dashed).
  • Drop all pass-rate computation from compute_yearly_aggregates() baseline section (lines ~160–170).
  • Vertical line at 2024, Cohen's d annotation box.

Patterns to follow:

  • Existing create_figure_1() at ~line 500 in the breakpoint script

Test scenarios:

  • Figure renders without error.
  • No pass-rate data in chart data paths.
  • All 5 lines are distinguishable.

Verification:

  • breakpoint_figure_1.png has a single panel with 5 lines and no pass-rate axis.

U2. Rewrite breakpoint_analysis.md — Drop Pass Rate from Tables

Goal: Remove pass-rate columns from all tables in the breakpoint report.

Requirements: R2

Dependencies: U1

Files:

  • Modify: reports/overton_window/breakpoint_analysis.md
  • Modify: analysis/right_wing/overton_breakpoint_analysis.py (report generation section)
  • Regenerate: reports/overton_window/breakpoint_analysis.md

Approach:

  • Section 1 table: remove Pass Rate and Right Support columns. Keep N, Centrist Support, Extremity, Left Opp.
  • Section 2 tables: remove Pass Rate column.
  • Section 4 table: remove PR columns.
  • Update Section 5 header text to reference "centrist support" not "pass rate".

Verification:

  • No "pass rate" or "PR" appears in breakpoint analysis tables.

U3. Rewrite Findings Report — SVD + Synthesis

Goal: Update the findings report with correct SVD interpretation (ax2 sign convention), name the "acceptance without conversion" finding, drop pass-rate mentions, update next steps.

Requirements: R1, R4, R5, R6

Dependencies: U1, U2

Files:

  • Modify: reports/overton_window/findings_report.md

Approach:

  1. SVD section (Section 4): Replace "Stability gate: FAILED" with Procrustes results. Add a note explaining the sign convention: after flip correction, negative y = right-wing/nationalist (PVV at -0.56, FVD at -0.36), positive y = left-wing/kosmopolitisch (Volt at +0.27, GL-PvdA at +0.21). Present the data:

    Metric 2016 2026 Δ Direction
    Centrist Ax1 (econ) +0.340 +0.117 -0.223 Left (more welfare)
    Centrist Ax2 (cultural) +0.010 +0.091 +0.081 Left (more kosmopolitisch)
    Right Ax2 (cultural) -0.272 -0.337 -0.065 Right (more nationalist)

    Key finding: Centrists moved LEFT on BOTH axes (more welfare-economics, more kosmopolitisch-culture) while right-wing moved further RIGHT on the cultural axis. Net cultural distance grew from 0.282 to 0.428 (+0.146).

  2. SVD interpretation (the core insight): "Acceptance without conversion." Centrists vote more with right-wing motions (d=+0.85) despite becoming spatially MORE distant from right-wing parties on the cultural axis. This is the defining signature of an Overton window widening: the range of acceptable policy expanded without centrist parties themselves converting to right-wing positions. Right-wing motions shifted toward topics/proposals centrists find harder to oppose, or the framing became more palatable, while the underlying party-ideology divide held or widened.

  3. Section 1: Centrist Support: Cut the "Pass rate is an insensitive measure" paragraph. Replace with one-sentence note.

  4. Section 3: Content Extremity: Add qualifier: "LLM audit shows 75% agreement with systematic overrating of anti-institutional and migration-adjacent content. A flat trend may partially reflect these biases rather than genuine content stability. See deferred two-dimensional rescoring."

  5. Section 5 (Synthesis): Restructure around three tiers:

    • Strong (converging): Centrist voting support surged (d=+0.85 opposition-only). Migration is the primary domain (+0.233 vs +0.076 Δ), but non-migration starts at a higher baseline (0.53 vs 0.30 pre-2024).
    • Tension (not contradictory, explanatory): SVD shows centrists moved LEFT on both axes post-2024 while cultural polarization grew. This is "acceptance without conversion" — the center supports right-wing motions more without becoming right-wing. The Overton window widened, party positions didn't shift.
    • Weak (noisy): Content extremity trend is flat (d=-0.09) but relies on imperfect LLM scores (75% audit agreement, systematic overrating biases). Cannot confidently claim content didn't radicalize.
    • Remove SVD row from "Inconclusive" — it's now "Explanatory: acceptance without conversion."
  6. Section 8 (Next Steps): Remove stale "Procrustes-aligned SVD" suggestion (already done). Keep two-dimensional rescoring and temporal decomposition. Add "mechanism analysis: what specific types of right-wing motions gained centrist support?"

Test scenarios:

  • SVD section references axis 1 = economic, axis 2 = cultural, with correct sign convention.
  • "Acceptance without conversion" concept is clearly explained.
  • All pass-rate mentions removed.
  • Next steps don't suggest work that's already complete.

Verification:

  • Report is internally consistent.
  • SVD narrative no longer claims (incorrectly) that centrists moved right on ax2.
  • The synthesis presents acceptance-without-conversion as the unifying interpretation.

U4. Add Axis Labels to SVD Stability Report

Goal: Add axis interpretation context to the Procrustes SVD tables.

Requirements: R1

Dependencies: None

Files:

  • Modify: reports/overton_window/svd_stability_report.md

Approach:

  • Add a header row labeling axis-1 as "economic (pos=pro-market)" and axis-2 as "cultural (pos=nationalist)".
  • Add a paragraph explaining what movement means on each axis.
  • Add a net-drift-per-axis summary: ax1 Δ = -0.223 (centrist economic-left), ax2 Δ = +0.081 (centrist cultural-right).
  • Add cultural distance widening note.

Verification:

  • Reader understands which axis is which without consulting config.py.

System-Wide Impact

  • No code changes beyond breakpoint script — chart regeneration only.
  • No database changes.
  • Reports are markdown — no pipeline dependency.

Risks & Dependencies

Risk Mitigation
Figure 1 rework breaks chart layout Use existing create_figure_1() as template, test before committing
Axis interpretation oversimplifies SVD_THEMES Cite source (analysis/config.py SVD_THEMES[1] and SVD_THEMES[2]) in report footnotes
Tension narrative feels like forced reconciliation Frame explicitly as "this is what the data shows — we don't resolve it"