Charging Patterns in Russian Political Cases Predate the 2022 Invasion: Evidence From 14 Years of Case Records
Part I found three groups of charges in OVD-Info records: speech, organizational, and protest.
Part II described the 6,702 people in those records: their charges, their imprisonment rates, and the severity gradient from treason (88%) to undesirable organization (8%).
Part III merged OVD-Info's records with 400,000 sanctioned entities. 135 people appear in both databases. Russia calls them terrorists. The world calls them political prisoners.
Part IV documented 45 children charged under the same political articles as adults, the youngest age 14.
Part V compared charge co-occurrence in Soviet, Belarusian, Myanmar, Cuban, and modern Russian records. Those values come from different kinds of records and are not directly comparable.
Part VI (this report) asks how the co-occurrence of charges in OVD-Info's records changed over fourteen years, including across the full-scale invasion of Ukraine.
This report was first published on 4 October 2026 and has been through two rounds of interdisciplinary peer review. The first found that its headline could not be interpreted: annual modularity values depend on sample size, the persistence test was partly circular, and several numbers contradicted each other. I rebuilt the analysis from the source records with sample-size control, null models, family-wise correction, consensus clustering, and decision rules written down before the run. The second review found that the first revision still read a measured property of the records as a property of Russian institutions, and that "no detectable change" had been written as "no change." This version narrows the claims to what was measured and adds post hoc analyses the second review requested, each labeled as such.
The table What changed, claim by claim lists every original claim with its status. A series-wide corrections note covers issues that affect Parts I to V.
Before and after the invasion: fourteen years of differentiation and change in Russian political charge networks.
Somewhere in Russia an investigator decides which article of the Criminal Code fits the conduct in a file. A prosecutor approves the choice, and a court may later requalify it. The selected article helps determine which body investigates, which court is competent, and what penalties are available under the applicable procedural rules. Across thousands of cases, those choices leave a pattern: some articles are routinely recorded together, others almost never.
This report measures that pattern in the cases OVD-Info has documented and classified as politically motivated, from 2012 to 2025. Three findings hold up. First, the records show clear differentiation in every year: articles cluster into distinct groups far more than a randomized version of the same records produces. Second, at matched sample size, no change in that level of differentiation is detected across the 2022 full-scale invasion, although changes of roughly 0.12 in either direction cannot be ruled out. Third, the specific groups of articles reorganize substantially from year to year, while articles continue to sit mostly among others of the same analyst-defined category.
These are findings about documented charge records, not about the intentions, personnel, or organization of Russian state institutions. A stable level of differentiation is compatible with substantial change in who is prosecuted, by whom, and under which legal definitions.
the specified degree-preserving null
(z = 9.6 to 30.6)
the data cannot exclude
(none detected)
articles, observed vs
degree-preserving null (post hoc)
Not 7,111 prosecutions. Fewer, and not a random subset.
The original version of this report described its base as 7,111 prosecutions from 2012 to 2026. A year-by-year analysis can only use records that have a year. The audit for this revision found that many do not.
| Records in OVD-Info's export | Count |
|---|---|
| Total | 7,132 |
| With a start-of-persecution year | 6,152 |
| No start date | 980 (13.7%) |
| Before 2012 | 153 |
| 2026 (partial year, excluded) | 152 |
| Analysis window 2012 to 2025, strict dating | 5,847 |
| of which multi-charge (the only records that create edges) | 1,335 |
| Undated records recovered from the detention-start date | 309 |
The undated records are not scattered at random. They are concentrated in two terrorism articles, Art. 205.4 (organizing or participating in a terrorist community, 259 records) and Art. 205.3 (training for terrorist activity, 228 records), and they are more often multi-charge (31.6%, against 22.5% for dated records). Where a detention-start date can stand in for the missing start date, the recovered records land almost entirely in 2023 to 2025; in 2025 the number of multi-charge records rises from 96 to 158. That pattern points to a reporting lag in the most recent cases.
Every result is therefore computed twice: with strict dating (start year only) and with the detention-start fallback. A finding is reported only if it holds under both. The lag also affects volume: recorded prosecutions fall from 888 in 2022 to 672 in 2025 under strict dating, but only to 819 with the fallback.
An edge links two Criminal Code articles mentioned in the same OVD-Info record. A record describes the persecution of one person within one criminal case, so an edge is a record-level co-mention. It is not proof that both articles were simultaneously operative charges: a record can retain an article from an early stage of the case alongside one from a later requalification, and the export does not distinguish procedural stages. Aggregating by person instead of by record would add 247 of 785 edges (31%) linking articles from different cases, so all results use records.
Decimal articles stay distinct (282, 282.1, and 282.2 are separate nodes), and General Part articles (Arts. 1 to 104) are excluded. Article numbers identify provisions, not their legal versions: Art. 282 before and after the December 2018 amendment shares one identifier. Splitting Art. 282 and Art. 354.1 into separate versioned nodes changed no result (see robustness), but full versioning of every provision has not been done.
"Political" here means classified as politically motivated by OVD-Info under its own published criteria. It is not an adjudicated legal status.
Three periods, not two
The invasion of February 2022 is the main comparison, but it is not the only historically meaningful boundary. The Russo-Ukrainian war and a wave of related prosecutions for espionage, treason, and terrorism began in 2014, with the annexation of Crimea. The observed series therefore spans three periods: 2012 to 2013, 2014 to February 2022, and the full-scale invasion onward. The break tests below include 2014 as a possible split year.
Differentiation is present every year, with no detectable trend.
Modularity (Q) measures how strongly the articles in a co-occurrence graph divide into groups that connect densely inside and sparsely between. It is a property of the graph built from OVD-Info's records. Small graphs produce high Q even when their edges are random, and the original report compared years built from very different numbers of records (25 multi-charge records in 2012, 234 in 2022), so part of what looked like change was sample size.
Each year was tested three ways, against rules written down before the run:
- Does Q exceed a randomized version of the same records? The null keeps every record's number of articles and every article's frequency. Yes in 14 of 14 years under both dating rules (z = 9.6 to 30.6), and still in every year with all occupied-territory records removed (minimum z = 3.7).
- Is there a trend once sample size is equal? Every year was subsampled to 25 multi-charge records. No trend (Spearman ρ = 0.20, p = 0.50 strict; ρ = 0.04, p = 0.89 fallback).
- Is each year indistinguishable from the others at its size? Met in four of six configurations, not robustly. See the exploratory section below.
How large a change could the data have missed?
Recorded prosecutions rose sharply around 2022. The question is whether the level of differentiation changed with them. Not finding a statistically significant difference is not the same as showing there was none, so the useful question is how large a change the data can rule out. Two estimators were computed (post hoc, at the second reviewer's request), each with a 90% interval for two one-sided tests.
| Change in Q, after minus before February 2022 | Strict dating | Detention fallback |
|---|---|---|
| A. Mean annual Q at a common size of 25 records | +0.042 [−0.051, +0.137] | +0.032 [−0.060, +0.125] |
| B. Pooled before and after graphs at matched size | −0.057 [−0.116, +0.034] | −0.049 [−0.110, +0.042] |
| Smallest margin within which the change can be bounded | 0.12 to 0.14 | 0.11 to 0.13 |
| Reference: year-to-year SD of annual Q before 2022 | 0.10 | |
Both intervals include zero, and the two estimators do not even agree on direction. At the same time, neither can exclude a change of about 0.11 to 0.14, roughly one year-to-year standard deviation and a fifth of a typical Q value. The supportable statement is narrow: differentiation is observable before 2022, and no change in its level is detected across the invasion, but a change of that size could have gone undetected.
No structural break survives correction.
A break test asks whether records before a given year form a graph with different Q from records after it. Each record's year label was shuffled 1,000 times, which keeps the size of each side fixed, so the test accounts for unequal amounts of data. The original report tested six years chosen after looking at the series. This analysis keeps those six but corrects across every admissible split year, 2014 to 2025, because candidates chosen after viewing the data need that correction.
| Split year | Pooled Q before → after | p (single test) | p (Holm, 6 candidates) | p (max-T, all 12 splits) |
|---|---|---|---|---|
| 2017 (Supreme Court liquidation of Jehovah's Witnesses organizations) | 0.569 → 0.441 | 0.010 / 0.001 | 0.050 / 0.006 | 0.43 / 0.29 |
| 2019 (519-FZ in force; Moscow protests) | 0.546 → 0.421 | 0.002 / 0.002 | 0.012 / 0.010 | 0.46 / 0.36 |
| 2020 | 0.475 → 0.433 | 0.19 / 0.24 | 0.56 / 0.58 | 0.98 / 0.98 |
| 2021 (FBK designation) | 0.477 → 0.437 | 0.20 / 0.19 | 0.56 / 0.58 | 0.99 / 0.98 |
| 2022 (full-scale invasion) | 0.490 → 0.430 | 0.040 / 0.066 | 0.16 / 0.26 | 0.92 / 0.91 |
| 2023 (no named event) | 0.468 → 0.447 | 0.46 / 0.49 | 0.56 / 0.58 | 1.00 / 1.00 |
The original report's central break claim (2019, p=0.004) replicates as a single test but not under the correction its own candidate selection requires. Within the six named candidates, the 2017 and 2019 decreases survive Holm correction, and they remain when Art. 282 is removed, when its legal versions are split, and when all occupied-territory records are removed. That is a secondary finding, conditional on the six-year family. The invasion year is not significant under any correction.
Year-level anomalies: one consistent, none confirmed.
Each year was also compared with random draws of the same size from all other years. These are fourteen separate tests, so they need correction for multiplicity, and the earlier revision of this report did not apply it. With correction, and across specifications, the picture is less dramatic than it first appeared.
| Year | Strict: p / Holm | Fallback: p / Holm | Without occupied territory | Reading |
|---|---|---|---|---|
| 2019 (low) | 0.002 / 0.028 | 0.008 / 0.11 | Still low | Low in every specification; survives correction only under strict dating |
| 2021 (high) | 0.026 / 0.34 | 0.024 / 0.31 | Inside the band | Nominal only; depends on occupied-territory records |
| 2024 (high) | 0.044 / 0.53 | 0.070 | High | Nominal only |
| 2015 (low) | not flagged | not flagged | Low | Appears only without occupied territory |
2019
2019 is the only year that sits below the others in every specification, including with Art. 282 removed and with more than a third of its multi-charge records (those from occupied territory) removed. It survives correction for fourteen tests only under strict dating, so it remains exploratory. Federal Law No. 519-FZ of 27 December 2018 made criminal liability under Art. 282(1) conditional on a prior administrative penalty within a year. Removing Art. 282 does not remove the drop, but that test cannot capture the amendment's wider effects, such as substitution of other articles or changes in which cases reach criminal proceedings. The Moscow protest prosecutions of 2019 are a possible factor, not an established one. The cause of the 2019 anomaly is unidentified.
2021
The original report described 2021 as a year that produced no signal; the first revision described it as the most differentiated year. Neither holds. 2021 is nominally high, does not survive correction, and falls back inside the band when occupied-territory records are removed.
Category company persisted. The communities did not.
Two graphs can have the same Q with entirely different articles grouped together, so a stable score says nothing about whether the groups themselves persisted. The original report claimed they did, using single Louvain runs and a labeling rule under which an article could vote for its own category. This analysis uses a consensus of 50 runs per year, a category scheme fixed before the run, and leave-one-out labeling: each community is labeled by the majority category of its other members.
The five categories (speech, organizational, terrorism, protest, treason and espionage) are analyst groupings, assigned by the conduct or legal interest each article addresses. They do not sit on a single conceptual dimension, and some articles fit more than one. Art. 205.2 (public justification of terrorism) is treated as ambiguous and excluded from labeling in the frozen scheme; alternative assignments are tested below.
| Measure | Strict | Fallback | Reading |
|---|---|---|---|
| Agreement between Louvain runs within a year (ARI): the ceiling | 0.93 | 0.97 | The algorithm is stable within each year |
| Agreement between adjacent years (ARI) | 0.30 | 0.30 | Far below the ceiling: the specific groupings reorganize |
| Agreement between adjacent years (AMI, chance-corrected) | 0.38 | 0.38 | Above chance (0), far from identical (1) |
| Uncorrected NMI (originally published: 0.75) | 0.58 | 0.57 | For comparison only |
| Category scheme | Articles in communities led by their own category | Degree-preserving null [95%] | p |
|---|---|---|---|
| Frozen scheme (205.2 excluded) | 0.57 | 0.20 [0.07, 0.30] | ≤ 0.005 |
| 205.2 as speech | 0.60 | 0.22 | ≤ 0.005 |
| 205.2 as terrorism | 0.54 | 0.21 | ≤ 0.005 |
| 280 as organizational | 0.47 | 0.18 | ≤ 0.005 |
| Treason merged into terrorism | 0.59 | 0.22 | ≤ 0.005 |
The two results fit together. Articles sit in communities led by their own analyst-defined category about two and a half to three times as often as the randomized records produce, under every category scheme tested. But the particular communities re-form each year, well beyond what algorithm noise explains. New articles can be assigned to the same analyst-defined categories while their co-occurrence communities change. The original claim of "the same combinations for a decade" is not supported.
Speech and terrorism articles rarely appear in the same record.
The original report inferred this separation from the graph's spectral properties. Here it is computed directly: of the records containing a speech-category article, what share also contain a terrorism-category article?
| Period | Records with a speech-category article | Also terrorism-category | Share [95% CI, person-clustered] |
|---|---|---|---|
| 2012 to 2021 | 320 (306 persons) | 18 | 5.6% [3.1, 8.3] |
| 2022 to 2025, strict | 1,135 (1,103 persons) | 17 | 1.5% [0.9, 2.3] |
| 2022 to 2025, fallback | 1,188 (1,154 persons) | 17 | 1.4% [0.8, 2.2] |
Before the full-scale invasion, about one in eighteen OVD-Info records containing a speech-category article also contained a terrorism-category article. Since 2022 it is about one in seventy, largely because the wartime speech articles are usually recorded alone. The pattern describes documented records, not the course of any individual case.
Occupied territory is a distinct forum, and it shapes particular years.
550 records come from occupied Ukrainian territory, 416 of them from Crimea and Sevastopol. OVD-Info records the region where each prosecution took place; records listing several regions were treated as occupied-territory records if any region was occupied. These prosecutions were conducted by Russian authorities applying Russian criminal law in territory Russia occupies. Recording them as Russian prosecutions describes who exercised power, not a conclusion that the exercise was lawful under international law.
Their weight varies sharply by year. In 2016, 21 of 43 multi-charge records (49%) come from occupied territory; in 2019, 33 of 90 (37%). None of the conclusions above changes when all occupied-territory records are removed: every year still exceeds its null, there is still no trend, and no break survives correction. What changes is the year-level picture (Fig. 6), which is one reason those anomalies are treated as exploratory.
Two further checks changed nothing: splitting Art. 282 and Art. 354.1 into separate nodes for their pre- and post-amendment versions, and recomputing the speech-terrorism intervals with person-level clustering.
The instruments rotate inside analyst-defined categories.
The articles that dominate each year change. New articles are created and old ones fade. What persists is the tendency for articles to sit among others of the same analyst-defined category; the exact groupings move.
What would count as transformation
A continuity claim that every outcome can be read as confirming is not useful. These are the observable changes that, in future data or a fuller reanalysis, would count as evidence that the measured charge structure was transformed:
- Annual Q at matched size shifts by more than 0.12 and stays shifted for three or more consecutive years.
- Annual Q falls to its degree-preserving null in any year with at least 50 multi-charge records.
- Category persistence falls inside its degree-preserving null under the frozen scheme.
- Adjacent-year agreement between communities (AMI) falls to chance for two or more consecutive years.
- The share of speech-category records also carrying a terrorism-category article rises above its 2012 to 2021 level and stays there.
None of these would say anything about institutions on its own. Evidence about investigative bodies, courts, personnel, and procedure is needed for that, and this analysis does not contain it.
What this does not show about the Soviet past or about China
The original report placed a Soviet value (Q=0.29), the modern Russian series, and a Chinese value on one line and called it "three eras, one trajectory." That framing is withdrawn. The Soviet value comes from Memorial records of political repression across union republics that had their own criminal codes, and a large share of those sentences were issued by extrajudicial bodies rather than courts. It is not a baseline for the modern series. Between 1953 and 2012 there is no observation at all, a period that includes the post-Stalin prosecutions of dissidents under RSFSR Arts. 70 and 190-1.
The Chinese value (Q=0.451) describes CECC records spanning decades, built from a different kind of record. The comparative piece pre-stated one test for modularity as an indicator: annual values must exceed their null distributions in most years. For the Russian records they do in every year. That passes the test as stated; it does not validate modularity as a measure of how a state organizes prosecution.
What changed, claim by claim
Every major claim in the original report, and what two rounds of reanalysis found. Green: confirmed as stated here. Amber: corrected or narrowed. Red: withdrawn.
| Original claim | Status |
|---|---|
| A differentiated charge structure was present at the start of observation in 2012 | Confirmed as measured. 2012 exceeds its degree-preserving null (z = 11.5), as does every later year. This is a property of the records, not a demonstration of institutional design. |
| Speech and terrorism charges run on largely separate tracks | Confirmed, now computed directly. 5.6% of speech-category records also carried a terrorism-category article before 2022; 1.5% after. |
| The invasion scaled the caseload without redesigning the structure | Narrowed. No change in measured differentiation is detected; changes of about ±0.12 cannot be excluded; nothing is shown about institutions. |
| Base of 7,111 prosecutions, 2012 to 2026 | Corrected. 5,847 dated records in 2012 to 2025 (strict); 980 records lack a start date. |
| "Specialization barely moved" while volume rose tenfold | Replaced. The raw comparison was confounded by sample size; controlled for it, no change is detected. |
| Wartime articles 207.3, 280.3, 354.1 | Corrected. Art. 354.1 dates from 2014. |
| "The clerk does not decide. The number decides." | Corrected. Investigators choose the article, subject to approval and requalification. |
| Post-invasion system "slightly less specialized" | Withdrawn. A sample-size artifact. |
| "Most significant structural break: 2019 (p=0.004)" | Withdrawn as a primary finding. Does not survive family-wise correction. 2019 remains an exploratory low year. |
| 2022 break significant (p=0.024) | Withdrawn. Not significant after any correction. |
| 2021 produced no signal | Withdrawn. 2021 is nominally high but does not survive correction and depends on occupied-territory records. |
| "Now demonstrated: community identities persist" (NMI 0.75) | Withdrawn. Category company persists above a degree-preserving null; specific communities reorganize. |
| Stable band of 0.45 to 0.58 containing all windows | Withdrawn. The band was defined by the data it contained. |
| "OVD-Info's sample is structurally sufficient"; sealed and occupied-territory cases "would not change" the result | Withdrawn. Subsampling observed records cannot speak to unrecorded ones; occupied-territory cases are already in the data and shape particular years. |
| Soviet to modern "trajectory"; China "independently evolved past the Soviet ancestor" | Withdrawn. No trajectory is observed; the values are not commensurable. |
| Declining Q toward Belarus levels means the system "is becoming cruder" | Withdrawn. The Belarus value is not commensurable. |
What this means for advocates and monitors
The charging pattern predates 2022, within a stated bound
Differentiated co-occurrence is observable in OVD-Info's records from 2012, and no change in its level is detected across the full-scale invasion, within a margin of about 0.12. For arguments that treat wartime prosecutions as a novel emergency response, that is relevant descriptive evidence: the documented charging pattern the wartime cases fit into was already present. It is evidence about recorded charge combinations, not about intent or institutional design.
Monitoring needs the controls, not just the score
A raw annual Q is not a usable monitoring number, because it moves with sample size. A monitoring series needs values at a common sample size, a null-model comparison each year, an explicit bound on the change it can detect, and comparisons only within one source and one pipeline. Whether modularity tracks anything institutional remains an open question.
Dating completeness matters most for the newest cases
The records most likely to lack a start date are recent terrorism and treason cases, so any temporal analysis of OVD-Info data under-represents them in its final years. Completing those dates as cases mature would strengthen every analysis of the wartime period.
What this analysis cannot see
- One documentation project's records. All results describe cases OVD-Info identified and classified as politically motivated. Its sources and capacity changed over fourteen years, and the data cannot test whether coverage changed.
- Co-mention, not concurrent charging. Edges pool procedural stages, including articles later requalified or dropped.
- Provision identifiers, not legal versions. Only Arts. 282 and 354.1 were tested as versioned nodes.
- Limited power at the invasion. Changes of about 0.12 in either direction cannot be excluded.
- Small early years. 2012 has 25 multi-charge records. Results were rechecked starting at 2014 with a common size of 43; no conclusion changed.
- Residual undated records. 671 records remain undated even with the fallback, still concentrated in Arts. 205.4 and 205.3.
- Analyst categories. The five categories are analytical groupings, not legal classes; four alternative schemes were tested.
- Exploratory year-level results. The 2019 and 2021 anomalies are specification-dependent and are not confirmed.
- Post hoc analyses. The category baselines, effect-size bounds, version-split nodes, clustered intervals, outlier multiplicity correction, and occupied-territory exclusion were added after the first results.
Data. OVD-Info public export (7,132 records; file dated 19 September 2026). Year from the start-of-persecution field; fallback from the detention-start field. Code repository and output checksums: github.com/TruthQuest/russia-charge-graph (tag v2.0, folder reanalysis). The data checksum is in DATA.md and output checksums in OUTPUT_CHECKSUMS.txt.
Graph. One node per Criminal Code article as recorded in OVD-Info's article field without parts, decimal articles kept distinct, General Part (Arts. 1 to 104) excluded. Only multi-charge records contribute. Each record contributes a clique over its distinct articles; edge weight is the number of records containing both articles. Modularity is weighted, resolution 1.0.
Algorithms. Louvain (python-louvain 0.16), best of 5 runs with fixed seeds per estimate, used identically for observed, null, subsampled, and permuted graphs. Consensus communities from 50 runs per year (Lancichinetti and Fortunato procedure, co-assignment threshold 0.5, up to 10 iterations). Null model: bipartite record-by-article swaps, 10 per incidence, preserving every record's number of articles and every article's frequency (200 draws per year). Rarefaction to a common size of 25 multi-charge records (200 draws; 1,000 in a precision check). Break tests: record year labels permuted 1,000 times within 2012 to 2025, minimum 30 multi-charge records per side, Holm across six candidates and max-T across all 12 admissible splits (2014 to 2025). Correspondence: AMI and ARI on articles present in both years. Category labels: leave-one-out majority under a scheme frozen on 7 October 2026 before the run.
Decision rules written down before the first run: structure in at least 80% of years; at least 80% of years indistinguishable from the pooled structure; no trend at common size; breaks claimed only if they survive max-T. Findings are reported only where they hold under both dating rules. Runs are deterministic and were verified identical across repeated executions; determinism is not a check of correctness, and independent replication has not been done.
Modularity exceeds a degree-preserving null in 14 of 14 years. No trend at common size. No break survives family-wise correction. Change at the invasion: none detected; about ±0.12 cannot be excluded.
Adjacent-year ARI 0.30 against a within-year ceiling of 0.93 to 0.97. Category company 0.57 against 0.20 under a degree-preserving null, robust to four alternative schemes (post hoc).
Speech-category records also carrying a terrorism-category article: 5.6% before 2022, 1.5% after. Year-level anomalies (2019, 2021) are exploratory.
© 2026 Trace Origin LLC. Data: OVD-Info (used with permission). Second revision, 9 October 2026, after two rounds of peer review.