Contradicted by the source
“Репост коштує в 20 разів більше, ніж лайк.”
RetweetWeight становить 1.0, а FavoriteWeight – 0.5, тому репост має вдвічі більшу вагу, ніж лайк — а не в двадцять разів.
Звідки це походить: Жодна опублікована версія алгоритму ніколи не використовувала значення 20. Важкий ранжувальник 2023 року також оцінював ретвіт у 1.0 проти лайка у 0.5.
Was true, of an older version
“Відповідь коштує в 27 разів більше, ніж лайк (або в 13.5 разів).”
ReplyWeight становить 5.0 проти FavoriteWeight 0.5, тобто в десять разів — і в сорок разів між взаємними підписками, оскільки BidirectionalFollowReplyWeightBoost додає 15.0 до ваги відповіді для оригінальних дописів між акаунтами, які підписані один на одного.
Звідки це походить: Обидва показники були реальними для моделі, яка більше не існує: важкий ранжувальник 2023 року опублікував 27 31.03.2023, а потім 13.5 05.04.2023. Вони описують конвеєр Scala, замінений поточним конвеєром Rust.
Was true, of an older version
“Кліки на ваш профіль коштують у 12 разів більше, ніж лайк.”
ProfileClickWeight становить 0.0. Клік на профіль нічого не додає до зваженої оцінки.
Звідки це походить: 12.0 була вагою 2023 року для `good_profile_click` — іншого, складеного сигналу (відкриття профілю І потім лайк або відповідь). Поточна модель має просту голову кліка на профіль, зважену нулем.
No such parameter exists
“Закладка коштує 10 лайків — закладки є найсильнішим сигналом.”
У param.rs немає ваги закладки, тому закладки взагалі не входять до зваженої оцінки. Однак вони не є невидимими: bookmark_count додається до кожного кандидата як ознака моделі, а ClientTweetBookmark зараховується як позитивна взаємодія в історії глядача. Читається, але не зважується.
Звідки це походить: Оновлення Scala 2025 року дійсно оголосило параметр home_mixer_model_weight_bookmark — зі значенням за замовчуванням 0.0. Жодна опублікована версія ніколи не оцінювала його в 10.
Що ми шукали у закріпленому коміті.
У param.rs немає ваги закладок.
bookmark · 2 файлів · 0 збігів
bookmark_count додається до кожного кандидата як ознака моделі.
bookmark_count · 1 файл · 5 збігів
ClientTweetBookmark зараховується як позитивна взаємодія в історії глядача
ClientTweetBookmark · 1 файл · 1 збіг
Right numbers, wrong reading
“Один звіт скасовує 468 лайків (−234.0 ÷ 0.5).”
Арифметика правильна, але висновок все ще хибний. Ваги множать ПЕРЕДБАЧЕНУ ЙМОВІРНІСТЬ, а не кількість дій. X стверджує, що базова ймовірність звіту більш ніж у тисячу разів нижча, ніж у лайка, тому ділення однієї ваги на іншу не дає курсу обміну між діями.
Звідки це походить: Цей не застарів — це неправильне тлумачення правильних чисел, і він з'являється навіть на сторінках, які публікують правильну таблицю. X додав явне попередження про це до свого README 14.08.2026.
No such parameter exists
“Швидкість залучення враховується в 1000 разів, авторитет автора в 50 разів, актуальність в 22 рази.”
У param.rs не існує параметрів для швидкості, авторитету чи актуальності. Вік взагалі не є ваговим коефіцієнтом — це жорстке обмеження: AgeFilter відкидає будь-який допис старше MAX_POST_AGE, скомпільованої константи в 48 годин. Ніщо не множить оцінку допису на його свіжість.
Що ми шукали у закріпленому коміті.
У param.rs не існує параметра для швидкості, авторитетності чи актуальності.
velocity|authority|recency · 1 файл · 0 збігів
AgeFilter відкидає будь-який допис, старший за MAX_POST_AGE.
AgeFilter::new\(.*MAX_POST_AGE · 1 файл · 1 збіг
Contradicted by the source
“Скоординована група може приховати ваш допис шляхом масового скарження або масового блокування.”
X безпосередньо розглядає це в коментарях param.rs, і описаний механізм можна перевірити: модель прогнозує ВАШУ ймовірність дії, тому рекомендації персоналізовані — скарги від групи переважно впливають на те, що рекомендується людям, схожим на цю групу. І залучення враховується лише тоді, якщо воно відбувається на дописі, поданому в Домашній стрічці: перехід безпосередньо до допису, наприклад, з групового чату, не має впливу на ранжування.
Звідки це походить: Обґрунтований висновок з дуже великих негативних вагових коефіцієнтів, які самі по собі вагові коефіцієнти не підтверджують.
Що ми шукали у закріпленому коміті.
Was true, of an older version
“X опублікував код, але приховав вагові коефіцієнти ранжування з міркувань безпеки.”
Вірно для релізу січня 2026 року, невірно з 13.08.2026. Числові значення за замовчуванням тепер знаходяться в param.rs, і X заявляє, що cron-скрипти підтримують їх рівними основним виробничим значенням.
Звідки це походить: Точне повідомлення про випуск січня 2026 року, ніколи не оновлювалося після серпня.
Що ми шукали у закріпленому коміті.
X стверджує, що cron-скрипти підтримують їх рівними основним виробничим значенням.
cron scripts that set the defaults · 1 файл · 1 збіг
Contradicted by the source
“Дописи, що містять зовнішні посилання, знижуються в рангуванні.”
В опублікованому коді ранжування OpenLinkWeight є ПОЗИТИВНИМ зі значенням 0.2 і застосовується безумовно — відкриття посилання винагороджується. Посилання караються лише через мітки безпеки, такі як MALICIOUS_URL та DO_NOT_AMPLIFY, які стосуються призначення, а не самого факту посилання.
Що ми шукали у закріпленому коміті.
Посилання караються лише за допомогою міток безпеки, таких як MALICIOUS_URL.
MALICIOUS_URL · 7 файлів · 1 збіг
… і DO_NOT_AMPLIFY.
DO_NOT_AMPLIFY · 7 файлів · 1 збіг
Contradicted by the source
“Платна галочка забезпечує підвищення рангування.”
У param.rs не існує множника для преміум, верифікованих або підписних акаунтів, і жоден такий переоцінювач не з'являється в опублікованих оцінювачах. Код 2023 року містив такий — множники 4.0 у мережі та 2.0 поза мережею для авторів з синьою галочкою — і він зник з поточного дерева. Чесне обмеження: Phoenix — це навчена модель, чиї вагові коефіцієнти не публікуються, тому навчену кореляцію не можна виключити, читаючи код.
Звідки це походить: Конвеєр Scala 2023 року дійсно застосовував множник 4.0 / 2.0 для синьої галочки.
Що ми шукали у закріпленому коміті.
У param.rs не існує множника для преміум, верифікованих або підписних облікових записів.
premium|verified|subscription · 1 файл · 0 збігів
такий переоцінювач не з'являється в опублікованих оцінювачах.
premium|verified|subscription · 8 файлів · 0 збігів
Contradicted by the source
“X тепер публікує запити уряду на видалення контенту у своєму репозиторії з відкритим вихідним кодом, і Бразилія є єдиною країною, що там зазначена.”
Репозиторій публікує МЕХАНІЗМ примусового виконання, а не запит. Правила, які видаляють допис для глядачів у країні, що не розголошується — LegalTakedown та LocalLawsTakedown — зчитують причину, яка містить код країни, але ця причина отримується під час виконання з неопублікованого сервісу, а тип, який її містить (TakedownReason), визначений у крейті, відсутньому в репозиторії. X також публікує внутрішню структуру навколо цього типу, у Scala: фільтр читання gizmoduck, який видаляє невиконані видалення до повернення читання, стовпець і перетворення Tweet Entity Service, які отримують причини видалення допису, та внутрішні завдання, які перетворюють ці причини на мітки, що відображаються обліковому запису про себе. Отже, структури Thrift, які її несуть — Takedowns { country_codes, takedown_country_reasons } — зчитуються опублікованим кодом у 3 файлах: `takedowns/gizmoduck/RedactUnenforcedTakedownsFilter.scala`, `takedowns/tweet-entity-service/TakedownReasonsTransform.scala`, `under-the-hood/scalding/UthPctdAccountTakedownEventsJob.scala`. Це додає більше МЕХАНІЗМУ, а не один запит: на зафіксованому коміті жоден код країни не записаний поруч із причиною видалення поза тестовими фікстурами — єдині дволітерні коди, які містить код видалення, це `xx`, `xy`, глобальні сторожові, які джерело називає самостійно, що означає «скрізь» і є протилежністю країни. А метод, який би запитував Tweet Entity Service ці коди під своїм власним ім'ям, get_takedown_country_codes, взагалі не з'являється в репозиторії. Бразилія — це зовсім інша річ: жорстко закодований список із 2795 облікових записів, про які повідомлено Виборчий суд, отриманий з публічного набору даних кандидатів, видалений з «Для вас» для кожного глядача по всьому світу, якщо вони не підписані на обліковий запис — без жодної умови щодо країни, що є протилежністю того, як тут працює законне видалення. Чесне обмеження: репозиторій без жорстко закодованої країни не є платформою без видалень за країною. Запити існують; вони живуть поза репозиторієм, агреговані, у Центрі прозорості та звіті DSA.
Звідки це походить: Власний допис X від 14 серпня анонсував дві речі: вагові коефіцієнти ранжування та фільтр виборів у Бразилії. Маск репостнув його наступного дня у 61 символі — “Будь-яка цензура, вимагана урядами, тепер чітко видима” — не згадуючи ані репозиторію, ані запитів, ані країн; преса пов'язала це з повідомленням для користувачів, яке було анонсовано, але не випущено. Слова “запити” та “в алгоритмі з відкритим вихідним кодом” вперше з'являються разом в обліковому записі агрегатора.
Що ми шукали у закріпленому коміті.
Опублікований допоміжний код Scala зчитує структури Thrift для видалення — Takedowns { country_codes, takedown_country_reasons }
\bTakedowns\b|\btakedownCountryReasons\b · 43 файлів · 15 збігів
Contradicted by the source
“Вимкнення ключового слова приховує кожен допис, що його містить.”
Заглушене ключове слово — це не одне правило. Опублікований сервіс хроніки застосовує його за допомогою 2 фільтрів, які не зчитують один і той же текст: ViewerMutedKeywordFilter, зареєстрований у phoenix_candidate_pipeline.rs, порівнює його з tweet_text; FollowingViewerMutedKeywordFilter, зареєстрований у reverse_chron_posts_pipeline.rs, порівнює його з ancestor_texts, quoted_tweet_text та tweet_text. Поля, які зчитують лише деякі з них — ancestor_texts та quoted_tweet_text — записуються conversation_gap_ancestor_hydrator.rs, quote_hydrator.rs та quoted_post_text_hydrator.rs, зареєстрованими у phoenix_candidate_pipeline.rs, phoenix_scores_pipeline.rs та reverse_chron_posts_pipeline.rs. Конвеєр, який не запускає ці гідратори, ніколи їх не заповнює: там текст цитованого або попереднього допису не просто не зчитується, він відсутній. За межами хроніки, механізм правил фільтрації видимості — шар, який може приховати допис, де б він не з'явився — містить ViewerMutesAuthor (Mutes) та ViewerMutesRetweets (MuteRetweets), і жодного правила, рішення якого зчитує ключове слово. Єдиний результат заглушеного ключового слова, який називає цей репозиторій, MatchesMutedKeyword, з'являється рівно 1 раз — у graphql_results.rs — і лише ліворуч від гілки відповідності, що відображає його на проміжну мітку. Ніщо тут не вирішує це; те, що вирішує, не публікується. Два чесних обмеження. Цей репозиторій — це сервіс, який створює хроніку: те, що робить заглушення в сповіщеннях або в пошуку, вирішується в іншому місці, у коді, який X не публікує, і відсутність тут — це відсутність у репозиторії, а не в продукті. І ми не повідомляємо вам, яку вкладку обслуговує кожен конвеєр — це підключення проходить через кілька шарів, і відображення, яке ми не можемо чисто витягти, є відображенням, яке ми не публікуємо.
Звідки це походить: Вимкнення — це єдина настройка в продукті, тому воно сприймається як єдине правило, що застосовується скрізь. Опублікований код показує щось вужче: вимкнене ключове слово застосовується під час збирання хроніки, і фільтри, які його застосовують, не всі зчитують один і той же текст — тому допис може містити слово в місці, на яке жоден фільтр на цьому шляху ніколи не дивиться.