Content Quality: News piece of 724 words (range 400-1200) summarizing the Kotlin 2.5.0-Beta2 What's new page. Clear structure (Overview, Language, Library/platform/tooling, Breaking changes, Changelog scale, What We Don't Know). Labels the build as an early-access pre-release throughout and makes no stability claim. States that the Herald has not built or run the release.
Source Verification: All four sources read from snapshots (gunzipped, text-extracted; no suspicious_patterns in any manifest entry) and re-checked live. Hosts kotlinlang.org (allowlist line 1661) and github.com (line 1131) match the allowlist by exact hostname. All sources are first-party (JetBrains/Kotlin); no independent sources, and the article does not claim any. source-0 (kotlinlang.org/docs/whatsnew-eap.html, live WebFetch consistent): 'Released: October 21, 2026'; Stable in this release: improved compile-time constants, @IntroducedAt, unused return value checker (now default), name-based destructuring only-syntax (now default) - matches. 'Kotlin 2.5.0-Beta2 introduces companion extensions and companion blocks' and 'introduces experimental full value classes'; both marked Experimental with -Xcompanion-blocks-and-extensions and -Xfull-value-classes opt-ins - matches. Full value classes: equals()/hashCode()/toString() generated, no componentN(), no copy() - matches. 'value class no longer necessarily means inline' - the article's quoted fragment is verbatim. Staged migration: 2.5.20 warning, 2.6.0 or 2.7.0 error - matches. -Xstrict-equality-for-structural-classes description matches. CodePoint (kotlin.text.unicode), onTrue/onFalse/ifOrNull Experimental; Java 28 bytecode; es2020; Apple incremental klib compilation default; Swift export Beta with new DSL; cross-module inlining default; -XXLanguage:-EliminateSecondKindIncorporation - all match. .kar: 'a single .kar archive, which is a ZIP archive additionally compressed with XZ', platform artifacts except JVM and Android, addresses Maven Central publication size limits, publishing Experimental while consumption available for all projects, cryptography-kotlin 7539 files/91 MB to 1036 files/23 MB - all match, and the article correctly frames the figure as JetBrains' own example. Breaking change: the article's quote 'introduces an error as the next step to raising the minimum JDK version required to run the Kotlin compiler from JDK 8 to JDK 17.' is verbatim; the minimum is for running the compiler (not targets); opt-out -Xallow-pre-17-runtime-jdk removed in 2.5.20 or 2.6.0 when JDK 17 becomes mandatory - matches; the title/summary do not assert a causal link beyond the source. source-2 (eap.html): Beta2 row 'Released: October 21, 2026', description quote 'A language release with major changes in the language and tooling updates.' verbatim. source-1 (GitHub Beta2 release, via API): prerelease true, draft false, published_at 2026-10-21T10:43:18Z; changelog contains 'CodePoint value class' (KT-24908) and 'Implement Kotlin Archive (.kar) publication format' (KT-87910) - matches. source-3 (GitHub Beta1, via API): prerelease true, published 2026-09-23. Feature attribution: the first-party What's new page attributes companion blocks/extensions, full value classes and the .kar format to Beta2 ('Kotlin 2.5.0-Beta2 introduces'), so 'Adds' in the title is supported by the page. However the Beta1 changelog already contains related groundwork (e.g. KT-88526 'Initial implementation of Kotlin Archive in KGP', companion-block entries such as KT-86648, KT-85772, KT-87825), which the article does not mention. The 'Enable CRI by default' entry (KT-81782) is not expanded in the article. Internal link /article/2026-09/21-kotlin-2420-... resolves to an existing published article.
Factual Accuracy: Every number, option name, date, quote and attribution checked against the sources and confirmed, with one exception in a subordinate section: the article says 'the Herald's own comparison of the issue IDs listed in that changelog and in the Beta1 release notes ... 19 IDs appear in both lists'. Recount from the raw changelogs: 19 distinct 'KT-' strings occur in both bodies only if free-text mentions are included (KT-79212 is a list entry in one changelog but only appears as a mention inside the text of KT-89157 in the other). Counting only changelog list entries, 18 KT issue IDs appear in both, and 6 further Google issue-tracker IDs (b/...) also appear in both, 24 entries in total. The stated count of 19 is therefore not an accurate count of IDs listed in both lists. Not in headline, summary or lead; recoverable by a clarification.
Overall Assessment: Accurate, well-sourced and clearly labelled pre-release coverage with one minor, recoverable counting imprecision in a subordinate section; all quotes verbatim, Experimental/Stable labels exact, JDK 17 claim correctly scoped to running the compiler. Approved with a clarification. Featured candidacy: 1 - accurate beta-release coverage for Kotlin developers and library authors, not a broad-audience story