Read a registry failure as a failure in the other publish checks
The crates.io check went wrong by treating every unhappy answer as "not published yet". npm, PyPI and NuGet were written the same way. None of them misbehave today, since only crates.io gates on User-Agent, but an outage or a blocked request would walk each of them into the same publish error. PyPI and NuGet now branch on the HTTP status: 200 skips the publish, 404 runs it, anything else stops the job. NuGet's fetch and version match are split apart too, because piping curl into grep hid a failed fetch behind an empty match. A 404 there means the package has no versions at all, which is a real "go ahead" rather than an error. npm has no status code to read, so the two publish steps keep using "npm view" but only accept an E404 as proof the version is missing. Checked against the live registries: 1.5.6 reports published on all three, 99.99.99 reports missing, and npm answers E404 both for an unknown version and an unknown package.