Page MenuHomePhabricator

Have a special page for mentors to sign up
Open, In Progress, MediumPublic

Description

At the moment, the page that lists mentors is not really easy to create and maintain. We've been able to have this page made of wikitext, with some advice at the top, only because the page was manually created under supervision. And sometimes, some elements were missing: advice at the top, mentors' descriptions badly formatted, etc.

Scaling to more wikis en masse will make impossible to monitor that page creation. We need a special page integrated to the Growth experience to replace it.

Idea #1: a special page

This special page would display the list of all mentors.

Comments about requirements listed on description
  • Limit access. If a user hasn't reached a given threshold, they can't add their name to this page. (By default: 500 edits + 30 days of experience)

⚠ Such a change would be fairly trivial to introduce by using user rights, generally speaking. However, the specified defaults would make this a bit harder. 500/30 is enwiki's extended confirmed user group, adopted by few other wikis as well. However, it is not MediaWiki default. If we really want to use 500/30 rather than MediaWiki's native autoconfirmed group, we would have to introduce such a group globally. Technically speaking, that would not be a problem, but this could be a concern from the community perspective. @Trizek-WMF or @MMiller_WMF have probably some opinions about this.

✅ This should be easy. We can use MediaWiki's native user rights system, and assign this permission to some (default) group. I personally propose administrators, since bureaucrats are traditionally responsible for user rights management.

✅ That is trivial to do, and standard for special pages. We can even link to mw.org for docs, as we do with Special:ClaimMentee already.

  • Provide a field for mentors to add their description, matching the 240 characters limits we've set. This would also prevent any kind of wikitext formatting being added.

