Open source · lees uit de bron

X's algoritme, gelezen uit de bron

Op 13 augustus 2026 publiceerde X de numerieke rangschikkingsgewichten die het in januari had achtergehouden. De meeste cijfers die circuleren over "het X-algoritme" zijn onjuist — meestal omdat ze correct waren over het 2023-model, dat niet langer bestaat. Elk nummer op deze pagina is een link naar de bronregel waar het vandaan komt, vastgezet op één commit.

Repository xai-org/x-algorithmCommit 76843a5 (2026-10-02)Licentie Apache-2.0Parameters gesynchroniseerd 2026-10-01T16:00:46ZPaginagegevens opnieuw gegenereerd 2026-10-02Dagelijks gecontroleerd tegen de repository

182

live parameters

aanpasbaar zonder uitrol

23

gecompileerde constanten

vereist een codewijziging

135

pipeline-componenten

bronnen, filters, scorers

12

claims gecontroleerd

elk tegen de bronregel

2798

accounts genoemd in de code

verwijderd uit 'Voor Jou' tenzij je ze volgt

Controleer een bericht aan de hand van de code

Plak een link naar een openbaar bericht. U krijgt de regels die er daadwerkelijk op van toepassing zijn — inclusief de landbeperkingen die het kunnen verbergen — gelezen uit de vastgepinde commit.

DelenPlaats op XDelen op LinkedIn

De wegingen

Wat elke actie werkelijk waard is

X states it runs cron scripts that set the defaults in the repository's code to be the primary production values, and aims for experiments running at 10% or more of traffic to be visible in the repository. The values below are those defaults, read at the pinned commit.

Dit zijn de gewichten die de scorer toepast — gemeten, niet beloofd. Voordat wordt gescoord, vermenigvuldigt `perturbed()` 25 van de 27 onderstaande gewichten met `(sigma * perturbation_sign(salt, user_id, head)).exp()` — het teken is vastgesteld per kijker en per 'head'. De 2 die het ongemoeid laat, zijn de modificatiegewichten: BidirectionalFollowDwellWeightBoost, BidirectionalFollowReplyWeightBoost. `WeightPerturbationSigma` en `WeightPerturbationSalt` zijn feature-switches: X kan deze wijzigen zonder code te hoeven implementeren. Bij de vastgelegde commit is `WeightPerturbationSigma` 0.0, en de 'guard' `sigma <= 0.0` retourneert ze ongewijzigd. Lees het bij de bron

Elke rij bevat de code waaruit deze is gelezen — druk opUitlegom de daadwerkelijke Rust-regels te tonen, zonder de pagina te verlaten.

ActieWegingvs een likeBron
binaryMultiplies the predicted probability of a discrete action.
share via copy linkShareViaCopyLinkWeight2040×
param.rs
quoteQuoteWeight510×
param.rs
replyReplyWeight510×
param.rs
share via dmShareViaDmWeight510×
param.rs
follow authorFollowAuthorWeight48×
param.rs
shareShareWeight24×
param.rs
retweetRetweetWeight12×
param.rs
favoriteFavoriteWeight0.51×
param.rs
clickClickWeight0.30.6×
param.rs
open linkOpenLinkWeight0.20.4×
param.rs
video openVideoOpenWeight0.070.1×
param.rs
dwellDwellWeight0.050.1×
param.rs
photo expandPhotoExpandWeight0.050.1×
param.rs
quoted clickQuotedClickWeight0.050.1×
param.rs
post unexploredPostUnexploredWeight0.020×
param.rs
profile clickProfileClickWeight0—
param.rs
quoted vqvQuotedVqvWeight0—
param.rs
vqvVqvWeight0—
param.rs
not dwelledNotDwelledWeight-0.02−0×
param.rs
block authorBlockAuthorWeight-31.2−62×
param.rs
not interestedNotInterestedWeight-47.52−95×
param.rs
mute authorMuteAuthorWeight-58.8−118×
param.rs
reportReportWeight-234−468×
param.rs
continuousApplies to a quantity (watch or dwell seconds), not a probability.
cont click dwell timeContClickDwellTimeWeight0.4—
param.rs
cont dwell timeContDwellTimeWeight0.004—
param.rs
modifierNot a head weight: adds to another weight, or gates a branch.
bidirectional follow reply weight boostBidirectionalFollowReplyWeightBoost15—
param.rs
bidirectional follow dwell weight boostBidirectionalFollowDwellWeightBoost0—
param.rs

