Content Quality: Well-structured News piece (Overview, What We Know, a dedicated Kernel TLS section, What We Don't Know). Every item is attributed to the Crystal announcement or the GitHub release notes, and vendor characterizations are attributed. Title is 121 characters (counted character by character; cap 150). Body is 651 words raw (642 excluding markdown symbols; link URLs add no whitespace-separated tokens), inside the News range of 400-1200. The summary says 'release notes and blog list' the whole set of changes, but the aarch64-linux Tier 1 promotion is blog-only; the body states this explicitly, so this is a minor summary imprecision, not a correction-level defect.
Source Verification: All three snapshots exist, are gzipped HTML with the page body (not chrome only), status 200, and their decompressed sha256 matches the manifest; no suspicious_patterns on any source (no injection text found). source-0.html.gz (crystal-lang.org 1.22.0 announcement, dated 12 Oct 2026, author Johannes Muller) confirms verbatim: 'Breaking: Exit on pipe error'; 'Crystal processes exit immediately when writing to STDOUT or STDERR fails with EPIPE. This closely resembles the default behaviour of the SIGPIPE signal'; 'Previously, the failing write would raise IO::Error, which typically prints an error message and exits. This error message is now removed (#17335)'; 'You can opt out of this behaviour with STDOUT.exit_on_broken_pipe = false'; 'Breaking: Process.fork removed ... Process.fork had been deprecated sine before 1.0 and now we finally removed it (#17367)' (the source's typo 'sine' is not reproduced in the article); 'The targets aarch64-linux-gnu and aarch64-linux-musl moved from Tier 2 to Tier 1 ... we were lacking official builds, but we have that since 1.19'; 'This release includes 251 changes since 1.21.1 by 33 contributors'; 'results in blazingly fast look ups' (project's own characterization; the article attributes it correctly); constants with type declarations (#16951) with the Int64/123 autocast example; Crystal::ALL_FLAGS and USER_FLAGS (#17392); LRU cache for decoded backtrace lines (#17285); native event loops (epoll on Solaris, kqueue on remaining BSDs), libevent opt-in and 'We expect to deprecate in a following release'; Deprecations list (uppercase instance and class variables #17160, HTTP::Request#local_address and #remote_address #17260); LLVM 23.1 and 24.0 (#17432); 'This is the first release featuring builds for aarch64-windows-msvc'; 'We finally enabled support for Kernel TLS in the OpenSSL bindings by default (#17059)'. source-1.html.gz (GitHub release 1.22.0; API published_at 2026-10-12T13:54:54Z, created_at 2026-10-12T11:02:34Z, not a prerelease) confirms: 'Breaking changes / stdlib / (system) Drop Process.fork (#17367)'; '(system) [breaking] Add IO::FileDescriptor#exit_on_broken_pipe (#17335)'; '(crypto) Enable OpenSSL Kernel TLS support by default (#17059)'; LLVM 23.1/24.0 (#17432); '(runtime) Add Fiber::ExecutionContext::Parallel#scale_up ... (#17438)'; 'Deprecate uppercase instance and class variables (#17160)'. Confirmed by search that the GitHub notes contain no 'aarch64' tier text and no 'Tier' wording, so the Tier 1 promotion is blog-only exactly as the article says. source-2.html.gz (1.20.0 announcement) confirms the quoted 'Kernel TLS is opt-in since 1.20.1 due to unresolved issues' note verbatim, and the 1.20 text 'Kernel TLS is now supported by default on Linux and FreeBSD as long as support has been compiled into OpenSSL ... and enabled on the system (likely disabled by default)'. Title claims verified: 'Published October 12' (blog date 12 Oct 2026; GitHub published_at 2026-10-12T13:54:54Z, same day in UTC); 'Removes Process.fork' (flat removal, no conditions: 'Drop' in GitHub notes, 'removed' in blog; the earlier deprecation is pre-1.0); 'Exits on Broken-Pipe Writes' (EPIPE on STDOUT/STDERR, opt-out via exit_on_broken_pipe = false, as described; GitHub lists it as [breaking] IO::FileDescriptor#exit_on_broken_pipe and does not describe the exit behaviour in those words, the exit wording is blog-only and attributed to the announcement in the body); 'Moves aarch64-linux to Tier 1' (both aarch64-linux-gnu and aarch64-linux-musl, from Tier 2; blog-only, attributed). Live re-fetch on 2026-10-15: both blog pages are byte-identical to the snapshots (sha256 match: 4b4a33da... for 1.22, 5e65db7d... for 1.20); GitHub release API still reports published_at 2026-10-12T13:54:54Z; no change. The GitHub HTML snapshot differs slightly in size between two captures (344454 vs 344419 bytes, dynamic page chrome); the release body read from the API matches the snapshot text.
Factual Accuracy: No unsupported claims found. Kernel TLS discrepancy resolved as follows. The earlier Herald article (2026-04/29-crystal-120-..., published 2026-04-29T08:17:38Z) said: 'On Linux and FreeBSD, kernel TLS is now enabled by default when OpenSSL has been built with kernel TLS support, according to the Crystal 1.20 announcement.' The 1.20 blog (as published, confirmed in the Wayback snapshot of 2026-04-21, which has no opt-in note) said Kernel TLS is 'now supported by default on Linux and FreeBSD as long as support has been compiled into OpenSSL ... and enabled on the system (likely disabled by default)'. Crystal 1.20.1 was published 2026-04-29T20:09:46Z, about 12 hours after the Herald article, and its GitHub notes list '(crypto) Fix issues in OpenSSL Kernel TLS (#16888)' and '(crypto) OpenSSL Kernel TLS support should be opt-in (#16897)'; the blog note 'Kernel TLS is opt-in since 1.20.1 due to unresolved issues' was added to the 1.20 post afterward. Conclusion: the earlier article accurately reported its cited source as published; it is not a factual error at publication. It is now stale/superseded for readers (the default was reverted 12 hours after publication and re-enabled in 1.22.0). The new article reports this accurately, names both sources, says none of them explains the change, and does not speculate (the 1.20.1 release notes, which the new article does not cite, show the reason was reported issues in the Kernel TLS code, but the article's statement that the cited sources do not explain what was resolved remains true). Recommendation (not actioned; earlier article untouched): a corrections record on the 2026-04/29 article with severity 'clarification' would be warranted and honest, e.g. 'Crystal 1.20.1, released the same day this article was published, made OpenSSL Kernel TLS opt-in; the 1.20 announcement now carries a note to that effect. Kernel TLS was re-enabled by default in Crystal 1.22.0.' This is for the editor to decide; it was not filed in this review.
Overall Assessment: APPROVE. Accurate, well-attributed News article; all four title claims verified against the 1.22.0 sources, all three snapshots read and matching, live sources unchanged, title 121 chars and body 651 words within policy. crystal-lang.org added to the allowlist with documented reasoning. Reviewed with the Crystal 1.20 Kernel TLS discrepancy investigated in depth: the earlier article was correct when published and is now superseded.