Page MenuHomePhabricator

Allow turning on IP Reveal from the onboarding dialog
Closed, ResolvedPublic1.5 Estimated Story Points

Description

Motivation

We have received feedback that it is confusing for users to be able to turn on IP Info from the onboarding dialog but for IP Reveal they have to find the preference under Special:Preferences.

Specification
  1. Users who have access to IP Reveal at the time of seeing the onboarding dialog will be able to enable IP Reveal from the relevant screen on the onboarding dialog.
  2. The 3rd screen will include the entire preference text and the terms of use alongside the checkbox for enabling IP Reveal.
ScenarioWhat happens
1. User can't reveal IP on the local wikiNo IP Reveal step in the onboarding dialog
2. User can reveal IP locally and doesn't need to check a preference to do soDisplay the global IP reveal preference so that these users can turn on feature globally. Optionally: check if they already have it globally enabled and if so, don't display the preference at all.
3. User can reveal IPs locally but needs to check a preference to do so and they have already checked the preference prior to seeing the onboarding dialogDisplay the global IP reveal preference so that these users can turn on feature globally (for wikis where they have access to do IP reveal).
4. User can reveal IPs locally but needs to check a preference to do so and has not checked the preference prior to seeing the onboarding dialogGive them the global preference to turn on IP reveal within the onboarding dialog, similarly to how IPInfo preference is shown.
Design (Figma file)

IP Reveal step - 30 July 2025.png (2×5 px, 1 MB)

Event Timeline

@KColeman-WMF can you make sure the design and copy is up to date for this text?

Maybe, though the content may need to change again if the checkbox is present.

Niharika renamed this task from Allow turning on IP Reveal from the onboarding dialog to [Investigate] Allow turning on IP Reveal from the onboarding dialog.Jul 22 2025, 2:37 PM
Niharika triaged this task as Medium priority.

@Niharika and @Dreamy_Jazz I can't actually see the IP Reveal preferences copy on testwiki (maybe because I have staff rights now?) So I can't check if the copy for enabling it still matches.

With regards: T386928: Temporary accounts onboarding dialog: Update content of third (IP reveal) step to clarify not all users need to check a preference

Is there a way to let users know if they have automatically been given the checkuser-temporary-account-no-preference right? And adjust the copy accordingly?

Is there a way to let users know if they have automatically been given the checkuser-temporary-account-no-preference right? And adjust the copy accordingly?

Yes and no. They may not have the right globally, so we would need to consider that the user might need to check the preference on other wikis.

Bringing into the sprint to investigate how we might address the local/external/global rights and preference needed/not needed.

Could we solve this by adding either text or a preference to the IP reveal panel in the onboarding dialog?

image.png (639×541 px, 60 KB)

Here's what the user would see in various scenarios (feel free to ignore the code - I've added it here to make it clear that these things are easy to check):

  • User can't reveal IP on the local wiki - check $checkUserPermissionManager->canAccessTemporaryAccountIPAddresses( $authority )
    • No onboarding dialog
  • User can reveal IP on the local wiki - check $checkUserPermissionManager->canAccessTemporaryAccountIPAddresses( $authority )
    • User doesn't need to check a preference on the local wiki - check $authority->isAllowed( 'checkuser-temporary-account-no-preference' )
      • Add text: You can reveal IPs on this wiki. You may or may not need to check a preference to reveal IPs on other wikis, depending on your local and global groups.
    • User needs to check a preference on the local wiki - check $authority->isAllowed( 'checkuser-temporary-account-no-preference' )
      • User has already checked the preference on the local wiki - check $this->userOptionsLookup->getOption( $user, 'checkuser-temporary-account-enable' )
        • Add text: You can reveal IPs on this wiki. You may or may not need to check a preference to reveal IPs on other wikis, depending on your local and global groups.
      • User has not checked the preference on the local wiki - check $this->userOptionsLookup->getOption( $user, 'checkuser-temporary-account-enable' )
        • Show them the global preference, similarly to how IPInfo preference is shown.

The actual text is just a rough idea of what we could write, and I'm sure can be improved.

It's not perfect - e.g. if someone already has the local preference checked they wouldn't be prompted to check the global preference; some people who never have to check a preference, or who have checked the global preference already, would see the warning about possibly having to check a preference. But it could decrease the confusion for a lot of users, for a reasonable technical lift.

In T398345#11035312, @Tchanders wrote:

  • User can't reveal IP on the local wiki - check $checkUserPermissionManager->canAccessTemporaryAccountIPAddresses( $authority )
    • No onboarding dialog

Is IP Info and IP Reveal the same permission now? If a user can't see IP Reveal but can see IP Info, shouldn't they be able to at least see the first two onboarding screens rather than no onboarding dialog?

In T398345#11035312, @Tchanders wrote:

  • User can't reveal IP on the local wiki - check $checkUserPermissionManager->canAccessTemporaryAccountIPAddresses( $authority )
    • No onboarding dialog

Is IP Info and IP Reveal the same permission now? If a user can't see IP Reveal but can see IP Info, shouldn't they be able to at least see the first two onboarding screens rather than no onboarding dialog?