De groepering in binair, continu en modifier is van ons — the weights struct and each field's use in vm-ranker/scoring/value_model.rs. X publiceert die taxonomie niet; we scheiden ze omdat alleen de binaire met elkaar vergelijkbaar zijn.

Stel een voorspelde waarschijnlijkheid in voor elke actie en zie de bijdrage ervan aan de score. Alleen de gewichten die een waarschijnlijkheid vermenigvuldigen, worden hier aangeboden — dat is de rekenkunde die de code daadwerkelijk uitvoert.

0% → 0.000
0% → 0.000
0% → 0.000
0% → 0.000
0% → 0.000
0% → 0.000
0% → 0.000
0% → 0.000
Gewogen som0.000

Waarom er hier geen "likes-equivalent" is: Weights multiply a predicted probability, not an engagement count. Dividing one weight by another does not yield an exchange rate between actions.

Claimcontrole

Cijfers die iedereen herhaalt, gecontroleerd tegen de code

Dit zijn geen verzinsels. De meeste waren accurate cijfers voor de zware ranker die Twitter in 2023 publiceerde, een Scala-pipeline die sindsdien is vervangen. Ze bleven circuleren nadat hetgeen ze beschreven niet meer bestond.

Elke onderstaande bewering bevat de zoekopdrachten die deze ondersteunen — het patroon, de bestanden, het aantal — zodat u ze zelf kunt uitvoeren tegen de vastgepinde commit. U zult hier nooit een zien die ons tegenspreekt: als dat wel het geval was, zou deze pagina niet worden gebouwd in plaats van de zin te publiceren die het weerlegt.

Contradicted by the source

“Een repost is 20 keer zoveel waard als een like.”

RetweetWeight is 1.0 en FavoriteWeight is 0.5, dus een repost weegt twee keer zo zwaar als een like — niet twintig keer.

Waar het vandaan komt: Geen enkele gepubliceerde versie van het algoritme heeft ooit 20 gebruikt. De 'heavy ranker' van 2023 woog een retweet ook op 1.0 tegenover een favoriet op 0.5.

Was true, of an older version

“Een antwoord is 27 keer zoveel waard als een like (of 13.5 keer).”

ReplyWeight is 5.0 tegenover FavoriteWeight 0.5, dus tien keer — en veertig keer tussen wederzijdse volgers, omdat BidirectionalFollowReplyWeightBoost 15.0 toevoegt aan het antwoordgewicht voor originele berichten tussen accounts die elkaar volgen.

Waar het vandaan komt: Beide cijfers waren reëel, voor een model dat niet langer bestaat: de 'heavy ranker' van 2023 publiceerde 27 op 31-03-2023, daarna 13.5 op 05-04-2023. Ze beschrijven een Scala-pipeline die is vervangen door de huidige Rust-pipeline.

Was true, of an older version

“Klikken op uw profiel zijn 12 keer zoveel waard als een like.”

ProfileClickWeight is 0.0. Een profielklik draagt niets bij aan de gewogen score.

Waar het vandaan komt: 12.0 was het gewicht in 2023 voor `good_profile_click` — een ander, samengesteld signaal (een profiel openen EN dan liken of antwoorden). Het huidige model heeft een eenvoudige profielklik-kop, gewogen op nul.

No such parameter exists

“Een bladwijzer is 10 likes waard — bladwijzers zijn het sterkste signaal.”

