Commit 0d3cdd80 landed at 23:20 UTC on 25th Aug. It is +5,850/-586 across 47 files, the tenth release since 13th Aug.
It is also the first since 14th Aug to touch the README. The README renames its "Latest Updates" heading to "Notable Updates" and adds one line to the Brazil section: "(Account list updated August 25, 2026.)"
The advertising change comes first, because it reverses what the code said yesterday.
EnableAdsBrandSafetyVerdictV2 now defaults to true. That switch had defaulted to false since the second-generation verdict was published on 13th Aug.
The parameter file records its own sync from the live config as 25th Aug at 16:20 UTC.
What that turns on is narrower than the name suggests, and the fallback is the reason.
The v2 function hands straight back to the original whenever a post carries none of Grok's four second-generation labels. So for every post that classifier has not scored, nothing about the verdict changes.
Where those labels do exist, they now decide it. The six high-risk labels added in yesterday's release are identical in both generations.
So the most severe category is unaffected either way.
The medium-risk list is where the two differ. The v2 list reads Grok's second-generation "not safe for advertising" label plus an expanded version of it.
It leaves out NSFA at high precision, which forces a medium-risk verdict under the original.
The test for whether Grok has scored a post at all moved to the v2 labels too. So a post the second-generation classifier has touched is now judged entirely on that generation's evidence.
Second, the Brazilian electoral filter grew from 665 accounts to 2,328. The file went from 1,573 lines to 4,947.
The mechanism is unchanged: a hardcoded set of user IDs, each annotated with its username. The author of every candidate post is checked against it.
The post is dropped unless the viewer follows that account.
The source file now also names its legal basis and its data source, which it did not before. They are Article 28 paragraph 1-A of Electoral Resolution No. 23.610, and the Electoral Court's public 2026 candidate dataset.
Forty-seven of the newly listed usernames carry a comment saying no live account was found for them. So the list tracks the candidate registry rather than accounts X has verified one by one.
Third, four ranking weights and two related defaults moved, and one of them is a first.
Dwell weight goes from 0.0 to 0.05, so predicted dwell now carries weight in the score at all. Video quality view weight goes the other way, from 0.05 to 0.0.
Video open weight rises from 0.05 to 0.07.
The Phoenix aggregation default also switches from short dwell to long dwell. That points the same way as the dwell weight.
Fourth, and this one matters for anyone reading their own view counts. The code adds a separate view_count_on_home alongside the existing total view count.
Author cold start is the mechanism that gives newer authors a chance in the feed. It now reads that home-timeline figure instead of the total, for both its sampling and its eligibility threshold.
So views a post earns from search, a profile or a notification no longer count against its cold-start eligibility. The number of cold-start candidates considered also drops from five to two.
Fifth, ads on the Following timeline get their own reporting identity. Ad events are now tagged following_promoted or ranked_following_promoted rather than sharing the For You label.
Each ad entry now carries its impression id.
Sixth, and the diff invites the wrong reading here. The topic-diversity work from 17th and 18th Aug has not been removed.
Home mixer stops computing the semantic-ID repetition counts and rank gaps for itself. It uses the ones already attached to each candidate instead, and the structure carrying them gains a new field.
What went is a local calculation, not the signal.
The multiplicative scoring path added earlier in the month did go, along with two of the ranker's configuration switches.
Two changes outside ranking complete the release. The Following timeline gains a check through the social graph.
It asks whether the author of a reposted or quoted post blocks the viewer.
And the abuse-enforcement rules gain a route for acting on penalties requested by an upstream scoring platform. They also gain a new spam label that triggers a temporary suspension under the platform-manipulation policy.
The standing caveat applies as it has to the nine releases before this one. This is read from a commit rather than from an announcement.
Code in the repository is not proof of behaviour in the live product.