Sorry, I didn't mean to change the existing logic here. Yes, they should see no IP reveal step in the dialog.

  • User needs to check a preference on the local wiki - check $authority->isAllowed( 'checkuser-temporary-account-no-preference' )

That seems wrong. Should it not be the checkuser-temporary-account right?

Could we also consider just always defining the global temporary account preference, even if the user has the local checkuser-temporary-account-no-preference right?

That would allow us to always display the preference in the dialog. Doing that means:

  • Users with a checkuser or suppress local group are shown the preference on the wiki where they have those groups, and so can enable the tool globally
  • Users with local access that require the preference to be enabled can also enable access on other wikis

Then for the few users who have checkuser-temporary-account-no-preference everywhere, it is essentially just a no-op. If we want to handle this case better, we could consider a MediaWiki-extensions-CentralAuth check where no preference is displayed if both:

  • The user is in a global group which gives them access without the need for a preference
  • The global group is enabled on all wikis

We could consider hiding the preference (making it an api option) if the user has the -no-preference right. That would mean we could set it in the onboarding dialog but it would not change how it's displayed in Special:Preferences / Special:GlobalPreferences.

  • User needs to check a preference on the local wiki - check $authority->isAllowed( 'checkuser-temporary-account-no-preference' )

That seems wrong. Should it not be the checkuser-temporary-account right?

I mean we'd check checkuser-temporary-account-no-preference, and conclude that they don't need the preference of they have that right. Checking checkuser-temporary-account wouldn't tell us whether they have the no preference right, in case they have both.

Tchanders set the point value for this task to 1.5.Jul 29 2025, 6:39 AM
  • User needs to check a preference on the local wiki - check $authority->isAllowed( 'checkuser-temporary-account-no-preference' )

That seems wrong. Should it not be the checkuser-temporary-account right?

I mean we'd check checkuser-temporary-account-no-preference, and conclude that they don't need the preference of they have that right. Checking checkuser-temporary-account wouldn't tell us whether they have the no preference right, in case they have both.

I misunderstood the comment. When I read it, I thought the check was duplicated. I guess that the meaning is "if $authority->isAllowed( 'checkuser-temporary-account-no-preference' ) is false", but i had misread it and assumed that checking it meant seeing if the value was true.

@Tchanders I'm good with the plan. Note that when we give them the preference we should also give them the terms of use that go with it. I found the designs @KColeman-WMF made for this feature in the figma file.

@Tchanders I'm good with the plan. Note that when we give them the preference we should also give them the terms of use that go with it. I found the designs @KColeman-WMF made for this feature in the figma file.

I'm not sure I fully understand what the final plan is? Are we only going to show the preference to those who have the right and have not yet enabled it? Or is this not technically possible so we have to include the intentionally vague sentence: "Users who meet the access requirements may need to enable IP reveal in their preferences or global preferences"?

I think it would be better for users to agree to the preference even if they don't need to do that for local access (but need it for global access). We don't link it well, so if we want to avoid confusion it seems better to just have it shown.

I think it would be better for users to agree to the preference even if they don't need to do that for local access (but need it for global access). We don't link it well, so if we want to avoid confusion it seems better to just have it shown.

Could you list out the user scenarios please? I just want to make sure I understand it fully. Thanks!

Good point.

My understanding of @Tchanders plan above is this:

ScenarioWhat happens
1. User can't reveal IP on the local wikiNo IP Reveal step in the onboarding dialog
2. User can reveal IP locally and doesn't need to check a preference to do soShow them something like: You can reveal IPs on this wiki. You may or may not need to check a preference to reveal IPs on other wikis, depending on your local and global groups.
3. User can reveal IPs locally but needs to check a preference to do so and they have already checked the preference prior to seeing the onboarding dialogShow them something like: You can reveal IPs on this wiki. You may or may not need to check a preference to reveal IPs on other wikis, depending on your local and global groups.
4. User can reveal IPs locally but needs to check a preference to do so and has not checked the preference prior to seeing the onboarding dialogGive them the global preference to turn on IP reveal within the onboarding dialog, similarly to how IPInfo preference is shown.

My understanding of what @Dreamy_Jazz is suggesting is this:

ScenarioWhat happens
1. User can't reveal IP on the local wikiNo IP Reveal step in the onboarding dialog
2. User can reveal IP locally and doesn't need to check a preference to do soDisplay the global IP reveal preference so that these users can turn on feature globally. Optionally: check if they already have it globally enabled and if so, don't display the preference at all.
3. User can reveal IPs locally but needs to check a preference to do so and they have already checked the preference prior to seeing the onboarding dialogDisplay the global IP reveal preference so that these users can turn on feature globally (for wikis where they have access to do IP reveal).
4. User can reveal IPs locally but needs to check a preference to do so and has not checked the preference prior to seeing the onboarding dialogGive them the global preference to turn on IP reveal within the onboarding dialog, similarly to how IPInfo preference is shown.

@Tchanders @Dreamy_Jazz is this accurate?

From the end user perspective the second plan is nicer. If the technical lift isn't very different, I would lean towards the second option.

Your understanding of what I'm suggesting is correct.