Er is geen bladwijzergewicht in param.rs, dus bladwijzers tellen helemaal niet mee in de gewogen score. Ze zijn echter niet onzichtbaar: bookmark_count wordt gehydrateerd op elke kandidaat als een modelfunctie, en ClientTweetBookmark telt als een positieve interactie in de geschiedenis van de kijker. Gelezen, maar ongewogen.

Waar het vandaan komt: De Scala-vernieuwing van 2025 declareerde wel een home_mixer_model_weight_bookmark-parameter — met een standaardwaarde van 0.0. Geen enkele gepubliceerde versie heeft het ooit op 10 gewogen.

Wat we zochten, bij de vastgepinde commit

  • Er is geen bladwijzergewicht in param.rs

    bookmark · 2 bestanden · 0 overeenkomsten

  • bookmark_count wordt gehydrateerd op elke kandidaat als een modelkenmerk

    bookmark_count · 1 bestand · 5 overeenkomsten

  • ClientTweetBookmark telt als een positieve interactie in de geschiedenis van de kijker

    ClientTweetBookmark · 1 bestand · 1 overeenkomst

Right numbers, wrong reading

“Eén melding annuleert 468 likes (−234.0 ÷ 0.5).”

De berekening klopt, maar de conclusie is nog steeds verkeerd. Gewichten vermenigvuldigen een VOORSPELDE WAARSCHIJNLIJKHEID, niet een telling van acties. X stelt dat de basiswaarschijnlijkheid van een melding meer dan duizend keer lager is dan die van een like, dus het delen van het ene gewicht door het andere geeft geen wisselkoers tussen acties.

Waar het vandaan komt: Deze is niet verouderd — het is een verkeerde interpretatie van correcte cijfers, en het verschijnt zelfs op pagina's die de juiste tabel publiceren. X heeft er op 14-08-2026 een expliciete waarschuwing over toegevoegd aan zijn eigen README.

No such parameter exists

“Betrokkenheidssnelheid telt 1000×, auteursautoriteit 50×, recentheid 22×.”

Geen parameter genoemd voor snelheid, autoriteit of recentheid bestaat in param.rs. Leeftijd is helemaal geen gewicht — het is een harde grens: AgeFilter verwijdert elke post ouder dan MAX_POST_AGE, een gecompileerde constante van 48 uur. Niets vermenigvuldigt de score van een post met zijn versheid.

