- Page built 39 min ago (10 Oct 2026, 21:27 EAT)
- Latest daily run 47 min ago
This page shows how well a method works, not how much manipulation there is.
We collect Kenyan political discourse from X and run a method that looks for accounts acting together. What is defensible to publish about that is narrow: whether the method reproduces published results, how often our Kenya filter is wrong, what the detector surfaced and how a reader judged it, where it failed its own tests, and whether the pipeline is running. It is not a rate, and it names no account.
01 / Method
The method reproduces published results on 5 of 6 benchmarks
BasisMacro-F1 of the unsupervised IOHunter-style detector re-implemented here, on the 6 published IO benchmark datasets, against the number the paper reports. A claim about this copy of the method, never a Kenya result.
5 of 6 datasets land within 0.2 Macro-F1 of the number the paper reports. The exception is Iran, where the benchmark disagrees with itself.
| Dataset | Paper | Ours | Difference |
|---|---|---|---|
| UAE | 84.66 | 84.64 | -0.02 |
| cuba | 57.92 | 57.92 | 0.00 |
| russia | 87.65 | 87.83 | +0.18 |
| venezuela | 95.05 | 95.05 | 0.00 |
| iran | 60.83 | 71.43 | +10.60 |
| china | 63.66 | 63.67 | +0.01 |
iran: the benchmark authors' own code, run on their own release, gives 71.31 where the paper says 60.83. Ours is 71.43, which is +0.12 from the reference code. Iran is judged against the reference implementation's own output (71.31), not the published 60.83, because the benchmark disagrees with itself.
Source: docs/analysis/v2-findings.md / Measured 2026-09-11
02 / Filter
Our Kenya filter is wrong in measurable ways
Basis88 posts drawn fresh, labelled by a human blind to both methods, and corpus-weighted. Precision: of the posts the filter calls Kenyan, the share that are. Recall: of the Kenyan posts, the share the filter finds.
The learned classifier finds about 83% of Kenyan posts at about 89% precision. The keyword gate has precision 0.973 and recall 0.516, so it misses about 48% of Kenyan posts.
| Method | Precision | Recall |
|---|---|---|
| keyword gate | 0.973 | 0.516 |
| learned classifier | 0.889 | 0.827 |
Human labels, drawn fresh, judged blind, corpus-weighted. The honest framing is "the filter finds about 83% of Kenyan posts at about 89% precision", not "X% of the corpus is Kenyan".
Source: analysis/investigations/2026-09-12-relevance-classifier/findings.md / Measured 2026-09-13
03 / Output
What the detector surfaced, and what a reader made of it
BasisOne frozen snapshot, not the live run. Each method's communities were read blind by a model reader at a relevance floor of 0.5; cases are communities read, and the counts are how many that reader called political or Kenya-relevant. This describes what the method surfaced. It is not a rate: there is no denominator.
| Method | Communities read | Political | Kenya-relevant |
|---|---|---|---|
| v2 | 17 | 5 | 12 |
| v1 | 17 | 1 | 3 |
Neither method surfaced anything the reader called an influence operation. Snapshot 2026-09-05-promotion-off__emb20260912.
Model verdicts, 17 cases per method, read blind. A description of the method's output, never a prevalence rate - there is no denominator. The latest daily run (10 Oct 2026, 21:20 EAT) produced a listing. The listing is account level, so it is not published and its length is not shown.
Source: analysis/investigations/2026-09-12-component-ranking/findings.md / Measured 2026-09-12
04 / Failures
Where the method failed its own tests
BasisEach is a measurement of this project's own method failing, so no collection artifact can flatter it.
A high self-amplification score does not separate engagement pods from influence operations. Confirmed operations self-amplify more than the pods this project's detector found, so the filter was dropped.
effect size d = +0.78, confirmed operations above pods
Standardised mean difference of the self-amplification score, confirmed operations against the pods found on this corpus. Group sizes are not recorded in the cited document.
Source: docs/OBJECTIVES.md (A3)
At a cosine cut of 0.85 in this encoder, most admitted post pairs are unrelated Sheng replies, not copies.
59 of 100 sampled pairs unrelated; 26 same message; 15 same topic
100 cross-author post pairs at or above 0.85 drawn from 279,060 behind the top 500 and labelled blind by a reader. Of all 279,060 pairs, 3% were near-copies and the median pair shared no words.
Source: docs/analysis/v2-findings.md (section 4) / Checked 2026-09-11
A raw toxicity series over this corpus is not publishable: it moved because the collector changed what it collected, not because the discourse changed.
raw series +78%; composition-standardised series flat then falling
Baseline scope, July to August 2026. The baseline mix moved from 70.7% search and 12.1% replies to 14.3% search and 72.6% replies. The standardised series holds the mix at the earlier reference week.
Source: docs/analysis/2026-09-13-publishable-statistics.md
Source: docs/analysis/2026-09-13-publishable-statistics.md / Measured 2026-09-13
05 / Pipeline
Is the pipeline running?
Daily detector run
BasisThe newest persisted run of the daily detector, from its own run record. Stale means older than 36 h when this page was built. The listing's length and contents are not published.
- Last run
- 10 Oct 2026, 21:20 EAT
- Window
- 21 days to 2026-10-09
- Run id
- 20261010T182001Z
- Runs recorded
- 2
- Run days, last 14
- 2026-10-10
- Missed days
- none
- networks (s)
- 325.0
- fuse centrality (s)
- 2.9
- relevance (s)
- 61.4
- communities (s)
- 5.3
Source: coord2/kind=daily_runs
Collection volume
BasisRows the collector wrote to posts/ per UTC collection day (the dt partition), all post types. Includes re-collections of the same post, so it is not distinct posts and not Kenyan posts. Scope is the partition's own type, not first-seen type. A day with no partition is a gap day: nothing was collected and it cannot be backfilled. Today's open partition is excluded.
Collection began on 2026-07-16 (UTC). Across the whole period 13 days have no data at all. A missed day is a hole: X search reaches back 14 days, so it cannot be collected after that.
- baseline
- targeted
- control
- other
- gap day, nothing collected
Show the numbers
| UTC day | Rows | Objects | baseline | targeted | control | other |
|---|---|---|---|---|---|---|
| 2026-10-09 | 50,031 | 79 | 42,522 | 6,186 | 1,323 | 0 |
| 2026-10-08 | 63,425 | 88 | 54,633 | 7,716 | 1,076 | 0 |
| 2026-10-07 | 82,338 | 129 | 74,466 | 7,002 | 870 | 0 |
| 2026-10-06 | 57,506 | 97 | 48,286 | 8,260 | 960 | 0 |
| 2026-10-05 | 58,107 | 90 | 51,031 | 5,879 | 1,197 | 0 |
| 2026-10-04 | 80,943 | 129 | 72,133 | 7,224 | 1,586 | 0 |
| 2026-10-03 | 63,442 | 83 | 55,608 | 6,613 | 1,221 | 0 |
| 2026-10-02 | 72,387 | 93 | 64,292 | 6,699 | 1,396 | 0 |
| 2026-10-01 | 98,611 | 133 | 90,590 | 6,322 | 1,699 | 0 |
| 2026-09-30 | 72,967 | 88 | 65,533 | 6,059 | 1,375 | 0 |
| 2026-09-29 | 56,538 | 97 | 47,592 | 7,186 | 1,760 | 0 |
| 2026-09-28 | 95,337 | 142 | 84,341 | 9,292 | 1,704 | 0 |
| 2026-09-27 | 63,092 | 105 | 53,951 | 7,899 | 1,242 | 0 |
| 2026-09-26 | 63,514 | 106 | 53,560 | 8,738 | 1,216 | 0 |
| 2026-09-25 | 91,716 | 130 | 82,672 | 7,811 | 1,233 | 0 |
| 2026-09-24 | 62,806 | 102 | 52,440 | 9,065 | 1,301 | 0 |
| 2026-09-23 | 67,694 | 98 | 58,765 | 7,518 | 1,411 | 0 |
| 2026-09-22 | 66,848 | 89 | 63,090 | 3,531 | 227 | 0 |
| 2026-09-21 | 73,355 | 102 | 65,028 | 7,673 | 654 | 0 |
| 2026-09-20 | 100,140 | 140 | 68,638 | 30,947 | 555 | 0 |
| 2026-09-19 | 122,511 | 170 | 98,623 | 23,199 | 689 | 0 |
| 2026-09-18 | 103,788 | 143 | 66,427 | 36,465 | 896 | 0 |
| 2026-09-17 | 107,704 | 138 | 70,459 | 36,233 | 1,012 | 0 |
| 2026-09-16 | 128,658 | 176 | 104,172 | 23,611 | 875 | 0 |
| 2026-09-15 | 105,457 | 127 | 69,025 | 36,011 | 421 | 0 |
| 2026-09-14 | 206,119 | 229 | 70,746 | 134,973 | 400 | 0 |
| 2026-09-13 | 84,270 | 125 | 78,549 | 5,721 | 0 | 0 |
| 2026-09-12 | 50,209 | 68 | 43,664 | 6,545 | 0 | 0 |
| 2026-09-11 | 51,903 | 67 | 44,106 | 7,797 | 0 | 0 |
| 2026-09-10 | 68,567 | 94 | 58,615 | 9,952 | 0 | 0 |
Source: posts/ partitions: object listing and parquet footers
Enrichment lag
BasisLatest dt partition per stage, and rows written to it over the last 7 closed UTC days. A stage's dt is when it ran, not the date of the posts it scored, so rows are throughput and not coverage. lag_days is the newest posts dt minus the stage's newest dt. relevance is the promoted model only.
| Stage | Newest dt | Lag (days) | Rows, last 7 d |
|---|---|---|---|
| posts | 2026-10-10 | 0 | 455,792 |
| embeddings | 2026-10-10 | 0 | 25,500 |
| relevance | 2026-10-10 | 0 | 220,160 |
| hatespeech | 2026-10-10 | 0 | 25,500 |
| incitement | 2026-09-28 | 12 | 0 |
Source: posts/, embeddings/, relevance/, hatespeech/, incitement/: listings and footers
07 / Not shown
What this page leaves out
Each of these is a number or a claim this project could produce and has decided it cannot defend. They are listed so the gap is visible, not so a reader fills it with an assumption.
Any prevalence rate
Nothing in the collector samples the discourse at random, so no rate over it has a denominator. A control arm is needed first.
Any account, handle or per-account claim
Detection says accounts act together; neither it nor a reader's judgement establishes that a named account is inauthentic.
Counts of coordinated accounts or communities from the live run
The listing length is a triage budget and the community count depends on a clustering resolution and seed. Neither is a finding.
A toxicity series over time
The raw series moved with the collector's own target list. Only a composition-standardised or within-partition rate may be shown, and none is shown yet.
Cross-channel corroboration of clusters
The earlier statement about it is false and was retired.