Both old names were deleted from the index on 2026-09-23 to free the new one:
aihawk and the shim that held invisible-playwright-mcp. Four endpoints answer
404 for both (JSON, simple, RSS, the file host) while invisible-playwright
answers 200 at the same moment, and PyPI accepted a pending publisher for the
new name, which it does only for a name that does not exist. So today
uvx invisible-playwright-mcp resolves to nothing, and this version is what
the README's instructions need to reach.
It also takes back a correction that was itself wrong. #1389 called the 404 a
transient, on the premise that PyPI does not let a deleted name be registered
again. It does, which is what made the rename possible; the deletion was real
and propagated unevenly. Three docstrings now say so.
The releases check learns the case it was missing. A deleted project answers
404 and so does an index having a bad minute, and nothing the index says can
tell them apart, so each distribution carries the day it was deleted, declared
like the boundary. Deleted ranges are not asked, and their tags are not
evidence that something should be served. The declaration is checked in the
one direction the index can answer: a project declared deleted that serves
versions fails.
The single-version guard is now a skip: the first release under the new name
is the only version on the index, and failing on that would be red on every
pull request until a second release, for nothing wrong.
Proven by three mutations, each red and naming its cause: aihawk declared
live, the boundary moved to 0.68.0, and a served project declared deleted.