This is literally what each party said today, compressed to one voice, with receipts.

Methodology

OnScript is a symmetric instrument. The same pipeline, the same prompts, and the same thresholds run for both parties. Asymmetric findings are allowed — a symmetric instrument producing asymmetric readings is a fact about the world, not about the instrument. This page is that guarantee, in public.

The two-lane model

Lane 1 — press releases. Official member press releases (mirrored from an open corpus) are the only source that exists symmetrically for both parties. Every cross-party number on this site comes from Lane 1 and Lane 1 only.

Lane 2 — Bluesky & floor speech. These enrich individual context but are machine-blocked from every comparative metric. Lane assignment is by source, never by content, and is enforced in code — so a claim can never silently mix an asymmetric source into a party-vs-party number.

Nightly symmetry audit

Identical instrument, both parties, audited nightly in public. Asymmetric findings are reality's problem, not the instrument's.

Audit for 2026-07-13.

MetricDemocratsRepublicans
Statements ingested4476731107
Members covered263272
Caucus size263272
Coverage100.0%100.0%
Tokens in16711529
Tokens out400400
Claims published20
Claims dropped00

The following hashes are computed once and applied identically to both parties. If they ever differ between parties, the instrument is broken.

P1 prompt sha
0cddc44ce3b70062f8bce6e98e50132553ff16b3e383a51a29fd867b3b134e9f
P2 prompt sha
2d28fb8f49e9deed2f8a1ddd9fd70a98a91f34584cf8b4d4d2fb4c09253a9764
P3 prompt sha
08f6910ab55f2114b5d3c086a1217cf32664cf0adf5fdb7e892601460598cf42
thresholds sha
0291ebf51640f3935241a50dd1066c7221b17caea87cae6cf49085cedf57d376
Lane-1 only
True
Degraded
False

Corpus coverage by year

Per-year Lane-1 statement counts by party. Cross-era claims are gated on coverage.

YearDemocratsRepublicansIndependents
20252808520386242
20261668210721119

Live prompt text

These are the exact prompts running in the pipeline, versioned and public. The distiller can only build from code-computed talking-point clusters and code-computed numbers; it cannot introduce a topic, claim, or number that the deterministic engine did not measure.

P1 — fragment extraction

P1_extraction.v1.0.txt

SYSTEM: You extract talking-point fragments from a single statement by a member of the U.S. Congress. You are a measurement instrument: no opinions, no summaries in your own words. Rules: (1) Extract 0–5 fragments; each fragment MUST be a verbatim substring of the statement, 4–14 words, carrying a political message or stance (never boilerplate, procedure, scheduling, or biography). (2) Tag each fragment with topics from this fixed list: {taxonomy_v1}. (3) If the statement is purely ceremonial/administrative, return an empty list. Output JSON only: {"fragments":[{"text":"…","topics":["…"]}]}.

P2 — Daily Line

P2_daily_line.v1.0.txt

SYSTEM: You are the composite voice of the {party} members of the U.S. Congress — every member speaking as one "we." You are deadpan, sincere, and clinically self-observant: you report on your own coordination the way a seismograph reports tremors. HARD RULES: (1) Build ONLY from the provided talking-point clusters; never introduce a topic, claim, or fact not present in them. (2) Any quoted words must be copied exactly from the provided fragments, ≤10 words per quote. (3) Use ONLY the numbers in the provided STATS block, verbatim; never compute or invent a number. (4) Lead with the day's dominant message; mention 2–4 clusters max; one sentence may clinically note the day's most synchronized phrase (count + first-sayer from STATS). (5) ≤120 words, first-person plural, present tense, no adjectives that don't appear in the fragments, no irony markers, no hashtags, no emoji. (6) End with nothing — the receipts link is appended by code. You are analysis of speech, not a substitute for it.
---USER---
DATE: {day} · PARTY: {party} · STATS: {code_computed_stats_json} · CLUSTERS: {talking_points_json}

P3 — quiet day

P3_quiet_day.v1.0.txt

SYSTEM: You are the composite voice of the {party} members of the U.S. Congress — every member speaking as one "we." Same voice rules as the Daily Line: deadpan, first-person plural, present tense, measurement-first, no adjectives that don't appear in fragments, no irony, no hashtags, no emoji. Today the volume was too low to distill a message. Your input is the STATS block only. Output ≤40 words that acknowledge the volume plainly (e.g. "We released 11 statements today. It was a Saturday."). Use ONLY numbers present in STATS, verbatim. Never editorialize the quiet. End with nothing — the receipts link is appended by code.
---USER---
DATE: {day} · PARTY: {party} · STATS: {code_computed_stats_json}

Topic taxonomy (v1)

Fixed v1 topic taxonomy (gameplan 03 §3). The LLM extractor (prompt P1) is the authority for topic tags; the optional `seeds` are only a deterministic fallback/aid and are NOT the contract. The v2 GDELT theme->taxonomy mapping table joins onto these `id`s.

Corrections

Every claim is anchored to at least three real source statements (member, date, source). If a distilled line ever misquotes or miscounts, it is a bug in the instrument, not a matter of opinion. Corrections are logged against the affected day and the raw ingested data — stored immutably and date-stamped — is retained so any figure on this site can be independently recomputed. Every correction is a dated public entry below, never a silent edit; the corrections rate is itself a published number.

Corrections to date: 0. No published line has yet required a correction. The first that does appears here — dated, with the affected day and the fix.

Data

The derived JSON that powers this site is committed to the repository. Raw ingested statements and the full phrase ledger are published as immutable, date-stamped release assets so the entire time-series is rebuildable from source. The pipeline is deterministic: same inputs, same outputs.