In the 2023 X ranker, dwell appeared as a single weighted term, set so
low (0.0001 per millisecond in the leaked weights) that most algorithm
coverage treated it as a rounding error. In the 2026 ranker, dwell
appears four times. Discrete dwell at index 11
(phoenix/run_pipeline.py). Continuous dwell time
as a regression head. Click-dwell time as a separate post-click
signal. And an implicit not_dwelled_score in
home-mixer/scorers/vm_ranker.rs's PhoenixScores
proto for the impressions where dwell never happened. Together they
form a four-head dwell economy that contributes more to the weighted
score for most posts than the visible-engagement heads do. This article
walks each of the four, explains the writing patterns that fire them,
and lands on why dwell is the head class general-purpose LLMs
systematically underperform on. Companion to
A2,
which walks all 19 heads at a higher level, and
A5,
which expands the not-dwelled side of the ledger.
The four dwell heads, side by side
Source: phoenix/run_pipeline.py + home-mixer/scorers/{weighted_scorer,vm_ranker}.rs
| Head | Type | Constant or field | What it captures |
|---|---|---|---|
| Discrete dwell documented | binary head, index 11 | DWELL_WEIGHT | viewer paused on the post above a discretisation threshold |
| Continuous dwell time inferred | regression head, paired index | CONT_DWELL_TIME_WEIGHT | actual milliseconds the viewer's eye held the post |
| Click dwell time inferred | post-click dwell regression | field in PhoenixScores proto | milliseconds the viewer spent after clicking through |
| Not dwelled inferred | implicit negative signal | not_dwelled_score field | impressions where the viewer scrolled past without pausing |
A few words on the relationship between these four. Discrete and continuous dwell on the same impression are correlated but not the same signal. The discrete head fires once when the viewer crosses a pause threshold; the continuous head accumulates value as long as the pause extends. A post that earns a fast skim-pause fires the discrete head but contributes little on the continuous head. A post that holds a viewer for ten seconds fires both, with the continuous head contributing far more total score per impression. Click-dwell operates on a separate stage of viewer attention: the impression that earned a click already passed the in-feed scoring, and the click-dwell signal runs over the time the viewer spent on the destination after clicking. Not-dwelled fires on every impression that does not cross the discrete threshold; it is the population to which the other three signals do not apply.
The split into four signals is the architectural choice that gives dwell its weight in 2026 even though no individual head has a large WEIGHT constant. The aggregate contribution per impression, summed across the relevant subset of the four, is structurally large.
Recap-dwell vs realtime-dwell: the client distinction
phoenix/run_pipeline.py labels the verified dwell
index as CLIENT_TWEET_RECAP_DWELLED. The "recap" qualifier is worth
unpacking. X's mobile client implements dwell measurement in two
layers: realtime dwell observed as the post is on screen, and recap
dwell computed once the viewer scrolls past and the post is no longer
visible. The recap-dwell signal is what the client reports back to the
ranker as the canonical engagement event. Realtime dwell informs
client-side decisions (autoplay, expansion) but does not necessarily
reach the ranker as a separate signal.
The practical implication for creators: the dwell that matters for ranking is the one the viewer accumulated over the full time they were exposed to your post in the feed, not the dwell while they were actively interacting with it. Posts that produce a long passive exposure (the viewer reading in place without tapping) score similarly to posts that produce a short active exposure (the viewer tapping through quickly). The signal is time-on-post, not interaction count within that time.
The continuous-dwell-time head (CONT_DWELL_TIME_WEIGHT) is the
regression target over the recap-dwell duration. A twelve-second
recap-dwell, at the 2023 reference weight of 0.0001 per millisecond,
contributes 1.2 on a single head. Compare that to the 2023 favorite
weight of 0.5 per like. One viewer holding your post for twelve seconds
contributes more than two viewers liking it. The math is what makes
dwell the silent kingmaker that
A2
called out.
Click-dwell time: the strongest trust signal in the inventory
When a viewer clicks a link inside your post, the platform measures the
time they spend on the destination before returning. That measurement
becomes the click-dwell signal. The mechanism by which platforms gather
this is not detailed in the public source, but the PhoenixScores proto
referenced in home-mixer/scorers/vm_ranker.rs
exposes a click-dwell field that the ranker consumes.
Three properties make click-dwell uniquely powerful as a signal. First, it is post-click, so it cannot be gamed by impression-only optimisation; the viewer has already made an active decision to leave the feed. Second, the dwell range is wider than in-feed dwell because viewers read full articles, watch videos, scroll through threads, all of which can last minutes. The signal can be three orders of magnitude larger than typical recap-dwell. Third, click-dwell is asymmetric: a click followed by a fast bounce produces a small (or possibly negative) contribution, while a click followed by a long read contributes substantially.
The asymmetry is the reason "clickbait" is structurally penalised. A viewer who clicks a clickbait headline and bounces in two seconds fires the click head positively but the click-dwell head essentially zero. The combined contribution is much smaller than for a post whose click earned a long read. Phoenix's training signal learns this distinction implicitly: posts whose clicks were followed by short bounces get lower predicted click-dwell on similar future candidates from the same author.
The video VQV head and the duration threshold
VQV_WEIGHT (video quality view, index 13) is gated on
video_duration_ms exceeding MIN_VIDEO_DURATION_MS
(phoenix/run_pipeline.py). The threshold value
itself is not in the public source. The mechanism, however, is clear:
below the threshold, the video earns zero on this head no matter how
many times it plays, and above the threshold, every qualifying play
contributes.
The threshold is the architectural detail most video-on-X advice ignores. A four-second loop and a fifteen-second cut of the same content produce categorically different scoring contributions; the difference is not a gradient but a step function at the duration boundary. Creators producing short-form video on X benefit from understanding where the boundary sits, but the value is not in the public source. Empirical backward inference from served-vs-unserved video content suggests the boundary is roughly in the eight-to-ten-second range, which would match the canonical "engagement above the eight-second mark" rule of thumb that several creator-economy reports treat as observed-not-stated. We do not endorse a specific value; we flag the structural property.
For non-video creators the VQV head is irrelevant. For video creators it is the head that determines whether the video is scoring at all. Sub-threshold videos compete only on like, retweet, and the other non-dwell heads, which is a much smaller score pool.
Not-dwelled: the negative signal nobody opted into
home-mixer/scorers/vm_ranker.rs's PhoenixScores
proto contains a not_dwelled_score field that does not appear in the
simpler home-mixer/scorers/weighted_scorer.rs.
A5
walked the broader negative-signal economy; the not-dwelled signal
is the dwell-side member of that family. It fires on every impression
where the viewer scrolled past without pausing.
This is the highest-volume negative signal a creator faces. Mutes, reports, blocks all require explicit menu interactions. Not-dwelled requires nothing; it is the default outcome of impression-without-pause. For most posts the population of not-dwelled impressions is far larger than the population of dwelled ones. The model learns to predict the ratio per creator, per viewer, and uses it to weight future candidates.
The practical implication: a creator's recent posts that systematically fail to earn dwell from their audience accumulate predicted-not-dwelled prior across viewer histories. Future posts get scored against a prior that expects them to be scrolled past. The remedy is not "post more often" (which compounds the prior across more impressions), but "post in a way that earns the dwell." The next section walks the specific patterns.
Dwell and likes are not the same signal
A common assumption: posts that earn lots of likes also earn long dwell, and posts that earn long dwell also accumulate likes over time. The 2026 ranker's behaviour suggests the two are correlated but loosely so. The visible-engagement heads (like, retweet) respond to social-proof dynamics; the dwell heads respond to reading behaviour. The same post can fire one without the other.
Source: illustrative simulation
The chart sketches the qualitative pattern. Quick jokes lean favorite-heavy because the value is delivered in the first line and the viewer responds with a like rather than a long pause. Operational threads and long-form essay posts invert the ratio: viewers pause to read, contributing heavily on the dwell heads, but they do not always return to like a long post they have already moved past. Generic AI-shaped output performs poorly on both heads simultaneously; the posts are neither fast-payoff enough to earn the favorite nor substantive enough to earn the dwell.
The chart is a creator-strategy chart, not a model-tuning one. A creator who wants to optimise score, not visible counts, should accept that some of their highest-scoring posts will have moderate or even low like counts. The score is the dwell column plus the visible column plus the seven other positive heads, and the dwell column is the one most posts under-invest in.
Writing patterns that earn dwell
Dwell is the head class most-influenced by editorial choice and least-influenced by reach or social proof. Likes and retweets respond to visible-engagement dynamics (who else liked, how many likes already); dwell responds to whether the viewer actually reads. A post can earn a large dwell even with zero existing engagement if the writing carries the eye.
Three patterns consistently produce dwell across creator categories.
The second-line payoff. A first line that opens a loop the second line closes. "I shipped three products last year. The one that worked did exactly the opposite of what advice said." The viewer cannot extract the value from the first line alone; they have to read the second to find out what the opposite was. Most posts deliver the value in the first line and lose the dwell as a result.
Specific over abstract. Posts that name specific people, numbers, dates, places, products force the viewer to slow down to parse them. "In March 2024, the partnership with three Fortune-500 customers generated 60% of revenue" earns more dwell per impression than "we had some big customers." Specificity is dwell density per word.
Sequence with reveal. Posts that list 3 to 5 items, where the third item subverts the pattern set by the first two, hold attention through the surprise. The structure is older than the platform; it works on the platform because it leverages the same attention mechanic the ranker is scoring.
What none of these three are: hooks, clickbait, or engagement bait. The dwell head responds to actual reading. Hooks that promise payoff the post never delivers train the model to predict bounce on similar future posts. Click-dwell, the strongest dwell signal, specifically punishes hook-without-payoff because the bounce-after-click is visible to the ranker through the dwell duration.
The graph below sketches the qualitative relationship between post length and predicted dwell. The curve is illustrative; specific values depend on the creator's audience composition.
Source: illustrative simulation
Two readings of this graph. First, length alone does not produce dwell; the high-density curve rises with length but the low-density curve does not. Second, the gap between the two curves widens with length: the penalty for low-density writing in a long-form post is structurally larger than the penalty for low-density writing in a short post. Threads compound the effect because each post in the thread carries its own dwell prediction.
Why generic LLM output underperforms on dwell
A general-purpose writing model trained on the broad internet produces output sitting in a specific cluster of the embedding space: helpful-assistant register, structured-explanation patterns, encyclopedic specificity. That cluster has known properties relative to the dwell head.
The output is fluent, which keeps the discrete-dwell head firing (the viewer pauses long enough to register that the post is readable). The output is generic, which keeps the continuous-dwell head from accumulating (the viewer recognises the helpful-assistant pattern and moves on). The output rarely contains second-line payoffs, surprise sequences, or creator-specific specificity, because those properties are exactly the ones general models train against (their training objective rewards "comprehensible and broadly applicable" output, which is the opposite of "specific and surprising").
The mechanical consequence: posts generated by general LLMs score on the visible-engagement heads (like, occasional retweet) but systematically underperform on the dwell heads. The aggregate weighted score is therefore lower than the visible counts suggest. Creators running their content through general LLMs see what feels like normal likes performance but reach loss they cannot explain. The dwell-head gap is the unexplained portion.
What to take away
Three operational moves drop out of the four dwell heads.
Write the second line first. If the post's value is fully present in the opening line, the dwell head cannot fire. Audit drafts by asking whether the second line earns the read. If not, restructure.
Watch click-dwell, not click count. X exposes click counts to authors; click-dwell is harder to read but is the signal that actually moves the score. The proxy is comparing impressions-per-click against likes-per-impression: a post with high impressions-per-click and low dwell-per-click is a hooked-but-bounced post, which trains the model unfavourably against your future posts.
For video, cross the duration threshold or do not bother. Video under the VQV threshold scores on a smaller head pool. If your video content is below threshold by design (short loops, fast cuts), accept the lower score. If it can plausibly cross the threshold, the duration-vs-VQV trade is worth the extra few seconds.
The dwell economy is the easiest part of the 2026 X ranker to align with through writing alone. Voice consistency (A8) sets the cluster geometry; dwell-aware writing inside that cluster maximises the per-impression score. The combination is the operational form of the "voice as a moat" thesis the cornerstone of this series (A1) opened with.