x algorithmopen sourcealgorithmic transparencymethodprovenance18 augustus 2026

X publiceerde zijn algoritme. We lazen het, we hadden één ding fout, en de bron heeft ons betrapt.

Een speciale editie, buiten de gebruikelijke cyclus. Geen datacluster — een stuk broncode waar de helft van het internet uit het hoofd uit citeert. We lazen alle 123 componenten, linkten elk getal aan zijn regel, en deden één bewering die onze eigen bron drie dagen later weerlegde.

X publiceerde zijn algoritme. Wij lazen het, we hadden één ding fout, en de bron betrapte ons.

Een speciale editie, buiten de gebruikelijke cyclus. Geen datacluster dit keer — een stuk broncode waar de helft van het internet uit het hoofd uit citeert. We lazen alle 123 componenten, publiceerden een pagina die elk getal koppelt aan zijn regel, en deden één bewering die onze eigen bron drie dagen later weerlegde. Hier is wat de code zegt, en wat die fout ons leerde over de methode die we verkopen.

Op 13 augustus 2026 maakte X de rankingcode achter zijn For You-feed open-source, onder Apache-2.0. Binnen tweeënzeventig uur waren de cijfers overal: een repost is twintig likes waard, een profielklik twaalf, één melding annuleert vierhonderdachtenzestig likes.

Bijna geen van die cijfers beschrijft de code die vandaag draait.

Het zijn geen uitvindingen. Het zijn overblijfselen — waar voor een Scala-pipeline die jaren geleden is stopgezet, geciteerd alsof ze de Rust-pipeline die het verving beschreven. Een getal zonder datum en zonder regel code is geen feit. Het is een gerucht met een decimaalpunt.

Dus deden we het onopvallende: we lazen de repository, regel voor regel, en bouwden de pagina die ontbrak.

→ d-nvest.com/x-algorithm — gratis, geen account, negen talen.

1. Wat de code werkelijk zegt

190 parameters die X kan wijzigen zonder code te hoeven uitbrengen. 24 constanten gecompileerd in de binaire code. 123 componenten in de rankingpipeline. Elk van die getallen op onze pagina linkt naar de exacte regel waaruit het is gelezen, vastgezet op één commit — en, sinds deze week, ontvouwt de daadwerkelijke regels van Rust op hun plaats, zodat je ons woord voor een cijfer nooit hoeft te geloven.

Vier van de beweringen die we controleerden, en wat de bron in plaats daarvan zegt:

"Een repost is 20 likes waard." Het is twee waard. `RetweetWeight` is 1.0 tegenover `FavoriteWeight` van 0.5. Geen gepubliceerde versie van dit algoritme heeft ooit 20 gebruikt voor een repost — zelfs niet de versie uit 2023 die mensen citeren.

"Een profielklik is 12 likes waard." Vandaag is het helemaal niets waard: het gewicht is nul. De 12 was reëel, voor een samengesteld signaal dat niet langer bestaat in de boom.

"Eén melding annuleert 468 likes." De rekenkunde is juist en de conclusie is verkeerd. Die gewichten vermenigvuldigen een *voorspelde waarschijnlijkheid*, niet een telling van acties. X stelt dat een melding duizenden keren zeldzamer is dan een like — de twee termen waren vanaf het begin nooit even groot. Het delen van het ene gewicht door het andere geeft geen wisselkoers.

"Het blauwe vinkje koopt bereik." Niets in de gepubliceerde code vermenigvuldigt een score met de abonnementsstatus, en de boost van 2023 is verdwenen uit de boom. De eerlijke limiet, die we op de pagina afdrukken: de uiteindelijke ranking loopt via een geleerd model waarvan de gewichten niet zijn gepubliceerd. Een correlatie die het model zelf heeft geleerd, kan niet worden uitgesloten door code te lezen. Dat zeggen we, omdat het waar is.

En de bevinding die bijna niemand noemt: het zwaarste positieve signaal in de gepubliceerde code is niet de repost, het antwoord of de like. Het is iemand die je link kopieert om deze elders te delen. De 20 die iedereen citeert is echt. Het is alleen gekoppeld aan een compleet andere actie.

2. De bewering die we deden, en die onze eigen bron weerlegde

Hier is het deel dat een marketingteam zou schrappen.

Onze pagina ging live met als kop-bevinding dat geen enkele persoon en geen enkele organisatie ergens in die repository wordt genoemd — geen account-id, geen handle, geen hardgecodeerde lijst. We plaatsten een full-screen nul op de carrousel.

Het was onjuist.

Bij de exacte commit die we hadden vastgezet, bevat `home-mixer/filters/brazil_2026_election_filter.rs` 665 account-id's die in de bron zijn geschreven, elk met zijn handle. Het bestand zegt het zelf: "gebruikersnamen zijn opgenomen voor transparantie." Het filter verwijdert de posts van die accounts uit For You — inclusief reposts, quotes en thread-voorouders — tenzij de kijker ze al volgt. X levert het bewust, in overeenstemming met de Braziliaanse kieswetgeving, en documenteert het in zijn eigen README.

