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
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
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.