✅ No issues with this one.

  • Have a way to distinguish two roles: Teacher and Mentor (see T245639#6509843)

✅ Should be ok.

Implementation notes

It should be possible to store the information to user properties table (used for user preferences). However, I believe that it would be better to create a new database table for mentors, That would allow us to scale mentorship feature easily, add more information for each mentor, etc. easily, without having to re-think the whole model. Second reason is that storing it into the user_properties table would require us to search by up_value, which isn't something the table is built for.

Creating a new database table is something that's currently being tried by our team for add a link recommendations. The DBA team would be certainly happy to help, if needed.

How hard will this be?

Building the interface for the sign up form is easy. However, figuring out where to store the information about the list of mentors is tricky. We can try to edit the backend wiki page via the sign up form, which is hopeless, because wikitext is not structured. We can store it as an user property; that would mean we would have no ability to enforce who can be a mentor (ie. no permission checks), since anyone can edit their own user properties via the API. Third option would be creating a database table for mentors, which would fix all the issues with other methods, but it is not a trivial amount of work, and would probably require more than a week of work.

Idea #2: using Special:MentorDashboard

Now that we have the Mentor dashboard being built, we can imagine to have this dashboard as the sign-up page. We would rely on the database to actually sign up.

Possible path:

  1. a user wants to become a mentor
  2. they visit special:MentorDashboard
    1. this page can display some explainations about what it means to be a mentor, and what is expected.
      1. if they pass the threshold defined by the community (at the moment, the level of protection of the sign-up page), they have access to a button for the next step.
      2. If they don't, they get a message about the conditions
  3. the user is invited to define their personal message, and their mentor status (global or workshop). They are warned that, as soon as they click on "next" they will potentially get some questions soon!
  4. the dashboard is enabled, mentor is active.

The current sign-up page would not be necessary anymore, or should be transformed to become the "official" list of mentors with their description, with a possibly to see their activity, to spot inactive mentors, for newcomers to request to change mentors based on the existing choices...

Mentors can quit and reassign their mentees anytime, using the appropriate dashboard module.

Points of vigilence

Some wikis use the mentor's list talk page as a coordination page. We need to take these pages in consideration if we change the list format.

Details

ProjectBranchLines +/-Subject
mediawiki/extensions/GrowthExperimentsmaster+113 -43
mediawiki/extensions/GrowthExperimentsmaster+22 -1
mediawiki/extensions/GrowthExperimentsmaster+31 -5
mediawiki/extensions/GrowthExperimentsmaster+141 -2
mediawiki/extensions/GrowthExperimentsmaster+2 -2
mediawiki/extensions/GrowthExperimentsmaster+369 -6
mediawiki/extensions/GrowthExperimentsmaster+2 -1
mediawiki/extensions/GrowthExperimentsmaster+3 -1
mediawiki/extensions/GrowthExperimentsmaster+7 -2
mediawiki/extensions/GrowthExperimentsmaster+9 -1
mediawiki/extensions/GrowthExperimentsmaster+370 -6
mediawiki/extensions/GrowthExperimentsmaster+11 -8
mediawiki/extensions/GrowthExperimentsmaster+8 -3
mediawiki/extensions/GrowthExperimentsmaster+689 -37
mediawiki/extensions/GrowthExperimentsmaster+758 -0
mediawiki/extensions/GrowthExperimentsmaster+27 -7
mediawiki/extensions/GrowthExperimentsmaster+94 -29
mediawiki/extensions/GrowthExperimentsmaster+31 -23
mediawiki/extensions/GrowthExperimentsmaster+336 -2
mediawiki/extensions/GrowthExperimentsmaster+1 -51
mediawiki/extensions/GrowthExperimentsmaster+75 -68
mediawiki/extensions/GrowthExperimentsmaster+1 K -846
Show related patches Customize query in gerrit

Related Objects

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes

Another thought: if such a page is created, then most likely a similar one will be created for the workshops hosts. This page should have different levels of access for sign up, as it will be really easy to chase newcomers through it. But it may be badly needed for universities or compulsory mediation schemes. Perhaps it is worth hanging on it a restriction in rights to administrators, or other flags.

Some thoughts of the day:

Now that we have the Mentor dashboard being built, we can imagine to have this dashboard as the sign-up page.

Possible path:

  1. a user wants to become a mentor
  2. they visit special:MentorDashboard
    1. this page can display some explainations about what it means to be a mentor, and what is expected.
      1. if they pass the threshold defined by the community (at the moment, the level of protection of the sign-up page), they have access to a button for the next step.
      2. If they don't, they get a message about the conditions
  3. the user is invited to define their personal message, and their mentor status (global or workshop). They are warned that, as soon as they click on "next" they will potentially get some questions soon!
  4. the dashboard is enabled, mentor is active.

The current sign-up page would not be necessary anymore, or should be transformed to become the "official" list of mentors (possibly with their activity, to spot inactive mentors).

Mentors can quit and reassign their mentees anytime, using the appropriate dashboard module.

I reached at 6 wikis to announce the deployment of the mentor dashboard. I checked the mentor list each time, and 2 of them had mistakes: one was not functional at all (they used {{u}} instead of the standard formatting) and the other one had one mentor who added an external link in their description.

We may have other cases of not functional mentor lists. A special page with guidance, would be really necessary.

IMO some sort of preview/validation with intelligent error messages would be more useful than lots of docs somewhere far away.
(FWIW using {{u}} should work, although it would prevent any custom signatures from being recognized.)

Another thing to note here would be taking care of community's ability to check & control who is (not) a mentor. Once a special page is introduced, it is fairly easy to make it check things like days since registration (ie. tenure) or number of edits. However, enforceability depends on the storage backend we decide to use.

Wiki-page as a storage backend

We could follow what the community configuration does and put "somewhere"[1] a wiki page and build a nice frontend for it, which we can then advertise. This would have a lot of advantages:

  • users editing the page through expected means (ie. via the special page) would be able to have guidance and it would be hard for them to add themselves in an incorrect way,
  • it would be easy for us to add more options/properties for the mentors (such as, topics or "scaling factor" for T287917: Mentorship: let mentors choose volume of mentees

However, this will also create some new problems, like:

  • it is not clear where the wikipage backend should live: a subpage of the current mentor list, perhaps? What about wikis which don't have a mentor list?
  • we wouldn't be able to enforce any access control settings (MediaWiki is not built with support for per-page edit restriction settings, and while we can try to prevent users not meeting mentor criteria to enroll, there will always be ways to bypass that; part of the reasons why community configuration only does basic validation is this)

[1] It would have to be somewhere where interested community members can edit (so not NS_MEDIAWIKI like community configuration).

Database as a storage backend

Alternatively, we could store the mentor list in the database. This will give us full control over the storage backend. All the advantages of the wikipage as a storage backend option would apply here, and this will also solve the "where to put the wikipage" and "access control" points from above.

However, having full control also means no one will be able to read the mentor list, unless we build an interface for it. Making the signup special page to display list of mentors would be fairly trivial, however, communities might also rely on things like watchlists to monitor/patrol their list of mentors, which won't be easy to include.

@Trizek-WMF @MMiller_WMF Could you please read over the two options I described above, and share your thoughts? Thanks!

we wouldn't be able to enforce any access control settings (MediaWiki is not built with support for per-page edit restriction settings, and while we can try to prevent users not meeting mentor criteria to enroll, there will always be ways to bypass that; part of the reasons why community configuration only does basic validation is this)

I don't think there's any problem with per-page edit restrictions in MediaWiki. Per-page read restrictions are problematic, and restrictions against privileged users (e.g. admins) can usually be worked around, but neither is a problem here.

A wiki page has the benefit that it doubles as an API if a community wants to build tooling around it (which is something we should have, per the architecture principles).

Can we agree on the fact that a wikipage is the best option there?

Can we agree on the fact that a wikipage is the best option there?

I think we can.

Change 756130 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] [WIP] Move mentor pool code to MentorProvider

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

Change 756130 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Move mentor pool code to MentorProvider

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

Urbanecm_WMF changed the task status from Open to In Progress.Feb 3 2022, 10:45 AM
Urbanecm_WMF edited projects, added Growth-Team (Current Sprint); removed Growth-Team.
Urbanecm_WMF moved this task from Incoming to In Progress on the Growth-Team (Current Sprint) board.

Change 759693 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] WIP: Make WikiPageConfigLoader support loading a mentor list

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

