A build number is not a release

Claude Code 2.1.250 to 2.1.263, as the upstream CHANGELOG actually publishes them. Of these fourteen build numbers, five never shipped notes at all and one shipped notes with nothing in them. Click any version.

published with content published, unenumerated never published

The three empties are not the same thing

statewhat upstream didwhat the adoption feed should hold
never published The build number was consumed. No ## 2.1.N heading exists in the CHANGELOG, so there is no release to read. Nothing. There is no version to triage, and waiting for one stalls forever.
published, unenumerated A release exists and carries one bullet, Bug fixes and reliability improvements, naming no specific change. An explicit triaged-noop row. The verdict is "we read it and there was nothing", which no empty array can say.
published with content Enumerated bullets naming settings keys, hook events, tools, flags or model ids. One row per feature that touches a real surface, each with its disposition and the command that proved it.

Why the empty array was the bug worth fixing. cc-release-watch.mjs generated the 2.1.263 block as "features": []. That is byte-identical to a version nobody has triaged yet. A later reader, or a gate counting undisposed rows, cannot tell "we looked and it was empty" from "nobody looked". This wave writes the verdict in instead.

Why "nothing found" here is a measurement

Any no-op wave invites the same doubt: a broken fetch and a genuinely empty release read the same. They do not here, because the same live run of cc-release-watch.mjs, against the same fetched file, produced content for the neighbouring versions in the same invocation.

versionraw bullets parsedtriaged rows

A parser returning 67 bullets for 2.1.261 and 1 for 2.1.263 in a single run is reporting the release, not its own failure.