Wat we zochten, bij de vastgepinde commit

  • Geen parameter genoemd voor snelheid, autoriteit of recentheid bestaat in param.rs

    velocity|authority|recency · 1 bestand · 0 overeenkomsten

  • AgeFilter verwijdert elke post ouder dan MAX_POST_AGE

    AgeFilter::new\(.*MAX_POST_AGE · 1 bestand · 1 overeenkomst

Contradicted by the source

“Een gecoördineerde groep kan uw post begraven door deze massaal te rapporteren of te blokkeren.”

X behandelt dit direct in de opmerkingen van param.rs, en het mechanisme dat het beschrijft is controleerbaar: het model voorspelt UW waarschijnlijkheid van een actie, dus aanbevelingen zijn gepersonaliseerd — rapporten van een brigade beïnvloeden voornamelijk wat wordt aanbevolen aan mensen die vergelijkbaar zijn met die brigade. En een betrokkenheid telt alleen als deze plaatsvindt op een post die wordt weergegeven in de Home Tijdlijn: rechtstreeks naar een post navigeren, bijvoorbeeld vanuit een groepschat, heeft geen rankingimpact.

Waar het vandaan komt: Een redelijke gevolgtrekking uit de zeer grote negatieve gewichten, die de gewichten alleen niet ondersteunen.

Wat we zochten, bij de vastgepinde commit

  • X behandelt dit direct in de opmerkingen van param.rs

    recommendations are personalized · 1 bestand · 1 overeenkomst

Was true, of an older version

“X publiceerde de code maar hield de rankinggewichten achter om veiligheidsredenen.”

Waar voor de release van januari 2026, onwaar sinds 13-08-2026. De numerieke standaardwaarden staan nu in param.rs, en X stelt dat cron-scripts ze gelijk houden aan de primaire productiewaarden.

Waar het vandaan komt: Nauwkeurige rapportage van de daling in januari 2026, nooit bijgewerkt na augustus.

Wat we zochten, bij de vastgepinde commit

  • X stelt dat cron-scripts ze gelijk houden aan de primaire productiewaarden

    cron scripts that set the defaults · 1 bestand · 1 overeenkomst

Contradicted by the source

“Posts met externe links worden lager gerangschikt.”

In de gepubliceerde rankingcode is OpenLinkWeight POSITIEF met 0.2 en onvoorwaardelijk toegepast — het openen van een link wordt beloond. Links worden alleen bestraft via veiligheidslabels zoals MALICIOUS_URL en DO_NOT_AMPLIFY, die gaan over de bestemming, niet over het uitlinken zelf.

Wat we zochten, bij de vastgepinde commit

  • Links worden alleen bestraft via veiligheidslabels zoals MALICIOUS_URL

    MALICIOUS_URL · 7 bestanden · 1 overeenkomst

  • … en DO_NOT_AMPLIFY

    DO_NOT_AMPLIFY · 7 bestanden · 1 overeenkomst

Contradicted by the source

“Een betaald vinkje koopt een rankingboost.”

Geen premium, geverifieerde of abonnementsvermenigvuldiger bestaat in param.rs, en geen dergelijke herscorer verschijnt in de gepubliceerde scorers. De code van 2023 bevatte er wel een — vermenigvuldigers van 4.0 binnen het netwerk en 2.0 buiten het netwerk voor Blauw Geverifieerde auteurs — en deze is verdwenen uit de huidige boom. Eerlijke beperking: Phoenix is een geleerd model waarvan de gewichten niet zijn gepubliceerd, dus een geleerde correlatie kan niet worden uitgesloten door de code te lezen.

Waar het vandaan komt: De Scala-pipeline van 2023 paste inderdaad een 4.0 / 2.0 Blauw Geverifieerde vermenigvuldiger toe.

Wat we zochten, bij de vastgepinde commit

  • Geen premium-, geverifieerde of abonnementsvermenigvuldiger bestaat in param.rs

    premium|verified|subscription · 1 bestand · 0 overeenkomsten

  • geen dergelijke herscorer verschijnt in de gepubliceerde scorers

    premium|verified|subscription · 8 bestanden · 0 overeenkomsten

Contradicted by the source

“X publiceert nu overheidsverwijderingsverzoeken in zijn open-source repository, en Brazilië is het enige land dat wordt vermeld.”

De repository publiceert het handhavingsMECHANISME, nooit een verzoek. De regels die een bericht verwijderen voor kijkers in een land waar het wordt tegengehouden — LegalTakedown en LocalLawsTakedown — lezen een reden die de landcode bevat, maar die reden wordt tijdens runtime opgehaald van een niet-gepubliceerde service, en het type dat deze bevat (TakedownReason) is gedefinieerd in een 'crate' die ontbreekt in de repository. X publiceert ook de onderliggende infrastructuur rond dat type, in Scala: een gizmoduck-leesfilter dat niet-afgedwongen verwijderingen verwijdert voordat een leesbewerking terugkeert, een Tweet Entity Service-kolom en -transformatie die de verwijderingsredenen van een bericht ophalen, en de interne taken die die redenen omzetten in de labels die een account over zichzelf te zien krijgt. De Thrift-structs die het bevatten — Takedowns { country_codes, takedown_country_reasons } — worden dus gelezen door gepubliceerde code, in 3 bestanden: `takedowns/gizmoduck/RedactUnenforcedTakedownsFilter.scala`, `takedowns/tweet-entity-service/TakedownReasonsTransform.scala`, `under-the-hood/scalding/UthPctdAccountTakedownEventsJob.scala`. Wat dat toevoegt is meer MECHANISME, niet één verzoek: bij de vastgelegde commit is geen enkele landcode naast een verwijderingsreden geschreven buiten testfixtures — de enige tweeletterige codes die de verwijderingscode bevat, zijn `xx`, `xy`, de wereldwijde 'sentinels' die de bron zelf benoemt, wat overal betekent en het tegenovergestelde is van een land. En de methode die de Tweet Entity Service om die codes zou vragen onder zijn eigen naam, get_takedown_country_codes, verschijnt nergens in de repository. Brazilië is iets heel anders: een hardgecodeerde lijst van 2795 accounts die zijn gerapporteerd aan het Kiesgerechtshof, afkomstig uit de openbare dataset van kandidaten, verwijderd uit 'Voor Jou' voor elke kijker wereldwijd, tenzij ze het account volgen — zonder enige landconditie, wat het tegenovergestelde is van hoe een wettelijke verwijdering hier werkt. Eerlijke beperking: een repository zonder hardgecodeerd land is geen platform zonder landspecifieke verwijderingen. De verzoeken bestaan; ze leven buiten de repository, geaggregeerd, in het Transparantiecentrum en het DSA-rapport.

Waar het vandaan komt: X's eigen bericht van 14 augustus kondigde twee dingen aan: de rangschikkingsgewichten en het Braziliaanse verkiezingsfilter. Musk quote-plaatste het de volgende dag in 61 tekens — “Elke censuur die door regeringen wordt vereist, is nu duidelijk zichtbaar” — waarbij hij noch de repository, noch verzoeken, noch landen noemde; de pers koppelde het aan een gebruikersgerichte melding die was aangekondigd, maar niet geleverd. De woorden “verzoeken” en “in het open-source algoritme” verschijnen voor het eerst samen op een aggregatoraccount.

Wat we zochten, bij de vastgepinde commit

  • De gepubliceerde Scala 'plumbing' leest de Thrift takedown structs — Takedowns { country_codes, takedown_country_reasons }

    \bTakedowns\b|\btakedownCountryReasons\b · 43 bestanden · 15 overeenkomsten

Contradicted by the source

“Een trefwoord dempen verbergt elk bericht dat het bevat.”

Een gedempt trefwoord is geen enkele regel. De gepubliceerde tijdlijnservice past het toe met 2 filters die niet dezelfde tekst lezen: ViewerMutedKeywordFilter, geregistreerd in phoenix_candidate_pipeline.rs, vergelijkt het met tweet_text; FollowingViewerMutedKeywordFilter, geregistreerd in reverse_chron_posts_pipeline.rs, vergelijkt het met ancestor_texts, quoted_tweet_text en tweet_text. De velden die slechts enkele ervan lezen — ancestor_texts en quoted_tweet_text — worden geschreven door conversation_gap_ancestor_hydrator.rs, quote_hydrator.rs en quoted_post_text_hydrator.rs, geregistreerd in phoenix_candidate_pipeline.rs, phoenix_scores_pipeline.rs en reverse_chron_posts_pipeline.rs. Een pipeline die die hydrators niet uitvoert, vult ze nooit: daar is de tekst van een geciteerd of voorgaand bericht niet alleen ongelezen, maar afwezig. Buiten de tijdlijn draagt de zichtbaarheidsfilterende regelengine — de laag die een bericht kan verbergen waar het ook verschijnt — ViewerMutesAuthor (Mutes) en ViewerMutesRetweets (MuteRetweets), en geen enkele regel waarvan de beslissing een trefwoord leest. Het enige resultaat van een gedempt trefwoord dat deze repository benoemt, MatchesMutedKeyword, verschijnt precies 1 keer — in graphql_results.rs — en alleen aan de linkerkant van een 'match arm' die het toewijst aan een interstitieel label. Niets hier beslist erover; wat dat wel doet, is niet gepubliceerd. Twee eerlijke beperkingen. Deze repository is de service die een tijdlijn bouwt: wat dempen doet in meldingen of in zoekopdrachten wordt elders beslist, in code die X niet publiceert, en een afwezigheid hier is een afwezigheid uit de repository, niet uit het product. En we vertellen u niet welke tab elk pipeline bedient — die bedrading loopt door verschillende lagen, en een mapping die we niet schoon kunnen extraheren, is een mapping die we niet publiceren.

Waar het vandaan komt: Dempen is een enkele instelling in het product, dus het leest als een enkele regel die overal van toepassing is. De gepubliceerde code toont iets beperkters: een gedempt trefwoord wordt toegepast terwijl een tijdlijn wordt samengesteld, en de filters die het toepassen lezen niet allemaal dezelfde tekst — dus een bericht kan het woord bevatten op een plaats waar geen filter op dat pad ooit naar kijkt.

De pijplijn

Wat er met een bericht gebeurt, in volgorde

Kandidaatbronnen produceren berichten, hydrators voegen kenmerken toe, filters kunnen een bericht volledig verwijderen, scorers kunnen het alleen verplaatsen. Elk knooppunt linkt naar zijn bestand. Randen verklaren hoe we ze hebben afgeleid — gelezen uit de code, gegeven door de directory-indeling, of, op hun zwakst, gematcht op naam.

Per land

Wat verandert afhankelijk van waar u leest

Twee lijsten met landen bepalen wat er verandert afhankelijk van waar u leest, en ze betekenen niet hetzelfde. De ene houdt gevoelige media achter voor kijkers die geen leeftijd hebben opgegeven. De andere bepaalt eenvoudigweg welke landen het model mag onderscheiden — elk ander land wordt “overig”, wat geen beperking is, maar slechts een blinde vlek. Elke kaart hieronder geeft aan waar de eigen lijst vandaan komt: een constante die de code toepast, of een terugval die een runtime-parameter kan vervangen.

…

Klik op een land in roze om de accounts te lezen die deze code daar één voor één benoemt. In de hele repository heeft precies één land zo'n lijst.

Hoe dit wordt gecontroleerd: “de hele repository” wordt gecontroleerd op de hele repository, niet op één taal: elk bestand onder de vastgezette commit wordt gelezen, en een lijst met benoemde accounts wordt gevonden aan de hand van de VORM ervan — een @handle geschreven in een commentaarregel, onmiddellijk gevolgd door de numerieke ID van het account. Die vorm is niet afhankelijk van Rust, dus de dag dat dezelfde lijst in een andere taal wordt gepubliceerd, meldt de build dit in plaats van dat de pagina stilvalt.

2798 accounts worden direct benoemd in de broncode, via numerieke ID en via handle. Al het andere in het handhavingstraject werkt op basis van een label dat tijdens runtime wordt toegevoegd, en die labeling wordt niet gepubliceerd.

Brazil — 2795 accounts genoemd in de code

Gebruikers-ID's gerapporteerd aan het Kiesgerechtshof voor de Braziliaanse verkiezingen van 2026.

Brazilië 2026 verkiezingsfilter Art. 28 § 1º-A van Kiesresolutie nr. 23.610: Applicatieproviders die een aanbevelingssysteem voor gebruikers gebruiken, moeten de kanalen en profielen die aan het Kiesgerechtshof zijn gerapporteerd onder de voorwaarden van § 1º van dit artikel, en, behalve in gevallen van betaalde boosting, de inhoud die daarop is geplaatst, uitsluiten van de resultaten. https://dadosabertos.tse.jus.br/dataset/candidatos-2026
2795
accounts geschreven in de bron, via ID en via handle
tenzij je volgt
hun posts, reposts, quotes en draadvoorouders worden verwijderd uit Voor Jou — tenzij de kijker het account al volgt
geen landtest
geen land-, markt- of locatietoestand verschijnt in het filter of waar het is geregistreerd

⚠ Geen enkele land-, markt- of locatietoestand verschijnt in het filterbestand of rond de regel die het registreert. Dat is een verklaring over de gepubliceerde code — welke pijplijn welke markt bedient, kan worden beslist in een laag die X niet publiceert.

52 andere accounts worden in dit bestand genoemd en worden NIET gefilterd — de code vermeldt waarom elk ervan met rust werd gelaten: 44 × “@… geen actief account gevonden.”; 8 × “Wij geloven dat het account @… gerapporteerd door de kandidaat niet het daadwerkelijke account van de kandidaat is, dus filteren we het momenteel niet.” Er zijn dus 2847 benoemde accounts hier verantwoord, waarvan 2795 daadwerkelijk gefilterd.

Geregistreerd in de pijplijn op home-mixer/candidate_pipeline/phoenix_candidate_pipeline.rs:391

  • @madeleinelacsko
  • @nanacachen
  • @renildo
  • @VladimirAlves
  • @renatoroseno
  • @pedro_lupion
  • @erasintetica
  • @soninhafrancine
  • @AecioNeves
  • @tatyanavaleria
  • @ClariceChacon
  • @rosilenedf
  • @raulchristiano
  • @Rafael_Parente
  • @RicardoFabrizio
  • @marlonluz
  • @eduardopinheiro
  • @falcaopatos
  • @diegotavares
  • @RubinhoDivi
  • @depmariomotta
  • @depchinaglia
  • @Sen_Cristovam
  • @marcelvanhattem
  • @lgmbrasilia
  • @nilvanferreira
  • @DelioPinheiro
  • @RafaellMilas
  • @chagasvieira
  • @GabrielSouza_RS
  • @Pimenta13Br
  • @fabriziomeller
  • @rigotto
  • @gustavotutuca
  • @camasao50
  • @radiovaldo
  • @euserafimcorrea
  • @merisio
  • @rafangeli
  • @pauloteixeira13
  • @crismonteirosp
  • @ManuelaDavila
  • @tomioyano
  • @CintyaMuniz
  • @rodrigolimamdh
  • @Biango
  • @samiabomfim
  • @profsta
  • @Jfelippeneto
  • @depguibismarck

2745 meer accounts staan in deze lijst

Laat een e-mailadres achter om de volledige lijst hier te openen, en we laten u weten wanneer deze verandert — de dagelijkse controle vergelijkt onze vastgelegde commit al met die van hen.

Voor alle duidelijkheid: deze lijst is openbaar. Deze bevindt zich in een Apache-2.0 repository, en u kunt hetzelfde bestand gratis lezen — home-mixer/filters/brazil_2026_election_filter.rs. De e-mail koopt hier gemak, geen toegang.

De numerieke ID's in het bestand zijn geobfusceerd — de repository zegt dit zelf. De handles zijn dat niet.

3 accounts worden benoemd zonder landaanduiding.
ThunderServiceImplthunder/thunder_service.rs:30
3
accounts geschreven in de bron, via ID en via handle
tenzij je volgt
hun posts, reposts, quotes en draadvoorouders worden verwijderd uit Voor Jou — tenzij de kijker het account al volgt
geen landtest
geen land-, markt- of locatietoestand verschijnt in het filter of waar het is geregistreerd

⚠ Geen land-, markt- of locatietoestand verschijnt in het filterbestand of rond de regel die het registreert. Dat is een verklaring over de gepubliceerde code — welke pijplijn welke markt bedient, kan worden besloten in een laag die X niet publiceert.

Alle 3 accounts, in bronvolgorde

  • @grok
  • @gork
  • @products

De numerieke ID's in het bestand zijn geobfusceerd — de repository zegt dit zelf. De handles zijn dat niet.

Deze lijst is gereproduceerd uit een openbare Apache-2.0 repository, die stelt dat de handles zijn opgenomen voor transparantie. Wij rapporteren wat de code doet. Wij onderschrijven, verifiëren of beoordelen de rapporten die een account hier hebben geplaatst niet.

Overheidsverwijderingen

Het mechanisme is gepubliceerd. De verzoeken niet.

De repository bevat de regels die een bericht verbergen voor lezers in een land dat erom vroeg. Het bevat geen verzoek en geen land: de reden die de landcode draagt, wordt tijdens runtime opgehaald van een service die X niet publiceert.

0

verwijderingsverzoeken gepubliceerd in de repository

0

landen gekoppeld aan één

2

regels die handelen op basis van een verwijderingsreden

Hoe dit wordt geteld: elk bestand in de repository wordt gescand tijdens de buildtijd — niet alleen de Rust-bestanden, omdat de 'takedown plumbing' ook in Scala zit, en een afwezigheid gemeten waar het ding niet langer is, is geen afwezigheid. Testcode wordt op twee niveaus verwijderd — bestanden die een ouder declareert als `#[cfg(test)] mod …;` worden uitgesloten, en in de rest wordt de `#[cfg(test)]` body weggesneden — en waar naar wordt gezocht, is een landcode die naast een verwijderingsreden is geschreven. De tweeletterige codes die de bron zelf wereldwijd benoemt (`xx`, `xy`) betekenen overal in plaats van een land: ze worden apart gehouden en openbaar vermeld. De build mislukt als dit aantal ooit ophoudt nul te zijn — de bovenstaande bewering kan niet vanzelf verouderen.

Waar het land vandaan komt: het type dat het draagt, TakedownReason, is niet gedefinieerd in enig bestand van deze repository — het wordt geïmporteerd uit xai_core_entities, een crate die hier niet is gepubliceerd.

En de methode die de landen van een verwijdering zou ophalen, get_takedown_country_codes, komt nergens in de repository voor. De interface bestaat aan de kant van X; de gepubliceerde code roept deze nooit aan.

Lees dit correct: een repository zonder hardgecodeerd land is geen platform zonder landspecifieke verwijderingen. De verzoeken bestaan — ze bevinden zich buiten deze repository, geaggregeerd per land en per halfjaar in de transparantierapporten van X, nooit per individuele melding. Wat hier wordt gemeten, is wat de code zegt, niet wat het bedrijf doet.

Methode en beperkingen

Wat deze pagina u niet kan vertellen

Het model is niet de code

De bovenstaande gewichten worden toegepast op waarschijnlijkheden geproduceerd door Phoenix, een getrainde transformer waarvan de getrainde parameters niet zijn gepubliceerd. Het lezen van de code kan een correlatie die het model zelf heeft geleerd, niet uitsluiten.

Sommige zaken worden achtergehouden

X stelt dat het de Grox LLM prompt-sjablonen en sommige handhavingsregels achterhoudt, om misbruik te verminderen. De classificatiecode en de regelengine zijn gepubliceerd; de prompttekst niet.

Niemand kan verifiëren wat er draait

X zegt dat cron-scripts deze standaardwaarden gelijk houden aan productiewaarden, en dat experimenten boven ongeveer 10% van het verkeer hier zichtbaar zouden moeten zijn. Beide zijn beweringen over een systeem dat niemand buiten X kan waarnemen.

Parameternamen en codefragmenten worden in het Engels gehouden: ze citeren broncode, en een vertaalde identificatie komt niet meer overeen met de regel die het citeert. De claimcontroles zijn vertaald — de identificaties daarin worden letterlijk gelaten.

Waarom een databedrijf dit heeft gebouwd

Dit is de methode die we verkopen, toegepast op een bron waar iedereen over discussieert: neem iets ondoorzichtigs, verander het in een grafiek waarin elke waarde de herkomstlijn draagt, en weiger een getal te publiceren dat we niet kunnen citeren. Hetzelfde doen we voor overheidsopdrachten, onderzoeksfinanciering en bedrijfsgegevens.