Change 759692 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] Move datatype validation to a trait

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

Change 759777 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] MentorProvider: Remove unnecessary sourceId methods

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

Change 759711 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] WIP: Create StructuredMentorProvider

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

Change 759692 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Move datatype validation to a trait

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

Change 759777 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] MentorProvider: Remove unnecessary sourceId methods

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

Change 759693 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Make WikiPageConfigLoader support loading a mentor list

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

Change 762433 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] [WIP] Add StructuredMentorWriter

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

Change 762498 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] Mentor: Rename getMentorUser() to getUserIdentity()

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

Change 762498 merged by Urbanecm:

[mediawiki/extensions/GrowthExperiments@master] Mentor: Rename getMentorUser() to getUserIdentity()

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

Change 767849 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] WikiPageConfigWriter: Do not require full User object

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

Change 768064 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] Make Mentor aware of default intro text

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

Change 768064 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Make Mentor aware of default intro text

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

Change 767849 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] WikiPageConfigWriter: Do not require full User object

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

Change 759711 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Create StructuredMentorProvider

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

Change 762433 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Add StructuredMentorWriter to complement StructuredMentorProvider

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

Change 785146 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] [WIP] Add Special:ManageMentors

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

Change 791446 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] MentorProvider: Use constants rather than strings for IDing providers

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

Change 791451 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] SpecialQuitMentorship: Only enable when wikitext mentor provider is in use

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

Change 791455 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] [WIP] Add ApiManageMentorList

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

Change 791446 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Use constants instead of strings for identifying MentorProviders

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

Change 785146 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Add Special:ManageMentors

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

Change 791451 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] SpecialQuitMentorship: Only enable when wikitext mentor provider is in use

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

Change 791802 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] SpecialManageMentors: Add user links for each mentor

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

Change 791805 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] SpecialManageMentors: Add a link back after a mentor is removed

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

Change 791802 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] SpecialManageMentors: Add user links for each mentor

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

Change 791805 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] SpecialManageMentors: Add a link back after a mentor is removed

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

Change 799941 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] StructuredMentorWriter: Call setLogger()

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

Change 799941 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] StructuredMentorWriter: Call setLogger()

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

Change 800850 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] Add managementors right to managementorship grant

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

Change 800850 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Add managementors right to managementorship grant

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

Change 800956 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] MentorTools: Make it possible for mentors to change their intro message

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

Change 802420 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] MentorTools: Make it possible to change one's auto-assignment status

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

Change 804772 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] Mentor dashboard: Add link to Special:ManageMentors to resources module

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

Change 805470 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] [WIP] MentorMessageChangeDialog: Inform users about the maximum message length

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

Change 791455 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Add ApiManageMentorList

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

Change 807829 had a related patch set uploaded (by Urbanecm; author: Urbanecm):

[mediawiki/extensions/GrowthExperiments@master] ApiManageMentorList: Empty message should mean default

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

Change 807829 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] ApiManageMentorList: Empty message should mean default

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

Change 800956 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] MentorTools: Make it possible for mentors to change their intro message

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

Change 804772 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] Mentor dashboard: Add link to Special:ManageMentors to resources module

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

Change 805470 merged by jenkins-bot:

[mediawiki/extensions/GrowthExperiments@master] MentorMessageChangeDialog: Inform users about the maximum message length

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