On AI in this methodologyThe classifier is AI-based, run via API with a prompt set by me and reproduced in full below. Validation against blind human review was conducted before publication; gate results are documented in this page. The methodology, taxonomy, counting rules, and edge case rulings were set by me. Disagreements with any specific classification can be raised against the published rule rather than the model output. Full standards: /standards/.
Section 01Platform scope — X only
This analysis covers X (formerly Twitter) posts exclusively. It does not include Bluesky, Truth Social, YouTube, podcast transcripts, press releases, floor speeches, or any other channel.
Why X, and not the partisan platforms
Bluesky and Truth Social are both partisan echo chambers at the congressional level. In the 90-day analysis window, Democrats posted approximately 24,500 times on Bluesky; Republicans posted approximately 485 times — a 50:1 ratio. Truth Social runs the inverse pattern: Republicans dominate, Democratic congressional presence is negligible. Each platform's audience self-selects toward agreement; cross-party exposure on either is minimal; rhetorical pushback rarely happens.
The concern driving this analysis is the argument that political rhetoric creates preconditions for political violence in the broader public sphere. If that argument has weight, the rhetoric that matters most is the rhetoric that crosses the partisan divide — the rhetoric that gets screenshotted, quote-reposted by hostile accounts, surfaces in mainstream news cycles, and reaches voters who don't already agree. X is the platform where political rhetoric travels across that divide at scale. Bluesky and Truth Social are mostly preaching to the converted, where the same rhetoric stays inside its bubble and doesn't reach cross-party audiences.
Including either Bluesky or Truth Social in the corpus would also create a structural denominator imbalance — one party would have substantially more posts in the denominator on each platform, not because of differences in rhetorical behavior but because of differences in platform adoption. The 50:1 D-skew on Bluesky and the corresponding R-skew on Truth Social would each inflate one party's normalized rate without measuring anything about the cross-party rhetoric the analysis is designed to capture.
Restricting to X produces a corpus where Republicans actually post more (63,822 original posts vs. Democrats' 58,011), making per-post normalization across parties defensible. Both parties are present on X at scale, and it remains the primary venue for real-time public political communication from elected officials reaching audiences across the partisan divide.
(A secondary consideration: Truth Social's API and bulk historical data access are significantly more restrictive than X's, which would impose meaningful additional cost on an independent analysis. This is a real factor but it is the secondary one. Even with unlimited access, including Truth Social would create the same denominator-imbalance and echo-chamber problems described above.)
Bluesky and Truth Social data are not discarded — both are held for a planned separate standing tracker on within-platform rhetoric, which will address each platform's echo-chamber dynamics on their own terms rather than as part of cross-platform aggregate metrics.
"This analysis covers original X posts (no reposts) from all current voting members of Congress — 535 members — during the 90-day period from January 26 to April 26, 2026."
Section 02Scope rationale — from "violent rhetoric" to "eliminationist and delegitimizing rhetoric"
This analysis was originally scoped as "violent rhetoric." On April 26, 2026 — in the context of active public discourse following the WHCD — the scope was expanded to "eliminationist and delegitimizing rhetoric" for the following reason.
Public debate this week centers on the argument that totalitarian-regime political labels applied to political opponents — "fascist," "Nazi," "communist," "Marxist" — create preconditions for political violence even when no explicit call to violence is made. These labels delegitimize political opponents by identifying them not as wrong, but as categorically outside the bounds of legitimate governance.
A taxonomy that included Category 5 (calls to violence, threats) but excluded the delegitimizing label that often precedes them would produce an asymmetric analysis. It would capture "hang them" but not "they are fascists who must be removed" — treating the escalation threshold differently depending on how far a post traveled along the rhetoric-to-violence spectrum.
The expanded scope makes the analysis responsive to its news hook while remaining empirically grounded. The piece title reflects the two-part scope: eliminationist (calls for removal/eradication of a group) and delegitimizing (labels that mark political opponents as outside the legitimate political order).
Section 03Universe of members
- Total current members: 541 (active and appointed)
- Scope for this analysis: 535 voting members (435 House + 100 Senate)
- Members with zero X posts in window: 6
- Members excluded by 100-post threshold: reported separately in the small-sample table
Section 04Minimum post threshold
Members with fewer than 100 original X posts in the 90-day window are excluded from rate-based headline rankings. Members with 50–99 posts are reported separately with rates and CIs displayed but labeled as smaller-sample with caution disclaimers.
Rationale
Rate-based metrics (flags per 100 posts) are unstable for small samples. A member with 53 posts and 1 flag has a rate of 1.89/100 with a 95% CI of [0.34, 9.84] — the upper bound is more than five times the lower. Including such members in a headline rate-based ranking produces unstable, editorially misleading positions.
Asymmetric impact — disclosed
The 100-post threshold removes more Republicans than Democrats. R P25 = 86 posts; D P25 = 142 posts. A larger share of Republican members fall near the exclusion zone. The rule is applied symmetrically — the criterion is identical for all members regardless of party. The asymmetric impact is a structural feature of the X volume distribution, not an analytical choice.
Section 05Why we include "fascist" and "commie" as labels
The most important editorial decision in this analysis is the symmetric treatment of totalitarian-regime labels applied to political opponents — Category 6 of the taxonomy.
The symmetric logic
When a Republican member of Congress posts "the COMMIE-crats in Washington want to destroy America," that is not a policy critique. It is a political identity label that marks an entire party as constitutionally illegitimate — as belonging to an ideology that is categorically incompatible with American governance. The post does not argue that Democrats are wrong; it argues that they are something other than Americans.
The same logic applies in the opposite direction. When a Democratic member of Congress posts "hold every fascist in this Administration accountable," the word "fascist" is doing the same work: it is not identifying a policy failure, it is identifying an opponent as a member of a totalitarian movement that must be opposed, not merely defeated.
Both directions appear in the data at scale
- D members applying fascist/Nazi as identity labels to R members or the Administration: ~50 posts in window
- R members applying commie/Marxist as identity labels to D members or D officials: ~156 posts in window
The directional imbalance in raw counts is a finding, not a flaw in the analysis. We do not pre-adjust for it. We do normalize by post volume (per 100 posts) to account for D/R corpus size differences.
This decision was made before we ran the counts. The methodology was set symmetrically. Whatever the data shows, publishes.
What this is NOT
- A false-equivalence claim that Republican and Democratic rhetoric are identical
- A claim that "fascist" and "commie" are equally accurate descriptions of the current parties
- A claim that both parties engage in eliminationist rhetoric at equal rates
The analysis measures the occurrence of a specific rhetorical behavior. It makes no claim about whether any label is accurate. Editorial interpretation of the directional findings is for the piece's conclusion, not the methodology.
Section 06Consolidated taxonomy
For this analysis, eliminationist or delegitimizing rhetoric is language that does one or more of the following in a political context directed at political opponents, groups, or institutions:
Calls to violence
Direct or near-direct calls for physical violence against named or identified individuals, groups, or institutions. Includes coded calls where violence is the reasonably implied meaning.
Dehumanizing language
Language that strips human dignity from a group of people by applying animal, pest, disease, or annihilation metaphors to human beings as a class. The target must be human beings (not policies, institutions, or leaders as individuals).
Eliminationist framing
Language asserting that a group of people has no legitimate place in the country, political system, or society, and must be eradicated, expelled, or purged as an end goal. Distinct from restrictionist policy positions.
Explicit threats against named individuals
Direct or implied threats of physical, legal, or social harm directed at a specific, named person, beyond normal accountability language.
"Enemy of the people" designation
Labeling domestic political opponents or civic institutions as existential enemies requiring elimination, not merely defeat. The distinguishing feature is framing opponents as illegitimate participants in society who must be removed from it.
Totalitarian-regime political labels as identity designations
Language that applies the identity label of a totalitarian movement — fascist, Nazi, communist, Marxist, commie — to a class of political opponents or named elected officials, as an assertion of political identity rather than a historical reference or ideological description.
Classification rules — used verbatim in classifier prompt
IN — applied as an identity label to a class of political opposition or named elected official:
Default: when in doubt between identity-label and policy-descriptor, classify OUT.
A Democratic member calling Republican colleagues or officials "fascists" is the same classification action as a Republican member calling Democratic colleagues or officials "communists." The classifier prompt is party-blind. Category 6 results are reported directionally (D-applied-to-R / R-applied-to-D) as a secondary breakdown, but the primary rate metric is calculated identically for both.
Out — all categories: explicitly excluded
The following are never eliminationist or delegitimizing rhetoric under any category of this taxonomy:
- Standard political combat metaphors: "fight," "battle," "war on [issue]," "defeat [opponent]"
- Accountability language with documented factual basis: "criminal conduct," "illegal [action]," "impeachable offense," "should be prosecuted"
- Historical references to fascism/Nazism/communism in historical or educational context — including Holocaust Remembrance posts, WWII discussions, and historical regime comparisons
- Counter-speech: posts criticizing violent or delegitimizing rhetoric by others
- Polling citations and factual public opinion claims
- Standard geopolitical analogies: "Cold War," "nuclear option," "scorched earth policy"
- Non-targeted hyperbole without a specific group: "this is killing us," "destroying America"
- Normal democratic accountability: calls for resignation, investigation, impeachment, or electoral defeat
- Policy positions framed as stakes: "we can't let [policy] destroy our country"
- Derogatory labels without delegitimizing structure: "RINO," "radical," "extremist" (do not assert totalitarian identity)
Edge case rulings (resolved 2026-04-26)
| Edge case | Ruling |
|---|---|
| EC-01 "enemy of the people" | IN under Category 5 when framing implies political illegitimacy |
| EC-02 "death cult" + "no place in America" | IN under Categories 2+3 (dehumanizing + eliminationist) |
| EC-03 "SHOOT To KILL / No place for radical Islam" | IN under Category 1 (call to violence) |
| EC-04 "Hang these dirtbags" | IN under Category 1; no exception for criminal-accused targets |
| EC-05 "flood America with millions of unvetted illegals" | OUT as standalone (no explicit eliminationist call) |
| EC-06a "COMMIE-crats" | IN under Category 6 (totalitarian identity label) |
| EC-06b "Sanctuary cities protect m*rderers, r*pists" | OUT (policy framing, not delegitimizing label) |
| EC-07 Class-identity criminal nouns (added 2026-04-27 post-validation) | IN under Cat 2 when a criminal/subhuman/cult identity noun ("fraudsters," "barbarians," "monsters," "thugs," "savages," "terrorists," "invaders," "cultists," "goons") is applied as an identity attribute of a named ethnic, national, religious, immigration-status, or political-affiliation class. Examples: "Somali fraudsters," "Muslim terrorists," "Palestinian thugs," "MAGA cultists," "ICE thugs." The existence of documented criminal cases involving members of the named group does NOT create an exception. Series-frame extension: Posts that use named individuals as exemplars of a curated class-identity claim (e.g., a "Crime Chronicle" series naming individuals as exemplars of "career criminal illegal aliens") are IN — the series itself constructs the class. The OUT clause for "specific named individuals" applies only when the post reports on the individual's case without making class-identity claims about the group. |
Commemoration-day exclusion rule
Posts published on or within 3 days of a recognized commemoration day (Holocaust Remembrance Day, MLK Day, Veterans Day, 9/11 anniversary, Kristallnacht anniversary, etc.) that reference historical atrocities, regimes, or movements for the purpose of remembrance, education, or historical fact — and not to label current political actors as members of those regimes or movements — are out of scope.
This rule applies symmetrically. It is intended to prevent commemorative speech from being flagged as the rhetoric it explicitly opposes. The rule is included verbatim in the production prompt.
Section 07Classifier architecture and full prompt
Production classifier
No existing classifier in the TheWatchdogs system was built for this taxonomy. Workstream 5 ran a new AI classification pass against all 122,106 original X posts in the window.
Approach: LLM batch API. Posts submitted in batches of 10,000. Results stored in rhetoric_classifications PostgreSQL table.
Party-blind classification — non-negotiable commitment: The classifier prompt receives post text and post date only. No member name, no party, no chamber, no bioguide_id. The classifier cannot infer party from any field it receives. This is enforced in the script.
Conservative bias on close calls — non-negotiable commitment: The prompt instructs the classifier to default OUT when ambiguous. Only classify IN when clear. This is in the prompt verbatim.
Second validation gate — required before publication: After the full classification run, 50 classified hits were pulled (stratified across categories proportionally to hit volume) for a second blind review at the same 86% accuracy threshold. Result: 49/50 = 98%. PASS.
Production prompt — exact, verbatim, for audit and reproduction
Classify this congressional tweet for eliminationist and delegitimizing rhetoric.
TAXONOMY — classify IN if the tweet clearly meets ANY of these 6 categories:
CAT 1 (Calls to violence): Direct or near-direct calls for physical violence against named or identified people, groups, or institutions.
IN: "hang them", "shoot to kill [group]", explicit violence directives
OUT: "fight this bill", "defeat them in November", "take down this policy"
CAT 2 (Dehumanizing language): Applies animal, pest, disease, criminal-identity, or annihilation metaphors to human beings as a class.
IN: "vermin", "[group] is a plague/infestation/disease", annihilation metaphors applied to human groups
IN (EC-07 — class-identity criminal nouns): When a criminal/subhuman/cult identity noun is applied as an identity attribute to an ethnic, national, religious, immigration-status, or political-affiliation class:
- "Somali fraudsters" (Somali-as-class + fraudster-as-identity)
- "Muslim barbarians" / "Muslim terrorists" (Muslim-as-class + criminal-identity)
- "illegal monsters" (illegal-as-class + monster-as-identity)
- "Palestinian thugs" (Palestinian-as-class + thug-as-identity)
- "MAGA cultists" / "Trump cultists" (political-affiliation + cult-identity)
- "Antifa thugs" applied as identity (political-affiliation + thug-identity)
- "ICE thugs" / "ICE goons" (institutional class-identity)
Series-frame posts that name specific individuals as exemplars of a class-identity claim are IN. The OUT clause for "specific named individuals" applies only when the post reports on the individual's specific case without making class-identity claims about the group they belong to.
The existence of documented criminal cases involving the named group does NOT create an exception. The pattern is IN regardless of whether real crimes were committed by individuals in the group.
OUT: "corrupt institution", "incompetent official", derogatory adjectives for policies, naming specific convicted individuals (e.g., "John Smith, a convicted fraudster") WITHOUT class-identity framing, criticizing a specific named person's actions WITHOUT class-identity attachment.
KEY: For EC-07 to apply, the criminal noun must function as an IDENTITY ATTRIBUTE of a class. "Somali fraudsters" attributes fraudster-identity to Somalis as a class. "John Smith committed fraud" describes a specific person's actions and is OUT.
CAT 3 (Eliminationist framing): Asserts a group of people has no legitimate place in society and must be expelled or eradicated as an end goal.
IN: "[group] is a DEATH CULT and has NO PLACE in America", "we must eliminate them from our politics entirely"
OUT: "reduce immigration", "oppose this policy", standard restrictionist policy positions
CAT 4 (Threats against named individuals): Direct or implied threats of physical harm against a specific, named person.
IN: explicit threat of physical harm to a named elected official
OUT: "should resign", "will face accountability", "we will prosecute" (legal accountability language)
CAT 5 (Enemy-of-the-people designation): Labels domestic political opponents or institutions as existential enemies requiring elimination, not merely defeat.
IN: "Democrats are the ENEMY OF THE PEOPLE" (asserts political illegitimacy, not just policy error)
OUT: "Democrats are wrong on policy", "the Administration is making serious mistakes"
CAT 6 (Totalitarian-regime labels as identity): Applies the identity label of a totalitarian movement to current political opponents or named officials.
IN: "Democrats are fascists", "the COMMIE-crats in Washington", "hold every fascist accountable", "the Marxist Left wants to destroy America", "Commie mayor", "AOC is a Marxist", "Trump is a Nazi"
OUT (historical reference): "Nazis murdered 6 million Jews", "the fascist regime in 1930s Germany"
OUT (counter-speech): "stop comparing ICE to Nazis", "you shouldn't call people fascists"
OUT (ideology descriptor): "Bernie calls himself a democratic socialist", "AOC's Marxist policies" [default OUT — describes policy, not labels person]
IMPORTANT Cat 6 rule: If the term describes an ideology or policy rather than labeling a current person or group as a member of a totalitarian movement, classify OUT. Default OUT on close calls.
COMMEMORATION-DAY EXCLUSION:
If the post references historical atrocities, regimes, or movements (Nazi, Holocaust, fascist, communist, etc.) for the purpose of REMEMBRANCE, EDUCATION, or HISTORICAL FACT — and NOT to label current political actors as members of those movements — classify OUT. This applies especially to posts near recognized commemoration dates (Holocaust Remembrance Day Jan 27, MLK Day, Veterans Day, 9/11 anniversary, Kristallnacht anniversary Nov 9, etc.). Counter-speech posts ("stop calling people Nazis") are also OUT.
CONSERVATIVE BIAS: When in doubt, classify OUT. Only classify IN when the fit to a category is clear.
Post date: {date}
Post text: {text}
Respond in JSON only, no other text:
{"category": null, "in": false, "confidence": "high", "reasoning": "one brief sentence"}
If IN, replace null with the category number (1-6) and false with true.
If multiple categories apply, return the lowest-numbered applicable category.
Output schema
Classification results are stored in a PostgreSQL table linked to the source posts table by post ID. Each classification record includes the category (1–6 if IN, NULL if OUT), the IN/OUT boolean, the classifier's confidence level, the one-sentence reasoning, the batch ID for audit, and a timestamp. The classification is one-to-one with the post.
Section 08How we count repeated rhetoric
Congressional members on X often repeat similar phrases across many posts. A member who labels opponents "Marxists" 22 times in 90 days is exhibiting a different behavior than a member who makes a direct call to violence three times. Treating these identically — either by counting every instance or by counting only one — misrepresents both.
We apply a hybrid, category-aware counting rule that reflects the distinction between discrete dangerous acts and rhetorical patterns.
Category-rule mapping
| Category | Rule | Rationale |
|---|---|---|
| Cat 1 — Calls to violence | Rule A: every instance | Each call to violence is independently alarming. "Hang them" said three times is three calls, not one with repetition. No discount. |
| Cat 2 — Dehumanizing language | Rule C: cap at 3 per pattern | Dehumanizing labels reflect rhetorical pattern. Three instances captures the habit; further repetition adds no additional signal. |
| Cat 3 — Eliminationist framing | Rule A: every instance | Each "no place in society" statement is an independent claim of intended exclusion. |
| Cat 4 — Threats against named individuals | Rule A: every instance | Each threat against a named person is independently consequential regardless of prior threats. |
| Cat 5 — Enemy-of-the-people designation | Rule C: cap at 3 per pattern | Identity-labeling rhetoric; pattern matters more than instance count. |
| Cat 6 — Totalitarian-regime labels | Rule C: cap at 3 per pattern | Repeated identity-label usage is rhetorical habit. Caps single-pattern repetition without erasing intensity differences. |
Pattern = a distinct recurring phrase or label type within a category (e.g., "Marxist" is one pattern; "Communist" is another, even within Category 6).
Same-text deduplication — applies all categories
If a member posts identical or near-identical text (>90% string similarity) three or more times within a 24-hour window, those collapse to one instance, regardless of category. This prevents social-media amplification artifacts — a member who spam-posts the same text does not receive N separate flags.
Distinct posts on distinct dates with distinct phrasing count separately under whichever category rule applies.
Worked examples
Example A — Category 1, Rule A
Tim Burchett (R) posted three distinct variations of "hang these dirtbags" across February–March 2026. Under Rule A, that is 3 Category 1 flags. Each post is a distinct statement made on a distinct date; no deduplication applies.
Example B — Category 6, Rule C
Chip Roy (R) used "Marxist" as an identity label for political opponents 22 times across the 90-day window, and "Communist" as a D-member-referencing label 3 times. Under Rule C, "Marxist" counts as 3 (capped from 22); "Communist" counts as 3 (already at cap). Total: 6 Category 6 flags for Roy — not 25 as raw count would show, not 2 as pattern-counting would show.
Example C — Category 6, Rule C, opposite direction
Delia C. Ramirez (D) used "fascist" as an identity label for Trump administration officials 18 times. Under Rule C, "fascist" counts as 3 (capped from 18). Total: 3 Category 6 flags. The same rule applies in both directions — Roy's 22 "Marxist" uses cap at 3; Ramirez's 18 "fascist" uses cap at 3.
Example D — Category 3, Rule A
A member posts five distinct statements asserting a religious group "has NO PLACE in America" across different dates in the window. All five are distinct framing statements, each an independent eliminationist claim. Rule A applies: 5 Category 3 flags.
Why this structure
"Counting every instance of identity-labeling treats one member's rhetorical tic as if it were independent escalation. Counting only one instance per pattern erases real intensity differences. We split the difference category-by-category."
The hybrid approach reflects a substantive judgment: rhetorical patterns (Cats 2, 5, 6) are meaningfully different from discrete dangerous acts (Cats 1, 3, 4) in how repetition scales their significance. A member who calls for violence three times is three times as alarming as one who does it once. A member who labels opponents "Marxists" 22 times vs. 6 times is exhibiting the same pattern — with more intensity, but not 3.7× more alarming.
The rule is applied symmetrically. The same category assignment and the same counting rule apply regardless of the speaker's party.
Section 10Validation results — pre-run blind review
Before running the full 122,106-post classification, a 50-item blind review was conducted to validate the taxonomy's accuracy when applied by a human reviewer using the same IN/OUT criteria that would be given to the classifier.
Results
| Metric | Count | Rate |
|---|---|---|
| True positives — blind reviewer | 36 | — |
| Total blind pool items | 50 | — |
| Raw pool accuracy | 36/50 | 72% |
| Commemorative/historical exclusions | 9 | — |
| In-scope items — after exclusions | 41 | — |
| In-scope accuracy | 36/41 | 88% |
| Gate threshold | — | 86% |
| Gate result | — | PASS |
We report both rates. The difference between 72% and 88% tells the reader exactly what the upstream keyword scanner is doing. Hiding the 72% would hide the contamination problem the taxonomy already solves.
The 9 commemorative post exclusions
Nine items in the 50-item blind pool were flagged as out-of-scope by the reviewer — not because the taxonomy was wrong, but because the upstream keyword scanner had surfaced content the taxonomy already categorically excludes: commemorative references to historical atrocities.
These were posts published around International Holocaust Remembrance Day (January 27, 2026) that used the words "Nazi" or "fascist" in historical context — honoring victims, condemning historical regimes, or marking the anniversary of the liberation of Auschwitz. Per the taxonomy's OUT criteria, these posts are explicitly excluded regardless of the keyword that surfaced them.
Worked examples of upstream contamination
- "On International Holocaust Remembrance Day, we honor the six million Jews murdered by the Nazi regime. We reaffirm our pledge to root out antisemitism." — Scanner fired on "Nazi." Taxonomy: OUT (historical reference, commemorative context, remembrance purpose).
- "Today marks the liberation of Auschwitz. We honor those murdered by the Nazis and commit to Never Again." — Scanner fired on "Nazi." Taxonomy: OUT (historical reference, educational purpose).
- "Eighty-one years ago, the Auschwitz concentration camp was liberated. We mark that solemn anniversary." — Scanner fired on "Nazi." Taxonomy: OUT (same).
All nine were correctly identified as out-of-scope by the reviewer. They represent keyword scanner noise, not taxonomy failure. The taxonomy IN/OUT criteria are sufficient to exclude them — the scanner just shouldn't have put them in the candidate pool in the first place.
Why the in-scope rate is the right gate
The accuracy gate was set at 86% against the in-scope candidate pool — posts that the taxonomy was actually designed to evaluate. The 9 commemorative posts were never in scope; the keyword scanner put them in the candidate pool despite the taxonomy having already excluded that content type. Scoring the gate against the contaminated pool (72%) would penalize the taxonomy for a defect upstream of it.
This reasoning is disclosed, not hidden. The 72% is published alongside the 88% because the gap explains the scanner's failure mode: it matches on the word, not the use.
Second validation gate — pre-publication requirement
After the classifier ran the full 122,106-post corpus, a second 50-item blind review was conducted against the classifier's actual output — stratified proportionally across the 6 categories. The same 86% in-scope gate applied.
49 of 50 true positives = 98% accuracy. Per-category: Cat 1 11/11, Cat 2 8/8, Cat 3 10/10, Cat 4 1/1, Cat 5 1/1, Cat 6 18/19. Single false positive: a member criticizing another politician's labeling by quoting it (HR-28 pattern). PASS.
Section 11Disclosures
- Platform asymmetry: X-only scope was chosen to avoid Bluesky's 50:1 D-skew and Truth Social's inverse R-skew, both of which are partisan echo chambers with minimal cross-party reach. On X, Republicans post more than Democrats in this window. Disclosed in every output table.
- Threshold asymmetry: The 100-post minimum removes more Republicans than Democrats (R P25 = 86 vs. D P25 = 142). The rule is symmetric; the impact is structural.
- Scope change: Taxonomy expanded from violent rhetoric to eliminationist and delegitimizing rhetoric on April 26, 2026, in response to active public discourse. Decision made before aggregate counts were produced.
- Category 6 direction imbalance: Pre-classifier keyword counts: ~50 D→R fascist/Nazi label posts; ~156 R→D commie/Marxist label posts. These are rough keyword counts; final classifier totals may differ. The analysis does not pre-adjust for this imbalance.
- Dual validation disclosure: Raw blind pool accuracy 72% (36/50); in-scope accuracy 88% (36/41). Both rates disclosed.
- Party-blind classification: Classifier receives post text and date only. No member name, party, or chamber. Enforced at the script level.
- Conservative bias: Classifier defaults OUT on ambiguous cases. This biases toward undercounting, not overcounting.
- Classifier limitations: Custom AI classifier validated by two blind reviews (pre-run and post-run). False positives and false negatives are possible; second validation gate is the pre-publication floor.
- Counting rule: Hybrid category-aware (Rule A for Cats 1, 3, 4; Rule C cap-3 for Cats 2, 5, 6). Same-text deduplication across all categories.
- Audit trail: Every flagged post in the top-10 member ranking links to the original post on X. Available at the audit trail page.
- Origination, not reach: This analysis measures rhetoric originated by members on their own accounts. It does not measure how that content travels through media ecosystems. Networked-propaganda research has documented that the right and left media ecosystems are structured asymmetrically with different amplification dynamics; the per-100-posts rate does not capture that.
- Sample recency: Window closes April 26, 2026.
- EC-07 methodology refinement (added 2026-04-27): A user-surfaced classifier inconsistency around the criminal-identity-as-class-attribute pattern was identified during state-delegation review after the initial classification run completed. The taxonomy's existing Cat 2 rule was clarified (EC-07 in Section 6) to make the rule's application explicit; the corpus was reclassified against the updated prompt; a second validation gate was conducted at 86.7% in-scope accuracy. Both pre-EC-07 and post-EC-07 numbers are disclosed (see Task 4). Headline numbers in this report reflect the post-EC-07 classification. The R/D ratio moved from 4.23× to 4.35×; the directional finding holds in Categories 1, 2, and 3; Category 6 remains statistically tied.
Section 12Pre-publication task results
Task 1 — Category 6 R spot check: 1/20 HR-28 pattern
A 20-item random sample of Category 6 R flags was reviewed for the criticizing-by-quoting edge case identified during the second blind review (HR-28 pattern: a member reporting another politician's framing rather than originating the labeling).
Result: 1 of 20 items fit the HR-28 pattern. Decision band 0–1 of 20 → proceed unchanged, document the result.
The single HR-28 instance in the spot check: Dan Crenshaw (R-TX) posting about Tim Walz's use of "modern-day SS" to describe ICE — Crenshaw was criticizing Walz's framing, not applying the label himself.
Estimated HR-28 contamination rate in Cat 6 R flags: approximately 5% (1/20). This rate is too low to alter the headline numbers and does not affect the directional finding. It is disclosed here.
Task 2 — 100-post threshold for headline ranking
The headline top-10 ranking applies a 100-post minimum (updated from 50). Members with 50–99 posts are reported separately with rates and CIs displayed but labeled as smaller-sample with caution disclaimers.
Rationale: A member with 53 posts and 1 flag has a rate of 1.89/100 with a 95% CI of [0.34, 9.84] — the upper bound is more than five times the lower. Including such members in a headline rate-based ranking produces unstable, editorially misleading positions. The 100-post threshold is the standard small-sample adjustment for proportion-based rankings.
Task 3 — Confidence intervals: Wilson interval confirmed
All confidence intervals use the Wilson score interval for a binomial proportion (95%, z=1.96), not the normal approximation. The normal approximation is unreliable at small event counts (k < 5 or k/n < 0.05), which applies to many members in this analysis.
Wilson CIs are reported for: party-level aggregates, per-member rates in top-10 and small-sample tables, per-category D/R rates in the category breakdown.
Per-category directional findings (initial classifier run)
These are the directional findings from the initial classifier run. A subsequent post-validation review identified a classifier inconsistency that prompted Task 4 (below). The post-EC-07 numbers and revised directional findings appear in Task 4.
| Cat | Label | D rate/100 | R rate/100 | CIs overlap? | Direction |
|---|---|---|---|---|---|
| 1 | Calls to violence | 0.0037 | 0.0801 | No | R significantly higher |
| 2 | Dehumanizing language | 0.0037 | 0.0417 | No | R significantly higher |
| 3 | Eliminationist framing | 0.0018 | 0.0835 | No | R significantly higher |
| 4 | Named-individual threats | 0.0018 | 0.0017 | Yes | No significant difference |
| 5 | Enemy-of-the-people | 0.0000 | 0.0117 | Yes | R higher (small N) |
| 6 | Totalitarian-regime labels | 0.0549 | 0.0601 | Yes | No significant difference |
The directional finding holds in Categories 1, 2, and 3 with non-overlapping confidence intervals. Category 6 — the symmetric fascist vs. commie category added for Lane 2 — shows no statistically significant difference between D and R rates. Categories 4 and 5 have counts too small to distinguish.
Category 6's near-parity by rate is the key Lane 2 finding: when normalized for post volume, Democrats and Republicans apply totalitarian-regime identity labels to opponents at statistically indistinguishable rates. The overall R-higher aggregate finding is driven by Categories 1, 2, and 3 — categories where the taxonomy's conservative bias (default OUT) means the gap is more likely understated than overstated.
Task 4 — EC-07 discovery, methodology refinement, and corpus reclassification (added 2026-04-27, post-validation)
During Minnesota delegation review on April 27, 2026, an editorial check on Tom Emmer's posting pattern surfaced a classifier inconsistency. Emmer had posted the phrase "Somali fraudsters" — applying a criminal-identity noun as an attribute of an ethnic class — multiple times in the analysis window. The classifier had defaulted these posts OUT, on the reasoning that documented criminal cases existed. Structurally identical posts in the corpus had been flagged IN under Cat 2: Randy Fine's "Muslim barbarians," Andrew Ogles's "RAPISTS and GANG MEMBERS" applied to immigrants. The classifier was applying the Cat 2 rule inconsistently to the same rhetorical pattern.
The taxonomy did not have a "documented criminal cases" exception for Cat 2. The pattern — applying a criminal/subhuman identity noun as an attribute of an ethnic, national, religious, immigration-status, or political-affiliation class — meets the existing Cat 2 definition (dehumanizing language applied to a class). The classifier's inconsistency was an application error, not a rule mismatch.
Rather than publish despite the known inconsistency, the methodology was clarified and the corpus reclassified.
EC-07 ruling adopted
EC-07 (in Section 6 above) was added to make the Cat 2 rule explicit for class-identity criminal noun patterns. The ruling covers ethnic, national, religious, immigration-status, AND political-affiliation classes, plus institutional classes (e.g., "ICE thugs," "ICE goons"). The principle: dehumanization of human beings as a class is Cat 2 regardless of which class. Symmetric application across parties is non-negotiable.
The production prompt (Section 7) was updated to reflect EC-07 verbatim, including the series-frame clarification described below.
Targeted reclassification batch
A keyword sweep identified 1,265 candidate posts in the 122,106-post corpus matching the EC-07 pattern signature (class-identity term paired with criminal-identity noun). 26 candidates were already classified IN under the original taxonomy and required no action. The remaining 1,239 OUT candidates were submitted to a batch reclassification using the updated prompt.
| Outcome | Count |
|---|---|
| OUT candidates submitted | 1,239 |
| OUT → IN flips (R) | 197 |
| OUT → IN flips (D) | 24 |
| OUT → IN flips (I) | 0 |
| Total reclassified | 221 |
| Remained OUT | 1,013 |
| Parse errors (defaulted OUT, no change) | 5 |
R-side flips were dominated by ethnic, religious, and immigration-status class targeting (Somali, Muslim, Palestinian, immigrant). D-side flips were dominated by institutional class targeting (ICE agents, federal personnel) clustered partially around Operation Metro Surge. Both patterns meet the Cat 2 rule under EC-07. Both flag.
Series-frame clarification
Validation review surfaced a pattern the original EC-07 wording did not anticipate: posts in which a member uses named individuals as exemplars of a curated class-identity claim. Specifically, a member running a "Crime Chronicle" series naming specific criminal defendants under a unifying frame ("Worst-of-the-Worst career criminals and illegal aliens") is constructing a class through serial naming. The named individuals are the vehicles; the class characterization is the message.
This pattern was ruled IN under EC-07. The reasoning: the series itself constructs the class. The OUT clause for "specific named individuals" was designed to exclude posts reporting on a single bad actor's case without class-identity framing — not to exempt class-identity claims merely because they cite named exemplars. The same ruling would apply symmetrically to any side using a series-frame to construct class identity (e.g., a Democratic member running a series naming individual ICE agents as "Worst-of-the-Worst federal thugs"). The clarifying language has been added to the EC-07 ruling and to the classifier prompt.
Validation gate — post-EC-07 reclassification
A 30-item stratified blind review was conducted on the EC-07 reclassifications, using seed=20260427 for reproducibility. Stratification: 25 R Cat 2, 2 R Cat 6, 3 D Cat 2 — proportional to the flip distribution.
| Metric | Count | Rate |
|---|---|---|
| True positives | 23 + 3 (series-frame, ruled IN) | 26 |
| False positives | 2 | — |
| Category mistags (IN correct, category wrong) | 1 | — |
| Strict accuracy (TP/30, treating series-frame as borderline) | 23/30 | 76.7% |
| In-scope accuracy (post series-frame ruling) | 26/30 | 86.7% |
| Gate threshold | — | 86% |
| Gate result | — | PASS |
Both rates are disclosed. The strict 76.7% reflects the gate result if the three series-frame items are counted as false positives — i.e., if EC-07's "specific named individuals" OUT clause is read literally. The in-scope 86.7% reflects the gate result after the series-frame clarification. The series-frame ruling was made on its substantive merits — the same ruling would apply to a Democratic member's structurally equivalent series — not because it produced a passing gate score. Both rates are published so readers can apply their own preferred interpretation.
2 false positives (Items 04 and 19 in the validation sample) stand as residual classifier error. Item 04: "ICE criminals" framing in a post about DA Krasner that did not actually pair an ethnic/class group with the criminal noun. Item 19: a named-individual immigration fraud accusation against Rep. Omar that did not include class-identity framing. Both meet the OUT criteria under EC-07 and were ruled FP. The residual error rate of 2/30 = 6.7% is consistent with the original validation gate's accuracy expectations.
Post-EC-07 directional findings
| Cat | Label | D pre | D post | R pre | R post | CIs overlap? |
|---|---|---|---|---|---|---|
| 1 | Calls to violence | 0.0037 | 0.0037 | 0.0801 | 0.0801 | No |
| 2 | Dehumanizing language | 0.0037 | 0.0403 | 0.0417 | 0.2071 | No |
| 3 | Eliminationist framing | 0.0018 | 0.0018 | 0.0835 | 0.0835 | No |
| 4 | Named-individual threats | 0.0018 | 0.0018 | 0.0017 | 0.0017 | Yes |
| 5 | Enemy-of-the-people | 0.0000 | 0.0000 | 0.0117 | 0.0117 | Yes |
| 6 | Totalitarian-regime labels | 0.0549 | 0.0549 | 0.0601 | 0.0618 | Yes |
Aggregate party rates (post-EC-07):
- R: 0.4458 per 100 posts (95% CI [0.396, 0.503]) — up from 0.2789 pre-EC-07
- D: 0.1026 per 100 posts (95% CI [0.079, 0.133]) — up from 0.0659 pre-EC-07
- R/D ratio: 4.35× — up marginally from 4.23× pre-EC-07
The directional finding (R significantly higher, non-overlapping CIs) holds. Category 2 is now the second-largest contributor to the asymmetry behind Category 3, with the ratio narrowing slightly (R 5.1× D pre-EC-07 within Cat 2; R 5.1× D post-EC-07). Category 6 remains statistically tied — EC-07 was almost exclusively Cat 2 work and did not affect totalitarian-regime label counts. Categories 1, 3, 4, and 5 are unaffected by EC-07.
The headline finding — that totalitarian-regime labels are applied symmetrically while calls to violence, dehumanizing language, and eliminationist framing are applied asymmetrically — is unchanged. The texture is sharper post-EC-07 because the dehumanization-of-ethnic-classes pattern is now visible at the headline-rate scale rather than partially suppressed.
Reclassification audit trail
Every reclassified post is tagged in the rhetoric_classifications table with ec07_reclassified = TRUE and the original classification preserved in companion columns (ec07_original_is_in, ec07_original_category, ec07_original_reasoning). The audit trail page indicates which flagged posts in the published top-10 ranking were reclassified under EC-07.
Final verdictAudit-trail review verdict
Audit conducted by: Chad Maschke (editor), post-classification, post-validation.
Members audited: Andrew Ogles (rank 1, 27 flags) and Randy Fine (rank 2, 36 flags).
Protocol: 3-pass review (category distribution, 5-post random sample, 1 worst-case stress test per member) plus independent source verification.
| Pass | Posts reviewed | Verdict |
|---|---|---|
| Pass 2 random sample — Ogles (seed=20260427) | 5 | 5/5 TP |
| Pass 2 random sample — Fine (seed=20260427) | 5 | 5/5 TP |
| Pass 3 stress test — Fine ("Palestinian is a synonym for evil," Cat 2) | 1 | Defensible |
| Pass 3 stress test — Ogles ("DEPORT THEM ALL and execute this illegal pos!!!" Cat 1) | 1 | Defensible |
| Combined Pass 2 | 10 | 10/10 TP |
| Combined Pass 3 | 2 | 2/2 defensible |
Source verification: 11/11 posts confirmed live via X oEmbed API. 11/11 correct attribution (author name returned by oEmbed matches verified member identity). Zero deletions, zero protected accounts.
10/10 TP across both members + defensible worst-case = PROCEED unchanged. No member pulled from headline ranking. No methodology adjustments required.
Reproduction: Pass 2 sample is reproducible. Seed=20260427. Query: SELECT * FROM rhetoric_classifications WHERE bioguide_id IN ('O000175','F000484') AND is_in=TRUE ORDER BY RANDOM(); with seed set before query.