Skip to content

Stop claiming Medium's managed challenge cannot be solved (§19) - #3

Merged
jehrr merged 1 commit into
mainfrom
fix/captcha-capability-wording
Sep 17, 2026
Merged

jehrr merged 1 commit into
mainfrom
fix/captcha-capability-wording

Conversation

@jehrr

@jehrr jehrr commented Sep 16, 2026

Copy link
Copy Markdown
Collaborator

v0.1.0's README said of the two refusal pages: "Neither is solvable ...
there is nothing to hand a captcha solver." That is true of the WAF
refusal, which carries no widget, and false of the managed challenge.

Cloudflare calls turnstile.render(container, params) once and keeps
nothing, so sitekey, action, cData and chlPageData exist only
inside that call and no static read of the HTML -- however careful --
can build a solvable task. The measurement in the README ("0 data-sitekey
attributes, 0 iframes") was therefore evidence about the markup being
read as evidence about the product. The parameters can be captured with
an init script installed before any page script runs, and 2Captcha solves
what comes out as TurnstileTaskProxyless; foodpanda-scraper in this
family does exactly that.

No measurement changed. Only the conclusion did, from "not solvable" to
"not implemented here" -- which is a TODO rather than a limitation, and
is the only sentence this family is entitled to. The reason it is not
implemented is also now stated and is measured: the challenge here is
transient, 9 of 27 first attempts met it and a fresh context cleared all
9, so a retry costs nothing where a solve costs money.

Also:

  • the reCAPTCHA Enterprise paragraph now says this repo does not
    implement RecaptchaV2EnterpriseTaskProxyless, rather than leaving the
    reader to infer nothing could be done;
  • test_challenge_is_not_solvable is renamed
    test_a_challenge_is_never_paid_for_here -- its assertions were always
    right, its name asserted something it never measured;
  • test_captcha_capability_claims_match_the_code is added, guarding both
    directions: a documented "cannot be solved", and a README claiming a
    Turnstile solve with no task type or no interception hook behind it.
    Verified by control -- reverting the README sentence turns it red.

Not changed: the policy. A managed challenge is still never solved here,
still retried in a fresh context, and still counted as blocked if the
retries run out. Nothing is charged for a block.

Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com

🤖 Generated with Claude Code

v0.1.0's README said of the two refusal pages: "Neither is solvable ...
there is nothing to hand a captcha solver." That is true of the WAF
refusal, which carries no widget, and false of the managed challenge.

Cloudflare calls `turnstile.render(container, params)` once and keeps
nothing, so `sitekey`, `action`, `cData` and `chlPageData` exist only
inside that call and no static read of the HTML -- however careful --
can build a solvable task. The measurement in the README ("0 data-sitekey
attributes, 0 iframes") was therefore evidence about the markup being
read as evidence about the product. The parameters can be captured with
an init script installed before any page script runs, and 2Captcha solves
what comes out as TurnstileTaskProxyless; foodpanda-scraper in this
family does exactly that.

No measurement changed. Only the conclusion did, from "not solvable" to
"not implemented here" -- which is a TODO rather than a limitation, and
is the only sentence this family is entitled to. The reason it is not
implemented is also now stated and is measured: the challenge here is
transient, 9 of 27 first attempts met it and a fresh context cleared all
9, so a retry costs nothing where a solve costs money.

Also:
* the reCAPTCHA Enterprise paragraph now says this repo does not
  implement RecaptchaV2EnterpriseTaskProxyless, rather than leaving the
  reader to infer nothing could be done;
* test_challenge_is_not_solvable is renamed
  test_a_challenge_is_never_paid_for_here -- its assertions were always
  right, its name asserted something it never measured;
* test_captcha_capability_claims_match_the_code is added, guarding both
  directions: a documented "cannot be solved", and a README claiming a
  Turnstile solve with no task type or no interception hook behind it.
  Verified by control -- reverting the README sentence turns it red.

Not changed: the policy. A managed challenge is still never solved here,
still retried in a fresh context, and still counted as blocked if the
retries run out. Nothing is charged for a block.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jehrr
jehrr merged commit 484fa49 into main Sep 17, 2026
7 checks passed
@jehrr
jehrr deleted the fix/captcha-capability-wording branch September 17, 2026 08:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant