What a Knowledge Graph Found in 1,172 Cuban Charge Sheets That No Case File Could Show Alone

What a Knowledge Graph Found in 1,172 Cuban Charge Sheets That No Case File Could Show Alone

When a government charges 1,172 political prisoners, does it charge them all the same way? We built a formal knowledge graph over Cuba's political-prisoner registry to find out. The answer is no. There are two distinct prosecutorial playbooks, and which one a prisoner receives has nothing to do with who they are.

1,172
Prisoners with
parseable charges
75
Distinct criminal
charges in corpus
100%
Blind validation
stability (100/100)
9
Pipeline stages
fully reproducible
§ 1 · The finding

Cuba does not charge all protesters the same way. There are two distinct playbooks.

The Prisoners Defenders registry is the most comprehensive public record of Cuban political detention. We encoded every record into a formal knowledge graph and measured which charges tend to appear together across the entire population. Two clusters emerged. The government applies one set of charges to some protesters and a completely different charge to others. The two groups almost never overlap.

Playbook A
The four-charge bundle
Contempt + Public Disorder + Assault + Resistance. These four charges appear together 2.8 to 3.4 times above chance. The state applies them as a package, not individually. The bundle functions to multiply sentence exposure through charge stacking.
Typical sentence: 5 to 7 years
Playbook B
Sedition, standing alone
Sedición is charged in isolation 90% of the time. A single, heavy charge whose function is characterization: to establish on the public record that the defendant is an enemy of the constitutional order, not merely a disorderly citizen.
Typical sentence: 10 to 14 years
§ 2 · The falsification

The natural assumption is wrong.

The obvious hypothesis: Cuba assigns the harsher playbook to prisoners who are more visible, more connected, or more politically organized. A well-known dissident gets the heavier charge. An unknown protester gets the lighter bundle. We tested this. It is wrong.

Hypothesis we tested Result What the data showed
Well-documented prisoners get the heavier charge WRONG 28.6% vs 29.5% — no difference
IACHR-protected prisoners get the heavier charge WRONG 25.0% vs 30.5% — actually reversed
Politically affiliated prisoners get the heavier charge WRONG No significant association at all
Arrested during July 11 protests → heavier charge SIGNIFICANT OR = 1.42, p = 0.027
Which playbook a prisoner receives has nothing to do with who they are. It depends entirely on when they were arrested. The state applies different charge bundles to different waves of protest, not to different categories of person. Under UDHR Articles 10 and 11, that is the definition of arbitrary.
§ 3 · Independent validation

We asked a blind algorithm to check our work. It found the same two playbooks.

A natural objection: maybe the analyst drew the boundary between the two playbooks in the wrong place. So we ran a separate test. We gave a standard grouping algorithm (Louvain community detection) the raw charge data and told it nothing about our hypothesis. Find the natural groups yourself.

100%
Stability: 100 of 100 random starts found the same two groups
97.2%
Playbook A: algorithm matched analyst for 698 of 718 prisoners
98.0%
Playbook B: algorithm matched analyst for 196 of 200 prisoners
90.2%
Standalone: 194 of 215 Sedición prisoners had no other charges
Method Louvain community detection (Blondel et al. 2008) on the charge co-occurrence graph at default resolution (1.0). The algorithm was given no prior knowledge of the analyst-defined regimes. Results archived in 09_community_detection_results.json. Script: 09_community_detection.py.
§ 4 · The pipeline

Nine reproducible stages from raw HTML to formal submission.

Each stage is a separate Python script. Each script's output is saved and verifiable. Any reviewer can re-run any step against the same data snapshot and verify every number.

01
Scrape
Download records from PD
02
Parse
Clean and tokenize charges
03
Model
OWL 2 class hierarchy
04
Populate
Per-prisoner RDF facts
05
Check
SHACL validation
06
Enrich
Cross-source verify
07
Analyze
Statistical tests
08
Package
WGAD · IACHR · UPR
09
Validate
Louvain blind test
Standards OWL 2 / RDF / SKOS / BFO / PROV-O / SHACL. Every fact carries provenance to its source URL. 451 of 1,172 prisoners independently verified via Brave Search API enrichment against Amnesty International, IACHR, CubaLex, OCDH, and international media.
§ 5 · Legal framework

UDHR and customary international law. Not the ICCPR.

Cuba has signed but not ratified the International Covenant on Civil and Political Rights. Most submissions to the WGAD about Cuba cite the ICCPR. Those citations are technically moot. Every legal argument in this project routes through the Universal Declaration of Human Rights and customary international law per WGAD Deliberation No. 9.

Draft submissions to three international bodies are complete: the UN Working Group on Arbitrary Detention (Categories II and III), the Inter-American Commission on Human Rights (American Declaration Articles XVIII, XXV, XXVI), and a stakeholder submission for Cuba's Fifth Cycle Universal Periodic Review in 2028. Nine verified WGAD Cuba opinions (2021 to 2025) anchor the submissions, including Opinion 63/2021 which establishes "recurrent pattern" language.

§ 6 · What this demonstrates

A proof of concept for a class of capability.

Unstructured public records, in this case a website of prisoner records, can be converted into a formal knowledge graph that reveals corpus-level patterns invisible in any individual case file. The two-playbook finding does not exist in any single prisoner's file. It becomes visible only when you analyze the entire population together. That is the core value of structural intelligence.

The same approach applies to any domain where public records exist but are not structured for analysis: corporate registries, court dockets, sanctions lists, offshore leaks. If the pattern interests you, or if you work in a domain where this kind of analysis could be useful, I'd welcome the conversation.

Eric Brattin

Eric Brattin

Washington, D.C.