Campaign-driven pipeline that finds people missing from English Wikipedia, verifies every fact against real sources, and hands a human a research dossier — it never writes article prose.
Project description
Wikipedia Gap Finder v2
A campaign-driven pipeline that finds people from an underrepresented group who should have an English Wikipedia article but don't, checks every fact against real sources, and hands a human a research dossier they write the article from.
The tool never writes article prose. English Wikipedia banned LLM-generated/-rewritten article text (RfC, March 2026). This tool does detective work, verification, and structure only — a human writes every sentence. That isn't a limitation to route around; it's the product's integrity claim: AI found her and checked the facts; a human wrote her story.
Pipeline
- Intake — names from CSV/txt lists and/or an optional Wikidata SPARQL redlist query.
- Gap check — per name: enwiki title + fuzzy search, redirect detection,
Draft:namespace, deletion-log history, and Wikidata sitelinks. Verdicts:GAP / EXISTS / REDIRECT_ONLY / DRAFT_EXISTS / DELETED_BEFORE / TRANSLATE_CANDIDATE(⭐ candidates that already exist in another language are the highest-value, since translation is an allowed path). - Notability triage (planned) — coverage search scored against WP:GNG.
- Source vetting → dossier — see below.
Source vetter
The vetter is two processes across a two-file JSON boundary, so each side is testable in isolation:
gap_finder.py --dossier → vetting_worklist.json → Claude vet-sources subagent
│
dossier.md ← gap_finder.py --dossier ← vetting_verdicts.json
-
Python (keyless): gathers coverage, tiers each source against Wikipedia's perennial-sources list (WP:RSP), and renders the dossier.
-
The Claude subagent (
skills/vet-sources): classifies reliability and traces breadcrumbs, sorting every claim into one of three buckets:Bucket Meaning Dossier section VERIFIED a single reliable source names the subject and supports the claim, with a verbatim quote Verified facts table LEAD a breadcrumb is real, but no reliable source names the subject yet Research leads — chase before writing DEAD_END no corroboration found UNVERIFIED — do not use
The never-stitch rule (WP:SYNTH): the vetter may not promote a LEAD to VERIFIED by combining a subject-naming unreliable source with a fact-confirming reliable source. Two half-sources stay a LEAD. And the renderer structurally refuses to print any fact backed only by an unreliable source — even if a verdicts file claims otherwise.
Usage
python3 gap_finder.py --campaign campaigns/<campaign>.yaml --check # stages 1–2
python3 gap_finder.py --campaign campaigns/<campaign>.yaml --check --no-sparql --limit 5
python3 gap_finder.py --campaign campaigns/<campaign>.yaml --report # table from saved state
python3 gap_finder.py --campaign campaigns/<campaign>.yaml --dossier "Name Here"
Swapping demographics is a new YAML in campaigns/ — zero code changes. Results are
written under output/<campaign>/ (JSON state + markdown), so runs are resumable.
Conventions
Zero API keys on the default path (MediaWiki + Wikidata + DuckDuckGo are keyless;
Firecrawl is opt-in). python3 + --break-system-packages, no venvs. Polite
User-Agent, ≥1s between requests with exponential backoff.
pip3 install requests PyYAML jsonschema --break-system-packages
python3 -m pytest # 31 tests
Layout
gap_finder.py— CLI; intake + gap check (stages 1–2) and dossier wiring (stage 4)gapfinder/— the source-vetter package (contract, rsp, search, worklist, verdicts, dossier)skills/vet-sources/SKILL.md— the Claude subagent contractcampaigns/— one YAML per campaigndocs/superpowers/— design spec and implementation plan
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wiki_gap_finder-2.0.0.tar.gz.
File metadata
- Download URL: wiki_gap_finder-2.0.0.tar.gz
- Upload date:
- Size: 26.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f064e0782d07c744d5b33bc340653a4d5c65355217ba44ba97bd581e492413c
|
|
| MD5 |
339cb2a73233f477eeccb8117878fc13
|
|
| BLAKE2b-256 |
0a74378b0daa23704be628b169c7b35e2581e353ef09921d96b35271d632b7df
|
File details
Details for the file wiki_gap_finder-2.0.0-py3-none-any.whl.
File metadata
- Download URL: wiki_gap_finder-2.0.0-py3-none-any.whl
- Upload date:
- Size: 23.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9475a4b045242ebed5a9bd300f9a97d3417a8e42b70b795bd55573afb329caae
|
|
| MD5 |
63b77082d48466d7cc6298264718e8f3
|
|
| BLAKE2b-256 |
86163a19e1b712663453f1a5f30ab326803a8de50802a9c19b98268158d487dc
|