Contradicted by the source
“Una ripubblicazione vale 20 volte un 'mi piace'.”
RetweetWeight è 1.0 e FavoriteWeight è 0.5, quindi una ripubblicazione ha il doppio del peso di un 'mi piace' — non venti volte.
Da dove proviene: Nessuna versione pubblicata dell'algoritmo ha mai usato 20. L''heavy ranker' del 2023 ha anche pesato il retweet a 1.0 contro il 'mi piace' a 0.5.
Was true, of an older version
“Una risposta vale 27 volte un 'mi piace' (o 13.5 volte).”
ReplyWeight è 5.0 contro FavoriteWeight 0.5, quindi dieci volte — e quaranta volte tra follower reciproci, perché BidirectionalFollowReplyWeightBoost aggiunge 15.0 al peso della risposta per i post originali tra account che si seguono a vicenda.
Da dove proviene: Entrambi i valori erano reali, per un modello che non esiste più: l''heavy ranker' del 2023 ha pubblicato 27 il 31-03-2023, poi 13.5 il 05-04-2023. Descrivono una pipeline Scala sostituita da quella attuale in Rust.
Was true, of an older version
“I clic sul tuo profilo valgono 12 volte un 'mi piace'.”
ProfileClickWeight è 0.0. Un clic sul profilo non contribuisce in alcun modo al punteggio ponderato.
Da dove proviene: 12.0 era il peso del 2023 per `good_profile_click` — un segnale diverso e composto (aprire un profilo E poi mettere 'mi piace' o rispondere). Il modello attuale ha un semplice 'profile-click head', pesato a zero.
No such parameter exists
“Un segnalibro vale 10 'mi piace' — i segnalibri sono il segnale più forte.”
Non c'è un peso per i segnalibri in param.rs, quindi i segnalibri non entrano affatto nel punteggio ponderato. Non sono, tuttavia, invisibili: bookmark_count viene 'idratato' su ogni candidato come una caratteristica del modello, e ClientTweetBookmark conta come un'interazione positiva nella cronologia dello spettatore. Letti, ma non pesati.
Da dove proviene: L'aggiornamento Scala del 2025 ha dichiarato un parametro home_mixer_model_weight_bookmark — con un valore predefinito di 0.0. Nessuna versione pubblicata lo ha mai pesato a 10.
Cosa abbiamo cercato, al commit bloccato
Non c'è un peso per i segnalibri in param.rs
bookmark · 2 file · 0 corrispondenze
bookmark_count viene idratato su ogni candidato come una caratteristica del modello
bookmark_count · 1 file · 5 corrispondenze
ClientTweetBookmark conta come un'interazione positiva nella cronologia dello spettatore
ClientTweetBookmark · 1 file · 1 corrispondenza
Right numbers, wrong reading
“Una segnalazione annulla 468 'mi piace' (−234.0 ÷ 0.5).”
L'aritmetica è corretta e la conclusione è comunque sbagliata. I pesi moltiplicano una PROBABILITÀ PREDETTA, non un conteggio di azioni. X afferma che la probabilità di base di una segnalazione è più di mille volte inferiore a quella di un 'mi piace', quindi dividere un peso per un altro non fornisce un tasso di cambio tra le azioni.
Da dove proviene: Questo non è obsoleto — è un'interpretazione errata di numeri corretti, e appare anche su pagine che pubblicano la tabella giusta. X ha aggiunto un avviso esplicito a riguardo nel suo README il 14-08-2026.
No such parameter exists
“La velocità di coinvolgimento conta 1000×, l'autorità dell'autore 50×, la recenza 22×.”
Nessun parametro denominato per velocità, autorità o recenza esiste in param.rs. L'età non è affatto un peso — è un taglio netto: AgeFilter elimina qualsiasi post più vecchio di MAX_POST_AGE, una costante compilata di 48 ore. Nulla moltiplica il punteggio di un post per la sua freschezza.
Cosa abbiamo cercato, al commit bloccato
Nessun parametro denominato per velocità, autorità o recency esiste in param.rs
velocity|authority|recency · 1 file · 0 corrispondenze
AgeFilter elimina qualsiasi post più vecchio di MAX_POST_AGE
AgeFilter::new\(.*MAX_POST_AGE · 1 file · 1 corrispondenza
Contradicted by the source
“Un gruppo coordinato può seppellire il tuo post segnalandolo in massa o bloccandolo in massa.”
X affronta questo direttamente nei commenti di param.rs, e il meccanismo che descrive è verificabile: il modello predice la TUA probabilità di un'azione, quindi le raccomandazioni sono personalizzate — le segnalazioni da una "brigata" influenzano principalmente ciò che viene raccomandato a persone simili a quella brigata. E un coinvolgimento conta solo se avviene su un post servito nella Home Timeline: navigare direttamente a un post, ad esempio da una chat di gruppo, non ha alcun impatto sul ranking.
Da dove proviene: Un'inferenza ragionevole dai pesi negativi molto grandi, che i soli pesi non supportano.
Cosa abbiamo cercato, al commit bloccato
Was true, of an older version
“X ha pubblicato il codice ma ha trattenuto i pesi di ranking per motivi di sicurezza.”
Vero per la release di gennaio 2026, falso dal 13-08-2026. I valori numerici predefiniti sono ora in param.rs, e X afferma che gli script cron li mantengono uguali ai valori di produzione primari.
Da dove proviene: Resoconto accurato del rilascio di gennaio 2026, mai aggiornato dopo agosto.
Cosa abbiamo cercato, al commit bloccato
Contradicted by the source
“I post contenenti link esterni vengono declassati.”
Nel codice di ranking pubblicato, OpenLinkWeight è POSITIVO a 0.2 e applicato incondizionatamente — l'apertura di un link è premiata. I link sono penalizzati solo tramite etichette di sicurezza come MALICIOUS_URL e DO_NOT_AMPLIFY, che riguardano la destinazione, non il collegamento esterno.
Cosa abbiamo cercato, al commit bloccato
I link sono penalizzati solo tramite etichette di sicurezza come MALICIOUS_URL
MALICIOUS_URL · 7 file · 1 corrispondenza
… e DO_NOT_AMPLIFY
DO_NOT_AMPLIFY · 7 file · 1 corrispondenza
Contradicted by the source
“Un segno di spunta a pagamento garantisce un boost nel ranking.”
Nessun moltiplicatore premium, verificato o di abbonamento esiste in param.rs, e nessun tale "rescorer" appare negli scorer pubblicati. Il codice del 2023 ne conteneva uno — moltiplicatori di 4.0 in-network e 2.0 out-of-network per autori Blue Verified — ed è scomparso dall'albero attuale. Limite onesto: Phoenix è un modello appreso i cui pesi non sono pubblicati, quindi una correlazione appresa non può essere esclusa leggendo il codice.
Da dove proviene: La pipeline Scala del 2023 applicava effettivamente un moltiplicatore Blue Verified di 4.0 / 2.0.
Cosa abbiamo cercato, al commit bloccato
Nessun moltiplicatore premium, verificato o di abbonamento esiste in param.rs
premium|verified|subscription · 1 file · 0 corrispondenze
nessun tale ricalibratore appare negli scorer pubblicati
premium|verified|subscription · 8 file · 0 corrispondenze
Contradicted by the source
“X ora pubblica le richieste di rimozione governative nel suo repository open-source, e il Brasile è l'unico paese elencato.”
Il repository pubblica il MECCANISMO di applicazione, mai una richiesta. Le regole che rimuovono un post per gli spettatori in un paese con restrizioni — LegalTakedown e LocalLawsTakedown — leggono una ragione che contiene il codice del paese, ma tale ragione viene recuperata in fase di esecuzione da un servizio non pubblicato, e il tipo che la contiene (TakedownReason) è definito in un crate assente dal repository. X pubblica anche l'infrastruttura relativa a quel tipo, in Scala: un filtro di lettura gizmoduck che rimuove i takedown non applicati prima che una lettura venga restituita, una colonna e una trasformazione del Tweet Entity Service che recuperano le ragioni di takedown di un post, e i processi interni che trasformano tali ragioni nelle etichette mostrate a un account su se stesso. Quindi le struct Thrift che lo contengono — Takedowns { country_codes, takedown_country_reasons } — sono lette dal codice pubblicato, in 3 file: `takedowns/gizmoduck/RedactUnenforcedTakedownsFilter.scala`, `takedowns/tweet-entity-service/TakedownReasonsTransform.scala`, `under-the-hood/scalding/UthPctdAccountTakedownEventsJob.scala`. Ciò che aggiunge è più MECCANISMO, non una singola richiesta: al commit fissato, nessun codice paese è scritto accanto a una ragione di takedown al di fuori dei test fixture — gli unici codici a due lettere che il codice di takedown contiene sono `xx`, `xy`, i sentinelle globali che la fonte stessa nomina, che significano ovunque e sono l'opposto di un paese. E il metodo che chiederebbe al Tweet Entity Service quei codici sotto il proprio nome, get_takedown_country_codes, non appare affatto nel repository. Il Brasile è una cosa completamente diversa: un elenco hard-coded di 2795 account segnalati alla Corte Elettorale, provenienti dal dataset pubblico dei candidati, rimossi da 'Per Te' per ogni spettatore in tutto il mondo a meno che non seguano l'account — senza alcuna condizione di paese, il che è l'opposto di come funziona qui un takedown legale. Limite onesto: un repository senza paesi hard-coded non è una piattaforma senza takedown per paese. Le richieste esistono; vivono al di fuori del repository, aggregate, nel Centro Trasparenza e nel rapporto DSA.
Da dove proviene: Il post di X del 14 agosto ha annunciato due cose: i pesi di ranking e il filtro per le elezioni in Brasile. Musk lo ha ripubblicato il giorno successivo in 61 caratteri — “Qualsiasi censura richiesta dai governi è ora chiaramente visibile” — senza nominare né il repository, né le richieste, né i paesi; la stampa lo ha collegato a un avviso rivolto agli utenti che era stato annunciato, non implementato. Le parole “richieste” e “nell'algoritmo open-source” appaiono per la prima volta insieme su un account aggregatore.
Cosa abbiamo cercato, al commit bloccato
L'infrastruttura Scala pubblicata legge le struct di rimozione Thrift — Takedowns { country_codes, takedown_country_reasons }
\bTakedowns\b|\btakedownCountryReasons\b · 43 file · 15 corrispondenze
Contradicted by the source
“Silenziare una parola chiave nasconde ogni post che la contiene.”
Una parola chiave silenziata non è una singola regola. Il servizio di timeline pubblicato lo applica con 2 filtri che non leggono lo stesso testo: ViewerMutedKeywordFilter, registrato in phoenix_candidate_pipeline.rs, lo confronta con tweet_text; FollowingViewerMutedKeywordFilter, registrato in reverse_chron_posts_pipeline.rs, lo confronta con ancestor_texts, quoted_tweet_text e tweet_text. I campi che solo alcuni di essi leggono — ancestor_texts e quoted_tweet_text — sono scritti da conversation_gap_ancestor_hydrator.rs, quote_hydrator.rs e quoted_post_text_hydrator.rs, registrati in phoenix_candidate_pipeline.rs, phoenix_scores_pipeline.rs e reverse_chron_posts_pipeline.rs. Una pipeline che non esegue questi hydrator non li riempie mai: lì il testo di un post citato o ancestrale non è semplicemente non letto, è assente. Oltre la timeline, il motore di regole di filtraggio della visibilità — il livello che può nascondere un post ovunque appaia — include ViewerMutesAuthor (Mutes) e ViewerMutesRetweets (MuteRetweets), e nessuna regola la cui decisione legga una parola chiave. L'unico risultato di parola chiave silenziata che questo repository nomina, MatchesMutedKeyword, appare esattamente 1 volta — in graphql_results.rs — e solo a sinistra di un match arm che lo mappa a un'etichetta interstiziale. Nulla qui lo decide; ciò che lo fa non è pubblicato. Due limiti onesti. Questo repository è il servizio che costruisce una timeline: ciò che il silenziamento fa nelle notifiche o nella ricerca è deciso altrove, in codice che X non pubblica, e un'assenza qui è un'assenza dal repository, non dal prodotto. E non ti diciamo quale scheda serve ogni pipeline — quel cablaggio attraversa diversi livelli, e una mappatura che non possiamo estrarre in modo pulito è una mappatura che non pubblichiamo.
Da dove proviene: Il silenziamento è un'unica impostazione nel prodotto, quindi viene interpretato come un'unica regola che si applica ovunque. Il codice pubblicato mostra qualcosa di più ristretto: una parola chiave silenziata viene applicata mentre una timeline è assemblata, e i filtri che la applicano non leggono tutti lo stesso testo — quindi un post può contenere la parola in un punto che nessun filtro su quel percorso esamina mai.