From what I can see, the technical lift will be similar between both plans.

Thank you @Niharika for clearly explaining this!

I agree that the second plan is preferable for the user. I wonder if we can include an inline notice message to inform users who have already checked the local or global preference?

  • Notice message for when it's enabled globally: IP Reveal has been enabled globally on all wikis where you meet the access requirements.
  • Notice message for when it's enabled locally: IP Reveal has been enabled on the current wiki.

We can also make sure the copy refers to Global preferences so it's clear what they are enabling:

  • Title: Enable IP Reveal globally
  • Checkbox: Enable revealing IP addresses for temporary accounts on all wikis where you meet the access requirements.
  • Button: Save global preference

Mockups:

IP Reveal step - 30 July 2025.png (2×5 px, 1 MB)

We could also add a notice to the IP Info step, for consistency?

We could also add a notice to the IP Info step, for consistency?

We could, but could I suggest that the IP Info step is handled in a different ticket?

Tchanders renamed this task from [Investigate] Allow turning on IP Reveal from the onboarding dialog to Allow turning on IP Reveal from the onboarding dialog.Jul 30 2025, 11:55 AM

We could also add a notice to the IP Info step, for consistency?

We could, but could I suggest that the IP Info step is handled in a different ticket?

This makes sense to me - adding the notice and filing the separate task.

Global option from T398345#11045676 (option 2) sounds good to me too.

Change #1175101 had a related patch set uploaded (by Dreamy Jazz; author: Dreamy Jazz):

[mediawiki/extensions/CheckUser@master] [WIP] Onboarding dialog: Split IPInfo preference to new component

https://gerrit.wikimedia.org/r/1175101

We could also add a notice to the IP Info step, for consistency?

We could, but could I suggest that the IP Info step is handled in a different ticket?

Having looked at how this would work technically, some of the changes will be made as part of the IP reveal preference change. However, we will still need a new ticket for the IPInfo step.

  • Checkbox: Enable revealing IP addresses for temporary accounts on all wikis where you meet the access requirements.

The text for a preference does not usually end in a full stop. Can we consider removing the full stop?

Change #1175167 had a related patch set uploaded (by Dreamy Jazz; author: Dreamy Jazz):

[mediawiki/extensions/WikimediaMessages@master] CheckUser IP reveal preference description: Use <b> instead of '''

https://gerrit.wikimedia.org/r/1175167

Change #1175169 had a related patch set uploaded (by Dreamy Jazz; author: Dreamy Jazz):

[mediawiki/extensions/CheckUser@master] [WIP] Support checking IP reveal preference in onboarding dialog

https://gerrit.wikimedia.org/r/1175169

Change #1175170 had a related patch set uploaded (by Dreamy Jazz; author: Dreamy Jazz):

[translatewiki@master] [CheckUser] Add key to ignore

https://gerrit.wikimedia.org/r/1175170

Change #1175178 had a related patch set uploaded (by Dreamy Jazz; author: Dreamy Jazz):

[mediawiki/extensions/CheckUser@master] [WIP] Create tempAccountsOnboardingPreference.test.js

https://gerrit.wikimedia.org/r/1175178

Change #1175101 merged by jenkins-bot:

[mediawiki/extensions/CheckUser@master] Onboarding dialog: Split IPInfo preference to new component

https://gerrit.wikimedia.org/r/1175101

Change #1175178 merged by jenkins-bot:

[mediawiki/extensions/CheckUser@master] Create tempAccountsOnboardingPreference.test.js

https://gerrit.wikimedia.org/r/1175178

Change #1175929 had a related patch set uploaded (by Dreamy Jazz; author: Dreamy Jazz):

[mediawiki/extensions/CheckUser@master] Always define CheckUser IP reveal enable preference

https://gerrit.wikimedia.org/r/1175929

Change #1175930 had a related patch set uploaded (by Dreamy Jazz; author: Dreamy Jazz):

[mediawiki/extensions/CheckUser@master] Onboarding dialog: Refactor some jest helper functions to utils.js

https://gerrit.wikimedia.org/r/1175930

Change #1175167 merged by jenkins-bot:

[mediawiki/extensions/WikimediaMessages@master] CheckUser IP reveal preference description: Use <b> instead of '''

https://gerrit.wikimedia.org/r/1175167

Change #1175929 merged by jenkins-bot:

[mediawiki/extensions/CheckUser@master] Always define CheckUser IP reveal enable preference

https://gerrit.wikimedia.org/r/1175929

Change #1175930 merged by jenkins-bot:

[mediawiki/extensions/CheckUser@master] Onboarding dialog: Refactor some jest helper functions to utils.js

https://gerrit.wikimedia.org/r/1175930

Change #1175169 merged by jenkins-bot:

[mediawiki/extensions/CheckUser@master] Support checking IP reveal preference in onboarding dialog

https://gerrit.wikimedia.org/r/1175169

Change #1175170 merged by jenkins-bot:

[translatewiki@master] [CheckUser] Add key to ignore

https://gerrit.wikimedia.org/r/1175170

I doubt QA will happen on this for a long time, so I think we can call this resolved and having been tested through production use