"You must get engagement in the first 30/60 minutes or the post dies"
Verdict: PARTLY REAL, WRONG MECHANISM
There is no hand-coded freshness decay in the 2026 ranker. Post age enters as a learned feature bucketed in 60-minute steps, capped at 4800 minutes (80 hours) — after which all posts look equally old — and an AgeFilter hard-drops old posts. We then MEASURED the learned curve by running the released checkpoint at 15 impression ages (see the Lab page): predicted replies collapse to ~36% of fresh by day 3, reposts peak at 2-4 hours (~1.5x) then fade, predicted favorites never decay at all, and every curve flatlines at exactly 80 hours — the bucket cap, visible in behavior. So: no first-hour cliff, but a real per-action conversation window.
The code
phoenix/recsys_model.py POST_AGE_MAX_MINUTES = 4800; home-mixer/filters/age_filter.rs.
See for yourself: every term in the scoring formula
This is the complete list of scoring terms in
home-mixer/scorers/ranking_scorer.rs
(compute_weighted_score, commit 0bfc279). Read it —
what isn’t in this list isn’t in the ranking formula:
favorite × +weight (withheld) reply × +weight (withheld) retweet × +weight (withheld) photo_expand × +weight (withheld) click × +weight (withheld) profile_click × +weight (withheld) vqv × +weight (withheld) share × +weight (withheld) share_via_dm × +weight (withheld) share_via_copy_link × +weight (withheld) dwell × +weight (withheld) quote × +weight (withheld) quoted_click × +weight (withheld) quoted_vqv × +weight (withheld) cont_dwell_time × +weight (withheld) cont_click_dwell_time × +weight (withheld) follow_author × +weight (withheld) not_interested × −weight (withheld) block_author × −weight (withheld) mute_author × −weight (withheld) report × −weight (withheld) not_dwelled × −weight (withheld)