Page MenuHomePhabricator

Temporary account adding URL on first Publish attempt gets hCaptcha request, but no popup.
Closed, ResolvedPublicBUG REPORT

Description

Steps to replicate the issue (include links if applicable):

  • When not logged in, visit a Wikipedia article
  • Edit source, insert a URL (eg [https://test.ca])
  • Click Publish changes

What happens?:

  • Edit does not get saved and user sees "Your edit includes new external links. To protect the wiki against automated spam, we kindly ask you to solve the following hCaptcha:"
  • However, there is nothing to solve. No popup.
  • Upon clicking Publish changes again, the hCaptcha appears.

What should have happened instead?:

  • The hCaptcha popup should have appeared on the first click of Publish changes

Other information (browser name/version, screenshots, etc.):

  • Desktop, Source editor. I confirmed on Firefox 143.0.3 Fedora. uBlockOrigin disabled. My screenshots below.
  • A Temporary account holder confirmed on Firefox, Chrome and Edge (Wikipedia Teahouse perm link).

First Publish attempt (note red text instructions above Publish changes button):

Screenshot From 2025-12-06 22-07-24.png (762×1 px, 148 KB)

Second publish attempt:
Screenshot From 2025-12-06 22-10-03.png (762×1 px, 343 KB)

Full screen showing state:

image.png (893×931 px, 166 KB)

Event Timeline

Xaosflux triaged this task as High priority.Dec 7 2025, 8:29 PM
Xaosflux subscribed.

Inherit priority from merged in ticket; this is preventing a core end user function: Contributing content to the projects

Thanks for filing the task, and sorry for the issues being encountered here. The problem being reported is because we are using 100% passive mode for ConfirmEdit's "edit" trigger, with an "always challenge" mode set for the "addurl" trigger. The "addurl" trigger has always functioned after a page reload. We updated the AbuseFilter "showcaptcha" trigger (which has a similar flow of happening after a page reload) to tell the user that they need to resubmit the form, but we missed doing that for "addurl" when in 100% passive mode

image.png (1×1 px, 322 KB)

The problem will go away tomorrow (Dec 8) when we switch enwiki to use 99.9% passive mode. At that point, adding a URL will be treated like any other edit, with a challenge only being shown if hCaptcha finds the edit session to be suspicious of bot activity. The challenge would appear immediately on pressing "Publish changes", and not after a page reload.

Just flagging that we are tracking this bug - thanks for documenting it here. Our initial team discussion about it suggests this is an unintended byproduct of running enwiki in 100% passive mode, and that it will be addressed when we move to 99.9% passive mode (which is scheduled for tomorrow morning, Monday).

(EDIT: While I had the page open to write this, @kostajh posted more detail above.)

Thanks for updates and that there is a quick resolution. Should this be delayed we can insert some help text in to the error message - instructing end users to resubmit the publish as a workaround.

This should be resolved now, having switched to using 99.9% passive mode on enwiki. hCaptcha will challenge suspicious sessions on edit/create/addurl on the first click to publish changes.

I did a test, the edit just went though - were you able to verify it actually works if the automatic hcaptcha failed?

I did a test, the edit just went though - were you able to verify it actually works if the automatic hcaptcha failed?

Yes. I have a scripted environment to check if the hCaptcha challenge is triggered

const { remote } = require('webdriverio');

async function testCaptchaProtection() {
    const browser = await remote({
        capabilities: {
            browserName: 'chrome',
            'goog:chromeOptions': {
                args: ['--disable-blink-features=AutomationControlled', '--ignore-certificate-errors']
            }
        }
    });

    try {
        await browser.url('https://en.wikipedia.org/wiki/Test?action=edit'); // navigate to whatever page you want after the browser loads
        
        await browser.waitUntil(async () => {
            const title = await browser.getTitle();
            return title.length > 0;
        }, { timeout: 3000000 });
        await browser.pause( 3000000 );
    } catch (error) {
        console.error('Error during test:', error.message);
    } finally {
        await browser.deleteSession();
    }
}

testCaptchaProtection();

with a package.json of:

{
  "dependencies": {
    "webdriverio": "^9.19.2"
  }
}