finds.dev← search

// the find

akitaonrails/frank_investigator

★ 258 · Ruby · AGPL-3.0 · updated Jun 2026

An attempt at a news audit system to analyze biased or even fake journalism

Frank Investigator is a Rails 8.1 pipeline that takes a news article URL and runs it through ~15 analysis stages — claim extraction, source authority classification, multi-model LLM consensus, rhetorical fallacy detection, and more — to produce a structured fact-check verdict. It's aimed at journalists and researchers who want to audit Brazilian and international news outlets, though the pipeline is general enough to work on any public article.

The evidence graph design is genuinely thoughtful: claims are first-class DB records with full provenance, each pipeline step is idempotent, and the graph can be revisited without re-fetching. The independence deduplication — treating ten articles from the same wire service as one voice — directly addresses the most common way fake consensus gets manufactured. The auto-submission of related articles feeding back into the parent's event context is clever; it means a single investigation quietly accretes context without user action. The Kamal deployment setup is clean and production-realistic: separate web and worker containers, persistent SQLite volume, Chromium baked into the image, and no credentials in tracked files.

SQLite in WAL mode for a pipeline that runs Chromium fetchers and multiple concurrent Solid Queue workers is a meaningful bottleneck risk — any write-heavy burst during parallel claim assessment will serialize on the SQLite lock, and the 'tuned pragmas' note in the README doesn't fully address this. The multi-model LLM consensus is only as good as the models agreeing on what a primary source is, which is exactly the hard part; there's no mention of how the system handles contradictory verdicts from different models beyond 'graduated disagreement penalties,' which is vague. The Brazil-first source profiling is baked deep into the connectors and authority classifier — adding a new country's court or statistics bureau isn't a config change, it's a new connector class. Test coverage appears thin: the test directory has mostly controller and fixture tests, no visible unit tests for the core analyzers where the important logic lives.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →