Refresh the registry pages, and say why the mcp publish 404s - #13
Merged
Conversation
`Publish npm (captchakraken-mcp)` failed on the 2026-08-23 release with: npm error 404 Not Found - PUT https://registry.npmjs.org/captchakraken-mcp npm error 404 The requested resource 'captchakraken-mcp@0.1.1' could not be npm error 404 found or you do not have permission to access it. The package exists. captchakraken-mcp@0.1.0 has been on npm since 2026-07-29, published by hand. What is missing is the TRUSTED PUBLISHER entry, which is scoped to one package name — the header of this file already says the `captchakraken` entry does not cover it — and npm reports that as a 404 on the PUT rather than as a permissions error. That wording is what makes it expensive: `captchakraken` published in the same run, from the same workflow, over the same OIDC, so every obvious reading (bad auth, broken release, wrong version) is wrong, and the one true reading is the one npm declines to state. So the step now checks whether the package exists after a failed publish and, if it does, prints the actual cause and the four clicks that fix it. It still fails — this is a real release failure, not something to wave through. No behaviour change on the success path: an already-published version still skips, a good publish still exits 0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The npm and PyPI pages describe a grid solver that needs vLLM. Both halves are
out of date. It has read click, drag, slide, distorted-text and animated
challenges across ten vendors for a while now, and the hosted API means a user
can run no model at all — neither fact appeared on either page, which are the
two pages someone reads before deciding whether to install it.
npm captchakraken "reads the grid ... on vLLM"
PyPI captchakraken "Given a screenshot of a captcha grid, it locates the tiles
and returns the click plan"
Descriptions now say what it does, keywords name the vendors people actually
search for, and each README opens with a what-it-solves table taken from the
root README rather than a new set of claims.
## The logo, as a PNG, from an absolute URL
`docs/assets/logo-card.png` — the existing logo-dark.svg on the site's own
#04121a background, rounded. Three constraints decided this and none of them
allow the <picture> block the root README uses:
* PyPI does not render SVG and only loads images from an allowlist of hosts.
raw.githubusercontent.com is on it; a relative path is not a URL at all.
* npm and PyPI both rewrite or drop relative image paths, and this is a
monorepo, so `./docs/...` resolves to nothing from a package subdirectory.
* A one-colour mark has to pick a background. Both registries default to
light and npm also has a dark mode, so the card carries its own — which
also makes it match captchakraken.com.
Verified rather than assumed: readme_renderer (the exact renderer PyPI uses)
keeps both the <img> and the centering, and `twine check` passes on the built
sdist.
## Versions
captchakraken 2.6.0 -> 2.6.1 on both registries, captchakraken-mcp 0.1.1 ->
0.1.2. Metadata-only, but a registry cannot be updated without a version.
PyPI also gains the Python versions it supports, the trove classifiers a chooser
reads before the README, and Documentation/Source/Changelog links — its sidebar
had one Homepage row.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Owner
Author
✓ Tier 3 driver-gate — passAggregate: 0.841 · 6/10 families passing · 14 pair(s) not solved
|
JWriter20
added a commit
that referenced
this pull request
Aug 24, 2026
dev was four commits behind main and the two had diverged, which is what made every later merge conflict. Brings PRs #10-#13: the empty-answer submit and the browser-compat run, camoufox-only naming, the animated-solve budget, and the refreshed registry pages. One conflict, in python/README.md: both sides added a DIFFERENT new section immediately after the intro blockquote — this branch added "Watch it work" (the captchakraken.com demo clips) and main added "What it solves" (the 44-type vendor table). They answer different questions, so both are kept, clips first. README.md and js/README.md took both automatically. Verified after the merge: the three-vendor detection work is intact on both ports (tencent/yandex/mtcaptcha selectors, VENDOR_URL_MARKERS, TEXT_INPUT_VENDOR_SELECTORS all present), tsc builds, and 458 tests pass. python/README.md still renders through readme_renderer with all three demo images surviving sanitization. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two things, both about what a stranger sees before they install anything.
1. The npm and PyPI pages describe a grid solver that needs vLLM
Both halves are out of date. It has read click, drag, slide, distorted-text and animated challenges across ten vendors for a while now, and the hosted API means a user can run no model at all — neither fact appeared on either page.
captchakrakencaptchakrakenDescriptions now say what it does, keywords name the vendors people actually search for, and each README opens with a what-it-solves table lifted from the root README rather than a fresh set of claims.
The logo, as a PNG, from an absolute URL
docs/assets/logo-card.png— the existinglogo-dark.svgon the site's own#04121a, rounded. Three constraints decided this, and none of them allow the<picture>block the root README uses:raw.githubusercontent.comis on it; a relative path is not a URL at all../docs/…resolves to nothing from a package subdirectory.Verified rather than assumed —
readme_renderer, the exact renderer PyPI uses:Versions:
captchakraken2.6.0 → 2.6.1 on both registries,captchakraken-mcp0.1.1 → 0.1.2. Metadata-only, but a registry cannot be updated without a version bump. PyPI also gains the Python versions it supports, the trove classifiers a chooser reads before the README, and Documentation/Source/Changelog links — its sidebar had a single Homepage row.2. The mcp publish failure now names its own cause
Publish npm (captchakraken-mcp)failed on today's release (run 32619270199) with404 Not Found - PUT. The package existed at 0.1.0 the whole time; what was missing was its trusted publisher entry, which is scoped per package name — and npm reports that as a 404, which reads as "the package does not exist".That wording is what made it expensive:
captchakrakenpublished in the same run, from the same workflow, over the same OIDC, so every obvious reading was wrong. The step now checks whether the package exists after a failed publish and prints the actual cause and the fix. It still fails — a real release failure is not something to wave through.Since fixed on npmjs.com, and
captchakraken-mcp@0.1.1published cleanly on a re-run.🤖 Generated with Claude Code