Waarom we het fout hadden, is het enige interessante deel. De zin was niet uit iets geëxtraheerd. Het was met de hand geschreven. Het was waar voor het deel dat we hadden gelezen — de zichtbaarheidsfilterregels — en werd vervolgens stilzwijgend gegeneraliseerd naar "ergens in deze repository." Een generalisatie verifieert zichzelf nooit opnieuw.

Erger nog: een test in onze eigen suite hield de fout in stand. Het controleerde of de zin *bepaalde woorden bevatte*. Het garandeerde dat de zin er was, nooit dat het waar was. Een test kan een leugen vastzetten.

We hebben het dezelfde dag gecorrigeerd. Die bewering wordt nu berekend uit een doorloop van de repository in plaats van erover te worden beweerd, de pagina toont de accounts, en het getal beweegt als de bron beweegt.

De bron weerlegde ons voordat iemand anders dat deed. Dat is precies waar een bron voor is — en het is het hele argument om op deze manier te werken.

3. De landbeperking die geen land bevat

Toen we eenmaal goed begonnen te kijken, bleek de geografie het tegenovergestelde te zijn van wat iedereen aanneemt.

In de hele repository heeft precies één land een eigen lijst. Twee andere landlijsten zijn hardgecodeerd — 16 landen waar gevoelige inhoud wordt ingehouden voor iedereen die geen leeftijd heeft opgegeven, en 18 landen die het model individueel behandelt — en elk ander land op aarde valt in een vangnet: niet geblokkeerd, ongedifferentieerd.

De data voor verwijdering per post — het ding dat mensen bedoelen als ze zeggen "ingehouden in land X" — bevindt zich helemaal niet in de repository. Die regels vergelijken het land van de kijker met codes die elke post tijdens runtime draagt, en die data is niet gepubliceerd. Een kaart die "gecensureerde" landen kleurt op basis van deze code, zou ze uitvinden. Die van ons doet dat niet.

En het ene landspecifieke filter dat *wel* in de code is geschreven, heeft een eigenschap die we niet hadden verwacht: geen enkele landvoorwaarde verschijnt erin, noch rond de regel die het inschakelt. Het wordt onvoorwaardelijk geregistreerd in de filterketen van de pipeline.

We publiceren dat met de bijbehorende limiet, omdat de limiet het eerlijke deel is: welke pipeline welke markt bedient, kan worden bepaald in een laag die X niet publiceert. Wat we wel kunnen zeggen, is wat de gepubliceerde code bevat — en het bevat geen landtest.

4. Wat wordt verwijderd is bereik, niet spraak

De stilzwijgende machinerie bestaat, is leesbaar en is smaller dan het woord "shadow ban" suggereert.

32 verwijderingsregels worden duidelijk geleverd, werkend op 27 labeltypen. Twee daarvan verbergen een post alleen voor niet-volgers — je volgers zien je nog steeds. Dat onderscheid zit in de code, en het verdwijnt elke keer dat iemand naar de pakkende zin grijpt.

Overal behalve dat ene filter, werken de regels op een label dat tijdens runtime is gekoppeld, en de labeling zelf is niet gepubliceerd. De code toont wat *kan* worden gedaan. Nooit aan wie het is gedaan.

5. Waarom een data-bedrijf een week hieraan besteedde

Omdat het het werk is dat we doen voor de kost, publiekelijk gedaan, op een bron waar iedereen al een mening over heeft.

Onze taak is om iets ondoorzichtigs — een register, een indiening, een dataset, een repository — te nemen en het regel voor regel controleerbaar te maken. Het deel dat discipline vereist, is niet het vinden van de antwoorden. Het is luidop zeggen waar de antwoorden stoppen, en jezelf publiekelijk corrigeren wanneer de bron zegt dat je fout zat.

De pagina waakt ook over zichzelf. Een taak vergelijkt onze vastgezette commit elke ochtend met die van X; wanneer ze afwijken, zegt de pagina dat deze achterloopt in plaats van stilzwijgend verouderde cijfers te serveren, en de regeneratie landt op een branch die wacht op een mens. Een pagina die de verouderde cijfers van anderen aan de kaak stelt, wordt zelf niet verouderd.

→ Lees het: d-nvest.com/x-algorithm

Get the next analysis

One deep-dive per edition on where valuable data is hiding — the evidence, the sources, and who would pay for it. No noise.

One email per edition. Unsubscribe any time. We never share your address.

From the marketplace

Explore live data opportunities

Browse datasets by sector & use-case
Found this useful? Share it

d-nvest turns the data assets behind these deals into scored, actionable opportunities.

Explore the pipeline →
X publiceerde zijn algoritme. We lazen het, we hadden één ding fout, en de bron heeft ons betrapt. | d-nvest