From a3b4370628bd005ebba8b065876ab8ff335bf175 Mon Sep 17 00:00:00 2001 From: ThatXliner Date: Sun, 26 Jul 2026 15:24:14 -0700 Subject: [PATCH 01/19] Replace the bill article wall of text with a structured brief MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The article pipeline emitted one ~900-word markdown blob per item. The prose was careful — nonpartisan framing, sponsor claims treated as intent, removed oversight named rather than called "streamlining" — but structurally it gave the reader one decision: read all of it, or none of it. Nothing was scannable, everything rendered at equal weight, and quotes were just italic text that nothing verified. A brief is the same analysis stored as typed pieces instead of prose: a hook, stat tiles, before/after changes, affected groups, unknowns, a glossary, and optional long-form sections. The reader can stop at any depth and still have learned something true. Editorial guarantees move into the types rather than being trusted to a prompt: - `kind` on a change is mechanical (creates/repeals/waives/funds), never evaluative — a brief can say what a provision does, not whether it's good. - `before`/`after` forces current law to be stated separately from the change. - `direction` on an affected group tops out at mixed/unclear, so the model can decline to score a group instead of manufacturing symmetry. - `unknowns` is non-empty: no brief can claim to have settled everything. - Legal status is derived from the scraped bill status, so "would" vs "does" comes from a string match rather than an inference. Generation is three steps, one of which costs a token. The LLM structures the brief (grounded in the official text plus the existing vetted article), then two deterministic passes run: every quote is checked verbatim against the whole source document and stripped if it doesn't match — the claim survives, the citation doesn't — and loaded political vocabulary in the model's own voice triggers one regeneration. Quotes are exempt from the lint: a sponsor may call their bill "common sense", and quoting that is reporting. Argument-level framing deliberately stays in the existing cited dual-lens. Briefs describe mechanism; the lens carries the debate. Bills only. The schema is written around legislative mechanics, and executive actions and court cases each need their own design pass — `content_brief` already carries a contentType, so adding one is a generator, not a migration. Content without a brief keeps rendering the markdown article. Two adjacent fixes found while verifying this: - `pnpm db:seed` had been failing outright: the fixture bill descriptions exceed the table's 100-char check constraint. Clamped with the same helper the scraper and API use. - `pnpm test` in the scraper globbed `src/**/*.test.ts` unquoted, so the shell expanded it one level deep and silently ran 2 of 5 test files. Quoted, so Node's runner does the globbing: 23 tests now discovered instead of 7. Co-Authored-By: Claude --- apps/expo/src/app/article-detail.tsx | 21 +- apps/expo/src/components/ui/BillBrief.tsx | 638 ++++ apps/expo/src/components/ui/Icon.tsx | 14 +- apps/expo/src/components/ui/index.ts | 1 + apps/scraper/package.json | 2 + apps/scraper/src/retroactive-briefs-entry.ts | 4 + apps/scraper/src/retroactive-briefs.ts | 135 + apps/scraper/src/utils/ai/bill-brief.test.ts | 173 ++ apps/scraper/src/utils/ai/bill-brief.ts | 393 +++ apps/scraper/src/utils/db/operations.ts | 100 + docs/README.md | 1 + docs/article-generation.md | 162 + docs/scraper.md | 5 +- packages/api/src/router/content.ts | 24 + packages/db/drizzle/0003_lumpy_nehzno.sql | 13 + packages/db/drizzle/meta/0003_snapshot.json | 2801 ++++++++++++++++++ packages/db/drizzle/meta/_journal.json | 7 + packages/db/package.json | 1 + packages/db/seed.ts | 190 +- packages/db/src/schema.ts | 29 + packages/validators/src/bill-brief.ts | 293 ++ packages/validators/src/index.ts | 2 + pnpm-lock.yaml | 44 +- 23 files changed, 5010 insertions(+), 43 deletions(-) create mode 100644 apps/expo/src/components/ui/BillBrief.tsx create mode 100644 apps/scraper/src/retroactive-briefs-entry.ts create mode 100644 apps/scraper/src/retroactive-briefs.ts create mode 100644 apps/scraper/src/utils/ai/bill-brief.test.ts create mode 100644 apps/scraper/src/utils/ai/bill-brief.ts create mode 100644 docs/article-generation.md create mode 100644 packages/db/drizzle/0003_lumpy_nehzno.sql create mode 100644 packages/db/drizzle/meta/0003_snapshot.json create mode 100644 packages/validators/src/bill-brief.ts diff --git a/apps/expo/src/app/article-detail.tsx b/apps/expo/src/app/article-detail.tsx index 1ed40f89..7d311602 100644 --- a/apps/expo/src/app/article-detail.tsx +++ b/apps/expo/src/app/article-detail.tsx @@ -18,6 +18,7 @@ import { Text } from "~/components/Themed"; import { Avatar, Badge, + BillBrief, Card, GhostButton, Icon, @@ -229,6 +230,12 @@ export default function ArticleDetailScreen() { } }; + // A structured brief replaces the markdown explainer when one has been + // generated. Content without a brief (every type except bills, and bills the + // pipeline hasn't reached yet) keeps rendering the long-form article, so this + // is additive rather than a cutover. + const brief = "brief" in content ? content.brief : null; + const activeContent = mode === "explainer" ? content.articleContent : content.originalContent; const looksLikeMarkdown = @@ -395,7 +402,11 @@ export default function ArticleDetailScreen() { value={mode} onChange={handleModeChange} options={[ - { id: "explainer", label: "Plain explainer", icon: "sparkle" }, + { + id: "explainer", + label: brief ? "The brief" : "Plain explainer", + icon: "sparkle", + }, { id: "source", label: "Original text", icon: "doc" }, ]} /> @@ -405,7 +416,9 @@ export default function ArticleDetailScreen() { - Explained by Billion AI from the official text.{" "} + {brief + ? "Written by Billion AI from the official text. Quoted passages are verified against the source; everything else is analysis. " + : "Explained by Billion AI from the official text. "} Always verify against the source below. @@ -426,7 +439,9 @@ export default function ArticleDetailScreen() { testID="article-content" style={mode === "source" ? s.sourcePanel : undefined} > - {renderMarkdown ? ( + {mode === "explainer" && brief ? ( + + ) : renderMarkdown ? ( {activeContent} diff --git a/apps/expo/src/components/ui/BillBrief.tsx b/apps/expo/src/components/ui/BillBrief.tsx new file mode 100644 index 00000000..914577c5 --- /dev/null +++ b/apps/expo/src/components/ui/BillBrief.tsx @@ -0,0 +1,638 @@ +/** + * BillBrief — the structured replacement for a wall of markdown. + * + * The old explainer rendered one long markdown blob, so the reader's only + * choices were "read all of it" or "read none of it". A brief is a stack of + * self-contained blocks the reader can leave at any point and still have + * learned something true: + * + * hook → one sentence, always visible + * facts → scannable tiles, no reading required + * changes → before → after, source quote one tap away + * affected → who this lands on + * unknowns → what the text does not settle + * terms → glossary, collapsed + * sections → the long prose version, collapsed + * + * Two brand constraints shape the visual language here: + * + * - Nothing color-codes a verdict. A group that "loses" access is drawn with + * the same neutral treatment as one that "gains" it — direction is carried + * by an arrow and a word, never by green/red. Coloring outcomes would read + * as an editorial position, and red-vs-green sits one step from + * red-vs-blue. + * - Every claim keeps a path back to the source. Change cards expose the + * verbatim provision that backs them, and the block ends by pointing at the + * official text rather than presenting itself as the last word. + */ +import { useState } from "react"; +import { StyleSheet, Text, TouchableOpacity, View } from "react-native"; +import Markdown from "@ronradtke/react-native-markdown-display"; + +import type { IconName } from "./Icon"; +import { + colors, + darkTheme, + fontBody, + fontEditorial, + getMarkdownStyles, + hair, + planes, +} from "~/styles"; +import { Icon } from "./Icon"; + +/* ---------- data shape ---------- */ +// Mirrors @acme/validators' BillBriefRecord. Redeclared rather than imported so +// the native app keeps no dependency on server-side validation code, matching +// how LensData is handled next door. + +export type BriefChangeKind = + | "creates" + | "repeals" + | "expands" + | "restricts" + | "requires" + | "waives" + | "funds" + | "transfers"; + +export interface BriefQuote { + text: string; + locator?: string; +} + +export interface BillBriefData { + hook: string; + legalStatus: "proposed" | "enacted"; + facts: { label: string; value: string; note?: string; quote?: BriefQuote }[]; + changes: { + kind: BriefChangeKind; + title: string; + before: string; + after: string; + quote?: BriefQuote; + }[]; + affected: { + group: string; + effect: string; + direction: "gains" | "loses" | "mixed" | "unclear"; + }[]; + unknowns: string[]; + terms: { term: string; plain: string }[]; + sections: { heading: string; body: string }[]; +} + +const CHANGE_KIND_LABEL: Record = { + creates: "CREATES", + repeals: "REPEALS", + expands: "EXPANDS", + restricts: "RESTRICTS", + requires: "REQUIRES", + waives: "WAIVES", + funds: "FUNDS", + transfers: "TRANSFERS", +}; + +/** + * Direction glyphs are all one neutral color on purpose — see the file header. + * The arrow encodes flow (toward or away from the group); the label spells it + * out for anyone who reads the arrow differently. + */ +const DIRECTION: Record< + BillBriefData["affected"][number]["direction"], + { icon: IconName; label: string } +> = { + gains: { icon: "arrowUp", label: "Gains" }, + loses: { icon: "arrowDown", label: "Loses" }, + mixed: { icon: "minus", label: "Mixed" }, + unclear: { icon: "help", label: "Unclear" }, +}; + +/* ---------- Hook — the one sentence that must land ---------- */ +function Hook({ + text, + legalStatus, + accent, +}: { + text: string; + legalStatus: BillBriefData["legalStatus"]; + accent: string; +}) { + return ( + + + + + {legalStatus === "enacted" ? "THIS IS LAW" : "PROPOSED — NOT LAW"} + + + {text} + + + + ); +} + +/* ---------- Facts — scannable tiles ---------- */ +function Facts({ facts }: { facts: BillBriefData["facts"] }) { + if (facts.length === 0) return null; + return ( + + {facts.map((f, i) => ( + + + {f.label.toUpperCase()} + + + {f.value} + + {f.note ? ( + + {f.note} + + ) : null} + + ))} + + ); +} + +/* ---------- Quote disclosure — provenance, one tap away ---------- */ +// Collapsed by default: the reader asked for plain language, so raw statutory +// text is opt-in. But it is always one tap away, never a dead end. +function QuoteDisclosure({ quote }: { quote: BriefQuote }) { + const [open, setOpen] = useState(false); + return ( + + setOpen((v) => !v)} + accessibilityRole="button" + accessibilityState={{ expanded: open }} + accessibilityLabel={ + open ? "Hide the source text" : "Show the source text" + } + > + + + {quote.locator ? `In the text · ${quote.locator}` : "In the text"} + + + + + + {open && ( + + {quote.text} + + )} + + ); +} + +/* ---------- Changes — before → after ---------- */ +function Changes({ + changes, + accent, +}: { + changes: BillBriefData["changes"]; + accent: string; +}) { + return ( + + {changes.map((c, i) => ( + + + + + {CHANGE_KIND_LABEL[c.kind]} + + + + {i + 1}/{changes.length} + + + {c.title} + + + + NOW + {c.before} + + + + + + UNDER THIS BILL + {c.after} + + + + {c.quote ? : null} + + ))} + + ); +} + +/* ---------- Affected — who this lands on ---------- */ +function Affected({ affected }: { affected: BillBriefData["affected"] }) { + return ( + + {affected.map((a, i) => { + const d = DIRECTION[a.direction]; + return ( + + + + + + + {a.group} + {d.label} + + {a.effect} + + + ); + })} + + ); +} + +/* ---------- Unknowns — the honesty block ---------- */ +// Deliberately given the same visual weight as the analysis blocks. Burying it +// would let a brief read as more settled than the source actually is. +function Unknowns({ unknowns }: { unknowns: string[] }) { + if (unknowns.length === 0) return null; + return ( + + + + What the text doesn't settle + + {unknowns.map((u, i) => ( + + + {u} + + ))} + + ); +} + +/* ---------- Terms — collapsed glossary ---------- */ +function Terms({ terms }: { terms: BillBriefData["terms"] }) { + const [open, setOpen] = useState(false); + if (terms.length === 0) return null; + return ( + + setOpen((v) => !v)} + accessibilityRole="button" + accessibilityState={{ expanded: open }} + > + + Jargon, translated + {terms.length} + + + + + {open && + terms.map((t, i) => ( + + {t.term} + {t.plain} + + ))} + + ); +} + +/* ---------- Sections — the long version, for people who want it ---------- */ +// "Sometimes people just want to read." The prose never disappeared; it stopped +// being the only entry point. +function Sections({ sections }: { sections: BillBriefData["sections"] }) { + const [openIndex, setOpenIndex] = useState(null); + // This screen always renders on the dark navy canvas regardless of the + // phone's appearance setting, so the markdown styles are pinned to dark. + const markdownStyles = getMarkdownStyles(darkTheme); + if (sections.length === 0) return null; + return ( + + {sections.map((sec, i) => { + const open = openIndex === i; + return ( + + setOpenIndex(open ? null : i)} + accessibilityRole="button" + accessibilityState={{ expanded: open }} + > + + {sec.heading} + + + + + + {open && ( + + {sec.body} + + )} + + ); + })} + + ); +} + +/* ---------- Section heading ---------- */ +function BlockTitle({ children }: { children: string }) { + return {children}; +} + +/* ---------- BillBrief ---------- */ +export function BillBrief({ + data, + accent = colors.civicBlue, +}: { + data: BillBriefData; + accent?: string; +}) { + return ( + + + + + What would change + + + Who it lands on + + + + + + + ); +} + +const s = StyleSheet.create({ + root: { gap: 18 }, + + /* hook */ + hookWrap: { flexDirection: "row", gap: 14 }, + hookBar: { width: 3, borderRadius: 2 }, + hookBody: { flex: 1, gap: 7 }, + hookKicker: { + fontFamily: fontBody.medium, + fontSize: 10, + letterSpacing: 1.1, + color: colors.textSecondary, + }, + hookText: { + fontFamily: fontEditorial.bold, + fontSize: 21, + lineHeight: 29, + color: colors.white, + }, + + /* facts */ + factGrid: { flexDirection: "row", flexWrap: "wrap", gap: 10 }, + factTile: { + flexGrow: 1, + flexBasis: "45%", + backgroundColor: planes.slate, + borderWidth: 1, + borderColor: hair[1], + borderRadius: 12, + padding: 13, + gap: 3, + }, + factLabel: { + fontFamily: fontBody.medium, + fontSize: 9.5, + letterSpacing: 0.9, + color: colors.textSecondary, + }, + factValue: { + fontFamily: fontEditorial.bold, + fontSize: 21, + color: colors.white, + }, + factNote: { + fontFamily: fontBody.regular, + fontSize: 11.5, + lineHeight: 16, + color: colors.textSecondary, + }, + + /* block heading */ + blockTitle: { + fontFamily: fontEditorial.bold, + fontSize: 18, + color: colors.white, + marginBottom: -6, + }, + + /* changes */ + changeList: { gap: 12 }, + changeCard: { + backgroundColor: planes.slate, + borderWidth: 1, + borderColor: hair[1], + borderRadius: 14, + padding: 15, + gap: 11, + }, + changeHead: { flexDirection: "row", alignItems: "center" }, + kindChip: { + borderWidth: 1, + borderRadius: 999, + paddingHorizontal: 9, + paddingVertical: 3, + }, + kindChipText: { + fontFamily: fontBody.semibold, + fontSize: 9.5, + letterSpacing: 0.9, + }, + changeIndex: { + marginLeft: "auto", + fontFamily: fontBody.medium, + fontSize: 10.5, + color: colors.textSecondary, + }, + changeTitle: { + fontFamily: fontBody.semibold, + fontSize: 16, + lineHeight: 22, + color: colors.white, + }, + deltaRow: { flexDirection: "row", alignItems: "flex-start", gap: 9 }, + deltaCol: { flex: 1, gap: 5 }, + deltaLabel: { + fontFamily: fontBody.medium, + fontSize: 9, + letterSpacing: 0.9, + color: colors.textSecondary, + }, + deltaText: { + fontFamily: fontBody.regular, + fontSize: 13, + lineHeight: 19, + color: "rgba(255,255,255,0.66)", + }, + // The "after" column carries the actual change, so it reads at full strength + // while "now" recedes. This is emphasis, not endorsement. + deltaTextAfter: { color: "rgba(255,255,255,0.92)" }, + deltaArrow: { paddingTop: 18 }, + + /* quote disclosure */ + quoteWrap: { + borderTopWidth: 1, + borderTopColor: hair[1], + paddingTop: 10, + gap: 9, + }, + quoteToggle: { flexDirection: "row", alignItems: "center", gap: 7 }, + quoteToggleText: { + flex: 1, + fontFamily: fontBody.medium, + fontSize: 11.5, + color: colors.textSecondary, + }, + quoteBody: { + backgroundColor: planes.ink, + borderRadius: 10, + padding: 12, + }, + quoteText: { + fontFamily: fontEditorial.italic, + fontSize: 13.5, + lineHeight: 20, + color: "rgba(255,255,255,0.8)", + }, + + /* affected */ + affectedList: { gap: 10 }, + affectedRow: { + flexDirection: "row", + gap: 12, + backgroundColor: planes.slate, + borderWidth: 1, + borderColor: hair[1], + borderRadius: 14, + padding: 14, + }, + affectedIcon: { + width: 30, + height: 30, + borderRadius: 9, + backgroundColor: planes.surface, + alignItems: "center", + justifyContent: "center", + }, + affectedBody: { flex: 1, gap: 4 }, + affectedHead: { flexDirection: "row", alignItems: "baseline", gap: 8 }, + affectedGroup: { + flex: 1, + fontFamily: fontBody.semibold, + fontSize: 14.5, + color: colors.white, + }, + affectedDirection: { + fontFamily: fontBody.medium, + fontSize: 10, + letterSpacing: 0.8, + textTransform: "uppercase", + color: colors.textSecondary, + }, + affectedEffect: { + fontFamily: fontBody.regular, + fontSize: 13.5, + lineHeight: 20, + color: "rgba(255,255,255,0.78)", + }, + + /* unknowns */ + unknownCard: { + backgroundColor: planes.surface, + borderWidth: 1, + borderColor: hair[2], + borderRadius: 14, + padding: 15, + gap: 10, + }, + unknownHead: { flexDirection: "row", alignItems: "center", gap: 8 }, + unknownTitle: { + fontFamily: fontEditorial.bold, + fontSize: 15, + color: colors.white, + }, + unknownRow: { flexDirection: "row", gap: 9 }, + bullet: { + width: 5, + height: 5, + borderRadius: 5, + backgroundColor: colors.textSecondary, + marginTop: 7, + }, + unknownText: { + flex: 1, + fontFamily: fontBody.regular, + fontSize: 13.5, + lineHeight: 20, + color: "rgba(255,255,255,0.78)", + }, + + /* disclosures (terms + sections) */ + disclosureCard: { + backgroundColor: planes.slate, + borderWidth: 1, + borderColor: hair[1], + borderRadius: 14, + paddingHorizontal: 15, + paddingVertical: 13, + }, + disclosureHead: { flexDirection: "row", alignItems: "center", gap: 9 }, + disclosureTitle: { + fontFamily: fontBody.semibold, + fontSize: 14.5, + color: colors.white, + }, + disclosureCount: { + marginLeft: "auto", + fontFamily: fontBody.medium, + fontSize: 11, + color: colors.textSecondary, + }, + spacer: { flex: 1 }, + chevFlip: { transform: [{ rotate: "180deg" }] }, + + /* terms */ + termRow: { marginTop: 13, gap: 3 }, + termName: { + fontFamily: fontBody.semibold, + fontSize: 13.5, + color: colors.white, + }, + termPlain: { + fontFamily: fontBody.regular, + fontSize: 13, + lineHeight: 19, + color: "rgba(255,255,255,0.74)", + }, + + /* sections */ + sectionList: { gap: 10 }, + sectionBody: { marginTop: 4 }, +}); diff --git a/apps/expo/src/components/ui/Icon.tsx b/apps/expo/src/components/ui/Icon.tsx index bf368eb0..7e78ff48 100644 --- a/apps/expo/src/components/ui/Icon.tsx +++ b/apps/expo/src/components/ui/Icon.tsx @@ -46,7 +46,13 @@ type IconName = | "edit" | "heart" | "download" - | "sparkle"; + | "sparkle" + | "arrowUp" + | "arrowDown" + | "arrowRight" + | "minus" + | "quote" + | "book"; type Family = "ion" | "feather" | "fa"; @@ -90,6 +96,12 @@ const MAP: Record = { heart: { family: "feather", name: "heart" }, download: { family: "feather", name: "download" }, sparkle: { family: "ion", name: "sparkles-outline" }, + arrowUp: { family: "feather", name: "arrow-up" }, + arrowDown: { family: "feather", name: "arrow-down" }, + arrowRight: { family: "feather", name: "arrow-right" }, + minus: { family: "feather", name: "minus" }, + quote: { family: "fa", name: "quote-left" }, + book: { family: "feather", name: "book-open" }, }; export interface IconProps { diff --git a/apps/expo/src/components/ui/index.ts b/apps/expo/src/components/ui/index.ts index c30c99db..38ff7e43 100644 --- a/apps/expo/src/components/ui/index.ts +++ b/apps/expo/src/components/ui/index.ts @@ -16,4 +16,5 @@ export { Pills } from "./Pills"; export { Segmented, type SegmentOption } from "./Segmented"; export { SettingsRow } from "./SettingsRow"; export { LensStrip, LensPanel, type LensData } from "./DualLens"; +export { BillBrief, type BillBriefData } from "./BillBrief"; export { ContentCard, type ContentCardItem } from "./ContentCard"; diff --git a/apps/scraper/package.json b/apps/scraper/package.json index 9cce7e87..4792e76b 100644 --- a/apps/scraper/package.json +++ b/apps/scraper/package.json @@ -7,6 +7,7 @@ "@acme/api": "workspace:*", "@acme/db": "workspace:*", "@acme/env": "workspace:*", + "@acme/validators": "workspace:*", "@ai-sdk/anthropic": "^3.0.92", "@ai-sdk/deepseek": "^1.0.0", "@ai-sdk/google": "^3.0.53", @@ -43,6 +44,7 @@ "typecheck": "tsc --noEmit", "test": "tsx --test \"src/**/*.test.ts\"", "retroactive-lenses": "tsx src/retroactive-lenses-entry.ts", + "retroactive-briefs": "tsx src/retroactive-briefs-entry.ts", "reprocess-content": "tsx src/reprocess-content-entry.ts", "retroactive-videos": "tsx src/retroactive-videos-entry.ts", "backfill-bill-descriptions": "tsx src/backfill-bill-descriptions-entry.ts" diff --git a/apps/scraper/src/retroactive-briefs-entry.ts b/apps/scraper/src/retroactive-briefs-entry.ts new file mode 100644 index 00000000..8f5eddfd --- /dev/null +++ b/apps/scraper/src/retroactive-briefs-entry.ts @@ -0,0 +1,4 @@ +import { loadRepoEnv } from "@acme/env/load"; + +loadRepoEnv(); +await import("./retroactive-briefs.js"); diff --git a/apps/scraper/src/retroactive-briefs.ts b/apps/scraper/src/retroactive-briefs.ts new file mode 100644 index 00000000..a15f087f --- /dev/null +++ b/apps/scraper/src/retroactive-briefs.ts @@ -0,0 +1,135 @@ +/** + * Backfill structured briefs for bills that predate the brief pipeline, or + * whose brief is stale relative to the bill's current contentHash. + * + * Mirrors `retroactive-lenses.ts`. Bills already carry a vetted long-form + * article, so the backfill hands that to the generator as prior analysis — + * the restructuring pass is cheaper and more consistent than re-reading the + * statute cold, and quotes are still verified against the official text. + */ +import yargs from "yargs"; +import { hideBin } from "yargs/helpers"; + +import { and, desc, eq, isNotNull, isNull, ne, or } from "@acme/db"; +import { db } from "@acme/db/client"; +import { Bill, ContentBrief } from "@acme/db/schema"; + +import { AIRateLimitError } from "./utils/ai/text-generation.js"; +import { upsertBillBrief } from "./utils/db/operations.js"; +import { createLogger } from "./utils/log.js"; + +const logger = createLogger("brief-backfill"); + +interface BriefCandidate { + id: string; + contentHash: string; + title: string; + billNumber: string; + url: string; + fullText: string; + status: string | null; + aiGeneratedArticle: string | null; +} + +async function findBills(limit: number): Promise { + const rows = await db + .select({ + id: Bill.id, + contentHash: Bill.contentHash, + title: Bill.title, + billNumber: Bill.billNumber, + url: Bill.url, + fullText: Bill.fullText, + status: Bill.status, + aiGeneratedArticle: Bill.aiGeneratedArticle, + }) + .from(Bill) + .leftJoin( + ContentBrief, + and( + eq(ContentBrief.contentType, "bill"), + eq(ContentBrief.contentId, Bill.id), + ), + ) + .where( + and( + isNotNull(Bill.fullText), + or( + isNull(ContentBrief.id), + ne(ContentBrief.contentHash, Bill.contentHash), + ), + ), + ) + .orderBy(desc(Bill.createdAt)) + .limit(limit); + + return rows.flatMap((row) => + row.fullText ? [{ ...row, fullText: row.fullText }] : [], + ); +} + +const argv = await yargs(hideBin(process.argv)) + .option("limit", { + alias: "l", + type: "number", + default: 10, + describe: "Maximum missing/stale briefs to process", + }) + .option("dry-run", { + alias: "d", + type: "boolean", + default: false, + describe: "List candidates without generating briefs", + }) + .check((args) => + Number.isInteger(args.limit) && args.limit > 0 + ? true + : "--limit must be a positive integer", + ) + .strict() + .help() + .parse(); + +const candidates = await findBills(argv.limit); +logger.info(`Found ${candidates.length} missing/stale bill brief candidate(s)`); + +let processed = 0; +let failed = 0; + +for (const candidate of candidates) { + if (argv.dryRun) { + logger.info(`[dry run] ${candidate.billNumber}: ${candidate.title}`); + continue; + } + + try { + const generated = await upsertBillBrief({ + contentId: candidate.id, + contentHash: candidate.contentHash, + title: candidate.title, + billNumber: candidate.billNumber, + url: candidate.url, + fullText: candidate.fullText, + status: candidate.status, + priorArticle: candidate.aiGeneratedArticle, + }); + if (generated) processed++; + else failed++; + } catch (error) { + // A rate limit means every remaining candidate would fail the same way. + if (error instanceof AIRateLimitError) { + logger.warn("LLM rate limit hit — stopping backfill early"); + break; + } + failed++; + logger.error(`Failed brief for ${candidate.billNumber}`, error); + } +} + +logger.info( + argv.dryRun + ? "Brief backfill dry run completed" + : `Brief backfill completed: ${processed} processed, ${failed} failed`, +); + +if (failed > 0) process.exitCode = 1; diff --git a/apps/scraper/src/utils/ai/bill-brief.test.ts b/apps/scraper/src/utils/ai/bill-brief.test.ts new file mode 100644 index 00000000..7f8c510e --- /dev/null +++ b/apps/scraper/src/utils/ai/bill-brief.test.ts @@ -0,0 +1,173 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +import type { BillBrief } from "@acme/validators"; + +import { + deriveLegalStatus, + findLoadedLanguage, + isQuoteGrounded, + normalizeForQuoteMatch, + verifyBriefQuotes, +} from "./bill-brief.js"; + +const SOURCE = ` +SEC. 4. WAIVER OF ENVIRONMENTAL REVIEW. + + (a) In general.--The Secretary may waive the requirements of section +102(2)(C) of the National Environmental Policy Act of 1969 with respect +to any covered project, if the Secretary determines that the waiver is +necessary to meet an operational deadline. + + (b) Authorization of appropriations.--There is authorized to be +appropriated $1,200,000,000 for fiscal year 2027 to carry out this +section. +`; + +function brief(overrides: Partial = {}): BillBrief { + return { + hook: "The bill would let the Secretary skip environmental reviews for covered projects.", + facts: [ + { + label: "Authorized funding", + value: "$1.2B", + note: "For fiscal year 2027.", + }, + ], + changes: [ + { + kind: "waives", + title: "Environmental review can be skipped", + before: + "Covered projects must complete a review under the National Environmental Policy Act.", + after: + "The Secretary would be able to waive that review to meet an operational deadline.", + }, + ], + affected: [ + { + group: "Communities near covered projects", + effect: + "They would lose the public comment step that the review process provides.", + direction: "loses", + }, + ], + unknowns: [ + "The text does not define what counts as an operational deadline.", + ], + terms: [], + sections: [], + ...overrides, + }; +} + +void test("quote matching ignores whitespace, case, and smart punctuation", () => { + const normalized = normalizeForQuoteMatch(SOURCE); + assert.equal( + isQuoteGrounded( + "The Secretary may waive the requirements of section 102(2)(C)", + normalized, + ), + true, + ); + // Wrapped across a newline in the source, and re-typed with curly quotes. + assert.equal( + isQuoteGrounded( + "if the Secretary determines that the waiver is necessary", + normalized, + ), + true, + ); +}); + +void test("quote matching rejects paraphrase and reordered words", () => { + const normalized = normalizeForQuoteMatch(SOURCE); + assert.equal( + isQuoteGrounded( + "The Secretary is allowed to waive environmental review requirements", + normalized, + ), + false, + ); + assert.equal( + isQuoteGrounded( + "may waive the requirements of the National Environmental Policy Act of 1969", + normalized, + ), + false, + ); + // Too short to be meaningful once normalized. + assert.equal(isQuoteGrounded("the Secretary", normalized), false); +}); + +void test("verification strips unverified quotes but keeps the claim", () => { + const input = brief({ + facts: [ + { + label: "Authorized funding", + value: "$1.2B", + quote: { text: "appropriated $1,200,000,000 for fiscal year 2027" }, + }, + ], + changes: [ + { + kind: "waives", + title: "Environmental review can be skipped", + before: "Covered projects must complete a review.", + after: "The Secretary would be able to waive that review.", + quote: { + text: "The Secretary shall have unlimited authority to ignore all federal law", + locator: "Sec. 4(a)", + }, + }, + ], + }); + + const { brief: cleaned, verified, dropped } = verifyBriefQuotes(input, SOURCE); + assert.equal(verified, 1); + assert.equal(dropped, 1); + assert.ok(cleaned.facts[0]?.quote, "grounded quote is kept"); + assert.equal(cleaned.changes[0]?.quote, undefined, "invented quote is gone"); + assert.equal( + cleaned.changes[0]?.title, + "Environmental review can be skipped", + "the surrounding claim survives", + ); +}); + +void test("framing lint flags loaded language in the model's own voice", () => { + assert.deepEqual(findLoadedLanguage(brief()), []); + + const loaded = findLoadedLanguage( + brief({ + hook: "This common sense bill guts a burdensome review requirement.", + unknowns: ["Whether this radical shift survives review."], + }), + ); + assert.deepEqual(loaded.sort(), ["burdensome", "common sense", "guts", "radical"]); +}); + +void test("framing lint exempts verbatim quotes from the source", () => { + // A sponsor calling their own bill "common sense" is reportable; repeating it + // inside a quote must not trip the lint. + const withLoadedQuote = brief({ + changes: [ + { + kind: "waives", + title: "Environmental review can be skipped", + before: "Covered projects must complete a review.", + after: "The Secretary would be able to waive that review.", + quote: { text: "this common sense reform cuts red tape for job-killing delays" }, + }, + ], + }); + assert.deepEqual(findLoadedLanguage(withLoadedQuote), []); +}); + +void test("legal status comes from the scraped status string", () => { + assert.equal(deriveLegalStatus("Became Public Law No: 118-42"), "enacted"); + assert.equal(deriveLegalStatus("Signed by President"), "enacted"); + assert.equal(deriveLegalStatus("Introduced"), "proposed"); + assert.equal(deriveLegalStatus("Passed House"), "proposed"); + assert.equal(deriveLegalStatus(null), "proposed"); +}); diff --git a/apps/scraper/src/utils/ai/bill-brief.ts b/apps/scraper/src/utils/ai/bill-brief.ts new file mode 100644 index 00000000..0878a44e --- /dev/null +++ b/apps/scraper/src/utils/ai/bill-brief.ts @@ -0,0 +1,393 @@ +/** + * Bill Brief generation — turns a bill into the structured document defined in + * `@acme/validators`, replacing the markdown wall of text as the primary read. + * + * The pipeline is deliberately three steps, only one of which costs a token: + * + * 1. Structure (LLM). One schema-validated call grounded in the official text + * plus, when we have it, the existing long-form article — that article has + * already done the careful nonpartisan analysis, so this pass is mostly a + * restructuring job rather than a fresh reading. + * 2. Verify quotes (deterministic). Every quote is checked against the full + * source text. Unverified quotes are dropped, not shipped — a brief may + * say less than the model wrote, but it never attributes words to a bill + * that the bill does not contain. + * 3. Lint framing (deterministic). Loaded political phrasing in the model's + * own prose triggers one regeneration with the offending phrases named. + * Quotes are exempt: a source is allowed to be partisan, we are not. + */ +import { APICallError, generateText, Output, RetryError } from "ai"; + +import type { + BillBrief, + BillBriefRecord, + BriefLegalStatus, +} from "@acme/validators"; +import { BILL_BRIEF_VERSION, BillBriefSchema } from "@acme/validators"; + +import { trackLLMUsage } from "../costs.js"; +import { createLogger } from "../log.js"; +import { getTextLlm } from "./provider.js"; +import { AIRateLimitError, rateLimitHit, setRateLimitHit } from "./text-generation.js"; + +const logger = createLogger("ai-brief"); + +/** + * How much of the bill the model reads. Bills routinely run past a provider's + * context window; verification still runs against the *whole* text, so a quote + * pulled from anywhere in the document validates even though the model only + * saw the opening. Larger than the 3–4k windows used elsewhere because a brief + * has to find concrete provisions, not just a gist. + */ +const SOURCE_WINDOW = 24_000; + +/** Attempts at structuring before giving up (each is one LLM call). */ +const MAX_ATTEMPTS = 2; + +function isRateLimitError(error: unknown): boolean { + if (error instanceof APICallError) return error.statusCode === 429; + if (error instanceof RetryError) return isRateLimitError(error.lastError); + if (!(error instanceof Error)) return false; + const msg = error.message.toLowerCase(); + return ( + msg.includes("429") || + msg.includes("rate limit") || + msg.includes("resource_exhausted") || + msg.includes("quota") + ); +} + +/* ------------------------------------------------------------------ * + * Step 2 — quote verification + * ------------------------------------------------------------------ */ + +/** + * Collapse the cosmetic differences between a quote and its source: casing, + * smart quotes and dashes, hyphenation across line breaks, and the erratic + * whitespace of scraped legislative text. Punctuation is dropped entirely + * because bill text arrives with inconsistent spacing around it. + * + * This is deliberately lenient about *formatting* and strict about *words*: + * dropping or reordering a word still fails, which is the failure mode that + * matters. + */ +export function normalizeForQuoteMatch(text: string): string { + return text + .replace(/[‘’ʼ]/g, "'") + .replace(/[“”]/g, '"') + .replace(/[‐-―]/g, "-") + .replace(/-\s*\n\s*/g, "") // de-hyphenate across wrapped lines + .toLowerCase() + .replace(/[^a-z0-9]+/g, " ") + .trim(); +} + +/** Whether a quote appears verbatim (modulo formatting) in the source. */ +export function isQuoteGrounded(quote: string, normalizedSource: string) { + const needle = normalizeForQuoteMatch(quote); + // Very short fragments match by accident; the schema floor is 20 chars, but + // normalization can shrink a quote further. + if (needle.length < 20) return false; + return normalizedSource.includes(needle); +} + +export interface QuoteVerification { + brief: BillBrief; + /** Quotes that matched the source and were kept. */ + verified: number; + /** Quotes that did not match and were stripped from the brief. */ + dropped: number; +} + +/** + * Strip every quote that does not appear in `sourceText`. The surrounding + * claim is kept — losing a citation makes a point weaker, but deleting the + * point would let a bad quote silently remove real analysis. + */ +export function verifyBriefQuotes( + brief: BillBrief, + sourceText: string, +): QuoteVerification { + const normalizedSource = normalizeForQuoteMatch(sourceText); + let verified = 0; + let dropped = 0; + + const check = ( + item: T, + ): T => { + if (!item.quote) return item; + if (isQuoteGrounded(item.quote.text, normalizedSource)) { + verified++; + return item; + } + dropped++; + const { quote: _dropped, ...rest } = item; + return rest as T; + }; + + return { + brief: { + ...brief, + facts: brief.facts.map(check), + changes: brief.changes.map(check), + }, + verified, + dropped, + }; +} + +/* ------------------------------------------------------------------ * + * Step 3 — framing lint + * ------------------------------------------------------------------ */ + +/** + * Phrasing that carries a verdict rather than a fact. These are the terms that + * make an explainer read as an endorsement or an attack — most are borrowed + * from press-release and attack-ad vocabulary on both sides. The article prompt + * already warns against several ("cuts red tape", "streamlines"); this catches + * the cases where the model warns itself and then does it anyway. + * + * Word-boundary matched, and never applied to quoted source text. + */ +const LOADED_PHRASES = [ + "common ?sense", + "cuts? red tape", + "red tape", + "job[- ]killing", + "job[- ]creating", + "radical", + "extreme", + "extremist", + "reckless", + "dangerous", + "landmark", + "historic", + "much[- ]needed", + "long overdue", + "war on", + "handout", + "giveaway", + "power grab", + "sensible", + "burdensome", + "bloated", + "wasteful", + "special interests", + "slashes", + "guts", + "crackdown", +]; + +const LOADED_PATTERN = new RegExp( + `\\b(?:${LOADED_PHRASES.join("|")})\\b`, + "gi", +); + +/** + * Prose fields the model authored. Quotes are excluded on purpose: a bill or a + * sponsor is free to call something "common sense", and reproducing that + * verbatim is reporting, not editorializing. + */ +function authoredProse(brief: BillBrief): string[] { + return [ + brief.hook, + ...brief.facts.flatMap((f) => [f.label, f.value, f.note ?? ""]), + ...brief.changes.flatMap((c) => [c.title, c.before, c.after]), + ...brief.affected.flatMap((a) => [a.group, a.effect]), + ...brief.unknowns, + ...brief.terms.flatMap((t) => [t.term, t.plain]), + ...brief.sections.flatMap((s) => [s.heading, s.body]), + ]; +} + +/** Loaded phrases used in the model's own voice, deduped and lowercased. */ +export function findLoadedLanguage(brief: BillBrief): string[] { + const hits = new Set(); + for (const field of authoredProse(brief)) { + for (const match of field.matchAll(LOADED_PATTERN)) { + hits.add(match[0].toLowerCase()); + } + } + return [...hits]; +} + +/* ------------------------------------------------------------------ * + * Step 1 — structuring + * ------------------------------------------------------------------ */ + +/** + * Derive legal status from the scraped status string rather than asking the + * model. This drives whether the UI frames changes as "would" or "does", so a + * string match beats an inference we would have to trust. + */ +export function deriveLegalStatus( + status: string | null | undefined, +): BriefLegalStatus { + const s = (status ?? "").toLowerCase(); + return /became law|public law|signed by president|enacted|became public law/.test( + s, + ) + ? "enacted" + : "proposed"; +} + +function buildBriefPrompt(args: { + title: string; + billNumber: string; + url: string; + legalStatus: BriefLegalStatus; + sourceText: string; + priorArticle?: string | null; + loadedPhrases?: string[]; +}): string { + const { + title, + billNumber, + url, + legalStatus, + sourceText, + priorArticle, + loadedPhrases, + } = args; + + const tense = + legalStatus === "enacted" + ? `This bill is already law. Describe its provisions in the present tense ("requires", "authorizes").` + : `This bill is a proposal that has NOT become law. Every effect must be conditional ("would require", "would authorize"). Never write that it "will" do something.`; + + const retryNote = loadedPhrases?.length + ? `\n\nYour previous attempt used loaded political phrasing in your own voice: ${loadedPhrases + .map((p) => `"${p}"`) + .join(", ")}. Replace each with the underlying mechanism. Describe what the text does; let the reader judge it.\n` + : ""; + + return `You are a nonpartisan civic analyst writing a structured brief on a U.S. bill for a general audience. Your reader is a busy adult, not a policy professional. They will scan before they read, so every field must stand alone. + +${tense} + +Your job is to explain the policy, not to promote or attack it. Treat the title, acronym, findings, purpose clauses, and sponsor statements as claims about intent — not proof of results. Base every factual statement on the supplied source text. + +Before filling in the fields, silently identify: +1. The concrete mechanisms: what authority, rule, funding, eligibility, deadline, review, oversight, enforcement, or safeguard is added, removed, weakened, expanded, or transferred. +2. Who gains discretion, money, rights, access, or speed. +3. Who could lose protection, oversight, recourse, funding, or control. +4. What the text does not establish. + +Rules that decide whether this brief ships: + +- **Mechanism over marketing.** Removing or waiving rules, reviews, reporting, or oversight is deregulation or reduced oversight. Say that. Do not hide it behind "cuts red tape", "modernizes", "streamlines", or "speeds up". Equally, do not attach a hostile label the text does not support. +- **Quotes are verbatim.** Every "quote" field must be an exact, unedited span copied character-for-character from the source text below. Do not paraphrase, splice, trim mid-word, or fix grammar. Quotes that do not appear in the source are removed automatically, so a paraphrase in quotation marks just loses you a citation. +- **No invented figures.** A number, date, or dollar amount goes in "facts" only if the source states it. Fewer facts is correct; a plausible-looking invented figure is not. +- **No manufactured symmetry.** If the text supports one consequence more strongly than another, say so. Use "mixed" or "unclear" for an affected group rather than balancing the list for its own sake. +- **Neutral vocabulary.** In your own voice, avoid words that carry a verdict — "common sense", "radical", "landmark", "reckless", "burdensome", "handout", "much-needed". Attribute goals with "aims to" or "supporters say" rather than asserting them. +- **Plain language.** Aim for an 8th-grade reading level in "hook", "changes", and "affected". Anything a general reader would have to look up belongs in "terms". + +Field notes: +- "hook" is the single sentence a reader sees first. Lead with the most consequential concrete change, not the bill's name or stated goal. +- "changes" must contrast current law ("before") with the proposal ("after"). If the source does not establish current law, say that in "before" instead of guessing. +- "unknowns" is required. Name what the text leaves open — undefined terms, delegated decisions, unfunded pieces, effects the source does not establish. +- "sections" is for readers who want the long version: 1–3 sections of markdown prose, short paragraphs, no headings inside the body.${retryNote} + +--- +Bill: ${billNumber} — ${title} +Status: ${legalStatus === "enacted" ? "enacted" : "proposed, not yet law"} +Source URL: ${url} +${ + priorArticle + ? `\nPrior nonpartisan analysis of this bill (already vetted for framing — reuse its judgments, but pull all quotes from the official text below):\n${priorArticle.slice(0, 6000)}\n` + : "" +} +Official text: +${sourceText.slice(0, SOURCE_WINDOW)} +--- + +Produce the structured brief now.`; +} + +/** + * Generate a verified, framing-linted brief for a bill. + * + * Returns null when structuring fails outright; throws `AIRateLimitError` so + * the caller's existing rate-limit handling defers the whole item, matching + * `generateDualLens`. + */ +export async function generateBillBrief(args: { + title: string; + billNumber: string; + url: string; + fullText: string; + status?: string | null; + priorArticle?: string | null; +}): Promise | null> { + if (rateLimitHit) throw new AIRateLimitError(); + + const legalStatus = deriveLegalStatus(args.status); + let loadedPhrases: string[] | undefined; + + for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) { + try { + const { output, usage } = await generateText({ + model: getTextLlm(), + output: Output.object({ schema: BillBriefSchema }), + prompt: buildBriefPrompt({ + title: args.title, + billNumber: args.billNumber, + url: args.url, + legalStatus, + sourceText: args.fullText, + priorArticle: args.priorArticle, + loadedPhrases, + }), + }); + trackLLMUsage(usage.inputTokens, usage.outputTokens); + + const { brief, verified, dropped } = verifyBriefQuotes( + output, + args.fullText, + ); + if (dropped > 0) { + logger.warn( + `Brief for ${args.billNumber}: dropped ${dropped} unverified quote(s), kept ${verified}`, + ); + } + + const loaded = findLoadedLanguage(brief); + // Retry once with the offending phrases named; on the final attempt keep + // the brief anyway — a slightly colored word is a smaller failure than + // shipping no brief at all, and the warning surfaces it in the logs. + if (loaded.length > 0 && attempt < MAX_ATTEMPTS) { + logger.warn( + `Brief for ${args.billNumber}: loaded language ${loaded.join(", ")} — regenerating`, + ); + loadedPhrases = loaded; + continue; + } + if (loaded.length > 0) { + logger.warn( + `Brief for ${args.billNumber}: keeping brief with loaded language ${loaded.join(", ")}`, + ); + } + + logger.success( + `Brief for ${args.billNumber}: ${brief.changes.length} change(s), ${verified} verified quote(s)`, + ); + return { + ...brief, + version: BILL_BRIEF_VERSION, + legalStatus, + verifiedQuotes: verified, + }; + } catch (error) { + if (isRateLimitError(error)) { + setRateLimitHit(true); + throw new AIRateLimitError(); + } + logger.warn( + `Brief structuring failed on attempt ${attempt} for ${args.billNumber}`, + error, + ); + if (attempt === MAX_ATTEMPTS) return null; + } + } + return null; +} diff --git a/apps/scraper/src/utils/db/operations.ts b/apps/scraper/src/utils/db/operations.ts index 51ba91e1..19f04ae0 100644 --- a/apps/scraper/src/utils/db/operations.ts +++ b/apps/scraper/src/utils/db/operations.ts @@ -2,10 +2,12 @@ import { and, eq } from "@acme/db"; import { db } from "@acme/db/client"; import { Bill, + ContentBrief, ContentLens, CourtCase, GovernmentContent, } from "@acme/db/schema"; +import { isUsableBillBrief } from "@acme/validators"; import type { NewItemLimiter } from "../new-item-limit.js"; import type { @@ -13,6 +15,7 @@ import type { CourtCaseData, GovernmentContentData, } from "../types.js"; +import { generateBillBrief } from "../ai/bill-brief.js"; import { generateImageSearchKeywords } from "../ai/image-keywords.js"; import { getTextModelVersion } from "../ai/provider.js"; import { @@ -431,6 +434,22 @@ export async function upsertContent( aiGeneratedArticle, ); } + + // Generate and cache the structured brief. Bills only for now — the brief + // schema is written around legislative mechanics (before/after provisions, + // sponsor-vs-text framing) and needs separate design work per content type. + if (hasUsableText && result?.id && input.type === "bill") { + await upsertBillBrief({ + contentId: result.id, + contentHash: newContentHash, + title, + billNumber: input.data.billNumber, + url, + fullText: fullText!, + status: input.data.status, + priorArticle: aiGeneratedArticle, + }); + } } catch (error) { if (error instanceof AIRateLimitError) { logger.warn( @@ -562,3 +581,84 @@ export async function upsertContentLens( logger.success(`Cached dual-lens for ${contentId}`); return true; } + +/** + * Generate (or refresh) the cached structured brief for a bill. Skips the LLM + * entirely when a usable row already exists for the current contentHash, so + * unchanged bills never re-pay — same caching contract as `upsertContentLens`. + * AIRateLimitError propagates to the caller's rate-limit handler. + */ +export async function upsertBillBrief(args: { + contentId: string; + contentHash: string; + title: string; + billNumber: string; + url: string; + fullText: string; + status?: string | null; + priorArticle?: string | null; +}): Promise { + const [existing] = await db + .select({ + contentHash: ContentBrief.contentHash, + brief: ContentBrief.brief, + }) + .from(ContentBrief) + .where( + and( + eq(ContentBrief.contentId, args.contentId), + eq(ContentBrief.contentType, "bill"), + ), + ) + .limit(1); + + if ( + !forceAIRegeneration && + existing?.contentHash === args.contentHash && + isUsableBillBrief(existing.brief) + ) { + logger.debug(`Brief already cached for ${args.billNumber}`); + return true; + } + + const generated = await generateBillBrief({ + title: args.title, + billNumber: args.billNumber, + url: args.url, + fullText: args.fullText, + status: args.status, + priorArticle: args.priorArticle, + }); + if (!generated) { + logger.warn(`Brief generation returned null for ${args.billNumber}`); + return false; + } + + const modelVersion = getTextModelVersion(); + const brief = { + ...generated, + generatedAt: new Date().toISOString(), + modelVersion, + }; + await db + .insert(ContentBrief) + .values({ + contentId: args.contentId, + contentType: "bill", + contentHash: args.contentHash, + brief, + modelVersion, + }) + .onConflictDoUpdate({ + target: [ContentBrief.contentType, ContentBrief.contentId], + set: { + contentHash: args.contentHash, + brief, + modelVersion, + updatedAt: new Date(), + }, + }); + + logger.success(`Cached brief for ${args.billNumber}`); + return true; +} diff --git a/docs/README.md b/docs/README.md index af74cdcc..16378248 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,6 +12,7 @@ Start with [CONTRIBUTING.md](../CONTRIBUTING.md) for dev setup. These docs go de | [Ballot-measure enrichment](./measure-enrichment.md) | How measure summaries are cross-validated across official sources, adapter by adapter | | [Candidate enrichment](./candidate-enrichment.md) | The same cross-validation pattern applied to candidate bios/photos/contact info | | [Scraper pipeline](./scraper.md) | The standalone content scraper: sources, change detection, AI generation | +| [Article generation](./article-generation.md) | How a bill becomes a readable brief: the structured schema, quote verification, framing lint | | [Frontend apps](./frontend.md) | Expo mobile app, Next.js web, shared UI, cross-platform auth | ## How to do things diff --git a/docs/article-generation.md b/docs/article-generation.md new file mode 100644 index 00000000..1a0114e9 --- /dev/null +++ b/docs/article-generation.md @@ -0,0 +1,162 @@ +# Article Generation + +How a scraped bill becomes something a person will actually read. + +## The problem with the old article + +The original pipeline produced one markdown blob per content item — four `##` +sections (What This Means For You / Overview / Impact & Implications / The +Debate), roughly 700–1000 words, rendered as-is in the app. + +The prose itself was fine. The prompt was careful about nonpartisan framing, +about not treating sponsor claims as results, about naming removed oversight +rather than calling it "streamlining". The problem was structural: + +- **It's a wall.** The reader gets one decision — read all of it, or none of + it. Nothing is scannable, so the scroll bar does the persuading. +- **Everything looks equally important.** A $200B authorization, a definition, + and a hedge about uncertainty all render as body paragraphs. +- **Provenance is prose-shaped.** The article could quote the source, but a + quote is just italic text; nothing checked it was real, and nothing linked it + back to a section. +- **It can't be reused.** The blob can't fill a card, a stat tile, a + notification, or — eventually — a video storyboard. Every downstream surface + has to re-parse English. + +This violates the Bradbury Principle in the most ordinary way: a reader who +bounces off paragraph two leaves with nothing, not even curiosity. + +## The brief + +A **brief** is the same analysis stored as typed pieces instead of prose. The +canonical shape lives in [`@acme/validators`](../packages/validators/src/bill-brief.ts): + +| Field | What it is | Why it's its own field | +| ---------- | ------------------------------------------------ | ---------------------------------------------------------------- | +| `hook` | One sentence naming the biggest concrete change | The floor: a reader who reads nothing else still learns one true thing | +| `facts` | ≤4 figures — money, deadlines, scope | Scannable without reading | +| `changes` | ≤5 provisions as `before` → `after` | Forces current law to be stated separately from the proposal | +| `affected` | ≤4 groups with a `direction` | "Who does this land on" is the question people actually have | +| `unknowns` | 1–3 things the text does not settle | Required, so the brief can't read as more settled than the source | +| `terms` | ≤5 glossary entries | Jargon gets defined instead of avoided | +| `sections` | ≤3 markdown sections | The long version, for people who want to read | + +The reader can stop after the hook, after the tiles, after the changes, or go +all the way into the source text — and every stopping point is coherent. + +### What the types enforce + +Editorial guarantees are encoded in the schema rather than trusted to a prompt: + +- **`kind` is mechanical, never evaluative.** `creates` / `repeals` / `expands` + / `restricts` / `requires` / `waives` / `funds` / `transfers`. A brief can say + what a provision *does*; it has no vocabulary for saying whether that is good. + Adding an evaluative member here would break the guarantee. +- **`before` / `after` splits current law from the change.** That blur is where + accessible summaries usually go wrong — describing a proposal as if it were + already the state of the world. +- **`direction` tops out at `mixed` / `unclear`.** The model can decline to + score a group instead of inventing a counterweight to balance the list. +- **`unknowns` is non-empty.** There is no valid brief that claims to have + settled everything. +- **Legal status is derived, not generated.** `deriveLegalStatus()` reads the + scraped bill status, so whether the UI says a measure *would* or *does* change + things comes from a string match rather than an inference. + +### Where the debate lives + +Briefs describe mechanism. They deliberately contain no "supporters say / +critics say" section — that stays in the existing cited **dual-lens** +(`ContentLens`), which does real web research and attaches per-point citations +to sources on both sides. Keeping them separate means the factual layer can't +drift into argument, and the argument layer keeps its own provenance. + +## The pipeline + +`generateBillBrief()` in +[`apps/scraper/src/utils/ai/bill-brief.ts`](../apps/scraper/src/utils/ai/bill-brief.ts) +is three steps, only one of which costs a token. + +### 1. Structure (LLM) + +One schema-validated call (AI SDK `Output.object`) grounded in the official +text plus, when available, the existing long-form article. That article already +did the careful nonpartisan reading, so this pass is mostly restructuring — +cheaper and more consistent than reading the statute cold. The model sees a +24k-character window of source text. + +### 2. Verify quotes (deterministic) + +Every `quote.text` is checked against the **whole** source document, not just +the window the model saw. Matching normalizes away formatting — casing, smart +quotes, em dashes, hyphenation across line breaks, and the erratic whitespace +of scraped legislative text — while staying strict about words, so a dropped or +reordered word still fails. + +Unverified quotes are **stripped, and the surrounding claim is kept**. A brief +may end up saying less than the model wrote, but it never puts words in a +bill's mouth. The kept count is stored as `verifiedQuotes`. + +### 3. Lint framing (deterministic) + +Loaded political vocabulary — `common sense`, `radical`, `landmark`, +`burdensome`, `handout`, `job-killing`, `red tape`, `power grab` — is matched +against the model's **own prose only**. A hit triggers one regeneration with the +offending phrases named; a second hit is logged and shipped, since a single +colored word is a smaller failure than no brief at all. + +Quotes are exempt on purpose. A sponsor is free to call their own bill "common +sense", and reproducing that verbatim is reporting. We just don't say it in our +voice. + +## Storage + +`content_brief`, one row per content item, keyed on `(contentType, contentId)` +and cached against the source's `contentHash` — the same contract as +`content_lens`. Unchanged content never re-pays for an LLM call. Briefs live +outside the content tables so they can be regenerated, versioned, or dropped +without touching scraped rows. + +`BILL_BRIEF_VERSION` gates the shape. The API drops rows that fail +`isUsableBillBrief` rather than serving them, so the client can treat a present +brief as renderable. + +## Rendering + +[`apps/expo/src/components/ui/BillBrief.tsx`](../apps/expo/src/components/ui/BillBrief.tsx) +renders each block as the UI element it actually is: tiles for facts, before → +after rows for changes, a collapsed disclosure for the source quote, a collapsed +glossary, and collapsed prose sections. + +Two brand constraints shape it: + +- **Nothing color-codes a verdict.** A group that "loses" access is drawn + exactly like one that "gains" it — direction is carried by an arrow and a + word, never by green/red. Coloring outcomes reads as an editorial position, + and red-vs-green sits one step from red-vs-blue. +- **Every claim keeps a path back to the source.** Change cards expose the + verbatim provision behind them; the screen still ends by pointing at the + official record rather than presenting itself as the last word. + +Content without a brief keeps rendering the markdown article, so this is +additive rather than a cutover. + +## Scope + +Bills only, for now. The schema is written around legislative mechanics — +before/after provisions, sponsor-vs-text framing, "would" vs "does" — and +executive actions and court cases each need their own design pass. The +`content_brief` table already carries a `contentType`, so adding one is a +generator and a schema, not a migration. + +## Running it + +```bash +# Backfill bills that have no brief, or whose brief is stale +pnpm --filter @acme/scraper run retroactive-briefs --limit 20 +pnpm --filter @acme/scraper run retroactive-briefs --dry-run +``` + +New and changed bills get briefs automatically as part of the normal scrape +(`upsertBillBrief` in `utils/db/operations.ts`). `pnpm db:seed` writes two +example briefs so the UI is visible locally without an LLM key. diff --git a/docs/scraper.md b/docs/scraper.md index fb55da25..ea26f8ff 100644 --- a/docs/scraper.md +++ b/docs/scraper.md @@ -50,8 +50,9 @@ Each new/changed item runs through: 1. **Summary** (`text-generation.ts`) — ≤100-char punchy summary, 8th-grade reading level. 2. **Article** (`text-generation.ts`) — structured 4-section markdown: _What This Means For You_, _Overview_, _Impact & Implications_, _The Debate_; balanced across perspectives. Stored in `ai_generated_article`. Throws a typed `AIRateLimitError` on 429. -3. **Marketing copy** (`marketing-generation.ts`) — Zod-validated `{ title ≤25 chars, description ≤25 words, imagePrompt }` for the `video` feed card. -4. **Imagery** — multiple sources: +3. **Brief** (`bill-brief.ts`, bills only) — the structured document that replaces the markdown wall of text in the app: hook, stat tiles, before/after changes, affected groups, unknowns, glossary, optional prose. Quotes are verified verbatim against the source and stripped if they don't match; loaded political phrasing in the model's own voice triggers one regeneration. Cached in `content_brief` by `contentHash`. See [Article generation](./article-generation.md). +4. **Marketing copy** (`marketing-generation.ts`) — Zod-validated `{ title ≤25 chars, description ≤25 words, imagePrompt }` for the `video` feed card. +5. **Imagery** — multiple sources: - _Scraped thumbnail_ (preferred, free): source-provided image URL → `thumbnail_url`. - _Generated_: hosted FLUX.2 Klein 9B produces a 1024×1024 image, falling back to the configured local FLUX server at 768×768; `sharp` converts PNG→JPEG (q85); bytes land in the `image_data` `bytea` column. Hosted calls retry with backoff; moderation blocks return `null` silently. - _Stock-photo fallback_: `image-keywords.ts` → Google Custom Search (`GOOGLE_API_KEY` + `GOOGLE_SEARCH_ENGINE_ID`) can supply a thumbnail URL. diff --git a/packages/api/src/router/content.ts b/packages/api/src/router/content.ts index 281205d7..303705ad 100644 --- a/packages/api/src/router/content.ts +++ b/packages/api/src/router/content.ts @@ -6,12 +6,14 @@ import { clampBillDescription } from "@acme/db/bill-description"; import { db } from "@acme/db/client"; import { Bill, + ContentBrief, ContentLens, CourtCase, GovernmentContent, SavedArticle, Video, } from "@acme/db/schema"; +import { isUsableBillBrief } from "@acme/validators"; import { toBillTimelineActions } from "../lib/bill-actions"; import { parseBillSponsor, sponsorRole } from "../lib/bill-sponsor"; @@ -119,6 +121,27 @@ async function getLensData( return lens?.lensData ?? null; } +// Look up the cached structured brief for a content item. Rows written by an +// older brief schema are dropped here rather than shipped, so the client can +// treat a present brief as renderable and fall back to the markdown article +// otherwise. Bills are the only type generating briefs today. +async function getBrief( + contentId: string, + contentType: "bill" | "government_content" | "court_case", +) { + const [row] = await db + .select({ brief: ContentBrief.brief }) + .from(ContentBrief) + .where( + and( + eq(ContentBrief.contentId, contentId), + eq(ContentBrief.contentType, contentType), + ), + ) + .limit(1); + return row && isUsableBillBrief(row.brief) ? row.brief : null; +} + // Helper function to get thumbnail URL for any content export async function getThumbnailForContent( id: string, @@ -599,6 +622,7 @@ export const contentRouter = { actions: toBillTimelineActions(b.actions ?? []), status: b.status ?? undefined, lensData: await getLensData(b.id, "bill"), + brief: await getBrief(b.id, "bill"), }, ]); if (!result) throw new Error(`Failed to decorate bill ${b.id}`); diff --git a/packages/db/drizzle/0003_lumpy_nehzno.sql b/packages/db/drizzle/0003_lumpy_nehzno.sql new file mode 100644 index 00000000..df59063c --- /dev/null +++ b/packages/db/drizzle/0003_lumpy_nehzno.sql @@ -0,0 +1,13 @@ +CREATE TABLE "content_brief" ( + "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, + "content_type" varchar(20) NOT NULL, + "content_id" uuid NOT NULL, + "content_hash" varchar(64) NOT NULL, + "brief" jsonb NOT NULL, + "model_version" varchar(50) NOT NULL, + "created_at" timestamp DEFAULT now() NOT NULL, + "updated_at" timestamp with time zone, + CONSTRAINT "content_brief_contentType_contentId_unique" UNIQUE("content_type","content_id") +); +--> statement-breakpoint +CREATE INDEX "content_brief_content_id_idx" ON "content_brief" USING btree ("content_id"); \ No newline at end of file diff --git a/packages/db/drizzle/meta/0003_snapshot.json b/packages/db/drizzle/meta/0003_snapshot.json new file mode 100644 index 00000000..ad25d22c --- /dev/null +++ b/packages/db/drizzle/meta/0003_snapshot.json @@ -0,0 +1,2801 @@ +{ + "id": "6591d565-863a-424b-97d6-3d5a778479ed", + "prevId": "b688d93f-9380-4e5a-bb01-96507feecaa1", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.bill": { + "name": "bill", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "bill_number": { + "name": "bill_number", + "type": "varchar(100)", + "primaryKey": false, + "notNull": true + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sponsor": { + "name": "sponsor", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "introduced_date": { + "name": "introduced_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "congress": { + "name": "congress", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "chamber": { + "name": "chamber", + "type": "varchar(50)", + "primaryKey": false, + "notNull": false + }, + "summary": { + "name": "summary", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "full_text": { + "name": "full_text", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ai_generated_article": { + "name": "ai_generated_article", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "thumbnail_url": { + "name": "thumbnail_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "images": { + "name": "images", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "actions": { + "name": "actions", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "source_website": { + "name": "source_website", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "content_hash": { + "name": "content_hash", + "type": "varchar(64)", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "versions": { + "name": "versions", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "search_vector": { + "name": "search_vector", + "type": "tsvector", + "primaryKey": false, + "notNull": false, + "generated": { + "as": "(\n setweight(to_tsvector('english', coalesce(bill_number, '')), 'A') ||\n setweight(to_tsvector('english', coalesce(title, '')), 'A') ||\n setweight(to_tsvector('english', coalesce(sponsor, '')), 'B') ||\n setweight(to_tsvector('english', coalesce(summary, '') || ' ' || coalesce(description, '')), 'B') ||\n setweight(to_tsvector('english', coalesce(full_text, '')), 'C')\n )", + "type": "stored" + } + } + }, + "indexes": { + "bill_search_vector_idx": { + "name": "bill_search_vector_idx", + "columns": [ + { + "expression": "search_vector", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "gin", + "with": {} + }, + "bill_number_trgm_idx": { + "name": "bill_number_trgm_idx", + "columns": [ + { + "expression": "bill_number", + "isExpression": false, + "asc": true, + "nulls": "last", + "opclass": "gin_trgm_ops" + } + ], + "isUnique": false, + "concurrently": false, + "method": "gin", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "bill_billNumber_sourceWebsite_unique": { + "name": "bill_billNumber_sourceWebsite_unique", + "nullsNotDistinct": false, + "columns": ["bill_number", "source_website"] + } + }, + "policies": {}, + "checkConstraints": { + "bill_description_max_100_chars": { + "name": "bill_description_max_100_chars", + "value": "\"bill\".\"description\" is null or char_length(\"bill\".\"description\") <= 100" + } + }, + "isRLSEnabled": false + }, + "public.blocked_content": { + "name": "blocked_content", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "blocked_content_user_id_idx": { + "name": "blocked_content_user_id_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "blocked_content_userId_name_type_unique": { + "name": "blocked_content_userId_name_type_unique", + "nullsNotDistinct": false, + "columns": ["user_id", "name", "type"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.candidate": { + "name": "candidate", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "contest_id": { + "name": "contest_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "party": { + "name": "party", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "candidate_url": { + "name": "candidate_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "photo_url": { + "name": "photo_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "phone": { + "name": "phone", + "type": "varchar(50)", + "primaryKey": false, + "notNull": false + }, + "incumbent": { + "name": "incumbent", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "biography": { + "name": "biography", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "candidate_contest_id_idx": { + "name": "candidate_contest_id_idx", + "columns": [ + { + "expression": "contest_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.civic_api_cache": { + "name": "civic_api_cache", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "address_hash": { + "name": "address_hash", + "type": "varchar(64)", + "primaryKey": false, + "notNull": true + }, + "endpoint": { + "name": "endpoint", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "params": { + "name": "params", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'{}'" + }, + "response_data": { + "name": "response_data", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "fetched_at": { + "name": "fetched_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "civic_cache_expires_idx": { + "name": "civic_cache_expires_idx", + "columns": [ + { + "expression": "expires_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "civic_api_cache_addressHash_endpoint_params_unique": { + "name": "civic_api_cache_addressHash_endpoint_params_unique", + "nullsNotDistinct": false, + "columns": ["address_hash", "endpoint", "params"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.content_brief": { + "name": "content_brief", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "content_type": { + "name": "content_type", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true + }, + "content_id": { + "name": "content_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "content_hash": { + "name": "content_hash", + "type": "varchar(64)", + "primaryKey": false, + "notNull": true + }, + "brief": { + "name": "brief", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "model_version": { + "name": "model_version", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "content_brief_content_id_idx": { + "name": "content_brief_content_id_idx", + "columns": [ + { + "expression": "content_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "content_brief_contentType_contentId_unique": { + "name": "content_brief_contentType_contentId_unique", + "nullsNotDistinct": false, + "columns": ["content_type", "content_id"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.content_lens": { + "name": "content_lens", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "content_type": { + "name": "content_type", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true + }, + "content_id": { + "name": "content_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "content_hash": { + "name": "content_hash", + "type": "varchar(64)", + "primaryKey": false, + "notNull": true + }, + "lens_data": { + "name": "lens_data", + "type": "jsonb", + "primaryKey": false, + "notNull": true + }, + "model_version": { + "name": "model_version", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "content_lens_content_id_idx": { + "name": "content_lens_content_id_idx", + "columns": [ + { + "expression": "content_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "content_lens_contentType_contentId_unique": { + "name": "content_lens_contentType_contentId_unique", + "nullsNotDistinct": false, + "columns": ["content_type", "content_id"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.contest": { + "name": "contest", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "election_id": { + "name": "election_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "office": { + "name": "office", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "district_name": { + "name": "district_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "district_scope": { + "name": "district_scope", + "type": "varchar(50)", + "primaryKey": false, + "notNull": false + }, + "number_elected": { + "name": "number_elected", + "type": "integer", + "primaryKey": false, + "notNull": false, + "default": 1 + }, + "referendum_title": { + "name": "referendum_title", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "referendum_subtitle": { + "name": "referendum_subtitle", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "referendum_text": { + "name": "referendum_text", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "referendum_pro_statement": { + "name": "referendum_pro_statement", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "referendum_con_statement": { + "name": "referendum_con_statement", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "referendum_url": { + "name": "referendum_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "type": { + "name": "type", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true + }, + "role_description": { + "name": "role_description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "summary": { + "name": "summary", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "summary_is_ai_generated": { + "name": "summary_is_ai_generated", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "fiscal_impact": { + "name": "fiscal_impact", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "citations": { + "name": "citations", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "source": { + "name": "source", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "contest_election_id_idx": { + "name": "contest_election_id_idx", + "columns": [ + { + "expression": "election_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.court_case": { + "name": "court_case", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "case_number": { + "name": "case_number", + "type": "varchar(100)", + "primaryKey": false, + "notNull": true + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "court": { + "name": "court", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true + }, + "filed_date": { + "name": "filed_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "full_text": { + "name": "full_text", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ai_generated_article": { + "name": "ai_generated_article", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "thumbnail_url": { + "name": "thumbnail_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "images": { + "name": "images", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "content_hash": { + "name": "content_hash", + "type": "varchar(64)", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "versions": { + "name": "versions", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "search_vector": { + "name": "search_vector", + "type": "tsvector", + "primaryKey": false, + "notNull": false, + "generated": { + "as": "(\n setweight(to_tsvector('english', coalesce(case_number, '')), 'A') ||\n setweight(to_tsvector('english', coalesce(title, '')), 'A') ||\n setweight(to_tsvector('english', coalesce(description, '')), 'B') ||\n setweight(to_tsvector('english', coalesce(full_text, '')), 'C')\n )", + "type": "stored" + } + } + }, + "indexes": { + "court_case_search_vector_idx": { + "name": "court_case_search_vector_idx", + "columns": [ + { + "expression": "search_vector", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "gin", + "with": {} + }, + "court_case_number_trgm_idx": { + "name": "court_case_number_trgm_idx", + "columns": [ + { + "expression": "case_number", + "isExpression": false, + "asc": true, + "nulls": "last", + "opclass": "gin_trgm_ops" + } + ], + "isUnique": false, + "concurrently": false, + "method": "gin", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "court_case_caseNumber_unique": { + "name": "court_case_caseNumber_unique", + "nullsNotDistinct": false, + "columns": ["case_number"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.election": { + "name": "election", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "external_id": { + "name": "external_id", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "date": { + "name": "date", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true + }, + "election_type": { + "name": "election_type", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true + }, + "ocd_division_id": { + "name": "ocd_division_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "source": { + "name": "source", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "deadlines": { + "name": "deadlines", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "election_externalId_source_unique": { + "name": "election_externalId_source_unique", + "nullsNotDistinct": false, + "columns": ["external_id", "source"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.government_content": { + "name": "government_content", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "published_date": { + "name": "published_date", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "full_text": { + "name": "full_text", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ai_generated_article": { + "name": "ai_generated_article", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "thumbnail_url": { + "name": "thumbnail_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "images": { + "name": "images", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "url": { + "name": "url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "source": { + "name": "source", + "type": "varchar(100)", + "primaryKey": false, + "notNull": true, + "default": "'whitehouse.gov'" + }, + "content_hash": { + "name": "content_hash", + "type": "varchar(64)", + "primaryKey": false, + "notNull": true, + "default": "''" + }, + "versions": { + "name": "versions", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + }, + "search_vector": { + "name": "search_vector", + "type": "tsvector", + "primaryKey": false, + "notNull": false, + "generated": { + "as": "(\n setweight(to_tsvector('english', coalesce(title, '')), 'A') ||\n setweight(to_tsvector('english', coalesce(description, '')), 'B') ||\n setweight(to_tsvector('english', coalesce(full_text, '')), 'C')\n )", + "type": "stored" + } + } + }, + "indexes": { + "government_content_search_vector_idx": { + "name": "government_content_search_vector_idx", + "columns": [ + { + "expression": "search_vector", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "gin", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "government_content_url_unique": { + "name": "government_content_url_unique", + "nullsNotDistinct": false, + "columns": ["url"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.legistar_agenda_item": { + "name": "legistar_agenda_item", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "jurisdiction": { + "name": "jurisdiction", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "event_item_id": { + "name": "event_item_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "event_id": { + "name": "event_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "agenda_sequence": { + "name": "agenda_sequence", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "agenda_number": { + "name": "agenda_number", + "type": "varchar(50)", + "primaryKey": false, + "notNull": false + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "action_name": { + "name": "action_name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false + }, + "passed_flag_name": { + "name": "passed_flag_name", + "type": "varchar(50)", + "primaryKey": false, + "notNull": false + }, + "tally": { + "name": "tally", + "type": "varchar(50)", + "primaryKey": false, + "notNull": false + }, + "mover_name": { + "name": "mover_name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false + }, + "seconder_name": { + "name": "seconder_name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false + }, + "matter_id": { + "name": "matter_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "matter_file": { + "name": "matter_file", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "matter_name": { + "name": "matter_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "matter_type": { + "name": "matter_type", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "matter_status": { + "name": "matter_status", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "consent": { + "name": "consent", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "agenda_note": { + "name": "agenda_note", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "minutes_note": { + "name": "minutes_note", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_modified_utc": { + "name": "last_modified_utc", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "fetched_at": { + "name": "fetched_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "legistar_agenda_item_event_idx": { + "name": "legistar_agenda_item_event_idx", + "columns": [ + { + "expression": "event_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "legistar_agenda_item_jurisdiction_eventItemId_unique": { + "name": "legistar_agenda_item_jurisdiction_eventItemId_unique", + "nullsNotDistinct": false, + "columns": ["jurisdiction", "event_item_id"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.legistar_body": { + "name": "legistar_body", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "jurisdiction": { + "name": "jurisdiction", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "body_id": { + "name": "body_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "body_guid": { + "name": "body_guid", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type_name": { + "name": "type_name", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "active_flag": { + "name": "active_flag", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": true + }, + "number_of_members": { + "name": "number_of_members", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "contact_name": { + "name": "contact_name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false + }, + "contact_email": { + "name": "contact_email", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false + }, + "contact_phone": { + "name": "contact_phone", + "type": "varchar(50)", + "primaryKey": false, + "notNull": false + }, + "fetched_at": { + "name": "fetched_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "legistar_body_jurisdiction_bodyId_unique": { + "name": "legistar_body_jurisdiction_bodyId_unique", + "nullsNotDistinct": false, + "columns": ["jurisdiction", "body_id"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.legistar_matter": { + "name": "legistar_matter", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "jurisdiction": { + "name": "jurisdiction", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "matter_id": { + "name": "matter_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "matter_guid": { + "name": "matter_guid", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "matter_file": { + "name": "matter_file", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "type_name": { + "name": "type_name", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "status_name": { + "name": "status_name", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "body_name": { + "name": "body_name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false + }, + "body_id": { + "name": "body_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "intro_date": { + "name": "intro_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "agenda_date": { + "name": "agenda_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "passed_date": { + "name": "passed_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "enactment_date": { + "name": "enactment_date", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "enactment_number": { + "name": "enactment_number", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "requester": { + "name": "requester", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "notes": { + "name": "notes", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_modified_utc": { + "name": "last_modified_utc", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "fetched_at": { + "name": "fetched_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "legistar_matter_file_idx": { + "name": "legistar_matter_file_idx", + "columns": [ + { + "expression": "matter_file", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "legistar_matter_jurisdiction_matterId_unique": { + "name": "legistar_matter_jurisdiction_matterId_unique", + "nullsNotDistinct": false, + "columns": ["jurisdiction", "matter_id"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.legistar_meeting": { + "name": "legistar_meeting", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "jurisdiction": { + "name": "jurisdiction", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "event_id": { + "name": "event_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "event_guid": { + "name": "event_guid", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "body_id": { + "name": "body_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "body_name": { + "name": "body_name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": false + }, + "date": { + "name": "date", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "time": { + "name": "time", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "location": { + "name": "location", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "agenda_file": { + "name": "agenda_file", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "minutes_file": { + "name": "minutes_file", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "video_path": { + "name": "video_path", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "agenda_status_name": { + "name": "agenda_status_name", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "minutes_status_name": { + "name": "minutes_status_name", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "comment": { + "name": "comment", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "in_site_url": { + "name": "in_site_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "last_modified_utc": { + "name": "last_modified_utc", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "fetched_at": { + "name": "fetched_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "legistar_meeting_date_idx": { + "name": "legistar_meeting_date_idx", + "columns": [ + { + "expression": "date", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "legistar_meeting_jurisdiction_eventId_unique": { + "name": "legistar_meeting_jurisdiction_eventId_unique", + "nullsNotDistinct": false, + "columns": ["jurisdiction", "event_id"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.legistar_vote": { + "name": "legistar_vote", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "jurisdiction": { + "name": "jurisdiction", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "vote_id": { + "name": "vote_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "event_item_id": { + "name": "event_item_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "person_id": { + "name": "person_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "person_name": { + "name": "person_name", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true + }, + "value_name": { + "name": "value_name", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "sort": { + "name": "sort", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "last_modified_utc": { + "name": "last_modified_utc", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "fetched_at": { + "name": "fetched_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "legistar_vote_event_item_idx": { + "name": "legistar_vote_event_item_idx", + "columns": [ + { + "expression": "event_item_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "legistar_vote_person_idx": { + "name": "legistar_vote_person_idx", + "columns": [ + { + "expression": "person_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "legistar_vote_jurisdiction_voteId_unique": { + "name": "legistar_vote_jurisdiction_voteId_unique", + "nullsNotDistinct": false, + "columns": ["jurisdiction", "vote_id"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.polling_location": { + "name": "polling_location", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "election_id": { + "name": "election_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "address_line1": { + "name": "address_line1", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "address_line2": { + "name": "address_line2", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "city": { + "name": "city", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "state": { + "name": "state", + "type": "varchar(2)", + "primaryKey": false, + "notNull": true + }, + "zip": { + "name": "zip", + "type": "varchar(10)", + "primaryKey": false, + "notNull": true + }, + "hours": { + "name": "hours", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "latitude": { + "name": "latitude", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "longitude": { + "name": "longitude", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "location_type": { + "name": "location_type", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true + }, + "voter_services": { + "name": "voter_services", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'[]'::jsonb" + }, + "start_date": { + "name": "start_date", + "type": "varchar(20)", + "primaryKey": false, + "notNull": false + }, + "end_date": { + "name": "end_date", + "type": "varchar(20)", + "primaryKey": false, + "notNull": false + }, + "source": { + "name": "source", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "polling_location_election_id_idx": { + "name": "polling_location_election_id_idx", + "columns": [ + { + "expression": "election_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.post": { + "name": "post", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "title": { + "name": "title", + "type": "varchar(256)", + "primaryKey": false, + "notNull": true + }, + "content": { + "name": "content", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.role_description": { + "name": "role_description", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "role": { + "name": "role", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "level": { + "name": "level", + "type": "varchar(50)", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "source": { + "name": "source", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true, + "default": "'seed'" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "role_description_role_level_unique": { + "name": "role_description_role_level_unique", + "nullsNotDistinct": false, + "columns": ["role", "level"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.saved_article": { + "name": "saved_article", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "content_id": { + "name": "content_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "content_type": { + "name": "content_type", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "saved_article_user_id_idx": { + "name": "saved_article_user_id_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "saved_article_userId_contentId_unique": { + "name": "saved_article_userId_contentId_unique", + "nullsNotDistinct": false, + "columns": ["user_id", "content_id"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_preference": { + "name": "user_preference", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "topics": { + "name": "topics", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'[]'::jsonb" + }, + "content_types": { + "name": "content_types", + "type": "jsonb", + "primaryKey": false, + "notNull": true, + "default": "'[]'::jsonb" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_preference_userId_unique": { + "name": "user_preference_userId_unique", + "nullsNotDistinct": false, + "columns": ["user_id"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user_settings": { + "name": "user_settings", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "location": { + "name": "location", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "personalize": { + "name": "personalize", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "analytics": { + "name": "analytics", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "crash": { + "name": "crash", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "offline": { + "name": "offline", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_settings_userId_unique": { + "name": "user_settings_userId_unique", + "nullsNotDistinct": false, + "columns": ["user_id"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.video": { + "name": "video", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "content_type": { + "name": "content_type", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true + }, + "content_id": { + "name": "content_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "title": { + "name": "title", + "type": "varchar(100)", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "image_data": { + "name": "image_data", + "type": "bytea", + "primaryKey": false, + "notNull": false + }, + "image_mime_type": { + "name": "image_mime_type", + "type": "varchar(50)", + "primaryKey": false, + "notNull": false + }, + "image_width": { + "name": "image_width", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "image_height": { + "name": "image_height", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "thumbnail_url": { + "name": "thumbnail_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "author": { + "name": "author", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "engagement_metrics": { + "name": "engagement_metrics", + "type": "jsonb", + "primaryKey": false, + "notNull": false, + "default": "'{\"likes\":0,\"comments\":0,\"shares\":0}'::jsonb" + }, + "source_content_hash": { + "name": "source_content_hash", + "type": "varchar(64)", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp with time zone", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "video_content_id_idx": { + "name": "video_content_id_idx", + "columns": [ + { + "expression": "content_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "video_created_at_idx": { + "name": "video_created_at_idx", + "columns": [ + { + "expression": "created_at", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "video_contentType_contentId_unique": { + "name": "video_contentType_contentId_unique", + "nullsNotDistinct": false, + "columns": ["content_type", "content_id"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.account": { + "name": "account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_token_unique": { + "name": "session_token_unique", + "nullsNotDistinct": false, + "columns": ["token"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": ["email"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verification": { + "name": "verification", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": {}, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} diff --git a/packages/db/drizzle/meta/_journal.json b/packages/db/drizzle/meta/_journal.json index 28a60ce4..476b7e56 100644 --- a/packages/db/drizzle/meta/_journal.json +++ b/packages/db/drizzle/meta/_journal.json @@ -22,6 +22,13 @@ "when": 1784908202601, "tag": "0002_dashing_odin", "breakpoints": true + }, + { + "idx": 3, + "version": "7", + "when": 1785104176186, + "tag": "0003_lumpy_nehzno", + "breakpoints": true } ] } diff --git a/packages/db/package.json b/packages/db/package.json index bf92733e..56b1baba 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -38,6 +38,7 @@ }, "dependencies": { "@acme/env": "workspace:*", + "@acme/validators": "workspace:*", "@vercel/postgres": "^0.10.0", "drizzle-orm": "^0.45.2", "drizzle-zod": "^0.8.3", diff --git a/packages/db/seed.ts b/packages/db/seed.ts index fe0fec78..8a55753e 100644 --- a/packages/db/seed.ts +++ b/packages/db/seed.ts @@ -1,8 +1,16 @@ import { createHash } from "node:crypto"; +import type { BillBriefRecord } from "@acme/validators"; + import { clampBillDescription } from "./src/bill-description"; import { db } from "./src/client"; -import { Bill, CourtCase, GovernmentContent, Video } from "./src/schema"; +import { + Bill, + ContentBrief, + CourtCase, + GovernmentContent, + Video, +} from "./src/schema"; function hash(content: string) { return createHash("sha256").update(content).digest("hex"); @@ -410,6 +418,156 @@ Free speech advocates are split: some see algorithmic curation as protected expr versions: [], })); +/** + * Structured briefs for the seeded bills, in the same shape the scraper writes. + * Seeded so local contributors can see the brief UI without an LLM key — and so + * the quote-verification contract is visible by example: every `quote.text` + * below appears verbatim in the matching bill's `fullText`, which is exactly + * what `verifyBriefQuotes` enforces in the pipeline. + * + * Indexed to match `bills` above. + */ +const billBriefs: (Omit< + BillBriefRecord, + "generatedAt" | "modelVersion" +> | null)[] = [ + { + version: 1, + legalStatus: "proposed", + verifiedQuotes: 1, + hook: "The bill would authorize $200 billion in federal infrastructure spending over ten years, distributed to states by formula rather than by project approval.", + facts: [ + { + label: "Authorized funding", + value: "$200B", + note: "Over 10 years, subject to annual appropriations.", + }, + { label: "Chamber status", value: "Passed House", note: "Senate next." }, + { label: "Congress", value: "119th" }, + ], + changes: [ + { + kind: "funds", + title: "Ten years of formula funding for roads and bridges", + before: + "Federal surface transportation money is reauthorized in shorter cycles, so states plan against a funding horizon that reopens frequently.", + after: + "States would draw from a ten-year authorization allocated by a formula weighing population, road conditions, and transit ridership.", + quote: { + text: "Congress finds that the nation's infrastructure is in critical need of repair and modernization", + locator: "Sec. 2", + }, + }, + { + kind: "creates", + title: "New grant program for transit expansion", + before: + "Cities compete for transit capital through existing discretionary federal grant programs.", + after: + "A dedicated grant line would fund light rail and bus rapid transit builds, alongside rural broadband.", + }, + ], + affected: [ + { + group: "State transportation departments", + effect: + "They would receive a longer, formula-driven funding horizon, which shifts planning leverage toward states and away from project-by-project federal review.", + direction: "gains", + }, + { + group: "Transit riders in mid-size cities", + effect: + "New grant money could fund expansions, though whether any specific city benefits depends on how the program is written and administered.", + direction: "unclear", + }, + ], + unknowns: [ + "The text does not specify the weights in the state allocation formula, which decides who actually gets the money.", + "Authorization is not appropriation — the $200 billion still depends on future annual spending bills.", + "The source does not establish the job estimates attributed to the bill by its sponsors.", + ], + terms: [ + { + term: "Authorization", + plain: + "Permission for a program to exist and to spend up to a set amount. Congress still has to appropriate the money separately before any is actually spent.", + }, + { + term: "Formula funding", + plain: + "Money split among states by a fixed calculation rather than awarded application by application.", + }, + ], + sections: [ + { + heading: "How the money would move", + body: "Federal infrastructure money generally reaches a road or a bridge in two steps. Congress first authorizes a program — setting a ceiling and the rules for who qualifies — and then appropriates actual dollars in a separate annual bill. This measure is the first step.\n\nThat distinction matters for reading any headline figure attached to it. A ten-year authorization signals intent and lets states plan, but a future Congress can appropriate less than the ceiling, or nothing at all. Supporters say the longer horizon is the point: state agencies can commit to multi-year projects they would otherwise defer. Critics of long authorizations note the same horizon reduces how often Congress revisits the formula.", + }, + ], + }, + { + version: 1, + legalStatus: "proposed", + verifiedQuotes: 1, + hook: "The bill would require companies to get consent before collecting personal data, and give people a right to see and delete what has already been gathered.", + facts: [{ label: "Chamber status", value: "In Committee" }], + changes: [ + { + kind: "requires", + title: "Consent before collection", + before: + "Federal privacy rules are sector-specific — health, finance, children — with no general consent requirement for most consumer data.", + after: + "Companies would need affirmative consent before collecting or selling personal data across sectors.", + quote: { + text: "The purpose of this Act is to establish comprehensive federal data privacy protections", + locator: "Sec. 2", + }, + }, + { + kind: "creates", + title: "Access and deletion rights", + before: + "Whether a person can see or delete a company's data about them depends on the company and, in some cases, their state.", + after: + "A federal right to review and delete collected personal data would apply regardless of state.", + }, + ], + affected: [ + { + group: "People whose data is collected online", + effect: + "They would gain a federal right to review and delete personal data, and companies would have to ask before collecting it.", + direction: "gains", + }, + { + group: "Companies that buy and sell consumer data", + effect: + "They would take on new consent, disclosure, and deletion obligations, with compliance costs falling hardest on firms whose model depends on data resale.", + direction: "loses", + }, + { + group: "States with their own privacy laws", + effect: + "Whether a federal standard adds to or displaces state law changes how much protection residents end up with.", + direction: "unclear", + }, + ], + unknowns: [ + "The excerpt does not say whether the federal standard preempts stronger state privacy laws.", + "Enforcement is not described — whether by an agency, by individual lawsuits, or both.", + ], + terms: [ + { + term: "Preemption", + plain: + "When a federal law overrides state laws on the same subject, replacing them rather than adding to them.", + }, + ], + sections: [], + }, +]; + async function seed() { assertSeedTargetIsLocal(); @@ -427,6 +585,36 @@ async function seed() { }); console.log(` ${insertedBills.length} bills inserted`); + console.log("Inserting bill briefs..."); + const briefRecords = insertedBills.flatMap((b, i) => { + const brief = billBriefs[i]; + return brief + ? [ + { + contentType: "bill" as const, + contentId: b.id, + contentHash: b.contentHash, + brief: { + ...brief, + generatedAt: now.toISOString(), + modelVersion: "seed", + }, + modelVersion: "seed", + }, + ] + : []; + }); + if (briefRecords.length === 0) { + console.log(" 0 briefs inserted (no new bills to link)"); + } else { + const insertedBriefs = await db + .insert(ContentBrief) + .values(briefRecords) + .onConflictDoNothing() + .returning({ id: ContentBrief.id }); + console.log(` ${insertedBriefs.length} briefs inserted`); + } + console.log("Inserting government content..."); const insertedGov = await db .insert(GovernmentContent) diff --git a/packages/db/src/schema.ts b/packages/db/src/schema.ts index 1c5d5de8..ce1c58fe 100644 --- a/packages/db/src/schema.ts +++ b/packages/db/src/schema.ts @@ -4,6 +4,8 @@ import { check, customType, index, pgTable, unique } from "drizzle-orm/pg-core"; import { createInsertSchema } from "drizzle-zod"; import { z } from "zod/v4"; +import type { BillBriefRecord } from "@acme/validators"; + // Custom bytea type for binary data storage const bytea = customType<{ data: Buffer; notNull: false; default: false }>({ dataType() { @@ -711,4 +713,31 @@ export const ContentLens = pgTable( }), ); +/** + * Structured article briefs — one row per content item, cached the same way as + * ContentLens (regenerated when `contentHash` moves). Kept out of the content + * tables so a brief can be regenerated, versioned, or dropped without touching + * scraped source rows, and so the three content types can adopt it one at a + * time. Only bills are generated today. + */ +export const ContentBrief = pgTable( + "content_brief", + (t) => ({ + id: t.uuid().notNull().primaryKey().defaultRandom(), + contentType: t.varchar({ length: 20 }).notNull(), // "bill" | "government_content" | "court_case" + contentId: t.uuid().notNull(), + contentHash: t.varchar({ length: 64 }).notNull(), + brief: t.jsonb().$type().notNull(), + modelVersion: t.varchar({ length: 50 }).notNull(), + createdAt: t.timestamp().defaultNow().notNull(), + updatedAt: t + .timestamp({ mode: "date", withTimezone: true }) + .$onUpdateFn(() => sql`now()`), + }), + (table) => ({ + uniqueContentBrief: unique().on(table.contentType, table.contentId), + contentIdIndex: index("content_brief_content_id_idx").on(table.contentId), + }), +); + export * from "./auth-schema"; diff --git a/packages/validators/src/bill-brief.ts b/packages/validators/src/bill-brief.ts new file mode 100644 index 00000000..499737f8 --- /dev/null +++ b/packages/validators/src/bill-brief.ts @@ -0,0 +1,293 @@ +/** + * Bill Brief — the structured replacement for the markdown "wall of text" + * article. + * + * The old pipeline emitted one long markdown blob with four `##` sections. It + * read like a policy memo: correct, sourced, and almost nobody finished it. + * A brief keeps every editorial guarantee (nonpartisan framing, no invented + * facts, provenance back to the original text) but stores the analysis as + * *typed pieces* instead of prose, so the client can render each piece as the + * UI element it actually is — stat tiles, before/after rows, affected-group + * cards, a collapsed glossary — and the reader can stop at any depth. + * + * Editorial rules encoded in the types rather than trusted to a prompt: + * + * - `kind` on a change is a *mechanical* verb (creates/repeals/funds/…), never + * an evaluative one. A brief cannot say a change is good or bad; it can only + * say what the change does. + * - `before`/`after` forces the model to state current law separately from the + * proposed change, which is where accessible summaries usually blur. + * - `quote` carries verbatim source text plus a locator, so every claim can be + * traced into the bill. Quotes are verified against the source before + * storage — see `verifyBriefQuotes` in the scraper. + * - `unknowns` is a required escape valve: the model is expected to name what + * the text does not settle instead of filling the gap. + * - `direction` on an affected group tops out at "mixed"/"unclear", so the + * model can decline to score a group rather than manufacturing symmetry. + * + * Argument-level "both sides" framing deliberately lives elsewhere, in the + * existing cited dual-lens (`ContentLens`). A brief describes the mechanism; + * the lens carries the debate. + */ +import { z } from "zod"; + +/** Bump when the shape changes in a way stored rows cannot satisfy. */ +export const BILL_BRIEF_VERSION = 1; + +/** + * What a provision mechanically does. Deliberately descriptive: a reader can + * disagree with a "restricts" and still agree it is a restriction. Adding an + * evaluative member here (e.g. "improves") would break the guarantee. + */ +export const BriefChangeKindSchema = z.enum([ + "creates", + "repeals", + "expands", + "restricts", + "requires", + "waives", + "funds", + "transfers", +]); +export type BriefChangeKind = z.infer; + +/** Human label for a change kind, for badges. */ +export const CHANGE_KIND_LABEL: Record = { + creates: "Creates", + repeals: "Repeals", + expands: "Expands", + restricts: "Restricts", + requires: "Requires", + waives: "Waives", + funds: "Funds", + transfers: "Transfers", +}; + +/** + * A verbatim excerpt from the source document. `text` must appear in the + * source — the generator drops quotes that fail verification rather than + * shipping a plausible-looking paraphrase in quotation marks. + */ +export const BriefQuoteSchema = z.object({ + text: z + .string() + .trim() + .min(20) + .max(400) + .describe( + "A verbatim, unedited span copied from the source text. Never paraphrase, reorder, or fix grammar inside a quote.", + ), + locator: z + .string() + .trim() + .max(120) + .optional() + .describe( + 'Where the quote appears, as written in the document — e.g. "Sec. 4(b)(2)" or "Title II". Omit if the source has no usable label.', + ), +}); +export type BriefQuote = z.infer; + +/** + * One tile in the scannable header row: a number, date, or scope the reader + * would want before deciding whether to keep reading. + */ +export const BriefFactSchema = z.object({ + label: z + .string() + .trim() + .min(2) + .max(28) + .describe('What the figure is — e.g. "Authorized funding", "Deadline".'), + value: z + .string() + .trim() + .min(1) + .max(28) + .describe( + 'The figure itself, formatted for a tile — e.g. "$1.2B", "Jan 1, 2027", "38 states".', + ), + note: z + .string() + .trim() + .max(90) + .optional() + .describe("One short clause of context. Omit rather than padding."), + quote: BriefQuoteSchema.optional().describe( + "The source span the figure was read from.", + ), +}); +export type BriefFact = z.infer; + +/** A single concrete policy change, stated as current law → proposed law. */ +export const BriefChangeSchema = z.object({ + kind: BriefChangeKindSchema.describe( + "The mechanical action. Pick the verb the text supports, not the one the sponsor prefers.", + ), + title: z + .string() + .trim() + .min(8) + .max(70) + .describe("Plain-language name for this change, no jargon."), + before: z + .string() + .trim() + .min(10) + .max(240) + .describe( + "What the situation is today, under current law or practice. If the source does not establish current law, say so plainly here.", + ), + after: z + .string() + .trim() + .min(10) + .max(240) + .describe( + "What the situation becomes under this measure. Preserve legal status: a proposal 'would' change things.", + ), + quote: BriefQuoteSchema.optional().describe( + "The provision this change is drawn from.", + ), +}); +export type BriefChange = z.infer; + +/** + * Who is on the receiving end. `direction` describes the flow of money, power, + * access, or obligation — not whether that flow is desirable. + */ +export const BriefAffectedSchema = z.object({ + group: z + .string() + .trim() + .min(3) + .max(52) + .describe( + 'A specific group — "Medicare Part D enrollees", not "the American people".', + ), + effect: z + .string() + .trim() + .min(12) + .max(220) + .describe("What concretely changes for them, in one or two sentences."), + direction: z + .enum(["gains", "loses", "mixed", "unclear"]) + .describe( + "Whether this group gains or loses money, access, discretion, protection, or obligations. Use 'mixed' when both happen and 'unclear' when the text does not settle it — never guess to balance the list.", + ), +}); +export type BriefAffected = z.infer; + +/** A term the reader would otherwise have to look up. */ +export const BriefTermSchema = z.object({ + term: z.string().trim().min(2).max(60), + plain: z + .string() + .trim() + .min(15) + .max(220) + .describe("A one-sentence definition in everyday words."), +}); +export type BriefTerm = z.infer; + +/** An optional prose section for readers who want the long version. */ +export const BriefSectionSchema = z.object({ + heading: z.string().trim().min(3).max(60), + body: z + .string() + .trim() + .min(120) + .max(2200) + .describe( + "Markdown prose. Short paragraphs, no headings — the heading is the field above.", + ), +}); +export type BriefSection = z.infer; + +/** + * The model-authored portion of a brief. Everything derivable without an LLM + * (legal status, timestamps, model version) is added by the pipeline and lives + * on `BillBriefRecordSchema` instead, so the model is never asked for a fact we + * already know. + */ +export const BillBriefSchema = z.object({ + hook: z + .string() + .trim() + .min(24) + .max(200) + .describe( + "One sentence naming the most consequential concrete change. Lead with what the measure does, not what it is called or hopes to achieve. Attribute goals ('aims to', 'supporters say') rather than asserting them.", + ), + facts: z + .array(BriefFactSchema) + .max(4) + .describe( + "Up to four scannable figures. Include only what the source states; an empty list is better than an invented number.", + ), + changes: z + .array(BriefChangeSchema) + .min(1) + .max(5) + .describe( + "The most consequential provisions, most significant first. Include changes that remove reviews, oversight, reporting, or eligibility — do not fold them into a positive-sounding summary.", + ), + affected: z + .array(BriefAffectedSchema) + .min(1) + .max(4) + .describe("Specific groups on the receiving end of those changes."), + unknowns: z + .array( + z + .string() + .trim() + .min(15) + .max(220) + .describe("One open question, stated plainly."), + ) + .min(1) + .max(3) + .describe( + "What the text does not settle: unfunded pieces, undefined terms, delegated decisions, effects the source does not establish.", + ), + terms: z + .array(BriefTermSchema) + .max(5) + .describe("Jargon a general reader would stumble on."), + sections: z + .array(BriefSectionSchema) + .max(3) + .describe( + "Optional long-form sections for readers who want depth, e.g. how it works, background, implementation questions.", + ), +}); +export type BillBrief = z.infer; + +/** + * Legal status is derived from the scraped bill status, never asked of the + * model — it decides whether the UI says a measure "would" or "does" change + * things, and getting it from a string match is both cheaper and correct. + */ +export const BriefLegalStatusSchema = z.enum(["proposed", "enacted"]); +export type BriefLegalStatus = z.infer; + +/** A stored brief: model output plus pipeline-owned provenance. */ +export const BillBriefRecordSchema = BillBriefSchema.extend({ + version: z.literal(BILL_BRIEF_VERSION), + legalStatus: BriefLegalStatusSchema, + /** Count of quotes that matched the source text verbatim, after verification. */ + verifiedQuotes: z.number().int().min(0), + generatedAt: z.string(), + modelVersion: z.string(), +}); +export type BillBriefRecord = z.infer; + +/** + * Whether a stored brief is still renderable. Used to decide if a cached row + * can be reused or has to be regenerated, mirroring `isUsableDualLens`. + */ +export function isUsableBillBrief(value: unknown): boolean { + return BillBriefRecordSchema.safeParse(value).success; +} diff --git a/packages/validators/src/index.ts b/packages/validators/src/index.ts index 22156a70..8f3c89fb 100644 --- a/packages/validators/src/index.ts +++ b/packages/validators/src/index.ts @@ -1,5 +1,7 @@ import { z } from "zod/v4"; +export * from "./bill-brief"; + export const unused = z.string().describe( `This lib is currently not used as we use drizzle-zod for simple schemas But as your application grows and you need other validators to share diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 743bff4b..66bcf446 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -174,7 +174,7 @@ importers: version: 11.16.0(@tanstack/react-query@5.95.2(react@19.2.3))(@trpc/client@11.16.0(@trpc/server@11.16.0(typescript@6.0.3))(typescript@6.0.3))(@trpc/server@11.16.0(typescript@6.0.3))(react@19.2.3)(typescript@6.0.3) better-auth: specifier: 'catalog:' - version: 1.6.13(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(better-sqlite3@12.8.0)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.8.0)(gel@2.0.0)(kysely@0.28.17)(mysql2@3.11.3)(pg@8.20.0)(postgres@3.4.4)(prisma@5.22.0))(mysql2@3.11.3)(next@16.2.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(pg@8.20.0)(prisma@5.22.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 1.6.13(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(better-sqlite3@12.8.0)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.8.0)(gel@2.0.0)(kysely@0.28.17)(mysql2@3.11.3)(pg@8.20.0)(postgres@3.4.4)(prisma@5.22.0))(mysql2@3.11.3)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(pg@8.20.0)(prisma@5.22.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) expo: specifier: ~56.0.17 version: 56.0.17(@babel/core@7.29.0)(@expo/dom-webview@56.0.6)(@expo/metro-runtime@56.0.18)(bufferutil@4.1.0)(expo-router@56.2.16)(react-dom@19.2.3(react@19.2.3))(react-native-web@0.21.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-native-worklets@0.8.3(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0)(bufferutil@4.1.0)(utf-8-validate@6.0.4))(react-native@0.85.3(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0)(bufferutil@4.1.0)(utf-8-validate@6.0.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.4))(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.0)(@react-native/metro-config@0.84.1(@babel/core@7.29.0)(bufferutil@4.1.0)(utf-8-validate@6.0.4))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.4))(react@19.2.3)(typescript@6.0.3)(utf-8-validate@6.0.4) @@ -367,7 +367,7 @@ importers: version: 11.16.0(@tanstack/react-query@5.95.2(react@19.2.3))(@trpc/client@11.16.0(@trpc/server@11.16.0(typescript@6.0.3))(typescript@6.0.3))(@trpc/server@11.16.0(typescript@6.0.3))(react@19.2.3)(typescript@6.0.3) better-auth: specifier: 'catalog:' - version: 1.6.13(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(better-sqlite3@12.8.0)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.8.0)(gel@2.0.0)(kysely@0.28.17)(mysql2@3.11.3)(pg@8.20.0)(postgres@3.4.4)(prisma@5.22.0))(mysql2@3.11.3)(next@16.2.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(pg@8.20.0)(prisma@5.22.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 1.6.13(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(better-sqlite3@12.8.0)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.8.0)(gel@2.0.0)(kysely@0.28.17)(mysql2@3.11.3)(pg@8.20.0)(postgres@3.4.4)(prisma@5.22.0))(mysql2@3.11.3)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(pg@8.20.0)(prisma@5.22.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) motion: specifier: ^12.23.25 version: 12.40.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -447,6 +447,9 @@ importers: '@acme/env': specifier: workspace:* version: link:../../packages/env + '@acme/validators': + specifier: workspace:* + version: link:../../packages/validators '@ai-sdk/anthropic': specifier: ^3.0.92 version: 3.0.96(zod@4.3.6) @@ -639,6 +642,9 @@ importers: '@acme/env': specifier: workspace:* version: link:../env + '@acme/validators': + specifier: workspace:* + version: link:../validators '@vercel/postgres': specifier: ^0.10.0 version: 0.10.0(utf-8-validate@6.0.4) @@ -13150,40 +13156,6 @@ snapshots: - '@cloudflare/workers-types' - '@opentelemetry/api' - better-auth@1.6.13(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(better-sqlite3@12.8.0)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.8.0)(gel@2.0.0)(kysely@0.28.17)(mysql2@3.11.3)(pg@8.20.0)(postgres@3.4.4)(prisma@5.22.0))(mysql2@3.11.3)(next@16.2.7(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(pg@8.20.0)(prisma@5.22.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): - dependencies: - '@better-auth/core': 1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.17)(nanostores@1.2.0) - '@better-auth/drizzle-adapter': 1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.17)(nanostores@1.2.0))(@better-auth/utils@0.4.1)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.8.0)(gel@2.0.0)(kysely@0.28.17)(mysql2@3.11.3)(pg@8.20.0)(postgres@3.4.4)(prisma@5.22.0)) - '@better-auth/kysely-adapter': 1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.17)(nanostores@1.2.0))(@better-auth/utils@0.4.1)(kysely@0.28.17) - '@better-auth/memory-adapter': 1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.17)(nanostores@1.2.0))(@better-auth/utils@0.4.1) - '@better-auth/mongo-adapter': 1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.17)(nanostores@1.2.0))(@better-auth/utils@0.4.1) - '@better-auth/prisma-adapter': 1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.17)(nanostores@1.2.0))(@better-auth/utils@0.4.1)(@prisma/client@5.22.0(prisma@5.22.0))(prisma@5.22.0) - '@better-auth/telemetry': 1.6.13(@better-auth/core@1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.17)(nanostores@1.2.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21) - '@better-auth/utils': 0.4.1 - '@better-fetch/fetch': 1.1.21 - '@noble/ciphers': 2.1.1 - '@noble/hashes': 2.0.1 - better-call: 1.3.5(zod@4.3.6) - defu: 6.1.7 - jose: 6.2.2 - kysely: 0.28.17 - nanostores: 1.2.0 - zod: 4.3.6 - optionalDependencies: - '@prisma/client': 5.22.0(prisma@5.22.0) - better-sqlite3: 12.8.0 - drizzle-kit: 0.31.10 - drizzle-orm: 0.45.2(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.8.0)(gel@2.0.0)(kysely@0.28.17)(mysql2@3.11.3)(pg@8.20.0)(postgres@3.4.4)(prisma@5.22.0) - mysql2: 3.11.3 - next: 16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - pg: 8.20.0 - prisma: 5.22.0 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - transitivePeerDependencies: - - '@cloudflare/workers-types' - - '@opentelemetry/api' - better-auth@1.6.13(@opentelemetry/api@1.9.0)(@prisma/client@5.22.0(prisma@5.22.0))(better-sqlite3@12.8.0)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@neondatabase/serverless@0.10.0)(@opentelemetry/api@1.9.0)(@planetscale/database@1.19.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.13)(@types/pg@8.20.0)(@vercel/postgres@0.10.0(utf-8-validate@6.0.4))(better-sqlite3@12.8.0)(gel@2.0.0)(kysely@0.29.2)(mysql2@3.11.3)(pg@8.20.0)(postgres@3.4.4)(prisma@5.22.0))(mysql2@3.11.3)(next@16.2.7(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.58.2)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(pg@8.20.0)(prisma@5.22.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: '@better-auth/core': 1.6.13(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.1.21)(@opentelemetry/api@1.9.0)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.17)(nanostores@1.2.0) From 3d3d5637293a8e45f7e2c6cb3d756d6f6d093628 Mon Sep 17 00:00:00 2001 From: ThatXliner Date: Sun, 26 Jul 2026 18:24:55 -0700 Subject: [PATCH 02/19] Revamp AI article briefs --- .../article-brief/algorithm-transparency.jpg | Bin 0 -> 322964 bytes .../article-brief/infrastructure-repair.jpg | Bin 0 -> 242352 bytes .../assets/article-brief/public-transit.jpg | Bin 0 -> 247274 bytes apps/expo/src/app/(tabs)/elections.tsx | 34 +- apps/expo/src/app/(tabs)/feed.tsx | 42 +- apps/expo/src/app/(tabs)/index.tsx | 8 +- apps/expo/src/app/(tabs)/settings.tsx | 5 +- apps/expo/src/app/article-detail.tsx | 225 ++++- apps/expo/src/assets.d.ts | 9 + apps/expo/src/components/ui/BillBrief.tsx | 931 ++++++++++++++---- apps/expo/src/components/ui/ContentCard.tsx | 6 +- apps/expo/src/components/ui/DualLens.tsx | 58 +- apps/expo/src/components/ui/index.ts | 2 +- apps/expo/src/utils/editorial-visuals.ts | 29 + apps/scraper/src/utils/ai/bill-brief.test.ts | 103 +- apps/scraper/src/utils/ai/bill-brief.ts | 229 ++++- apps/scraper/src/utils/ai/text-generation.ts | 92 ++ .../pr/article-brief/14-editorial-header.jpg | Bin 0 -> 107263 bytes .../pr/article-brief/15-original-source.jpg | Bin 0 -> 110529 bytes .../pr/article-brief/16-feed-details.jpg | Bin 0 -> 91193 bytes .../pr/article-brief/17-elections-state.jpg | Bin 0 -> 59182 bytes .../pr/article-brief/18-settings-state.jpg | Bin 0 -> 66498 bytes docs/article-generation.md | 50 +- packages/db/seed.ts | 260 ++++- packages/validators/src/bill-brief.ts | 89 +- 25 files changed, 1809 insertions(+), 363 deletions(-) create mode 100644 apps/expo/assets/article-brief/algorithm-transparency.jpg create mode 100644 apps/expo/assets/article-brief/infrastructure-repair.jpg create mode 100644 apps/expo/assets/article-brief/public-transit.jpg create mode 100644 apps/expo/src/assets.d.ts create mode 100644 apps/expo/src/utils/editorial-visuals.ts create mode 100644 artifacts/pr/article-brief/14-editorial-header.jpg create mode 100644 artifacts/pr/article-brief/15-original-source.jpg create mode 100644 artifacts/pr/article-brief/16-feed-details.jpg create mode 100644 artifacts/pr/article-brief/17-elections-state.jpg create mode 100644 artifacts/pr/article-brief/18-settings-state.jpg diff --git a/apps/expo/assets/article-brief/algorithm-transparency.jpg b/apps/expo/assets/article-brief/algorithm-transparency.jpg new file mode 100644 index 0000000000000000000000000000000000000000..88489958502d7c3f38c985d333014d4e4ccbdf0b GIT binary patch literal 322964 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∈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