Wikipedia
testwiki
https://test.wikipedia.org/wiki/Main_Page
MediaWiki 1.46.0-wmf.23
first-letter
Media
Special
Talk
User
User talk
Wikipedia
Wikipedia talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
Thread
Thread talk
Summary
Summary talk
Test namespace 1
Test namespace 1 talk
Test namespace 2
Test namespace 2 talk
Draft
Draft talk
Campaign
Campaign talk
TimedText
TimedText talk
Module
Module talk
SecurePoll
SecurePoll talk
CNBanner
CNBanner talk
Translations
Translations talk
Event
Event talk
Topic
Newsletter
Newsletter talk
Template:Ambox
10
34472
737638
611286
2025-03-04T11:58:31Z
en>RMCD bot
0
Removing notice of move discussion
611285
wikitext
text/x-wiki
{{#invoke:Message box|ambox}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
mbfrv60doj3koropyon4zrq5dhk4lij
737639
737638
2026-04-11T19:54:17Z
Novem Linguae
49714
1 revision imported from [[:en:Template:Ambox]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
611285
wikitext
text/x-wiki
{{#invoke:Message box|ambox}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
mbfrv60doj3koropyon4zrq5dhk4lij
Template:See also
10
44240
737642
637535
2025-05-28T13:34:51Z
en>Ahecht
0
ifexists={{{ifexists|true}}}
737642
wikitext
text/x-wiki
<includeonly>{{#invoke:Labelled list hatnote|labelledList|See also|ifexists={{{ifexists|true}}}}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
iscw165d4olefvh2e2w9vsrt2yr0h51
737643
737642
2026-04-11T19:54:17Z
Novem Linguae
49714
1 revision imported from [[:en:Template:See_also]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737642
wikitext
text/x-wiki
<includeonly>{{#invoke:Labelled list hatnote|labelledList|See also|ifexists={{{ifexists|true}}}}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
iscw165d4olefvh2e2w9vsrt2yr0h51
Template:Pp-protected
10
48667
737630
517191
2024-10-31T22:49:43Z
en>Primefac
0
/* top */ avoid double redir
737630
wikitext
text/x-wiki
#REDIRECT [[Template:Protection padlock]]
{{Rcat shell|
{{R from move}}
{{R from long name}}
{{R with history}}
}}
[[Category:Top icon protection templates]]
fggdzzf86ur8bq36yd27gkfxl333uwg
737631
737630
2026-04-11T19:54:07Z
Novem Linguae
49714
1 revision imported from [[:en:Template:Pp-protected]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737630
wikitext
text/x-wiki
#REDIRECT [[Template:Protection padlock]]
{{Rcat shell|
{{R from move}}
{{R from long name}}
{{R with history}}
}}
[[Category:Top icon protection templates]]
fggdzzf86ur8bq36yd27gkfxl333uwg
Template:Subst only
10
69172
737646
455878
2025-11-04T11:40:16Z
en>Paine Ellsworth
0
add [[WP:RCAT|rcat template]]
737646
wikitext
text/x-wiki
#REDIRECT [[Template:Always substitute]]
{{Redirect category shell|
{{R from move}}
{{R from alternative name}}
{{R from template shortcut}}
}}
h8a8l7037j484rw6db641a909aq5ttq
737647
737646
2026-04-11T19:54:19Z
Novem Linguae
49714
1 revision imported from [[:en:Template:Subst_only]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737646
wikitext
text/x-wiki
#REDIRECT [[Template:Always substitute]]
{{Redirect category shell|
{{R from move}}
{{R from alternative name}}
{{R from template shortcut}}
}}
h8a8l7037j484rw6db641a909aq5ttq
Switch
0
69228
737591
662772
2026-04-11T14:13:33Z
Nacaru
54746
Añadiendo plantilla de borrado mediante [[WP:Twinkle Lite|Twinkle Lite]]
737591
wikitext
text/x-wiki
{{destruir|g6|g7}}
Nintendo Switch 2 delayed in US. Trump did that!
kv4wk1wvi9laxaijjua8xgn86vqricz
Translate test
0
80899
737599
581312
2026-04-11T16:15:14Z
Tanbiruzzaman
57483
Test
737599
wikitext
text/x-wiki
<languages/>
{{formatnum|10}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|<translate><!--T:1-->
MediaWiki documentation</translate>]]
<translate>
<!--T:2-->
This is a '''technical manual for the MediaWiki software'''.</translate>
<translate>
<!--T:3-->
It contains information for '''developers''' and '''system administrators''' on '''installing''', '''managing''' and '''developing''' for the MediaWiki software.
<!--T:4-->
This manual is '''not for end users''' of MediaWiki.</translate>
<translate>
<!--T:5-->
If you are looking for '''documentation to help you use MediaWiki, read the [[<tvar|help>Special:MyLanguage/Help:Contents</>|MediaWiki Handbook]].'''
==Main sections== <!--T:6-->
</translate>
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<translate>
=== For system administrators === <!--T:7-->
</translate>
; [[Special:MyLanguage/Manual:Installation guide|<translate><!--T:8-->
Installation</translate>]]
: <translate><!--T:9-->
Guide to setting up a new MediaWiki installation.</translate>
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|<translate><!--T:10-->
Installing</translate>]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|<translate><!--T:11-->
Initial configuration</translate>]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|<translate><!--T:12-->
Alphabetical list of settings</translate>]] | [[Special:MyLanguage/Manual:Configuration settings|<translate><!--T:13-->
Settings listed by function</translate>]]
; {{ll|Manual:System administration|nsp=0}}
: <translate><!--T:14-->
Guide to do administrative tasks on your wiki.</translate>
: [[Special:MyLanguage/Manual:Backing up a wiki|<translate><!--T:15-->
Backing up</translate>]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: <translate><!--T:16-->
Guide to upgrade your MediaWiki installation.</translate>
''<translate><!--T:17-->
More on <tvar|hub>{{ll|Sysadmin hub}}</>.</translate>''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<translate>
=== For developers === <!--T:18-->
</translate>
; <translate><!--T:19-->
Architecture</translate>
: <translate><!--T:20-->
An overview of the key parts of MediaWiki's source code.</translate>
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ <translate><!--T:21-->
Doxygen-generated documentation</translate>]
; {{ll|Manual:Database layout|nsp=0}}
: <translate><!--T:22-->
Details about the database architecture used by MediaWiki.</translate>
: <translate><!--T:23-->
<tvar|mysql>{{ll|Manual:MySQL|nsp=0}}</> | <tvar|pgsql>{{ll|Manual:PostgreSQL|nsp=0}}</> | <tvar|sqlite>{{ll|Manual:SQLite|nsp=0}}</> | <tvar|db2>{{ll|Manual:IBM DB2|nsp=0}}</> engines</translate>
; {{ll|Manual:Developing extensions|nsp=0}}
: <translate><!--T:24-->
An overview of the ways to create a new MediaWiki extension.</translate>
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|<translate><!--T:25-->
Tag</translate>]] | [[Special:MyLanguage/Manual:Special pages|<translate><!--T:26-->
Special page</translate>]] | {{ll|Manual:Skins|nsp=0}}
; <translate><!--T:27-->
Web access</translate>
: <translate><!--T:28-->
Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.</translate>
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''<translate><!--T:29-->
More on <tvar|hub>{{ll|Developer hub}}</>.</translate>''
|}
<translate>
=== Others === <!--T:30-->
</translate>
; [[Special:MyLanguage/Manual:FAQ|<translate><!--T:31-->
MediaWiki FAQ</translate>]]
: <translate><!--T:32-->
Frequently asked questions about MediaWiki.</translate>
<translate>
== Browsing the manual == <!--T:33-->
<!--T:34-->
There are multiple ways to browse through the documentation.</translate>
<translate>
<!--T:35-->
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
</translate>
* [[Special:Allpages/Manual:]] - <translate><!--T:36-->
An automatically generated list of all pages in the Manual: namespace.</translate>
* [[:Category:Manual]] - <translate><!--T:37-->
the top-level Manual category</translate>
<translate>
== Improving the manual == <!--T:38-->
<!--T:39-->
* There are still a lot of holes in this manual!</translate> <translate><!--T:40-->
See the [[<tvar|todo>Special:MyLanguage/Manual:Contents/To do</>|'to do' page]] for details.</translate>
<translate>
<!--T:41-->
* There is still content on <tvar|url>http://meta.wikimedia.org</> which may need to be migrated.</translate> <translate><!--T:42-->
If you can't find information on a particular issue in this documentation, please visit <tvar|faq>[[meta:MediaWiki_FAQ]]</> and <tvar|help>[[meta:Help:Contents]]</>.</translate>
<translate>
<!--T:43-->
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.</translate>
<translate>
<!--T:44-->
* See also <tvar|issues>[[Project:Current issues]]</>.
== MediaWiki Virtual Library == <!--T:45-->
<!--T:46-->
* '''[[<tvar|cat>:Category:MediaWiki Virtual Library (MVL)</>|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
</translate>
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
n8fm45wlp6zm20govuiaagrcd2361a1
737606
737599
2026-04-11T16:19:45Z
Tanbiruzzaman
57483
737606
wikitext
text/x-wiki
<languages/>
{{formatnum|10|{{SUBPAGENAME}}}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|<translate><!--T:1-->
MediaWiki documentation</translate>]]
<translate>
<!--T:2-->
This is a '''technical manual for the MediaWiki software'''.</translate>
<translate>
<!--T:3-->
It contains information for '''developers''' and '''system administrators''' on '''installing''', '''managing''' and '''developing''' for the MediaWiki software.
<!--T:4-->
This manual is '''not for end users''' of MediaWiki.</translate>
<translate>
<!--T:5-->
If you are looking for '''documentation to help you use MediaWiki, read the [[<tvar|help>Special:MyLanguage/Help:Contents</>|MediaWiki Handbook]].'''
==Main sections== <!--T:6-->
</translate>
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<translate>
=== For system administrators === <!--T:7-->
</translate>
; [[Special:MyLanguage/Manual:Installation guide|<translate><!--T:8-->
Installation</translate>]]
: <translate><!--T:9-->
Guide to setting up a new MediaWiki installation.</translate>
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|<translate><!--T:10-->
Installing</translate>]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|<translate><!--T:11-->
Initial configuration</translate>]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|<translate><!--T:12-->
Alphabetical list of settings</translate>]] | [[Special:MyLanguage/Manual:Configuration settings|<translate><!--T:13-->
Settings listed by function</translate>]]
; {{ll|Manual:System administration|nsp=0}}
: <translate><!--T:14-->
Guide to do administrative tasks on your wiki.</translate>
: [[Special:MyLanguage/Manual:Backing up a wiki|<translate><!--T:15-->
Backing up</translate>]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: <translate><!--T:16-->
Guide to upgrade your MediaWiki installation.</translate>
''<translate><!--T:17-->
More on <tvar|hub>{{ll|Sysadmin hub}}</>.</translate>''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<translate>
=== For developers === <!--T:18-->
</translate>
; <translate><!--T:19-->
Architecture</translate>
: <translate><!--T:20-->
An overview of the key parts of MediaWiki's source code.</translate>
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ <translate><!--T:21-->
Doxygen-generated documentation</translate>]
; {{ll|Manual:Database layout|nsp=0}}
: <translate><!--T:22-->
Details about the database architecture used by MediaWiki.</translate>
: <translate><!--T:23-->
<tvar|mysql>{{ll|Manual:MySQL|nsp=0}}</> | <tvar|pgsql>{{ll|Manual:PostgreSQL|nsp=0}}</> | <tvar|sqlite>{{ll|Manual:SQLite|nsp=0}}</> | <tvar|db2>{{ll|Manual:IBM DB2|nsp=0}}</> engines</translate>
; {{ll|Manual:Developing extensions|nsp=0}}
: <translate><!--T:24-->
An overview of the ways to create a new MediaWiki extension.</translate>
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|<translate><!--T:25-->
Tag</translate>]] | [[Special:MyLanguage/Manual:Special pages|<translate><!--T:26-->
Special page</translate>]] | {{ll|Manual:Skins|nsp=0}}
; <translate><!--T:27-->
Web access</translate>
: <translate><!--T:28-->
Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.</translate>
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''<translate><!--T:29-->
More on <tvar|hub>{{ll|Developer hub}}</>.</translate>''
|}
<translate>
=== Others === <!--T:30-->
</translate>
; [[Special:MyLanguage/Manual:FAQ|<translate><!--T:31-->
MediaWiki FAQ</translate>]]
: <translate><!--T:32-->
Frequently asked questions about MediaWiki.</translate>
<translate>
== Browsing the manual == <!--T:33-->
<!--T:34-->
There are multiple ways to browse through the documentation.</translate>
<translate>
<!--T:35-->
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
</translate>
* [[Special:Allpages/Manual:]] - <translate><!--T:36-->
An automatically generated list of all pages in the Manual: namespace.</translate>
* [[:Category:Manual]] - <translate><!--T:37-->
the top-level Manual category</translate>
<translate>
== Improving the manual == <!--T:38-->
<!--T:39-->
* There are still a lot of holes in this manual!</translate> <translate><!--T:40-->
See the [[<tvar|todo>Special:MyLanguage/Manual:Contents/To do</>|'to do' page]] for details.</translate>
<translate>
<!--T:41-->
* There is still content on <tvar|url>http://meta.wikimedia.org</> which may need to be migrated.</translate> <translate><!--T:42-->
If you can't find information on a particular issue in this documentation, please visit <tvar|faq>[[meta:MediaWiki_FAQ]]</> and <tvar|help>[[meta:Help:Contents]]</>.</translate>
<translate>
<!--T:43-->
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.</translate>
<translate>
<!--T:44-->
* See also <tvar|issues>[[Project:Current issues]]</>.
== MediaWiki Virtual Library == <!--T:45-->
<!--T:46-->
* '''[[<tvar|cat>:Category:MediaWiki Virtual Library (MVL)</>|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
</translate>
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
ecjr1v06lldx8783cqr4vbuw5rs1ajl
737613
737606
2026-04-11T16:25:13Z
Tanbiruzzaman
57483
737613
wikitext
text/x-wiki
<languages/>
{{formatnum|10|{{PAGELANGUAGE}}}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|<translate><!--T:1-->
MediaWiki documentation</translate>]]
<translate>
<!--T:2-->
This is a '''technical manual for the MediaWiki software'''.</translate>
<translate>
<!--T:3-->
It contains information for '''developers''' and '''system administrators''' on '''installing''', '''managing''' and '''developing''' for the MediaWiki software.
<!--T:4-->
This manual is '''not for end users''' of MediaWiki.</translate>
<translate>
<!--T:5-->
If you are looking for '''documentation to help you use MediaWiki, read the [[<tvar|help>Special:MyLanguage/Help:Contents</>|MediaWiki Handbook]].'''
==Main sections== <!--T:6-->
</translate>
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<translate>
=== For system administrators === <!--T:7-->
</translate>
; [[Special:MyLanguage/Manual:Installation guide|<translate><!--T:8-->
Installation</translate>]]
: <translate><!--T:9-->
Guide to setting up a new MediaWiki installation.</translate>
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|<translate><!--T:10-->
Installing</translate>]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|<translate><!--T:11-->
Initial configuration</translate>]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|<translate><!--T:12-->
Alphabetical list of settings</translate>]] | [[Special:MyLanguage/Manual:Configuration settings|<translate><!--T:13-->
Settings listed by function</translate>]]
; {{ll|Manual:System administration|nsp=0}}
: <translate><!--T:14-->
Guide to do administrative tasks on your wiki.</translate>
: [[Special:MyLanguage/Manual:Backing up a wiki|<translate><!--T:15-->
Backing up</translate>]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: <translate><!--T:16-->
Guide to upgrade your MediaWiki installation.</translate>
''<translate><!--T:17-->
More on <tvar|hub>{{ll|Sysadmin hub}}</>.</translate>''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<translate>
=== For developers === <!--T:18-->
</translate>
; <translate><!--T:19-->
Architecture</translate>
: <translate><!--T:20-->
An overview of the key parts of MediaWiki's source code.</translate>
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ <translate><!--T:21-->
Doxygen-generated documentation</translate>]
; {{ll|Manual:Database layout|nsp=0}}
: <translate><!--T:22-->
Details about the database architecture used by MediaWiki.</translate>
: <translate><!--T:23-->
<tvar|mysql>{{ll|Manual:MySQL|nsp=0}}</> | <tvar|pgsql>{{ll|Manual:PostgreSQL|nsp=0}}</> | <tvar|sqlite>{{ll|Manual:SQLite|nsp=0}}</> | <tvar|db2>{{ll|Manual:IBM DB2|nsp=0}}</> engines</translate>
; {{ll|Manual:Developing extensions|nsp=0}}
: <translate><!--T:24-->
An overview of the ways to create a new MediaWiki extension.</translate>
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|<translate><!--T:25-->
Tag</translate>]] | [[Special:MyLanguage/Manual:Special pages|<translate><!--T:26-->
Special page</translate>]] | {{ll|Manual:Skins|nsp=0}}
; <translate><!--T:27-->
Web access</translate>
: <translate><!--T:28-->
Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.</translate>
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''<translate><!--T:29-->
More on <tvar|hub>{{ll|Developer hub}}</>.</translate>''
|}
<translate>
=== Others === <!--T:30-->
</translate>
; [[Special:MyLanguage/Manual:FAQ|<translate><!--T:31-->
MediaWiki FAQ</translate>]]
: <translate><!--T:32-->
Frequently asked questions about MediaWiki.</translate>
<translate>
== Browsing the manual == <!--T:33-->
<!--T:34-->
There are multiple ways to browse through the documentation.</translate>
<translate>
<!--T:35-->
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
</translate>
* [[Special:Allpages/Manual:]] - <translate><!--T:36-->
An automatically generated list of all pages in the Manual: namespace.</translate>
* [[:Category:Manual]] - <translate><!--T:37-->
the top-level Manual category</translate>
<translate>
== Improving the manual == <!--T:38-->
<!--T:39-->
* There are still a lot of holes in this manual!</translate> <translate><!--T:40-->
See the [[<tvar|todo>Special:MyLanguage/Manual:Contents/To do</>|'to do' page]] for details.</translate>
<translate>
<!--T:41-->
* There is still content on <tvar|url>http://meta.wikimedia.org</> which may need to be migrated.</translate> <translate><!--T:42-->
If you can't find information on a particular issue in this documentation, please visit <tvar|faq>[[meta:MediaWiki_FAQ]]</> and <tvar|help>[[meta:Help:Contents]]</>.</translate>
<translate>
<!--T:43-->
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.</translate>
<translate>
<!--T:44-->
* See also <tvar|issues>[[Project:Current issues]]</>.
== MediaWiki Virtual Library == <!--T:45-->
<!--T:46-->
* '''[[<tvar|cat>:Category:MediaWiki Virtual Library (MVL)</>|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
</translate>
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
s15881azbdwrlg4r6cx9iilfwu3nl9g
Translate test/bn
0
80903
737602
721842
2026-04-11T16:15:31Z
FuzzyBot
18251
Updating to match new version of source page
737602
wikitext
text/x-wiki
<languages/>
{{formatnum|10}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|<div class="mw-translate-fuzzy">
test
</div>]]
<div lang="en" dir="ltr" class="mw-content-ltr">
This is a '''technical manual for the MediaWiki software'''.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
It contains information for '''developers''' and '''system administrators''' on '''installing''', '''managing''' and '''developing''' for the MediaWiki software.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This manual is '''not for end users''' of MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
If you are looking for '''documentation to help you use MediaWiki, read the [[Special:MyLanguage/Help:Contents|MediaWiki Handbook]].'''
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
==Main sections==
</div>
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For system administrators ===
</div>
; [[Special:MyLanguage/Manual:Installation guide|<div lang="en" dir="ltr" class="mw-content-ltr">
Installation
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to setting up a new MediaWiki installation.
</div>
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Installing
</div>]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Initial configuration
</div>]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|<div lang="en" dir="ltr" class="mw-content-ltr">
Alphabetical list of settings
</div>]] | [[Special:MyLanguage/Manual:Configuration settings|<div lang="en" dir="ltr" class="mw-content-ltr">
Settings listed by function
</div>]]
; {{ll|Manual:System administration|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to do administrative tasks on your wiki.
</div>
: [[Special:MyLanguage/Manual:Backing up a wiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Backing up
</div>]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to upgrade your MediaWiki installation.
</div>
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Sysadmin hub}}.
</div>''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For developers ===
</div>
; <div lang="en" dir="ltr" class="mw-content-ltr">
Architecture
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the key parts of MediaWiki's source code.
</div>
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ <div lang="en" dir="ltr" class="mw-content-ltr">
Doxygen-generated documentation
</div>]
; {{ll|Manual:Database layout|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about the database architecture used by MediaWiki.
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
{{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
</div>
; {{ll|Manual:Developing extensions|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the ways to create a new MediaWiki extension.
</div>
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|<div lang="en" dir="ltr" class="mw-content-ltr">
Tag
</div>]] | [[Special:MyLanguage/Manual:Special pages|<div lang="en" dir="ltr" class="mw-content-ltr">
Special page
</div>]] | {{ll|Manual:Skins|nsp=0}}
; <div lang="en" dir="ltr" class="mw-content-ltr">
Web access
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
</div>
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Developer hub}}.
</div>''
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Others ===
</div>
; [[Special:MyLanguage/Manual:FAQ|<div lang="en" dir="ltr" class="mw-content-ltr">
MediaWiki FAQ
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Frequently asked questions about MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Browsing the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
There are multiple ways to browse through the documentation.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
</div>
* [[Special:Allpages/Manual:]] - <div lang="en" dir="ltr" class="mw-content-ltr">
An automatically generated list of all pages in the Manual: namespace.
</div>
* [[:Category:Manual]] - <div lang="en" dir="ltr" class="mw-content-ltr">
the top-level Manual category
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Improving the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There are still a lot of holes in this manual!
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
See the [[Special:MyLanguage/Manual:Contents/To do|'to do' page]] for details.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There is still content on http://meta.wikimedia.org which may need to be migrated.
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
If you can't find information on a particular issue in this documentation, please visit [[meta:MediaWiki_FAQ]] and [[meta:Help:Contents]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* See also [[Project:Current issues]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== MediaWiki Virtual Library ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
</div>
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
fwchxro19gy6z0y5ictptyu8l43n08g
737608
737602
2026-04-11T16:20:03Z
FuzzyBot
18251
Updating to match new version of source page
737608
wikitext
text/x-wiki
<languages/>
{{formatnum|10|{{SUBPAGENAME}}}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|<div class="mw-translate-fuzzy">
test
</div>]]
<div lang="en" dir="ltr" class="mw-content-ltr">
This is a '''technical manual for the MediaWiki software'''.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
It contains information for '''developers''' and '''system administrators''' on '''installing''', '''managing''' and '''developing''' for the MediaWiki software.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This manual is '''not for end users''' of MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
If you are looking for '''documentation to help you use MediaWiki, read the [[Special:MyLanguage/Help:Contents|MediaWiki Handbook]].'''
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
==Main sections==
</div>
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For system administrators ===
</div>
; [[Special:MyLanguage/Manual:Installation guide|<div lang="en" dir="ltr" class="mw-content-ltr">
Installation
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to setting up a new MediaWiki installation.
</div>
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Installing
</div>]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Initial configuration
</div>]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|<div lang="en" dir="ltr" class="mw-content-ltr">
Alphabetical list of settings
</div>]] | [[Special:MyLanguage/Manual:Configuration settings|<div lang="en" dir="ltr" class="mw-content-ltr">
Settings listed by function
</div>]]
; {{ll|Manual:System administration|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to do administrative tasks on your wiki.
</div>
: [[Special:MyLanguage/Manual:Backing up a wiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Backing up
</div>]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to upgrade your MediaWiki installation.
</div>
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Sysadmin hub}}.
</div>''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For developers ===
</div>
; <div lang="en" dir="ltr" class="mw-content-ltr">
Architecture
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the key parts of MediaWiki's source code.
</div>
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ <div lang="en" dir="ltr" class="mw-content-ltr">
Doxygen-generated documentation
</div>]
; {{ll|Manual:Database layout|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about the database architecture used by MediaWiki.
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
{{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
</div>
; {{ll|Manual:Developing extensions|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the ways to create a new MediaWiki extension.
</div>
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|<div lang="en" dir="ltr" class="mw-content-ltr">
Tag
</div>]] | [[Special:MyLanguage/Manual:Special pages|<div lang="en" dir="ltr" class="mw-content-ltr">
Special page
</div>]] | {{ll|Manual:Skins|nsp=0}}
; <div lang="en" dir="ltr" class="mw-content-ltr">
Web access
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
</div>
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Developer hub}}.
</div>''
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Others ===
</div>
; [[Special:MyLanguage/Manual:FAQ|<div lang="en" dir="ltr" class="mw-content-ltr">
MediaWiki FAQ
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Frequently asked questions about MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Browsing the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
There are multiple ways to browse through the documentation.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
</div>
* [[Special:Allpages/Manual:]] - <div lang="en" dir="ltr" class="mw-content-ltr">
An automatically generated list of all pages in the Manual: namespace.
</div>
* [[:Category:Manual]] - <div lang="en" dir="ltr" class="mw-content-ltr">
the top-level Manual category
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Improving the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There are still a lot of holes in this manual!
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
See the [[Special:MyLanguage/Manual:Contents/To do|'to do' page]] for details.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There is still content on http://meta.wikimedia.org which may need to be migrated.
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
If you can't find information on a particular issue in this documentation, please visit [[meta:MediaWiki_FAQ]] and [[meta:Help:Contents]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* See also [[Project:Current issues]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== MediaWiki Virtual Library ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
</div>
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
debqij5pa7eroh031299khhjzyagu8x
737616
737608
2026-04-11T16:25:28Z
FuzzyBot
18251
Updating to match new version of source page
737616
wikitext
text/x-wiki
<languages/>
{{formatnum|10|{{PAGELANGUAGE}}}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|<div class="mw-translate-fuzzy">
test
</div>]]
<div lang="en" dir="ltr" class="mw-content-ltr">
This is a '''technical manual for the MediaWiki software'''.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
It contains information for '''developers''' and '''system administrators''' on '''installing''', '''managing''' and '''developing''' for the MediaWiki software.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This manual is '''not for end users''' of MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
If you are looking for '''documentation to help you use MediaWiki, read the [[Special:MyLanguage/Help:Contents|MediaWiki Handbook]].'''
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
==Main sections==
</div>
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For system administrators ===
</div>
; [[Special:MyLanguage/Manual:Installation guide|<div lang="en" dir="ltr" class="mw-content-ltr">
Installation
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to setting up a new MediaWiki installation.
</div>
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Installing
</div>]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Initial configuration
</div>]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|<div lang="en" dir="ltr" class="mw-content-ltr">
Alphabetical list of settings
</div>]] | [[Special:MyLanguage/Manual:Configuration settings|<div lang="en" dir="ltr" class="mw-content-ltr">
Settings listed by function
</div>]]
; {{ll|Manual:System administration|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to do administrative tasks on your wiki.
</div>
: [[Special:MyLanguage/Manual:Backing up a wiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Backing up
</div>]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to upgrade your MediaWiki installation.
</div>
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Sysadmin hub}}.
</div>''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For developers ===
</div>
; <div lang="en" dir="ltr" class="mw-content-ltr">
Architecture
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the key parts of MediaWiki's source code.
</div>
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ <div lang="en" dir="ltr" class="mw-content-ltr">
Doxygen-generated documentation
</div>]
; {{ll|Manual:Database layout|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about the database architecture used by MediaWiki.
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
{{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
</div>
; {{ll|Manual:Developing extensions|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the ways to create a new MediaWiki extension.
</div>
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|<div lang="en" dir="ltr" class="mw-content-ltr">
Tag
</div>]] | [[Special:MyLanguage/Manual:Special pages|<div lang="en" dir="ltr" class="mw-content-ltr">
Special page
</div>]] | {{ll|Manual:Skins|nsp=0}}
; <div lang="en" dir="ltr" class="mw-content-ltr">
Web access
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
</div>
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Developer hub}}.
</div>''
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Others ===
</div>
; [[Special:MyLanguage/Manual:FAQ|<div lang="en" dir="ltr" class="mw-content-ltr">
MediaWiki FAQ
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Frequently asked questions about MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Browsing the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
There are multiple ways to browse through the documentation.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
</div>
* [[Special:Allpages/Manual:]] - <div lang="en" dir="ltr" class="mw-content-ltr">
An automatically generated list of all pages in the Manual: namespace.
</div>
* [[:Category:Manual]] - <div lang="en" dir="ltr" class="mw-content-ltr">
the top-level Manual category
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Improving the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There are still a lot of holes in this manual!
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
See the [[Special:MyLanguage/Manual:Contents/To do|'to do' page]] for details.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There is still content on http://meta.wikimedia.org which may need to be migrated.
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
If you can't find information on a particular issue in this documentation, please visit [[meta:MediaWiki_FAQ]] and [[meta:Help:Contents]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* See also [[Project:Current issues]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== MediaWiki Virtual Library ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
</div>
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
8z9xcpzavjx3bivi6xnnd5jf5yczmia
Translate test/en
0
85154
737600
721843
2026-04-11T16:15:31Z
FuzzyBot
18251
Updating to match new version of source page
737600
wikitext
text/x-wiki
<languages/>
{{formatnum|10}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|MediaWiki documentation]]
This is a '''technical manual for the MediaWiki software'''.
It contains information for '''developers''' and '''system administrators''' on '''installing''', '''managing''' and '''developing''' for the MediaWiki software.
This manual is '''not for end users''' of MediaWiki.
If you are looking for '''documentation to help you use MediaWiki, read the [[Special:MyLanguage/Help:Contents|MediaWiki Handbook]].'''
==Main sections==
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
=== Others ===
; [[Special:MyLanguage/Manual:FAQ|MediaWiki FAQ]]
: Frequently asked questions about MediaWiki.
== Browsing the manual ==
There are multiple ways to browse through the documentation.
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
* [[Special:Allpages/Manual:]] - An automatically generated list of all pages in the Manual: namespace.
* [[:Category:Manual]] - the top-level Manual category
== Improving the manual ==
* There are still a lot of holes in this manual! See the [[Special:MyLanguage/Manual:Contents/To do|'to do' page]] for details.
* There is still content on http://meta.wikimedia.org which may need to be migrated. If you can't find information on a particular issue in this documentation, please visit [[meta:MediaWiki_FAQ]] and [[meta:Help:Contents]].
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.
* See also [[Project:Current issues]].
== MediaWiki Virtual Library ==
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
d0dkqa3ost000ffdmgrmel5xyjck9bk
737609
737600
2026-04-11T16:20:03Z
FuzzyBot
18251
Updating to match new version of source page
737609
wikitext
text/x-wiki
<languages/>
{{formatnum|10|{{SUBPAGENAME}}}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|MediaWiki documentation]]
This is a '''technical manual for the MediaWiki software'''.
It contains information for '''developers''' and '''system administrators''' on '''installing''', '''managing''' and '''developing''' for the MediaWiki software.
This manual is '''not for end users''' of MediaWiki.
If you are looking for '''documentation to help you use MediaWiki, read the [[Special:MyLanguage/Help:Contents|MediaWiki Handbook]].'''
==Main sections==
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
=== Others ===
; [[Special:MyLanguage/Manual:FAQ|MediaWiki FAQ]]
: Frequently asked questions about MediaWiki.
== Browsing the manual ==
There are multiple ways to browse through the documentation.
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
* [[Special:Allpages/Manual:]] - An automatically generated list of all pages in the Manual: namespace.
* [[:Category:Manual]] - the top-level Manual category
== Improving the manual ==
* There are still a lot of holes in this manual! See the [[Special:MyLanguage/Manual:Contents/To do|'to do' page]] for details.
* There is still content on http://meta.wikimedia.org which may need to be migrated. If you can't find information on a particular issue in this documentation, please visit [[meta:MediaWiki_FAQ]] and [[meta:Help:Contents]].
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.
* See also [[Project:Current issues]].
== MediaWiki Virtual Library ==
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
dxo0f48oqevn8wyr4f2yl6da7uwf8ek
737615
737609
2026-04-11T16:25:28Z
FuzzyBot
18251
Updating to match new version of source page
737615
wikitext
text/x-wiki
<languages/>
{{formatnum|10|{{PAGELANGUAGE}}}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|MediaWiki documentation]]
This is a '''technical manual for the MediaWiki software'''.
It contains information for '''developers''' and '''system administrators''' on '''installing''', '''managing''' and '''developing''' for the MediaWiki software.
This manual is '''not for end users''' of MediaWiki.
If you are looking for '''documentation to help you use MediaWiki, read the [[Special:MyLanguage/Help:Contents|MediaWiki Handbook]].'''
==Main sections==
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
=== Others ===
; [[Special:MyLanguage/Manual:FAQ|MediaWiki FAQ]]
: Frequently asked questions about MediaWiki.
== Browsing the manual ==
There are multiple ways to browse through the documentation.
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
* [[Special:Allpages/Manual:]] - An automatically generated list of all pages in the Manual: namespace.
* [[:Category:Manual]] - the top-level Manual category
== Improving the manual ==
* There are still a lot of holes in this manual! See the [[Special:MyLanguage/Manual:Contents/To do|'to do' page]] for details.
* There is still content on http://meta.wikimedia.org which may need to be migrated. If you can't find information on a particular issue in this documentation, please visit [[meta:MediaWiki_FAQ]] and [[meta:Help:Contents]].
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.
* See also [[Project:Current issues]].
== MediaWiki Virtual Library ==
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
nxoiv6yqklcpcpfqca7oshu4huob6z4
Translate test/uk
0
85207
737605
721847
2026-04-11T16:15:33Z
FuzzyBot
18251
Updating to match new version of source page
737605
wikitext
text/x-wiki
<languages/>
{{formatnum|10}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|Документація MediaWiki]]
<div lang="en" dir="ltr" class="mw-content-ltr">
This is a '''technical manual for the MediaWiki software'''.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
It contains information for '''developers''' and '''system administrators''' on '''installing''', '''managing''' and '''developing''' for the MediaWiki software.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This manual is '''not for end users''' of MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
If you are looking for '''documentation to help you use MediaWiki, read the [[Special:MyLanguage/Help:Contents|MediaWiki Handbook]].'''
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
==Main sections==
</div>
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For system administrators ===
</div>
; [[Special:MyLanguage/Manual:Installation guide|<div lang="en" dir="ltr" class="mw-content-ltr">
Installation
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to setting up a new MediaWiki installation.
</div>
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Installing
</div>]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Initial configuration
</div>]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|<div lang="en" dir="ltr" class="mw-content-ltr">
Alphabetical list of settings
</div>]] | [[Special:MyLanguage/Manual:Configuration settings|<div lang="en" dir="ltr" class="mw-content-ltr">
Settings listed by function
</div>]]
; {{ll|Manual:System administration|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to do administrative tasks on your wiki.
</div>
: [[Special:MyLanguage/Manual:Backing up a wiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Backing up
</div>]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to upgrade your MediaWiki installation.
</div>
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Sysadmin hub}}.
</div>''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For developers ===
</div>
; <div lang="en" dir="ltr" class="mw-content-ltr">
Architecture
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the key parts of MediaWiki's source code.
</div>
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ <div lang="en" dir="ltr" class="mw-content-ltr">
Doxygen-generated documentation
</div>]
; {{ll|Manual:Database layout|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about the database architecture used by MediaWiki.
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
{{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
</div>
; {{ll|Manual:Developing extensions|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the ways to create a new MediaWiki extension.
</div>
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|<div lang="en" dir="ltr" class="mw-content-ltr">
Tag
</div>]] | [[Special:MyLanguage/Manual:Special pages|<div lang="en" dir="ltr" class="mw-content-ltr">
Special page
</div>]] | {{ll|Manual:Skins|nsp=0}}
; <div lang="en" dir="ltr" class="mw-content-ltr">
Web access
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
</div>
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Developer hub}}.
</div>''
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Others ===
</div>
; [[Special:MyLanguage/Manual:FAQ|<div lang="en" dir="ltr" class="mw-content-ltr">
MediaWiki FAQ
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Frequently asked questions about MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Browsing the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
There are multiple ways to browse through the documentation.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
</div>
* [[Special:Allpages/Manual:]] - <div lang="en" dir="ltr" class="mw-content-ltr">
An automatically generated list of all pages in the Manual: namespace.
</div>
* [[:Category:Manual]] - <div lang="en" dir="ltr" class="mw-content-ltr">
the top-level Manual category
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Improving the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There are still a lot of holes in this manual!
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
See the [[Special:MyLanguage/Manual:Contents/To do|'to do' page]] for details.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There is still content on http://meta.wikimedia.org which may need to be migrated.
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
If you can't find information on a particular issue in this documentation, please visit [[meta:MediaWiki_FAQ]] and [[meta:Help:Contents]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* See also [[Project:Current issues]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== MediaWiki Virtual Library ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
</div>
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
r9te3l7nxhzb82uk5iq749gp543zz4b
737612
737605
2026-04-11T16:20:05Z
FuzzyBot
18251
Updating to match new version of source page
737612
wikitext
text/x-wiki
<languages/>
{{formatnum|10|{{SUBPAGENAME}}}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|Документація MediaWiki]]
<div lang="en" dir="ltr" class="mw-content-ltr">
This is a '''technical manual for the MediaWiki software'''.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
It contains information for '''developers''' and '''system administrators''' on '''installing''', '''managing''' and '''developing''' for the MediaWiki software.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This manual is '''not for end users''' of MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
If you are looking for '''documentation to help you use MediaWiki, read the [[Special:MyLanguage/Help:Contents|MediaWiki Handbook]].'''
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
==Main sections==
</div>
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For system administrators ===
</div>
; [[Special:MyLanguage/Manual:Installation guide|<div lang="en" dir="ltr" class="mw-content-ltr">
Installation
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to setting up a new MediaWiki installation.
</div>
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Installing
</div>]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Initial configuration
</div>]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|<div lang="en" dir="ltr" class="mw-content-ltr">
Alphabetical list of settings
</div>]] | [[Special:MyLanguage/Manual:Configuration settings|<div lang="en" dir="ltr" class="mw-content-ltr">
Settings listed by function
</div>]]
; {{ll|Manual:System administration|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to do administrative tasks on your wiki.
</div>
: [[Special:MyLanguage/Manual:Backing up a wiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Backing up
</div>]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to upgrade your MediaWiki installation.
</div>
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Sysadmin hub}}.
</div>''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For developers ===
</div>
; <div lang="en" dir="ltr" class="mw-content-ltr">
Architecture
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the key parts of MediaWiki's source code.
</div>
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ <div lang="en" dir="ltr" class="mw-content-ltr">
Doxygen-generated documentation
</div>]
; {{ll|Manual:Database layout|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about the database architecture used by MediaWiki.
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
{{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
</div>
; {{ll|Manual:Developing extensions|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the ways to create a new MediaWiki extension.
</div>
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|<div lang="en" dir="ltr" class="mw-content-ltr">
Tag
</div>]] | [[Special:MyLanguage/Manual:Special pages|<div lang="en" dir="ltr" class="mw-content-ltr">
Special page
</div>]] | {{ll|Manual:Skins|nsp=0}}
; <div lang="en" dir="ltr" class="mw-content-ltr">
Web access
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
</div>
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Developer hub}}.
</div>''
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Others ===
</div>
; [[Special:MyLanguage/Manual:FAQ|<div lang="en" dir="ltr" class="mw-content-ltr">
MediaWiki FAQ
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Frequently asked questions about MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Browsing the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
There are multiple ways to browse through the documentation.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
</div>
* [[Special:Allpages/Manual:]] - <div lang="en" dir="ltr" class="mw-content-ltr">
An automatically generated list of all pages in the Manual: namespace.
</div>
* [[:Category:Manual]] - <div lang="en" dir="ltr" class="mw-content-ltr">
the top-level Manual category
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Improving the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There are still a lot of holes in this manual!
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
See the [[Special:MyLanguage/Manual:Contents/To do|'to do' page]] for details.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There is still content on http://meta.wikimedia.org which may need to be migrated.
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
If you can't find information on a particular issue in this documentation, please visit [[meta:MediaWiki_FAQ]] and [[meta:Help:Contents]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* See also [[Project:Current issues]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== MediaWiki Virtual Library ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
</div>
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
fli16tmd6c1khboo24ucq9rro3f6gpn
737619
737612
2026-04-11T16:25:30Z
FuzzyBot
18251
Updating to match new version of source page
737619
wikitext
text/x-wiki
<languages/>
{{formatnum|10|{{PAGELANGUAGE}}}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|Документація MediaWiki]]
<div lang="en" dir="ltr" class="mw-content-ltr">
This is a '''technical manual for the MediaWiki software'''.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
It contains information for '''developers''' and '''system administrators''' on '''installing''', '''managing''' and '''developing''' for the MediaWiki software.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This manual is '''not for end users''' of MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
If you are looking for '''documentation to help you use MediaWiki, read the [[Special:MyLanguage/Help:Contents|MediaWiki Handbook]].'''
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
==Main sections==
</div>
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For system administrators ===
</div>
; [[Special:MyLanguage/Manual:Installation guide|<div lang="en" dir="ltr" class="mw-content-ltr">
Installation
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to setting up a new MediaWiki installation.
</div>
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Installing
</div>]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Initial configuration
</div>]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|<div lang="en" dir="ltr" class="mw-content-ltr">
Alphabetical list of settings
</div>]] | [[Special:MyLanguage/Manual:Configuration settings|<div lang="en" dir="ltr" class="mw-content-ltr">
Settings listed by function
</div>]]
; {{ll|Manual:System administration|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to do administrative tasks on your wiki.
</div>
: [[Special:MyLanguage/Manual:Backing up a wiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Backing up
</div>]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to upgrade your MediaWiki installation.
</div>
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Sysadmin hub}}.
</div>''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For developers ===
</div>
; <div lang="en" dir="ltr" class="mw-content-ltr">
Architecture
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the key parts of MediaWiki's source code.
</div>
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ <div lang="en" dir="ltr" class="mw-content-ltr">
Doxygen-generated documentation
</div>]
; {{ll|Manual:Database layout|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about the database architecture used by MediaWiki.
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
{{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
</div>
; {{ll|Manual:Developing extensions|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the ways to create a new MediaWiki extension.
</div>
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|<div lang="en" dir="ltr" class="mw-content-ltr">
Tag
</div>]] | [[Special:MyLanguage/Manual:Special pages|<div lang="en" dir="ltr" class="mw-content-ltr">
Special page
</div>]] | {{ll|Manual:Skins|nsp=0}}
; <div lang="en" dir="ltr" class="mw-content-ltr">
Web access
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
</div>
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Developer hub}}.
</div>''
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Others ===
</div>
; [[Special:MyLanguage/Manual:FAQ|<div lang="en" dir="ltr" class="mw-content-ltr">
MediaWiki FAQ
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Frequently asked questions about MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Browsing the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
There are multiple ways to browse through the documentation.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
</div>
* [[Special:Allpages/Manual:]] - <div lang="en" dir="ltr" class="mw-content-ltr">
An automatically generated list of all pages in the Manual: namespace.
</div>
* [[:Category:Manual]] - <div lang="en" dir="ltr" class="mw-content-ltr">
the top-level Manual category
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Improving the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There are still a lot of holes in this manual!
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
See the [[Special:MyLanguage/Manual:Contents/To do|'to do' page]] for details.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There is still content on http://meta.wikimedia.org which may need to be migrated.
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
If you can't find information on a particular issue in this documentation, please visit [[meta:MediaWiki_FAQ]] and [[meta:Help:Contents]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* See also [[Project:Current issues]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== MediaWiki Virtual Library ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
</div>
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
1jyk2cqdmp53w005vtfc59otj98g4s6
Template:Afd see also documentation
10
86138
737652
515956
2025-10-08T13:05:52Z
en>FaviFake
0
FaviFake moved page [[Template:Afd see also documentation]] to [[Template:AfD templates]]: boldly moving to be consistent with the other templates, that is [[Template:PAM templates]] and [[Template:DRV templates]]. The naming structure of this template was inherited from how it looked when it was created in 2008, when the navbox template wasn't used and it was just a plain list of links: [[Special:Permalink/225448460]]. Now it's no longer a "See also" and is instead used as a navbox on templa...
737652
wikitext
text/x-wiki
#REDIRECT [[Template:AfD templates]]
{{Redirect category shell|
{{R from move}}
}}
kyhthzbewm70a7jcb7sp8vit9cxoeyg
737653
737652
2026-04-11T19:54:20Z
Novem Linguae
49714
1 revision imported from [[:en:Template:Afd_see_also_documentation]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737652
wikitext
text/x-wiki
#REDIRECT [[Template:AfD templates]]
{{Redirect category shell|
{{R from move}}
}}
kyhthzbewm70a7jcb7sp8vit9cxoeyg
Translate test/es
0
96703
737601
721844
2026-04-11T16:15:31Z
FuzzyBot
18251
Updating to match new version of source page
737601
wikitext
text/x-wiki
<languages/>
{{formatnum|10}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|MediaWiki Documentación]]
<div lang="en" dir="ltr" class="mw-content-ltr">
It contains information for '''developers''' and '''system administrators''' on '''installing''', '''managing''' and '''developing''' for the MediaWiki software.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This manual is '''not for end users''' of MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
If you are looking for '''documentation to help you use MediaWiki, read the [[Special:MyLanguage/Help:Contents|MediaWiki Handbook]].'''
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
==Main sections==
</div>
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For system administrators ===
</div>
; [[Special:MyLanguage/Manual:Installation guide|<div lang="en" dir="ltr" class="mw-content-ltr">
Installation
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to setting up a new MediaWiki installation.
</div>
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Installing
</div>]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Initial configuration
</div>]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|<div lang="en" dir="ltr" class="mw-content-ltr">
Alphabetical list of settings
</div>]] | [[Special:MyLanguage/Manual:Configuration settings|<div lang="en" dir="ltr" class="mw-content-ltr">
Settings listed by function
</div>]]
; {{ll|Manual:System administration|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to do administrative tasks on your wiki.
</div>
: [[Special:MyLanguage/Manual:Backing up a wiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Backing up
</div>]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to upgrade your MediaWiki installation.
</div>
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Sysadmin hub}}.
</div>''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For developers ===
</div>
; <div lang="en" dir="ltr" class="mw-content-ltr">
Architecture
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the key parts of MediaWiki's source code.
</div>
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ <div lang="en" dir="ltr" class="mw-content-ltr">
Doxygen-generated documentation
</div>]
; {{ll|Manual:Database layout|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about the database architecture used by MediaWiki.
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
{{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
</div>
; {{ll|Manual:Developing extensions|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the ways to create a new MediaWiki extension.
</div>
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|<div lang="en" dir="ltr" class="mw-content-ltr">
Tag
</div>]] | [[Special:MyLanguage/Manual:Special pages|<div lang="en" dir="ltr" class="mw-content-ltr">
Special page
</div>]] | {{ll|Manual:Skins|nsp=0}}
; <div lang="en" dir="ltr" class="mw-content-ltr">
Web access
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
</div>
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Developer hub}}.
</div>''
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Others ===
</div>
; [[Special:MyLanguage/Manual:FAQ|<div lang="en" dir="ltr" class="mw-content-ltr">
MediaWiki FAQ
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Frequently asked questions about MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Browsing the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
There are multiple ways to browse through the documentation.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
</div>
* [[Special:Allpages/Manual:]] - <div lang="en" dir="ltr" class="mw-content-ltr">
An automatically generated list of all pages in the Manual: namespace.
</div>
* [[:Category:Manual]] - <div lang="en" dir="ltr" class="mw-content-ltr">
the top-level Manual category
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Improving the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There are still a lot of holes in this manual!
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
See the [[Special:MyLanguage/Manual:Contents/To do|'to do' page]] for details.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There is still content on http://meta.wikimedia.org which may need to be migrated.
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
If you can't find information on a particular issue in this documentation, please visit [[meta:MediaWiki_FAQ]] and [[meta:Help:Contents]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* See also [[Project:Current issues]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== MediaWiki Virtual Library ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
</div>
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
cb0g5jh2on3ji1s4uocvi1tnblbm5ck
737607
737601
2026-04-11T16:20:03Z
FuzzyBot
18251
Updating to match new version of source page
737607
wikitext
text/x-wiki
<languages/>
{{formatnum|10|{{SUBPAGENAME}}}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|MediaWiki Documentación]]
<div lang="en" dir="ltr" class="mw-content-ltr">
It contains information for '''developers''' and '''system administrators''' on '''installing''', '''managing''' and '''developing''' for the MediaWiki software.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This manual is '''not for end users''' of MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
If you are looking for '''documentation to help you use MediaWiki, read the [[Special:MyLanguage/Help:Contents|MediaWiki Handbook]].'''
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
==Main sections==
</div>
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For system administrators ===
</div>
; [[Special:MyLanguage/Manual:Installation guide|<div lang="en" dir="ltr" class="mw-content-ltr">
Installation
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to setting up a new MediaWiki installation.
</div>
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Installing
</div>]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Initial configuration
</div>]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|<div lang="en" dir="ltr" class="mw-content-ltr">
Alphabetical list of settings
</div>]] | [[Special:MyLanguage/Manual:Configuration settings|<div lang="en" dir="ltr" class="mw-content-ltr">
Settings listed by function
</div>]]
; {{ll|Manual:System administration|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to do administrative tasks on your wiki.
</div>
: [[Special:MyLanguage/Manual:Backing up a wiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Backing up
</div>]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to upgrade your MediaWiki installation.
</div>
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Sysadmin hub}}.
</div>''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For developers ===
</div>
; <div lang="en" dir="ltr" class="mw-content-ltr">
Architecture
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the key parts of MediaWiki's source code.
</div>
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ <div lang="en" dir="ltr" class="mw-content-ltr">
Doxygen-generated documentation
</div>]
; {{ll|Manual:Database layout|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about the database architecture used by MediaWiki.
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
{{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
</div>
; {{ll|Manual:Developing extensions|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the ways to create a new MediaWiki extension.
</div>
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|<div lang="en" dir="ltr" class="mw-content-ltr">
Tag
</div>]] | [[Special:MyLanguage/Manual:Special pages|<div lang="en" dir="ltr" class="mw-content-ltr">
Special page
</div>]] | {{ll|Manual:Skins|nsp=0}}
; <div lang="en" dir="ltr" class="mw-content-ltr">
Web access
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
</div>
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Developer hub}}.
</div>''
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Others ===
</div>
; [[Special:MyLanguage/Manual:FAQ|<div lang="en" dir="ltr" class="mw-content-ltr">
MediaWiki FAQ
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Frequently asked questions about MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Browsing the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
There are multiple ways to browse through the documentation.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
</div>
* [[Special:Allpages/Manual:]] - <div lang="en" dir="ltr" class="mw-content-ltr">
An automatically generated list of all pages in the Manual: namespace.
</div>
* [[:Category:Manual]] - <div lang="en" dir="ltr" class="mw-content-ltr">
the top-level Manual category
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Improving the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There are still a lot of holes in this manual!
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
See the [[Special:MyLanguage/Manual:Contents/To do|'to do' page]] for details.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There is still content on http://meta.wikimedia.org which may need to be migrated.
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
If you can't find information on a particular issue in this documentation, please visit [[meta:MediaWiki_FAQ]] and [[meta:Help:Contents]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* See also [[Project:Current issues]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== MediaWiki Virtual Library ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
</div>
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
go5n4237x3012uvj1wrucvnc683pwjb
737614
737607
2026-04-11T16:25:28Z
FuzzyBot
18251
Updating to match new version of source page
737614
wikitext
text/x-wiki
<languages/>
{{formatnum|10|{{PAGELANGUAGE}}}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|MediaWiki Documentación]]
<div lang="en" dir="ltr" class="mw-content-ltr">
It contains information for '''developers''' and '''system administrators''' on '''installing''', '''managing''' and '''developing''' for the MediaWiki software.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This manual is '''not for end users''' of MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
If you are looking for '''documentation to help you use MediaWiki, read the [[Special:MyLanguage/Help:Contents|MediaWiki Handbook]].'''
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
==Main sections==
</div>
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For system administrators ===
</div>
; [[Special:MyLanguage/Manual:Installation guide|<div lang="en" dir="ltr" class="mw-content-ltr">
Installation
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to setting up a new MediaWiki installation.
</div>
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Installing
</div>]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Initial configuration
</div>]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|<div lang="en" dir="ltr" class="mw-content-ltr">
Alphabetical list of settings
</div>]] | [[Special:MyLanguage/Manual:Configuration settings|<div lang="en" dir="ltr" class="mw-content-ltr">
Settings listed by function
</div>]]
; {{ll|Manual:System administration|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to do administrative tasks on your wiki.
</div>
: [[Special:MyLanguage/Manual:Backing up a wiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Backing up
</div>]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to upgrade your MediaWiki installation.
</div>
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Sysadmin hub}}.
</div>''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For developers ===
</div>
; <div lang="en" dir="ltr" class="mw-content-ltr">
Architecture
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the key parts of MediaWiki's source code.
</div>
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ <div lang="en" dir="ltr" class="mw-content-ltr">
Doxygen-generated documentation
</div>]
; {{ll|Manual:Database layout|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about the database architecture used by MediaWiki.
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
{{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
</div>
; {{ll|Manual:Developing extensions|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the ways to create a new MediaWiki extension.
</div>
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|<div lang="en" dir="ltr" class="mw-content-ltr">
Tag
</div>]] | [[Special:MyLanguage/Manual:Special pages|<div lang="en" dir="ltr" class="mw-content-ltr">
Special page
</div>]] | {{ll|Manual:Skins|nsp=0}}
; <div lang="en" dir="ltr" class="mw-content-ltr">
Web access
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
</div>
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Developer hub}}.
</div>''
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Others ===
</div>
; [[Special:MyLanguage/Manual:FAQ|<div lang="en" dir="ltr" class="mw-content-ltr">
MediaWiki FAQ
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Frequently asked questions about MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Browsing the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
There are multiple ways to browse through the documentation.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
</div>
* [[Special:Allpages/Manual:]] - <div lang="en" dir="ltr" class="mw-content-ltr">
An automatically generated list of all pages in the Manual: namespace.
</div>
* [[:Category:Manual]] - <div lang="en" dir="ltr" class="mw-content-ltr">
the top-level Manual category
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Improving the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There are still a lot of holes in this manual!
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
See the [[Special:MyLanguage/Manual:Contents/To do|'to do' page]] for details.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There is still content on http://meta.wikimedia.org which may need to be migrated.
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
If you can't find information on a particular issue in this documentation, please visit [[meta:MediaWiki_FAQ]] and [[meta:Help:Contents]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* See also [[Project:Current issues]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== MediaWiki Virtual Library ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
</div>
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
8phzvbfcwm9g01owx9wpkhh98127uk6
User:SD0001/twinkleoptions.js
2
101443
737733
727669
2026-04-12T07:38:48Z
SD0001
26892
Saving Twinkle preferences: automatic edit from [[:Wikipedia:Twinkle/Preferences]]
737733
javascript
text/javascript
// twinkleoptions.js: personal Twinkle preferences file
//
// NOTE: The easiest way to change your Twinkle preferences is by using the
// Twinkle preferences panel, at [[Wikipedia:Twinkle/Preferences]].
//
// This file is AUTOMATICALLY GENERATED. Any changes you make (aside from
// changing the configuration parameters in a valid-JavaScript way) will be
// overwritten the next time you click "save" in the Twinkle preferences
// panel. If modifying this file, make sure to use correct JavaScript.
// <nowiki>
window.Twinkle.prefs = {
"optionsVersion": 2.1,
"defaultToBlock64": true,
"markProdPagesAsPatrolled": true,
"logProdPages": true,
"showRollbackLinks": [
"diff",
"others",
"recent",
"history"
],
"speedySelectionStyle": "radioClick",
"watchSpeedyPages": [],
"watchSpeedyExpiry": "no",
"markSpeedyPagesAsPatrolled": true,
"watchTaggedPages": "yes",
"watchMergeDiscussions": "yes",
"markTaggedPagesAsPatrolled": true,
"customTagList": [
{
"value": "Histmerge",
"label": "Histmerge"
},
{
"value": "Film IMDb refimprove|only=yes",
"label": "Film IMDb refimprove|only=yes"
},
{
"value": "Wikipedia:trout",
"label": "Wikipedia:trout"
},
{
"value": "Wikipedia:trout|help=on",
"label": "Wikipedia:trout|help=on"
}
],
"customRedirectTagList": [
{
"value": "TNAME",
"label": "text display"
}
]
};
// </nowiki>
// End of twinkleoptions.js
fc9wf4rgbfyw8tgdxajkn96dlsf0wme
Wikipedia:Article alerts/Bot use warning
4
101737
737670
487103
2026-03-26T21:56:24Z
en>Ponyo
0
Reverted edit by [[Special:Contribs/Google9199009987|Google9199009987]] ([[User talk:Google9199009987|talk]]) to last version by FantasticWikiUser
737670
wikitext
text/x-wiki
{{#if: {{{short|}}} | [[User:AAlertBot|AAlertBot]] for [[Wikipedia:Article alerts|Article Alerts]] | {{mbox
| image = [[File:Mail-send-receive.svg|50x40px|alt=|link=]]
| text = If you plan to make breaking changes to this {{{1|{{lc:{{NAMESPACE}}}}}}}, including moving it, changing its scope, or nominating it for deletion or deprecation, please notify the [[Wikipedia:Article alerts|Article Alerts]] project at [[Wikipedia talk:Article alerts]] as a courtesy, as this page is used by the [[User:AAlertBot|AAlertBot]] bot to detect and report pages. Thank you!}}}}<noinclude>
{{Documentation}}<!-- Add categories and interwikis to the /doc subpage, not here! --></noinclude>
pu3isojka068w3op2pyhhkrbbou9vvq
737671
737670
2026-04-11T19:54:44Z
Novem Linguae
49714
1 revision imported from [[:en:Wikipedia:Article_alerts/Bot_use_warning]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737670
wikitext
text/x-wiki
{{#if: {{{short|}}} | [[User:AAlertBot|AAlertBot]] for [[Wikipedia:Article alerts|Article Alerts]] | {{mbox
| image = [[File:Mail-send-receive.svg|50x40px|alt=|link=]]
| text = If you plan to make breaking changes to this {{{1|{{lc:{{NAMESPACE}}}}}}}, including moving it, changing its scope, or nominating it for deletion or deprecation, please notify the [[Wikipedia:Article alerts|Article Alerts]] project at [[Wikipedia talk:Article alerts]] as a courtesy, as this page is used by the [[User:AAlertBot|AAlertBot]] bot to detect and report pages. Thank you!}}}}<noinclude>
{{Documentation}}<!-- Add categories and interwikis to the /doc subpage, not here! --></noinclude>
pu3isojka068w3op2pyhhkrbbou9vvq
Module:Find sources/templates/Find sources mainspace
828
101786
737640
371305
2022-03-01T07:33:51Z
en>Primefac
0
Changed protection settings for "[[Module:Find sources/templates/Find sources mainspace]]": match main module ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
371304
Scribunto
text/plain
return {
blurb = "''Find sources:'' $1 – $2",
introLink = {
code = 'google'
},
links = {
{
code = 'google news',
display = 'news'
},
{
code = 'google newspapers',
display = 'newspapers'
},
{
code = 'google books',
display = 'books'
},
{
code = 'google scholar',
display = 'scholar'
},
{
code = 'jstor',
display = 'JSTOR'
}
},
isUsedInMainspace = true
}
k39u38p2vc24ts3y9zywym3jkiq7787
737641
737640
2026-04-11T19:54:17Z
Novem Linguae
49714
1 revision imported from [[:en:Module:Find_sources/templates/Find_sources_mainspace]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
371304
Scribunto
text/plain
return {
blurb = "''Find sources:'' $1 – $2",
introLink = {
code = 'google'
},
links = {
{
code = 'google news',
display = 'news'
},
{
code = 'google newspapers',
display = 'newspapers'
},
{
code = 'google books',
display = 'books'
},
{
code = 'google scholar',
display = 'scholar'
},
{
code = 'jstor',
display = 'JSTOR'
}
},
isUsedInMainspace = true
}
k39u38p2vc24ts3y9zywym3jkiq7787
Template:Afd
10
101979
737626
374111
2024-02-02T01:53:41Z
en>Paine Ellsworth
0
Pp template is not needed - it's included in the [[Template:Rcat shell|Rcat shell]] template
737626
wikitext
text/x-wiki
#REDIRECT [[Template:Article for deletion]]
{{Redirect category shell|
{{R from move}}
{{R from template shortcut}}
}}
shsog6a0f5kox8j31ma0xzkjvyjecwp
737627
737626
2026-04-11T19:54:06Z
Novem Linguae
49714
1 revision imported from [[:en:Template:Afd]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737626
wikitext
text/x-wiki
#REDIRECT [[Template:Article for deletion]]
{{Redirect category shell|
{{R from move}}
{{R from template shortcut}}
}}
shsog6a0f5kox8j31ma0xzkjvyjecwp
Template:Article for deletion
10
101980
737662
491423
2026-04-11T16:23:11Z
en>Chaotic Enby
0
+params (outcome, target)
737662
wikitext
text/x-wiki
<!-- Please do not remove or change this AfD message until the discussion has been closed. -->
{{<includeonly>subst:</includeonly>#ifeq:{{{1|a}}}|{{{1|b}}}||{{<includeonly>subst:</includeonly>#ifexist:Wikipedia:Articles for deletion/{{<includeonly>subst:</includeonly>PAGENAME}}|{{<includeonly>subst:</includeonly>lessthan}}!-- The nomination page for this article already existed when this tag was added. If this was because the article had been nominated for deletion before, and you wish to renominate it, please replace "page={{<includeonly>subst:</includeonly>PAGENAME}}" with "page={{<includeonly>subst:</includeonly>PAGENAME}} (2nd nomination)" below before proceeding with the nomination.
-->}}}}{{Article for deletion/dated|page={{<includeonly>subst:</includeonly>#ifeq:{{{1|a}}}|{{{1|b}}}|{{{1}}}|{{<includeonly>subst:</includeonly>PAGENAME}}}}|timestamp={{<includeonly>subst:</includeonly>CURRENTTIMESTAMP}}|year={{<includeonly>subst:</includeonly>CURRENTYEAR}}|month={{<includeonly>subst:</includeonly>CURRENTMONTHNAMEGEN}}|day={{<includeonly>subst:</includeonly>CURRENTDAY}}|substed=yes{{<includeonly>subst:</includeonly>ns:0}}{{<includeonly>subst:</includeonly>#ifeq:{{{help|a}}}|{{{help|b}}}|{{<includeonly>subst:</includeonly>!}}help={{{help}}}}}{{<includeonly>subst:</includeonly>#ifeq:{{{outcome|a}}}|{{{outcome|b}}}|{{<includeonly>subst:</includeonly>!}}outcome={{{outcome}}}}}{{<includeonly>subst:</includeonly>#ifeq:{{{target|a}}}|{{{target|b}}}|{{<includeonly>subst:</includeonly>!}}target={{{target}}}}}}}
{{<includeonly>subst:</includeonly>lessthan}}!-- Once discussion is closed, please place on talk page: {{Old AfD multi|page={{<includeonly>subst:</includeonly>#ifeq:{{{1|a}}}|{{{1|b}}}|{{{1}}}|{{<includeonly>subst:</includeonly>PAGENAME}}}}|date={{<includeonly>subst:</includeonly>#time:j F Y|{{<includeonly>subst:</includeonly>CURRENTTIMESTAMP}} }}|result='''keep'''}} -->
<!-- End of AfD message, feel free to edit beyond this point --><noinclude>
{{Documentation}}<!-- Add categories, documentation, and interwiki links to the /doc subpage, not here! -->
</noinclude>
3iqcxrkjh3v8aa9tv4xodhbodu0o0zt
737663
737662
2026-04-11T19:54:41Z
Novem Linguae
49714
1 revision imported from [[:en:Template:Article_for_deletion]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737662
wikitext
text/x-wiki
<!-- Please do not remove or change this AfD message until the discussion has been closed. -->
{{<includeonly>subst:</includeonly>#ifeq:{{{1|a}}}|{{{1|b}}}||{{<includeonly>subst:</includeonly>#ifexist:Wikipedia:Articles for deletion/{{<includeonly>subst:</includeonly>PAGENAME}}|{{<includeonly>subst:</includeonly>lessthan}}!-- The nomination page for this article already existed when this tag was added. If this was because the article had been nominated for deletion before, and you wish to renominate it, please replace "page={{<includeonly>subst:</includeonly>PAGENAME}}" with "page={{<includeonly>subst:</includeonly>PAGENAME}} (2nd nomination)" below before proceeding with the nomination.
-->}}}}{{Article for deletion/dated|page={{<includeonly>subst:</includeonly>#ifeq:{{{1|a}}}|{{{1|b}}}|{{{1}}}|{{<includeonly>subst:</includeonly>PAGENAME}}}}|timestamp={{<includeonly>subst:</includeonly>CURRENTTIMESTAMP}}|year={{<includeonly>subst:</includeonly>CURRENTYEAR}}|month={{<includeonly>subst:</includeonly>CURRENTMONTHNAMEGEN}}|day={{<includeonly>subst:</includeonly>CURRENTDAY}}|substed=yes{{<includeonly>subst:</includeonly>ns:0}}{{<includeonly>subst:</includeonly>#ifeq:{{{help|a}}}|{{{help|b}}}|{{<includeonly>subst:</includeonly>!}}help={{{help}}}}}{{<includeonly>subst:</includeonly>#ifeq:{{{outcome|a}}}|{{{outcome|b}}}|{{<includeonly>subst:</includeonly>!}}outcome={{{outcome}}}}}{{<includeonly>subst:</includeonly>#ifeq:{{{target|a}}}|{{{target|b}}}|{{<includeonly>subst:</includeonly>!}}target={{{target}}}}}}}
{{<includeonly>subst:</includeonly>lessthan}}!-- Once discussion is closed, please place on talk page: {{Old AfD multi|page={{<includeonly>subst:</includeonly>#ifeq:{{{1|a}}}|{{{1|b}}}|{{{1}}}|{{<includeonly>subst:</includeonly>PAGENAME}}}}|date={{<includeonly>subst:</includeonly>#time:j F Y|{{<includeonly>subst:</includeonly>CURRENTTIMESTAMP}} }}|result='''keep'''}} -->
<!-- End of AfD message, feel free to edit beyond this point --><noinclude>
{{Documentation}}<!-- Add categories, documentation, and interwiki links to the /doc subpage, not here! -->
</noinclude>
3iqcxrkjh3v8aa9tv4xodhbodu0o0zt
Template:Article for deletion/dated
10
101981
737644
394999
2026-04-07T14:13:55Z
en>Chaotic Enby
0
format links+reword
737644
wikitext
text/x-wiki
<!--{{AfDM}} begin-->{{#ifeq:{{{substed|yes}}}|yes|<!-- start {{afd}} subst'ed text -->{{#switch: {{#titleparts:{{FULLPAGENAME}}|1}} | Special:Undelete= | Template:Article for deletion = | Template:Afdx= | #default=<includeonly>{{#if: {{NAMESPACE}} | {{error:wrong namespace}} }}</includeonly> }}{{NOINDEX}}{{Ambox
| type = {{Article for deletion/switch|{{{outcome|}}}|move|delete|delete|delete}}
| class = mbox-afd
| image = {{Article for deletion/switch|{{{outcome|}}}|[[File:Merge-arrow.svg|alt=|link=]]|none|none|none}}
| text = '''An editor has nominated this article for {{Article for deletion/switch|{{{outcome|}}}|merging {{#if:{{{target|}}}|into {{format link|{{{target}}}}}}}|redirecting {{#if:{{{target|}}}|to {{format link|{{{target}}}}}}}|draftification|deletion}}.'''<br />You are welcome to participate in '''[[Wikipedia:Articles for deletion/{{{page|{{PAGENAME}}}}}|the {{Article for deletion/switch|{{{outcome|}}}|merging|redirecting|draftification|deletion}} discussion]]''', which will decide {{Article for deletion/switch|{{{outcome|}}}|whether to [[Wikipedia:Merging|merge]] it {{#if:{{{target|}}}|into {{format link|{{{target}}}}}}}|[[Wikipedia:Redirect|whether to redirect it]] {{#if:{{{target|}}}|to {{format link|{{{target}}}}}}}|whether to [[Wikipedia:Drafts#Moving articles to draftspace|draftify]] it|[[Wikipedia:Deletion policy|whether to keep it]]}}.<div class="hide-when-compact">Feel free to improve the article, but do not remove this notice before the discussion is closed. {{Article for deletion/switch|{{{outcome|}}}||For more information, see {{Section link|Wikipedia:Deletion policy#Redirection}}.||For more information, see the [[Wikipedia:guide to deletion|guide to deletion]].}}<br /><small>{{find sources mainspace}}</small><span id="delete-reason" style="display:none;">{{urlencode:[[Wikipedia:Articles for deletion/{{{page|{{PAGENAME}}}}}]]}}</span><span id="delete-criterion" style="display:none;">AFD</span>
{{#ifeq: {{{help|}}} | off | |
{{#ifexist:Wikipedia:Articles for deletion/{{{page|{{PAGENAME}}}}}||----
<div style="font-size: 85%;">
[[Template:Afd footer|Steps to list an article for {{Article for deletion/switch|{{{outcome|}}}|merging|redirecting|draftification|deletion}}]]:
# {{tlx|Article for deletion|subst=yes}}
# {{#ifeq:{{{page|{{PAGENAME}}}}}|{{PAGENAME}}|{{#ifexist:Wikipedia:Articles for deletion/{{{page|{{PAGENAME}}}}}||[{{fullurl:Wikipedia:Articles for deletion/{{PAGENAME}}|action=edit&preload=Template:Afd2+starter&editintro=Template:Afd3+starter}} Preloaded debate] ''OR''}}}} {{nowrap|{{tlx|afd2|subst=yes|2=pg={{PAGENAME}}|3=cat=|4=text=}} <nowiki>~~~~</nowiki>}} ([[:category:AfD debates|categories]])
# Place {{tlx|afd3|subst=yes|2=pg={{{page|{{PAGENAME}}}}} }} on the ''top'' of [{{fullurl:Wikipedia:Articles for deletion/Log/{{{logdate|{{{date|{{{year|{{CURRENTYEAR}}}}} {{{month|{{CURRENTMONTHNAMEGEN}}}}} {{{day|{{CURRENTDAY}}}}}}}}}}}|action=edit}} this list]
# Please consider notifying the [{{fullurl:{{FULLPAGENAME}}|action=history}} author(s)] by placing {{nowrap|{{tlx|Afd notice|subst=yes|2={{PAGENAME}}{{#ifeq:{{{page|{{PAGENAME}}}}}|{{PAGENAME}}||<nowiki>|</nowiki>{{{page}}}}}{{#if:{{{outcome|}}}|<nowiki>|outcome=</nowiki>{{{outcome}}}{{#if:{{{target|}}}|<nowiki>|target=</nowiki>{{{target|}}}}}}} }} <nowiki>~~~~</nowiki>}} on their talk page(s).
----
Unregistered users placing this tag on an article cannot complete the nomination and should leave detailed reasons for {{Article for deletion/switch|{{{outcome|}}}|merging {{#if:{{{target|}}}|into {{format link|{{{target}}}}}}}|redirecting {{#if:{{{target|}}}|to {{format link|{{{target}}}}}}}|draftification|deletion}} on [[{{TALKPAGENAME}}]] and then request that someone else complete the process at [[Wikipedia talk:Articles for deletion]]. If the nomination is not completed and no message is left on the talk page, this tag may be removed.</div>}}}}</div>}}
{{#switch: {{FULLPAGENAME}} | Template:Article for deletion= | Template:Afd= | Template:Afdx= | <includeonly>{{{category|[[Category:Articles for deletion]]}}}</includeonly> }}<!-- end {{afd}} subst'ed text -->|<!-- start {{afd}} template not subst'ed text -->{{error:not substituted|{{{origtag|afd}}}}}[[Category:Articles for deletion using wrong syntax]]<!-- end {{afd}} not subst'ed text -->}}<!--{{AfDM}} end--><noinclude>
{{Documentation}}
</noinclude>
5vtfp2g2z27pwpmalih3q6q7jq0qfpo
737645
737644
2026-04-11T19:54:18Z
Novem Linguae
49714
1 revision imported from [[:en:Template:Article_for_deletion/dated]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737644
wikitext
text/x-wiki
<!--{{AfDM}} begin-->{{#ifeq:{{{substed|yes}}}|yes|<!-- start {{afd}} subst'ed text -->{{#switch: {{#titleparts:{{FULLPAGENAME}}|1}} | Special:Undelete= | Template:Article for deletion = | Template:Afdx= | #default=<includeonly>{{#if: {{NAMESPACE}} | {{error:wrong namespace}} }}</includeonly> }}{{NOINDEX}}{{Ambox
| type = {{Article for deletion/switch|{{{outcome|}}}|move|delete|delete|delete}}
| class = mbox-afd
| image = {{Article for deletion/switch|{{{outcome|}}}|[[File:Merge-arrow.svg|alt=|link=]]|none|none|none}}
| text = '''An editor has nominated this article for {{Article for deletion/switch|{{{outcome|}}}|merging {{#if:{{{target|}}}|into {{format link|{{{target}}}}}}}|redirecting {{#if:{{{target|}}}|to {{format link|{{{target}}}}}}}|draftification|deletion}}.'''<br />You are welcome to participate in '''[[Wikipedia:Articles for deletion/{{{page|{{PAGENAME}}}}}|the {{Article for deletion/switch|{{{outcome|}}}|merging|redirecting|draftification|deletion}} discussion]]''', which will decide {{Article for deletion/switch|{{{outcome|}}}|whether to [[Wikipedia:Merging|merge]] it {{#if:{{{target|}}}|into {{format link|{{{target}}}}}}}|[[Wikipedia:Redirect|whether to redirect it]] {{#if:{{{target|}}}|to {{format link|{{{target}}}}}}}|whether to [[Wikipedia:Drafts#Moving articles to draftspace|draftify]] it|[[Wikipedia:Deletion policy|whether to keep it]]}}.<div class="hide-when-compact">Feel free to improve the article, but do not remove this notice before the discussion is closed. {{Article for deletion/switch|{{{outcome|}}}||For more information, see {{Section link|Wikipedia:Deletion policy#Redirection}}.||For more information, see the [[Wikipedia:guide to deletion|guide to deletion]].}}<br /><small>{{find sources mainspace}}</small><span id="delete-reason" style="display:none;">{{urlencode:[[Wikipedia:Articles for deletion/{{{page|{{PAGENAME}}}}}]]}}</span><span id="delete-criterion" style="display:none;">AFD</span>
{{#ifeq: {{{help|}}} | off | |
{{#ifexist:Wikipedia:Articles for deletion/{{{page|{{PAGENAME}}}}}||----
<div style="font-size: 85%;">
[[Template:Afd footer|Steps to list an article for {{Article for deletion/switch|{{{outcome|}}}|merging|redirecting|draftification|deletion}}]]:
# {{tlx|Article for deletion|subst=yes}}
# {{#ifeq:{{{page|{{PAGENAME}}}}}|{{PAGENAME}}|{{#ifexist:Wikipedia:Articles for deletion/{{{page|{{PAGENAME}}}}}||[{{fullurl:Wikipedia:Articles for deletion/{{PAGENAME}}|action=edit&preload=Template:Afd2+starter&editintro=Template:Afd3+starter}} Preloaded debate] ''OR''}}}} {{nowrap|{{tlx|afd2|subst=yes|2=pg={{PAGENAME}}|3=cat=|4=text=}} <nowiki>~~~~</nowiki>}} ([[:category:AfD debates|categories]])
# Place {{tlx|afd3|subst=yes|2=pg={{{page|{{PAGENAME}}}}} }} on the ''top'' of [{{fullurl:Wikipedia:Articles for deletion/Log/{{{logdate|{{{date|{{{year|{{CURRENTYEAR}}}}} {{{month|{{CURRENTMONTHNAMEGEN}}}}} {{{day|{{CURRENTDAY}}}}}}}}}}}|action=edit}} this list]
# Please consider notifying the [{{fullurl:{{FULLPAGENAME}}|action=history}} author(s)] by placing {{nowrap|{{tlx|Afd notice|subst=yes|2={{PAGENAME}}{{#ifeq:{{{page|{{PAGENAME}}}}}|{{PAGENAME}}||<nowiki>|</nowiki>{{{page}}}}}{{#if:{{{outcome|}}}|<nowiki>|outcome=</nowiki>{{{outcome}}}{{#if:{{{target|}}}|<nowiki>|target=</nowiki>{{{target|}}}}}}} }} <nowiki>~~~~</nowiki>}} on their talk page(s).
----
Unregistered users placing this tag on an article cannot complete the nomination and should leave detailed reasons for {{Article for deletion/switch|{{{outcome|}}}|merging {{#if:{{{target|}}}|into {{format link|{{{target}}}}}}}|redirecting {{#if:{{{target|}}}|to {{format link|{{{target}}}}}}}|draftification|deletion}} on [[{{TALKPAGENAME}}]] and then request that someone else complete the process at [[Wikipedia talk:Articles for deletion]]. If the nomination is not completed and no message is left on the talk page, this tag may be removed.</div>}}}}</div>}}
{{#switch: {{FULLPAGENAME}} | Template:Article for deletion= | Template:Afd= | Template:Afdx= | <includeonly>{{{category|[[Category:Articles for deletion]]}}}</includeonly> }}<!-- end {{afd}} subst'ed text -->|<!-- start {{afd}} template not subst'ed text -->{{error:not substituted|{{{origtag|afd}}}}}[[Category:Articles for deletion using wrong syntax]]<!-- end {{afd}} not subst'ed text -->}}<!--{{AfDM}} end--><noinclude>
{{Documentation}}
</noinclude>
5vtfp2g2z27pwpmalih3q6q7jq0qfpo
Template:Article for deletion/doc
10
101982
737674
374391
2025-11-05T09:42:08Z
en>Beland
0
/* Usage */ whoops
737674
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) -->
{{Subst only|auto=yes}}
{{Twinkle standard installation}}
{{XFDcloser standard installation}}
{{Wikipedia:Article alerts/Bot use warning}}
{{Main|Wikipedia:Articles for deletion}}
{{Template shortcut|Afd|pre=subst:}}
This template will categorise articles into [[:Category:Articles for deletion]]. This [[Wikipedia:Template messages|template]] is a [[Wikipedia:Manual of Style/Self-references to avoid|self-reference]] and so is part of the Wikipedia project rather than the encyclopedic content.
This template should always be [[Wikipedia:Substitution|substituted]] onto pages it appears on, because it requires that the <nowiki>{{PAGENAME}}</nowiki> [[Help:Variable|variable]] be substituted. (This is so that the link to the AFD discussion does not break when the page is renamed during AFD discussions.) If this template is not substituted, a warning message will be shown instead.
This template results in 3 lines of wikitext that make use of {{tl|AfDM}}.
== Usage ==
For [[Wikipedia:Proposed deletion|proposed deletion]], use {{tl|proposed deletion}} or {{tl|prod}}. [[WP:PROD]] takes load off [[WP:AFD]] and should always be used instead, if reasonable. {{tl|Current event AFD}} can be used for appropriate articles as an alternative with a more specific message designed to prevent unnecessary alarm among readers.
{{tlxs|article for deletion}} or {{tlxs|afd}}
: This template will place a notice that the page has been nominated for deletion. It should be placed at the top of the page and substituted.
{{tlxs|afd|Weather in London}} {{tlxs|afd|Weather in London (2nd nomination)}}
: The parameter will link to a specific AFD discussion sub-page. Use this for linking multiple articles to a single AFD discussion page (bulk nominations) or for re-nominations of articles that have already been nominated for deletion before. (For the latter purpose, the {{tl|afdx}} template can also be used. )
==TemplateData==
{{TemplateData header}}
<templatedata>
{
"params": {
"1": {
"label": "Page name",
"description": "Page name that the subpage of WP:AfD is called, if not equal to the article's title.",
"example": "Weather in London (2nd nomination)",
"type": "string"
}
},
"description": "Template used to nominate an article for AfD (Articles for Deletion)"
}
</templatedata>
== See also ==
{{afd see also documentation|state=uncollapsed}}
<includeonly>{{sandbox other||
<!-- Categories below this line, please; interwikis at Wikidata -->
[[Category:Articles for deletion templates]]
[[Category:Deletion tags]]
}}</includeonly>
g7cksav3ed06zj74f1cmjzhs3mtz3b5
737675
737674
2026-04-11T19:54:44Z
Novem Linguae
49714
1 revision imported from [[:en:Template:Article_for_deletion/doc]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737674
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) -->
{{Subst only|auto=yes}}
{{Twinkle standard installation}}
{{XFDcloser standard installation}}
{{Wikipedia:Article alerts/Bot use warning}}
{{Main|Wikipedia:Articles for deletion}}
{{Template shortcut|Afd|pre=subst:}}
This template will categorise articles into [[:Category:Articles for deletion]]. This [[Wikipedia:Template messages|template]] is a [[Wikipedia:Manual of Style/Self-references to avoid|self-reference]] and so is part of the Wikipedia project rather than the encyclopedic content.
This template should always be [[Wikipedia:Substitution|substituted]] onto pages it appears on, because it requires that the <nowiki>{{PAGENAME}}</nowiki> [[Help:Variable|variable]] be substituted. (This is so that the link to the AFD discussion does not break when the page is renamed during AFD discussions.) If this template is not substituted, a warning message will be shown instead.
This template results in 3 lines of wikitext that make use of {{tl|AfDM}}.
== Usage ==
For [[Wikipedia:Proposed deletion|proposed deletion]], use {{tl|proposed deletion}} or {{tl|prod}}. [[WP:PROD]] takes load off [[WP:AFD]] and should always be used instead, if reasonable. {{tl|Current event AFD}} can be used for appropriate articles as an alternative with a more specific message designed to prevent unnecessary alarm among readers.
{{tlxs|article for deletion}} or {{tlxs|afd}}
: This template will place a notice that the page has been nominated for deletion. It should be placed at the top of the page and substituted.
{{tlxs|afd|Weather in London}} {{tlxs|afd|Weather in London (2nd nomination)}}
: The parameter will link to a specific AFD discussion sub-page. Use this for linking multiple articles to a single AFD discussion page (bulk nominations) or for re-nominations of articles that have already been nominated for deletion before. (For the latter purpose, the {{tl|afdx}} template can also be used. )
==TemplateData==
{{TemplateData header}}
<templatedata>
{
"params": {
"1": {
"label": "Page name",
"description": "Page name that the subpage of WP:AfD is called, if not equal to the article's title.",
"example": "Weather in London (2nd nomination)",
"type": "string"
}
},
"description": "Template used to nominate an article for AfD (Articles for Deletion)"
}
</templatedata>
== See also ==
{{afd see also documentation|state=uncollapsed}}
<includeonly>{{sandbox other||
<!-- Categories below this line, please; interwikis at Wikidata -->
[[Category:Articles for deletion templates]]
[[Category:Deletion tags]]
}}</includeonly>
g7cksav3ed06zj74f1cmjzhs3mtz3b5
Template:Old AfD multi
10
101984
737664
392628
2022-05-01T02:45:10Z
en>Steel1943
0
Add {{[[Template:XFDcloser standard installation|XFDcloser standard installation]]}} since XFDcloser uses this redirect instead of the target for some reason...
737664
wikitext
text/x-wiki
#REDIRECT [[Template:Old XfD multi]]
{{Redirect category shell|
{{R from move}}
}}
{{XFDcloser standard installation}}
qhvzdnkmaj2pxh15bml3j94wgvyoquu
737665
737664
2026-04-11T19:54:43Z
Novem Linguae
49714
1 revision imported from [[:en:Template:Old_AfD_multi]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737664
wikitext
text/x-wiki
#REDIRECT [[Template:Old XfD multi]]
{{Redirect category shell|
{{R from move}}
}}
{{XFDcloser standard installation}}
qhvzdnkmaj2pxh15bml3j94wgvyoquu
Template:R from move/except
10
102639
737628
591997
2024-05-08T00:57:29Z
en>SilverLocust
0
Have that R2 tracking category also show a message
737628
wikitext
text/x-wiki
<noinclude>This is the exception page for {{tl|R from move}}. This page makes exceptions that include certain pages that should not inhabit either {{cat|Unsynchronized talk page redirects}} or {{cat|Redirects from moves}}. If necessary, new exceptions may be added with no need to edit the main template, {{tl|R from move}}.
</noinclude>{{#switch: {{FULLPAGENAME}}
|MediaWiki:Move-redirect-text=
|Template:R from move/except=
|#default=[[Category:Redirects from moves]]
}}{{#switch: {{NAMESPACENUMBER}}
|1={{#ifeq: {{#invoke:redirect|isRedirect|{{FULLPAGENAME}}}}|yes|
{{#ifeq: {{#invoke:redirect|isRedirect|{{SUBJECTPAGENAME}}}}|yes|
{{#ifeq: {{PAGENAME:{{#invoke:redirect|main|{{TALKPAGENAME}}}}}}|{{PAGENAME:{{#invoke:redirect|main|{{SUBJECTPAGENAME}}}}}}||
{{#ifeq: {{FULLPAGENAME}}|{{SUBJECTPAGENAME}}||
{{#ifeq: {{Str left|{{PAGENAME}}|16}}|List of ships of||[[Category:Unsynchronized talk page redirects]]
}}
}}
}}
|{{#ifexist:{{SUBJECTPAGENAME}}|
{{#ifeq: {{SUBJECTPAGENAME}}|{{Target of|{{SUBJECTPAGENAME:{{Target of|{{FULLPAGENAME}}}}}}}}|[[Category:Articles with unsynchronized talk page redirects]]|
{{#ifexpr: {{#invoke:string|find|{{#invoke:page|getContent|{{SUBJECTPAGENAME}}|as=raw}}|:Rfd}}|[[Category:Redirects for discussion with talk page redirects]]|[[Category:Articles with talk page redirects]]}}}}
}}
}}
|{{error|Page is not a redirect, misplaced [[Template:R from move]]}}
}}
|0={{#switch:{{NAMESPACENUMBER:{{#invoke:redirect|main|{{FULLPAGENAME}}}}}}|0|4|10|12|14|100=|#default={{R from move/Cross-namespace}}}}
}}<noinclude>
{{Documentation|Template:R from move/doc}}
</noinclude>
2a82jzb8kp50itnyti0qkq1qte99dnn
737629
737628
2026-04-11T19:54:07Z
Novem Linguae
49714
1 revision imported from [[:en:Template:R_from_move/except]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737628
wikitext
text/x-wiki
<noinclude>This is the exception page for {{tl|R from move}}. This page makes exceptions that include certain pages that should not inhabit either {{cat|Unsynchronized talk page redirects}} or {{cat|Redirects from moves}}. If necessary, new exceptions may be added with no need to edit the main template, {{tl|R from move}}.
</noinclude>{{#switch: {{FULLPAGENAME}}
|MediaWiki:Move-redirect-text=
|Template:R from move/except=
|#default=[[Category:Redirects from moves]]
}}{{#switch: {{NAMESPACENUMBER}}
|1={{#ifeq: {{#invoke:redirect|isRedirect|{{FULLPAGENAME}}}}|yes|
{{#ifeq: {{#invoke:redirect|isRedirect|{{SUBJECTPAGENAME}}}}|yes|
{{#ifeq: {{PAGENAME:{{#invoke:redirect|main|{{TALKPAGENAME}}}}}}|{{PAGENAME:{{#invoke:redirect|main|{{SUBJECTPAGENAME}}}}}}||
{{#ifeq: {{FULLPAGENAME}}|{{SUBJECTPAGENAME}}||
{{#ifeq: {{Str left|{{PAGENAME}}|16}}|List of ships of||[[Category:Unsynchronized talk page redirects]]
}}
}}
}}
|{{#ifexist:{{SUBJECTPAGENAME}}|
{{#ifeq: {{SUBJECTPAGENAME}}|{{Target of|{{SUBJECTPAGENAME:{{Target of|{{FULLPAGENAME}}}}}}}}|[[Category:Articles with unsynchronized talk page redirects]]|
{{#ifexpr: {{#invoke:string|find|{{#invoke:page|getContent|{{SUBJECTPAGENAME}}|as=raw}}|:Rfd}}|[[Category:Redirects for discussion with talk page redirects]]|[[Category:Articles with talk page redirects]]}}}}
}}
}}
|{{error|Page is not a redirect, misplaced [[Template:R from move]]}}
}}
|0={{#switch:{{NAMESPACENUMBER:{{#invoke:redirect|main|{{FULLPAGENAME}}}}}}|0|4|10|12|14|100=|#default={{R from move/Cross-namespace}}}}
}}<noinclude>
{{Documentation|Template:R from move/doc}}
</noinclude>
2a82jzb8kp50itnyti0qkq1qte99dnn
Template:Afdx
10
102645
737636
381005
2026-04-11T16:24:13Z
en>Chaotic Enby
0
+extra params
737636
wikitext
text/x-wiki
<!-- Please do not remove or change this AfD message until the discussion has been closed. -->
{{AfDM|page={{<includeonly>subst:</includeonly>PAGENAME}} ({{<includeonly>subst:</includeonly>#ifeq:{{{1|a}}}|{{{1|b}}}|{{{1}}}|2nd}} nomination)|year={{<includeonly>subst:</includeonly>CURRENTYEAR}}|month={{<includeonly>subst:</includeonly>CURRENTMONTHNAMEGEN}}|day={{<includeonly>subst:</includeonly>CURRENTDAY}}|substed=yes{{<includeonly>subst:</includeonly>ns:0}}|origtag=afdx{{<includeonly>subst:</includeonly>#ifeq:{{{help|a}}}|{{{help|b}}}|{{<includeonly>subst:</includeonly>!}}help={{{help}}}}}{{<includeonly>subst:</includeonly>#ifeq:{{{outcome|a}}}|{{{outcome|b}}}|{{<includeonly>subst:</includeonly>!}}outcome={{{outcome}}}}}{{<includeonly>subst:</includeonly>#ifeq:{{{target|a}}}|{{{target|b}}}|{{<includeonly>subst:</includeonly>!}}target={{{target}}}}}}}
<!-- End of AfD message, feel free to edit beyond this point --><noinclude>
{{documentation}}<!-- Add categories and interwikis to the /doc subpage, not here! --></noinclude>
dgezkllqp45z98ovhbbqzmj1s7p6bvs
737637
737636
2026-04-11T19:54:16Z
Novem Linguae
49714
1 revision imported from [[:en:Template:Afdx]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737636
wikitext
text/x-wiki
<!-- Please do not remove or change this AfD message until the discussion has been closed. -->
{{AfDM|page={{<includeonly>subst:</includeonly>PAGENAME}} ({{<includeonly>subst:</includeonly>#ifeq:{{{1|a}}}|{{{1|b}}}|{{{1}}}|2nd}} nomination)|year={{<includeonly>subst:</includeonly>CURRENTYEAR}}|month={{<includeonly>subst:</includeonly>CURRENTMONTHNAMEGEN}}|day={{<includeonly>subst:</includeonly>CURRENTDAY}}|substed=yes{{<includeonly>subst:</includeonly>ns:0}}|origtag=afdx{{<includeonly>subst:</includeonly>#ifeq:{{{help|a}}}|{{{help|b}}}|{{<includeonly>subst:</includeonly>!}}help={{{help}}}}}{{<includeonly>subst:</includeonly>#ifeq:{{{outcome|a}}}|{{{outcome|b}}}|{{<includeonly>subst:</includeonly>!}}outcome={{{outcome}}}}}{{<includeonly>subst:</includeonly>#ifeq:{{{target|a}}}|{{{target|b}}}|{{<includeonly>subst:</includeonly>!}}target={{{target}}}}}}}
<!-- End of AfD message, feel free to edit beyond this point --><noinclude>
{{documentation}}<!-- Add categories and interwikis to the /doc subpage, not here! --></noinclude>
dgezkllqp45z98ovhbbqzmj1s7p6bvs
Template:AfDM
10
102646
737650
381008
2024-02-02T00:07:17Z
en>Paine Ellsworth
0
per edit request on talk page - add [[WP:RCAT|rcat template]]s
737650
wikitext
text/x-wiki
#REDIRECT [[Template:Article for deletion/dated]]
{{Redirect category shell|
{{R from move}}
{{R from template shortcut}}
{{R to subpage}}
}}
5y7m8r236la7p80ac5j9opgzl8nxgdg
737651
737650
2026-04-11T19:54:19Z
Novem Linguae
49714
1 revision imported from [[:en:Template:AfDM]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737650
wikitext
text/x-wiki
#REDIRECT [[Template:Article for deletion/dated]]
{{Redirect category shell|
{{R from move}}
{{R from template shortcut}}
{{R to subpage}}
}}
5y7m8r236la7p80ac5j9opgzl8nxgdg
Template:Afdx/doc
10
102647
737654
381020
2020-04-23T22:10:53Z
en>Vanisaac
0
/* See also */clean up per [[WP:CAT#T]] and [[WP:AWBREQ]] add template:Sandbox other
737654
wikitext
text/x-wiki
{{documentation subpage}}
{{Subst only|auto=yes}}
{{Twinkle standard installation}}
{{main|Wikipedia:Articles for deletion}}
This template will categorise articles into [[:Category:Articles for deletion]]. This [[Wikipedia:Template|template]] is a [[Wikipedia:Avoid self-references|self-reference]] and so is part of the Wikipedia project rather than the encyclopedic content.
This template should always be [[Wikipedia:Template substitution|substituted]] onto pages it appears on, because it requires that the <nowiki>{{PAGENAME}}</nowiki> [[Help:Variable|variable]] be substituted. (This is so that the link to the AFD discussion does not break when the page is renamed during AFD discussions.) If the template is not substituted, a warning message is shown instead.
This template results in 3 lines of wikitext that make use of {{tl|AfDM}}. This template is intended for renominating articles that have already been nominated for deletion before. For nominating articles for the first time, use the {{tl|afd}} template instead.
=== Usage ===
For [[Wikipedia:Proposed deletion]] use {{[[Template:Prod|Prod]]}}. [[WP:PROD]] takes load off [[WP:AFD]] and should always be used instead if reasonable.
<nowiki>{{subst:afdx}}</nowiki>
<nowiki>{{subst:afdx|3rd}}</nowiki>
<nowiki>{{subst:afdx|4th}}</nowiki>
This template will place a notice that the page has been nominated for deletion. It should be placed at the top of the page and substituted.
Equivalent results can also be achieved using the normal {{tl|afd}} template, at the cost of some extra typing. Specifically, the three examples above produce exactly the same results as:
<nowiki>{{subst:afd|</nowiki>''PAGENAME'' (2nd nomination)}}
<nowiki>{{subst:afd|</nowiki>''PAGENAME'' (3rd nomination)}}
<nowiki>{{subst:afd|</nowiki>''PAGENAME'' (4th nomination)}}
Where <code>''PAGENAME''</code> is the title of the page the template is being placed on.
=== See also ===
* [[Wikipedia:Criteria for speedy deletion|Criteria for speedy deletion]]
{{Afd see also documentation}}
<includeonly>{{Sandbox other||
<!-- categories and interwiki links -->
[[Category:Articles for deletion templates]]
[[Category:Deletion tags]]
}}</includeonly>
84r6b943537xg7vseyi209punii4yra
737655
737654
2026-04-11T19:54:20Z
Novem Linguae
49714
1 revision imported from [[:en:Template:Afdx/doc]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737654
wikitext
text/x-wiki
{{documentation subpage}}
{{Subst only|auto=yes}}
{{Twinkle standard installation}}
{{main|Wikipedia:Articles for deletion}}
This template will categorise articles into [[:Category:Articles for deletion]]. This [[Wikipedia:Template|template]] is a [[Wikipedia:Avoid self-references|self-reference]] and so is part of the Wikipedia project rather than the encyclopedic content.
This template should always be [[Wikipedia:Template substitution|substituted]] onto pages it appears on, because it requires that the <nowiki>{{PAGENAME}}</nowiki> [[Help:Variable|variable]] be substituted. (This is so that the link to the AFD discussion does not break when the page is renamed during AFD discussions.) If the template is not substituted, a warning message is shown instead.
This template results in 3 lines of wikitext that make use of {{tl|AfDM}}. This template is intended for renominating articles that have already been nominated for deletion before. For nominating articles for the first time, use the {{tl|afd}} template instead.
=== Usage ===
For [[Wikipedia:Proposed deletion]] use {{[[Template:Prod|Prod]]}}. [[WP:PROD]] takes load off [[WP:AFD]] and should always be used instead if reasonable.
<nowiki>{{subst:afdx}}</nowiki>
<nowiki>{{subst:afdx|3rd}}</nowiki>
<nowiki>{{subst:afdx|4th}}</nowiki>
This template will place a notice that the page has been nominated for deletion. It should be placed at the top of the page and substituted.
Equivalent results can also be achieved using the normal {{tl|afd}} template, at the cost of some extra typing. Specifically, the three examples above produce exactly the same results as:
<nowiki>{{subst:afd|</nowiki>''PAGENAME'' (2nd nomination)}}
<nowiki>{{subst:afd|</nowiki>''PAGENAME'' (3rd nomination)}}
<nowiki>{{subst:afd|</nowiki>''PAGENAME'' (4th nomination)}}
Where <code>''PAGENAME''</code> is the title of the page the template is being placed on.
=== See also ===
* [[Wikipedia:Criteria for speedy deletion|Criteria for speedy deletion]]
{{Afd see also documentation}}
<includeonly>{{Sandbox other||
<!-- categories and interwiki links -->
[[Category:Articles for deletion templates]]
[[Category:Deletion tags]]
}}</includeonly>
84r6b943537xg7vseyi209punii4yra
Template:Article for deletion/dated/doc
10
102806
737678
382036
2026-04-03T20:10:01Z
en>Chaotic Enby
0
/* TemplateData */ my hot take is that most people are lazy, including myself
737678
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) -->
{{Nosubst}}
{{Wikipedia:Article alerts/Bot use warning}}
This template is used to nominate an article for deletion at [[Wikipedia:Articles for deletion]].
Do '''not''' use this template directly. Instead, use this code:
<syntaxhighlight lang="wikitext">{{subst:afd}}</syntaxhighlight>
The {{tl|afd}} template will automatically transclude this template once it has been [[WP:substituted|substituted]].
Better yet, use [[WP:Twinkle|Twinkle]] to nominate articles for deletion, since the nomination process has several other steps as well (creating the deletion discussion page, adding it to the daily log pages, adding it to the deletion sorting pages maintained by [[Wikipedia:WikiProject Deletion sorting]].
== Redirects ==
* [[Template:AfDM]]
* [[Template:Afd/dated]]
== TemplateData ==
{{TemplateData header}}
<templatedata>
{
"params": {
"substed": {
"label": "Substituted?",
"description": "If this value is anything but \"yes\", the template produces the error message \"This template must be substituted. Replace {{afd with {{subst:afd.\" DO NOT set this parameter manually, as Template:Afd does this automatically instead.",
"example": "yes",
"type": "string",
"suggestedvalues": [
"yes",
"no"
],
"required": true
},
"page": {
"label": "Article to delete",
"description": "The title of the article being deleted, if not the article that this template is being transcluded on. If not specified, this template defaults to assuming that the page it's on is the one being deleted.",
"example": "Weather in London",
"type": "wiki-page-name",
"autovalue": "{{PAGENAME}}",
"suggested": true
},
"help": {
"label": "Display help?",
"description": "If the value is anything but \"off\" (or omitted entirely), a message on the steps to nominate an article for deletion is provided.",
"example": "on",
"type": "string",
"suggestedvalues": [
"off",
"on"
]
},
"logdate": {
"aliases": [
"date"
],
"label": "Log date",
"description": "The date for which the AfD discussion page should be added to the corresponding daily AfD log. This must be given in year-month-day format, with the month's name specified. Only used if the help message is shown. If used, the \"year\", \"month\", and \"day\" parameters are not needed.",
"example": "2024 February 12",
"type": "string",
"autovalue": "{{subst:CURRENTYEAR}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTDAY}}",
"suggested": true
},
"year": {
"label": "Year",
"description": "The YEAR in which the article is being nominated for deletion, for the purpose of adding to the AfD daily logpage. Don't use this if you're using the \"logdate\" parameter.",
"example": "2024",
"type": "number",
"autovalue": "{{subst:CURRENTYEAR}}",
"suggested": true
},
"month": {
"label": "Month",
"description": "The MONTH in which the article is being nominated for deletion, for the purpose of adding to the AfD daily logpage. Don't use this if you're using the \"logdate\" parameter.",
"example": "February",
"type": "string",
"suggestedvalues": [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
],
"autovalue": "{{subst:CURRENTMONTHNAME}}",
"suggested": true
},
"day": {
"label": "Day",
"description": "The DAY in which the article is being nominated for deletion, for the purpose of adding to the AfD daily logpage. Don't use this if you're using the \"logdate\" parameter.",
"example": "12",
"type": "number",
"autovalue": "{{subst:CURRENTDAY}}",
"suggestedvalues": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"20",
"21",
"22",
"23",
"24",
"25",
"26",
"27",
"28",
"29",
"30",
"31"
],
"suggested": true
},
"category": {
"label": "Category",
"description": "If specified, this template adds the page to the corresponding category. PLEASE WIKILINK THE CATEGORY NAME, as the template does not work properly if you do not.",
"example": "[[Category:Articles for deletion]]",
"type": "content",
"autovalue": "[[Category:Articles for deletion]]"
},
"origtag": {
"label": "Original tag",
"description": "The original template that was used to invoke this template. DO NOT SPECIFY THIS PARAMETER MANUALLY! This parameter is usually omitted, but if it is set, it is almost always set to \"afd\".",
"example": "afd",
"type": "string",
"suggestedvalues": [
"afd"
],
"autovalue": "afd"
},
"timestamp": {
"label": "Timestamp",
"description": "Timestamp that the article was nominated for deletion.",
"suggested": true
},
"outcome": {
"label": "Outcome",
"description": "Desired outcome of the process.",
"type": "string",
"suggestedvalues": [
"deletion",
"draft",
"merging",
"redirecting"
],
"autovalue": "deletion"
},
"target": {
"label": "Target",
"description": "Target of the process if merging or redirecting.",
"type": "wiki-page-name"
}
},
"description": "A helper template to nominate articles for deletion. DO NOT transclude this template directly; instead, use {{subst:afd}}, which fills in the template automatically.",
"format": "block"
}</templatedata>
== See also ==
{{Template:Afd see also documentation}}
<includeonly>{{Sandbox other||
<!-- Categories below this line, please; interwikis at Wikidata -->
[[Category:Articles for deletion templates]]
[[Category:Deletion tags]]
}}</includeonly>
h6tt8reoiblqgzsdnme66yezbamy56n
737679
737678
2026-04-11T19:54:54Z
Novem Linguae
49714
1 revision imported from [[:en:Template:Article_for_deletion/dated/doc]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737678
wikitext
text/x-wiki
{{Documentation subpage}}
<!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) -->
{{Nosubst}}
{{Wikipedia:Article alerts/Bot use warning}}
This template is used to nominate an article for deletion at [[Wikipedia:Articles for deletion]].
Do '''not''' use this template directly. Instead, use this code:
<syntaxhighlight lang="wikitext">{{subst:afd}}</syntaxhighlight>
The {{tl|afd}} template will automatically transclude this template once it has been [[WP:substituted|substituted]].
Better yet, use [[WP:Twinkle|Twinkle]] to nominate articles for deletion, since the nomination process has several other steps as well (creating the deletion discussion page, adding it to the daily log pages, adding it to the deletion sorting pages maintained by [[Wikipedia:WikiProject Deletion sorting]].
== Redirects ==
* [[Template:AfDM]]
* [[Template:Afd/dated]]
== TemplateData ==
{{TemplateData header}}
<templatedata>
{
"params": {
"substed": {
"label": "Substituted?",
"description": "If this value is anything but \"yes\", the template produces the error message \"This template must be substituted. Replace {{afd with {{subst:afd.\" DO NOT set this parameter manually, as Template:Afd does this automatically instead.",
"example": "yes",
"type": "string",
"suggestedvalues": [
"yes",
"no"
],
"required": true
},
"page": {
"label": "Article to delete",
"description": "The title of the article being deleted, if not the article that this template is being transcluded on. If not specified, this template defaults to assuming that the page it's on is the one being deleted.",
"example": "Weather in London",
"type": "wiki-page-name",
"autovalue": "{{PAGENAME}}",
"suggested": true
},
"help": {
"label": "Display help?",
"description": "If the value is anything but \"off\" (or omitted entirely), a message on the steps to nominate an article for deletion is provided.",
"example": "on",
"type": "string",
"suggestedvalues": [
"off",
"on"
]
},
"logdate": {
"aliases": [
"date"
],
"label": "Log date",
"description": "The date for which the AfD discussion page should be added to the corresponding daily AfD log. This must be given in year-month-day format, with the month's name specified. Only used if the help message is shown. If used, the \"year\", \"month\", and \"day\" parameters are not needed.",
"example": "2024 February 12",
"type": "string",
"autovalue": "{{subst:CURRENTYEAR}} {{subst:CURRENTMONTHNAME}} {{subst:CURRENTDAY}}",
"suggested": true
},
"year": {
"label": "Year",
"description": "The YEAR in which the article is being nominated for deletion, for the purpose of adding to the AfD daily logpage. Don't use this if you're using the \"logdate\" parameter.",
"example": "2024",
"type": "number",
"autovalue": "{{subst:CURRENTYEAR}}",
"suggested": true
},
"month": {
"label": "Month",
"description": "The MONTH in which the article is being nominated for deletion, for the purpose of adding to the AfD daily logpage. Don't use this if you're using the \"logdate\" parameter.",
"example": "February",
"type": "string",
"suggestedvalues": [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
],
"autovalue": "{{subst:CURRENTMONTHNAME}}",
"suggested": true
},
"day": {
"label": "Day",
"description": "The DAY in which the article is being nominated for deletion, for the purpose of adding to the AfD daily logpage. Don't use this if you're using the \"logdate\" parameter.",
"example": "12",
"type": "number",
"autovalue": "{{subst:CURRENTDAY}}",
"suggestedvalues": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"20",
"21",
"22",
"23",
"24",
"25",
"26",
"27",
"28",
"29",
"30",
"31"
],
"suggested": true
},
"category": {
"label": "Category",
"description": "If specified, this template adds the page to the corresponding category. PLEASE WIKILINK THE CATEGORY NAME, as the template does not work properly if you do not.",
"example": "[[Category:Articles for deletion]]",
"type": "content",
"autovalue": "[[Category:Articles for deletion]]"
},
"origtag": {
"label": "Original tag",
"description": "The original template that was used to invoke this template. DO NOT SPECIFY THIS PARAMETER MANUALLY! This parameter is usually omitted, but if it is set, it is almost always set to \"afd\".",
"example": "afd",
"type": "string",
"suggestedvalues": [
"afd"
],
"autovalue": "afd"
},
"timestamp": {
"label": "Timestamp",
"description": "Timestamp that the article was nominated for deletion.",
"suggested": true
},
"outcome": {
"label": "Outcome",
"description": "Desired outcome of the process.",
"type": "string",
"suggestedvalues": [
"deletion",
"draft",
"merging",
"redirecting"
],
"autovalue": "deletion"
},
"target": {
"label": "Target",
"description": "Target of the process if merging or redirecting.",
"type": "wiki-page-name"
}
},
"description": "A helper template to nominate articles for deletion. DO NOT transclude this template directly; instead, use {{subst:afd}}, which fills in the template automatically.",
"format": "block"
}</templatedata>
== See also ==
{{Template:Afd see also documentation}}
<includeonly>{{Sandbox other||
<!-- Categories below this line, please; interwikis at Wikidata -->
[[Category:Articles for deletion templates]]
[[Category:Deletion tags]]
}}</includeonly>
h6tt8reoiblqgzsdnme66yezbamy56n
Template:Old XfD multi
10
104184
737666
392708
2019-09-22T15:02:21Z
en>Primefac
0
[[Wikipedia:Templates for discussion/Log/2019 September 9#Template:Old AfD]] closed as merge ([[WP:XFDC|XFDcloser]])
737666
wikitext
text/x-wiki
{{#invoke:Old XfD multi|main}}<noinclude>
{{documentation}}
</noinclude>
0wemxrhj17bozbsuvnm6g83uio03yqw
737667
737666
2026-04-11T19:54:43Z
Novem Linguae
49714
1 revision imported from [[:en:Template:Old_XfD_multi]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737666
wikitext
text/x-wiki
{{#invoke:Old XfD multi|main}}<noinclude>
{{documentation}}
</noinclude>
0wemxrhj17bozbsuvnm6g83uio03yqw
Wikipedia:Sandbox
4
107092
737731
736690
2026-04-12T04:19:33Z
~2026-22423-73
73516
737731
wikitext
text/x-wiki
<noinclude>{{Sandbox}}</noinclude>
test
== Please start your testing below this line ==
olrjlr0kpuzl4qdbivn0zio7lq8kdol
Translate test/fr
0
113093
737603
721845
2026-04-11T16:15:33Z
FuzzyBot
18251
Updating to match new version of source page
737603
wikitext
text/x-wiki
<languages/>
{{formatnum|10}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|Documentation de MediaWiki]]
Vous êtes dans un '''manuel technique pour le logiciel MediaWiki'''.
Celui-ci contient des informations pour les '''développeurs''' et les '''administrateurs système''' concernant l’'''installation''', la '''gestion''' et le '''développement''' du logiciel MediaWiki.
<div lang="en" dir="ltr" class="mw-content-ltr">
This manual is '''not for end users''' of MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
If you are looking for '''documentation to help you use MediaWiki, read the [[Special:MyLanguage/Help:Contents|MediaWiki Handbook]].'''
</div>
<span id="Main_sections"></span>
==Rubriques principales==
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For system administrators ===
</div>
; [[Special:MyLanguage/Manual:Installation guide|<div lang="en" dir="ltr" class="mw-content-ltr">
Installation
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to setting up a new MediaWiki installation.
</div>
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Installing
</div>]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Initial configuration
</div>]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|<div lang="en" dir="ltr" class="mw-content-ltr">
Alphabetical list of settings
</div>]] | [[Special:MyLanguage/Manual:Configuration settings|<div lang="en" dir="ltr" class="mw-content-ltr">
Settings listed by function
</div>]]
; {{ll|Manual:System administration|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to do administrative tasks on your wiki.
</div>
: [[Special:MyLanguage/Manual:Backing up a wiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Backing up
</div>]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to upgrade your MediaWiki installation.
</div>
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Sysadmin hub}}.
</div>''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For developers ===
</div>
; <div lang="en" dir="ltr" class="mw-content-ltr">
Architecture
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the key parts of MediaWiki's source code.
</div>
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ <div lang="en" dir="ltr" class="mw-content-ltr">
Doxygen-generated documentation
</div>]
; {{ll|Manual:Database layout|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about the database architecture used by MediaWiki.
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
{{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
</div>
; {{ll|Manual:Developing extensions|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the ways to create a new MediaWiki extension.
</div>
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|<div lang="en" dir="ltr" class="mw-content-ltr">
Tag
</div>]] | [[Special:MyLanguage/Manual:Special pages|<div lang="en" dir="ltr" class="mw-content-ltr">
Special page
</div>]] | {{ll|Manual:Skins|nsp=0}}
; <div lang="en" dir="ltr" class="mw-content-ltr">
Web access
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
</div>
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Developer hub}}.
</div>''
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Others ===
</div>
; [[Special:MyLanguage/Manual:FAQ|<div lang="en" dir="ltr" class="mw-content-ltr">
MediaWiki FAQ
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Frequently asked questions about MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Browsing the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
There are multiple ways to browse through the documentation.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
</div>
* [[Special:Allpages/Manual:]] - <div lang="en" dir="ltr" class="mw-content-ltr">
An automatically generated list of all pages in the Manual: namespace.
</div>
* [[:Category:Manual]] - <div lang="en" dir="ltr" class="mw-content-ltr">
the top-level Manual category
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Improving the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There are still a lot of holes in this manual!
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
See the [[Special:MyLanguage/Manual:Contents/To do|'to do' page]] for details.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There is still content on http://meta.wikimedia.org which may need to be migrated.
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
If you can't find information on a particular issue in this documentation, please visit [[meta:MediaWiki_FAQ]] and [[meta:Help:Contents]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* See also [[Project:Current issues]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== MediaWiki Virtual Library ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
</div>
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
1rhup65y02j7u7on5gfer0jg7rc98s6
737611
737603
2026-04-11T16:20:05Z
FuzzyBot
18251
Updating to match new version of source page
737611
wikitext
text/x-wiki
<languages/>
{{formatnum|10|{{SUBPAGENAME}}}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|Documentation de MediaWiki]]
Vous êtes dans un '''manuel technique pour le logiciel MediaWiki'''.
Celui-ci contient des informations pour les '''développeurs''' et les '''administrateurs système''' concernant l’'''installation''', la '''gestion''' et le '''développement''' du logiciel MediaWiki.
<div lang="en" dir="ltr" class="mw-content-ltr">
This manual is '''not for end users''' of MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
If you are looking for '''documentation to help you use MediaWiki, read the [[Special:MyLanguage/Help:Contents|MediaWiki Handbook]].'''
</div>
<span id="Main_sections"></span>
==Rubriques principales==
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For system administrators ===
</div>
; [[Special:MyLanguage/Manual:Installation guide|<div lang="en" dir="ltr" class="mw-content-ltr">
Installation
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to setting up a new MediaWiki installation.
</div>
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Installing
</div>]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Initial configuration
</div>]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|<div lang="en" dir="ltr" class="mw-content-ltr">
Alphabetical list of settings
</div>]] | [[Special:MyLanguage/Manual:Configuration settings|<div lang="en" dir="ltr" class="mw-content-ltr">
Settings listed by function
</div>]]
; {{ll|Manual:System administration|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to do administrative tasks on your wiki.
</div>
: [[Special:MyLanguage/Manual:Backing up a wiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Backing up
</div>]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to upgrade your MediaWiki installation.
</div>
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Sysadmin hub}}.
</div>''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For developers ===
</div>
; <div lang="en" dir="ltr" class="mw-content-ltr">
Architecture
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the key parts of MediaWiki's source code.
</div>
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ <div lang="en" dir="ltr" class="mw-content-ltr">
Doxygen-generated documentation
</div>]
; {{ll|Manual:Database layout|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about the database architecture used by MediaWiki.
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
{{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
</div>
; {{ll|Manual:Developing extensions|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the ways to create a new MediaWiki extension.
</div>
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|<div lang="en" dir="ltr" class="mw-content-ltr">
Tag
</div>]] | [[Special:MyLanguage/Manual:Special pages|<div lang="en" dir="ltr" class="mw-content-ltr">
Special page
</div>]] | {{ll|Manual:Skins|nsp=0}}
; <div lang="en" dir="ltr" class="mw-content-ltr">
Web access
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
</div>
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Developer hub}}.
</div>''
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Others ===
</div>
; [[Special:MyLanguage/Manual:FAQ|<div lang="en" dir="ltr" class="mw-content-ltr">
MediaWiki FAQ
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Frequently asked questions about MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Browsing the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
There are multiple ways to browse through the documentation.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
</div>
* [[Special:Allpages/Manual:]] - <div lang="en" dir="ltr" class="mw-content-ltr">
An automatically generated list of all pages in the Manual: namespace.
</div>
* [[:Category:Manual]] - <div lang="en" dir="ltr" class="mw-content-ltr">
the top-level Manual category
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Improving the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There are still a lot of holes in this manual!
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
See the [[Special:MyLanguage/Manual:Contents/To do|'to do' page]] for details.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There is still content on http://meta.wikimedia.org which may need to be migrated.
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
If you can't find information on a particular issue in this documentation, please visit [[meta:MediaWiki_FAQ]] and [[meta:Help:Contents]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* See also [[Project:Current issues]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== MediaWiki Virtual Library ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
</div>
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
k7nzc7z4fx9pal9f0chnjnxndhesvyr
737617
737611
2026-04-11T16:25:30Z
FuzzyBot
18251
Updating to match new version of source page
737617
wikitext
text/x-wiki
<languages/>
{{formatnum|10|{{PAGELANGUAGE}}}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|Documentation de MediaWiki]]
Vous êtes dans un '''manuel technique pour le logiciel MediaWiki'''.
Celui-ci contient des informations pour les '''développeurs''' et les '''administrateurs système''' concernant l’'''installation''', la '''gestion''' et le '''développement''' du logiciel MediaWiki.
<div lang="en" dir="ltr" class="mw-content-ltr">
This manual is '''not for end users''' of MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
If you are looking for '''documentation to help you use MediaWiki, read the [[Special:MyLanguage/Help:Contents|MediaWiki Handbook]].'''
</div>
<span id="Main_sections"></span>
==Rubriques principales==
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For system administrators ===
</div>
; [[Special:MyLanguage/Manual:Installation guide|<div lang="en" dir="ltr" class="mw-content-ltr">
Installation
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to setting up a new MediaWiki installation.
</div>
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Installing
</div>]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Initial configuration
</div>]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|<div lang="en" dir="ltr" class="mw-content-ltr">
Alphabetical list of settings
</div>]] | [[Special:MyLanguage/Manual:Configuration settings|<div lang="en" dir="ltr" class="mw-content-ltr">
Settings listed by function
</div>]]
; {{ll|Manual:System administration|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to do administrative tasks on your wiki.
</div>
: [[Special:MyLanguage/Manual:Backing up a wiki|<div lang="en" dir="ltr" class="mw-content-ltr">
Backing up
</div>]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Guide to upgrade your MediaWiki installation.
</div>
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Sysadmin hub}}.
</div>''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<div lang="en" dir="ltr" class="mw-content-ltr">
=== For developers ===
</div>
; <div lang="en" dir="ltr" class="mw-content-ltr">
Architecture
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the key parts of MediaWiki's source code.
</div>
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ <div lang="en" dir="ltr" class="mw-content-ltr">
Doxygen-generated documentation
</div>]
; {{ll|Manual:Database layout|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about the database architecture used by MediaWiki.
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
{{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
</div>
; {{ll|Manual:Developing extensions|nsp=0}}
: <div lang="en" dir="ltr" class="mw-content-ltr">
An overview of the ways to create a new MediaWiki extension.
</div>
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|<div lang="en" dir="ltr" class="mw-content-ltr">
Tag
</div>]] | [[Special:MyLanguage/Manual:Special pages|<div lang="en" dir="ltr" class="mw-content-ltr">
Special page
</div>]] | {{ll|Manual:Skins|nsp=0}}
; <div lang="en" dir="ltr" class="mw-content-ltr">
Web access
</div>
: <div lang="en" dir="ltr" class="mw-content-ltr">
Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
</div>
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''<div lang="en" dir="ltr" class="mw-content-ltr">
More on {{ll|Developer hub}}.
</div>''
|}
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Others ===
</div>
; [[Special:MyLanguage/Manual:FAQ|<div lang="en" dir="ltr" class="mw-content-ltr">
MediaWiki FAQ
</div>]]
: <div lang="en" dir="ltr" class="mw-content-ltr">
Frequently asked questions about MediaWiki.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Browsing the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
There are multiple ways to browse through the documentation.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Readers having trouble finding a particular topic in the section above may find the following ways of browsing to be helpful.
</div>
* [[Special:Allpages/Manual:]] - <div lang="en" dir="ltr" class="mw-content-ltr">
An automatically generated list of all pages in the Manual: namespace.
</div>
* [[:Category:Manual]] - <div lang="en" dir="ltr" class="mw-content-ltr">
the top-level Manual category
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== Improving the manual ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There are still a lot of holes in this manual!
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
See the [[Special:MyLanguage/Manual:Contents/To do|'to do' page]] for details.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* There is still content on http://meta.wikimedia.org which may need to be migrated.
</div> <div lang="en" dir="ltr" class="mw-content-ltr">
If you can't find information on a particular issue in this documentation, please visit [[meta:MediaWiki_FAQ]] and [[meta:Help:Contents]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[Project:Manual]]''' is a place to discuss and co-ordinate the development of the Manual: namespace.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* See also [[Project:Current issues]].
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
== MediaWiki Virtual Library ==
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)''' has manuals, guides, and collections of selected articles in PDF form you create on-the-fly
</div>
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
040076ftpf824d3dwflaxytxu35n06f
Trenbolone
0
113504
737730
562967
2026-04-12T00:03:26Z
InternetArchiveBot
34092
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
737730
wikitext
text/x-wiki
{{Distinguish|Trestolone}}
{{Drugbox
| Verifiedfields = changed
| Watchedfields = changed
| verifiedrevid = 470612755
| IUPAC_name = (8''S'',13''S'',14''S'',17''S'')-17-Hydroxy-13-methyl-2,6,7,8,14,15,16,17-octahydro-1''H''-cyclopenta[''a'']phenanthren-3-one
| image = Trenbolone.svg
| width = 225px
<!--Clinical data-->
| tradename =
| Drugs.com = {{Drugs.com|international|trenbolone}}
| pregnancy_category = X
| legal_CA = Schedule IV
| legal_US = Schedule III
| legal_status =
| routes_of_administration = [[Intramuscular injection]] (as [[trenbolone ester|ester]]s)
| class = [[Androgen]]; [[Anabolic steroid]]; [[Progestogen]]
<!--Pharmacokinetic data-->
| bioavailability = [[Intramuscular injection|Intramuscular]]: 100%{{Citation needed|date=November 2017}}
| protein_bound =
| metabolism = [[Liver]]
| elimination_half-life = 48–72 hours{{Citation needed|date=November 2017}}
| excretion = [[Urine]]
<!--Identifiers-->
| CAS_number_Ref = {{cascite|changed|??}}
| CAS_number = 10161-33-8
| ATC_prefix = None
| PubChem = 25015
| DrugBank_Ref = {{drugbankcite|correct|drugbank}}
| ChemSpiderID_Ref = {{chemspidercite|correct|chemspider}}
| ChemSpiderID = 23383
| UNII_Ref = {{fdacite|correct|FDA}}
| UNII = P53R4420TR
| synonyms = Trienolone; Trienbolone; RU-2341; Δ<sup>9,11</sup>-Nandrolone; 19-Nor-δ<sup>9,11</sup>-testosterone; Estra-4,9,11-trien-17β-ol-3-one
<!--Chemical data-->
| C=18 | H=22 | O=2
| SMILES = O=C4\C=C2/C(=C1/C=C\[C@@]3([C@@H](O)CC[C@H]3[C@@H]1CC2)C)CC4
| StdInChI_Ref = {{stdinchicite|correct|chemspider}}
| StdInChI = 1S/C18H22O2/c1-18-9-8-14-13-5-3-12(19)10-11(13)2-4-15(14)16(18)6-7-17(18)20/h8-10,15-17,20H,2-7H2,1H3/t15-,16+,17+,18+/m1/s1
| StdInChIKey_Ref = {{stdinchicite|correct|chemspider}}
| StdInChIKey = MEHHPFQKXOUFFV-OWSLCNJRSA-N
}}
'''Trenbolone''' is an [[androgen]] and [[anabolic steroid]] (AAS) of the [[nandrolone]] group which itself was never marketed.<ref name="Elks2014">{{cite book|author=J. Elks|title=The Dictionary of Drugs: Chemical Data: Chemical Data, Structures and Bibliographies|url=https://books.google.com/books?id=0vXTBwAAQBAJ|date=14 November 2014|publisher=Springer|isbn=978-1-4757-2085-3}}</ref><ref name="IndexNominum2000">{{cite book|title=Index Nominum 2000: International Drug Directory|url=https://books.google.com/books?id=5GpcTQD_L2oC&pg=PA1636|date=January 2000|publisher=Taylor & Francis|isbn=978-3-88763-075-1|page=1591}}</ref><ref name="MortonHall2012">{{cite book|author1=I.K. Morton|author2=Judith M. Hall|title=Concise Dictionary of Pharmacological Agents: Properties and Synonyms|url=https://books.google.com/books?id=tsjrCAAAQBAJ&pg=PA279|date=6 December 2012|publisher=Springer Science & Business Media|isbn=978-94-011-4439-1|pages=279–}}</ref><ref name="Drugs.com">{{Cite web |url=https://www.drugs.com/international/trenbolone.html |title=Archived copy |access-date=2020-07-06 |archive-date=2020-07-07 |archive-url=https://web.archive.org/web/20200707053342/https://www.drugs.com/international/trenbolone.html |url-status=dead }}</ref><ref name="Llewellyn2011">{{cite book|author=William Llewellyn|title=Anabolics|url=https://books.google.com/books?id=afKLA-6wW0oC&pg=PT618|year=2011|publisher=Molecular Nutrition Llc|isbn=978-0-9828280-1-4|pages=491–499, 618–,724–}}</ref> [[Trenbolone ester]] [[prodrug]]s, including [[trenbolone acetate]] (brand names '''Finajet''', '''Finaplix''', others) and [[trenbolone hexahydrobenzylcarbonate]] (brand names '''Parabolan''', '''Hexabolan'''), are or have been marketed for veterinary and clinical use.<ref name="Elks2014" /><ref name="IndexNominum2000" /><ref name="MortonHall2012" /><ref name="Llewellyn2011" /><ref name="Nichols2012">{{cite web | title = Implant Strategies for Finishing Cattle using Revalor® (trenbolone acetate and estradiol), Finaplix® (trenbolone) and/or Ralgro® (zeranol)| url = http://www.depts.ttu.edu/afs/implantdb/dbhome/Revalor%20Tech%20Bulletin%2012.pdf | publisher = Merck Animal Health | last1 = Nichols | first1 = Wade | last2 = Hutcheson | first2 = John | last3 = Streeter | first3 = Marshall | last4 = Corrigan | first4 = Mark | last5 = Nuttelman | first5 = Brandon }}</ref><ref name="Kicman2008">{{cite journal|last1=Kicman|first1=A T|title=Pharmacology of anabolic steroids|journal=British Journal of Pharmacology|volume=154|issue=3|year=2008|pages=502–521|issn=0007-1188|doi=10.1038/bjp.2008.165|pmid=18500378|pmc=2439524}}</ref> Trenbolone acetate is used in [[veterinary medicine]] in [[livestock]] to increase [[myotrophy|muscle growth]] and [[appetite]], while trenbolone hexahydrobenzylcarbonate was formerly used clinically in humans but is now no longer marketed.<ref name="Elks2014" /><ref name="IndexNominum2000" /><ref name="MortonHall2012" /><ref name="Llewellyn2011" /> In addition, although it is not approved for clinical or veterinary use, [[trenbolone enanthate]] is sometimes sold on the [[black market]] under the nickname '''Trenabol'''.<ref name="Llewellyn2011" />
[[File:A vial of injectable Trenbolone..jpg|thumb|223x223px|A vial of injectable [[trenbolone acetate]].]]
==Uses==
===Veterinary===
Trenbolone, as trenbolone acetate, improves [[muscle]] mass, feed efficiency, and mineral absorption in [[cattle]].<ref name="Llewellyn2011" />
==Side effects==
{{See also|Anabolic steroid#Adverse effects}}
==Pharmacology==
===Pharmacodynamics===
Trenbolone has both [[anabolic]] and [[androgenic]] effects.<ref name="Llewellyn2011" /> Once [[metabolized]], trenbolone esters have the effect of increasing [[ammonium]] ion uptake by muscles, leading to an increase in the rate of [[protein synthesis]]. It may also have the secondary effects of stimulating appetite and decreasing the rate of [[catabolism]], as all [[anabolic steroids]] are believed to; however, catabolism likely increases significantly once the steroid is no longer taken.<ref>http://www.sportsci.org/encyc/anabster/anabster.html{{full citation needed|date=December 2012}}</ref> At least one study in rats has shown trenbolone to cause [[gene expression]] of the [[androgen receptor]] (AR) at least as potent as [[dihydrotestosterone]] (DHT). This evidence tends to indicate trenbolone can cause an increase in male [[secondary sex characteristic]]s without the need to convert to a more potent androgen in the body.<ref>{{cite journal |doi=10.1093/toxsci/70.2.202 |title=In Vitro and in Vivo Effects of 17beta-Trenbolone: A Feedlot Effluent Contaminant |year=2002 |last1=Wilson |first1=V. S. |journal=[[Toxicological Sciences]] |volume=70 |issue=2 |pages=202–11 |pmid=12441365 |last2=Lambright |first2=C |last3=Ostby |first3=J |last4=Gray Jr |first4=LE|doi-access=free }}</ref>
Studies on metabolism are mixed, with some studies showing that it is metabolized by [[aromatase]] or [[5α-reductase]] into [[estrogen (medication)|estrogen]]ic compounds, or into 5α-reduced androgenic compounds, respectively.<ref>{{cite journal |doi=10.1016/j.steroids.2010.01.019 |title=Tissue selectivity and potential clinical applications of trenbolone (17β-hydroxyestra-4,9,11-trien-3-one): A potent anabolic steroid with reduced androgenic and estrogenic activity |year=2010 |last1=Yarrow |first1=Joshua F. |last2=McCoy |first2=Sean C. |last3=Borst |first3=Stephen E. |journal=Steroids |volume=75 |issue=6 |pages=377–89 |pmid=20138077}}</ref><ref>{{cite journal |pmid=6361192 |year=1984 |last1=Gettys |first1=TW |last2=d'Occhio |first2=MJ |last3=Henricks |first3=DM |last4=Schanbacher |first4=BD |title=Suppression of LH secretion by oestradiol, dihydrotestosterone and trenbolone acetate in the acutely castrated bull |volume=100 |issue=1 |pages=107–12 |journal=The Journal of Endocrinology |doi=10.1677/joe.0.1000107}}</ref>
Trenbolone has potency five times as high as that of [[testosterone (medication)|testosterone]].<ref name="Llewellyn2011"/><ref name="Mascie-TaylorRosetta2011">{{cite book|author1=C. G. Nicholas Mascie-Taylor|author2=Lyliane Rosetta|title=Reproduction and Adaptation: Topics in Human Reproductive Ecology|url=https://books.google.com/books?id=7eVVK3vfAc0C&pg=PA69|date=13 January 2011|publisher=Cambridge University Press|isbn=978-1-139-49430-4|pages=69–}}</ref> Trenbolone also binds with high [[affinity (pharmacology)|affinity]] to the [[progesterone receptor]],<ref name="Llewellyn2011" /><ref name="Mascie-TaylorRosetta2011" /><ref name="APMIS2001">{{cite book|title=APMIS.: Supplementum|url=https://books.google.com/books?id=szFYAAAAYAAJ|year=2001|publisher=Munksgaard|page=5339}}</ref><ref name="McKerns2013">{{cite book|author=Kenneth W. McKerns|title=Reproductive Processes and Contraception|url=https://books.google.com/books?id=JM6oBwAAQBAJ&pg=PA171|date=13 March 2013|publisher=Springer Science & Business Media|isbn=978-1-4684-3824-6|pages=171–}}</ref> Trenbolone binds to the [[glucocorticoid receptor]], as well.<ref name="APMIS2001" />
===Pharmacokinetics===
To prolong its [[elimination half-life]], trenbolone is administered as a [[prodrug]] as an [[ester]] conjugate such as [[trenbolone acetate]], [[trenbolone enanthate]], or [[trenbolone hexahydrobenzylcarbonate]].<ref name="Elks2014" /><ref name="IndexNominum2000" /><ref name="MortonHall2012" /><ref name="Llewellyn2011" /> Plasma [[lipase]]s then cleave the ester group in the bloodstream leaving free trenbolone.{{citation needed|date=June 2016}}
Trenbolone and 17-epitrenbolone are both excreted in urine as conjugates that can be hydrolyzed with beta-glucuronidase.<ref>{{cite journal |pmid=8674183 |year=1996 |last1=Schänzer |first1=W |title=Metabolism of anabolic androgenic steroids |volume=42 |issue=7 |pages=1001–20 |journal=Clinical Chemistry |doi=10.1093/clinchem/42.7.1001|doi-access=free }}</ref> This implies that trenbolone leaves the body as beta-[[glucuronide]]s or [[sulfate]]s. test123456
==Chemistry==
{{See also|List of androgens/anabolic steroids}}
Trenbolone, also known as 19-nor-δ<sup>9,11</sup>-testosterone or as estra-4,9,11-trien-17β-ol-3-one, is a [[synthetic compound|synthetic]] [[estrane]] [[steroid]] a [[chemical derivative|derivative]] of [[nandrolone]] (19-nortestosterone).<ref name="Elks2014" /><ref name="IndexNominum2000" /><ref name="Llewellyn2011" /> It is specifically nandrolone with two additional [[double bond]]s in the steroid nucleus.<ref name="Elks2014" /><ref name="IndexNominum2000" /><ref name="Llewellyn2011" /> [[Trenbolone ester]]s, which have an [[ester]] at the C17β position, include [[trenbolone acetate]], [[trenbolone enanthate]], [[trenbolone hexahydrobenzylcarbonate]], and [[trenbolone undecanoate]].<ref name="Elks2014" /><ref name="IndexNominum2000" /><ref name="Llewellyn2011" /><ref name=":0">{{Cite journal|last=Borodi|first=Gheorghe|last2=Turza|first2=Alexandru|last3=Camarasan|first3=Paula Alexandra|last4=Ulici|first4=Adelina|date=2020|title=Structural studies of Trenbolone, Trenbolone Acetate, Hexahydrobenzylcarbonate and Enanthate esters|url=http://dx.doi.org/10.1016/j.molstruc.2020.128127|journal=Journal of Molecular Structure|volume=1212|pages=128127|doi=10.1016/j.molstruc.2020.128127|issn=0022-2860|via=}}</ref>
{| class="wikitable"
|+Basic information about different types steroids included base trenbolone inside structure.
!Name:
!Trenbolone
![[Trenbolone acetate]]
![[Trenbolone enanthate]]
![[Trenbolone hexahydrobenzylcarbonate]]
(cyclohexylmethylcarbonate)
|-
|Structural<ref name=":0" />
|[[File:Trenbolone.png|frameless]]
|[[File:Trenbolone acetate.svg|frameless]]
|[[File:Trenbolone enanthate.svg|frameless]]
|[[File:Trenbolone cyclohexylmethylcarbonate.svg|frameless]]
|-
|Formula
|C<sub>18</sub>H<sub>22</sub>O<sub>2</sub>
|C<sub>20</sub>H<sub>24</sub>O<sub>3</sub>
|C<sub>25</sub>H<sub>34</sub>O<sub>3</sub>
|C<sub>26</sub>H<sub>34</sub>O<sub>4</sub>
|-
|Crystal system<ref name=":0" />
|
|monocrystalic
|monocrystalic
|monocrystalic
|-
|Elimination half life
|48-72 hours<sup>[''[[wikipedia:Citation needed|citation needed]]'']</sup>
|short
1-2 days<ref name=":0" />; 3 days<ref>{{Cite book|last=Ruiz|first=Pedro|url=https://books.google.pl/books?id=w4ZUJAdleTsC&pg=PA358&redir_esc=y#v=onepage&q&f=false|title=Lowinson and Ruiz's Substance Abuse: A Comprehensive Textbook|last2=Strain|first2=Eric C.|date=2011|publisher=Lippincott Williams & Wilkins|isbn=978-1-60547-277-5|language=en}}</ref>
|long
11 days<ref name=":0" />
|8 days<ref name=":0" />
|}
==History==
Trenbolone was first [[chemical synthesis|synthesized]] in 1963.<ref name="pmid8674183">{{cite journal | vauthors = Schänzer W | title = Metabolism of anabolic androgenic steroids | journal = Clin. Chem. | volume = 42 | issue = 7 | pages = 1001–20 | year = 1996 | pmid = 8674183 | doi = 10.1093/clinchem/42.7.1001| url = | doi-access = free }}</ref>
==Society and culture==
===Generic names===
''Trenbolone'' is the [[generic term|generic name]] of the drug and its {{abbrlink|INN|International Nonproprietary Name}} and {{abbrlink|BAN|British Approved Name}}.<ref name="Elks2014" /><ref name="IndexNominum2000" /><ref name="MortonHall2012" /> It has also been referred to as ''trienolone'' or ''trienbolone''.<ref name="Elks2014" /><ref name="IndexNominum2000" /><ref name="MortonHall2012" /><ref name="Nations1990">{{cite book|author=Food and Agriculture Organization of the United Nations|title=Residues of Some Veterinary Drugs in Animals and Foods: Monographs Prepared by the Thirty-Fourth Meeting of the Joint FAO/WHO Expert Committee on Food Additives, Geneva, 30 January-8 February 1989|url=https://books.google.com/books?id=BCw1OUlrT-QC&pg=PA88|year=1990|publisher=Food & Agriculture Org.|isbn=978-92-5-102933-6|pages=88–}}</ref>
===Legal status===
Some [[bodybuilder]]s and [[athlete]]s use trenbolone esters for their muscle-building and otherwise performance-enhancing effects.<ref name="Llewellyn2011" /> Such use is illegal in the [[United States]] and many other countries, in [[Europe]] and [[Asia]]. The DEA classifies trenbolone and its esters as [[Controlled Substances Act#Schedule III controlled substances|Schedule III controlled substance]]s under the [[Controlled Substances Act]].<ref name="FDA2009">{{cite web | title=Controlled Substances Act | url=https://www.fda.gov/regulatoryinformation/legislation/ucm148726.htm | publisher=United States Food and Drug Administration | date=11 June 2009 | accessdate=17 June 2016}}</ref> Trenbolone is classified as a Schedule 4 drug in [[Canada]]<ref>{{Cite web |url=http://laws-lois.justice.gc.ca/eng/acts/C-38.8/page-24.html?term=steroids#sched4 |title=Archived copy |access-date=2020-07-06 |archive-date=2015-02-23 |archive-url=https://web.archive.org/web/20150223001354/http://laws-lois.justice.gc.ca/eng/acts/C-38.8/page-24.html?term=steroids#sched4 |url-status=dead }}</ref> and a class C drug with no penalty for personal use or possession in the [[United Kingdom]].<ref>http://www.homeoffice.gov.uk/publications/alcohol-drugs/drugs/acmd1/anabolic-steroids-report/anabolic-steroids?view=Binary {{Webarchive|url=https://web.archive.org/web/20110922230656/http://www.homeoffice.gov.uk/publications/alcohol-drugs/drugs/acmd1/anabolic-steroids-report/anabolic-steroids?view=Binary |date=2011-09-22 }}.</ref> Use or possession of steroids without a prescription is a crime in [[Australia]].<ref>{{Cite web |url=http://www.aic.gov.au/en/crime_types/drugs_alcohol/drug_types/steroids.aspx |title=Archived copy |access-date=2020-07-06 |archive-date=2012-03-23 |archive-url=https://web.archive.org/web/20120323114641/http://www.aic.gov.au/en/crime_types/drugs_alcohol/drug_types/steroids.aspx |url-status=dead }}</ref>
===Doping in sports===
{{See also|List of doping in sport cases#Trenbolone esters}}
There are known cases of doping in sports with trenbolone esters by [[professional sports|professional]] [[athlete]]s.
==References==
{{Reflist|2}}
==Further reading==
* {{cite journal | vauthors = Meyer HH | title = Biochemistry and physiology of anabolic hormones used for improvement of meat production | journal = APMIS | volume = 109 | issue = 1 | pages = 1–8 | year = 2001 | pmid = 11297191 | doi = 10.1111/j.1600-0463.2001.tb05785.x| url = }}
* {{cite journal | vauthors = Yarrow JF, McCoy SC, Borst SE | title = Tissue selectivity and potential clinical applications of trenbolone (17beta-hydroxyestra-4,9,11-trien-3-one): A potent anabolic steroid with reduced androgenic and estrogenic activity | journal = Steroids | volume = 75 | issue = 6 | pages = 377–89 | year = 2010 | pmid = 20138077 | doi = 10.1016/j.steroids.2010.01.019 | url = }}
==External links==
*
*
{{Androgens and antiandrogens}}
{{Progestogens and antiprogestogens}}
{{Androgen receptor modulators}}
{{Progesterone receptor modulators}}
[[Category:Secondary alcohols]]
[[Category:Androgens and anabolic steroids]]
[[Category:Estranes]]
[[Category:Ketones]]
[[Category:Progestogens]]
[[Category:World Anti-Doping Agency prohibited substances]]
<noinclude>
<small>This page was moved from [[:en:Trenbolone]]. Its edit history can be viewed at [[Trenbolone/edithistory]]</small></noinclude>
9irmc0acggq9uylubqwfaygwh9dnkts
Wikipedia:Sockpuppet investigations/Test
4
115196
737710
735517
2026-04-11T20:04:29Z
DatGuy
30264
Requesting admin action, comment (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737710
wikitext
text/x-wiki
<noinclude>__TOC__</noinclude>
{{SPI archive notice|1=Test}}
{{SPIpriorcases}}
===08 July 2020===
{{SPI case status|closed}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 2}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 3}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Test SPI while GeneralNotability is working on some spihelper changes [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:43, 8 July 2020 (UTC)
* This is an open report. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:59, 9 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Trying to comment. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:08, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:39, 21 August 2020 (UTC)
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:13, 21 August 2020 (UTC)
*Test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:05, 21 August 2020 (UTC)
*{{onhold}} - Test test test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:07, 21 August 2020 (UTC)
* This is a test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:18, 8 January 2026 (UTC)
* Test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 16:12, 9 January 2026 (UTC)
* Foo [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 13:55, 9 March 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|cuhold}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 4}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{onhold}} – asd [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 11:31, 28 January 2026 (UTC)
* {{onhold}} – [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 05:12, 15 February 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|admin}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 5}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Test again. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:10, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{Clerk Request}} – Test [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 14:54, 17 March 2026 (UTC)
* Testing [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:03, 20 March 2026 (UTC)
* {{awaitingadmin}} Testing. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 20:04, 11 April 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
6w11hbahouyzqbpe0oewzx026oa1d7s
737712
737710
2026-04-11T20:04:44Z
DatGuy
30264
Requesting clerk action (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737712
wikitext
text/x-wiki
<noinclude>__TOC__</noinclude>
{{SPI archive notice|1=Test}}
{{SPIpriorcases}}
===08 July 2020===
{{SPI case status|clerk}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 2}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 3}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Test SPI while GeneralNotability is working on some spihelper changes [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:43, 8 July 2020 (UTC)
* This is an open report. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:59, 9 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Trying to comment. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:08, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:39, 21 August 2020 (UTC)
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:13, 21 August 2020 (UTC)
*Test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:05, 21 August 2020 (UTC)
*{{onhold}} - Test test test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:07, 21 August 2020 (UTC)
* This is a test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:18, 8 January 2026 (UTC)
* Test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 16:12, 9 January 2026 (UTC)
* Foo [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 13:55, 9 March 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|cuhold}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 4}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{onhold}} – asd [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 11:31, 28 January 2026 (UTC)
* {{onhold}} – [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 05:12, 15 February 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|admin}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 5}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Test again. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:10, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{Clerk Request}} – Test [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 14:54, 17 March 2026 (UTC)
* Testing [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:03, 20 March 2026 (UTC)
* {{awaitingadmin}} Testing. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 20:04, 11 April 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
imxpyronmyufys1184ml3xvfk16h4ok
737714
737712
2026-04-11T20:04:54Z
DatGuy
30264
Update archivenotice (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737714
wikitext
text/x-wiki
<noinclude>__TOC__</noinclude>
{{SPI archive notice|1=Test|moot=yes}}
{{SPIpriorcases}}
===08 July 2020===
{{SPI case status|closed}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 2}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 3}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Test SPI while GeneralNotability is working on some spihelper changes [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:43, 8 July 2020 (UTC)
* This is an open report. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:59, 9 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Trying to comment. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:08, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:39, 21 August 2020 (UTC)
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:13, 21 August 2020 (UTC)
*Test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:05, 21 August 2020 (UTC)
*{{onhold}} - Test test test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:07, 21 August 2020 (UTC)
* This is a test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:18, 8 January 2026 (UTC)
* Test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 16:12, 9 January 2026 (UTC)
* Foo [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 13:55, 9 March 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|cuhold}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 4}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{onhold}} – asd [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 11:31, 28 January 2026 (UTC)
* {{onhold}} – [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 05:12, 15 February 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|admin}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 5}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Test again. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:10, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{Clerk Request}} – Test [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 14:54, 17 March 2026 (UTC)
* Testing [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:03, 20 March 2026 (UTC)
* {{awaitingadmin}} Testing. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 20:04, 11 April 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
a1e29uh54e22kqrk8tg8ce2fkdhgrg0
737716
737714
2026-04-11T20:08:12Z
DatGuy
30264
Requesting clerk action (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737716
wikitext
text/x-wiki
<noinclude>__TOC__</noinclude>
{{SPI archive notice|1=Test|moot=yes}}
{{SPIpriorcases}}
===08 July 2020===
{{SPI case status|closed}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 2}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 3}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Test SPI while GeneralNotability is working on some spihelper changes [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:43, 8 July 2020 (UTC)
* This is an open report. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:59, 9 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Trying to comment. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:08, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:39, 21 August 2020 (UTC)
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:13, 21 August 2020 (UTC)
*Test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:05, 21 August 2020 (UTC)
*{{onhold}} - Test test test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:07, 21 August 2020 (UTC)
* This is a test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:18, 8 January 2026 (UTC)
* Test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 16:12, 9 January 2026 (UTC)
* Foo [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 13:55, 9 March 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|cuhold}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 4}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{onhold}} – asd [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 11:31, 28 January 2026 (UTC)
* {{onhold}} – [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 05:12, 15 February 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|clerk}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 5}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Test again. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:10, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{Clerk Request}} – Test [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 14:54, 17 March 2026 (UTC)
* Testing [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:03, 20 March 2026 (UTC)
* {{awaitingadmin}} Testing. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 20:04, 11 April 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
865tc8h90n3euxix8elhpl4b5b2dfyb
737718
737716
2026-04-11T20:08:20Z
DatGuy
30264
Update archivenotice (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737718
wikitext
text/x-wiki
<noinclude>__TOC__</noinclude>
{{SPI archive notice|1=Test}}
{{SPIpriorcases}}
===08 July 2020===
{{SPI case status|closed}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 2}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 3}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Test SPI while GeneralNotability is working on some spihelper changes [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:43, 8 July 2020 (UTC)
* This is an open report. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:59, 9 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Trying to comment. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:08, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:39, 21 August 2020 (UTC)
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:13, 21 August 2020 (UTC)
*Test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:05, 21 August 2020 (UTC)
*{{onhold}} - Test test test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:07, 21 August 2020 (UTC)
* This is a test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:18, 8 January 2026 (UTC)
* Test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 16:12, 9 January 2026 (UTC)
* Foo [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 13:55, 9 March 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|cuhold}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 4}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{onhold}} – asd [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 11:31, 28 January 2026 (UTC)
* {{onhold}} – [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 05:12, 15 February 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|admin}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 5}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Test again. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:10, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{Clerk Request}} – Test [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 14:54, 17 March 2026 (UTC)
* Testing [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:03, 20 March 2026 (UTC)
* {{awaitingadmin}} Testing. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 20:04, 11 April 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
6w11hbahouyzqbpe0oewzx026oa1d7s
737720
737718
2026-04-11T20:11:09Z
DatGuy
30264
Requesting clerk action (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737720
wikitext
text/x-wiki
<noinclude>__TOC__</noinclude>
{{SPI archive notice|1=Test}}
{{SPIpriorcases}}
===08 July 2020===
{{SPI case status|closed}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 2}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 3}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Test SPI while GeneralNotability is working on some spihelper changes [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:43, 8 July 2020 (UTC)
* This is an open report. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:59, 9 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Trying to comment. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:08, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:39, 21 August 2020 (UTC)
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:13, 21 August 2020 (UTC)
*Test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:05, 21 August 2020 (UTC)
*{{onhold}} - Test test test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:07, 21 August 2020 (UTC)
* This is a test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:18, 8 January 2026 (UTC)
* Test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 16:12, 9 January 2026 (UTC)
* Foo [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 13:55, 9 March 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|cuhold}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 4}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{onhold}} – asd [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 11:31, 28 January 2026 (UTC)
* {{onhold}} – [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 05:12, 15 February 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|clerk}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 5}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Test again. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:10, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{Clerk Request}} – Test [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 14:54, 17 March 2026 (UTC)
* Testing [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:03, 20 March 2026 (UTC)
* {{awaitingadmin}} Testing. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 20:04, 11 April 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
ka3hfy47kc5x11c0y3j2s8h6dr11dz5
737722
737720
2026-04-11T20:11:23Z
DatGuy
30264
Update archivenotice (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737722
wikitext
text/x-wiki
<noinclude>__TOC__</noinclude>
{{SPI archive notice|1=Test|moot=yes}}
{{SPIpriorcases}}
===08 July 2020===
{{SPI case status|closed}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 2}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 3}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Test SPI while GeneralNotability is working on some spihelper changes [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:43, 8 July 2020 (UTC)
* This is an open report. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:59, 9 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Trying to comment. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:08, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:39, 21 August 2020 (UTC)
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:13, 21 August 2020 (UTC)
*Test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:05, 21 August 2020 (UTC)
*{{onhold}} - Test test test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:07, 21 August 2020 (UTC)
* This is a test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:18, 8 January 2026 (UTC)
* Test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 16:12, 9 January 2026 (UTC)
* Foo [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 13:55, 9 March 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|cuhold}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 4}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{onhold}} – asd [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 11:31, 28 January 2026 (UTC)
* {{onhold}} – [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 05:12, 15 February 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|admin}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 5}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Test again. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:10, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{Clerk Request}} – Test [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 14:54, 17 March 2026 (UTC)
* Testing [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:03, 20 March 2026 (UTC)
* {{awaitingadmin}} Testing. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 20:04, 11 April 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
a1e29uh54e22kqrk8tg8ce2fkdhgrg0
737724
737722
2026-04-11T20:13:18Z
DatGuy
30264
Requesting clerk action (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737724
wikitext
text/x-wiki
<noinclude>__TOC__</noinclude>
{{SPI archive notice|1=Test|moot=yes}}
{{SPIpriorcases}}
===08 July 2020===
{{SPI case status|closed}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 2}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 3}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Test SPI while GeneralNotability is working on some spihelper changes [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:43, 8 July 2020 (UTC)
* This is an open report. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:59, 9 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Trying to comment. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:08, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:39, 21 August 2020 (UTC)
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:13, 21 August 2020 (UTC)
*Test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:05, 21 August 2020 (UTC)
*{{onhold}} - Test test test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:07, 21 August 2020 (UTC)
* This is a test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:18, 8 January 2026 (UTC)
* Test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 16:12, 9 January 2026 (UTC)
* Foo [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 13:55, 9 March 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|cuhold}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 4}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{onhold}} – asd [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 11:31, 28 January 2026 (UTC)
* {{onhold}} – [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 05:12, 15 February 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|clerk}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 5}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Test again. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:10, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{Clerk Request}} – Test [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 14:54, 17 March 2026 (UTC)
* Testing [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:03, 20 March 2026 (UTC)
* {{awaitingadmin}} Testing. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 20:04, 11 April 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
865tc8h90n3euxix8elhpl4b5b2dfyb
737726
737724
2026-04-11T20:15:04Z
DatGuy
30264
Requesting admin action (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737726
wikitext
text/x-wiki
<noinclude>__TOC__</noinclude>
{{SPI archive notice|1=Test|moot=yes}}
{{SPIpriorcases}}
===08 July 2020===
{{SPI case status|closed}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 2}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 3}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Test SPI while GeneralNotability is working on some spihelper changes [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:43, 8 July 2020 (UTC)
* This is an open report. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:59, 9 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Trying to comment. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:08, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:39, 21 August 2020 (UTC)
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:13, 21 August 2020 (UTC)
*Test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:05, 21 August 2020 (UTC)
*{{onhold}} - Test test test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:07, 21 August 2020 (UTC)
* This is a test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:18, 8 January 2026 (UTC)
* Test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 16:12, 9 January 2026 (UTC)
* Foo [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 13:55, 9 March 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|cuhold}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 4}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{onhold}} – asd [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 11:31, 28 January 2026 (UTC)
* {{onhold}} – [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 05:12, 15 February 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|admin}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 5}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Test again. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:10, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{Clerk Request}} – Test [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 14:54, 17 March 2026 (UTC)
* Testing [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:03, 20 March 2026 (UTC)
* {{awaitingadmin}} Testing. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 20:04, 11 April 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
a1e29uh54e22kqrk8tg8ce2fkdhgrg0
737727
737726
2026-04-11T20:15:25Z
DatGuy
30264
Update archivenotice (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737727
wikitext
text/x-wiki
<noinclude>__TOC__</noinclude>
{{SPI archive notice|1=Test}}
{{SPIpriorcases}}
===08 July 2020===
{{SPI case status|closed}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 2}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 3}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Test SPI while GeneralNotability is working on some spihelper changes [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:43, 8 July 2020 (UTC)
* This is an open report. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:59, 9 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Trying to comment. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:08, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:39, 21 August 2020 (UTC)
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:13, 21 August 2020 (UTC)
*Test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:05, 21 August 2020 (UTC)
*{{onhold}} - Test test test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:07, 21 August 2020 (UTC)
* This is a test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:18, 8 January 2026 (UTC)
* Test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 16:12, 9 January 2026 (UTC)
* Foo [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 13:55, 9 March 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|cuhold}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 4}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{onhold}} – asd [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 11:31, 28 January 2026 (UTC)
* {{onhold}} – [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 05:12, 15 February 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|clerk}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 5}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Test again. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:10, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{Clerk Request}} – Test [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 14:54, 17 March 2026 (UTC)
* Testing [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:03, 20 March 2026 (UTC)
* {{awaitingadmin}} Testing. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 20:04, 11 April 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
ka3hfy47kc5x11c0y3j2s8h6dr11dz5
737728
737727
2026-04-11T20:24:47Z
DatGuy
30264
Requesting admin action (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737728
wikitext
text/x-wiki
<noinclude>__TOC__</noinclude>
{{SPI archive notice|1=Test}}
{{SPIpriorcases}}
===08 July 2020===
{{SPI case status|closed}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 2}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 3}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Test SPI while GeneralNotability is working on some spihelper changes [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:43, 8 July 2020 (UTC)
* This is an open report. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:59, 9 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Trying to comment. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:08, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:39, 21 August 2020 (UTC)
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:13, 21 August 2020 (UTC)
*Test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:05, 21 August 2020 (UTC)
*{{onhold}} - Test test test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:07, 21 August 2020 (UTC)
* This is a test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:18, 8 January 2026 (UTC)
* Test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 16:12, 9 January 2026 (UTC)
* Foo [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 13:55, 9 March 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|cuhold}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 4}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{onhold}} – asd [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 11:31, 28 January 2026 (UTC)
* {{onhold}} – [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 05:12, 15 February 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|admin}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 5}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Test again. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:10, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{Clerk Request}} – Test [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 14:54, 17 March 2026 (UTC)
* Testing [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:03, 20 March 2026 (UTC)
* {{awaitingadmin}} Testing. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 20:04, 11 April 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
6w11hbahouyzqbpe0oewzx026oa1d7s
737729
737728
2026-04-11T20:25:05Z
DatGuy
30264
Update archivenotice (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737729
wikitext
text/x-wiki
<noinclude>__TOC__</noinclude>
{{SPI archive notice|1=Test|moot=yes}}
{{SPIpriorcases}}
===08 July 2020===
{{SPI case status|closed}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 2}} ({{clerknote}} original case name)
* {{checkuser|1=Test 2013-02-21 3}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Test SPI while GeneralNotability is working on some spihelper changes [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:43, 8 July 2020 (UTC)
* This is an open report. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:59, 9 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Trying to comment. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:08, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 12:39, 21 August 2020 (UTC)
*test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:13, 21 August 2020 (UTC)
*Test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:05, 21 August 2020 (UTC)
*{{onhold}} - Test test test [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:07, 21 August 2020 (UTC)
* This is a test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:18, 8 January 2026 (UTC)
* Test. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 16:12, 9 January 2026 (UTC)
* Foo [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 13:55, 9 March 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|cuhold}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 4}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{onhold}} – asd [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 11:31, 28 January 2026 (UTC)
* {{onhold}} – [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 05:12, 15 February 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
===09 July 2020===
{{SPI case status|admin}}
====Suspected sockpuppets====
* {{checkuser|1=Test 2013-02-21 5}}
<!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts-->
*'''Tools''': <span class="plainlinks">[https://tools.wmflabs.org/sigma/editorinteract.py?users={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&user={{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}} Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/{{urlencode:{{#titleparts:{{SUBPAGENAME}}}}}}.html User compare report]</span> <small>''Auto-generated every hour.''</small>
Closed section. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 15:35, 10 July 2020 (UTC)
====<big>Comments by other users</big>====
<small>''Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].''</small>
*Test again. [[User:GeneralNotability|GeneralNotability]] ([[User talk:GeneralNotability|talk]]) 16:10, 13 August 2020 (UTC)
====<big>Clerk, CheckUser, and/or patrolling admin comments</big>====
* {{Clerk Request}} – Test [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 14:54, 17 March 2026 (UTC)
* Testing [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 21:03, 20 March 2026 (UTC)
* {{awaitingadmin}} Testing. [[User:DatGuy|DatGuy]] ([[User talk:DatGuy|talk]]) 20:04, 11 April 2026 (UTC)
----<!--- All comments go ABOVE this line, please. -->
a1e29uh54e22kqrk8tg8ce2fkdhgrg0
Template:Always substitute
10
116782
737648
691182
2026-02-21T11:02:47Z
en>Mathglot
0
Populate [[Category:Templates with matching hidden id]].
737648
wikitext
text/x-wiki
{{{{{|safesubst:}}}#invoke:Unsubst|main|$B=
{{Ombox
| name = Subst only
| type = notice
| text = This template <strong>{{#switch:{{{yesnomaybe|}}}|may=may be [[Help:Substitution|substituted]]</strong>|never=should <em>not</em> be [[Help:Substitution|substituted]]</strong>||#default=should always be [[Help:Substitution|substituted]]</strong> – use <!--
-->{{{actualtemplate|{{template other|{{Tlsp|code=yes|{{#switch:{{SUBPAGENAME}}|doc|sandbox={{BASEPAGENAME}}|{{PAGENAME}}}}}}|{{Tlsu|code=yes|{{FULLPAGENAME}}}}}}}}}}}. <!--
-->{{#if:{{yesno|{{{auto|no}}}}} |Any accidental transclusions will be automatically substituted by a bot.{{{1|}}}{{#if:{{yesno|{{{nocat|}}}}}|<!--no categorization-->|{{#switch:{{SUBPAGENAME}}|doc|sandbox=|[[Category:Wikipedia templates to be automatically substituted]]}}}}}} <!--
-->{{#if:{{{alt|}}} |For transcluding, use {{Tl|{{{alt|}}}}} instead.}}
}}{{#if:{{yesno|{{{nocat|<noinclude>true</noinclude>}}}}}|<!--no categorization-->|{{#switch:{{SUBPAGENAME}}|doc|sandbox=|{{#switch:{{{yesnomaybe|}}}
|never=[[Category:Wikipedia never-substituted templates]]
|may=<!--No applicable category-->
|#default=[[Category:Wikipedia substituted templates]]{{#ifexpr: 0{{Find page text |text=<!%-%- *{{NAMESPACE}}:[{{lc:{{str left|{{Lua escape|{{{1|{{PAGENAME}}}}}}}|1}}}}{{uc:{{str left|{{Lua escape|{{{1|{{PAGENAME}}}}}}}|1}}}}]{{str right|{{Lua escape|{{{1|{{PAGENAME}}}}}}}|1}} *%-%-> |title={{FULLPAGENAME}} |plain=f}} > 0 | [[Category:Templates with matching hidden id]]}}
}}}}}}}}<includeonly>__EXPECTUNUSEDTEMPLATE__</includeonly><noinclude>{{Documentation}}</noinclude>
ssapjo4e6wqrews6hmk46191pq0p9h9
737649
737648
2026-04-11T19:54:19Z
Novem Linguae
49714
1 revision imported from [[:en:Template:Always_substitute]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737648
wikitext
text/x-wiki
{{{{{|safesubst:}}}#invoke:Unsubst|main|$B=
{{Ombox
| name = Subst only
| type = notice
| text = This template <strong>{{#switch:{{{yesnomaybe|}}}|may=may be [[Help:Substitution|substituted]]</strong>|never=should <em>not</em> be [[Help:Substitution|substituted]]</strong>||#default=should always be [[Help:Substitution|substituted]]</strong> – use <!--
-->{{{actualtemplate|{{template other|{{Tlsp|code=yes|{{#switch:{{SUBPAGENAME}}|doc|sandbox={{BASEPAGENAME}}|{{PAGENAME}}}}}}|{{Tlsu|code=yes|{{FULLPAGENAME}}}}}}}}}}}. <!--
-->{{#if:{{yesno|{{{auto|no}}}}} |Any accidental transclusions will be automatically substituted by a bot.{{{1|}}}{{#if:{{yesno|{{{nocat|}}}}}|<!--no categorization-->|{{#switch:{{SUBPAGENAME}}|doc|sandbox=|[[Category:Wikipedia templates to be automatically substituted]]}}}}}} <!--
-->{{#if:{{{alt|}}} |For transcluding, use {{Tl|{{{alt|}}}}} instead.}}
}}{{#if:{{yesno|{{{nocat|<noinclude>true</noinclude>}}}}}|<!--no categorization-->|{{#switch:{{SUBPAGENAME}}|doc|sandbox=|{{#switch:{{{yesnomaybe|}}}
|never=[[Category:Wikipedia never-substituted templates]]
|may=<!--No applicable category-->
|#default=[[Category:Wikipedia substituted templates]]{{#ifexpr: 0{{Find page text |text=<!%-%- *{{NAMESPACE}}:[{{lc:{{str left|{{Lua escape|{{{1|{{PAGENAME}}}}}}}|1}}}}{{uc:{{str left|{{Lua escape|{{{1|{{PAGENAME}}}}}}}|1}}}}]{{str right|{{Lua escape|{{{1|{{PAGENAME}}}}}}}|1}} *%-%-> |title={{FULLPAGENAME}} |plain=f}} > 0 | [[Category:Templates with matching hidden id]]}}
}}}}}}}}<includeonly>__EXPECTUNUSEDTEMPLATE__</includeonly><noinclude>{{Documentation}}</noinclude>
ssapjo4e6wqrews6hmk46191pq0p9h9
Template:Never substitute
10
119990
737676
621004
2026-02-11T06:29:25Z
en>Whyiseverythingalreadyused
0
[[WP:BOLD]] anti-substitution measure (see [[Module:Unsubst]])
737676
wikitext
text/x-wiki
{{safesubst:<noinclude />#invoke: Unsubst||$B=
{{Always substitute|yesnomaybe=never|nocat={{{nocat|}}}}}
}}<noinclude>
{{Documentation}}
</noinclude>
005dtztzvg05qoc5xxjmbf6rdz2qi8t
737677
737676
2026-04-11T19:54:54Z
Novem Linguae
49714
1 revision imported from [[:en:Template:Never_substitute]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737676
wikitext
text/x-wiki
{{safesubst:<noinclude />#invoke: Unsubst||$B=
{{Always substitute|yesnomaybe=never|nocat={{{nocat|}}}}}
}}<noinclude>
{{Documentation}}
</noinclude>
005dtztzvg05qoc5xxjmbf6rdz2qi8t
Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/Actual
4
120313
737584
737573
2026-04-11T13:53:21Z
Nacaru
54746
Resolviendo solicitud «[[Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscelánea/Actual#Situación_extraña_con_tinte_político|Situación extraña con tinte político]]» mediante [[WP:TL|Twinkle Lite]]
737584
wikitext
text/x-wiki
<!-- AVISO: No semiproteger la miscelánea del tablón pues aquí redirigen muchas plantillas y avisos en páginas varias para que los novatos puedan aportar o realizar consultas que sólo bibliotecarios pueden resolver -->
<noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}}
{{Archivado automático
|Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/AAAA/MM
|Días a mantener=7
}}
== Situación extraña con tinte político ==
; Asunto
Desde 2019 aproximadamente se ha visto un grupo de IPv6 dentro del rango {{u|2804:14C:0:0:0:0:0:0/32}} editando y tratando de manipular contenidos políticos controvertidos (específicamente en [[Fascismo en América]] y otros más), de hecho por lo que se ve [[Discusión:Fascismo en América|aquí]] el anónimo se expresa de una manera particular sin saber siquiera español y sólo deja links sin mayor explicación. Adicionalmente, el anónimo está constantemente dejando mensajes a {{u2|Raimundo57br}} haciendo una serie de solicitudes de modificaciones a artículos de tinte político (sobre todo si son relativos a la derecha o izquierda política). Pero cuando vemos más a profundidad, vemos otras IPs como {{u|187.20.115.154}} dejando lo mismo al usuario, o este [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:Raimundo57br&diff=prev&oldid=150518775 mensaje] de Raimundo57br dirigido a otra cuenta haciendo ping, pero en su propia discusión en un intento de coordinación de su desbloqueo. Hago acotar que Raimundo57br [https://pt.wikipedia.org/wiki/Especial:Contribui%C3%A7%C3%B5es/Raimundo57br está expulsado de la Wikipedia portuguesa desde el 2022], luego de múltiples problemas allá y numerosos bloqueos temporales.
También, que la Wikipedia portuguesa maneja estrictamente el uso de direcciones anónimas y [https://pt.wikipedia.org/wiki/Usu%C3%A1rio(a):2804:14C:0:0:0:0:0:0/32 todo el rango 2804:0:0:0:0:0:0:0/19] se encuenta bloqueado desde 2020. Existe una posibilidad de que haya una inusual coordinación entre anónimos y Raimundo57br para manipular artículos de política en Wikipedia en español y la Wikipedia portuguesa (a partir de una tercera cuenta), ante la imposibilidad de ambos entes (ya que se les hace más cómodo intervenir acá).
Incluyo al reporte que [https://es.wikipedia.org/w/index.php?title=Discusi%C3%B3n:Fascismo_en_Am%C3%A9rica&diff=prev&oldid=168802559 con estos] [https://es.wikipedia.org/w/index.php?title=Discusi%C3%B3n:Fascismo_en_Am%C3%A9rica&diff=prev&oldid=168803824 diffs en específico], no sólo Raimundo57br está involucrado, también {{u|Auréola}} (quien también pasó por un proceso de expulsión, aunque no está autoconfirmado acá) y {{u|Luizpuodzius}} (quien fue sancionado también allá, pero no expulsado; tampoco autoconfirmado acá). Aquí [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ALuizpuodzius&diff=159046847&oldid=152503114 una interacción entre usuarios hablando de temas referentes a pt.wiki]. De esta situación, se confirma que se esté usando nuestra Wikipedia para cuestiones ajenas de un proyecto que los sancionó y expulsó.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 17:04 4 ago 2025 (UTC)
;Comentarios
#'''Sobre los mensajes que recibo del IP''': no tengo contacto fuera de la wiki con este IP que me envía solicitudes para editar determinados artículos y, por regla general, no atiendo estas solicitudes;
#'''En cuanto a mis problemas en la wiki-pt''', aclaro que no se deben a ediciones que hice en el dominio principal de esa versión de la wiki (donde se borraron pocos artículos y se revirtieron pocas ediciones), sino a una larga rivalidad con determinados administradores. No creo que sea oportuno traer ese debate aquí, pero si insisten, daré las aclaraciones que consideren oportunas.
#'''Sobre mi contacto con Luizpuodzius''': entiendo que fue un acto aislado sin mayores repercusiones, hace mucho tiempo que no interactúo con esa persona.
#'''Sobre mi interacción con Anhabete''': entiendo que fue un acto aislado sin mayores repercusiones, después de eso no volví a interactuar con esa persona.
:--[[Usuario:Raimundo57br|Raimundo57br]] ([[Usuario Discusión:Raimundo57br|discusión]]) 12:35 5 ago 2025 (UTC)
; Respuesta
{{admintab|1=Probando a resolver petición|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 13:53, 11 April 2026 (UTC)|3=}}
== Solicito traslado de páginas ==
* Por favor trasladar las siguientes páginas
# {{a|Dover}} ... a ... {{a|Dover (desambiguación)}}
# {{a|Dover (Kent)}} ... a... {{a|Dover}}
;Motivo
* Por favor indicar el motivo: La ciudad de Inglaterra es el uso principal del término. La página de desambiguación tenía cientos de enlaces ambiguos.
;Usuario que lo solicita
Firmado: [[Usuario:Rondador|Ronda]][[Usuario Discusión:Rondador|dor]] 09:39 2 sep 2025 (UTC)
;Coentarios
* Personalmente estoy de acuerdo, vamos a solicitar las opiniones de otros que quieran opinar. Un saludo. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 10:45 2 sep 2025 (UTC)
* Con permiso, {{u2|Rondador}}, he detallado los dos traslados que estás pidiendo; estoy de acuerdo con el traslado, y también con la solicitud de opiniones (quizá en algún lado haya algo muy relevante llamado localmente Dover). --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 12:09 2 sep 2025 (UTC)
* Si pongo Dover en el buscador de Google, [[google:dover|el primer resultado]] (y siguientes) es para el grupo musical español (algo que sospechaba, ya que en mi mente sucede lo mismo). [[Usuario:MiguelAlanCS|<b style="color: #990099;">MiguelAlanCS</b>]] >>> [[Archivo:PICOL icon Mail.svg|15px|link=Usuario discusión:MiguelAlanCS]] 12:13 2 sep 2025 (UTC)
:: En mi caso sale la ciudad, pero bueno, también es un argumento a tener en cuenta. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 20:23 2 sep 2025 (UTC)
:::{{no|}} Lo que no se puede hacer es trasladar y despues solicitar, como hizo unilateralmente el editor. Lo revertí a la espera de otra respuesta. Aunque mejor que en el tablón de bibliotecarios donde solo responden bibliotecarios, es preguntar en el café. A mi, si me preguntan por Dover me vienen muchas cosas a parte de la propia ciudad por lo que hay que buscar un consenso clarone indicarlo en la resolución y posibles traslados para que no hay discusiones en el futuro. --[[Usuario:Geom|<b style="background:purple;color:yellow;font-size:80%;border-radius:9px 0 0 9px;padding:2px 5px;">Geom</b>]][[Usuario discusión:Geom|<span style="font-size:80%;color: gray;">'''(discusión)'''</span>]] 09:35 3 sep 2025 (UTC)
::::{{No|Punto metiche}}, del otro lado del charco lo metí a San Gugul y lo primero que me salió es la banda. [[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 20:54 24 sep 2025 (UTC)
;Respuesta
{{admintab|$0}}
== Gersoncharles ==
; Asunto
Durante el corto tiempo de la CAB del usuario {{u2|Gersoncharles}} señalé una [https://es.wikipedia.org/w/index.php?title=Wikipedia_discusi%C3%B3n:Candidaturas_a_bibliotecario/Gersoncharles&diff=prev&oldid=169411042 situación que considero ineludible], a pesar que el usuario trató de desvincularse sin mayor sustento y prefirió cancelar la CAB.
El usuario a pesar que fue sancionado en 2021 por este servidor, [https://xtools.wmcloud.org/pages/es.wikipedia.org/Gersoncharles?uselang=es ha retomado desde hace un año] en la creación de entradas de concursos de belleza de México con muy pocas notas de referencia: si observamos los artículos creados, sólo una fracción de cada artículo puede ser revisado en sus referencias, pero hay gran parte de la información que parece manejar el usuario de [[WP:FP|una manera que lo conoce en exclusiva]], por lo que no ha concedido en los requerimientos mínimos que se necesita para seguir editando en Wikipedia. De hecho, le han borrado 8 artículos en apenas un par de meses atrás. Sé que me adelanto en especulaciones, pero ante la ausencia de motivos que le llevaron a la CAB, sospecharía que [[WP:NSW|estaba buscando alguna forma de restaurar contenidos borrados, o disputar decisiones administrativas]].
El usuario se comporta virtualmente como una [[WP:CPP|CPP]] y el 100% de sus contribuciones en artículos están fijados en un tema cerradísimo como este, me hacen entreveer que el usuario requiere algún correctivo de prohibición editorial, al menos, para que empiece a entender su posición como editor, ya que alguien con 15 años en Wikipedia (y unos 8 años editando con cierta actividad), es rarísimo que siga comportándose como una CPP.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 05:12 10 sep 2025 (UTC)
; Respuesta
{{admintab|1=Probando a resolver esta petición para ver si se reproduce el fallo.|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:12, 11 April 2026 (UTC)|3=}}
==Status quo Stonewalling==
; Usuarios implicados
* {{u|Aroblesm}}
;Artículo
[[Amarillos por Chile]] (ahora, pero es un comportamiento habitual)
; Motivo
Aunque el usuario hace un buen trabajo de patrullaje contra vandalismo, tiene un comportamiento habitual de lo que se denomina [[:en:WP:Status quo stonewalling]]. El usuario revierte todo lo que no le parece y no debate. Trata a cualquier usuario, experimentado o no como si fuera un vándalo o una CPP. Le va dando al botón, llegando siempre al límite de 3RR (en que el status quo tiene prioridad) y no pasa a la búsqueda de consenso. Y lo peor de todo, es que no maneja bien las políticas y hace SQS de manera incorrecta. <br />
En este caso particular está cometiendo un error obvio, porque en la plantilla: parámetro ideología, está usando un fuente que no se puede, ya que no es independiente. Concretamente a [https://www.laizquierdadiario.cl/Chile La Izquierda Diario], que es el órgano oficial del [[Partido de Trabajadores Revolucionarios]] y como tal no es un medio independiente al juzgar la posición de otro partido político (le explique en la PD y en su propio PD, y se limita a indicar en su reversión que ''no se puede eliminar referencias simplemente porque no nos gusta''. Esto es una abierta contravención a [[WP:FF]].<br />
Aún así, no quiero que esta denuncia se centre en ese artículo, ya que es un comportamiento habitual (basta ver su [https://es.wikipedia.org/w/index.php?title=Especial%3AContribuciones&target=Aroblesm&namespace=all&tagfilter=&start=&end=&limit=1000 historial]). Como digo arriba, muchas veces actúa así con vándalos y CPP, pero le pasa la máquina a lo que venga por delante y sin debatir (basta mirar su PD), y tampoco evidenciando un buen conocimiento de las políticas. Como indico arriba es un comportamiento habitual textbook de [[:en:WP:Status quo stonewalling]].
Solicito que se le indique al usuario lo incorrecto del proceder y que se le deje una clara advertencia respecto a SQS.
; Usuario que lo solicita
* [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 11:04 10 sep 2025 (UTC)
;Comentarios
{{comentario}}: SFBB omite que está eliminando referencias del artículo por mero gusto personal y sin justificación alguna. Se le propuso debatir pero no espera el debate. Yo solo he mantenido el artículo a su versión estable. Además, de todos los editores del artículo es el único que ha objetado una referencia y eso es raro en mi opinión. Me dedico a combatir el vandalismo y las ediciones arbitrarias sin consenso previo. No veo problemas en aquello. SFBB solo busca poder mantener su eliminación de referencias por mero gusto personal sin importar. --[[Usuario:Aroblesm|Aroblesm]] ([[Usuario Discusión:Aroblesm|discusión]]) 16:13 10 sep 2025 (UTC)
::No hombre....es un patrón de conducta. siempre que no te gusta algo movís a "versión estable" sin discutir nada hasta aburrir a la contraparte...eso es precisamente SQS. Tenís la PD llena de quejas por eso y seguís creyendo que lo estái haciendo bien, meramente porque aburrís al resto que le da lata pelear con vos (a mí mismo muchas veces me hai aburrido). Sin esta denuncia ni siquiera te habríai dignado a opinar...le diste dos veces más al botón (y sólo opinaste después de la denuncia y no dijiste nada en serio, salvo que estaba en la referencia...pff...nadie lo ha puesto en duda)...y lo que calificái como "arbitrariedad" lo hacís sin entender profundamente el funcionamiento de wikipeida. Es una obviedad que esa fuente no se puede usar lo que está siendo usada, no es "gusto personal" son las polítcas: por n-sima vez: lee [[WP:FF]]. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 19:17 10 sep 2025 (UTC)
:::'''Comentario'''. Al usuario se le explica porqué cierta fuerte [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=169577342&oldid=169428682 absolutamente no] es [[WP:FF]] desde ningún punto de vista e ipso facto y sin explicación alguna entra en guerra de ediciones instantánea [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=169577348&oldid=169577342 (1)] [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=next&oldid=169577358 (2)]. Así no se puede, y preocupa si un revisor actúa así en otras páginas no analizadas. [[Usuario:XavierItzm|XavierItzm]] ([[Usuario Discusión:XavierItzm|discusión]]) 01:11 20 sep 2025 (UTC)
::::Quiero agregar que cuando el usuario se encontró con una clara mayoría de usuarios que cuestionaba su actuar, fue a pedir [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Amarillos_por_Chile_2 la protección de la página en su versión]. Nuevamente, esto es parte del comportamiento habitual de usuario ([https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual&action=history ver el historial de ese tablón]): el usuario trata cualquier diferencia de opinión con la suya como si fuera vandalismo y utiliza ese tablón para cementar su versión (yo mismo lo he sufrido con anterioridad, aunque es difícil buscar un acto específico en ese tablón). Quiero agregar que esta denuncia <u>no es por este caso en particular</u> sino que contra el comportamiento habitual de manipular el sistema para mantener sus versiones de status quo, sin siquiera entrar a discutir y tratar cualquier tipo de edición (que no concuerde con su visión) como si fuera vandalismo. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 09:35 20 sep 2025 (UTC)
:::::Otro antecedente más del que ni siquiera estaba al tanto. Con anterioridad a su solicitud de protección de la página del 20 de agosto (rechazada por {{u2|Rafstr}}), cuando intentaba mantener así el status quo ante la presión de 5 usuarios (todos usuarios veteranos muy experimentados) que llegaron independientemente a esa PD - <small>tras mención general del problema en el café</small>, el usuario ya había exigido una [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Amarillos_por_Chile protección similar el 8 de agosto], con anterioridad a esta denuncia y con posterioridad a que yo haya iniciado una discusión en la PD (que el ignoró al igual que los mensajes que le dejé en su PD personal, mientras seguía dándole al botón revertir). Es un perfecto ejemplo de cómo el usuario consistentemente [[WP:NSW|abusa de las reglas del sistema]], a sabiendas de que si revierte 3 veces, puede denunciar a la contraparte por 3R, y pedir protecciones. Y, bueno...le sigue dando al botón sin intentar si quiera debatir.
:::::[https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/3RR/Actual&diff=prev&oldid=149513602#Aroblesm Ya ha sido denunciado anteriormente por exactamente lo mismo] y (como decía anteriormente) tiene la PD llena de quejas por lo mismo, pero la mayoría simplemente nos hartamos - yo ya muchas veces - y nos vamos a otra cosa sin denunciar...'''<u>pero este comportamiento tiene que parar de una vez por todas</u>'''. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 00:50 22 sep 2025 (UTC)
::::::Otro ejemplo (y sin buscar mucho): hace unos días atrás hizo lo mismo con {{u2|GKLakers02}} en el artículo [[Línea 6 del Metro de Santiago]] y terminó denunciando al usuario [https://es.wikipedia.org/w/index.php?title=Wikipedia:Vandalismo_en_curso&diff=prev&oldid=169275648 por un presunto vandalismo]. En en intertanto GKLakers02 intentaba discutir en la [https://es.wikipedia.org/wiki/Discusi%C3%B3n:L%C3%ADnea_6_del_Metro_de_Santiago#Tensi%C3%B3n_Incorrecta. PD del artículo] proveyendo fuentes correctas, pero siendo completamente ignorado pro el usuario. El asunto terminó cuando el artículo fue protegido, manteniendo el status quo (incorrecto) que tozudamente forzaba Aroblesm dándole al botón.
::::::Pero bueno...este el sólo otro ejemplo pero son cientos. Alguien tiene que parar al usuario (que es buenísimo combatiendo vandalismo, pero termina tratando a todo el mundo cual si fueran vándalos). [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 01:07 22 sep 2025 (UTC)
:a sabiendas que está denuncia aún no se resuelve, intenté corregir lo de la [[Línea 6 del Metro de Santiago]], siendo nuevamente revertido [https://es.wikipedia.org/w/index.php?title=L%C3%ADnea_6_del_Metro_de_Santiago&diff=prev&oldid=169740888 1] y [https://es.wikipedia.org/w/index.php?title=Línea_6_del_Metro_de_Santiago&diff=prev&oldid=169740854 2] oportunidades (en rápidisimo; me reveritió dos veces, antes de que pudiese agregar la info sobre las otras líneas, para las cuales existe similar documentación) por el usuario que no duda un segundo en entrar en GE para defender el status quo sobre la base de una referencia absolutamente obsoleta del año 2016 (sí, hace 9 años, el metro sí operaba a 750 Vcc). Lo peor es que revierte e indica que hay que ir a la PD donde ya se le ha explicado con lujo de detalles que está equivocado.<br />
:Por favor: alguien tiene que frenar a este usuario ya que le hace mucho daño a eswiki (piensen en todas las IPs/usuarios que él determina unilateralmente que son vándalos). Yo por mi parte, voy a intentar evitarlo hasta que se resuelva esto (y voy a dejar los artículos sobre le Metro de Santiago con un voltaje incorrecto por el momento), aunque es altamente probable que me revierta en otros lados (ya vigila una enorme proporción de los artículos sobre contingencia chilena); si lo hace, no voy a insistir y voy a dejar las cosas de manera incorrecta. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 23:40 29 sep 2025 (UTC)
Agregro otro antecendente: En [[Línea 6 del Metro de Santiago]] y [[Línea 3 del Metro de Santiago]], el usuario entró nuevamente (como ya ha ocurrido en muchas oportunidades con anterioridad) en conflicto con IPs. Las IPs tiene razón, pero el usuario las revierte. Como las IP insisten en agregar <u>la info corrrecta</u> (bien referencianda y discutida de la IP del artículo - aunque le usuario lo ignore y le siga dando al botón), el usuario va al TAb a pedir protección de ambas [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#L%C3%ADnea_6_del_Metro_de_Santiago] [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#L%C3%ADnea_3_del_Metro_de_Santiago] y {{u2|Virum Mundi}} terminó protegiendo ambas por 3 meses. <br />
Esto pone en evidencia una vez más, el mal que está haciendo el usuario de las reglas y los tablones. Las IPs (porque son dos creo) han hecho todo bien: han agregado info correcta, han referenciado y han ido a la PD....y el usario le sigue dando al botón para imponer una fuente obsoleta de 2016. Y recurre a cuatánto tablón haya para denunciar a supuesto vándalos..<br />
'''Por favor que alguien haga algo y pronto....o al menostenga en consideración este accionar permanente y dejen de validar los reportes del usuario.''' [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 02:59 6 oct 2025 (UTC)
;Respueta al comentario de abajo
::(no quiero que esto sea un foreo, pero hago este comentario para que esta denuncia <u>no se vaya por la ramas del caso puntual</u> sobre el que versa la respuesta)
{{pg|Virum Mundi}}: Aunque la denuncia no pasa por ahí, pero la tensión en el Metro de Santiago se ha cambiado de 750 Vcc a 1500 Vcc y de vuelta múltiples veces. Los cambios se realizan con relativa celeridad y la única documentación que queda disponible es precisamente la licitación y la especificación técnica de la misma (que fue lo provisto)...pero, vamos que estaremos de acuerdo que borrar todo pq hay un fuente obsoleta que no dice que en 2016 era diferente?
::Pero nuevamente, la denuncia no pasa por ahí. Esto es un ejemplo igual al caso de AxCh (descrito arriba) y muchísimso similares (que he visto/sufrido con el usuario y de los cuales hay una retahíla de protestas es su PD), en que revierte todo, trata a todo el mundo como vándalo, dice que hay que ir a la PD, y (si se digna a opinar en la PD - generalmente no lo hace), se limita a decir que tiene una fuente (por muy mala/obsoleta que sea) e ignora los argumentos en la discusión. Y luego recurre a tablones para pedir protecciones, denunciar vandalismo y así afianzar su versión. Es un mal uso y no te culpo a ti ni ningún sysop, porque es muy difícil darse cuenta del mal uso (repetitivo) que hace y a primera vista sí puede parecer correcto (y obviamente cómo el usuario hace múltiples denuncias que sí correctas...bueno...es más mucho difícil)...y por eso les pido por favor mucha atención con el usuario que le está haciendo daño a wikipedia. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 11:47 6 oct 2025 (UTC)
;Comentario admin
* No es mi intención intervenir en esta denuncia. Pero sí quiero aclarar, ya que fui mencionado por nombre, que la semiprotección de estos artículos se ha hecho por guerra de ediciones, pues no se puede llenar los historiales una y otra vez de modificaciones y reversiones. Aun así, antes de proteger el de la Línea 6, por pura curiosidad (me interesa el tema de ferrocarriles, aunque no particularmente el sistema metropolitano de Santiago de Chile), entré en una página de la compañía donde está indicado que actualmente los cables son "flexibles, unipolares, clase 5, de tensión de aislamiento de 750 V (fuerza) y 600 V (control) para 90ºC..." (y así sigue). También entré en la fuente proporcionada por las IP, un documento de finales del año pasado que detalla los pormenores de un proyecto (para mí, proyecto significa futuro). También leí la discusión, donde el denunciado de hecho sí intervino una vez, allí se proporciona como prueba una imagen realizada por el anónimo, almacenada en su Google Drive. Esta imagen de un visor digital colgado del techo no es una fuente creíble, no solo por ser fuente primaria, y no solo porque no se puede saber de dónde es (no pone el nombre del metro ni de la estación, solo un número colgado del techo, pero presumo de buena fe y asumo que es del lugar indicado), sino que en sí tampoco indica nada definitivo, puede estar por ejemplo en fase de pruebas o de desarrollo (teniendo en cuenta el poco tiempo transcurrido desde el documento mencionado) o de adaptación. Sí, obviamente puede ser también que ya está empleado, pero entonces hace falta una referencia que lo indique de verdad (no la de un proyecto). Insisto, no estoy aquí ni para debatir ni para valorar esta denuncia, solo dejar claro el motivo de la protección. las guerras de ediciones no pueden llevarse a cabo en los historiales de los artículos, invito a cualquiera a realizar las modificaciones necesarias en dichos artículos, si ha lugar, y/o participar en la discusión aportando las fuentes (al fin y al cabo estás páginas están semiprotegidas, cualquier usuario autoconfirmado puede intervenir en ellas). Por lo demás, lo dejo a otro admin. Saludos. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 05:10 6 oct 2025 (UTC)
;Continúa con más casos:
:Nuevamente el usuario en acción. [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Historia_del_Metro_de_Santiago_2 Acá pidiendo protección en TAB] porque un "supuesto Vándalo" estaría agregando una imagen (absolutamente pertinente al artículo). Por favor dejen de ignorar esto y pónganle freno al usuario. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 16:59 2 nov 2025 (UTC)
; Respuesta
{{admintab|1=Prueba|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:25, 9 February 2026 (UTC)|3=}}
== Retomo reporte de CPP política ==
; Asunto
Hace menos de un mes [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Nombres_inapropiados_y_vandalismo_persistente/2025/09#CPP_pol%C3%ADtica reporté en el tablón] un caso de CPP política, que fue lamentablemente desestimado, pues el usuario {{u|Pptrc}} ha vuelto con lo mismo, controlar el artículo del partido chileno [[Evolución Política]] y ahora se crea una entrada con IA de [[Juan Manuel Santa Cruz]] sin mayor complicación, e incluso pasó por la revisión de un patrullero. Insisto en que esta cuenta no tiene otro objetivo que controlar y promover contenidos de políticos de la formación en la que tiene interés demasiado particular.
:Por favor: por qué se espera para resolver estas cosas? es evidente que {{u2|Taichi}} tiene razón, y habiendo un proceso [[Elecciones parlamentarias de Chile de 2025|eleccionario en curso]], es evidente que la CPP está editando artículos con motivos propagandísticos...y que dada la coyuntura, se deben tomar medidas con celeridad. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 20:57 30 sep 2025 (UTC) <small>ps: aclaro que mi intervención acá fue para agregar el antecedente de la urgencia, dada la coyuntura</small>
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 15:17 17 sep 2025 (UTC)
; Respuesta
{{admintab|1=Probando a resolver esta otra a ver si ocurre...|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:12, 11 April 2026 (UTC)|3=}}
== Santos500p ==
; Asunto
Pido por favor que se tomen nuevas medidas para apaciguar el frenesí de ediciones del usuario {{u2|Santos500p}}, concernientes sobre todo con política de Perú, que [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ASantos500p&diff=169860726&oldid=169762965 en los últimos días] ha llegado al punto de tener varios artículos y categorías creadas por él en [[WP:CDB|consultas de borrado]], algunas teniendo consenso comunitario a favor del borrado.
En una de las consultas señalé que [https://es.wikipedia.org/w/index.php?title=Wikipedia:Consultas_de_borrado/Deface_Per%C3%BA&diff=prev&oldid=169776828 el usuario lleva bastante rato desconociendo las líneas entre los diferentes proyectos], con varios intentos en el pasado de señalarle sobre ello, pero sigue en la mezcla de contenidos que podrían estar perfectamente en Wikinoticias, Wikisource e incluso Wikiquote, pero no hay nada que lo impida, aduciendo que puede entorugar cualquier cosa como artículo de Wikipedia, incluso riñendo con [[WP:REC]] o [[WP:SRA]]. De hecho, su página de discusión ha recibido en los últimos dos meses una cantidad difícil de cuantificar de [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ASantos500p&diff=169860726&oldid=168959821avisos de borrado rápido, avisos de consultas de borrado y artículos sin relevancia], varios de ellos siendo borrados.
Esta situación ya suma a su <u>bloqueo parcial por dos años</u>, por lo que debería haber una restricción más certera que haga rectificar su proceder. Apelo a que el usuario pueda comprender que Wikipedia tiene bien delimitado [[WP:NO|sus noes]] y que debería él como usuario, ya no tan novato, entender esos límites. De lo contrario, dejo al encargo de un bibliotecario para que tome alguna medida extra para restringirlo.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 11:34 10 oct 2025 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Usuario reincidente ==
; Asunto
* En marzo de este año, acudí al TAB por una serie de problemas en numerosos artículos creados por el usuario {{u|Ángel Luis Alfaro}}, [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscel%C3%A1nea/2025/06#Creaci%C3%B3n_de_art%C3%ADculos_con_varios_problemas ver aquí]. Ahora ha editado el artículo [[Alto Renacimiento]] con los mismos problemas por el cual puse esa denuncia en el TAB. Exceso de fotografías (173), referencias en las propias fotografías. Cientos de enlaces internos, algunas secciones son toda azul. Mal formato de las referencias, fuentes citadas (Fuentes citadas en Maniera moderna), usar como referencia artículos de wikipedia, véase la referencia 26. La sección notas es casi tan grande como el propio artículo. Y para terminar, no ha corregido ni uno solo de los artículos que ha creado anteriormente.
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:20 14 oct 2025 (UTC)
;Comentario
* {{ping|Ontzak}} No consigo entrar en el enlace (me va todo muy lento hoy), ¿es el mismo que resolví yo la última vez? <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 09:32 15 oct 2025 (UTC)
* {{ping|Virum Mundi}} si, el mismo. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:55 15 oct 2025 (UTC)
** Ya veo, bueno, me pongo a ello, puede que tarde un rato. {{ping|Ángel Luis Alfaro}} por favor evita más ediciones hasta que se resuelva esta denuncia. Un saludo. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 11:26 16 oct 2025 (UTC)
::{{comentario}} {{ping|Virum Mundi}}, a pesar del aviso, el usuario sigue [https://es.wikipedia.org/wiki/Especial:Contribuciones/%C3%81ngel_Luis_Alfaro editando]. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:45 26 nov 2025 (UTC)
; Respuesta
{{admintab|$0}}
== Adrian Silvera ==
; Usuarios implicados
* {{u|Adrian silvera}}
; Motivo
Hace una década que este usuario agrega contenido mal escrito, sin referencias y muchas veces innecesario. Lo bloquearon tres veces por este motivo. Estuve un año insistiendo para que activara el autocorrector y así por lo menos subsanar el tema de la ortografía. Lo hizo hace poco, creo, pero el remedio fue peor que la enfermedad: ahora confunde adjetivos, sustantivos y verbos, y pone tildes en cualquier parte. Esto no sería tan grave de no ser porque se le advertí unas tres veces y sigue igual. Hoy le mandé un mensaje por ese tema y lo primero que hizo fue [https://es.m.wikipedia.org/w/index.php?title=The_Matrix_Reloaded&diff=prev&oldid=170118708 esto]. En otro caso lo interpretaría como una tomadura de pelo, pero no creo que lo haga a propósito. De todas maneras, alguna consecuencia tiene que tener, para aprender.
; Usuario que lo solicita
* [[Usuario:Minguu|Minguu]] ([[Usuario Discusión:Minguu|discusión]]) 20:16 22 oct 2025 (UTC)
; Respuesta
{{admintab|1=aaaa|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:54, 9 February 2026 (UTC)|3=}}
== Propuesta de desbloqueo para Lenis Felipe ==
; Asunto
* Hola. Por este medio quisiera proponer al colegio de bibliotecarios el desbloqueo local de {{u|Lenis Felipe}}, usuario bloqueado hace ya más de tres años por creación de páginas vandálicas. Lenis se encuentra con bloqueo global, por lo que para poder ser desbloqueado globalmente necesita ser desbloqueado de alguna de las wikis donde tiene bloqueos actualmente, entre ellas, Wikipedia en español.
:La propuesta la planteo porque, habiendo pasado un tiempo prudencial, puedo atestiguar que Lenis pareciera haber enmendado su rumbo y ha colaborado en reportar vía IRC, de manera privada, vandalismos, evasores de bloqueo y hasta sugerir cambios a filtros antiabusos para detener algunos abusadores de largo plazo. Particularmente lo ha hecho desde enero de 2024. Me parece que tal y como fue el caso de Sargento de Hierro (perdón que le nombre, pero me gusta destacar casos de usuarios que se corrigieron :)), podría ser positivo darle una segunda oportunidad para convertirse en un elemento positivo para la comunidad. Ante ello, propongo su desbloqueo local y quedo atento a cualquier propuesta de términos para ello, en cuenta restricción de crear páginas nuevas, o similares. Saludos,
; Usuario que lo solicita
* '''[[Usuario:Jake Park|''Jake Park'']]''' [[Archivo:Coat of arms of Costa Rica.svg|20 px]] [[Usuario Discusión:Jake Park|<span style="color: red;">'''Problem?'''</span>]] 01:00 29 oct 2025 (UTC)
;Comentarios de biblios
* Desde mi punto de vista, los usuarios que no hayan tenido actitudes vandálicas sistemáticas posteriores al bloqueo no deberían permanecer bloqueados más de tres años. '''Apoyo''' el posible desbloqueo. De todos modos, consulto: ¿sabes qué edad tiene el usuario? Porque no es lo mismo alguien que hizo esas tonterías a los 16 años que a los 60; en el primer caso, puede haber madurado rápidamente, mientras que si fuera ''"mayorcito"'' como quien escribe, los aprendizajes de comportamientos son más difíciles. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 02:03 29 oct 2025 (UTC)
* EMHO todos son susceptibles de cambiar, no quiere decir que todos lo hagan, pero uno de los 5 pilares nos pide presumir buena fe. {{Ok|Votum pro}}. [[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:00 30 oct 2025 (UTC)
*
; Respuesta
(a rellenar por un bibliotecario)
== Unmuybuenusuario ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
{{u|Unmuybuenusuario}} se registró el 28 de octubre de 2025, o sea hace 12 días. Desde el primer momento se dedicó a hacer mantenimiento y mandar artículos a borrar. El segundo día ya [https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Permisos/Actual&diff=prev&oldid=170247444 solicitó el flag de reversor con el argumento de : '' pese a mi muy breve tiempo en Wikipedia, desearía poseer el permiso de reversor para revertir de manera más fácil que usando el botón deshacer''], o sea que asegura que hace poco tiempo que está en Wikipedia pero ya conoce los tipos de flags que existen y dónde solicitarlos.
@[[Usuario:Edslov|Edslov]], le negó el permiso, obviamente, ya que en ese momento tenía menos de 48 horas de creada la cuenta, pero no solamente opina que la decisión no fue justa
sino que además conoce perfectamente el Café y fue directamente a quejarse porque no se le dio el permiso, para preguntar [https://es.wikipedia.org/w/index.php?title=Wikipedia:Caf%C3%A9/Archivo/Ayuda/Actual&diff=prev&oldid=170287227 ''¿Cuánto tiempo desde mi registro tiene que transcurrir para poder recibir el flag de reversor? ¿O cuántas ediciones?''].
Le pedí al usuario [https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:Unmuybuenusuario que dejara de hacer mantenimiento] y él me dejó un mensaje protestando por que
[https://es.wikipedia.org/w/index.php?title=Usuaria_discusi%C3%B3n:Jaluj&diff=prev&oldid=170408787 no encuentra ninguna política que prohíba a un editor nuevo deshacer vandalismos o colocar plantillas de borrado rápido a artículos que cumplan alguno de los criterios de borrado rápido], lo cual es cierto, como tampoco hay ninguna política que prohiba a un usuario nuevo tener el flag de reversor, pero suponemos que para hacer este tipo de tareas se necesita tener experiencia y haber demostrado tener conocimientos para hacerlas bien. Por eso le pedí que se detenga y deje de hacer mantenimiento, porque si es un novato no podemos confiar en que lo haga.
Entonces me [https://es.wikipedia.org/w/index.php?title=Usuaria_discusi%C3%B3n:Jaluj&diff=prev&oldid=170408787 acusó de estar violando la políticas al morder a los novatos y no presumir buena fe]. Morder a los novatos es cuando se trata de una persona sin experiencia que todavía no conoce las normas y políticas de Wikipedia. Una persona novata no sabe ni que existe un Café, ni que existe un tablón para solicitar flags, ni que existe el flag de reversor ni que existe el "deshacer".
Pero a la vez me acusa de no presumir buena fe al sospechar que no es novato. Entonces, ¿en qué quedamos? Porque si es un novato, no debería estar haciendo mantenimiento y si no lo es, entonces yo no estaría presumiendo mala fe al sospechar que no lo es.
Esta cuenta me está difamando al dejar mensajes como [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:A.piquerasm&diff=prev&oldid=170408867 este], porque además de acusarme de morder a un novato y de presumir mala fe me acusa por haber solicitado una VU y de haberlo "intimidado". Ahora resulta que por haberle pedido que deje de hacer mantenimiento y por haber pedido una VU yo soy la que viola las políticas y lo estoy "intimidando". Yo no lo acusé acusé ''gravemente de abuso a largo plazo'', yo solicité una VU porque sospecho que puede ser una LTA. Si no lo es, no tiene nada de qué preocuparse y si es un novato mucho menos. Solicito que se le haga un llamado de atención para que deje de difamarme a mis espaldas, ya que ni siquiera me enlazó para que yo no me enterara.
; Usuario que lo solicita
* [[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:17 10 nov 2025 (UTC)
* Te pido amablemente usuaria [[Usuario:Jaluj|Jalu]] una solución a este problema, porque yo no te estoy difamando, si conozco el café, el tablón, si se hacer reversiones, es porque fui anónimo y como usuario anónimo ya me dedicaba a hacer estas cosas, un usuario me sugiero visitar la página de cambios recientes y eso es lo que estoy haciendo, visitar los cambios recientes ¿Tengo prohibido deshacer vandalismos encontrados? Por cierto, no me indicaste cuales son las ediciones supuestamente arbitrarias, las ediciones que he hecho han sido deshacer vandalismos, yo no soy ni títere, ni evasor, ni mucho menos abuso a largo plazo, soy usuario completamente nuevo y esta es mi primera cuenta, y te recuerdo un fragmento de la página de usuarios títeres: '''Puede ser fácil identificar a un usuario títere, si muestra un conocimiento de las políticas, convenciones de Wikipedia y técnicas avanzadas de edición que no es de esperar en un novato (aunque debe presumirse buena fe: es posible que sea un usuario que haya colaborado en otra edición de Wikipedia, en alguna otra wiki o <u>que haya participado mucho tiempo como anónimo</u>)''' (subrayado mío). Si conozco como deshacer vandalismos, es porque antes editaba como anónimo, y esta cuenta fue creada para ayudar a Wikipedia, de ninguna manera la cree para LTA o ediciones arbitrarias. ¿Cómo propones que se solucione este problema y que tipo de ediciones puedo hacer y que tipo de ediciones no puedo hacer? --[[Usuario:Unmuybuenusuario|Unmuybuenusuario]] ([[Usuario Discusión:Unmuybuenusuario|discusión]]) 23:27 10 nov 2025 (UTC)
:{{comentario}}: [https://es.wikipedia.org/w/index.php?title=Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios&oldid=170625007#Evasi%C3%B3n_de_bloqueo:_Cris2020 Resultado de la SVU]. --'''[[user:Stïnger|<span style="text-shadow:#FFD700 1px 1px 2px; class=texhtml"><span style="font-family:'Calibri';color:black">Stïnger</span></span>]]''' <sup>[[Archivo:Bureau kage.svg|15px|link=User talk:Stïnger]]</sup> 00:58 24 nov 2025 (UTC).
; Respuesta
{{admintab|Al no ser un caso reciente (ya pasaron algunos días) apercibo a {{u2|Unmuybuenusuario}} de [[WP:PBF]] primeramente y posterior a [[WP:PPBF]]. Ambos juicios caen en violaciones a [[WP:E]] y [[WP:CIV]] (supongo al ya haber editado como IP sabrá por que, por lo que en caso de reincidencia podría haber sanción. En cuanto al flag, queda al criterio del bibliotecario que lo otorga, no hay tiempo ni cuota determinada, pero es bastante obvio que más sabe el diablo por viejo que por diablo, yo tampoco lo habría otorgado.|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:09 26 nov 2025 (UTC)}}
== Expulsado de la Wikipedia en inglés viene acá a hacer lo mismo... ==
;Usuarios
* {{u|SocialQuote}}
* {{u|2800:484:7380:0:0:0:0:0/44}}
; Asunto
Tanto [https://en.wikipedia.org/wiki/Special:Contributions/SocialQuote la cuenta registrada] como [https://en.wikipedia.org/wiki/Special:Contributions/2800:484:7380:0:0:0:0:0/44 el rango IP] se encuentran sancionados desde septiembre en la Wikipedia en inglés, por ediciones conflictivas, reversiones sin sentido e incluso insultos y amenazas.
Ya acá [[Usuario discusión:2800:484:7385:F0:95EE:CA0B:4429:B24C|ha causado problemas como anónimo en junio]] y la cuenta [https://es.wikipedia.org/w/index.php?title=Scarface_(pel%C3%ADcula_de_1983)&diff=prev&oldid=168285955 incluso ripostó contra un bibliotecario], y [https://es.wikipedia.org/w/index.php?title=Harry_Potter_y_el_c%C3%A1liz_de_fuego&diff=prev&oldid=169807011 está constantemente] [https://es.wikipedia.org/w/index.php?title=Dinero_negro&diff=prev&oldid=170282821 revirtiendo al bot de mantenimiento]. Nótese que los temas que edita tanto la cuenta como la IP son las mismas (series de TV y películas), y las sanciones aplicadas en en.wiki fueron hechas el mismo día.
Debido a esta coincidencia y la situación que está persistiendo ahora en la Wikipedia en español, pido que se tomen medidas.
:{{comentario}} Añado [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:Farisori&diff=prev&oldid=170531619 otro mensaje bastante incordiante contra otro bibliotecario] haciéndolo suponer entre líneas que no sabe redactar artículos. '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 00:10 18 nov 2025 (UTC)
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 04:18 17 nov 2025 (UTC)
; Respuesta
{{Hecho|1=Bloqueado}} por Rafstr. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:40 19 nov 2025 (UTC)
== Borrar y ocultar datos sensibles en página de usuario ==
; Asunto
Pido con carácter de urgencia que algún bibliotecario [https://es.wikipedia.org/w/index.php?title=Usuario:Dalma_Huerta_Mercado_Calder%C3%B3n&diff=prev&oldid=170526877 oculte datos sensibles y muy personales] de [[Usuario:Dalma Huerta Mercado Calderón|esta página de usuario]], ya que es aún una niña (ni siquiera es adolescente). No creo que sea consciente de que lo que hace es peligroso a su edad.
Añado que ya [https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:Dalma_Huerta_Mercado_Calder%C3%B3n#Informaci%C3%B3n_personal no es la primera vez que la pillan colgando datos personales], el año pasado hizo lo mismo. Si toca hacer alguna medida administrativa que evite que la menor siga exponiendo sus datos sin cuidado, adelante.
; Comentarios
No soy bibliotecario, pero {{ping|Taichi}} creo que lo mejor es mandar un correo a [[Wikipedia:Supresores|oversight]], o como mínimo realizar la solicitud en algún lugar menos visible (como IRC). --[[Usuario:Xacaranda|Xacaranda]] [[Usuario discusión:Xacaranda|(mensajes)]] 18:56 18 nov 2025 (UTC)
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 04:22 17 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Sí}}, dada la excesiva información personal y la imposibilidad de ocultar la última edición, opté por el borrado de la PU. También dejé un mensaje a la usuaria. En caso de reincidir, aplicaría una medida, como un bloqueo parcial, para impedir que vuelva a crear su página de usuario. Un saludo,|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:55 19 nov 2025 (UTC)}}
== LTA ==
; Usuarios implicados
* {{u|Mauro08L}}
; Motivo
Hmm, otra vez, otro títere más de {{u|Claudio1098}}.
; Usuario que lo solicita
* —<span style="font-family:Trebuchet MS;font-size:95%">[[Usuario:Mαrti|<span style="color:#636;">Mαrti</span>]] <span style="color;background:#CBE2F7;border-radius:9px;"> [[Usuario discusión:Mαrti|'''ϟ''']] </span></span> 20:23 18 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:42 19 nov 2025 (UTC)}}
== Recreación reiterada ==
; Asunto
* El usuario {{u|Archivoteleditor}} insiste en recrear el mismo programa de televisión con distintas variaciones del título, véase [[Tentaculos]], [[Tentáculos]], [[Ni que fuéramos tentáculos]] y [[Ni Que Fuéramos Tentáculos]], contabilizo más de una docena de recreaciones, ya se le avisó de un posible conflicto de interés.
:En cuanto al artículo, se trata de un programa que duró apenas 3 meses en antena, aunque El País y EuropaPress son referencias fiables, mencionan el programa superficialmente.
; Usuario que lo solicita
* '''C:\>''' [[Usuario:A.piquerasm|A.piquerasm]] '''[''' [[Usuario Discusión:A.piquerasm|Discusión]] ''']''' 16:43 19 nov 2025 (UTC)
; Respuesta
{{admintab|{{hecho}}. Inhabilitado de crear páginas. Un saludo.
|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 19:49 19 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170580247]]
; Motivo
Lenguaje soez
; Usuario que lo solicita
* [[Usuario:Casisgaal|<span style="font-size:black 3px 1px 3px; font-variant:Corbel; color:blue; text-shadow:cyan 2px 1px 2px">Casisgaal</span>]] [[Usuario discusión:Casisgaal|(Discusión)]] 16:16 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada y cuenta bloqueada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:36 21 nov 2025 (UTC)}}
== Anónimo escurridizo ==
; Asunto
Un anónimo que cambia de cuenta temporal y de IP lleva dos meses haciendo cambios sin sentido en partidos políticos de Colombia [https://es.wikipedia.org/w/index.php?title=Independientes_(Colombia)&action=history como este], [https://es.wikipedia.org/w/index.php?title=Partido_Comunista_de_Colombia_-_Marxista_Leninista&diff=prev&oldid=170580251 cambiando un «es» por «fue»] (haciendo entender que ya no existen), pero sin aportar pruebas que los partidos ya no están activos. Como no está aportando nada [[WP:VER|que lo sustente]], se le está revirtiendo pero insiste en reponerlo, llegando a una conducta que no se puede considerar como constructiva.
Además, nos pone en prueba con el sistema de cuentas temporales ya que no sólo está cambiando de cuenta temporal, sino de IP, por lo que dejo en consideración que hacer. Estás serían las direcciones en cuestión: [https://es.wikipedia.org/wiki/Especial:IPContributions/191.108.3.30], [https://es.wikipedia.org/wiki/Especial:IPContributions/191.108.59.86], [https://es.wikipedia.org/wiki/Especial:IPContributions/152.201.226.108] y [https://es.wikipedia.org/wiki/Especial:IPContributions/152.202.79.18].
Previo a la instauración de cuentas temporales también editó con las siguientes IPs:
* {{u|152.201.203.233}}
* {{u|186.113.76.107}}
* {{u|191.111.9.153}}
Es posible que incluso se considere en semiproteger si en caso tal el anónimo siga por cambiar de IP y continúe con esta situación.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 16:49 20 nov 2025 (UTC)
; Respuesta
{{admintab|{{prot|60}}|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:19 26 nov 2025 (UTC)}}
== Acoso ==
; Usuarios implicados
* {{u|~2025-35257-44}}
* {{u|~2025-35202-10}}
; Motivo
Acoso a un usuario
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 21:57 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 16:49 21 nov 2025 (UTC)}}
== Acoso ==
; Usuarios implicados
* {{u|Narsenopoulos}}
; Motivo
{{diff|170585395|Acoso a un usuario}}
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 22:03 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Usuario bloqueado por Virum Mundi. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:28 21 nov 2025 (UTC)}}
== Ocultar ediciones ==
; Asunto
* [[Especial:Diff/169433403]]
* [[Especial:Diff/170587004]]
; Motivo
El artículo suele ser vandalizado mediante la inclusión de nombres completos de particulares en esta lista, entiendo que motivados por algún tipo de rencilla personal. Creo que es conveniente ocultarlos ya que que, de lo contrario, esos nombres quedan indexados y accesibles por internet, asociados a una lista de violadores en serie, lo cual puede tener implicaciones en su vida personal.
; Usuario que lo solicita
* [[Usuario:Nacaru|Nacaru]] [[Archivo:Noto Emoji KitKat 2601.svg|19px]] ([[Usuario_discusión:Nacaru|discusión]]) 00:23 21 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Ediciones ocultadas. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:39 21 nov 2025 (UTC)}}
== Solicitud para corregir redirecciones dobles en [[Ciudad del Cuzco]] y [[Cusco, Perú]] ==
Hola. Por favor, ayúdenme a solucionar el problema de las redirecciones dobles en las páginas de redireccionamiento [[Ciudad del Cuzco]] y [[Cusco, Perú]]. Gracias. [[Especial:Contribuciones/~2025-35342-08|~2025-35342-08]] ([[Usuario discusión:~2025-35342-08|discusión]]) 04:33 21 nov 2025 (UTC)
;Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 04:45 21 nov 2025 (UTC)}}
== Me sentí acosada por Jaluj, por favor, paciencia con los novatos ==
; Asunto
Soy una nueva editora (bueno, era una nueva editora) estudiante de 5º de Veterinaria y entré en la wikipedia con mucha ilusión.
Detecté un artículo escrito llamado “Comida para gatos” lleno de enlaces spam a marcas comerciales, así como un claro sesgo pro pienso alabando sus virtudes.
Después de leerme todos los tutoriales edité el artículo intentando ser objetiva, eliminado enlaces spam y texto publicitario.
Un editor deshizo todo mi trabajo dando la razón de que yo había eliminado referencias. https://es.wikipedia.org/w/index.php?title=Comida_para_gatos&diff=170390013&oldid=170376180
Vi la posibilidad de aprender de mis errores y le pregunté por que consideraba fiables (ya que repuso todos los enlaces spam) Eran enlaces a artículos como “los 8 mejores marcas de piensos” (que es publicidad de 8 marcas de piensos, con enlaces a afiliados de Amazon), o webs que no funcionaban etc etc
Me contestó que había eliminado todo mi trabajo porque yo había añadido 1 referencia “por tratarse de blog y por tanto no considerarse fiable”. Era un enlace a un artículo de una clínica veterinaria como había 3 o 4 igual en el artículo. https://clinicaveterinarium.es/el-gato-es-omnivoro-o-carnivoro/
No entendí que para eliminar ese enlace se eliminara todo el trabajo realizado en el artículo, y sobre todo que se repusieran los enlaces spam, y por qué esos enlaces spam eran fuentes fiables.
Para resumir, volví a poner el artículo tal y como yo lo había escrito (eliminado más de 10 enlaces spam) quitando el enlace a dicha clínica, sospechando que era ese el problema, y el editor me agradeció la edición. Seguí sin aprender. Pero no me quejo de este editor.
Y aquí viene mi ruego.
Posteriormente a todo esto, y tras muchos días después, apareció el editor Jaluj, https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:LaVeterinaria , donde me acusó de faltar a la etiqueta y falta de civismo al preguntar al editor. Pedí disculpas por mis preguntas si habían molestado y volví a decir que mi intención era aprender y por eso preguntaba.
Tras mi respuesta, el editor Jaluj fue a una edición mía en otro artículo, y la eliminó, diciendo que no era una fuente fiable https://es.wikipedia.org/w/index.php?title=Perro_de_caza&curid=707821&diff=170565115&oldid=170545527 La ACCM es un organismo avalado por el Gobierno https://servicio.mapa.gob.es/arca/download.html?id=20338485&contentType=application/pdf que reconoce oficialmente a los perros de raza, así que supongo que son una fuente entendida del tema para hablar de razas.
Además de eliminar esa información, me vuelve a acusar de falta de civismo y de etiqueta, por lo que me declaré Retirada y así se lo dije como respuesta, ya que no entendía nada, me di cuenta que no podía aprender y me sentía atacada.
He recibido un email de wikipedia donde me avisa que el editor Jaluj obviando todas mis disculpas y petición de información sobre la organización oficial sólo me exige el nombre de mi mentor.
Solo pido un poco de paciencia y empatía con los nuevos editores, necesitamos empatía y ayuda para editar, no acusaciones de mala fe y falta de civismo. Yo lo he intentado, cuiden a los que vengan nuevos detrás de mi. Gracias por leer.
; Usuario que lo solicita
--[[Usuario:LaVeterinaria|LaVeterinaria]] ([[Usuario Discusión:LaVeterinaria|discusión]]) 14:01 21 nov 2025 (UTC)
;Comentario adicional
Permito añadir que {{u2|Leoncastro}} y mi persona [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ALaVeterinaria&diff=170608554&oldid=170595929 hemos tratado separadamente de mediar en el asunto], pero la usuaria está demasiado a la defensiva e incluso [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ATaichi&diff=170606470&oldid=170599847 me dejó esta contestación], incluso cuando buscaba seriamente ayudarle. Lo que denoto en sus contestaciones además, es que ella como estudiante universitaria dice tener algún "mentor" en su universidad (pero no está adscrito acá), por lo que estoy deduciendo que hay alguna orientación mal ejecutada y pareciera que la estudiante está obligada a editar como sea, a expensas de que cualquier patrullero o bibliotecario sea maltratado de esta manera si le revisan sus contribuciones. Ojalá haya alguna forma de que se haga entender y ver ante las instancias de qué o quién movió institucionalmente a la alumna a que pasara esto. '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 14:35 22 nov 2025 (UTC)
; Respuesta
{{admintab|1={{No}}. {{U|LaVeterinaria}}, no me parece que, en ningún momento, Jaluj o algún otro de los varios usuarios que han buscado orientarte te hayan «maltratado» o dado motivos para sentirte intimidada o acosada. Más bien, algunas de tus interacciones muestran que, ciertamente, pareces estar a la defensiva y que podrían malinterpretarse. Supongo que el primer mensaje de Jaluj estuvo motivado por una de tus respuestas a Casisgaal —«¿Por qué escribir texto apoyado en enlaces verificables como la universidad etc.? ¿La wikipedia española se basa en la inglesa y no podemos editar sino solo traducir?»—, que se alejó del [[Wikipedia:Civismo|civismo]] esperado en las interacciones entre usuarios en Wikipedia. Asumiste que el mensaje de Jaluj estuvo motivado por tu «insistencia por preguntar lo que no entendía», cuando claramente te explicó, de forma amable y con la paciencia que en varias ocasiones has pedido, que fue por tu tono. Coincido con Jaluj en que parece que no lees los mensajes completos.
<br>
Si preguntó Jaluj sobre tu «mentor», que tú misma mencionaste en la conversación con Casisgaal, es porque, ciertamente después de estas interacciones que has tenido, surge la duda de quién es, si es usuario de Wikipedia y si tiene conocimiento de las políticas que la rigen. Parece que no. Por ello, sería mejor que aprovecharas herramientas como el [[Wikipedia:Programa de tutoría|programa de tutoría]] —cabe destacar que {{u|Ezarate}} ya amablemente se ofreció a ayudarte con tus ediciones—. Todo lo anterior, ya te lo había explicado Leoncastro. Además, él te dejó un extenso mensaje donde explicó y trató de mediar. Tu respuesta y actuar subsecuente es, cuanto menos, desconcertante.
<br>
En suma, descarto la denuncia. {{U|LaVeterinaria}} no me parece que el tono que uses y la forma de interactuar que tienes con otros usuarios, que han intentando orientarte, sea adecuada o benéfica para la enciclopedia. Así como insistes en pedir paciencia, ofrécela a los demás y no acuses de intimidación o denuncies tan fácilmente. Aprovecha los mensajes en los que se te ha explicado un poco sobre la enciclopedia, aprovecha el programa de tutoría o los ofrecimientos de usuarios como Ezarate. No continúes con esta forma de actuar porque fomenta conflictos y puede conducir a medidas que nadie quiere que se tengan que tomar. Un saludo,|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 22:00 22 nov 2025 (UTC)}}
== LTA ==
; Usuarios implicados
* {{u|Henrysmithwa5}}
; Motivo
LTA aerolíneas
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:15 21 nov 2025 (UTC)
; Respuesta
{{admintab|{{ok}} por Jake Park. |--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 00:38 22 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170607263]]
; Motivo
Etiqueta
; Usuario que lo solicita
* [[Usuario:CharlieRaMx|CharlieRaMx]] ([[Usuario Discusión:CharlieRaMx|discusión]]) 12:02 22 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 12:30 22 nov 2025 (UTC)}}
== Ocultar ediciones ==
; Usuarios implicados
* {{u|Zanahorita Extraida}}
; Motivo
Pido que se oculten todas las ediciones de este títere bloqueado, quien como siempre ha lanzado comentarios denigrantes, ofensivos y hasta insultos.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 18:08 23 nov 2025 (UTC)
; Respuesta
{{Hecho}} por Saloca. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 20:00 23 nov 2025 (UTC)
== LTA ==
; Usuarios implicados
* {{u|Patthenry5}}
; Motivo
LTA aerolíneas
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 18:24 23 nov 2025 (UTC)
; Respuesta
{{Hecho}} por MiguelAlanCS. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 19:59 23 nov 2025 (UTC)
== Ocultar ediciones ==
; Asunto
* [[Especial:Diff/170589208]]
* [[Especial:Diff/170589204]]
; Motivo
Vandalismo
; Usuario que lo solicita
* [[Usuario:CarlosEduardoPA|<span style="font-size:80%;background:#000;color:#fff;border-radius:25px;padding:3px 8px;">CarlosEduardoPA</span>]] [[Usuario discusión:CarlosEduardoPA|✉️]] 22:29 23 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Ediciones ocultadas. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:26 24 nov 2025 (UTC)}}
== MediaWiki:Jsonconfig-use-category ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
; Asunto
* {{a|MediaWiki:Jsonconfig-use-category}}
* Please delete the page as it is no longer necessary following [[:phab:T378352|T378352]] ([[:Category:Wikipedia:Páginas que usan la extensión JsonConfig|the category]] has already been deleted). See also [[:m:Steward requests/Miscellaneous#Category:Pages using the JsonConfig extension]].
; Usuario que lo solicita
* [[Usuario:NguoiDungKhongDinhDanh|NguoiDungKhongDinhDanh]] ([[Usuario Discusión:NguoiDungKhongDinhDanh|discusión]]) 23:09 23 nov 2025 (UTC)
; Respuesta
{{admintab|{{ok}}|--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 09:01 24 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170617475]]
; Motivo
Vandalismo
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 23:46 23 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada por Virum Mundi. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:22 24 nov 2025 (UTC)}}
== Plantillas mantenidas sin justificación en Conservatorio de Música de la Universidad Austral de Chile ==
; Asunto
Solicito la intervención de un bibliotecario respecto al artículo [[Conservatorio de Música de la Universidad Austral de Chile]].
El usuario Ontzak colocó dos plantillas (promocional e irrelevante) el día 18 de noviembre. Desde entonces el artículo ha sido completamente reescrito, reforzado con referencias académicas y eliminado el contenido que podía ser de estilo promocional e irrelevante. Conforme a lo indicado en las propias plantillas, abrí hilo en la página de discusión solicitando consenso para su retirada. El usuario no ha respondido pese a haber sido notificado y mencionado en dos ocasiones.
; Motivo
El comportamiento observado, colocar plantillas, no responder a la discusión y bloquear de facto la retirada, encaja en lo descrito en [[WP:DUEÑO]]. A día de hoy las razones originales ya no se sostienen, pero las plantillas permanecen en el artículo sin justificación actual y el editor que las colocó evita participar en la discusión.
; Usuario que lo solicita
[[Usuario:Hoppedup|Hoppedup]] ([[Usuario Discusión:Hoppedup|discusión]]) 12:26 24 nov 2025 (UTC)
Solicito que un bibliotecario revise el caso:
• si procede, retire las plantillas,
• y si fuese necesario, recuerde al usuario implicado la obligación de participar cuando se cuestiona una plantilla mantenida.
Gracias.
; Respuesta
{{admintab|1={{Hecho}}. Por lo demás, todos sabemos cómo hace las cosas {{u2|Ontzak}}; sería mejor que las hiciera con un poco más de intercambio con los demás, pero no se le puede pedir a los editores lo que no pueden o no quieren aportar en Wikipedia (editar sigue siendo una actividad voluntaria, todavía). En mi personal opinión, es mejor tenerlo haciendo lo que hace que no tenerlo, de modo que lo más que podemos hacer es volverlo a invitar a ser un poco más comunicativo. En cuanto a lo de WP:DUEÑO, me parece que te has pasado de largo unos cuantos kilómetros en tu interpretación; un poco más de calma, por favor. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:10 24 nov 2025 (UTC)}}
== Spam incesante ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
; Asunto
* Rango con decenas de ediciones spam, al menos unas 34 desde marzo de este año.
* {{u|89.214.0.0/17}}
* [[Especial:IPContributions/89.214.0.0/17]]
; Usuario que lo solicita
* [[Usuario:Xacaranda|Xacaranda]] [[Usuario discusión:Xacaranda|(mensajes)]] 18:58 25 nov 2025 (UTC)
; Respuesta
{{admintab|{{Sí|He aplicado un bloqueo parcial a los artículos objeto de spam}}.|2=[[Usuario:Montgomery|Montgomery]] ([[Usuario Discusión:Montgomery|discusión]]) 19:04 25 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170663031]]
; Motivo
Transgresión de las reglas de etiqueta.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 19:17 25 nov 2025 (UTC)
; Respuesta
{{admintab|$oc|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 20:09 25 nov 2025 (UTC)}}
== Solicitar traslado ==
; Asunto
* Solicito el traslado de [[CITEDEF]] a [[Instituto de Investigaciones Científicas y Técnicas para la Defensa]], siguiendo la recomendación de la [[Wikipedia:Convenciones de títulos|convención de títulos]] de evitar el uso de acrónimos y siglas siempre que se pueda.
; Usuario que lo solicita
* [[Usuario:Comecaballos|Comecaballos]] ([[Usuario Discusión:Comecaballos|discusión]]) 00:17 26 nov 2025 (UTC)
; Respuesta
{{admintab|{{hecho}}|--[[Usuario:Ezarate|Esteban]] ([[Usuario Discusión:Ezarate|discusión]]) 11:58 26 nov 2025 (UTC)}}
== Cuenta de "propósito particular" ==
; Asunto
* No tengo del todo claro si [https://es.wikipedia.org/w/index.php?title=Especial:Registro/block&page=Usuario%3AInfohisto esto va acá] o a esta altura debería reportarse como vandalismo. Ver sus ediciones de hoy, y sus resúmenes de edición, en {{a|Caporales}} y {{a|Tundiqui}}. Esta cuenta, que ya fue identificada como lo que es, definitivamente no tiene otro propósito aquí que el que ya es evidente. Y lo ha hecho ya en varios artículos.
Mirando su página de usuario veo que tres administradores ya han interactuado con él. Así que aprovecho para citarlos: {{u|Tector}}, {{u|Saloca}} y {{u|Marcelo}}
; Usuario que lo solicita
* [[Usuario:Rastamby|Rastamby]] ([[Usuario Discusión:Rastamby|discusión]]) 02:34 26 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}, ya fue suficiente: usuario expulsado y artículos protegidos a largo plazo. Gracias por el aviso.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 02:43 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170670252]]
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 04:58 26 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 05:04 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170670276]]
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 05:00 26 nov 2025 (UTC)
; Respuesta
{{admintab|1=Prueba|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:26, 9 February 2026 (UTC)|3=}}
== Solicitud para corregir redirecciones dobles en [[Departamento de Cusco]] y [[Provincia de Cusco]] ==
Hola. Por favor, ayúdenme a solucionar el problema de las redirecciones dobles en las páginas de redireccionamiento [[Departamento de Cusco]] y [[Provincia de Cusco]]. Gracias. [[Especial:Contribuciones/~2025-36297-96|~2025-36297-96]] ([[Usuario discusión:~2025-36297-96|discusión]]) 05:35 26 nov 2025 (UTC)
== CDI ==
; Usuarios implicados
* {{u|JALGUERRERO}}
; Motivo
Claro conflicto de interés. Sus ediciones se centran en el artículo que lleva su nombre
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 10:53 26 nov 2025 (UTC)
; Respuesta
{{admintab|{{Ok}}, hecho por {{u2|Virum Mundi}}; no puedo creer nos duró 15 años.|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:27 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170680869]]
; Usuario que lo solicita
* [[Usuario discusión:Divinations|Divinations]] 21:35 26 nov 2025 (UTC)
; Respuesta
{{admintab|1=Ejemplo de resolución de solicitud que menciona a {{ping|Nacaru}}.|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:39, 9 February 2026 (UTC)|3=}}
== varias ediciones ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
Prueba de texto
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:45, 20 February 2026 (UTC)
; Respuesta
{{admintab|1=Qué tal está petición de aquí??? {{Ok}}|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:13, 11 April 2026 (UTC)|3=}}
== Ocultar edición [[Especial:Diff/619272|619272]] ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
JHVBIKUHGVIK
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:47, 20 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar edición 619272 ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
VXCV XZVZCVZC
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:48, 20 February 2026 (UTC)
; Respuesta
{{admintab|1=OKIII|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:49, 20 February 2026 (UTC)|3=}}
== Ocultar edición 684158 ==
; Asunto
* [[Especial:Diff/684158]]
; Motivo
kjanxkajsncxa
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:34, 26 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Prueba de toro túitulo ==
; Usuarios implicados
* {{u|Sergio Enrollment 2}}
; Motivo
Prueba de otra raźon
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:55, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Otra prueba de título más ==
; Usuarios implicados
* {{u|Sergio Enrollment 2}}
; Motivo
Desarrollando razón
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:55, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== k,jnkjjn ==
; Usuarios implicados
* {{u|Dicto23456}}
; Motivo
lknmlkj lkjlk jkl
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:59, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Otra denuncia la que sea ==
; Usuarios implicados
* {{u|Cenarium}}
; Motivo
A ver qué tal
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 01:08, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74252,671081,671082 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/671081]]
* [[Especial:Diff/671082]]
; Motivo
Motivo cualquiera
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:43, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74252, 74251, 89098 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/74252]]
* [[Especial:Diff/74251]]
* [[Especial:Diff/89098]]
; Motivo
Ejemplo
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:45, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar edición 74252 ==
; Asunto
* [[Especial:Diff/74252]]
; Motivo
qeasdsa
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:46, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74251 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/74251]]
; Motivo
asdAD SADAS
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:46, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74253, 74254, 74255, 74256 y 74252 ==
; Asunto
* [[Especial:Diff/74253]]
* [[Especial:Diff/74254]]
* [[Especial:Diff/74255]]
* [[Especial:Diff/74256]]
* [[Especial:Diff/74252]]
; Motivo
A ver si aparecen en el mismo orden.
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:52, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
6rykc6dqukh7z1fahxoov79zwhecjgj
737586
737584
2026-04-11T13:53:34Z
Nacaru
54746
Resolviendo solicitud «[[Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscelánea/Actual#Santos500p|Santos500p]]» mediante [[WP:TL|Twinkle Lite]]
737586
wikitext
text/x-wiki
<!-- AVISO: No semiproteger la miscelánea del tablón pues aquí redirigen muchas plantillas y avisos en páginas varias para que los novatos puedan aportar o realizar consultas que sólo bibliotecarios pueden resolver -->
<noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}}
{{Archivado automático
|Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/AAAA/MM
|Días a mantener=7
}}
== Situación extraña con tinte político ==
; Asunto
Desde 2019 aproximadamente se ha visto un grupo de IPv6 dentro del rango {{u|2804:14C:0:0:0:0:0:0/32}} editando y tratando de manipular contenidos políticos controvertidos (específicamente en [[Fascismo en América]] y otros más), de hecho por lo que se ve [[Discusión:Fascismo en América|aquí]] el anónimo se expresa de una manera particular sin saber siquiera español y sólo deja links sin mayor explicación. Adicionalmente, el anónimo está constantemente dejando mensajes a {{u2|Raimundo57br}} haciendo una serie de solicitudes de modificaciones a artículos de tinte político (sobre todo si son relativos a la derecha o izquierda política). Pero cuando vemos más a profundidad, vemos otras IPs como {{u|187.20.115.154}} dejando lo mismo al usuario, o este [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:Raimundo57br&diff=prev&oldid=150518775 mensaje] de Raimundo57br dirigido a otra cuenta haciendo ping, pero en su propia discusión en un intento de coordinación de su desbloqueo. Hago acotar que Raimundo57br [https://pt.wikipedia.org/wiki/Especial:Contribui%C3%A7%C3%B5es/Raimundo57br está expulsado de la Wikipedia portuguesa desde el 2022], luego de múltiples problemas allá y numerosos bloqueos temporales.
También, que la Wikipedia portuguesa maneja estrictamente el uso de direcciones anónimas y [https://pt.wikipedia.org/wiki/Usu%C3%A1rio(a):2804:14C:0:0:0:0:0:0/32 todo el rango 2804:0:0:0:0:0:0:0/19] se encuenta bloqueado desde 2020. Existe una posibilidad de que haya una inusual coordinación entre anónimos y Raimundo57br para manipular artículos de política en Wikipedia en español y la Wikipedia portuguesa (a partir de una tercera cuenta), ante la imposibilidad de ambos entes (ya que se les hace más cómodo intervenir acá).
Incluyo al reporte que [https://es.wikipedia.org/w/index.php?title=Discusi%C3%B3n:Fascismo_en_Am%C3%A9rica&diff=prev&oldid=168802559 con estos] [https://es.wikipedia.org/w/index.php?title=Discusi%C3%B3n:Fascismo_en_Am%C3%A9rica&diff=prev&oldid=168803824 diffs en específico], no sólo Raimundo57br está involucrado, también {{u|Auréola}} (quien también pasó por un proceso de expulsión, aunque no está autoconfirmado acá) y {{u|Luizpuodzius}} (quien fue sancionado también allá, pero no expulsado; tampoco autoconfirmado acá). Aquí [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ALuizpuodzius&diff=159046847&oldid=152503114 una interacción entre usuarios hablando de temas referentes a pt.wiki]. De esta situación, se confirma que se esté usando nuestra Wikipedia para cuestiones ajenas de un proyecto que los sancionó y expulsó.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 17:04 4 ago 2025 (UTC)
;Comentarios
#'''Sobre los mensajes que recibo del IP''': no tengo contacto fuera de la wiki con este IP que me envía solicitudes para editar determinados artículos y, por regla general, no atiendo estas solicitudes;
#'''En cuanto a mis problemas en la wiki-pt''', aclaro que no se deben a ediciones que hice en el dominio principal de esa versión de la wiki (donde se borraron pocos artículos y se revirtieron pocas ediciones), sino a una larga rivalidad con determinados administradores. No creo que sea oportuno traer ese debate aquí, pero si insisten, daré las aclaraciones que consideren oportunas.
#'''Sobre mi contacto con Luizpuodzius''': entiendo que fue un acto aislado sin mayores repercusiones, hace mucho tiempo que no interactúo con esa persona.
#'''Sobre mi interacción con Anhabete''': entiendo que fue un acto aislado sin mayores repercusiones, después de eso no volví a interactuar con esa persona.
:--[[Usuario:Raimundo57br|Raimundo57br]] ([[Usuario Discusión:Raimundo57br|discusión]]) 12:35 5 ago 2025 (UTC)
; Respuesta
{{admintab|1=Probando a resolver petición|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 13:53, 11 April 2026 (UTC)|3=}}
== Solicito traslado de páginas ==
* Por favor trasladar las siguientes páginas
# {{a|Dover}} ... a ... {{a|Dover (desambiguación)}}
# {{a|Dover (Kent)}} ... a... {{a|Dover}}
;Motivo
* Por favor indicar el motivo: La ciudad de Inglaterra es el uso principal del término. La página de desambiguación tenía cientos de enlaces ambiguos.
;Usuario que lo solicita
Firmado: [[Usuario:Rondador|Ronda]][[Usuario Discusión:Rondador|dor]] 09:39 2 sep 2025 (UTC)
;Coentarios
* Personalmente estoy de acuerdo, vamos a solicitar las opiniones de otros que quieran opinar. Un saludo. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 10:45 2 sep 2025 (UTC)
* Con permiso, {{u2|Rondador}}, he detallado los dos traslados que estás pidiendo; estoy de acuerdo con el traslado, y también con la solicitud de opiniones (quizá en algún lado haya algo muy relevante llamado localmente Dover). --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 12:09 2 sep 2025 (UTC)
* Si pongo Dover en el buscador de Google, [[google:dover|el primer resultado]] (y siguientes) es para el grupo musical español (algo que sospechaba, ya que en mi mente sucede lo mismo). [[Usuario:MiguelAlanCS|<b style="color: #990099;">MiguelAlanCS</b>]] >>> [[Archivo:PICOL icon Mail.svg|15px|link=Usuario discusión:MiguelAlanCS]] 12:13 2 sep 2025 (UTC)
:: En mi caso sale la ciudad, pero bueno, también es un argumento a tener en cuenta. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 20:23 2 sep 2025 (UTC)
:::{{no|}} Lo que no se puede hacer es trasladar y despues solicitar, como hizo unilateralmente el editor. Lo revertí a la espera de otra respuesta. Aunque mejor que en el tablón de bibliotecarios donde solo responden bibliotecarios, es preguntar en el café. A mi, si me preguntan por Dover me vienen muchas cosas a parte de la propia ciudad por lo que hay que buscar un consenso clarone indicarlo en la resolución y posibles traslados para que no hay discusiones en el futuro. --[[Usuario:Geom|<b style="background:purple;color:yellow;font-size:80%;border-radius:9px 0 0 9px;padding:2px 5px;">Geom</b>]][[Usuario discusión:Geom|<span style="font-size:80%;color: gray;">'''(discusión)'''</span>]] 09:35 3 sep 2025 (UTC)
::::{{No|Punto metiche}}, del otro lado del charco lo metí a San Gugul y lo primero que me salió es la banda. [[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 20:54 24 sep 2025 (UTC)
;Respuesta
{{admintab|$0}}
== Gersoncharles ==
; Asunto
Durante el corto tiempo de la CAB del usuario {{u2|Gersoncharles}} señalé una [https://es.wikipedia.org/w/index.php?title=Wikipedia_discusi%C3%B3n:Candidaturas_a_bibliotecario/Gersoncharles&diff=prev&oldid=169411042 situación que considero ineludible], a pesar que el usuario trató de desvincularse sin mayor sustento y prefirió cancelar la CAB.
El usuario a pesar que fue sancionado en 2021 por este servidor, [https://xtools.wmcloud.org/pages/es.wikipedia.org/Gersoncharles?uselang=es ha retomado desde hace un año] en la creación de entradas de concursos de belleza de México con muy pocas notas de referencia: si observamos los artículos creados, sólo una fracción de cada artículo puede ser revisado en sus referencias, pero hay gran parte de la información que parece manejar el usuario de [[WP:FP|una manera que lo conoce en exclusiva]], por lo que no ha concedido en los requerimientos mínimos que se necesita para seguir editando en Wikipedia. De hecho, le han borrado 8 artículos en apenas un par de meses atrás. Sé que me adelanto en especulaciones, pero ante la ausencia de motivos que le llevaron a la CAB, sospecharía que [[WP:NSW|estaba buscando alguna forma de restaurar contenidos borrados, o disputar decisiones administrativas]].
El usuario se comporta virtualmente como una [[WP:CPP|CPP]] y el 100% de sus contribuciones en artículos están fijados en un tema cerradísimo como este, me hacen entreveer que el usuario requiere algún correctivo de prohibición editorial, al menos, para que empiece a entender su posición como editor, ya que alguien con 15 años en Wikipedia (y unos 8 años editando con cierta actividad), es rarísimo que siga comportándose como una CPP.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 05:12 10 sep 2025 (UTC)
; Respuesta
{{admintab|1=Probando a resolver esta petición para ver si se reproduce el fallo.|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:12, 11 April 2026 (UTC)|3=}}
==Status quo Stonewalling==
; Usuarios implicados
* {{u|Aroblesm}}
;Artículo
[[Amarillos por Chile]] (ahora, pero es un comportamiento habitual)
; Motivo
Aunque el usuario hace un buen trabajo de patrullaje contra vandalismo, tiene un comportamiento habitual de lo que se denomina [[:en:WP:Status quo stonewalling]]. El usuario revierte todo lo que no le parece y no debate. Trata a cualquier usuario, experimentado o no como si fuera un vándalo o una CPP. Le va dando al botón, llegando siempre al límite de 3RR (en que el status quo tiene prioridad) y no pasa a la búsqueda de consenso. Y lo peor de todo, es que no maneja bien las políticas y hace SQS de manera incorrecta. <br />
En este caso particular está cometiendo un error obvio, porque en la plantilla: parámetro ideología, está usando un fuente que no se puede, ya que no es independiente. Concretamente a [https://www.laizquierdadiario.cl/Chile La Izquierda Diario], que es el órgano oficial del [[Partido de Trabajadores Revolucionarios]] y como tal no es un medio independiente al juzgar la posición de otro partido político (le explique en la PD y en su propio PD, y se limita a indicar en su reversión que ''no se puede eliminar referencias simplemente porque no nos gusta''. Esto es una abierta contravención a [[WP:FF]].<br />
Aún así, no quiero que esta denuncia se centre en ese artículo, ya que es un comportamiento habitual (basta ver su [https://es.wikipedia.org/w/index.php?title=Especial%3AContribuciones&target=Aroblesm&namespace=all&tagfilter=&start=&end=&limit=1000 historial]). Como digo arriba, muchas veces actúa así con vándalos y CPP, pero le pasa la máquina a lo que venga por delante y sin debatir (basta mirar su PD), y tampoco evidenciando un buen conocimiento de las políticas. Como indico arriba es un comportamiento habitual textbook de [[:en:WP:Status quo stonewalling]].
Solicito que se le indique al usuario lo incorrecto del proceder y que se le deje una clara advertencia respecto a SQS.
; Usuario que lo solicita
* [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 11:04 10 sep 2025 (UTC)
;Comentarios
{{comentario}}: SFBB omite que está eliminando referencias del artículo por mero gusto personal y sin justificación alguna. Se le propuso debatir pero no espera el debate. Yo solo he mantenido el artículo a su versión estable. Además, de todos los editores del artículo es el único que ha objetado una referencia y eso es raro en mi opinión. Me dedico a combatir el vandalismo y las ediciones arbitrarias sin consenso previo. No veo problemas en aquello. SFBB solo busca poder mantener su eliminación de referencias por mero gusto personal sin importar. --[[Usuario:Aroblesm|Aroblesm]] ([[Usuario Discusión:Aroblesm|discusión]]) 16:13 10 sep 2025 (UTC)
::No hombre....es un patrón de conducta. siempre que no te gusta algo movís a "versión estable" sin discutir nada hasta aburrir a la contraparte...eso es precisamente SQS. Tenís la PD llena de quejas por eso y seguís creyendo que lo estái haciendo bien, meramente porque aburrís al resto que le da lata pelear con vos (a mí mismo muchas veces me hai aburrido). Sin esta denuncia ni siquiera te habríai dignado a opinar...le diste dos veces más al botón (y sólo opinaste después de la denuncia y no dijiste nada en serio, salvo que estaba en la referencia...pff...nadie lo ha puesto en duda)...y lo que calificái como "arbitrariedad" lo hacís sin entender profundamente el funcionamiento de wikipeida. Es una obviedad que esa fuente no se puede usar lo que está siendo usada, no es "gusto personal" son las polítcas: por n-sima vez: lee [[WP:FF]]. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 19:17 10 sep 2025 (UTC)
:::'''Comentario'''. Al usuario se le explica porqué cierta fuerte [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=169577342&oldid=169428682 absolutamente no] es [[WP:FF]] desde ningún punto de vista e ipso facto y sin explicación alguna entra en guerra de ediciones instantánea [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=169577348&oldid=169577342 (1)] [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=next&oldid=169577358 (2)]. Así no se puede, y preocupa si un revisor actúa así en otras páginas no analizadas. [[Usuario:XavierItzm|XavierItzm]] ([[Usuario Discusión:XavierItzm|discusión]]) 01:11 20 sep 2025 (UTC)
::::Quiero agregar que cuando el usuario se encontró con una clara mayoría de usuarios que cuestionaba su actuar, fue a pedir [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Amarillos_por_Chile_2 la protección de la página en su versión]. Nuevamente, esto es parte del comportamiento habitual de usuario ([https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual&action=history ver el historial de ese tablón]): el usuario trata cualquier diferencia de opinión con la suya como si fuera vandalismo y utiliza ese tablón para cementar su versión (yo mismo lo he sufrido con anterioridad, aunque es difícil buscar un acto específico en ese tablón). Quiero agregar que esta denuncia <u>no es por este caso en particular</u> sino que contra el comportamiento habitual de manipular el sistema para mantener sus versiones de status quo, sin siquiera entrar a discutir y tratar cualquier tipo de edición (que no concuerde con su visión) como si fuera vandalismo. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 09:35 20 sep 2025 (UTC)
:::::Otro antecedente más del que ni siquiera estaba al tanto. Con anterioridad a su solicitud de protección de la página del 20 de agosto (rechazada por {{u2|Rafstr}}), cuando intentaba mantener así el status quo ante la presión de 5 usuarios (todos usuarios veteranos muy experimentados) que llegaron independientemente a esa PD - <small>tras mención general del problema en el café</small>, el usuario ya había exigido una [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Amarillos_por_Chile protección similar el 8 de agosto], con anterioridad a esta denuncia y con posterioridad a que yo haya iniciado una discusión en la PD (que el ignoró al igual que los mensajes que le dejé en su PD personal, mientras seguía dándole al botón revertir). Es un perfecto ejemplo de cómo el usuario consistentemente [[WP:NSW|abusa de las reglas del sistema]], a sabiendas de que si revierte 3 veces, puede denunciar a la contraparte por 3R, y pedir protecciones. Y, bueno...le sigue dando al botón sin intentar si quiera debatir.
:::::[https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/3RR/Actual&diff=prev&oldid=149513602#Aroblesm Ya ha sido denunciado anteriormente por exactamente lo mismo] y (como decía anteriormente) tiene la PD llena de quejas por lo mismo, pero la mayoría simplemente nos hartamos - yo ya muchas veces - y nos vamos a otra cosa sin denunciar...'''<u>pero este comportamiento tiene que parar de una vez por todas</u>'''. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 00:50 22 sep 2025 (UTC)
::::::Otro ejemplo (y sin buscar mucho): hace unos días atrás hizo lo mismo con {{u2|GKLakers02}} en el artículo [[Línea 6 del Metro de Santiago]] y terminó denunciando al usuario [https://es.wikipedia.org/w/index.php?title=Wikipedia:Vandalismo_en_curso&diff=prev&oldid=169275648 por un presunto vandalismo]. En en intertanto GKLakers02 intentaba discutir en la [https://es.wikipedia.org/wiki/Discusi%C3%B3n:L%C3%ADnea_6_del_Metro_de_Santiago#Tensi%C3%B3n_Incorrecta. PD del artículo] proveyendo fuentes correctas, pero siendo completamente ignorado pro el usuario. El asunto terminó cuando el artículo fue protegido, manteniendo el status quo (incorrecto) que tozudamente forzaba Aroblesm dándole al botón.
::::::Pero bueno...este el sólo otro ejemplo pero son cientos. Alguien tiene que parar al usuario (que es buenísimo combatiendo vandalismo, pero termina tratando a todo el mundo cual si fueran vándalos). [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 01:07 22 sep 2025 (UTC)
:a sabiendas que está denuncia aún no se resuelve, intenté corregir lo de la [[Línea 6 del Metro de Santiago]], siendo nuevamente revertido [https://es.wikipedia.org/w/index.php?title=L%C3%ADnea_6_del_Metro_de_Santiago&diff=prev&oldid=169740888 1] y [https://es.wikipedia.org/w/index.php?title=Línea_6_del_Metro_de_Santiago&diff=prev&oldid=169740854 2] oportunidades (en rápidisimo; me reveritió dos veces, antes de que pudiese agregar la info sobre las otras líneas, para las cuales existe similar documentación) por el usuario que no duda un segundo en entrar en GE para defender el status quo sobre la base de una referencia absolutamente obsoleta del año 2016 (sí, hace 9 años, el metro sí operaba a 750 Vcc). Lo peor es que revierte e indica que hay que ir a la PD donde ya se le ha explicado con lujo de detalles que está equivocado.<br />
:Por favor: alguien tiene que frenar a este usuario ya que le hace mucho daño a eswiki (piensen en todas las IPs/usuarios que él determina unilateralmente que son vándalos). Yo por mi parte, voy a intentar evitarlo hasta que se resuelva esto (y voy a dejar los artículos sobre le Metro de Santiago con un voltaje incorrecto por el momento), aunque es altamente probable que me revierta en otros lados (ya vigila una enorme proporción de los artículos sobre contingencia chilena); si lo hace, no voy a insistir y voy a dejar las cosas de manera incorrecta. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 23:40 29 sep 2025 (UTC)
Agregro otro antecendente: En [[Línea 6 del Metro de Santiago]] y [[Línea 3 del Metro de Santiago]], el usuario entró nuevamente (como ya ha ocurrido en muchas oportunidades con anterioridad) en conflicto con IPs. Las IPs tiene razón, pero el usuario las revierte. Como las IP insisten en agregar <u>la info corrrecta</u> (bien referencianda y discutida de la IP del artículo - aunque le usuario lo ignore y le siga dando al botón), el usuario va al TAb a pedir protección de ambas [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#L%C3%ADnea_6_del_Metro_de_Santiago] [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#L%C3%ADnea_3_del_Metro_de_Santiago] y {{u2|Virum Mundi}} terminó protegiendo ambas por 3 meses. <br />
Esto pone en evidencia una vez más, el mal que está haciendo el usuario de las reglas y los tablones. Las IPs (porque son dos creo) han hecho todo bien: han agregado info correcta, han referenciado y han ido a la PD....y el usario le sigue dando al botón para imponer una fuente obsoleta de 2016. Y recurre a cuatánto tablón haya para denunciar a supuesto vándalos..<br />
'''Por favor que alguien haga algo y pronto....o al menostenga en consideración este accionar permanente y dejen de validar los reportes del usuario.''' [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 02:59 6 oct 2025 (UTC)
;Respueta al comentario de abajo
::(no quiero que esto sea un foreo, pero hago este comentario para que esta denuncia <u>no se vaya por la ramas del caso puntual</u> sobre el que versa la respuesta)
{{pg|Virum Mundi}}: Aunque la denuncia no pasa por ahí, pero la tensión en el Metro de Santiago se ha cambiado de 750 Vcc a 1500 Vcc y de vuelta múltiples veces. Los cambios se realizan con relativa celeridad y la única documentación que queda disponible es precisamente la licitación y la especificación técnica de la misma (que fue lo provisto)...pero, vamos que estaremos de acuerdo que borrar todo pq hay un fuente obsoleta que no dice que en 2016 era diferente?
::Pero nuevamente, la denuncia no pasa por ahí. Esto es un ejemplo igual al caso de AxCh (descrito arriba) y muchísimso similares (que he visto/sufrido con el usuario y de los cuales hay una retahíla de protestas es su PD), en que revierte todo, trata a todo el mundo como vándalo, dice que hay que ir a la PD, y (si se digna a opinar en la PD - generalmente no lo hace), se limita a decir que tiene una fuente (por muy mala/obsoleta que sea) e ignora los argumentos en la discusión. Y luego recurre a tablones para pedir protecciones, denunciar vandalismo y así afianzar su versión. Es un mal uso y no te culpo a ti ni ningún sysop, porque es muy difícil darse cuenta del mal uso (repetitivo) que hace y a primera vista sí puede parecer correcto (y obviamente cómo el usuario hace múltiples denuncias que sí correctas...bueno...es más mucho difícil)...y por eso les pido por favor mucha atención con el usuario que le está haciendo daño a wikipedia. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 11:47 6 oct 2025 (UTC)
;Comentario admin
* No es mi intención intervenir en esta denuncia. Pero sí quiero aclarar, ya que fui mencionado por nombre, que la semiprotección de estos artículos se ha hecho por guerra de ediciones, pues no se puede llenar los historiales una y otra vez de modificaciones y reversiones. Aun así, antes de proteger el de la Línea 6, por pura curiosidad (me interesa el tema de ferrocarriles, aunque no particularmente el sistema metropolitano de Santiago de Chile), entré en una página de la compañía donde está indicado que actualmente los cables son "flexibles, unipolares, clase 5, de tensión de aislamiento de 750 V (fuerza) y 600 V (control) para 90ºC..." (y así sigue). También entré en la fuente proporcionada por las IP, un documento de finales del año pasado que detalla los pormenores de un proyecto (para mí, proyecto significa futuro). También leí la discusión, donde el denunciado de hecho sí intervino una vez, allí se proporciona como prueba una imagen realizada por el anónimo, almacenada en su Google Drive. Esta imagen de un visor digital colgado del techo no es una fuente creíble, no solo por ser fuente primaria, y no solo porque no se puede saber de dónde es (no pone el nombre del metro ni de la estación, solo un número colgado del techo, pero presumo de buena fe y asumo que es del lugar indicado), sino que en sí tampoco indica nada definitivo, puede estar por ejemplo en fase de pruebas o de desarrollo (teniendo en cuenta el poco tiempo transcurrido desde el documento mencionado) o de adaptación. Sí, obviamente puede ser también que ya está empleado, pero entonces hace falta una referencia que lo indique de verdad (no la de un proyecto). Insisto, no estoy aquí ni para debatir ni para valorar esta denuncia, solo dejar claro el motivo de la protección. las guerras de ediciones no pueden llevarse a cabo en los historiales de los artículos, invito a cualquiera a realizar las modificaciones necesarias en dichos artículos, si ha lugar, y/o participar en la discusión aportando las fuentes (al fin y al cabo estás páginas están semiprotegidas, cualquier usuario autoconfirmado puede intervenir en ellas). Por lo demás, lo dejo a otro admin. Saludos. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 05:10 6 oct 2025 (UTC)
;Continúa con más casos:
:Nuevamente el usuario en acción. [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Historia_del_Metro_de_Santiago_2 Acá pidiendo protección en TAB] porque un "supuesto Vándalo" estaría agregando una imagen (absolutamente pertinente al artículo). Por favor dejen de ignorar esto y pónganle freno al usuario. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 16:59 2 nov 2025 (UTC)
; Respuesta
{{admintab|1=Prueba|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:25, 9 February 2026 (UTC)|3=}}
== Retomo reporte de CPP política ==
; Asunto
Hace menos de un mes [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Nombres_inapropiados_y_vandalismo_persistente/2025/09#CPP_pol%C3%ADtica reporté en el tablón] un caso de CPP política, que fue lamentablemente desestimado, pues el usuario {{u|Pptrc}} ha vuelto con lo mismo, controlar el artículo del partido chileno [[Evolución Política]] y ahora se crea una entrada con IA de [[Juan Manuel Santa Cruz]] sin mayor complicación, e incluso pasó por la revisión de un patrullero. Insisto en que esta cuenta no tiene otro objetivo que controlar y promover contenidos de políticos de la formación en la que tiene interés demasiado particular.
:Por favor: por qué se espera para resolver estas cosas? es evidente que {{u2|Taichi}} tiene razón, y habiendo un proceso [[Elecciones parlamentarias de Chile de 2025|eleccionario en curso]], es evidente que la CPP está editando artículos con motivos propagandísticos...y que dada la coyuntura, se deben tomar medidas con celeridad. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 20:57 30 sep 2025 (UTC) <small>ps: aclaro que mi intervención acá fue para agregar el antecedente de la urgencia, dada la coyuntura</small>
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 15:17 17 sep 2025 (UTC)
; Respuesta
{{admintab|1=Probando a resolver esta otra a ver si ocurre...|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:12, 11 April 2026 (UTC)|3=}}
== Santos500p ==
; Asunto
Pido por favor que se tomen nuevas medidas para apaciguar el frenesí de ediciones del usuario {{u2|Santos500p}}, concernientes sobre todo con política de Perú, que [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ASantos500p&diff=169860726&oldid=169762965 en los últimos días] ha llegado al punto de tener varios artículos y categorías creadas por él en [[WP:CDB|consultas de borrado]], algunas teniendo consenso comunitario a favor del borrado.
En una de las consultas señalé que [https://es.wikipedia.org/w/index.php?title=Wikipedia:Consultas_de_borrado/Deface_Per%C3%BA&diff=prev&oldid=169776828 el usuario lleva bastante rato desconociendo las líneas entre los diferentes proyectos], con varios intentos en el pasado de señalarle sobre ello, pero sigue en la mezcla de contenidos que podrían estar perfectamente en Wikinoticias, Wikisource e incluso Wikiquote, pero no hay nada que lo impida, aduciendo que puede entorugar cualquier cosa como artículo de Wikipedia, incluso riñendo con [[WP:REC]] o [[WP:SRA]]. De hecho, su página de discusión ha recibido en los últimos dos meses una cantidad difícil de cuantificar de [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ASantos500p&diff=169860726&oldid=168959821avisos de borrado rápido, avisos de consultas de borrado y artículos sin relevancia], varios de ellos siendo borrados.
Esta situación ya suma a su <u>bloqueo parcial por dos años</u>, por lo que debería haber una restricción más certera que haga rectificar su proceder. Apelo a que el usuario pueda comprender que Wikipedia tiene bien delimitado [[WP:NO|sus noes]] y que debería él como usuario, ya no tan novato, entender esos límites. De lo contrario, dejo al encargo de un bibliotecario para que tome alguna medida extra para restringirlo.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 11:34 10 oct 2025 (UTC)
; Respuesta
{{admintab|1=Vamos a probar a resolver esta también|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 13:53, 11 April 2026 (UTC)|3=}}
== Usuario reincidente ==
; Asunto
* En marzo de este año, acudí al TAB por una serie de problemas en numerosos artículos creados por el usuario {{u|Ángel Luis Alfaro}}, [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscel%C3%A1nea/2025/06#Creaci%C3%B3n_de_art%C3%ADculos_con_varios_problemas ver aquí]. Ahora ha editado el artículo [[Alto Renacimiento]] con los mismos problemas por el cual puse esa denuncia en el TAB. Exceso de fotografías (173), referencias en las propias fotografías. Cientos de enlaces internos, algunas secciones son toda azul. Mal formato de las referencias, fuentes citadas (Fuentes citadas en Maniera moderna), usar como referencia artículos de wikipedia, véase la referencia 26. La sección notas es casi tan grande como el propio artículo. Y para terminar, no ha corregido ni uno solo de los artículos que ha creado anteriormente.
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:20 14 oct 2025 (UTC)
;Comentario
* {{ping|Ontzak}} No consigo entrar en el enlace (me va todo muy lento hoy), ¿es el mismo que resolví yo la última vez? <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 09:32 15 oct 2025 (UTC)
* {{ping|Virum Mundi}} si, el mismo. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:55 15 oct 2025 (UTC)
** Ya veo, bueno, me pongo a ello, puede que tarde un rato. {{ping|Ángel Luis Alfaro}} por favor evita más ediciones hasta que se resuelva esta denuncia. Un saludo. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 11:26 16 oct 2025 (UTC)
::{{comentario}} {{ping|Virum Mundi}}, a pesar del aviso, el usuario sigue [https://es.wikipedia.org/wiki/Especial:Contribuciones/%C3%81ngel_Luis_Alfaro editando]. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:45 26 nov 2025 (UTC)
; Respuesta
{{admintab|$0}}
== Adrian Silvera ==
; Usuarios implicados
* {{u|Adrian silvera}}
; Motivo
Hace una década que este usuario agrega contenido mal escrito, sin referencias y muchas veces innecesario. Lo bloquearon tres veces por este motivo. Estuve un año insistiendo para que activara el autocorrector y así por lo menos subsanar el tema de la ortografía. Lo hizo hace poco, creo, pero el remedio fue peor que la enfermedad: ahora confunde adjetivos, sustantivos y verbos, y pone tildes en cualquier parte. Esto no sería tan grave de no ser porque se le advertí unas tres veces y sigue igual. Hoy le mandé un mensaje por ese tema y lo primero que hizo fue [https://es.m.wikipedia.org/w/index.php?title=The_Matrix_Reloaded&diff=prev&oldid=170118708 esto]. En otro caso lo interpretaría como una tomadura de pelo, pero no creo que lo haga a propósito. De todas maneras, alguna consecuencia tiene que tener, para aprender.
; Usuario que lo solicita
* [[Usuario:Minguu|Minguu]] ([[Usuario Discusión:Minguu|discusión]]) 20:16 22 oct 2025 (UTC)
; Respuesta
{{admintab|1=aaaa|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:54, 9 February 2026 (UTC)|3=}}
== Propuesta de desbloqueo para Lenis Felipe ==
; Asunto
* Hola. Por este medio quisiera proponer al colegio de bibliotecarios el desbloqueo local de {{u|Lenis Felipe}}, usuario bloqueado hace ya más de tres años por creación de páginas vandálicas. Lenis se encuentra con bloqueo global, por lo que para poder ser desbloqueado globalmente necesita ser desbloqueado de alguna de las wikis donde tiene bloqueos actualmente, entre ellas, Wikipedia en español.
:La propuesta la planteo porque, habiendo pasado un tiempo prudencial, puedo atestiguar que Lenis pareciera haber enmendado su rumbo y ha colaborado en reportar vía IRC, de manera privada, vandalismos, evasores de bloqueo y hasta sugerir cambios a filtros antiabusos para detener algunos abusadores de largo plazo. Particularmente lo ha hecho desde enero de 2024. Me parece que tal y como fue el caso de Sargento de Hierro (perdón que le nombre, pero me gusta destacar casos de usuarios que se corrigieron :)), podría ser positivo darle una segunda oportunidad para convertirse en un elemento positivo para la comunidad. Ante ello, propongo su desbloqueo local y quedo atento a cualquier propuesta de términos para ello, en cuenta restricción de crear páginas nuevas, o similares. Saludos,
; Usuario que lo solicita
* '''[[Usuario:Jake Park|''Jake Park'']]''' [[Archivo:Coat of arms of Costa Rica.svg|20 px]] [[Usuario Discusión:Jake Park|<span style="color: red;">'''Problem?'''</span>]] 01:00 29 oct 2025 (UTC)
;Comentarios de biblios
* Desde mi punto de vista, los usuarios que no hayan tenido actitudes vandálicas sistemáticas posteriores al bloqueo no deberían permanecer bloqueados más de tres años. '''Apoyo''' el posible desbloqueo. De todos modos, consulto: ¿sabes qué edad tiene el usuario? Porque no es lo mismo alguien que hizo esas tonterías a los 16 años que a los 60; en el primer caso, puede haber madurado rápidamente, mientras que si fuera ''"mayorcito"'' como quien escribe, los aprendizajes de comportamientos son más difíciles. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 02:03 29 oct 2025 (UTC)
* EMHO todos son susceptibles de cambiar, no quiere decir que todos lo hagan, pero uno de los 5 pilares nos pide presumir buena fe. {{Ok|Votum pro}}. [[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:00 30 oct 2025 (UTC)
*
; Respuesta
(a rellenar por un bibliotecario)
== Unmuybuenusuario ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
{{u|Unmuybuenusuario}} se registró el 28 de octubre de 2025, o sea hace 12 días. Desde el primer momento se dedicó a hacer mantenimiento y mandar artículos a borrar. El segundo día ya [https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Permisos/Actual&diff=prev&oldid=170247444 solicitó el flag de reversor con el argumento de : '' pese a mi muy breve tiempo en Wikipedia, desearía poseer el permiso de reversor para revertir de manera más fácil que usando el botón deshacer''], o sea que asegura que hace poco tiempo que está en Wikipedia pero ya conoce los tipos de flags que existen y dónde solicitarlos.
@[[Usuario:Edslov|Edslov]], le negó el permiso, obviamente, ya que en ese momento tenía menos de 48 horas de creada la cuenta, pero no solamente opina que la decisión no fue justa
sino que además conoce perfectamente el Café y fue directamente a quejarse porque no se le dio el permiso, para preguntar [https://es.wikipedia.org/w/index.php?title=Wikipedia:Caf%C3%A9/Archivo/Ayuda/Actual&diff=prev&oldid=170287227 ''¿Cuánto tiempo desde mi registro tiene que transcurrir para poder recibir el flag de reversor? ¿O cuántas ediciones?''].
Le pedí al usuario [https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:Unmuybuenusuario que dejara de hacer mantenimiento] y él me dejó un mensaje protestando por que
[https://es.wikipedia.org/w/index.php?title=Usuaria_discusi%C3%B3n:Jaluj&diff=prev&oldid=170408787 no encuentra ninguna política que prohíba a un editor nuevo deshacer vandalismos o colocar plantillas de borrado rápido a artículos que cumplan alguno de los criterios de borrado rápido], lo cual es cierto, como tampoco hay ninguna política que prohiba a un usuario nuevo tener el flag de reversor, pero suponemos que para hacer este tipo de tareas se necesita tener experiencia y haber demostrado tener conocimientos para hacerlas bien. Por eso le pedí que se detenga y deje de hacer mantenimiento, porque si es un novato no podemos confiar en que lo haga.
Entonces me [https://es.wikipedia.org/w/index.php?title=Usuaria_discusi%C3%B3n:Jaluj&diff=prev&oldid=170408787 acusó de estar violando la políticas al morder a los novatos y no presumir buena fe]. Morder a los novatos es cuando se trata de una persona sin experiencia que todavía no conoce las normas y políticas de Wikipedia. Una persona novata no sabe ni que existe un Café, ni que existe un tablón para solicitar flags, ni que existe el flag de reversor ni que existe el "deshacer".
Pero a la vez me acusa de no presumir buena fe al sospechar que no es novato. Entonces, ¿en qué quedamos? Porque si es un novato, no debería estar haciendo mantenimiento y si no lo es, entonces yo no estaría presumiendo mala fe al sospechar que no lo es.
Esta cuenta me está difamando al dejar mensajes como [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:A.piquerasm&diff=prev&oldid=170408867 este], porque además de acusarme de morder a un novato y de presumir mala fe me acusa por haber solicitado una VU y de haberlo "intimidado". Ahora resulta que por haberle pedido que deje de hacer mantenimiento y por haber pedido una VU yo soy la que viola las políticas y lo estoy "intimidando". Yo no lo acusé acusé ''gravemente de abuso a largo plazo'', yo solicité una VU porque sospecho que puede ser una LTA. Si no lo es, no tiene nada de qué preocuparse y si es un novato mucho menos. Solicito que se le haga un llamado de atención para que deje de difamarme a mis espaldas, ya que ni siquiera me enlazó para que yo no me enterara.
; Usuario que lo solicita
* [[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:17 10 nov 2025 (UTC)
* Te pido amablemente usuaria [[Usuario:Jaluj|Jalu]] una solución a este problema, porque yo no te estoy difamando, si conozco el café, el tablón, si se hacer reversiones, es porque fui anónimo y como usuario anónimo ya me dedicaba a hacer estas cosas, un usuario me sugiero visitar la página de cambios recientes y eso es lo que estoy haciendo, visitar los cambios recientes ¿Tengo prohibido deshacer vandalismos encontrados? Por cierto, no me indicaste cuales son las ediciones supuestamente arbitrarias, las ediciones que he hecho han sido deshacer vandalismos, yo no soy ni títere, ni evasor, ni mucho menos abuso a largo plazo, soy usuario completamente nuevo y esta es mi primera cuenta, y te recuerdo un fragmento de la página de usuarios títeres: '''Puede ser fácil identificar a un usuario títere, si muestra un conocimiento de las políticas, convenciones de Wikipedia y técnicas avanzadas de edición que no es de esperar en un novato (aunque debe presumirse buena fe: es posible que sea un usuario que haya colaborado en otra edición de Wikipedia, en alguna otra wiki o <u>que haya participado mucho tiempo como anónimo</u>)''' (subrayado mío). Si conozco como deshacer vandalismos, es porque antes editaba como anónimo, y esta cuenta fue creada para ayudar a Wikipedia, de ninguna manera la cree para LTA o ediciones arbitrarias. ¿Cómo propones que se solucione este problema y que tipo de ediciones puedo hacer y que tipo de ediciones no puedo hacer? --[[Usuario:Unmuybuenusuario|Unmuybuenusuario]] ([[Usuario Discusión:Unmuybuenusuario|discusión]]) 23:27 10 nov 2025 (UTC)
:{{comentario}}: [https://es.wikipedia.org/w/index.php?title=Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios&oldid=170625007#Evasi%C3%B3n_de_bloqueo:_Cris2020 Resultado de la SVU]. --'''[[user:Stïnger|<span style="text-shadow:#FFD700 1px 1px 2px; class=texhtml"><span style="font-family:'Calibri';color:black">Stïnger</span></span>]]''' <sup>[[Archivo:Bureau kage.svg|15px|link=User talk:Stïnger]]</sup> 00:58 24 nov 2025 (UTC).
; Respuesta
{{admintab|Al no ser un caso reciente (ya pasaron algunos días) apercibo a {{u2|Unmuybuenusuario}} de [[WP:PBF]] primeramente y posterior a [[WP:PPBF]]. Ambos juicios caen en violaciones a [[WP:E]] y [[WP:CIV]] (supongo al ya haber editado como IP sabrá por que, por lo que en caso de reincidencia podría haber sanción. En cuanto al flag, queda al criterio del bibliotecario que lo otorga, no hay tiempo ni cuota determinada, pero es bastante obvio que más sabe el diablo por viejo que por diablo, yo tampoco lo habría otorgado.|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:09 26 nov 2025 (UTC)}}
== Expulsado de la Wikipedia en inglés viene acá a hacer lo mismo... ==
;Usuarios
* {{u|SocialQuote}}
* {{u|2800:484:7380:0:0:0:0:0/44}}
; Asunto
Tanto [https://en.wikipedia.org/wiki/Special:Contributions/SocialQuote la cuenta registrada] como [https://en.wikipedia.org/wiki/Special:Contributions/2800:484:7380:0:0:0:0:0/44 el rango IP] se encuentran sancionados desde septiembre en la Wikipedia en inglés, por ediciones conflictivas, reversiones sin sentido e incluso insultos y amenazas.
Ya acá [[Usuario discusión:2800:484:7385:F0:95EE:CA0B:4429:B24C|ha causado problemas como anónimo en junio]] y la cuenta [https://es.wikipedia.org/w/index.php?title=Scarface_(pel%C3%ADcula_de_1983)&diff=prev&oldid=168285955 incluso ripostó contra un bibliotecario], y [https://es.wikipedia.org/w/index.php?title=Harry_Potter_y_el_c%C3%A1liz_de_fuego&diff=prev&oldid=169807011 está constantemente] [https://es.wikipedia.org/w/index.php?title=Dinero_negro&diff=prev&oldid=170282821 revirtiendo al bot de mantenimiento]. Nótese que los temas que edita tanto la cuenta como la IP son las mismas (series de TV y películas), y las sanciones aplicadas en en.wiki fueron hechas el mismo día.
Debido a esta coincidencia y la situación que está persistiendo ahora en la Wikipedia en español, pido que se tomen medidas.
:{{comentario}} Añado [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:Farisori&diff=prev&oldid=170531619 otro mensaje bastante incordiante contra otro bibliotecario] haciéndolo suponer entre líneas que no sabe redactar artículos. '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 00:10 18 nov 2025 (UTC)
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 04:18 17 nov 2025 (UTC)
; Respuesta
{{Hecho|1=Bloqueado}} por Rafstr. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:40 19 nov 2025 (UTC)
== Borrar y ocultar datos sensibles en página de usuario ==
; Asunto
Pido con carácter de urgencia que algún bibliotecario [https://es.wikipedia.org/w/index.php?title=Usuario:Dalma_Huerta_Mercado_Calder%C3%B3n&diff=prev&oldid=170526877 oculte datos sensibles y muy personales] de [[Usuario:Dalma Huerta Mercado Calderón|esta página de usuario]], ya que es aún una niña (ni siquiera es adolescente). No creo que sea consciente de que lo que hace es peligroso a su edad.
Añado que ya [https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:Dalma_Huerta_Mercado_Calder%C3%B3n#Informaci%C3%B3n_personal no es la primera vez que la pillan colgando datos personales], el año pasado hizo lo mismo. Si toca hacer alguna medida administrativa que evite que la menor siga exponiendo sus datos sin cuidado, adelante.
; Comentarios
No soy bibliotecario, pero {{ping|Taichi}} creo que lo mejor es mandar un correo a [[Wikipedia:Supresores|oversight]], o como mínimo realizar la solicitud en algún lugar menos visible (como IRC). --[[Usuario:Xacaranda|Xacaranda]] [[Usuario discusión:Xacaranda|(mensajes)]] 18:56 18 nov 2025 (UTC)
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 04:22 17 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Sí}}, dada la excesiva información personal y la imposibilidad de ocultar la última edición, opté por el borrado de la PU. También dejé un mensaje a la usuaria. En caso de reincidir, aplicaría una medida, como un bloqueo parcial, para impedir que vuelva a crear su página de usuario. Un saludo,|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:55 19 nov 2025 (UTC)}}
== LTA ==
; Usuarios implicados
* {{u|Mauro08L}}
; Motivo
Hmm, otra vez, otro títere más de {{u|Claudio1098}}.
; Usuario que lo solicita
* —<span style="font-family:Trebuchet MS;font-size:95%">[[Usuario:Mαrti|<span style="color:#636;">Mαrti</span>]] <span style="color;background:#CBE2F7;border-radius:9px;"> [[Usuario discusión:Mαrti|'''ϟ''']] </span></span> 20:23 18 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:42 19 nov 2025 (UTC)}}
== Recreación reiterada ==
; Asunto
* El usuario {{u|Archivoteleditor}} insiste en recrear el mismo programa de televisión con distintas variaciones del título, véase [[Tentaculos]], [[Tentáculos]], [[Ni que fuéramos tentáculos]] y [[Ni Que Fuéramos Tentáculos]], contabilizo más de una docena de recreaciones, ya se le avisó de un posible conflicto de interés.
:En cuanto al artículo, se trata de un programa que duró apenas 3 meses en antena, aunque El País y EuropaPress son referencias fiables, mencionan el programa superficialmente.
; Usuario que lo solicita
* '''C:\>''' [[Usuario:A.piquerasm|A.piquerasm]] '''[''' [[Usuario Discusión:A.piquerasm|Discusión]] ''']''' 16:43 19 nov 2025 (UTC)
; Respuesta
{{admintab|{{hecho}}. Inhabilitado de crear páginas. Un saludo.
|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 19:49 19 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170580247]]
; Motivo
Lenguaje soez
; Usuario que lo solicita
* [[Usuario:Casisgaal|<span style="font-size:black 3px 1px 3px; font-variant:Corbel; color:blue; text-shadow:cyan 2px 1px 2px">Casisgaal</span>]] [[Usuario discusión:Casisgaal|(Discusión)]] 16:16 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada y cuenta bloqueada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:36 21 nov 2025 (UTC)}}
== Anónimo escurridizo ==
; Asunto
Un anónimo que cambia de cuenta temporal y de IP lleva dos meses haciendo cambios sin sentido en partidos políticos de Colombia [https://es.wikipedia.org/w/index.php?title=Independientes_(Colombia)&action=history como este], [https://es.wikipedia.org/w/index.php?title=Partido_Comunista_de_Colombia_-_Marxista_Leninista&diff=prev&oldid=170580251 cambiando un «es» por «fue»] (haciendo entender que ya no existen), pero sin aportar pruebas que los partidos ya no están activos. Como no está aportando nada [[WP:VER|que lo sustente]], se le está revirtiendo pero insiste en reponerlo, llegando a una conducta que no se puede considerar como constructiva.
Además, nos pone en prueba con el sistema de cuentas temporales ya que no sólo está cambiando de cuenta temporal, sino de IP, por lo que dejo en consideración que hacer. Estás serían las direcciones en cuestión: [https://es.wikipedia.org/wiki/Especial:IPContributions/191.108.3.30], [https://es.wikipedia.org/wiki/Especial:IPContributions/191.108.59.86], [https://es.wikipedia.org/wiki/Especial:IPContributions/152.201.226.108] y [https://es.wikipedia.org/wiki/Especial:IPContributions/152.202.79.18].
Previo a la instauración de cuentas temporales también editó con las siguientes IPs:
* {{u|152.201.203.233}}
* {{u|186.113.76.107}}
* {{u|191.111.9.153}}
Es posible que incluso se considere en semiproteger si en caso tal el anónimo siga por cambiar de IP y continúe con esta situación.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 16:49 20 nov 2025 (UTC)
; Respuesta
{{admintab|{{prot|60}}|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:19 26 nov 2025 (UTC)}}
== Acoso ==
; Usuarios implicados
* {{u|~2025-35257-44}}
* {{u|~2025-35202-10}}
; Motivo
Acoso a un usuario
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 21:57 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 16:49 21 nov 2025 (UTC)}}
== Acoso ==
; Usuarios implicados
* {{u|Narsenopoulos}}
; Motivo
{{diff|170585395|Acoso a un usuario}}
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 22:03 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Usuario bloqueado por Virum Mundi. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:28 21 nov 2025 (UTC)}}
== Ocultar ediciones ==
; Asunto
* [[Especial:Diff/169433403]]
* [[Especial:Diff/170587004]]
; Motivo
El artículo suele ser vandalizado mediante la inclusión de nombres completos de particulares en esta lista, entiendo que motivados por algún tipo de rencilla personal. Creo que es conveniente ocultarlos ya que que, de lo contrario, esos nombres quedan indexados y accesibles por internet, asociados a una lista de violadores en serie, lo cual puede tener implicaciones en su vida personal.
; Usuario que lo solicita
* [[Usuario:Nacaru|Nacaru]] [[Archivo:Noto Emoji KitKat 2601.svg|19px]] ([[Usuario_discusión:Nacaru|discusión]]) 00:23 21 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Ediciones ocultadas. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:39 21 nov 2025 (UTC)}}
== Solicitud para corregir redirecciones dobles en [[Ciudad del Cuzco]] y [[Cusco, Perú]] ==
Hola. Por favor, ayúdenme a solucionar el problema de las redirecciones dobles en las páginas de redireccionamiento [[Ciudad del Cuzco]] y [[Cusco, Perú]]. Gracias. [[Especial:Contribuciones/~2025-35342-08|~2025-35342-08]] ([[Usuario discusión:~2025-35342-08|discusión]]) 04:33 21 nov 2025 (UTC)
;Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 04:45 21 nov 2025 (UTC)}}
== Me sentí acosada por Jaluj, por favor, paciencia con los novatos ==
; Asunto
Soy una nueva editora (bueno, era una nueva editora) estudiante de 5º de Veterinaria y entré en la wikipedia con mucha ilusión.
Detecté un artículo escrito llamado “Comida para gatos” lleno de enlaces spam a marcas comerciales, así como un claro sesgo pro pienso alabando sus virtudes.
Después de leerme todos los tutoriales edité el artículo intentando ser objetiva, eliminado enlaces spam y texto publicitario.
Un editor deshizo todo mi trabajo dando la razón de que yo había eliminado referencias. https://es.wikipedia.org/w/index.php?title=Comida_para_gatos&diff=170390013&oldid=170376180
Vi la posibilidad de aprender de mis errores y le pregunté por que consideraba fiables (ya que repuso todos los enlaces spam) Eran enlaces a artículos como “los 8 mejores marcas de piensos” (que es publicidad de 8 marcas de piensos, con enlaces a afiliados de Amazon), o webs que no funcionaban etc etc
Me contestó que había eliminado todo mi trabajo porque yo había añadido 1 referencia “por tratarse de blog y por tanto no considerarse fiable”. Era un enlace a un artículo de una clínica veterinaria como había 3 o 4 igual en el artículo. https://clinicaveterinarium.es/el-gato-es-omnivoro-o-carnivoro/
No entendí que para eliminar ese enlace se eliminara todo el trabajo realizado en el artículo, y sobre todo que se repusieran los enlaces spam, y por qué esos enlaces spam eran fuentes fiables.
Para resumir, volví a poner el artículo tal y como yo lo había escrito (eliminado más de 10 enlaces spam) quitando el enlace a dicha clínica, sospechando que era ese el problema, y el editor me agradeció la edición. Seguí sin aprender. Pero no me quejo de este editor.
Y aquí viene mi ruego.
Posteriormente a todo esto, y tras muchos días después, apareció el editor Jaluj, https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:LaVeterinaria , donde me acusó de faltar a la etiqueta y falta de civismo al preguntar al editor. Pedí disculpas por mis preguntas si habían molestado y volví a decir que mi intención era aprender y por eso preguntaba.
Tras mi respuesta, el editor Jaluj fue a una edición mía en otro artículo, y la eliminó, diciendo que no era una fuente fiable https://es.wikipedia.org/w/index.php?title=Perro_de_caza&curid=707821&diff=170565115&oldid=170545527 La ACCM es un organismo avalado por el Gobierno https://servicio.mapa.gob.es/arca/download.html?id=20338485&contentType=application/pdf que reconoce oficialmente a los perros de raza, así que supongo que son una fuente entendida del tema para hablar de razas.
Además de eliminar esa información, me vuelve a acusar de falta de civismo y de etiqueta, por lo que me declaré Retirada y así se lo dije como respuesta, ya que no entendía nada, me di cuenta que no podía aprender y me sentía atacada.
He recibido un email de wikipedia donde me avisa que el editor Jaluj obviando todas mis disculpas y petición de información sobre la organización oficial sólo me exige el nombre de mi mentor.
Solo pido un poco de paciencia y empatía con los nuevos editores, necesitamos empatía y ayuda para editar, no acusaciones de mala fe y falta de civismo. Yo lo he intentado, cuiden a los que vengan nuevos detrás de mi. Gracias por leer.
; Usuario que lo solicita
--[[Usuario:LaVeterinaria|LaVeterinaria]] ([[Usuario Discusión:LaVeterinaria|discusión]]) 14:01 21 nov 2025 (UTC)
;Comentario adicional
Permito añadir que {{u2|Leoncastro}} y mi persona [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ALaVeterinaria&diff=170608554&oldid=170595929 hemos tratado separadamente de mediar en el asunto], pero la usuaria está demasiado a la defensiva e incluso [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ATaichi&diff=170606470&oldid=170599847 me dejó esta contestación], incluso cuando buscaba seriamente ayudarle. Lo que denoto en sus contestaciones además, es que ella como estudiante universitaria dice tener algún "mentor" en su universidad (pero no está adscrito acá), por lo que estoy deduciendo que hay alguna orientación mal ejecutada y pareciera que la estudiante está obligada a editar como sea, a expensas de que cualquier patrullero o bibliotecario sea maltratado de esta manera si le revisan sus contribuciones. Ojalá haya alguna forma de que se haga entender y ver ante las instancias de qué o quién movió institucionalmente a la alumna a que pasara esto. '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 14:35 22 nov 2025 (UTC)
; Respuesta
{{admintab|1={{No}}. {{U|LaVeterinaria}}, no me parece que, en ningún momento, Jaluj o algún otro de los varios usuarios que han buscado orientarte te hayan «maltratado» o dado motivos para sentirte intimidada o acosada. Más bien, algunas de tus interacciones muestran que, ciertamente, pareces estar a la defensiva y que podrían malinterpretarse. Supongo que el primer mensaje de Jaluj estuvo motivado por una de tus respuestas a Casisgaal —«¿Por qué escribir texto apoyado en enlaces verificables como la universidad etc.? ¿La wikipedia española se basa en la inglesa y no podemos editar sino solo traducir?»—, que se alejó del [[Wikipedia:Civismo|civismo]] esperado en las interacciones entre usuarios en Wikipedia. Asumiste que el mensaje de Jaluj estuvo motivado por tu «insistencia por preguntar lo que no entendía», cuando claramente te explicó, de forma amable y con la paciencia que en varias ocasiones has pedido, que fue por tu tono. Coincido con Jaluj en que parece que no lees los mensajes completos.
<br>
Si preguntó Jaluj sobre tu «mentor», que tú misma mencionaste en la conversación con Casisgaal, es porque, ciertamente después de estas interacciones que has tenido, surge la duda de quién es, si es usuario de Wikipedia y si tiene conocimiento de las políticas que la rigen. Parece que no. Por ello, sería mejor que aprovecharas herramientas como el [[Wikipedia:Programa de tutoría|programa de tutoría]] —cabe destacar que {{u|Ezarate}} ya amablemente se ofreció a ayudarte con tus ediciones—. Todo lo anterior, ya te lo había explicado Leoncastro. Además, él te dejó un extenso mensaje donde explicó y trató de mediar. Tu respuesta y actuar subsecuente es, cuanto menos, desconcertante.
<br>
En suma, descarto la denuncia. {{U|LaVeterinaria}} no me parece que el tono que uses y la forma de interactuar que tienes con otros usuarios, que han intentando orientarte, sea adecuada o benéfica para la enciclopedia. Así como insistes en pedir paciencia, ofrécela a los demás y no acuses de intimidación o denuncies tan fácilmente. Aprovecha los mensajes en los que se te ha explicado un poco sobre la enciclopedia, aprovecha el programa de tutoría o los ofrecimientos de usuarios como Ezarate. No continúes con esta forma de actuar porque fomenta conflictos y puede conducir a medidas que nadie quiere que se tengan que tomar. Un saludo,|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 22:00 22 nov 2025 (UTC)}}
== LTA ==
; Usuarios implicados
* {{u|Henrysmithwa5}}
; Motivo
LTA aerolíneas
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:15 21 nov 2025 (UTC)
; Respuesta
{{admintab|{{ok}} por Jake Park. |--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 00:38 22 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170607263]]
; Motivo
Etiqueta
; Usuario que lo solicita
* [[Usuario:CharlieRaMx|CharlieRaMx]] ([[Usuario Discusión:CharlieRaMx|discusión]]) 12:02 22 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 12:30 22 nov 2025 (UTC)}}
== Ocultar ediciones ==
; Usuarios implicados
* {{u|Zanahorita Extraida}}
; Motivo
Pido que se oculten todas las ediciones de este títere bloqueado, quien como siempre ha lanzado comentarios denigrantes, ofensivos y hasta insultos.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 18:08 23 nov 2025 (UTC)
; Respuesta
{{Hecho}} por Saloca. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 20:00 23 nov 2025 (UTC)
== LTA ==
; Usuarios implicados
* {{u|Patthenry5}}
; Motivo
LTA aerolíneas
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 18:24 23 nov 2025 (UTC)
; Respuesta
{{Hecho}} por MiguelAlanCS. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 19:59 23 nov 2025 (UTC)
== Ocultar ediciones ==
; Asunto
* [[Especial:Diff/170589208]]
* [[Especial:Diff/170589204]]
; Motivo
Vandalismo
; Usuario que lo solicita
* [[Usuario:CarlosEduardoPA|<span style="font-size:80%;background:#000;color:#fff;border-radius:25px;padding:3px 8px;">CarlosEduardoPA</span>]] [[Usuario discusión:CarlosEduardoPA|✉️]] 22:29 23 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Ediciones ocultadas. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:26 24 nov 2025 (UTC)}}
== MediaWiki:Jsonconfig-use-category ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
; Asunto
* {{a|MediaWiki:Jsonconfig-use-category}}
* Please delete the page as it is no longer necessary following [[:phab:T378352|T378352]] ([[:Category:Wikipedia:Páginas que usan la extensión JsonConfig|the category]] has already been deleted). See also [[:m:Steward requests/Miscellaneous#Category:Pages using the JsonConfig extension]].
; Usuario que lo solicita
* [[Usuario:NguoiDungKhongDinhDanh|NguoiDungKhongDinhDanh]] ([[Usuario Discusión:NguoiDungKhongDinhDanh|discusión]]) 23:09 23 nov 2025 (UTC)
; Respuesta
{{admintab|{{ok}}|--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 09:01 24 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170617475]]
; Motivo
Vandalismo
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 23:46 23 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada por Virum Mundi. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:22 24 nov 2025 (UTC)}}
== Plantillas mantenidas sin justificación en Conservatorio de Música de la Universidad Austral de Chile ==
; Asunto
Solicito la intervención de un bibliotecario respecto al artículo [[Conservatorio de Música de la Universidad Austral de Chile]].
El usuario Ontzak colocó dos plantillas (promocional e irrelevante) el día 18 de noviembre. Desde entonces el artículo ha sido completamente reescrito, reforzado con referencias académicas y eliminado el contenido que podía ser de estilo promocional e irrelevante. Conforme a lo indicado en las propias plantillas, abrí hilo en la página de discusión solicitando consenso para su retirada. El usuario no ha respondido pese a haber sido notificado y mencionado en dos ocasiones.
; Motivo
El comportamiento observado, colocar plantillas, no responder a la discusión y bloquear de facto la retirada, encaja en lo descrito en [[WP:DUEÑO]]. A día de hoy las razones originales ya no se sostienen, pero las plantillas permanecen en el artículo sin justificación actual y el editor que las colocó evita participar en la discusión.
; Usuario que lo solicita
[[Usuario:Hoppedup|Hoppedup]] ([[Usuario Discusión:Hoppedup|discusión]]) 12:26 24 nov 2025 (UTC)
Solicito que un bibliotecario revise el caso:
• si procede, retire las plantillas,
• y si fuese necesario, recuerde al usuario implicado la obligación de participar cuando se cuestiona una plantilla mantenida.
Gracias.
; Respuesta
{{admintab|1={{Hecho}}. Por lo demás, todos sabemos cómo hace las cosas {{u2|Ontzak}}; sería mejor que las hiciera con un poco más de intercambio con los demás, pero no se le puede pedir a los editores lo que no pueden o no quieren aportar en Wikipedia (editar sigue siendo una actividad voluntaria, todavía). En mi personal opinión, es mejor tenerlo haciendo lo que hace que no tenerlo, de modo que lo más que podemos hacer es volverlo a invitar a ser un poco más comunicativo. En cuanto a lo de WP:DUEÑO, me parece que te has pasado de largo unos cuantos kilómetros en tu interpretación; un poco más de calma, por favor. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:10 24 nov 2025 (UTC)}}
== Spam incesante ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
; Asunto
* Rango con decenas de ediciones spam, al menos unas 34 desde marzo de este año.
* {{u|89.214.0.0/17}}
* [[Especial:IPContributions/89.214.0.0/17]]
; Usuario que lo solicita
* [[Usuario:Xacaranda|Xacaranda]] [[Usuario discusión:Xacaranda|(mensajes)]] 18:58 25 nov 2025 (UTC)
; Respuesta
{{admintab|{{Sí|He aplicado un bloqueo parcial a los artículos objeto de spam}}.|2=[[Usuario:Montgomery|Montgomery]] ([[Usuario Discusión:Montgomery|discusión]]) 19:04 25 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170663031]]
; Motivo
Transgresión de las reglas de etiqueta.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 19:17 25 nov 2025 (UTC)
; Respuesta
{{admintab|$oc|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 20:09 25 nov 2025 (UTC)}}
== Solicitar traslado ==
; Asunto
* Solicito el traslado de [[CITEDEF]] a [[Instituto de Investigaciones Científicas y Técnicas para la Defensa]], siguiendo la recomendación de la [[Wikipedia:Convenciones de títulos|convención de títulos]] de evitar el uso de acrónimos y siglas siempre que se pueda.
; Usuario que lo solicita
* [[Usuario:Comecaballos|Comecaballos]] ([[Usuario Discusión:Comecaballos|discusión]]) 00:17 26 nov 2025 (UTC)
; Respuesta
{{admintab|{{hecho}}|--[[Usuario:Ezarate|Esteban]] ([[Usuario Discusión:Ezarate|discusión]]) 11:58 26 nov 2025 (UTC)}}
== Cuenta de "propósito particular" ==
; Asunto
* No tengo del todo claro si [https://es.wikipedia.org/w/index.php?title=Especial:Registro/block&page=Usuario%3AInfohisto esto va acá] o a esta altura debería reportarse como vandalismo. Ver sus ediciones de hoy, y sus resúmenes de edición, en {{a|Caporales}} y {{a|Tundiqui}}. Esta cuenta, que ya fue identificada como lo que es, definitivamente no tiene otro propósito aquí que el que ya es evidente. Y lo ha hecho ya en varios artículos.
Mirando su página de usuario veo que tres administradores ya han interactuado con él. Así que aprovecho para citarlos: {{u|Tector}}, {{u|Saloca}} y {{u|Marcelo}}
; Usuario que lo solicita
* [[Usuario:Rastamby|Rastamby]] ([[Usuario Discusión:Rastamby|discusión]]) 02:34 26 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}, ya fue suficiente: usuario expulsado y artículos protegidos a largo plazo. Gracias por el aviso.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 02:43 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170670252]]
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 04:58 26 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 05:04 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170670276]]
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 05:00 26 nov 2025 (UTC)
; Respuesta
{{admintab|1=Prueba|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:26, 9 February 2026 (UTC)|3=}}
== Solicitud para corregir redirecciones dobles en [[Departamento de Cusco]] y [[Provincia de Cusco]] ==
Hola. Por favor, ayúdenme a solucionar el problema de las redirecciones dobles en las páginas de redireccionamiento [[Departamento de Cusco]] y [[Provincia de Cusco]]. Gracias. [[Especial:Contribuciones/~2025-36297-96|~2025-36297-96]] ([[Usuario discusión:~2025-36297-96|discusión]]) 05:35 26 nov 2025 (UTC)
== CDI ==
; Usuarios implicados
* {{u|JALGUERRERO}}
; Motivo
Claro conflicto de interés. Sus ediciones se centran en el artículo que lleva su nombre
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 10:53 26 nov 2025 (UTC)
; Respuesta
{{admintab|{{Ok}}, hecho por {{u2|Virum Mundi}}; no puedo creer nos duró 15 años.|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:27 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170680869]]
; Usuario que lo solicita
* [[Usuario discusión:Divinations|Divinations]] 21:35 26 nov 2025 (UTC)
; Respuesta
{{admintab|1=Ejemplo de resolución de solicitud que menciona a {{ping|Nacaru}}.|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:39, 9 February 2026 (UTC)|3=}}
== varias ediciones ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
Prueba de texto
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:45, 20 February 2026 (UTC)
; Respuesta
{{admintab|1=Qué tal está petición de aquí??? {{Ok}}|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:13, 11 April 2026 (UTC)|3=}}
== Ocultar edición [[Especial:Diff/619272|619272]] ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
JHVBIKUHGVIK
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:47, 20 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar edición 619272 ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
VXCV XZVZCVZC
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:48, 20 February 2026 (UTC)
; Respuesta
{{admintab|1=OKIII|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:49, 20 February 2026 (UTC)|3=}}
== Ocultar edición 684158 ==
; Asunto
* [[Especial:Diff/684158]]
; Motivo
kjanxkajsncxa
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:34, 26 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Prueba de toro túitulo ==
; Usuarios implicados
* {{u|Sergio Enrollment 2}}
; Motivo
Prueba de otra raźon
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:55, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Otra prueba de título más ==
; Usuarios implicados
* {{u|Sergio Enrollment 2}}
; Motivo
Desarrollando razón
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:55, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== k,jnkjjn ==
; Usuarios implicados
* {{u|Dicto23456}}
; Motivo
lknmlkj lkjlk jkl
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:59, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Otra denuncia la que sea ==
; Usuarios implicados
* {{u|Cenarium}}
; Motivo
A ver qué tal
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 01:08, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74252,671081,671082 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/671081]]
* [[Especial:Diff/671082]]
; Motivo
Motivo cualquiera
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:43, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74252, 74251, 89098 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/74252]]
* [[Especial:Diff/74251]]
* [[Especial:Diff/89098]]
; Motivo
Ejemplo
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:45, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar edición 74252 ==
; Asunto
* [[Especial:Diff/74252]]
; Motivo
qeasdsa
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:46, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74251 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/74251]]
; Motivo
asdAD SADAS
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:46, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74253, 74254, 74255, 74256 y 74252 ==
; Asunto
* [[Especial:Diff/74253]]
* [[Especial:Diff/74254]]
* [[Especial:Diff/74255]]
* [[Especial:Diff/74256]]
* [[Especial:Diff/74252]]
; Motivo
A ver si aparecen en el mismo orden.
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:52, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
m4b9q13ttek6cmwpkbqebdd0nkwtlk9
737588
737586
2026-04-11T13:53:47Z
Nacaru
54746
Resolviendo solicitud «[[Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscelánea/Actual#Propuesta_de_desbloqueo_para_Lenis_Felipe|Propuesta de desbloqueo para Lenis Felipe]]» mediante [[WP:TL|Twinkle Lite]]
737588
wikitext
text/x-wiki
<!-- AVISO: No semiproteger la miscelánea del tablón pues aquí redirigen muchas plantillas y avisos en páginas varias para que los novatos puedan aportar o realizar consultas que sólo bibliotecarios pueden resolver -->
<noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}}
{{Archivado automático
|Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/AAAA/MM
|Días a mantener=7
}}
== Situación extraña con tinte político ==
; Asunto
Desde 2019 aproximadamente se ha visto un grupo de IPv6 dentro del rango {{u|2804:14C:0:0:0:0:0:0/32}} editando y tratando de manipular contenidos políticos controvertidos (específicamente en [[Fascismo en América]] y otros más), de hecho por lo que se ve [[Discusión:Fascismo en América|aquí]] el anónimo se expresa de una manera particular sin saber siquiera español y sólo deja links sin mayor explicación. Adicionalmente, el anónimo está constantemente dejando mensajes a {{u2|Raimundo57br}} haciendo una serie de solicitudes de modificaciones a artículos de tinte político (sobre todo si son relativos a la derecha o izquierda política). Pero cuando vemos más a profundidad, vemos otras IPs como {{u|187.20.115.154}} dejando lo mismo al usuario, o este [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:Raimundo57br&diff=prev&oldid=150518775 mensaje] de Raimundo57br dirigido a otra cuenta haciendo ping, pero en su propia discusión en un intento de coordinación de su desbloqueo. Hago acotar que Raimundo57br [https://pt.wikipedia.org/wiki/Especial:Contribui%C3%A7%C3%B5es/Raimundo57br está expulsado de la Wikipedia portuguesa desde el 2022], luego de múltiples problemas allá y numerosos bloqueos temporales.
También, que la Wikipedia portuguesa maneja estrictamente el uso de direcciones anónimas y [https://pt.wikipedia.org/wiki/Usu%C3%A1rio(a):2804:14C:0:0:0:0:0:0/32 todo el rango 2804:0:0:0:0:0:0:0/19] se encuenta bloqueado desde 2020. Existe una posibilidad de que haya una inusual coordinación entre anónimos y Raimundo57br para manipular artículos de política en Wikipedia en español y la Wikipedia portuguesa (a partir de una tercera cuenta), ante la imposibilidad de ambos entes (ya que se les hace más cómodo intervenir acá).
Incluyo al reporte que [https://es.wikipedia.org/w/index.php?title=Discusi%C3%B3n:Fascismo_en_Am%C3%A9rica&diff=prev&oldid=168802559 con estos] [https://es.wikipedia.org/w/index.php?title=Discusi%C3%B3n:Fascismo_en_Am%C3%A9rica&diff=prev&oldid=168803824 diffs en específico], no sólo Raimundo57br está involucrado, también {{u|Auréola}} (quien también pasó por un proceso de expulsión, aunque no está autoconfirmado acá) y {{u|Luizpuodzius}} (quien fue sancionado también allá, pero no expulsado; tampoco autoconfirmado acá). Aquí [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ALuizpuodzius&diff=159046847&oldid=152503114 una interacción entre usuarios hablando de temas referentes a pt.wiki]. De esta situación, se confirma que se esté usando nuestra Wikipedia para cuestiones ajenas de un proyecto que los sancionó y expulsó.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 17:04 4 ago 2025 (UTC)
;Comentarios
#'''Sobre los mensajes que recibo del IP''': no tengo contacto fuera de la wiki con este IP que me envía solicitudes para editar determinados artículos y, por regla general, no atiendo estas solicitudes;
#'''En cuanto a mis problemas en la wiki-pt''', aclaro que no se deben a ediciones que hice en el dominio principal de esa versión de la wiki (donde se borraron pocos artículos y se revirtieron pocas ediciones), sino a una larga rivalidad con determinados administradores. No creo que sea oportuno traer ese debate aquí, pero si insisten, daré las aclaraciones que consideren oportunas.
#'''Sobre mi contacto con Luizpuodzius''': entiendo que fue un acto aislado sin mayores repercusiones, hace mucho tiempo que no interactúo con esa persona.
#'''Sobre mi interacción con Anhabete''': entiendo que fue un acto aislado sin mayores repercusiones, después de eso no volví a interactuar con esa persona.
:--[[Usuario:Raimundo57br|Raimundo57br]] ([[Usuario Discusión:Raimundo57br|discusión]]) 12:35 5 ago 2025 (UTC)
; Respuesta
{{admintab|1=Probando a resolver petición|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 13:53, 11 April 2026 (UTC)|3=}}
== Solicito traslado de páginas ==
* Por favor trasladar las siguientes páginas
# {{a|Dover}} ... a ... {{a|Dover (desambiguación)}}
# {{a|Dover (Kent)}} ... a... {{a|Dover}}
;Motivo
* Por favor indicar el motivo: La ciudad de Inglaterra es el uso principal del término. La página de desambiguación tenía cientos de enlaces ambiguos.
;Usuario que lo solicita
Firmado: [[Usuario:Rondador|Ronda]][[Usuario Discusión:Rondador|dor]] 09:39 2 sep 2025 (UTC)
;Coentarios
* Personalmente estoy de acuerdo, vamos a solicitar las opiniones de otros que quieran opinar. Un saludo. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 10:45 2 sep 2025 (UTC)
* Con permiso, {{u2|Rondador}}, he detallado los dos traslados que estás pidiendo; estoy de acuerdo con el traslado, y también con la solicitud de opiniones (quizá en algún lado haya algo muy relevante llamado localmente Dover). --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 12:09 2 sep 2025 (UTC)
* Si pongo Dover en el buscador de Google, [[google:dover|el primer resultado]] (y siguientes) es para el grupo musical español (algo que sospechaba, ya que en mi mente sucede lo mismo). [[Usuario:MiguelAlanCS|<b style="color: #990099;">MiguelAlanCS</b>]] >>> [[Archivo:PICOL icon Mail.svg|15px|link=Usuario discusión:MiguelAlanCS]] 12:13 2 sep 2025 (UTC)
:: En mi caso sale la ciudad, pero bueno, también es un argumento a tener en cuenta. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 20:23 2 sep 2025 (UTC)
:::{{no|}} Lo que no se puede hacer es trasladar y despues solicitar, como hizo unilateralmente el editor. Lo revertí a la espera de otra respuesta. Aunque mejor que en el tablón de bibliotecarios donde solo responden bibliotecarios, es preguntar en el café. A mi, si me preguntan por Dover me vienen muchas cosas a parte de la propia ciudad por lo que hay que buscar un consenso clarone indicarlo en la resolución y posibles traslados para que no hay discusiones en el futuro. --[[Usuario:Geom|<b style="background:purple;color:yellow;font-size:80%;border-radius:9px 0 0 9px;padding:2px 5px;">Geom</b>]][[Usuario discusión:Geom|<span style="font-size:80%;color: gray;">'''(discusión)'''</span>]] 09:35 3 sep 2025 (UTC)
::::{{No|Punto metiche}}, del otro lado del charco lo metí a San Gugul y lo primero que me salió es la banda. [[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 20:54 24 sep 2025 (UTC)
;Respuesta
{{admintab|$0}}
== Gersoncharles ==
; Asunto
Durante el corto tiempo de la CAB del usuario {{u2|Gersoncharles}} señalé una [https://es.wikipedia.org/w/index.php?title=Wikipedia_discusi%C3%B3n:Candidaturas_a_bibliotecario/Gersoncharles&diff=prev&oldid=169411042 situación que considero ineludible], a pesar que el usuario trató de desvincularse sin mayor sustento y prefirió cancelar la CAB.
El usuario a pesar que fue sancionado en 2021 por este servidor, [https://xtools.wmcloud.org/pages/es.wikipedia.org/Gersoncharles?uselang=es ha retomado desde hace un año] en la creación de entradas de concursos de belleza de México con muy pocas notas de referencia: si observamos los artículos creados, sólo una fracción de cada artículo puede ser revisado en sus referencias, pero hay gran parte de la información que parece manejar el usuario de [[WP:FP|una manera que lo conoce en exclusiva]], por lo que no ha concedido en los requerimientos mínimos que se necesita para seguir editando en Wikipedia. De hecho, le han borrado 8 artículos en apenas un par de meses atrás. Sé que me adelanto en especulaciones, pero ante la ausencia de motivos que le llevaron a la CAB, sospecharía que [[WP:NSW|estaba buscando alguna forma de restaurar contenidos borrados, o disputar decisiones administrativas]].
El usuario se comporta virtualmente como una [[WP:CPP|CPP]] y el 100% de sus contribuciones en artículos están fijados en un tema cerradísimo como este, me hacen entreveer que el usuario requiere algún correctivo de prohibición editorial, al menos, para que empiece a entender su posición como editor, ya que alguien con 15 años en Wikipedia (y unos 8 años editando con cierta actividad), es rarísimo que siga comportándose como una CPP.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 05:12 10 sep 2025 (UTC)
; Respuesta
{{admintab|1=Probando a resolver esta petición para ver si se reproduce el fallo.|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:12, 11 April 2026 (UTC)|3=}}
==Status quo Stonewalling==
; Usuarios implicados
* {{u|Aroblesm}}
;Artículo
[[Amarillos por Chile]] (ahora, pero es un comportamiento habitual)
; Motivo
Aunque el usuario hace un buen trabajo de patrullaje contra vandalismo, tiene un comportamiento habitual de lo que se denomina [[:en:WP:Status quo stonewalling]]. El usuario revierte todo lo que no le parece y no debate. Trata a cualquier usuario, experimentado o no como si fuera un vándalo o una CPP. Le va dando al botón, llegando siempre al límite de 3RR (en que el status quo tiene prioridad) y no pasa a la búsqueda de consenso. Y lo peor de todo, es que no maneja bien las políticas y hace SQS de manera incorrecta. <br />
En este caso particular está cometiendo un error obvio, porque en la plantilla: parámetro ideología, está usando un fuente que no se puede, ya que no es independiente. Concretamente a [https://www.laizquierdadiario.cl/Chile La Izquierda Diario], que es el órgano oficial del [[Partido de Trabajadores Revolucionarios]] y como tal no es un medio independiente al juzgar la posición de otro partido político (le explique en la PD y en su propio PD, y se limita a indicar en su reversión que ''no se puede eliminar referencias simplemente porque no nos gusta''. Esto es una abierta contravención a [[WP:FF]].<br />
Aún así, no quiero que esta denuncia se centre en ese artículo, ya que es un comportamiento habitual (basta ver su [https://es.wikipedia.org/w/index.php?title=Especial%3AContribuciones&target=Aroblesm&namespace=all&tagfilter=&start=&end=&limit=1000 historial]). Como digo arriba, muchas veces actúa así con vándalos y CPP, pero le pasa la máquina a lo que venga por delante y sin debatir (basta mirar su PD), y tampoco evidenciando un buen conocimiento de las políticas. Como indico arriba es un comportamiento habitual textbook de [[:en:WP:Status quo stonewalling]].
Solicito que se le indique al usuario lo incorrecto del proceder y que se le deje una clara advertencia respecto a SQS.
; Usuario que lo solicita
* [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 11:04 10 sep 2025 (UTC)
;Comentarios
{{comentario}}: SFBB omite que está eliminando referencias del artículo por mero gusto personal y sin justificación alguna. Se le propuso debatir pero no espera el debate. Yo solo he mantenido el artículo a su versión estable. Además, de todos los editores del artículo es el único que ha objetado una referencia y eso es raro en mi opinión. Me dedico a combatir el vandalismo y las ediciones arbitrarias sin consenso previo. No veo problemas en aquello. SFBB solo busca poder mantener su eliminación de referencias por mero gusto personal sin importar. --[[Usuario:Aroblesm|Aroblesm]] ([[Usuario Discusión:Aroblesm|discusión]]) 16:13 10 sep 2025 (UTC)
::No hombre....es un patrón de conducta. siempre que no te gusta algo movís a "versión estable" sin discutir nada hasta aburrir a la contraparte...eso es precisamente SQS. Tenís la PD llena de quejas por eso y seguís creyendo que lo estái haciendo bien, meramente porque aburrís al resto que le da lata pelear con vos (a mí mismo muchas veces me hai aburrido). Sin esta denuncia ni siquiera te habríai dignado a opinar...le diste dos veces más al botón (y sólo opinaste después de la denuncia y no dijiste nada en serio, salvo que estaba en la referencia...pff...nadie lo ha puesto en duda)...y lo que calificái como "arbitrariedad" lo hacís sin entender profundamente el funcionamiento de wikipeida. Es una obviedad que esa fuente no se puede usar lo que está siendo usada, no es "gusto personal" son las polítcas: por n-sima vez: lee [[WP:FF]]. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 19:17 10 sep 2025 (UTC)
:::'''Comentario'''. Al usuario se le explica porqué cierta fuerte [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=169577342&oldid=169428682 absolutamente no] es [[WP:FF]] desde ningún punto de vista e ipso facto y sin explicación alguna entra en guerra de ediciones instantánea [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=169577348&oldid=169577342 (1)] [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=next&oldid=169577358 (2)]. Así no se puede, y preocupa si un revisor actúa así en otras páginas no analizadas. [[Usuario:XavierItzm|XavierItzm]] ([[Usuario Discusión:XavierItzm|discusión]]) 01:11 20 sep 2025 (UTC)
::::Quiero agregar que cuando el usuario se encontró con una clara mayoría de usuarios que cuestionaba su actuar, fue a pedir [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Amarillos_por_Chile_2 la protección de la página en su versión]. Nuevamente, esto es parte del comportamiento habitual de usuario ([https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual&action=history ver el historial de ese tablón]): el usuario trata cualquier diferencia de opinión con la suya como si fuera vandalismo y utiliza ese tablón para cementar su versión (yo mismo lo he sufrido con anterioridad, aunque es difícil buscar un acto específico en ese tablón). Quiero agregar que esta denuncia <u>no es por este caso en particular</u> sino que contra el comportamiento habitual de manipular el sistema para mantener sus versiones de status quo, sin siquiera entrar a discutir y tratar cualquier tipo de edición (que no concuerde con su visión) como si fuera vandalismo. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 09:35 20 sep 2025 (UTC)
:::::Otro antecedente más del que ni siquiera estaba al tanto. Con anterioridad a su solicitud de protección de la página del 20 de agosto (rechazada por {{u2|Rafstr}}), cuando intentaba mantener así el status quo ante la presión de 5 usuarios (todos usuarios veteranos muy experimentados) que llegaron independientemente a esa PD - <small>tras mención general del problema en el café</small>, el usuario ya había exigido una [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Amarillos_por_Chile protección similar el 8 de agosto], con anterioridad a esta denuncia y con posterioridad a que yo haya iniciado una discusión en la PD (que el ignoró al igual que los mensajes que le dejé en su PD personal, mientras seguía dándole al botón revertir). Es un perfecto ejemplo de cómo el usuario consistentemente [[WP:NSW|abusa de las reglas del sistema]], a sabiendas de que si revierte 3 veces, puede denunciar a la contraparte por 3R, y pedir protecciones. Y, bueno...le sigue dando al botón sin intentar si quiera debatir.
:::::[https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/3RR/Actual&diff=prev&oldid=149513602#Aroblesm Ya ha sido denunciado anteriormente por exactamente lo mismo] y (como decía anteriormente) tiene la PD llena de quejas por lo mismo, pero la mayoría simplemente nos hartamos - yo ya muchas veces - y nos vamos a otra cosa sin denunciar...'''<u>pero este comportamiento tiene que parar de una vez por todas</u>'''. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 00:50 22 sep 2025 (UTC)
::::::Otro ejemplo (y sin buscar mucho): hace unos días atrás hizo lo mismo con {{u2|GKLakers02}} en el artículo [[Línea 6 del Metro de Santiago]] y terminó denunciando al usuario [https://es.wikipedia.org/w/index.php?title=Wikipedia:Vandalismo_en_curso&diff=prev&oldid=169275648 por un presunto vandalismo]. En en intertanto GKLakers02 intentaba discutir en la [https://es.wikipedia.org/wiki/Discusi%C3%B3n:L%C3%ADnea_6_del_Metro_de_Santiago#Tensi%C3%B3n_Incorrecta. PD del artículo] proveyendo fuentes correctas, pero siendo completamente ignorado pro el usuario. El asunto terminó cuando el artículo fue protegido, manteniendo el status quo (incorrecto) que tozudamente forzaba Aroblesm dándole al botón.
::::::Pero bueno...este el sólo otro ejemplo pero son cientos. Alguien tiene que parar al usuario (que es buenísimo combatiendo vandalismo, pero termina tratando a todo el mundo cual si fueran vándalos). [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 01:07 22 sep 2025 (UTC)
:a sabiendas que está denuncia aún no se resuelve, intenté corregir lo de la [[Línea 6 del Metro de Santiago]], siendo nuevamente revertido [https://es.wikipedia.org/w/index.php?title=L%C3%ADnea_6_del_Metro_de_Santiago&diff=prev&oldid=169740888 1] y [https://es.wikipedia.org/w/index.php?title=Línea_6_del_Metro_de_Santiago&diff=prev&oldid=169740854 2] oportunidades (en rápidisimo; me reveritió dos veces, antes de que pudiese agregar la info sobre las otras líneas, para las cuales existe similar documentación) por el usuario que no duda un segundo en entrar en GE para defender el status quo sobre la base de una referencia absolutamente obsoleta del año 2016 (sí, hace 9 años, el metro sí operaba a 750 Vcc). Lo peor es que revierte e indica que hay que ir a la PD donde ya se le ha explicado con lujo de detalles que está equivocado.<br />
:Por favor: alguien tiene que frenar a este usuario ya que le hace mucho daño a eswiki (piensen en todas las IPs/usuarios que él determina unilateralmente que son vándalos). Yo por mi parte, voy a intentar evitarlo hasta que se resuelva esto (y voy a dejar los artículos sobre le Metro de Santiago con un voltaje incorrecto por el momento), aunque es altamente probable que me revierta en otros lados (ya vigila una enorme proporción de los artículos sobre contingencia chilena); si lo hace, no voy a insistir y voy a dejar las cosas de manera incorrecta. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 23:40 29 sep 2025 (UTC)
Agregro otro antecendente: En [[Línea 6 del Metro de Santiago]] y [[Línea 3 del Metro de Santiago]], el usuario entró nuevamente (como ya ha ocurrido en muchas oportunidades con anterioridad) en conflicto con IPs. Las IPs tiene razón, pero el usuario las revierte. Como las IP insisten en agregar <u>la info corrrecta</u> (bien referencianda y discutida de la IP del artículo - aunque le usuario lo ignore y le siga dando al botón), el usuario va al TAb a pedir protección de ambas [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#L%C3%ADnea_6_del_Metro_de_Santiago] [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#L%C3%ADnea_3_del_Metro_de_Santiago] y {{u2|Virum Mundi}} terminó protegiendo ambas por 3 meses. <br />
Esto pone en evidencia una vez más, el mal que está haciendo el usuario de las reglas y los tablones. Las IPs (porque son dos creo) han hecho todo bien: han agregado info correcta, han referenciado y han ido a la PD....y el usario le sigue dando al botón para imponer una fuente obsoleta de 2016. Y recurre a cuatánto tablón haya para denunciar a supuesto vándalos..<br />
'''Por favor que alguien haga algo y pronto....o al menostenga en consideración este accionar permanente y dejen de validar los reportes del usuario.''' [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 02:59 6 oct 2025 (UTC)
;Respueta al comentario de abajo
::(no quiero que esto sea un foreo, pero hago este comentario para que esta denuncia <u>no se vaya por la ramas del caso puntual</u> sobre el que versa la respuesta)
{{pg|Virum Mundi}}: Aunque la denuncia no pasa por ahí, pero la tensión en el Metro de Santiago se ha cambiado de 750 Vcc a 1500 Vcc y de vuelta múltiples veces. Los cambios se realizan con relativa celeridad y la única documentación que queda disponible es precisamente la licitación y la especificación técnica de la misma (que fue lo provisto)...pero, vamos que estaremos de acuerdo que borrar todo pq hay un fuente obsoleta que no dice que en 2016 era diferente?
::Pero nuevamente, la denuncia no pasa por ahí. Esto es un ejemplo igual al caso de AxCh (descrito arriba) y muchísimso similares (que he visto/sufrido con el usuario y de los cuales hay una retahíla de protestas es su PD), en que revierte todo, trata a todo el mundo como vándalo, dice que hay que ir a la PD, y (si se digna a opinar en la PD - generalmente no lo hace), se limita a decir que tiene una fuente (por muy mala/obsoleta que sea) e ignora los argumentos en la discusión. Y luego recurre a tablones para pedir protecciones, denunciar vandalismo y así afianzar su versión. Es un mal uso y no te culpo a ti ni ningún sysop, porque es muy difícil darse cuenta del mal uso (repetitivo) que hace y a primera vista sí puede parecer correcto (y obviamente cómo el usuario hace múltiples denuncias que sí correctas...bueno...es más mucho difícil)...y por eso les pido por favor mucha atención con el usuario que le está haciendo daño a wikipedia. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 11:47 6 oct 2025 (UTC)
;Comentario admin
* No es mi intención intervenir en esta denuncia. Pero sí quiero aclarar, ya que fui mencionado por nombre, que la semiprotección de estos artículos se ha hecho por guerra de ediciones, pues no se puede llenar los historiales una y otra vez de modificaciones y reversiones. Aun así, antes de proteger el de la Línea 6, por pura curiosidad (me interesa el tema de ferrocarriles, aunque no particularmente el sistema metropolitano de Santiago de Chile), entré en una página de la compañía donde está indicado que actualmente los cables son "flexibles, unipolares, clase 5, de tensión de aislamiento de 750 V (fuerza) y 600 V (control) para 90ºC..." (y así sigue). También entré en la fuente proporcionada por las IP, un documento de finales del año pasado que detalla los pormenores de un proyecto (para mí, proyecto significa futuro). También leí la discusión, donde el denunciado de hecho sí intervino una vez, allí se proporciona como prueba una imagen realizada por el anónimo, almacenada en su Google Drive. Esta imagen de un visor digital colgado del techo no es una fuente creíble, no solo por ser fuente primaria, y no solo porque no se puede saber de dónde es (no pone el nombre del metro ni de la estación, solo un número colgado del techo, pero presumo de buena fe y asumo que es del lugar indicado), sino que en sí tampoco indica nada definitivo, puede estar por ejemplo en fase de pruebas o de desarrollo (teniendo en cuenta el poco tiempo transcurrido desde el documento mencionado) o de adaptación. Sí, obviamente puede ser también que ya está empleado, pero entonces hace falta una referencia que lo indique de verdad (no la de un proyecto). Insisto, no estoy aquí ni para debatir ni para valorar esta denuncia, solo dejar claro el motivo de la protección. las guerras de ediciones no pueden llevarse a cabo en los historiales de los artículos, invito a cualquiera a realizar las modificaciones necesarias en dichos artículos, si ha lugar, y/o participar en la discusión aportando las fuentes (al fin y al cabo estás páginas están semiprotegidas, cualquier usuario autoconfirmado puede intervenir en ellas). Por lo demás, lo dejo a otro admin. Saludos. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 05:10 6 oct 2025 (UTC)
;Continúa con más casos:
:Nuevamente el usuario en acción. [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Historia_del_Metro_de_Santiago_2 Acá pidiendo protección en TAB] porque un "supuesto Vándalo" estaría agregando una imagen (absolutamente pertinente al artículo). Por favor dejen de ignorar esto y pónganle freno al usuario. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 16:59 2 nov 2025 (UTC)
; Respuesta
{{admintab|1=Prueba|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:25, 9 February 2026 (UTC)|3=}}
== Retomo reporte de CPP política ==
; Asunto
Hace menos de un mes [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Nombres_inapropiados_y_vandalismo_persistente/2025/09#CPP_pol%C3%ADtica reporté en el tablón] un caso de CPP política, que fue lamentablemente desestimado, pues el usuario {{u|Pptrc}} ha vuelto con lo mismo, controlar el artículo del partido chileno [[Evolución Política]] y ahora se crea una entrada con IA de [[Juan Manuel Santa Cruz]] sin mayor complicación, e incluso pasó por la revisión de un patrullero. Insisto en que esta cuenta no tiene otro objetivo que controlar y promover contenidos de políticos de la formación en la que tiene interés demasiado particular.
:Por favor: por qué se espera para resolver estas cosas? es evidente que {{u2|Taichi}} tiene razón, y habiendo un proceso [[Elecciones parlamentarias de Chile de 2025|eleccionario en curso]], es evidente que la CPP está editando artículos con motivos propagandísticos...y que dada la coyuntura, se deben tomar medidas con celeridad. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 20:57 30 sep 2025 (UTC) <small>ps: aclaro que mi intervención acá fue para agregar el antecedente de la urgencia, dada la coyuntura</small>
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 15:17 17 sep 2025 (UTC)
; Respuesta
{{admintab|1=Probando a resolver esta otra a ver si ocurre...|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:12, 11 April 2026 (UTC)|3=}}
== Santos500p ==
; Asunto
Pido por favor que se tomen nuevas medidas para apaciguar el frenesí de ediciones del usuario {{u2|Santos500p}}, concernientes sobre todo con política de Perú, que [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ASantos500p&diff=169860726&oldid=169762965 en los últimos días] ha llegado al punto de tener varios artículos y categorías creadas por él en [[WP:CDB|consultas de borrado]], algunas teniendo consenso comunitario a favor del borrado.
En una de las consultas señalé que [https://es.wikipedia.org/w/index.php?title=Wikipedia:Consultas_de_borrado/Deface_Per%C3%BA&diff=prev&oldid=169776828 el usuario lleva bastante rato desconociendo las líneas entre los diferentes proyectos], con varios intentos en el pasado de señalarle sobre ello, pero sigue en la mezcla de contenidos que podrían estar perfectamente en Wikinoticias, Wikisource e incluso Wikiquote, pero no hay nada que lo impida, aduciendo que puede entorugar cualquier cosa como artículo de Wikipedia, incluso riñendo con [[WP:REC]] o [[WP:SRA]]. De hecho, su página de discusión ha recibido en los últimos dos meses una cantidad difícil de cuantificar de [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ASantos500p&diff=169860726&oldid=168959821avisos de borrado rápido, avisos de consultas de borrado y artículos sin relevancia], varios de ellos siendo borrados.
Esta situación ya suma a su <u>bloqueo parcial por dos años</u>, por lo que debería haber una restricción más certera que haga rectificar su proceder. Apelo a que el usuario pueda comprender que Wikipedia tiene bien delimitado [[WP:NO|sus noes]] y que debería él como usuario, ya no tan novato, entender esos límites. De lo contrario, dejo al encargo de un bibliotecario para que tome alguna medida extra para restringirlo.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 11:34 10 oct 2025 (UTC)
; Respuesta
{{admintab|1=Vamos a probar a resolver esta también|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 13:53, 11 April 2026 (UTC)|3=}}
== Usuario reincidente ==
; Asunto
* En marzo de este año, acudí al TAB por una serie de problemas en numerosos artículos creados por el usuario {{u|Ángel Luis Alfaro}}, [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscel%C3%A1nea/2025/06#Creaci%C3%B3n_de_art%C3%ADculos_con_varios_problemas ver aquí]. Ahora ha editado el artículo [[Alto Renacimiento]] con los mismos problemas por el cual puse esa denuncia en el TAB. Exceso de fotografías (173), referencias en las propias fotografías. Cientos de enlaces internos, algunas secciones son toda azul. Mal formato de las referencias, fuentes citadas (Fuentes citadas en Maniera moderna), usar como referencia artículos de wikipedia, véase la referencia 26. La sección notas es casi tan grande como el propio artículo. Y para terminar, no ha corregido ni uno solo de los artículos que ha creado anteriormente.
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:20 14 oct 2025 (UTC)
;Comentario
* {{ping|Ontzak}} No consigo entrar en el enlace (me va todo muy lento hoy), ¿es el mismo que resolví yo la última vez? <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 09:32 15 oct 2025 (UTC)
* {{ping|Virum Mundi}} si, el mismo. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:55 15 oct 2025 (UTC)
** Ya veo, bueno, me pongo a ello, puede que tarde un rato. {{ping|Ángel Luis Alfaro}} por favor evita más ediciones hasta que se resuelva esta denuncia. Un saludo. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 11:26 16 oct 2025 (UTC)
::{{comentario}} {{ping|Virum Mundi}}, a pesar del aviso, el usuario sigue [https://es.wikipedia.org/wiki/Especial:Contribuciones/%C3%81ngel_Luis_Alfaro editando]. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:45 26 nov 2025 (UTC)
; Respuesta
{{admintab|$0}}
== Adrian Silvera ==
; Usuarios implicados
* {{u|Adrian silvera}}
; Motivo
Hace una década que este usuario agrega contenido mal escrito, sin referencias y muchas veces innecesario. Lo bloquearon tres veces por este motivo. Estuve un año insistiendo para que activara el autocorrector y así por lo menos subsanar el tema de la ortografía. Lo hizo hace poco, creo, pero el remedio fue peor que la enfermedad: ahora confunde adjetivos, sustantivos y verbos, y pone tildes en cualquier parte. Esto no sería tan grave de no ser porque se le advertí unas tres veces y sigue igual. Hoy le mandé un mensaje por ese tema y lo primero que hizo fue [https://es.m.wikipedia.org/w/index.php?title=The_Matrix_Reloaded&diff=prev&oldid=170118708 esto]. En otro caso lo interpretaría como una tomadura de pelo, pero no creo que lo haga a propósito. De todas maneras, alguna consecuencia tiene que tener, para aprender.
; Usuario que lo solicita
* [[Usuario:Minguu|Minguu]] ([[Usuario Discusión:Minguu|discusión]]) 20:16 22 oct 2025 (UTC)
; Respuesta
{{admintab|1=aaaa|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:54, 9 February 2026 (UTC)|3=}}
== Propuesta de desbloqueo para Lenis Felipe ==
; Asunto
* Hola. Por este medio quisiera proponer al colegio de bibliotecarios el desbloqueo local de {{u|Lenis Felipe}}, usuario bloqueado hace ya más de tres años por creación de páginas vandálicas. Lenis se encuentra con bloqueo global, por lo que para poder ser desbloqueado globalmente necesita ser desbloqueado de alguna de las wikis donde tiene bloqueos actualmente, entre ellas, Wikipedia en español.
:La propuesta la planteo porque, habiendo pasado un tiempo prudencial, puedo atestiguar que Lenis pareciera haber enmendado su rumbo y ha colaborado en reportar vía IRC, de manera privada, vandalismos, evasores de bloqueo y hasta sugerir cambios a filtros antiabusos para detener algunos abusadores de largo plazo. Particularmente lo ha hecho desde enero de 2024. Me parece que tal y como fue el caso de Sargento de Hierro (perdón que le nombre, pero me gusta destacar casos de usuarios que se corrigieron :)), podría ser positivo darle una segunda oportunidad para convertirse en un elemento positivo para la comunidad. Ante ello, propongo su desbloqueo local y quedo atento a cualquier propuesta de términos para ello, en cuenta restricción de crear páginas nuevas, o similares. Saludos,
; Usuario que lo solicita
* '''[[Usuario:Jake Park|''Jake Park'']]''' [[Archivo:Coat of arms of Costa Rica.svg|20 px]] [[Usuario Discusión:Jake Park|<span style="color: red;">'''Problem?'''</span>]] 01:00 29 oct 2025 (UTC)
;Comentarios de biblios
* Desde mi punto de vista, los usuarios que no hayan tenido actitudes vandálicas sistemáticas posteriores al bloqueo no deberían permanecer bloqueados más de tres años. '''Apoyo''' el posible desbloqueo. De todos modos, consulto: ¿sabes qué edad tiene el usuario? Porque no es lo mismo alguien que hizo esas tonterías a los 16 años que a los 60; en el primer caso, puede haber madurado rápidamente, mientras que si fuera ''"mayorcito"'' como quien escribe, los aprendizajes de comportamientos son más difíciles. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 02:03 29 oct 2025 (UTC)
* EMHO todos son susceptibles de cambiar, no quiere decir que todos lo hagan, pero uno de los 5 pilares nos pide presumir buena fe. {{Ok|Votum pro}}. [[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:00 30 oct 2025 (UTC)
*
; Respuesta
{{admintab|1=Qué tal esta? la resolvemos??|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 13:53, 11 April 2026 (UTC)|3=}}
== Unmuybuenusuario ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
{{u|Unmuybuenusuario}} se registró el 28 de octubre de 2025, o sea hace 12 días. Desde el primer momento se dedicó a hacer mantenimiento y mandar artículos a borrar. El segundo día ya [https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Permisos/Actual&diff=prev&oldid=170247444 solicitó el flag de reversor con el argumento de : '' pese a mi muy breve tiempo en Wikipedia, desearía poseer el permiso de reversor para revertir de manera más fácil que usando el botón deshacer''], o sea que asegura que hace poco tiempo que está en Wikipedia pero ya conoce los tipos de flags que existen y dónde solicitarlos.
@[[Usuario:Edslov|Edslov]], le negó el permiso, obviamente, ya que en ese momento tenía menos de 48 horas de creada la cuenta, pero no solamente opina que la decisión no fue justa
sino que además conoce perfectamente el Café y fue directamente a quejarse porque no se le dio el permiso, para preguntar [https://es.wikipedia.org/w/index.php?title=Wikipedia:Caf%C3%A9/Archivo/Ayuda/Actual&diff=prev&oldid=170287227 ''¿Cuánto tiempo desde mi registro tiene que transcurrir para poder recibir el flag de reversor? ¿O cuántas ediciones?''].
Le pedí al usuario [https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:Unmuybuenusuario que dejara de hacer mantenimiento] y él me dejó un mensaje protestando por que
[https://es.wikipedia.org/w/index.php?title=Usuaria_discusi%C3%B3n:Jaluj&diff=prev&oldid=170408787 no encuentra ninguna política que prohíba a un editor nuevo deshacer vandalismos o colocar plantillas de borrado rápido a artículos que cumplan alguno de los criterios de borrado rápido], lo cual es cierto, como tampoco hay ninguna política que prohiba a un usuario nuevo tener el flag de reversor, pero suponemos que para hacer este tipo de tareas se necesita tener experiencia y haber demostrado tener conocimientos para hacerlas bien. Por eso le pedí que se detenga y deje de hacer mantenimiento, porque si es un novato no podemos confiar en que lo haga.
Entonces me [https://es.wikipedia.org/w/index.php?title=Usuaria_discusi%C3%B3n:Jaluj&diff=prev&oldid=170408787 acusó de estar violando la políticas al morder a los novatos y no presumir buena fe]. Morder a los novatos es cuando se trata de una persona sin experiencia que todavía no conoce las normas y políticas de Wikipedia. Una persona novata no sabe ni que existe un Café, ni que existe un tablón para solicitar flags, ni que existe el flag de reversor ni que existe el "deshacer".
Pero a la vez me acusa de no presumir buena fe al sospechar que no es novato. Entonces, ¿en qué quedamos? Porque si es un novato, no debería estar haciendo mantenimiento y si no lo es, entonces yo no estaría presumiendo mala fe al sospechar que no lo es.
Esta cuenta me está difamando al dejar mensajes como [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:A.piquerasm&diff=prev&oldid=170408867 este], porque además de acusarme de morder a un novato y de presumir mala fe me acusa por haber solicitado una VU y de haberlo "intimidado". Ahora resulta que por haberle pedido que deje de hacer mantenimiento y por haber pedido una VU yo soy la que viola las políticas y lo estoy "intimidando". Yo no lo acusé acusé ''gravemente de abuso a largo plazo'', yo solicité una VU porque sospecho que puede ser una LTA. Si no lo es, no tiene nada de qué preocuparse y si es un novato mucho menos. Solicito que se le haga un llamado de atención para que deje de difamarme a mis espaldas, ya que ni siquiera me enlazó para que yo no me enterara.
; Usuario que lo solicita
* [[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:17 10 nov 2025 (UTC)
* Te pido amablemente usuaria [[Usuario:Jaluj|Jalu]] una solución a este problema, porque yo no te estoy difamando, si conozco el café, el tablón, si se hacer reversiones, es porque fui anónimo y como usuario anónimo ya me dedicaba a hacer estas cosas, un usuario me sugiero visitar la página de cambios recientes y eso es lo que estoy haciendo, visitar los cambios recientes ¿Tengo prohibido deshacer vandalismos encontrados? Por cierto, no me indicaste cuales son las ediciones supuestamente arbitrarias, las ediciones que he hecho han sido deshacer vandalismos, yo no soy ni títere, ni evasor, ni mucho menos abuso a largo plazo, soy usuario completamente nuevo y esta es mi primera cuenta, y te recuerdo un fragmento de la página de usuarios títeres: '''Puede ser fácil identificar a un usuario títere, si muestra un conocimiento de las políticas, convenciones de Wikipedia y técnicas avanzadas de edición que no es de esperar en un novato (aunque debe presumirse buena fe: es posible que sea un usuario que haya colaborado en otra edición de Wikipedia, en alguna otra wiki o <u>que haya participado mucho tiempo como anónimo</u>)''' (subrayado mío). Si conozco como deshacer vandalismos, es porque antes editaba como anónimo, y esta cuenta fue creada para ayudar a Wikipedia, de ninguna manera la cree para LTA o ediciones arbitrarias. ¿Cómo propones que se solucione este problema y que tipo de ediciones puedo hacer y que tipo de ediciones no puedo hacer? --[[Usuario:Unmuybuenusuario|Unmuybuenusuario]] ([[Usuario Discusión:Unmuybuenusuario|discusión]]) 23:27 10 nov 2025 (UTC)
:{{comentario}}: [https://es.wikipedia.org/w/index.php?title=Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios&oldid=170625007#Evasi%C3%B3n_de_bloqueo:_Cris2020 Resultado de la SVU]. --'''[[user:Stïnger|<span style="text-shadow:#FFD700 1px 1px 2px; class=texhtml"><span style="font-family:'Calibri';color:black">Stïnger</span></span>]]''' <sup>[[Archivo:Bureau kage.svg|15px|link=User talk:Stïnger]]</sup> 00:58 24 nov 2025 (UTC).
; Respuesta
{{admintab|Al no ser un caso reciente (ya pasaron algunos días) apercibo a {{u2|Unmuybuenusuario}} de [[WP:PBF]] primeramente y posterior a [[WP:PPBF]]. Ambos juicios caen en violaciones a [[WP:E]] y [[WP:CIV]] (supongo al ya haber editado como IP sabrá por que, por lo que en caso de reincidencia podría haber sanción. En cuanto al flag, queda al criterio del bibliotecario que lo otorga, no hay tiempo ni cuota determinada, pero es bastante obvio que más sabe el diablo por viejo que por diablo, yo tampoco lo habría otorgado.|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:09 26 nov 2025 (UTC)}}
== Expulsado de la Wikipedia en inglés viene acá a hacer lo mismo... ==
;Usuarios
* {{u|SocialQuote}}
* {{u|2800:484:7380:0:0:0:0:0/44}}
; Asunto
Tanto [https://en.wikipedia.org/wiki/Special:Contributions/SocialQuote la cuenta registrada] como [https://en.wikipedia.org/wiki/Special:Contributions/2800:484:7380:0:0:0:0:0/44 el rango IP] se encuentran sancionados desde septiembre en la Wikipedia en inglés, por ediciones conflictivas, reversiones sin sentido e incluso insultos y amenazas.
Ya acá [[Usuario discusión:2800:484:7385:F0:95EE:CA0B:4429:B24C|ha causado problemas como anónimo en junio]] y la cuenta [https://es.wikipedia.org/w/index.php?title=Scarface_(pel%C3%ADcula_de_1983)&diff=prev&oldid=168285955 incluso ripostó contra un bibliotecario], y [https://es.wikipedia.org/w/index.php?title=Harry_Potter_y_el_c%C3%A1liz_de_fuego&diff=prev&oldid=169807011 está constantemente] [https://es.wikipedia.org/w/index.php?title=Dinero_negro&diff=prev&oldid=170282821 revirtiendo al bot de mantenimiento]. Nótese que los temas que edita tanto la cuenta como la IP son las mismas (series de TV y películas), y las sanciones aplicadas en en.wiki fueron hechas el mismo día.
Debido a esta coincidencia y la situación que está persistiendo ahora en la Wikipedia en español, pido que se tomen medidas.
:{{comentario}} Añado [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:Farisori&diff=prev&oldid=170531619 otro mensaje bastante incordiante contra otro bibliotecario] haciéndolo suponer entre líneas que no sabe redactar artículos. '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 00:10 18 nov 2025 (UTC)
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 04:18 17 nov 2025 (UTC)
; Respuesta
{{Hecho|1=Bloqueado}} por Rafstr. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:40 19 nov 2025 (UTC)
== Borrar y ocultar datos sensibles en página de usuario ==
; Asunto
Pido con carácter de urgencia que algún bibliotecario [https://es.wikipedia.org/w/index.php?title=Usuario:Dalma_Huerta_Mercado_Calder%C3%B3n&diff=prev&oldid=170526877 oculte datos sensibles y muy personales] de [[Usuario:Dalma Huerta Mercado Calderón|esta página de usuario]], ya que es aún una niña (ni siquiera es adolescente). No creo que sea consciente de que lo que hace es peligroso a su edad.
Añado que ya [https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:Dalma_Huerta_Mercado_Calder%C3%B3n#Informaci%C3%B3n_personal no es la primera vez que la pillan colgando datos personales], el año pasado hizo lo mismo. Si toca hacer alguna medida administrativa que evite que la menor siga exponiendo sus datos sin cuidado, adelante.
; Comentarios
No soy bibliotecario, pero {{ping|Taichi}} creo que lo mejor es mandar un correo a [[Wikipedia:Supresores|oversight]], o como mínimo realizar la solicitud en algún lugar menos visible (como IRC). --[[Usuario:Xacaranda|Xacaranda]] [[Usuario discusión:Xacaranda|(mensajes)]] 18:56 18 nov 2025 (UTC)
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 04:22 17 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Sí}}, dada la excesiva información personal y la imposibilidad de ocultar la última edición, opté por el borrado de la PU. También dejé un mensaje a la usuaria. En caso de reincidir, aplicaría una medida, como un bloqueo parcial, para impedir que vuelva a crear su página de usuario. Un saludo,|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:55 19 nov 2025 (UTC)}}
== LTA ==
; Usuarios implicados
* {{u|Mauro08L}}
; Motivo
Hmm, otra vez, otro títere más de {{u|Claudio1098}}.
; Usuario que lo solicita
* —<span style="font-family:Trebuchet MS;font-size:95%">[[Usuario:Mαrti|<span style="color:#636;">Mαrti</span>]] <span style="color;background:#CBE2F7;border-radius:9px;"> [[Usuario discusión:Mαrti|'''ϟ''']] </span></span> 20:23 18 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:42 19 nov 2025 (UTC)}}
== Recreación reiterada ==
; Asunto
* El usuario {{u|Archivoteleditor}} insiste en recrear el mismo programa de televisión con distintas variaciones del título, véase [[Tentaculos]], [[Tentáculos]], [[Ni que fuéramos tentáculos]] y [[Ni Que Fuéramos Tentáculos]], contabilizo más de una docena de recreaciones, ya se le avisó de un posible conflicto de interés.
:En cuanto al artículo, se trata de un programa que duró apenas 3 meses en antena, aunque El País y EuropaPress son referencias fiables, mencionan el programa superficialmente.
; Usuario que lo solicita
* '''C:\>''' [[Usuario:A.piquerasm|A.piquerasm]] '''[''' [[Usuario Discusión:A.piquerasm|Discusión]] ''']''' 16:43 19 nov 2025 (UTC)
; Respuesta
{{admintab|{{hecho}}. Inhabilitado de crear páginas. Un saludo.
|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 19:49 19 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170580247]]
; Motivo
Lenguaje soez
; Usuario que lo solicita
* [[Usuario:Casisgaal|<span style="font-size:black 3px 1px 3px; font-variant:Corbel; color:blue; text-shadow:cyan 2px 1px 2px">Casisgaal</span>]] [[Usuario discusión:Casisgaal|(Discusión)]] 16:16 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada y cuenta bloqueada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:36 21 nov 2025 (UTC)}}
== Anónimo escurridizo ==
; Asunto
Un anónimo que cambia de cuenta temporal y de IP lleva dos meses haciendo cambios sin sentido en partidos políticos de Colombia [https://es.wikipedia.org/w/index.php?title=Independientes_(Colombia)&action=history como este], [https://es.wikipedia.org/w/index.php?title=Partido_Comunista_de_Colombia_-_Marxista_Leninista&diff=prev&oldid=170580251 cambiando un «es» por «fue»] (haciendo entender que ya no existen), pero sin aportar pruebas que los partidos ya no están activos. Como no está aportando nada [[WP:VER|que lo sustente]], se le está revirtiendo pero insiste en reponerlo, llegando a una conducta que no se puede considerar como constructiva.
Además, nos pone en prueba con el sistema de cuentas temporales ya que no sólo está cambiando de cuenta temporal, sino de IP, por lo que dejo en consideración que hacer. Estás serían las direcciones en cuestión: [https://es.wikipedia.org/wiki/Especial:IPContributions/191.108.3.30], [https://es.wikipedia.org/wiki/Especial:IPContributions/191.108.59.86], [https://es.wikipedia.org/wiki/Especial:IPContributions/152.201.226.108] y [https://es.wikipedia.org/wiki/Especial:IPContributions/152.202.79.18].
Previo a la instauración de cuentas temporales también editó con las siguientes IPs:
* {{u|152.201.203.233}}
* {{u|186.113.76.107}}
* {{u|191.111.9.153}}
Es posible que incluso se considere en semiproteger si en caso tal el anónimo siga por cambiar de IP y continúe con esta situación.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 16:49 20 nov 2025 (UTC)
; Respuesta
{{admintab|{{prot|60}}|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:19 26 nov 2025 (UTC)}}
== Acoso ==
; Usuarios implicados
* {{u|~2025-35257-44}}
* {{u|~2025-35202-10}}
; Motivo
Acoso a un usuario
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 21:57 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 16:49 21 nov 2025 (UTC)}}
== Acoso ==
; Usuarios implicados
* {{u|Narsenopoulos}}
; Motivo
{{diff|170585395|Acoso a un usuario}}
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 22:03 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Usuario bloqueado por Virum Mundi. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:28 21 nov 2025 (UTC)}}
== Ocultar ediciones ==
; Asunto
* [[Especial:Diff/169433403]]
* [[Especial:Diff/170587004]]
; Motivo
El artículo suele ser vandalizado mediante la inclusión de nombres completos de particulares en esta lista, entiendo que motivados por algún tipo de rencilla personal. Creo que es conveniente ocultarlos ya que que, de lo contrario, esos nombres quedan indexados y accesibles por internet, asociados a una lista de violadores en serie, lo cual puede tener implicaciones en su vida personal.
; Usuario que lo solicita
* [[Usuario:Nacaru|Nacaru]] [[Archivo:Noto Emoji KitKat 2601.svg|19px]] ([[Usuario_discusión:Nacaru|discusión]]) 00:23 21 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Ediciones ocultadas. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:39 21 nov 2025 (UTC)}}
== Solicitud para corregir redirecciones dobles en [[Ciudad del Cuzco]] y [[Cusco, Perú]] ==
Hola. Por favor, ayúdenme a solucionar el problema de las redirecciones dobles en las páginas de redireccionamiento [[Ciudad del Cuzco]] y [[Cusco, Perú]]. Gracias. [[Especial:Contribuciones/~2025-35342-08|~2025-35342-08]] ([[Usuario discusión:~2025-35342-08|discusión]]) 04:33 21 nov 2025 (UTC)
;Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 04:45 21 nov 2025 (UTC)}}
== Me sentí acosada por Jaluj, por favor, paciencia con los novatos ==
; Asunto
Soy una nueva editora (bueno, era una nueva editora) estudiante de 5º de Veterinaria y entré en la wikipedia con mucha ilusión.
Detecté un artículo escrito llamado “Comida para gatos” lleno de enlaces spam a marcas comerciales, así como un claro sesgo pro pienso alabando sus virtudes.
Después de leerme todos los tutoriales edité el artículo intentando ser objetiva, eliminado enlaces spam y texto publicitario.
Un editor deshizo todo mi trabajo dando la razón de que yo había eliminado referencias. https://es.wikipedia.org/w/index.php?title=Comida_para_gatos&diff=170390013&oldid=170376180
Vi la posibilidad de aprender de mis errores y le pregunté por que consideraba fiables (ya que repuso todos los enlaces spam) Eran enlaces a artículos como “los 8 mejores marcas de piensos” (que es publicidad de 8 marcas de piensos, con enlaces a afiliados de Amazon), o webs que no funcionaban etc etc
Me contestó que había eliminado todo mi trabajo porque yo había añadido 1 referencia “por tratarse de blog y por tanto no considerarse fiable”. Era un enlace a un artículo de una clínica veterinaria como había 3 o 4 igual en el artículo. https://clinicaveterinarium.es/el-gato-es-omnivoro-o-carnivoro/
No entendí que para eliminar ese enlace se eliminara todo el trabajo realizado en el artículo, y sobre todo que se repusieran los enlaces spam, y por qué esos enlaces spam eran fuentes fiables.
Para resumir, volví a poner el artículo tal y como yo lo había escrito (eliminado más de 10 enlaces spam) quitando el enlace a dicha clínica, sospechando que era ese el problema, y el editor me agradeció la edición. Seguí sin aprender. Pero no me quejo de este editor.
Y aquí viene mi ruego.
Posteriormente a todo esto, y tras muchos días después, apareció el editor Jaluj, https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:LaVeterinaria , donde me acusó de faltar a la etiqueta y falta de civismo al preguntar al editor. Pedí disculpas por mis preguntas si habían molestado y volví a decir que mi intención era aprender y por eso preguntaba.
Tras mi respuesta, el editor Jaluj fue a una edición mía en otro artículo, y la eliminó, diciendo que no era una fuente fiable https://es.wikipedia.org/w/index.php?title=Perro_de_caza&curid=707821&diff=170565115&oldid=170545527 La ACCM es un organismo avalado por el Gobierno https://servicio.mapa.gob.es/arca/download.html?id=20338485&contentType=application/pdf que reconoce oficialmente a los perros de raza, así que supongo que son una fuente entendida del tema para hablar de razas.
Además de eliminar esa información, me vuelve a acusar de falta de civismo y de etiqueta, por lo que me declaré Retirada y así se lo dije como respuesta, ya que no entendía nada, me di cuenta que no podía aprender y me sentía atacada.
He recibido un email de wikipedia donde me avisa que el editor Jaluj obviando todas mis disculpas y petición de información sobre la organización oficial sólo me exige el nombre de mi mentor.
Solo pido un poco de paciencia y empatía con los nuevos editores, necesitamos empatía y ayuda para editar, no acusaciones de mala fe y falta de civismo. Yo lo he intentado, cuiden a los que vengan nuevos detrás de mi. Gracias por leer.
; Usuario que lo solicita
--[[Usuario:LaVeterinaria|LaVeterinaria]] ([[Usuario Discusión:LaVeterinaria|discusión]]) 14:01 21 nov 2025 (UTC)
;Comentario adicional
Permito añadir que {{u2|Leoncastro}} y mi persona [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ALaVeterinaria&diff=170608554&oldid=170595929 hemos tratado separadamente de mediar en el asunto], pero la usuaria está demasiado a la defensiva e incluso [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ATaichi&diff=170606470&oldid=170599847 me dejó esta contestación], incluso cuando buscaba seriamente ayudarle. Lo que denoto en sus contestaciones además, es que ella como estudiante universitaria dice tener algún "mentor" en su universidad (pero no está adscrito acá), por lo que estoy deduciendo que hay alguna orientación mal ejecutada y pareciera que la estudiante está obligada a editar como sea, a expensas de que cualquier patrullero o bibliotecario sea maltratado de esta manera si le revisan sus contribuciones. Ojalá haya alguna forma de que se haga entender y ver ante las instancias de qué o quién movió institucionalmente a la alumna a que pasara esto. '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 14:35 22 nov 2025 (UTC)
; Respuesta
{{admintab|1={{No}}. {{U|LaVeterinaria}}, no me parece que, en ningún momento, Jaluj o algún otro de los varios usuarios que han buscado orientarte te hayan «maltratado» o dado motivos para sentirte intimidada o acosada. Más bien, algunas de tus interacciones muestran que, ciertamente, pareces estar a la defensiva y que podrían malinterpretarse. Supongo que el primer mensaje de Jaluj estuvo motivado por una de tus respuestas a Casisgaal —«¿Por qué escribir texto apoyado en enlaces verificables como la universidad etc.? ¿La wikipedia española se basa en la inglesa y no podemos editar sino solo traducir?»—, que se alejó del [[Wikipedia:Civismo|civismo]] esperado en las interacciones entre usuarios en Wikipedia. Asumiste que el mensaje de Jaluj estuvo motivado por tu «insistencia por preguntar lo que no entendía», cuando claramente te explicó, de forma amable y con la paciencia que en varias ocasiones has pedido, que fue por tu tono. Coincido con Jaluj en que parece que no lees los mensajes completos.
<br>
Si preguntó Jaluj sobre tu «mentor», que tú misma mencionaste en la conversación con Casisgaal, es porque, ciertamente después de estas interacciones que has tenido, surge la duda de quién es, si es usuario de Wikipedia y si tiene conocimiento de las políticas que la rigen. Parece que no. Por ello, sería mejor que aprovecharas herramientas como el [[Wikipedia:Programa de tutoría|programa de tutoría]] —cabe destacar que {{u|Ezarate}} ya amablemente se ofreció a ayudarte con tus ediciones—. Todo lo anterior, ya te lo había explicado Leoncastro. Además, él te dejó un extenso mensaje donde explicó y trató de mediar. Tu respuesta y actuar subsecuente es, cuanto menos, desconcertante.
<br>
En suma, descarto la denuncia. {{U|LaVeterinaria}} no me parece que el tono que uses y la forma de interactuar que tienes con otros usuarios, que han intentando orientarte, sea adecuada o benéfica para la enciclopedia. Así como insistes en pedir paciencia, ofrécela a los demás y no acuses de intimidación o denuncies tan fácilmente. Aprovecha los mensajes en los que se te ha explicado un poco sobre la enciclopedia, aprovecha el programa de tutoría o los ofrecimientos de usuarios como Ezarate. No continúes con esta forma de actuar porque fomenta conflictos y puede conducir a medidas que nadie quiere que se tengan que tomar. Un saludo,|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 22:00 22 nov 2025 (UTC)}}
== LTA ==
; Usuarios implicados
* {{u|Henrysmithwa5}}
; Motivo
LTA aerolíneas
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:15 21 nov 2025 (UTC)
; Respuesta
{{admintab|{{ok}} por Jake Park. |--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 00:38 22 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170607263]]
; Motivo
Etiqueta
; Usuario que lo solicita
* [[Usuario:CharlieRaMx|CharlieRaMx]] ([[Usuario Discusión:CharlieRaMx|discusión]]) 12:02 22 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 12:30 22 nov 2025 (UTC)}}
== Ocultar ediciones ==
; Usuarios implicados
* {{u|Zanahorita Extraida}}
; Motivo
Pido que se oculten todas las ediciones de este títere bloqueado, quien como siempre ha lanzado comentarios denigrantes, ofensivos y hasta insultos.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 18:08 23 nov 2025 (UTC)
; Respuesta
{{Hecho}} por Saloca. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 20:00 23 nov 2025 (UTC)
== LTA ==
; Usuarios implicados
* {{u|Patthenry5}}
; Motivo
LTA aerolíneas
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 18:24 23 nov 2025 (UTC)
; Respuesta
{{Hecho}} por MiguelAlanCS. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 19:59 23 nov 2025 (UTC)
== Ocultar ediciones ==
; Asunto
* [[Especial:Diff/170589208]]
* [[Especial:Diff/170589204]]
; Motivo
Vandalismo
; Usuario que lo solicita
* [[Usuario:CarlosEduardoPA|<span style="font-size:80%;background:#000;color:#fff;border-radius:25px;padding:3px 8px;">CarlosEduardoPA</span>]] [[Usuario discusión:CarlosEduardoPA|✉️]] 22:29 23 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Ediciones ocultadas. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:26 24 nov 2025 (UTC)}}
== MediaWiki:Jsonconfig-use-category ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
; Asunto
* {{a|MediaWiki:Jsonconfig-use-category}}
* Please delete the page as it is no longer necessary following [[:phab:T378352|T378352]] ([[:Category:Wikipedia:Páginas que usan la extensión JsonConfig|the category]] has already been deleted). See also [[:m:Steward requests/Miscellaneous#Category:Pages using the JsonConfig extension]].
; Usuario que lo solicita
* [[Usuario:NguoiDungKhongDinhDanh|NguoiDungKhongDinhDanh]] ([[Usuario Discusión:NguoiDungKhongDinhDanh|discusión]]) 23:09 23 nov 2025 (UTC)
; Respuesta
{{admintab|{{ok}}|--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 09:01 24 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170617475]]
; Motivo
Vandalismo
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 23:46 23 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada por Virum Mundi. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:22 24 nov 2025 (UTC)}}
== Plantillas mantenidas sin justificación en Conservatorio de Música de la Universidad Austral de Chile ==
; Asunto
Solicito la intervención de un bibliotecario respecto al artículo [[Conservatorio de Música de la Universidad Austral de Chile]].
El usuario Ontzak colocó dos plantillas (promocional e irrelevante) el día 18 de noviembre. Desde entonces el artículo ha sido completamente reescrito, reforzado con referencias académicas y eliminado el contenido que podía ser de estilo promocional e irrelevante. Conforme a lo indicado en las propias plantillas, abrí hilo en la página de discusión solicitando consenso para su retirada. El usuario no ha respondido pese a haber sido notificado y mencionado en dos ocasiones.
; Motivo
El comportamiento observado, colocar plantillas, no responder a la discusión y bloquear de facto la retirada, encaja en lo descrito en [[WP:DUEÑO]]. A día de hoy las razones originales ya no se sostienen, pero las plantillas permanecen en el artículo sin justificación actual y el editor que las colocó evita participar en la discusión.
; Usuario que lo solicita
[[Usuario:Hoppedup|Hoppedup]] ([[Usuario Discusión:Hoppedup|discusión]]) 12:26 24 nov 2025 (UTC)
Solicito que un bibliotecario revise el caso:
• si procede, retire las plantillas,
• y si fuese necesario, recuerde al usuario implicado la obligación de participar cuando se cuestiona una plantilla mantenida.
Gracias.
; Respuesta
{{admintab|1={{Hecho}}. Por lo demás, todos sabemos cómo hace las cosas {{u2|Ontzak}}; sería mejor que las hiciera con un poco más de intercambio con los demás, pero no se le puede pedir a los editores lo que no pueden o no quieren aportar en Wikipedia (editar sigue siendo una actividad voluntaria, todavía). En mi personal opinión, es mejor tenerlo haciendo lo que hace que no tenerlo, de modo que lo más que podemos hacer es volverlo a invitar a ser un poco más comunicativo. En cuanto a lo de WP:DUEÑO, me parece que te has pasado de largo unos cuantos kilómetros en tu interpretación; un poco más de calma, por favor. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:10 24 nov 2025 (UTC)}}
== Spam incesante ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
; Asunto
* Rango con decenas de ediciones spam, al menos unas 34 desde marzo de este año.
* {{u|89.214.0.0/17}}
* [[Especial:IPContributions/89.214.0.0/17]]
; Usuario que lo solicita
* [[Usuario:Xacaranda|Xacaranda]] [[Usuario discusión:Xacaranda|(mensajes)]] 18:58 25 nov 2025 (UTC)
; Respuesta
{{admintab|{{Sí|He aplicado un bloqueo parcial a los artículos objeto de spam}}.|2=[[Usuario:Montgomery|Montgomery]] ([[Usuario Discusión:Montgomery|discusión]]) 19:04 25 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170663031]]
; Motivo
Transgresión de las reglas de etiqueta.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 19:17 25 nov 2025 (UTC)
; Respuesta
{{admintab|$oc|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 20:09 25 nov 2025 (UTC)}}
== Solicitar traslado ==
; Asunto
* Solicito el traslado de [[CITEDEF]] a [[Instituto de Investigaciones Científicas y Técnicas para la Defensa]], siguiendo la recomendación de la [[Wikipedia:Convenciones de títulos|convención de títulos]] de evitar el uso de acrónimos y siglas siempre que se pueda.
; Usuario que lo solicita
* [[Usuario:Comecaballos|Comecaballos]] ([[Usuario Discusión:Comecaballos|discusión]]) 00:17 26 nov 2025 (UTC)
; Respuesta
{{admintab|{{hecho}}|--[[Usuario:Ezarate|Esteban]] ([[Usuario Discusión:Ezarate|discusión]]) 11:58 26 nov 2025 (UTC)}}
== Cuenta de "propósito particular" ==
; Asunto
* No tengo del todo claro si [https://es.wikipedia.org/w/index.php?title=Especial:Registro/block&page=Usuario%3AInfohisto esto va acá] o a esta altura debería reportarse como vandalismo. Ver sus ediciones de hoy, y sus resúmenes de edición, en {{a|Caporales}} y {{a|Tundiqui}}. Esta cuenta, que ya fue identificada como lo que es, definitivamente no tiene otro propósito aquí que el que ya es evidente. Y lo ha hecho ya en varios artículos.
Mirando su página de usuario veo que tres administradores ya han interactuado con él. Así que aprovecho para citarlos: {{u|Tector}}, {{u|Saloca}} y {{u|Marcelo}}
; Usuario que lo solicita
* [[Usuario:Rastamby|Rastamby]] ([[Usuario Discusión:Rastamby|discusión]]) 02:34 26 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}, ya fue suficiente: usuario expulsado y artículos protegidos a largo plazo. Gracias por el aviso.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 02:43 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170670252]]
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 04:58 26 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 05:04 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170670276]]
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 05:00 26 nov 2025 (UTC)
; Respuesta
{{admintab|1=Prueba|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:26, 9 February 2026 (UTC)|3=}}
== Solicitud para corregir redirecciones dobles en [[Departamento de Cusco]] y [[Provincia de Cusco]] ==
Hola. Por favor, ayúdenme a solucionar el problema de las redirecciones dobles en las páginas de redireccionamiento [[Departamento de Cusco]] y [[Provincia de Cusco]]. Gracias. [[Especial:Contribuciones/~2025-36297-96|~2025-36297-96]] ([[Usuario discusión:~2025-36297-96|discusión]]) 05:35 26 nov 2025 (UTC)
== CDI ==
; Usuarios implicados
* {{u|JALGUERRERO}}
; Motivo
Claro conflicto de interés. Sus ediciones se centran en el artículo que lleva su nombre
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 10:53 26 nov 2025 (UTC)
; Respuesta
{{admintab|{{Ok}}, hecho por {{u2|Virum Mundi}}; no puedo creer nos duró 15 años.|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:27 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170680869]]
; Usuario que lo solicita
* [[Usuario discusión:Divinations|Divinations]] 21:35 26 nov 2025 (UTC)
; Respuesta
{{admintab|1=Ejemplo de resolución de solicitud que menciona a {{ping|Nacaru}}.|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:39, 9 February 2026 (UTC)|3=}}
== varias ediciones ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
Prueba de texto
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:45, 20 February 2026 (UTC)
; Respuesta
{{admintab|1=Qué tal está petición de aquí??? {{Ok}}|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:13, 11 April 2026 (UTC)|3=}}
== Ocultar edición [[Especial:Diff/619272|619272]] ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
JHVBIKUHGVIK
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:47, 20 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar edición 619272 ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
VXCV XZVZCVZC
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:48, 20 February 2026 (UTC)
; Respuesta
{{admintab|1=OKIII|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:49, 20 February 2026 (UTC)|3=}}
== Ocultar edición 684158 ==
; Asunto
* [[Especial:Diff/684158]]
; Motivo
kjanxkajsncxa
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:34, 26 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Prueba de toro túitulo ==
; Usuarios implicados
* {{u|Sergio Enrollment 2}}
; Motivo
Prueba de otra raźon
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:55, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Otra prueba de título más ==
; Usuarios implicados
* {{u|Sergio Enrollment 2}}
; Motivo
Desarrollando razón
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:55, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== k,jnkjjn ==
; Usuarios implicados
* {{u|Dicto23456}}
; Motivo
lknmlkj lkjlk jkl
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:59, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Otra denuncia la que sea ==
; Usuarios implicados
* {{u|Cenarium}}
; Motivo
A ver qué tal
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 01:08, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74252,671081,671082 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/671081]]
* [[Especial:Diff/671082]]
; Motivo
Motivo cualquiera
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:43, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74252, 74251, 89098 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/74252]]
* [[Especial:Diff/74251]]
* [[Especial:Diff/89098]]
; Motivo
Ejemplo
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:45, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar edición 74252 ==
; Asunto
* [[Especial:Diff/74252]]
; Motivo
qeasdsa
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:46, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74251 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/74251]]
; Motivo
asdAD SADAS
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:46, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74253, 74254, 74255, 74256 y 74252 ==
; Asunto
* [[Especial:Diff/74253]]
* [[Especial:Diff/74254]]
* [[Especial:Diff/74255]]
* [[Especial:Diff/74256]]
* [[Especial:Diff/74252]]
; Motivo
A ver si aparecen en el mismo orden.
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:52, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
5pda2tgb0vdstwmatd1762d9rz23w48
737590
737588
2026-04-11T13:54:07Z
Nacaru
54746
Resolviendo solicitud «[[Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscelánea/Actual#Ocultar_edición_74252|Ocultar edición 74252]]» mediante [[WP:TL|Twinkle Lite]]
737590
wikitext
text/x-wiki
<!-- AVISO: No semiproteger la miscelánea del tablón pues aquí redirigen muchas plantillas y avisos en páginas varias para que los novatos puedan aportar o realizar consultas que sólo bibliotecarios pueden resolver -->
<noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}}
{{Archivado automático
|Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Miscelánea/AAAA/MM
|Días a mantener=7
}}
== Situación extraña con tinte político ==
; Asunto
Desde 2019 aproximadamente se ha visto un grupo de IPv6 dentro del rango {{u|2804:14C:0:0:0:0:0:0/32}} editando y tratando de manipular contenidos políticos controvertidos (específicamente en [[Fascismo en América]] y otros más), de hecho por lo que se ve [[Discusión:Fascismo en América|aquí]] el anónimo se expresa de una manera particular sin saber siquiera español y sólo deja links sin mayor explicación. Adicionalmente, el anónimo está constantemente dejando mensajes a {{u2|Raimundo57br}} haciendo una serie de solicitudes de modificaciones a artículos de tinte político (sobre todo si son relativos a la derecha o izquierda política). Pero cuando vemos más a profundidad, vemos otras IPs como {{u|187.20.115.154}} dejando lo mismo al usuario, o este [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:Raimundo57br&diff=prev&oldid=150518775 mensaje] de Raimundo57br dirigido a otra cuenta haciendo ping, pero en su propia discusión en un intento de coordinación de su desbloqueo. Hago acotar que Raimundo57br [https://pt.wikipedia.org/wiki/Especial:Contribui%C3%A7%C3%B5es/Raimundo57br está expulsado de la Wikipedia portuguesa desde el 2022], luego de múltiples problemas allá y numerosos bloqueos temporales.
También, que la Wikipedia portuguesa maneja estrictamente el uso de direcciones anónimas y [https://pt.wikipedia.org/wiki/Usu%C3%A1rio(a):2804:14C:0:0:0:0:0:0/32 todo el rango 2804:0:0:0:0:0:0:0/19] se encuenta bloqueado desde 2020. Existe una posibilidad de que haya una inusual coordinación entre anónimos y Raimundo57br para manipular artículos de política en Wikipedia en español y la Wikipedia portuguesa (a partir de una tercera cuenta), ante la imposibilidad de ambos entes (ya que se les hace más cómodo intervenir acá).
Incluyo al reporte que [https://es.wikipedia.org/w/index.php?title=Discusi%C3%B3n:Fascismo_en_Am%C3%A9rica&diff=prev&oldid=168802559 con estos] [https://es.wikipedia.org/w/index.php?title=Discusi%C3%B3n:Fascismo_en_Am%C3%A9rica&diff=prev&oldid=168803824 diffs en específico], no sólo Raimundo57br está involucrado, también {{u|Auréola}} (quien también pasó por un proceso de expulsión, aunque no está autoconfirmado acá) y {{u|Luizpuodzius}} (quien fue sancionado también allá, pero no expulsado; tampoco autoconfirmado acá). Aquí [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ALuizpuodzius&diff=159046847&oldid=152503114 una interacción entre usuarios hablando de temas referentes a pt.wiki]. De esta situación, se confirma que se esté usando nuestra Wikipedia para cuestiones ajenas de un proyecto que los sancionó y expulsó.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 17:04 4 ago 2025 (UTC)
;Comentarios
#'''Sobre los mensajes que recibo del IP''': no tengo contacto fuera de la wiki con este IP que me envía solicitudes para editar determinados artículos y, por regla general, no atiendo estas solicitudes;
#'''En cuanto a mis problemas en la wiki-pt''', aclaro que no se deben a ediciones que hice en el dominio principal de esa versión de la wiki (donde se borraron pocos artículos y se revirtieron pocas ediciones), sino a una larga rivalidad con determinados administradores. No creo que sea oportuno traer ese debate aquí, pero si insisten, daré las aclaraciones que consideren oportunas.
#'''Sobre mi contacto con Luizpuodzius''': entiendo que fue un acto aislado sin mayores repercusiones, hace mucho tiempo que no interactúo con esa persona.
#'''Sobre mi interacción con Anhabete''': entiendo que fue un acto aislado sin mayores repercusiones, después de eso no volví a interactuar con esa persona.
:--[[Usuario:Raimundo57br|Raimundo57br]] ([[Usuario Discusión:Raimundo57br|discusión]]) 12:35 5 ago 2025 (UTC)
; Respuesta
{{admintab|1=Probando a resolver petición|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 13:53, 11 April 2026 (UTC)|3=}}
== Solicito traslado de páginas ==
* Por favor trasladar las siguientes páginas
# {{a|Dover}} ... a ... {{a|Dover (desambiguación)}}
# {{a|Dover (Kent)}} ... a... {{a|Dover}}
;Motivo
* Por favor indicar el motivo: La ciudad de Inglaterra es el uso principal del término. La página de desambiguación tenía cientos de enlaces ambiguos.
;Usuario que lo solicita
Firmado: [[Usuario:Rondador|Ronda]][[Usuario Discusión:Rondador|dor]] 09:39 2 sep 2025 (UTC)
;Coentarios
* Personalmente estoy de acuerdo, vamos a solicitar las opiniones de otros que quieran opinar. Un saludo. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 10:45 2 sep 2025 (UTC)
* Con permiso, {{u2|Rondador}}, he detallado los dos traslados que estás pidiendo; estoy de acuerdo con el traslado, y también con la solicitud de opiniones (quizá en algún lado haya algo muy relevante llamado localmente Dover). --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 12:09 2 sep 2025 (UTC)
* Si pongo Dover en el buscador de Google, [[google:dover|el primer resultado]] (y siguientes) es para el grupo musical español (algo que sospechaba, ya que en mi mente sucede lo mismo). [[Usuario:MiguelAlanCS|<b style="color: #990099;">MiguelAlanCS</b>]] >>> [[Archivo:PICOL icon Mail.svg|15px|link=Usuario discusión:MiguelAlanCS]] 12:13 2 sep 2025 (UTC)
:: En mi caso sale la ciudad, pero bueno, también es un argumento a tener en cuenta. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 20:23 2 sep 2025 (UTC)
:::{{no|}} Lo que no se puede hacer es trasladar y despues solicitar, como hizo unilateralmente el editor. Lo revertí a la espera de otra respuesta. Aunque mejor que en el tablón de bibliotecarios donde solo responden bibliotecarios, es preguntar en el café. A mi, si me preguntan por Dover me vienen muchas cosas a parte de la propia ciudad por lo que hay que buscar un consenso clarone indicarlo en la resolución y posibles traslados para que no hay discusiones en el futuro. --[[Usuario:Geom|<b style="background:purple;color:yellow;font-size:80%;border-radius:9px 0 0 9px;padding:2px 5px;">Geom</b>]][[Usuario discusión:Geom|<span style="font-size:80%;color: gray;">'''(discusión)'''</span>]] 09:35 3 sep 2025 (UTC)
::::{{No|Punto metiche}}, del otro lado del charco lo metí a San Gugul y lo primero que me salió es la banda. [[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 20:54 24 sep 2025 (UTC)
;Respuesta
{{admintab|$0}}
== Gersoncharles ==
; Asunto
Durante el corto tiempo de la CAB del usuario {{u2|Gersoncharles}} señalé una [https://es.wikipedia.org/w/index.php?title=Wikipedia_discusi%C3%B3n:Candidaturas_a_bibliotecario/Gersoncharles&diff=prev&oldid=169411042 situación que considero ineludible], a pesar que el usuario trató de desvincularse sin mayor sustento y prefirió cancelar la CAB.
El usuario a pesar que fue sancionado en 2021 por este servidor, [https://xtools.wmcloud.org/pages/es.wikipedia.org/Gersoncharles?uselang=es ha retomado desde hace un año] en la creación de entradas de concursos de belleza de México con muy pocas notas de referencia: si observamos los artículos creados, sólo una fracción de cada artículo puede ser revisado en sus referencias, pero hay gran parte de la información que parece manejar el usuario de [[WP:FP|una manera que lo conoce en exclusiva]], por lo que no ha concedido en los requerimientos mínimos que se necesita para seguir editando en Wikipedia. De hecho, le han borrado 8 artículos en apenas un par de meses atrás. Sé que me adelanto en especulaciones, pero ante la ausencia de motivos que le llevaron a la CAB, sospecharía que [[WP:NSW|estaba buscando alguna forma de restaurar contenidos borrados, o disputar decisiones administrativas]].
El usuario se comporta virtualmente como una [[WP:CPP|CPP]] y el 100% de sus contribuciones en artículos están fijados en un tema cerradísimo como este, me hacen entreveer que el usuario requiere algún correctivo de prohibición editorial, al menos, para que empiece a entender su posición como editor, ya que alguien con 15 años en Wikipedia (y unos 8 años editando con cierta actividad), es rarísimo que siga comportándose como una CPP.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 05:12 10 sep 2025 (UTC)
; Respuesta
{{admintab|1=Probando a resolver esta petición para ver si se reproduce el fallo.|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:12, 11 April 2026 (UTC)|3=}}
==Status quo Stonewalling==
; Usuarios implicados
* {{u|Aroblesm}}
;Artículo
[[Amarillos por Chile]] (ahora, pero es un comportamiento habitual)
; Motivo
Aunque el usuario hace un buen trabajo de patrullaje contra vandalismo, tiene un comportamiento habitual de lo que se denomina [[:en:WP:Status quo stonewalling]]. El usuario revierte todo lo que no le parece y no debate. Trata a cualquier usuario, experimentado o no como si fuera un vándalo o una CPP. Le va dando al botón, llegando siempre al límite de 3RR (en que el status quo tiene prioridad) y no pasa a la búsqueda de consenso. Y lo peor de todo, es que no maneja bien las políticas y hace SQS de manera incorrecta. <br />
En este caso particular está cometiendo un error obvio, porque en la plantilla: parámetro ideología, está usando un fuente que no se puede, ya que no es independiente. Concretamente a [https://www.laizquierdadiario.cl/Chile La Izquierda Diario], que es el órgano oficial del [[Partido de Trabajadores Revolucionarios]] y como tal no es un medio independiente al juzgar la posición de otro partido político (le explique en la PD y en su propio PD, y se limita a indicar en su reversión que ''no se puede eliminar referencias simplemente porque no nos gusta''. Esto es una abierta contravención a [[WP:FF]].<br />
Aún así, no quiero que esta denuncia se centre en ese artículo, ya que es un comportamiento habitual (basta ver su [https://es.wikipedia.org/w/index.php?title=Especial%3AContribuciones&target=Aroblesm&namespace=all&tagfilter=&start=&end=&limit=1000 historial]). Como digo arriba, muchas veces actúa así con vándalos y CPP, pero le pasa la máquina a lo que venga por delante y sin debatir (basta mirar su PD), y tampoco evidenciando un buen conocimiento de las políticas. Como indico arriba es un comportamiento habitual textbook de [[:en:WP:Status quo stonewalling]].
Solicito que se le indique al usuario lo incorrecto del proceder y que se le deje una clara advertencia respecto a SQS.
; Usuario que lo solicita
* [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 11:04 10 sep 2025 (UTC)
;Comentarios
{{comentario}}: SFBB omite que está eliminando referencias del artículo por mero gusto personal y sin justificación alguna. Se le propuso debatir pero no espera el debate. Yo solo he mantenido el artículo a su versión estable. Además, de todos los editores del artículo es el único que ha objetado una referencia y eso es raro en mi opinión. Me dedico a combatir el vandalismo y las ediciones arbitrarias sin consenso previo. No veo problemas en aquello. SFBB solo busca poder mantener su eliminación de referencias por mero gusto personal sin importar. --[[Usuario:Aroblesm|Aroblesm]] ([[Usuario Discusión:Aroblesm|discusión]]) 16:13 10 sep 2025 (UTC)
::No hombre....es un patrón de conducta. siempre que no te gusta algo movís a "versión estable" sin discutir nada hasta aburrir a la contraparte...eso es precisamente SQS. Tenís la PD llena de quejas por eso y seguís creyendo que lo estái haciendo bien, meramente porque aburrís al resto que le da lata pelear con vos (a mí mismo muchas veces me hai aburrido). Sin esta denuncia ni siquiera te habríai dignado a opinar...le diste dos veces más al botón (y sólo opinaste después de la denuncia y no dijiste nada en serio, salvo que estaba en la referencia...pff...nadie lo ha puesto en duda)...y lo que calificái como "arbitrariedad" lo hacís sin entender profundamente el funcionamiento de wikipeida. Es una obviedad que esa fuente no se puede usar lo que está siendo usada, no es "gusto personal" son las polítcas: por n-sima vez: lee [[WP:FF]]. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 19:17 10 sep 2025 (UTC)
:::'''Comentario'''. Al usuario se le explica porqué cierta fuerte [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=169577342&oldid=169428682 absolutamente no] es [[WP:FF]] desde ningún punto de vista e ipso facto y sin explicación alguna entra en guerra de ediciones instantánea [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=169577348&oldid=169577342 (1)] [https://es.wikipedia.org/w/index.php?title=Amarillos_por_Chile&diff=next&oldid=169577358 (2)]. Así no se puede, y preocupa si un revisor actúa así en otras páginas no analizadas. [[Usuario:XavierItzm|XavierItzm]] ([[Usuario Discusión:XavierItzm|discusión]]) 01:11 20 sep 2025 (UTC)
::::Quiero agregar que cuando el usuario se encontró con una clara mayoría de usuarios que cuestionaba su actuar, fue a pedir [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Amarillos_por_Chile_2 la protección de la página en su versión]. Nuevamente, esto es parte del comportamiento habitual de usuario ([https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual&action=history ver el historial de ese tablón]): el usuario trata cualquier diferencia de opinión con la suya como si fuera vandalismo y utiliza ese tablón para cementar su versión (yo mismo lo he sufrido con anterioridad, aunque es difícil buscar un acto específico en ese tablón). Quiero agregar que esta denuncia <u>no es por este caso en particular</u> sino que contra el comportamiento habitual de manipular el sistema para mantener sus versiones de status quo, sin siquiera entrar a discutir y tratar cualquier tipo de edición (que no concuerde con su visión) como si fuera vandalismo. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 09:35 20 sep 2025 (UTC)
:::::Otro antecedente más del que ni siquiera estaba al tanto. Con anterioridad a su solicitud de protección de la página del 20 de agosto (rechazada por {{u2|Rafstr}}), cuando intentaba mantener así el status quo ante la presión de 5 usuarios (todos usuarios veteranos muy experimentados) que llegaron independientemente a esa PD - <small>tras mención general del problema en el café</small>, el usuario ya había exigido una [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Amarillos_por_Chile protección similar el 8 de agosto], con anterioridad a esta denuncia y con posterioridad a que yo haya iniciado una discusión en la PD (que el ignoró al igual que los mensajes que le dejé en su PD personal, mientras seguía dándole al botón revertir). Es un perfecto ejemplo de cómo el usuario consistentemente [[WP:NSW|abusa de las reglas del sistema]], a sabiendas de que si revierte 3 veces, puede denunciar a la contraparte por 3R, y pedir protecciones. Y, bueno...le sigue dando al botón sin intentar si quiera debatir.
:::::[https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/3RR/Actual&diff=prev&oldid=149513602#Aroblesm Ya ha sido denunciado anteriormente por exactamente lo mismo] y (como decía anteriormente) tiene la PD llena de quejas por lo mismo, pero la mayoría simplemente nos hartamos - yo ya muchas veces - y nos vamos a otra cosa sin denunciar...'''<u>pero este comportamiento tiene que parar de una vez por todas</u>'''. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 00:50 22 sep 2025 (UTC)
::::::Otro ejemplo (y sin buscar mucho): hace unos días atrás hizo lo mismo con {{u2|GKLakers02}} en el artículo [[Línea 6 del Metro de Santiago]] y terminó denunciando al usuario [https://es.wikipedia.org/w/index.php?title=Wikipedia:Vandalismo_en_curso&diff=prev&oldid=169275648 por un presunto vandalismo]. En en intertanto GKLakers02 intentaba discutir en la [https://es.wikipedia.org/wiki/Discusi%C3%B3n:L%C3%ADnea_6_del_Metro_de_Santiago#Tensi%C3%B3n_Incorrecta. PD del artículo] proveyendo fuentes correctas, pero siendo completamente ignorado pro el usuario. El asunto terminó cuando el artículo fue protegido, manteniendo el status quo (incorrecto) que tozudamente forzaba Aroblesm dándole al botón.
::::::Pero bueno...este el sólo otro ejemplo pero son cientos. Alguien tiene que parar al usuario (que es buenísimo combatiendo vandalismo, pero termina tratando a todo el mundo cual si fueran vándalos). [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 01:07 22 sep 2025 (UTC)
:a sabiendas que está denuncia aún no se resuelve, intenté corregir lo de la [[Línea 6 del Metro de Santiago]], siendo nuevamente revertido [https://es.wikipedia.org/w/index.php?title=L%C3%ADnea_6_del_Metro_de_Santiago&diff=prev&oldid=169740888 1] y [https://es.wikipedia.org/w/index.php?title=Línea_6_del_Metro_de_Santiago&diff=prev&oldid=169740854 2] oportunidades (en rápidisimo; me reveritió dos veces, antes de que pudiese agregar la info sobre las otras líneas, para las cuales existe similar documentación) por el usuario que no duda un segundo en entrar en GE para defender el status quo sobre la base de una referencia absolutamente obsoleta del año 2016 (sí, hace 9 años, el metro sí operaba a 750 Vcc). Lo peor es que revierte e indica que hay que ir a la PD donde ya se le ha explicado con lujo de detalles que está equivocado.<br />
:Por favor: alguien tiene que frenar a este usuario ya que le hace mucho daño a eswiki (piensen en todas las IPs/usuarios que él determina unilateralmente que son vándalos). Yo por mi parte, voy a intentar evitarlo hasta que se resuelva esto (y voy a dejar los artículos sobre le Metro de Santiago con un voltaje incorrecto por el momento), aunque es altamente probable que me revierta en otros lados (ya vigila una enorme proporción de los artículos sobre contingencia chilena); si lo hace, no voy a insistir y voy a dejar las cosas de manera incorrecta. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 23:40 29 sep 2025 (UTC)
Agregro otro antecendente: En [[Línea 6 del Metro de Santiago]] y [[Línea 3 del Metro de Santiago]], el usuario entró nuevamente (como ya ha ocurrido en muchas oportunidades con anterioridad) en conflicto con IPs. Las IPs tiene razón, pero el usuario las revierte. Como las IP insisten en agregar <u>la info corrrecta</u> (bien referencianda y discutida de la IP del artículo - aunque le usuario lo ignore y le siga dando al botón), el usuario va al TAb a pedir protección de ambas [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#L%C3%ADnea_6_del_Metro_de_Santiago] [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#L%C3%ADnea_3_del_Metro_de_Santiago] y {{u2|Virum Mundi}} terminó protegiendo ambas por 3 meses. <br />
Esto pone en evidencia una vez más, el mal que está haciendo el usuario de las reglas y los tablones. Las IPs (porque son dos creo) han hecho todo bien: han agregado info correcta, han referenciado y han ido a la PD....y el usario le sigue dando al botón para imponer una fuente obsoleta de 2016. Y recurre a cuatánto tablón haya para denunciar a supuesto vándalos..<br />
'''Por favor que alguien haga algo y pronto....o al menostenga en consideración este accionar permanente y dejen de validar los reportes del usuario.''' [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 02:59 6 oct 2025 (UTC)
;Respueta al comentario de abajo
::(no quiero que esto sea un foreo, pero hago este comentario para que esta denuncia <u>no se vaya por la ramas del caso puntual</u> sobre el que versa la respuesta)
{{pg|Virum Mundi}}: Aunque la denuncia no pasa por ahí, pero la tensión en el Metro de Santiago se ha cambiado de 750 Vcc a 1500 Vcc y de vuelta múltiples veces. Los cambios se realizan con relativa celeridad y la única documentación que queda disponible es precisamente la licitación y la especificación técnica de la misma (que fue lo provisto)...pero, vamos que estaremos de acuerdo que borrar todo pq hay un fuente obsoleta que no dice que en 2016 era diferente?
::Pero nuevamente, la denuncia no pasa por ahí. Esto es un ejemplo igual al caso de AxCh (descrito arriba) y muchísimso similares (que he visto/sufrido con el usuario y de los cuales hay una retahíla de protestas es su PD), en que revierte todo, trata a todo el mundo como vándalo, dice que hay que ir a la PD, y (si se digna a opinar en la PD - generalmente no lo hace), se limita a decir que tiene una fuente (por muy mala/obsoleta que sea) e ignora los argumentos en la discusión. Y luego recurre a tablones para pedir protecciones, denunciar vandalismo y así afianzar su versión. Es un mal uso y no te culpo a ti ni ningún sysop, porque es muy difícil darse cuenta del mal uso (repetitivo) que hace y a primera vista sí puede parecer correcto (y obviamente cómo el usuario hace múltiples denuncias que sí correctas...bueno...es más mucho difícil)...y por eso les pido por favor mucha atención con el usuario que le está haciendo daño a wikipedia. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 11:47 6 oct 2025 (UTC)
;Comentario admin
* No es mi intención intervenir en esta denuncia. Pero sí quiero aclarar, ya que fui mencionado por nombre, que la semiprotección de estos artículos se ha hecho por guerra de ediciones, pues no se puede llenar los historiales una y otra vez de modificaciones y reversiones. Aun así, antes de proteger el de la Línea 6, por pura curiosidad (me interesa el tema de ferrocarriles, aunque no particularmente el sistema metropolitano de Santiago de Chile), entré en una página de la compañía donde está indicado que actualmente los cables son "flexibles, unipolares, clase 5, de tensión de aislamiento de 750 V (fuerza) y 600 V (control) para 90ºC..." (y así sigue). También entré en la fuente proporcionada por las IP, un documento de finales del año pasado que detalla los pormenores de un proyecto (para mí, proyecto significa futuro). También leí la discusión, donde el denunciado de hecho sí intervino una vez, allí se proporciona como prueba una imagen realizada por el anónimo, almacenada en su Google Drive. Esta imagen de un visor digital colgado del techo no es una fuente creíble, no solo por ser fuente primaria, y no solo porque no se puede saber de dónde es (no pone el nombre del metro ni de la estación, solo un número colgado del techo, pero presumo de buena fe y asumo que es del lugar indicado), sino que en sí tampoco indica nada definitivo, puede estar por ejemplo en fase de pruebas o de desarrollo (teniendo en cuenta el poco tiempo transcurrido desde el documento mencionado) o de adaptación. Sí, obviamente puede ser también que ya está empleado, pero entonces hace falta una referencia que lo indique de verdad (no la de un proyecto). Insisto, no estoy aquí ni para debatir ni para valorar esta denuncia, solo dejar claro el motivo de la protección. las guerras de ediciones no pueden llevarse a cabo en los historiales de los artículos, invito a cualquiera a realizar las modificaciones necesarias en dichos artículos, si ha lugar, y/o participar en la discusión aportando las fuentes (al fin y al cabo estás páginas están semiprotegidas, cualquier usuario autoconfirmado puede intervenir en ellas). Por lo demás, lo dejo a otro admin. Saludos. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 05:10 6 oct 2025 (UTC)
;Continúa con más casos:
:Nuevamente el usuario en acción. [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protecci%C3%B3n_de_art%C3%ADculos/Actual#Historia_del_Metro_de_Santiago_2 Acá pidiendo protección en TAB] porque un "supuesto Vándalo" estaría agregando una imagen (absolutamente pertinente al artículo). Por favor dejen de ignorar esto y pónganle freno al usuario. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 16:59 2 nov 2025 (UTC)
; Respuesta
{{admintab|1=Prueba|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:25, 9 February 2026 (UTC)|3=}}
== Retomo reporte de CPP política ==
; Asunto
Hace menos de un mes [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Nombres_inapropiados_y_vandalismo_persistente/2025/09#CPP_pol%C3%ADtica reporté en el tablón] un caso de CPP política, que fue lamentablemente desestimado, pues el usuario {{u|Pptrc}} ha vuelto con lo mismo, controlar el artículo del partido chileno [[Evolución Política]] y ahora se crea una entrada con IA de [[Juan Manuel Santa Cruz]] sin mayor complicación, e incluso pasó por la revisión de un patrullero. Insisto en que esta cuenta no tiene otro objetivo que controlar y promover contenidos de políticos de la formación en la que tiene interés demasiado particular.
:Por favor: por qué se espera para resolver estas cosas? es evidente que {{u2|Taichi}} tiene razón, y habiendo un proceso [[Elecciones parlamentarias de Chile de 2025|eleccionario en curso]], es evidente que la CPP está editando artículos con motivos propagandísticos...y que dada la coyuntura, se deben tomar medidas con celeridad. [[Usuario:SFBB|SFBB]] ([[Usuario Discusión:SFBB|discusión]]) 20:57 30 sep 2025 (UTC) <small>ps: aclaro que mi intervención acá fue para agregar el antecedente de la urgencia, dada la coyuntura</small>
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 15:17 17 sep 2025 (UTC)
; Respuesta
{{admintab|1=Probando a resolver esta otra a ver si ocurre...|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:12, 11 April 2026 (UTC)|3=}}
== Santos500p ==
; Asunto
Pido por favor que se tomen nuevas medidas para apaciguar el frenesí de ediciones del usuario {{u2|Santos500p}}, concernientes sobre todo con política de Perú, que [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ASantos500p&diff=169860726&oldid=169762965 en los últimos días] ha llegado al punto de tener varios artículos y categorías creadas por él en [[WP:CDB|consultas de borrado]], algunas teniendo consenso comunitario a favor del borrado.
En una de las consultas señalé que [https://es.wikipedia.org/w/index.php?title=Wikipedia:Consultas_de_borrado/Deface_Per%C3%BA&diff=prev&oldid=169776828 el usuario lleva bastante rato desconociendo las líneas entre los diferentes proyectos], con varios intentos en el pasado de señalarle sobre ello, pero sigue en la mezcla de contenidos que podrían estar perfectamente en Wikinoticias, Wikisource e incluso Wikiquote, pero no hay nada que lo impida, aduciendo que puede entorugar cualquier cosa como artículo de Wikipedia, incluso riñendo con [[WP:REC]] o [[WP:SRA]]. De hecho, su página de discusión ha recibido en los últimos dos meses una cantidad difícil de cuantificar de [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ASantos500p&diff=169860726&oldid=168959821avisos de borrado rápido, avisos de consultas de borrado y artículos sin relevancia], varios de ellos siendo borrados.
Esta situación ya suma a su <u>bloqueo parcial por dos años</u>, por lo que debería haber una restricción más certera que haga rectificar su proceder. Apelo a que el usuario pueda comprender que Wikipedia tiene bien delimitado [[WP:NO|sus noes]] y que debería él como usuario, ya no tan novato, entender esos límites. De lo contrario, dejo al encargo de un bibliotecario para que tome alguna medida extra para restringirlo.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 11:34 10 oct 2025 (UTC)
; Respuesta
{{admintab|1=Vamos a probar a resolver esta también|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 13:53, 11 April 2026 (UTC)|3=}}
== Usuario reincidente ==
; Asunto
* En marzo de este año, acudí al TAB por una serie de problemas en numerosos artículos creados por el usuario {{u|Ángel Luis Alfaro}}, [https://es.wikipedia.org/wiki/Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscel%C3%A1nea/2025/06#Creaci%C3%B3n_de_art%C3%ADculos_con_varios_problemas ver aquí]. Ahora ha editado el artículo [[Alto Renacimiento]] con los mismos problemas por el cual puse esa denuncia en el TAB. Exceso de fotografías (173), referencias en las propias fotografías. Cientos de enlaces internos, algunas secciones son toda azul. Mal formato de las referencias, fuentes citadas (Fuentes citadas en Maniera moderna), usar como referencia artículos de wikipedia, véase la referencia 26. La sección notas es casi tan grande como el propio artículo. Y para terminar, no ha corregido ni uno solo de los artículos que ha creado anteriormente.
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:20 14 oct 2025 (UTC)
;Comentario
* {{ping|Ontzak}} No consigo entrar en el enlace (me va todo muy lento hoy), ¿es el mismo que resolví yo la última vez? <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 09:32 15 oct 2025 (UTC)
* {{ping|Virum Mundi}} si, el mismo. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 13:55 15 oct 2025 (UTC)
** Ya veo, bueno, me pongo a ello, puede que tarde un rato. {{ping|Ángel Luis Alfaro}} por favor evita más ediciones hasta que se resuelva esta denuncia. Un saludo. <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 11:26 16 oct 2025 (UTC)
::{{comentario}} {{ping|Virum Mundi}}, a pesar del aviso, el usuario sigue [https://es.wikipedia.org/wiki/Especial:Contribuciones/%C3%81ngel_Luis_Alfaro editando]. [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:45 26 nov 2025 (UTC)
; Respuesta
{{admintab|$0}}
== Adrian Silvera ==
; Usuarios implicados
* {{u|Adrian silvera}}
; Motivo
Hace una década que este usuario agrega contenido mal escrito, sin referencias y muchas veces innecesario. Lo bloquearon tres veces por este motivo. Estuve un año insistiendo para que activara el autocorrector y así por lo menos subsanar el tema de la ortografía. Lo hizo hace poco, creo, pero el remedio fue peor que la enfermedad: ahora confunde adjetivos, sustantivos y verbos, y pone tildes en cualquier parte. Esto no sería tan grave de no ser porque se le advertí unas tres veces y sigue igual. Hoy le mandé un mensaje por ese tema y lo primero que hizo fue [https://es.m.wikipedia.org/w/index.php?title=The_Matrix_Reloaded&diff=prev&oldid=170118708 esto]. En otro caso lo interpretaría como una tomadura de pelo, pero no creo que lo haga a propósito. De todas maneras, alguna consecuencia tiene que tener, para aprender.
; Usuario que lo solicita
* [[Usuario:Minguu|Minguu]] ([[Usuario Discusión:Minguu|discusión]]) 20:16 22 oct 2025 (UTC)
; Respuesta
{{admintab|1=aaaa|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:54, 9 February 2026 (UTC)|3=}}
== Propuesta de desbloqueo para Lenis Felipe ==
; Asunto
* Hola. Por este medio quisiera proponer al colegio de bibliotecarios el desbloqueo local de {{u|Lenis Felipe}}, usuario bloqueado hace ya más de tres años por creación de páginas vandálicas. Lenis se encuentra con bloqueo global, por lo que para poder ser desbloqueado globalmente necesita ser desbloqueado de alguna de las wikis donde tiene bloqueos actualmente, entre ellas, Wikipedia en español.
:La propuesta la planteo porque, habiendo pasado un tiempo prudencial, puedo atestiguar que Lenis pareciera haber enmendado su rumbo y ha colaborado en reportar vía IRC, de manera privada, vandalismos, evasores de bloqueo y hasta sugerir cambios a filtros antiabusos para detener algunos abusadores de largo plazo. Particularmente lo ha hecho desde enero de 2024. Me parece que tal y como fue el caso de Sargento de Hierro (perdón que le nombre, pero me gusta destacar casos de usuarios que se corrigieron :)), podría ser positivo darle una segunda oportunidad para convertirse en un elemento positivo para la comunidad. Ante ello, propongo su desbloqueo local y quedo atento a cualquier propuesta de términos para ello, en cuenta restricción de crear páginas nuevas, o similares. Saludos,
; Usuario que lo solicita
* '''[[Usuario:Jake Park|''Jake Park'']]''' [[Archivo:Coat of arms of Costa Rica.svg|20 px]] [[Usuario Discusión:Jake Park|<span style="color: red;">'''Problem?'''</span>]] 01:00 29 oct 2025 (UTC)
;Comentarios de biblios
* Desde mi punto de vista, los usuarios que no hayan tenido actitudes vandálicas sistemáticas posteriores al bloqueo no deberían permanecer bloqueados más de tres años. '''Apoyo''' el posible desbloqueo. De todos modos, consulto: ¿sabes qué edad tiene el usuario? Porque no es lo mismo alguien que hizo esas tonterías a los 16 años que a los 60; en el primer caso, puede haber madurado rápidamente, mientras que si fuera ''"mayorcito"'' como quien escribe, los aprendizajes de comportamientos son más difíciles. --[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 02:03 29 oct 2025 (UTC)
* EMHO todos son susceptibles de cambiar, no quiere decir que todos lo hagan, pero uno de los 5 pilares nos pide presumir buena fe. {{Ok|Votum pro}}. [[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:00 30 oct 2025 (UTC)
*
; Respuesta
{{admintab|1=Qué tal esta? la resolvemos??|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 13:53, 11 April 2026 (UTC)|3=}}
== Unmuybuenusuario ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
{{u|Unmuybuenusuario}} se registró el 28 de octubre de 2025, o sea hace 12 días. Desde el primer momento se dedicó a hacer mantenimiento y mandar artículos a borrar. El segundo día ya [https://es.wikipedia.org/w/index.php?title=Wikipedia:Tabl%C3%B3n_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Permisos/Actual&diff=prev&oldid=170247444 solicitó el flag de reversor con el argumento de : '' pese a mi muy breve tiempo en Wikipedia, desearía poseer el permiso de reversor para revertir de manera más fácil que usando el botón deshacer''], o sea que asegura que hace poco tiempo que está en Wikipedia pero ya conoce los tipos de flags que existen y dónde solicitarlos.
@[[Usuario:Edslov|Edslov]], le negó el permiso, obviamente, ya que en ese momento tenía menos de 48 horas de creada la cuenta, pero no solamente opina que la decisión no fue justa
sino que además conoce perfectamente el Café y fue directamente a quejarse porque no se le dio el permiso, para preguntar [https://es.wikipedia.org/w/index.php?title=Wikipedia:Caf%C3%A9/Archivo/Ayuda/Actual&diff=prev&oldid=170287227 ''¿Cuánto tiempo desde mi registro tiene que transcurrir para poder recibir el flag de reversor? ¿O cuántas ediciones?''].
Le pedí al usuario [https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:Unmuybuenusuario que dejara de hacer mantenimiento] y él me dejó un mensaje protestando por que
[https://es.wikipedia.org/w/index.php?title=Usuaria_discusi%C3%B3n:Jaluj&diff=prev&oldid=170408787 no encuentra ninguna política que prohíba a un editor nuevo deshacer vandalismos o colocar plantillas de borrado rápido a artículos que cumplan alguno de los criterios de borrado rápido], lo cual es cierto, como tampoco hay ninguna política que prohiba a un usuario nuevo tener el flag de reversor, pero suponemos que para hacer este tipo de tareas se necesita tener experiencia y haber demostrado tener conocimientos para hacerlas bien. Por eso le pedí que se detenga y deje de hacer mantenimiento, porque si es un novato no podemos confiar en que lo haga.
Entonces me [https://es.wikipedia.org/w/index.php?title=Usuaria_discusi%C3%B3n:Jaluj&diff=prev&oldid=170408787 acusó de estar violando la políticas al morder a los novatos y no presumir buena fe]. Morder a los novatos es cuando se trata de una persona sin experiencia que todavía no conoce las normas y políticas de Wikipedia. Una persona novata no sabe ni que existe un Café, ni que existe un tablón para solicitar flags, ni que existe el flag de reversor ni que existe el "deshacer".
Pero a la vez me acusa de no presumir buena fe al sospechar que no es novato. Entonces, ¿en qué quedamos? Porque si es un novato, no debería estar haciendo mantenimiento y si no lo es, entonces yo no estaría presumiendo mala fe al sospechar que no lo es.
Esta cuenta me está difamando al dejar mensajes como [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:A.piquerasm&diff=prev&oldid=170408867 este], porque además de acusarme de morder a un novato y de presumir mala fe me acusa por haber solicitado una VU y de haberlo "intimidado". Ahora resulta que por haberle pedido que deje de hacer mantenimiento y por haber pedido una VU yo soy la que viola las políticas y lo estoy "intimidando". Yo no lo acusé acusé ''gravemente de abuso a largo plazo'', yo solicité una VU porque sospecho que puede ser una LTA. Si no lo es, no tiene nada de qué preocuparse y si es un novato mucho menos. Solicito que se le haga un llamado de atención para que deje de difamarme a mis espaldas, ya que ni siquiera me enlazó para que yo no me enterara.
; Usuario que lo solicita
* [[Usuario:Jaluj|Jalu]] ([[Usuario Discusión:Jaluj|discusión]]) 18:17 10 nov 2025 (UTC)
* Te pido amablemente usuaria [[Usuario:Jaluj|Jalu]] una solución a este problema, porque yo no te estoy difamando, si conozco el café, el tablón, si se hacer reversiones, es porque fui anónimo y como usuario anónimo ya me dedicaba a hacer estas cosas, un usuario me sugiero visitar la página de cambios recientes y eso es lo que estoy haciendo, visitar los cambios recientes ¿Tengo prohibido deshacer vandalismos encontrados? Por cierto, no me indicaste cuales son las ediciones supuestamente arbitrarias, las ediciones que he hecho han sido deshacer vandalismos, yo no soy ni títere, ni evasor, ni mucho menos abuso a largo plazo, soy usuario completamente nuevo y esta es mi primera cuenta, y te recuerdo un fragmento de la página de usuarios títeres: '''Puede ser fácil identificar a un usuario títere, si muestra un conocimiento de las políticas, convenciones de Wikipedia y técnicas avanzadas de edición que no es de esperar en un novato (aunque debe presumirse buena fe: es posible que sea un usuario que haya colaborado en otra edición de Wikipedia, en alguna otra wiki o <u>que haya participado mucho tiempo como anónimo</u>)''' (subrayado mío). Si conozco como deshacer vandalismos, es porque antes editaba como anónimo, y esta cuenta fue creada para ayudar a Wikipedia, de ninguna manera la cree para LTA o ediciones arbitrarias. ¿Cómo propones que se solucione este problema y que tipo de ediciones puedo hacer y que tipo de ediciones no puedo hacer? --[[Usuario:Unmuybuenusuario|Unmuybuenusuario]] ([[Usuario Discusión:Unmuybuenusuario|discusión]]) 23:27 10 nov 2025 (UTC)
:{{comentario}}: [https://es.wikipedia.org/w/index.php?title=Wikipedia:Solicitudes_de_verificaci%C3%B3n_de_usuarios&oldid=170625007#Evasi%C3%B3n_de_bloqueo:_Cris2020 Resultado de la SVU]. --'''[[user:Stïnger|<span style="text-shadow:#FFD700 1px 1px 2px; class=texhtml"><span style="font-family:'Calibri';color:black">Stïnger</span></span>]]''' <sup>[[Archivo:Bureau kage.svg|15px|link=User talk:Stïnger]]</sup> 00:58 24 nov 2025 (UTC).
; Respuesta
{{admintab|Al no ser un caso reciente (ya pasaron algunos días) apercibo a {{u2|Unmuybuenusuario}} de [[WP:PBF]] primeramente y posterior a [[WP:PPBF]]. Ambos juicios caen en violaciones a [[WP:E]] y [[WP:CIV]] (supongo al ya haber editado como IP sabrá por que, por lo que en caso de reincidencia podría haber sanción. En cuanto al flag, queda al criterio del bibliotecario que lo otorga, no hay tiempo ni cuota determinada, pero es bastante obvio que más sabe el diablo por viejo que por diablo, yo tampoco lo habría otorgado.|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:09 26 nov 2025 (UTC)}}
== Expulsado de la Wikipedia en inglés viene acá a hacer lo mismo... ==
;Usuarios
* {{u|SocialQuote}}
* {{u|2800:484:7380:0:0:0:0:0/44}}
; Asunto
Tanto [https://en.wikipedia.org/wiki/Special:Contributions/SocialQuote la cuenta registrada] como [https://en.wikipedia.org/wiki/Special:Contributions/2800:484:7380:0:0:0:0:0/44 el rango IP] se encuentran sancionados desde septiembre en la Wikipedia en inglés, por ediciones conflictivas, reversiones sin sentido e incluso insultos y amenazas.
Ya acá [[Usuario discusión:2800:484:7385:F0:95EE:CA0B:4429:B24C|ha causado problemas como anónimo en junio]] y la cuenta [https://es.wikipedia.org/w/index.php?title=Scarface_(pel%C3%ADcula_de_1983)&diff=prev&oldid=168285955 incluso ripostó contra un bibliotecario], y [https://es.wikipedia.org/w/index.php?title=Harry_Potter_y_el_c%C3%A1liz_de_fuego&diff=prev&oldid=169807011 está constantemente] [https://es.wikipedia.org/w/index.php?title=Dinero_negro&diff=prev&oldid=170282821 revirtiendo al bot de mantenimiento]. Nótese que los temas que edita tanto la cuenta como la IP son las mismas (series de TV y películas), y las sanciones aplicadas en en.wiki fueron hechas el mismo día.
Debido a esta coincidencia y la situación que está persistiendo ahora en la Wikipedia en español, pido que se tomen medidas.
:{{comentario}} Añado [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n:Farisori&diff=prev&oldid=170531619 otro mensaje bastante incordiante contra otro bibliotecario] haciéndolo suponer entre líneas que no sabe redactar artículos. '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 00:10 18 nov 2025 (UTC)
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 04:18 17 nov 2025 (UTC)
; Respuesta
{{Hecho|1=Bloqueado}} por Rafstr. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:40 19 nov 2025 (UTC)
== Borrar y ocultar datos sensibles en página de usuario ==
; Asunto
Pido con carácter de urgencia que algún bibliotecario [https://es.wikipedia.org/w/index.php?title=Usuario:Dalma_Huerta_Mercado_Calder%C3%B3n&diff=prev&oldid=170526877 oculte datos sensibles y muy personales] de [[Usuario:Dalma Huerta Mercado Calderón|esta página de usuario]], ya que es aún una niña (ni siquiera es adolescente). No creo que sea consciente de que lo que hace es peligroso a su edad.
Añado que ya [https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:Dalma_Huerta_Mercado_Calder%C3%B3n#Informaci%C3%B3n_personal no es la primera vez que la pillan colgando datos personales], el año pasado hizo lo mismo. Si toca hacer alguna medida administrativa que evite que la menor siga exponiendo sus datos sin cuidado, adelante.
; Comentarios
No soy bibliotecario, pero {{ping|Taichi}} creo que lo mejor es mandar un correo a [[Wikipedia:Supresores|oversight]], o como mínimo realizar la solicitud en algún lugar menos visible (como IRC). --[[Usuario:Xacaranda|Xacaranda]] [[Usuario discusión:Xacaranda|(mensajes)]] 18:56 18 nov 2025 (UTC)
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 04:22 17 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Sí}}, dada la excesiva información personal y la imposibilidad de ocultar la última edición, opté por el borrado de la PU. También dejé un mensaje a la usuaria. En caso de reincidir, aplicaría una medida, como un bloqueo parcial, para impedir que vuelva a crear su página de usuario. Un saludo,|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:55 19 nov 2025 (UTC)}}
== LTA ==
; Usuarios implicados
* {{u|Mauro08L}}
; Motivo
Hmm, otra vez, otro títere más de {{u|Claudio1098}}.
; Usuario que lo solicita
* —<span style="font-family:Trebuchet MS;font-size:95%">[[Usuario:Mαrti|<span style="color:#636;">Mαrti</span>]] <span style="color;background:#CBE2F7;border-radius:9px;"> [[Usuario discusión:Mαrti|'''ϟ''']] </span></span> 20:23 18 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:42 19 nov 2025 (UTC)}}
== Recreación reiterada ==
; Asunto
* El usuario {{u|Archivoteleditor}} insiste en recrear el mismo programa de televisión con distintas variaciones del título, véase [[Tentaculos]], [[Tentáculos]], [[Ni que fuéramos tentáculos]] y [[Ni Que Fuéramos Tentáculos]], contabilizo más de una docena de recreaciones, ya se le avisó de un posible conflicto de interés.
:En cuanto al artículo, se trata de un programa que duró apenas 3 meses en antena, aunque El País y EuropaPress son referencias fiables, mencionan el programa superficialmente.
; Usuario que lo solicita
* '''C:\>''' [[Usuario:A.piquerasm|A.piquerasm]] '''[''' [[Usuario Discusión:A.piquerasm|Discusión]] ''']''' 16:43 19 nov 2025 (UTC)
; Respuesta
{{admintab|{{hecho}}. Inhabilitado de crear páginas. Un saludo.
|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 19:49 19 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170580247]]
; Motivo
Lenguaje soez
; Usuario que lo solicita
* [[Usuario:Casisgaal|<span style="font-size:black 3px 1px 3px; font-variant:Corbel; color:blue; text-shadow:cyan 2px 1px 2px">Casisgaal</span>]] [[Usuario discusión:Casisgaal|(Discusión)]] 16:16 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada y cuenta bloqueada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:36 21 nov 2025 (UTC)}}
== Anónimo escurridizo ==
; Asunto
Un anónimo que cambia de cuenta temporal y de IP lleva dos meses haciendo cambios sin sentido en partidos políticos de Colombia [https://es.wikipedia.org/w/index.php?title=Independientes_(Colombia)&action=history como este], [https://es.wikipedia.org/w/index.php?title=Partido_Comunista_de_Colombia_-_Marxista_Leninista&diff=prev&oldid=170580251 cambiando un «es» por «fue»] (haciendo entender que ya no existen), pero sin aportar pruebas que los partidos ya no están activos. Como no está aportando nada [[WP:VER|que lo sustente]], se le está revirtiendo pero insiste en reponerlo, llegando a una conducta que no se puede considerar como constructiva.
Además, nos pone en prueba con el sistema de cuentas temporales ya que no sólo está cambiando de cuenta temporal, sino de IP, por lo que dejo en consideración que hacer. Estás serían las direcciones en cuestión: [https://es.wikipedia.org/wiki/Especial:IPContributions/191.108.3.30], [https://es.wikipedia.org/wiki/Especial:IPContributions/191.108.59.86], [https://es.wikipedia.org/wiki/Especial:IPContributions/152.201.226.108] y [https://es.wikipedia.org/wiki/Especial:IPContributions/152.202.79.18].
Previo a la instauración de cuentas temporales también editó con las siguientes IPs:
* {{u|152.201.203.233}}
* {{u|186.113.76.107}}
* {{u|191.111.9.153}}
Es posible que incluso se considere en semiproteger si en caso tal el anónimo siga por cambiar de IP y continúe con esta situación.
; Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 16:49 20 nov 2025 (UTC)
; Respuesta
{{admintab|{{prot|60}}|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:19 26 nov 2025 (UTC)}}
== Acoso ==
; Usuarios implicados
* {{u|~2025-35257-44}}
* {{u|~2025-35202-10}}
; Motivo
Acoso a un usuario
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 21:57 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 16:49 21 nov 2025 (UTC)}}
== Acoso ==
; Usuarios implicados
* {{u|Narsenopoulos}}
; Motivo
{{diff|170585395|Acoso a un usuario}}
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 22:03 20 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Usuario bloqueado por Virum Mundi. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:28 21 nov 2025 (UTC)}}
== Ocultar ediciones ==
; Asunto
* [[Especial:Diff/169433403]]
* [[Especial:Diff/170587004]]
; Motivo
El artículo suele ser vandalizado mediante la inclusión de nombres completos de particulares en esta lista, entiendo que motivados por algún tipo de rencilla personal. Creo que es conveniente ocultarlos ya que que, de lo contrario, esos nombres quedan indexados y accesibles por internet, asociados a una lista de violadores en serie, lo cual puede tener implicaciones en su vida personal.
; Usuario que lo solicita
* [[Usuario:Nacaru|Nacaru]] [[Archivo:Noto Emoji KitKat 2601.svg|19px]] ([[Usuario_discusión:Nacaru|discusión]]) 00:23 21 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Ediciones ocultadas. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:39 21 nov 2025 (UTC)}}
== Solicitud para corregir redirecciones dobles en [[Ciudad del Cuzco]] y [[Cusco, Perú]] ==
Hola. Por favor, ayúdenme a solucionar el problema de las redirecciones dobles en las páginas de redireccionamiento [[Ciudad del Cuzco]] y [[Cusco, Perú]]. Gracias. [[Especial:Contribuciones/~2025-35342-08|~2025-35342-08]] ([[Usuario discusión:~2025-35342-08|discusión]]) 04:33 21 nov 2025 (UTC)
;Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 04:45 21 nov 2025 (UTC)}}
== Me sentí acosada por Jaluj, por favor, paciencia con los novatos ==
; Asunto
Soy una nueva editora (bueno, era una nueva editora) estudiante de 5º de Veterinaria y entré en la wikipedia con mucha ilusión.
Detecté un artículo escrito llamado “Comida para gatos” lleno de enlaces spam a marcas comerciales, así como un claro sesgo pro pienso alabando sus virtudes.
Después de leerme todos los tutoriales edité el artículo intentando ser objetiva, eliminado enlaces spam y texto publicitario.
Un editor deshizo todo mi trabajo dando la razón de que yo había eliminado referencias. https://es.wikipedia.org/w/index.php?title=Comida_para_gatos&diff=170390013&oldid=170376180
Vi la posibilidad de aprender de mis errores y le pregunté por que consideraba fiables (ya que repuso todos los enlaces spam) Eran enlaces a artículos como “los 8 mejores marcas de piensos” (que es publicidad de 8 marcas de piensos, con enlaces a afiliados de Amazon), o webs que no funcionaban etc etc
Me contestó que había eliminado todo mi trabajo porque yo había añadido 1 referencia “por tratarse de blog y por tanto no considerarse fiable”. Era un enlace a un artículo de una clínica veterinaria como había 3 o 4 igual en el artículo. https://clinicaveterinarium.es/el-gato-es-omnivoro-o-carnivoro/
No entendí que para eliminar ese enlace se eliminara todo el trabajo realizado en el artículo, y sobre todo que se repusieran los enlaces spam, y por qué esos enlaces spam eran fuentes fiables.
Para resumir, volví a poner el artículo tal y como yo lo había escrito (eliminado más de 10 enlaces spam) quitando el enlace a dicha clínica, sospechando que era ese el problema, y el editor me agradeció la edición. Seguí sin aprender. Pero no me quejo de este editor.
Y aquí viene mi ruego.
Posteriormente a todo esto, y tras muchos días después, apareció el editor Jaluj, https://es.wikipedia.org/wiki/Usuario_discusi%C3%B3n:LaVeterinaria , donde me acusó de faltar a la etiqueta y falta de civismo al preguntar al editor. Pedí disculpas por mis preguntas si habían molestado y volví a decir que mi intención era aprender y por eso preguntaba.
Tras mi respuesta, el editor Jaluj fue a una edición mía en otro artículo, y la eliminó, diciendo que no era una fuente fiable https://es.wikipedia.org/w/index.php?title=Perro_de_caza&curid=707821&diff=170565115&oldid=170545527 La ACCM es un organismo avalado por el Gobierno https://servicio.mapa.gob.es/arca/download.html?id=20338485&contentType=application/pdf que reconoce oficialmente a los perros de raza, así que supongo que son una fuente entendida del tema para hablar de razas.
Además de eliminar esa información, me vuelve a acusar de falta de civismo y de etiqueta, por lo que me declaré Retirada y así se lo dije como respuesta, ya que no entendía nada, me di cuenta que no podía aprender y me sentía atacada.
He recibido un email de wikipedia donde me avisa que el editor Jaluj obviando todas mis disculpas y petición de información sobre la organización oficial sólo me exige el nombre de mi mentor.
Solo pido un poco de paciencia y empatía con los nuevos editores, necesitamos empatía y ayuda para editar, no acusaciones de mala fe y falta de civismo. Yo lo he intentado, cuiden a los que vengan nuevos detrás de mi. Gracias por leer.
; Usuario que lo solicita
--[[Usuario:LaVeterinaria|LaVeterinaria]] ([[Usuario Discusión:LaVeterinaria|discusión]]) 14:01 21 nov 2025 (UTC)
;Comentario adicional
Permito añadir que {{u2|Leoncastro}} y mi persona [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ALaVeterinaria&diff=170608554&oldid=170595929 hemos tratado separadamente de mediar en el asunto], pero la usuaria está demasiado a la defensiva e incluso [https://es.wikipedia.org/w/index.php?title=Usuario_discusi%C3%B3n%3ATaichi&diff=170606470&oldid=170599847 me dejó esta contestación], incluso cuando buscaba seriamente ayudarle. Lo que denoto en sus contestaciones además, es que ella como estudiante universitaria dice tener algún "mentor" en su universidad (pero no está adscrito acá), por lo que estoy deduciendo que hay alguna orientación mal ejecutada y pareciera que la estudiante está obligada a editar como sea, a expensas de que cualquier patrullero o bibliotecario sea maltratado de esta manera si le revisan sus contribuciones. Ojalá haya alguna forma de que se haga entender y ver ante las instancias de qué o quién movió institucionalmente a la alumna a que pasara esto. '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 14:35 22 nov 2025 (UTC)
; Respuesta
{{admintab|1={{No}}. {{U|LaVeterinaria}}, no me parece que, en ningún momento, Jaluj o algún otro de los varios usuarios que han buscado orientarte te hayan «maltratado» o dado motivos para sentirte intimidada o acosada. Más bien, algunas de tus interacciones muestran que, ciertamente, pareces estar a la defensiva y que podrían malinterpretarse. Supongo que el primer mensaje de Jaluj estuvo motivado por una de tus respuestas a Casisgaal —«¿Por qué escribir texto apoyado en enlaces verificables como la universidad etc.? ¿La wikipedia española se basa en la inglesa y no podemos editar sino solo traducir?»—, que se alejó del [[Wikipedia:Civismo|civismo]] esperado en las interacciones entre usuarios en Wikipedia. Asumiste que el mensaje de Jaluj estuvo motivado por tu «insistencia por preguntar lo que no entendía», cuando claramente te explicó, de forma amable y con la paciencia que en varias ocasiones has pedido, que fue por tu tono. Coincido con Jaluj en que parece que no lees los mensajes completos.
<br>
Si preguntó Jaluj sobre tu «mentor», que tú misma mencionaste en la conversación con Casisgaal, es porque, ciertamente después de estas interacciones que has tenido, surge la duda de quién es, si es usuario de Wikipedia y si tiene conocimiento de las políticas que la rigen. Parece que no. Por ello, sería mejor que aprovecharas herramientas como el [[Wikipedia:Programa de tutoría|programa de tutoría]] —cabe destacar que {{u|Ezarate}} ya amablemente se ofreció a ayudarte con tus ediciones—. Todo lo anterior, ya te lo había explicado Leoncastro. Además, él te dejó un extenso mensaje donde explicó y trató de mediar. Tu respuesta y actuar subsecuente es, cuanto menos, desconcertante.
<br>
En suma, descarto la denuncia. {{U|LaVeterinaria}} no me parece que el tono que uses y la forma de interactuar que tienes con otros usuarios, que han intentando orientarte, sea adecuada o benéfica para la enciclopedia. Así como insistes en pedir paciencia, ofrécela a los demás y no acuses de intimidación o denuncies tan fácilmente. Aprovecha los mensajes en los que se te ha explicado un poco sobre la enciclopedia, aprovecha el programa de tutoría o los ofrecimientos de usuarios como Ezarate. No continúes con esta forma de actuar porque fomenta conflictos y puede conducir a medidas que nadie quiere que se tengan que tomar. Un saludo,|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 22:00 22 nov 2025 (UTC)}}
== LTA ==
; Usuarios implicados
* {{u|Henrysmithwa5}}
; Motivo
LTA aerolíneas
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 20:15 21 nov 2025 (UTC)
; Respuesta
{{admintab|{{ok}} por Jake Park. |--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 00:38 22 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170607263]]
; Motivo
Etiqueta
; Usuario que lo solicita
* [[Usuario:CharlieRaMx|CharlieRaMx]] ([[Usuario Discusión:CharlieRaMx|discusión]]) 12:02 22 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 12:30 22 nov 2025 (UTC)}}
== Ocultar ediciones ==
; Usuarios implicados
* {{u|Zanahorita Extraida}}
; Motivo
Pido que se oculten todas las ediciones de este títere bloqueado, quien como siempre ha lanzado comentarios denigrantes, ofensivos y hasta insultos.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 18:08 23 nov 2025 (UTC)
; Respuesta
{{Hecho}} por Saloca. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 20:00 23 nov 2025 (UTC)
== LTA ==
; Usuarios implicados
* {{u|Patthenry5}}
; Motivo
LTA aerolíneas
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 18:24 23 nov 2025 (UTC)
; Respuesta
{{Hecho}} por MiguelAlanCS. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 19:59 23 nov 2025 (UTC)
== Ocultar ediciones ==
; Asunto
* [[Especial:Diff/170589208]]
* [[Especial:Diff/170589204]]
; Motivo
Vandalismo
; Usuario que lo solicita
* [[Usuario:CarlosEduardoPA|<span style="font-size:80%;background:#000;color:#fff;border-radius:25px;padding:3px 8px;">CarlosEduardoPA</span>]] [[Usuario discusión:CarlosEduardoPA|✉️]] 22:29 23 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Ediciones ocultadas. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:26 24 nov 2025 (UTC)}}
== MediaWiki:Jsonconfig-use-category ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
; Asunto
* {{a|MediaWiki:Jsonconfig-use-category}}
* Please delete the page as it is no longer necessary following [[:phab:T378352|T378352]] ([[:Category:Wikipedia:Páginas que usan la extensión JsonConfig|the category]] has already been deleted). See also [[:m:Steward requests/Miscellaneous#Category:Pages using the JsonConfig extension]].
; Usuario que lo solicita
* [[Usuario:NguoiDungKhongDinhDanh|NguoiDungKhongDinhDanh]] ([[Usuario Discusión:NguoiDungKhongDinhDanh|discusión]]) 23:09 23 nov 2025 (UTC)
; Respuesta
{{admintab|{{ok}}|--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 09:01 24 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170617475]]
; Motivo
Vandalismo
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 23:46 23 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada por Virum Mundi. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:22 24 nov 2025 (UTC)}}
== Plantillas mantenidas sin justificación en Conservatorio de Música de la Universidad Austral de Chile ==
; Asunto
Solicito la intervención de un bibliotecario respecto al artículo [[Conservatorio de Música de la Universidad Austral de Chile]].
El usuario Ontzak colocó dos plantillas (promocional e irrelevante) el día 18 de noviembre. Desde entonces el artículo ha sido completamente reescrito, reforzado con referencias académicas y eliminado el contenido que podía ser de estilo promocional e irrelevante. Conforme a lo indicado en las propias plantillas, abrí hilo en la página de discusión solicitando consenso para su retirada. El usuario no ha respondido pese a haber sido notificado y mencionado en dos ocasiones.
; Motivo
El comportamiento observado, colocar plantillas, no responder a la discusión y bloquear de facto la retirada, encaja en lo descrito en [[WP:DUEÑO]]. A día de hoy las razones originales ya no se sostienen, pero las plantillas permanecen en el artículo sin justificación actual y el editor que las colocó evita participar en la discusión.
; Usuario que lo solicita
[[Usuario:Hoppedup|Hoppedup]] ([[Usuario Discusión:Hoppedup|discusión]]) 12:26 24 nov 2025 (UTC)
Solicito que un bibliotecario revise el caso:
• si procede, retire las plantillas,
• y si fuese necesario, recuerde al usuario implicado la obligación de participar cuando se cuestiona una plantilla mantenida.
Gracias.
; Respuesta
{{admintab|1={{Hecho}}. Por lo demás, todos sabemos cómo hace las cosas {{u2|Ontzak}}; sería mejor que las hiciera con un poco más de intercambio con los demás, pero no se le puede pedir a los editores lo que no pueden o no quieren aportar en Wikipedia (editar sigue siendo una actividad voluntaria, todavía). En mi personal opinión, es mejor tenerlo haciendo lo que hace que no tenerlo, de modo que lo más que podemos hacer es volverlo a invitar a ser un poco más comunicativo. En cuanto a lo de WP:DUEÑO, me parece que te has pasado de largo unos cuantos kilómetros en tu interpretación; un poco más de calma, por favor. Gracias por tu mensaje.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 13:10 24 nov 2025 (UTC)}}
== Spam incesante ==
<!-- ↑ RECUERDA COLOCAR UN TÍTULO A TU MENSAJE EN EL CUADRO «Asunto/encabezado» Y LUEGO PROCEDE A BORRAR ESTE MENSAJE. GRACIAS. -->
; Asunto
* Rango con decenas de ediciones spam, al menos unas 34 desde marzo de este año.
* {{u|89.214.0.0/17}}
* [[Especial:IPContributions/89.214.0.0/17]]
; Usuario que lo solicita
* [[Usuario:Xacaranda|Xacaranda]] [[Usuario discusión:Xacaranda|(mensajes)]] 18:58 25 nov 2025 (UTC)
; Respuesta
{{admintab|{{Sí|He aplicado un bloqueo parcial a los artículos objeto de spam}}.|2=[[Usuario:Montgomery|Montgomery]] ([[Usuario Discusión:Montgomery|discusión]]) 19:04 25 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170663031]]
; Motivo
Transgresión de las reglas de etiqueta.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 19:17 25 nov 2025 (UTC)
; Respuesta
{{admintab|$oc|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 20:09 25 nov 2025 (UTC)}}
== Solicitar traslado ==
; Asunto
* Solicito el traslado de [[CITEDEF]] a [[Instituto de Investigaciones Científicas y Técnicas para la Defensa]], siguiendo la recomendación de la [[Wikipedia:Convenciones de títulos|convención de títulos]] de evitar el uso de acrónimos y siglas siempre que se pueda.
; Usuario que lo solicita
* [[Usuario:Comecaballos|Comecaballos]] ([[Usuario Discusión:Comecaballos|discusión]]) 00:17 26 nov 2025 (UTC)
; Respuesta
{{admintab|{{hecho}}|--[[Usuario:Ezarate|Esteban]] ([[Usuario Discusión:Ezarate|discusión]]) 11:58 26 nov 2025 (UTC)}}
== Cuenta de "propósito particular" ==
; Asunto
* No tengo del todo claro si [https://es.wikipedia.org/w/index.php?title=Especial:Registro/block&page=Usuario%3AInfohisto esto va acá] o a esta altura debería reportarse como vandalismo. Ver sus ediciones de hoy, y sus resúmenes de edición, en {{a|Caporales}} y {{a|Tundiqui}}. Esta cuenta, que ya fue identificada como lo que es, definitivamente no tiene otro propósito aquí que el que ya es evidente. Y lo ha hecho ya en varios artículos.
Mirando su página de usuario veo que tres administradores ya han interactuado con él. Así que aprovecho para citarlos: {{u|Tector}}, {{u|Saloca}} y {{u|Marcelo}}
; Usuario que lo solicita
* [[Usuario:Rastamby|Rastamby]] ([[Usuario Discusión:Rastamby|discusión]]) 02:34 26 nov 2025 (UTC)
; Respuesta
{{admintab|1={{Hecho}}, ya fue suficiente: usuario expulsado y artículos protegidos a largo plazo. Gracias por el aviso.|2=--[[Usuario:Marcelo|Marcelo]] [[Imagen:Coat_of_arms_of_Argentina.svg|12px]] ''<small>([[Usuario Discusión:Marcelo|Mensajes aquí]])</small>'' 02:43 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170670252]]
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 04:58 26 nov 2025 (UTC)
; Respuesta
{{admintab|1={{hecho}}. Edición ocultada. Gracias por el aviso.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 05:04 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170670276]]
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 05:00 26 nov 2025 (UTC)
; Respuesta
{{admintab|1=Prueba|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:26, 9 February 2026 (UTC)|3=}}
== Solicitud para corregir redirecciones dobles en [[Departamento de Cusco]] y [[Provincia de Cusco]] ==
Hola. Por favor, ayúdenme a solucionar el problema de las redirecciones dobles en las páginas de redireccionamiento [[Departamento de Cusco]] y [[Provincia de Cusco]]. Gracias. [[Especial:Contribuciones/~2025-36297-96|~2025-36297-96]] ([[Usuario discusión:~2025-36297-96|discusión]]) 05:35 26 nov 2025 (UTC)
== CDI ==
; Usuarios implicados
* {{u|JALGUERRERO}}
; Motivo
Claro conflicto de interés. Sus ediciones se centran en el artículo que lleva su nombre
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 10:53 26 nov 2025 (UTC)
; Respuesta
{{admintab|{{Ok}}, hecho por {{u2|Virum Mundi}}; no puedo creer nos duró 15 años.|[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 18:27 26 nov 2025 (UTC)}}
== Ocultar edición ==
; Asunto
* [[Especial:Diff/170680869]]
; Usuario que lo solicita
* [[Usuario discusión:Divinations|Divinations]] 21:35 26 nov 2025 (UTC)
; Respuesta
{{admintab|1=Ejemplo de resolución de solicitud que menciona a {{ping|Nacaru}}.|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:39, 9 February 2026 (UTC)|3=}}
== varias ediciones ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
Prueba de texto
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:45, 20 February 2026 (UTC)
; Respuesta
{{admintab|1=Qué tal está petición de aquí??? {{Ok}}|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:13, 11 April 2026 (UTC)|3=}}
== Ocultar edición [[Especial:Diff/619272|619272]] ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
JHVBIKUHGVIK
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:47, 20 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar edición 619272 ==
; Asunto
* [[Especial:Diff/619272]]
; Motivo
VXCV XZVZCVZC
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:48, 20 February 2026 (UTC)
; Respuesta
{{admintab|1=OKIII|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:49, 20 February 2026 (UTC)|3=}}
== Ocultar edición 684158 ==
; Asunto
* [[Especial:Diff/684158]]
; Motivo
kjanxkajsncxa
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:34, 26 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Prueba de toro túitulo ==
; Usuarios implicados
* {{u|Sergio Enrollment 2}}
; Motivo
Prueba de otra raźon
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:55, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Otra prueba de título más ==
; Usuarios implicados
* {{u|Sergio Enrollment 2}}
; Motivo
Desarrollando razón
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:55, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== k,jnkjjn ==
; Usuarios implicados
* {{u|Dicto23456}}
; Motivo
lknmlkj lkjlk jkl
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:59, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Otra denuncia la que sea ==
; Usuarios implicados
* {{u|Cenarium}}
; Motivo
A ver qué tal
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 01:08, 27 February 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74252,671081,671082 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/671081]]
* [[Especial:Diff/671082]]
; Motivo
Motivo cualquiera
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:43, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74252, 74251, 89098 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/74252]]
* [[Especial:Diff/74251]]
* [[Especial:Diff/89098]]
; Motivo
Ejemplo
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:45, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar edición 74252 ==
; Asunto
* [[Especial:Diff/74252]]
; Motivo
qeasdsa
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:46, 2 March 2026 (UTC)
; Respuesta
{{admintab|1=Qué tal estas??|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 13:54, 11 April 2026 (UTC)|3=}}
== Ocultar ediciones 74251 y 74252 ==
; Asunto
* [[Especial:Diff/74252]]
* [[Especial:Diff/74251]]
; Motivo
asdAD SADAS
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:46, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
== Ocultar ediciones 74253, 74254, 74255, 74256 y 74252 ==
; Asunto
* [[Especial:Diff/74253]]
* [[Especial:Diff/74254]]
* [[Especial:Diff/74255]]
* [[Especial:Diff/74256]]
* [[Especial:Diff/74252]]
; Motivo
A ver si aparecen en el mismo orden.
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 18:52, 2 March 2026 (UTC)
; Respuesta
(a rellenar por un bibliotecario)
sjvl5fh1yxcrfizk2ego558n3hel9sr
Module:Message box/ambox.css
828
127301
737656
624799
2025-08-12T01:37:33Z
en>Pppery
0
Undid revision [[Special:Diff/1305420660|1305420660]] by [[Special:Contributions/Pppery|Pppery]] ([[User talk:Pppery|talk]]) Seems to have caused [[Wikipedia:Village_pump_(technical)#Coptic_identity:_Maintenance_template_has_extra_orange_stripe]]
624798
sanitized-css
text/css
/* {{pp|small=y}} */
.ambox {
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
/* Single border between stacked boxes. Take into account base templatestyles,
* user styles, and Template:Dated maintenance category.
* remove link selector when T200206 is fixed
*/
.ambox + link + .ambox,
.ambox + link + style + .ambox,
.ambox + link + link + .ambox,
/* TODO: raise these as "is this really that necessary???". the change was Dec 2021 */
.ambox + .mw-empty-elt + link + .ambox,
.ambox + .mw-empty-elt + link + style + .ambox,
.ambox + .mw-empty-elt + link + link + .ambox {
margin-top: -1px;
}
/* For the "small=left" option. */
/* must override .ambox + .ambox styles above */
html body.mediawiki .ambox.mbox-small-left {
/* @noflip */
margin: 4px 1em 4px 0;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
.ambox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.5em;
width: 100%;
}
.ambox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.5em;
text-align: center;
}
.ambox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.5em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.ambox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.ambox .mbox-image-div {
width: 52px;
}
@media (min-width: 720px) {
.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
}
}
@media print {
body.ns-0 .ambox {
display: none !important;
}
}
p6eghkibj5jaltbdpofs37kyuj5x92w
737657
737656
2026-04-11T19:54:21Z
Novem Linguae
49714
1 revision imported from [[:en:Module:Message_box/ambox.css]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
624798
sanitized-css
text/css
/* {{pp|small=y}} */
.ambox {
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
/* Single border between stacked boxes. Take into account base templatestyles,
* user styles, and Template:Dated maintenance category.
* remove link selector when T200206 is fixed
*/
.ambox + link + .ambox,
.ambox + link + style + .ambox,
.ambox + link + link + .ambox,
/* TODO: raise these as "is this really that necessary???". the change was Dec 2021 */
.ambox + .mw-empty-elt + link + .ambox,
.ambox + .mw-empty-elt + link + style + .ambox,
.ambox + .mw-empty-elt + link + link + .ambox {
margin-top: -1px;
}
/* For the "small=left" option. */
/* must override .ambox + .ambox styles above */
html body.mediawiki .ambox.mbox-small-left {
/* @noflip */
margin: 4px 1em 4px 0;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
.ambox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.5em;
width: 100%;
}
.ambox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.5em;
text-align: center;
}
.ambox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.5em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.ambox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.ambox .mbox-image-div {
width: 52px;
}
@media (min-width: 720px) {
.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
}
}
@media print {
body.ns-0 .ambox {
display: none !important;
}
}
p6eghkibj5jaltbdpofs37kyuj5x92w
User:DatGuy/spihelper log
2
146722
737711
734886
2026-04-11T20:04:30Z
DatGuy
30264
Logging spihelper edits (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737711
wikitext
text/x-wiki
== October 2022 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:25, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:37, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}, {{noping|Test4}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:40, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|Test4}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:43, 9 October 2022 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:47, 9 October 2022 (UTC)
** changed case status from checked to relist
** commented
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}, {{noping|Test4}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:50, 9 October 2022 (UTC)
** changed case status from checked to relist
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 19:38, 27 October 2022 (UTC)
** changed case status from checked to relist
** commented
** tagged {{noping|Test}}, {{noping|Test4}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:03, 27 October 2022 (UTC)
** changed case status from checked to relist
** commented
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21 3}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 3}}, {{noping|Test 2013-02-21 2}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:05, 27 October 2022 (UTC)
** changed case status from checked to hold
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 09:46, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21 3}}
** tagged {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 3}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 09:52, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 10:03, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
== November 2022 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:04, 4 November 2022 (UTC)
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
== December 2025 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 05:28, 2 December 2025 (UTC)
== January 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 14:55, 9 January 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 15:05, 9 January 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:12, 9 January 2026 (UTC)
** changed case status from checked to relist
** commented
** blocked Test 2013-02-21
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:44, 9 January 2026 (UTC)
** changed case status from reopen to closed
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:46, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:58, 9 January 2026 (UTC)
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:07, 9 January 2026 (UTC)
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:08, 9 January 2026 (UTC)
** tagged Test, Test 2013-02-21
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:32, 9 January 2026 (UTC)
** moved section to Test2
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 08 July 2020) 22:31, 9 January 2026 (UTC)
** changed case status from relist to closed
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:43, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:47, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:48, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:25, 12 January 2026 (UTC)
** changed case status from relist to closed
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:19, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:22, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:22, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:24, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:25, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:30, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:31, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 08 July 2020) 00:02, 14 January 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 09 July 2020) 00:02, 14 January 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:43, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:48, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:50, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 11:31, 28 January 2026 (UTC)
** changed case status from CUrequest to cuhold
** commented
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 17:05, 30 January 2026 (UTC)
** moved/merged case to Test4
== February 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 05:12, 15 February 2026 (UTC)
** commented
** blocked
** tagged Test 2013-02-21 4
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 07 July 2020) 13:12, 17 February 2026 (UTC)
** changed case status from CUrequest to closed
** Archived section
* [[Wikipedia:Sockpuppet investigations/Djahidou01]] (full case) 13:20, 17 February 2026 (UTC)
** Archived case
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 07 July 2020) 14:37, 24 February 2026 (UTC)
** tagged Test2
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:41, 27 February 2026 (UTC)
** blocked Test 2013-02-21
** tagged
== March 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 00:50, 3 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 02:38, 3 March 2026 (UTC)
** blocked Test 2013-02-21 5, Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 01:11, 7 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 01:14, 7 March 2026 (UTC)
** blocked
** tagged Test, Test 2013-02-21 2
* [[Wikipedia:Sockpuppet investigations/Test Account]] (full case) 13:42, 9 March 2026 (UTC)
** Archived case
* [[Wikipedia:Sockpuppet investigations/Test Account]] (section 22 January 2026) 13:47, 9 March 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 13:55, 9 March 2026 (UTC)
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:37, 12 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:32, 13 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:42, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:43, 17 March 2026 (UTC)
** tagged Test, Test 2013-02-21 2
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:54, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
** tagged Test
* [[Wikipedia:Sockpuppet investigations/undefined]] (full case) 14:29, 17 March 2026 (UTC)
** moved/merged case to Test Account Bowling
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (full case) 14:38, 17 March 2026 (UTC)
** moved/merged case to Test Account Cowboy
* [[Wikipedia:Sockpuppet investigations/Test Account Cowboy]] (full case) 14:41, 17 March 2026 (UTC)
** moved/merged case to Test Account Bowling
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 14:54, 17 March 2026 (UTC)
** changed case status from closed to clerk
** commented
** blocked Test 2013-02-21 5
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:01, 17 March 2026 (UTC)
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:13, 17 March 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:22, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 21:03, 20 March 2026 (UTC)
** commented
** blocked Test 2013-02-21 5
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (section 17 March 2026) 14:39, 23 March 2026 (UTC)
** changed case status from new to closed
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (full case) 14:39, 23 March 2026 (UTC)
** Archived case
== April 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:04, 11 April 2026 (UTC)
** changed case status from clerk to admin
** commented
5wv70e5udjgvfqtf0uuveln5iugjcqr
737713
737711
2026-04-11T20:04:45Z
DatGuy
30264
Logging spihelper edits (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737713
wikitext
text/x-wiki
== October 2022 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:25, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:37, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}, {{noping|Test4}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:40, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|Test4}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:43, 9 October 2022 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:47, 9 October 2022 (UTC)
** changed case status from checked to relist
** commented
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}, {{noping|Test4}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:50, 9 October 2022 (UTC)
** changed case status from checked to relist
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 19:38, 27 October 2022 (UTC)
** changed case status from checked to relist
** commented
** tagged {{noping|Test}}, {{noping|Test4}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:03, 27 October 2022 (UTC)
** changed case status from checked to relist
** commented
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21 3}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 3}}, {{noping|Test 2013-02-21 2}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:05, 27 October 2022 (UTC)
** changed case status from checked to hold
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 09:46, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21 3}}
** tagged {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 3}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 09:52, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 10:03, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
== November 2022 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:04, 4 November 2022 (UTC)
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
== December 2025 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 05:28, 2 December 2025 (UTC)
== January 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 14:55, 9 January 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 15:05, 9 January 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:12, 9 January 2026 (UTC)
** changed case status from checked to relist
** commented
** blocked Test 2013-02-21
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:44, 9 January 2026 (UTC)
** changed case status from reopen to closed
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:46, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:58, 9 January 2026 (UTC)
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:07, 9 January 2026 (UTC)
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:08, 9 January 2026 (UTC)
** tagged Test, Test 2013-02-21
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:32, 9 January 2026 (UTC)
** moved section to Test2
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 08 July 2020) 22:31, 9 January 2026 (UTC)
** changed case status from relist to closed
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:43, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:47, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:48, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:25, 12 January 2026 (UTC)
** changed case status from relist to closed
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:19, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:22, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:22, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:24, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:25, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:30, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:31, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 08 July 2020) 00:02, 14 January 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 09 July 2020) 00:02, 14 January 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:43, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:48, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:50, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 11:31, 28 January 2026 (UTC)
** changed case status from CUrequest to cuhold
** commented
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 17:05, 30 January 2026 (UTC)
** moved/merged case to Test4
== February 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 05:12, 15 February 2026 (UTC)
** commented
** blocked
** tagged Test 2013-02-21 4
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 07 July 2020) 13:12, 17 February 2026 (UTC)
** changed case status from CUrequest to closed
** Archived section
* [[Wikipedia:Sockpuppet investigations/Djahidou01]] (full case) 13:20, 17 February 2026 (UTC)
** Archived case
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 07 July 2020) 14:37, 24 February 2026 (UTC)
** tagged Test2
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:41, 27 February 2026 (UTC)
** blocked Test 2013-02-21
** tagged
== March 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 00:50, 3 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 02:38, 3 March 2026 (UTC)
** blocked Test 2013-02-21 5, Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 01:11, 7 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 01:14, 7 March 2026 (UTC)
** blocked
** tagged Test, Test 2013-02-21 2
* [[Wikipedia:Sockpuppet investigations/Test Account]] (full case) 13:42, 9 March 2026 (UTC)
** Archived case
* [[Wikipedia:Sockpuppet investigations/Test Account]] (section 22 January 2026) 13:47, 9 March 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 13:55, 9 March 2026 (UTC)
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:37, 12 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:32, 13 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:42, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:43, 17 March 2026 (UTC)
** tagged Test, Test 2013-02-21 2
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:54, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
** tagged Test
* [[Wikipedia:Sockpuppet investigations/undefined]] (full case) 14:29, 17 March 2026 (UTC)
** moved/merged case to Test Account Bowling
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (full case) 14:38, 17 March 2026 (UTC)
** moved/merged case to Test Account Cowboy
* [[Wikipedia:Sockpuppet investigations/Test Account Cowboy]] (full case) 14:41, 17 March 2026 (UTC)
** moved/merged case to Test Account Bowling
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 14:54, 17 March 2026 (UTC)
** changed case status from closed to clerk
** commented
** blocked Test 2013-02-21 5
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:01, 17 March 2026 (UTC)
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:13, 17 March 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:22, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 21:03, 20 March 2026 (UTC)
** commented
** blocked Test 2013-02-21 5
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (section 17 March 2026) 14:39, 23 March 2026 (UTC)
** changed case status from new to closed
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (full case) 14:39, 23 March 2026 (UTC)
** Archived case
== April 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:04, 11 April 2026 (UTC)
** changed case status from clerk to admin
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:04, 11 April 2026 (UTC)
** changed case status from closed to clerk
gwyeuj3y74yy89m42vlgtelakkde188
737715
737713
2026-04-11T20:04:55Z
DatGuy
30264
Logging spihelper edits (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737715
wikitext
text/x-wiki
== October 2022 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:25, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:37, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}, {{noping|Test4}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:40, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|Test4}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:43, 9 October 2022 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:47, 9 October 2022 (UTC)
** changed case status from checked to relist
** commented
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}, {{noping|Test4}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:50, 9 October 2022 (UTC)
** changed case status from checked to relist
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 19:38, 27 October 2022 (UTC)
** changed case status from checked to relist
** commented
** tagged {{noping|Test}}, {{noping|Test4}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:03, 27 October 2022 (UTC)
** changed case status from checked to relist
** commented
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21 3}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 3}}, {{noping|Test 2013-02-21 2}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:05, 27 October 2022 (UTC)
** changed case status from checked to hold
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 09:46, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21 3}}
** tagged {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 3}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 09:52, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 10:03, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
== November 2022 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:04, 4 November 2022 (UTC)
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
== December 2025 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 05:28, 2 December 2025 (UTC)
== January 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 14:55, 9 January 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 15:05, 9 January 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:12, 9 January 2026 (UTC)
** changed case status from checked to relist
** commented
** blocked Test 2013-02-21
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:44, 9 January 2026 (UTC)
** changed case status from reopen to closed
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:46, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:58, 9 January 2026 (UTC)
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:07, 9 January 2026 (UTC)
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:08, 9 January 2026 (UTC)
** tagged Test, Test 2013-02-21
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:32, 9 January 2026 (UTC)
** moved section to Test2
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 08 July 2020) 22:31, 9 January 2026 (UTC)
** changed case status from relist to closed
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:43, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:47, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:48, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:25, 12 January 2026 (UTC)
** changed case status from relist to closed
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:19, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:22, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:22, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:24, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:25, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:30, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:31, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 08 July 2020) 00:02, 14 January 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 09 July 2020) 00:02, 14 January 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:43, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:48, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:50, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 11:31, 28 January 2026 (UTC)
** changed case status from CUrequest to cuhold
** commented
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 17:05, 30 January 2026 (UTC)
** moved/merged case to Test4
== February 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 05:12, 15 February 2026 (UTC)
** commented
** blocked
** tagged Test 2013-02-21 4
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 07 July 2020) 13:12, 17 February 2026 (UTC)
** changed case status from CUrequest to closed
** Archived section
* [[Wikipedia:Sockpuppet investigations/Djahidou01]] (full case) 13:20, 17 February 2026 (UTC)
** Archived case
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 07 July 2020) 14:37, 24 February 2026 (UTC)
** tagged Test2
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:41, 27 February 2026 (UTC)
** blocked Test 2013-02-21
** tagged
== March 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 00:50, 3 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 02:38, 3 March 2026 (UTC)
** blocked Test 2013-02-21 5, Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 01:11, 7 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 01:14, 7 March 2026 (UTC)
** blocked
** tagged Test, Test 2013-02-21 2
* [[Wikipedia:Sockpuppet investigations/Test Account]] (full case) 13:42, 9 March 2026 (UTC)
** Archived case
* [[Wikipedia:Sockpuppet investigations/Test Account]] (section 22 January 2026) 13:47, 9 March 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 13:55, 9 March 2026 (UTC)
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:37, 12 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:32, 13 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:42, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:43, 17 March 2026 (UTC)
** tagged Test, Test 2013-02-21 2
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:54, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
** tagged Test
* [[Wikipedia:Sockpuppet investigations/undefined]] (full case) 14:29, 17 March 2026 (UTC)
** moved/merged case to Test Account Bowling
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (full case) 14:38, 17 March 2026 (UTC)
** moved/merged case to Test Account Cowboy
* [[Wikipedia:Sockpuppet investigations/Test Account Cowboy]] (full case) 14:41, 17 March 2026 (UTC)
** moved/merged case to Test Account Bowling
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 14:54, 17 March 2026 (UTC)
** changed case status from closed to clerk
** commented
** blocked Test 2013-02-21 5
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:01, 17 March 2026 (UTC)
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:13, 17 March 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:22, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 21:03, 20 March 2026 (UTC)
** commented
** blocked Test 2013-02-21 5
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (section 17 March 2026) 14:39, 23 March 2026 (UTC)
** changed case status from new to closed
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (full case) 14:39, 23 March 2026 (UTC)
** Archived case
== April 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:04, 11 April 2026 (UTC)
** changed case status from clerk to admin
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:04, 11 April 2026 (UTC)
** changed case status from closed to clerk
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 20:04, 11 April 2026 (UTC)
** Updated archivenotice
0x5bnkjrjka9nsld5yga8yjkrgrsqiu
737717
737715
2026-04-11T20:08:13Z
DatGuy
30264
Logging spihelper edits (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737717
wikitext
text/x-wiki
== October 2022 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:25, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:37, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}, {{noping|Test4}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:40, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|Test4}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:43, 9 October 2022 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:47, 9 October 2022 (UTC)
** changed case status from checked to relist
** commented
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}, {{noping|Test4}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:50, 9 October 2022 (UTC)
** changed case status from checked to relist
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 19:38, 27 October 2022 (UTC)
** changed case status from checked to relist
** commented
** tagged {{noping|Test}}, {{noping|Test4}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:03, 27 October 2022 (UTC)
** changed case status from checked to relist
** commented
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21 3}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 3}}, {{noping|Test 2013-02-21 2}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:05, 27 October 2022 (UTC)
** changed case status from checked to hold
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 09:46, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21 3}}
** tagged {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 3}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 09:52, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 10:03, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
== November 2022 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:04, 4 November 2022 (UTC)
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
== December 2025 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 05:28, 2 December 2025 (UTC)
== January 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 14:55, 9 January 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 15:05, 9 January 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:12, 9 January 2026 (UTC)
** changed case status from checked to relist
** commented
** blocked Test 2013-02-21
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:44, 9 January 2026 (UTC)
** changed case status from reopen to closed
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:46, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:58, 9 January 2026 (UTC)
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:07, 9 January 2026 (UTC)
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:08, 9 January 2026 (UTC)
** tagged Test, Test 2013-02-21
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:32, 9 January 2026 (UTC)
** moved section to Test2
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 08 July 2020) 22:31, 9 January 2026 (UTC)
** changed case status from relist to closed
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:43, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:47, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:48, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:25, 12 January 2026 (UTC)
** changed case status from relist to closed
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:19, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:22, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:22, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:24, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:25, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:30, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:31, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 08 July 2020) 00:02, 14 January 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 09 July 2020) 00:02, 14 January 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:43, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:48, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:50, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 11:31, 28 January 2026 (UTC)
** changed case status from CUrequest to cuhold
** commented
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 17:05, 30 January 2026 (UTC)
** moved/merged case to Test4
== February 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 05:12, 15 February 2026 (UTC)
** commented
** blocked
** tagged Test 2013-02-21 4
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 07 July 2020) 13:12, 17 February 2026 (UTC)
** changed case status from CUrequest to closed
** Archived section
* [[Wikipedia:Sockpuppet investigations/Djahidou01]] (full case) 13:20, 17 February 2026 (UTC)
** Archived case
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 07 July 2020) 14:37, 24 February 2026 (UTC)
** tagged Test2
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:41, 27 February 2026 (UTC)
** blocked Test 2013-02-21
** tagged
== March 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 00:50, 3 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 02:38, 3 March 2026 (UTC)
** blocked Test 2013-02-21 5, Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 01:11, 7 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 01:14, 7 March 2026 (UTC)
** blocked
** tagged Test, Test 2013-02-21 2
* [[Wikipedia:Sockpuppet investigations/Test Account]] (full case) 13:42, 9 March 2026 (UTC)
** Archived case
* [[Wikipedia:Sockpuppet investigations/Test Account]] (section 22 January 2026) 13:47, 9 March 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 13:55, 9 March 2026 (UTC)
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:37, 12 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:32, 13 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:42, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:43, 17 March 2026 (UTC)
** tagged Test, Test 2013-02-21 2
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:54, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
** tagged Test
* [[Wikipedia:Sockpuppet investigations/undefined]] (full case) 14:29, 17 March 2026 (UTC)
** moved/merged case to Test Account Bowling
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (full case) 14:38, 17 March 2026 (UTC)
** moved/merged case to Test Account Cowboy
* [[Wikipedia:Sockpuppet investigations/Test Account Cowboy]] (full case) 14:41, 17 March 2026 (UTC)
** moved/merged case to Test Account Bowling
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 14:54, 17 March 2026 (UTC)
** changed case status from closed to clerk
** commented
** blocked Test 2013-02-21 5
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:01, 17 March 2026 (UTC)
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:13, 17 March 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:22, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 21:03, 20 March 2026 (UTC)
** commented
** blocked Test 2013-02-21 5
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (section 17 March 2026) 14:39, 23 March 2026 (UTC)
** changed case status from new to closed
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (full case) 14:39, 23 March 2026 (UTC)
** Archived case
== April 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:04, 11 April 2026 (UTC)
** changed case status from clerk to admin
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:04, 11 April 2026 (UTC)
** changed case status from closed to clerk
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 20:04, 11 April 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:08, 11 April 2026 (UTC)
** changed case status from admin to clerk
hczvq37idkcupnwamfxx7ixz1klfi9c
737719
737717
2026-04-11T20:08:21Z
DatGuy
30264
Logging spihelper edits (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737719
wikitext
text/x-wiki
== October 2022 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:25, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:37, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}, {{noping|Test4}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:40, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|Test4}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:43, 9 October 2022 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:47, 9 October 2022 (UTC)
** changed case status from checked to relist
** commented
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}, {{noping|Test4}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:50, 9 October 2022 (UTC)
** changed case status from checked to relist
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 19:38, 27 October 2022 (UTC)
** changed case status from checked to relist
** commented
** tagged {{noping|Test}}, {{noping|Test4}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:03, 27 October 2022 (UTC)
** changed case status from checked to relist
** commented
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21 3}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 3}}, {{noping|Test 2013-02-21 2}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:05, 27 October 2022 (UTC)
** changed case status from checked to hold
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 09:46, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21 3}}
** tagged {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 3}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 09:52, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 10:03, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
== November 2022 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:04, 4 November 2022 (UTC)
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
== December 2025 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 05:28, 2 December 2025 (UTC)
== January 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 14:55, 9 January 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 15:05, 9 January 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:12, 9 January 2026 (UTC)
** changed case status from checked to relist
** commented
** blocked Test 2013-02-21
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:44, 9 January 2026 (UTC)
** changed case status from reopen to closed
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:46, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:58, 9 January 2026 (UTC)
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:07, 9 January 2026 (UTC)
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:08, 9 January 2026 (UTC)
** tagged Test, Test 2013-02-21
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:32, 9 January 2026 (UTC)
** moved section to Test2
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 08 July 2020) 22:31, 9 January 2026 (UTC)
** changed case status from relist to closed
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:43, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:47, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:48, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:25, 12 January 2026 (UTC)
** changed case status from relist to closed
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:19, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:22, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:22, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:24, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:25, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:30, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:31, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 08 July 2020) 00:02, 14 January 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 09 July 2020) 00:02, 14 January 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:43, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:48, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:50, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 11:31, 28 January 2026 (UTC)
** changed case status from CUrequest to cuhold
** commented
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 17:05, 30 January 2026 (UTC)
** moved/merged case to Test4
== February 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 05:12, 15 February 2026 (UTC)
** commented
** blocked
** tagged Test 2013-02-21 4
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 07 July 2020) 13:12, 17 February 2026 (UTC)
** changed case status from CUrequest to closed
** Archived section
* [[Wikipedia:Sockpuppet investigations/Djahidou01]] (full case) 13:20, 17 February 2026 (UTC)
** Archived case
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 07 July 2020) 14:37, 24 February 2026 (UTC)
** tagged Test2
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:41, 27 February 2026 (UTC)
** blocked Test 2013-02-21
** tagged
== March 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 00:50, 3 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 02:38, 3 March 2026 (UTC)
** blocked Test 2013-02-21 5, Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 01:11, 7 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 01:14, 7 March 2026 (UTC)
** blocked
** tagged Test, Test 2013-02-21 2
* [[Wikipedia:Sockpuppet investigations/Test Account]] (full case) 13:42, 9 March 2026 (UTC)
** Archived case
* [[Wikipedia:Sockpuppet investigations/Test Account]] (section 22 January 2026) 13:47, 9 March 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 13:55, 9 March 2026 (UTC)
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:37, 12 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:32, 13 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:42, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:43, 17 March 2026 (UTC)
** tagged Test, Test 2013-02-21 2
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:54, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
** tagged Test
* [[Wikipedia:Sockpuppet investigations/undefined]] (full case) 14:29, 17 March 2026 (UTC)
** moved/merged case to Test Account Bowling
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (full case) 14:38, 17 March 2026 (UTC)
** moved/merged case to Test Account Cowboy
* [[Wikipedia:Sockpuppet investigations/Test Account Cowboy]] (full case) 14:41, 17 March 2026 (UTC)
** moved/merged case to Test Account Bowling
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 14:54, 17 March 2026 (UTC)
** changed case status from closed to clerk
** commented
** blocked Test 2013-02-21 5
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:01, 17 March 2026 (UTC)
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:13, 17 March 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:22, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 21:03, 20 March 2026 (UTC)
** commented
** blocked Test 2013-02-21 5
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (section 17 March 2026) 14:39, 23 March 2026 (UTC)
** changed case status from new to closed
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (full case) 14:39, 23 March 2026 (UTC)
** Archived case
== April 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:04, 11 April 2026 (UTC)
** changed case status from clerk to admin
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:04, 11 April 2026 (UTC)
** changed case status from closed to clerk
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 20:04, 11 April 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:08, 11 April 2026 (UTC)
** changed case status from admin to clerk
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 20:08, 11 April 2026 (UTC)
** Updated archivenotice
96lknvhpdlkx56as3ckkuhsn8zcypht
737721
737719
2026-04-11T20:11:10Z
DatGuy
30264
Logging spihelper edits (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737721
wikitext
text/x-wiki
== October 2022 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:25, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:37, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}, {{noping|Test4}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:40, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|Test4}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:43, 9 October 2022 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:47, 9 October 2022 (UTC)
** changed case status from checked to relist
** commented
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}, {{noping|Test4}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:50, 9 October 2022 (UTC)
** changed case status from checked to relist
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 19:38, 27 October 2022 (UTC)
** changed case status from checked to relist
** commented
** tagged {{noping|Test}}, {{noping|Test4}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:03, 27 October 2022 (UTC)
** changed case status from checked to relist
** commented
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21 3}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 3}}, {{noping|Test 2013-02-21 2}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:05, 27 October 2022 (UTC)
** changed case status from checked to hold
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 09:46, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21 3}}
** tagged {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 3}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 09:52, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 10:03, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
== November 2022 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:04, 4 November 2022 (UTC)
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
== December 2025 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 05:28, 2 December 2025 (UTC)
== January 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 14:55, 9 January 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 15:05, 9 January 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:12, 9 January 2026 (UTC)
** changed case status from checked to relist
** commented
** blocked Test 2013-02-21
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:44, 9 January 2026 (UTC)
** changed case status from reopen to closed
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:46, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:58, 9 January 2026 (UTC)
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:07, 9 January 2026 (UTC)
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:08, 9 January 2026 (UTC)
** tagged Test, Test 2013-02-21
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:32, 9 January 2026 (UTC)
** moved section to Test2
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 08 July 2020) 22:31, 9 January 2026 (UTC)
** changed case status from relist to closed
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:43, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:47, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:48, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:25, 12 January 2026 (UTC)
** changed case status from relist to closed
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:19, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:22, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:22, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:24, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:25, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:30, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:31, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 08 July 2020) 00:02, 14 January 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 09 July 2020) 00:02, 14 January 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:43, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:48, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:50, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 11:31, 28 January 2026 (UTC)
** changed case status from CUrequest to cuhold
** commented
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 17:05, 30 January 2026 (UTC)
** moved/merged case to Test4
== February 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 05:12, 15 February 2026 (UTC)
** commented
** blocked
** tagged Test 2013-02-21 4
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 07 July 2020) 13:12, 17 February 2026 (UTC)
** changed case status from CUrequest to closed
** Archived section
* [[Wikipedia:Sockpuppet investigations/Djahidou01]] (full case) 13:20, 17 February 2026 (UTC)
** Archived case
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 07 July 2020) 14:37, 24 February 2026 (UTC)
** tagged Test2
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:41, 27 February 2026 (UTC)
** blocked Test 2013-02-21
** tagged
== March 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 00:50, 3 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 02:38, 3 March 2026 (UTC)
** blocked Test 2013-02-21 5, Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 01:11, 7 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 01:14, 7 March 2026 (UTC)
** blocked
** tagged Test, Test 2013-02-21 2
* [[Wikipedia:Sockpuppet investigations/Test Account]] (full case) 13:42, 9 March 2026 (UTC)
** Archived case
* [[Wikipedia:Sockpuppet investigations/Test Account]] (section 22 January 2026) 13:47, 9 March 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 13:55, 9 March 2026 (UTC)
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:37, 12 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:32, 13 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:42, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:43, 17 March 2026 (UTC)
** tagged Test, Test 2013-02-21 2
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:54, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
** tagged Test
* [[Wikipedia:Sockpuppet investigations/undefined]] (full case) 14:29, 17 March 2026 (UTC)
** moved/merged case to Test Account Bowling
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (full case) 14:38, 17 March 2026 (UTC)
** moved/merged case to Test Account Cowboy
* [[Wikipedia:Sockpuppet investigations/Test Account Cowboy]] (full case) 14:41, 17 March 2026 (UTC)
** moved/merged case to Test Account Bowling
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 14:54, 17 March 2026 (UTC)
** changed case status from closed to clerk
** commented
** blocked Test 2013-02-21 5
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:01, 17 March 2026 (UTC)
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:13, 17 March 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:22, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 21:03, 20 March 2026 (UTC)
** commented
** blocked Test 2013-02-21 5
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (section 17 March 2026) 14:39, 23 March 2026 (UTC)
** changed case status from new to closed
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (full case) 14:39, 23 March 2026 (UTC)
** Archived case
== April 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:04, 11 April 2026 (UTC)
** changed case status from clerk to admin
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:04, 11 April 2026 (UTC)
** changed case status from closed to clerk
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 20:04, 11 April 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:08, 11 April 2026 (UTC)
** changed case status from admin to clerk
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 20:08, 11 April 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:11, 11 April 2026 (UTC)
** changed case status from admin to clerk
kvj2c9mw7yqdckpwtbp4kyxhyyoupkd
737723
737721
2026-04-11T20:11:24Z
DatGuy
30264
Logging spihelper edits (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737723
wikitext
text/x-wiki
== October 2022 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:25, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:37, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}, {{noping|Test4}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:40, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|Test4}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:43, 9 October 2022 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:47, 9 October 2022 (UTC)
** changed case status from checked to relist
** commented
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}, {{noping|Test4}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:50, 9 October 2022 (UTC)
** changed case status from checked to relist
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 19:38, 27 October 2022 (UTC)
** changed case status from checked to relist
** commented
** tagged {{noping|Test}}, {{noping|Test4}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:03, 27 October 2022 (UTC)
** changed case status from checked to relist
** commented
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21 3}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 3}}, {{noping|Test 2013-02-21 2}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:05, 27 October 2022 (UTC)
** changed case status from checked to hold
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 09:46, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21 3}}
** tagged {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 3}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 09:52, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 10:03, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
== November 2022 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:04, 4 November 2022 (UTC)
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
== December 2025 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 05:28, 2 December 2025 (UTC)
== January 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 14:55, 9 January 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 15:05, 9 January 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:12, 9 January 2026 (UTC)
** changed case status from checked to relist
** commented
** blocked Test 2013-02-21
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:44, 9 January 2026 (UTC)
** changed case status from reopen to closed
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:46, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:58, 9 January 2026 (UTC)
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:07, 9 January 2026 (UTC)
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:08, 9 January 2026 (UTC)
** tagged Test, Test 2013-02-21
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:32, 9 January 2026 (UTC)
** moved section to Test2
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 08 July 2020) 22:31, 9 January 2026 (UTC)
** changed case status from relist to closed
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:43, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:47, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:48, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:25, 12 January 2026 (UTC)
** changed case status from relist to closed
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:19, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:22, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:22, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:24, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:25, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:30, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:31, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 08 July 2020) 00:02, 14 January 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 09 July 2020) 00:02, 14 January 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:43, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:48, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:50, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 11:31, 28 January 2026 (UTC)
** changed case status from CUrequest to cuhold
** commented
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 17:05, 30 January 2026 (UTC)
** moved/merged case to Test4
== February 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 05:12, 15 February 2026 (UTC)
** commented
** blocked
** tagged Test 2013-02-21 4
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 07 July 2020) 13:12, 17 February 2026 (UTC)
** changed case status from CUrequest to closed
** Archived section
* [[Wikipedia:Sockpuppet investigations/Djahidou01]] (full case) 13:20, 17 February 2026 (UTC)
** Archived case
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 07 July 2020) 14:37, 24 February 2026 (UTC)
** tagged Test2
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:41, 27 February 2026 (UTC)
** blocked Test 2013-02-21
** tagged
== March 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 00:50, 3 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 02:38, 3 March 2026 (UTC)
** blocked Test 2013-02-21 5, Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 01:11, 7 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 01:14, 7 March 2026 (UTC)
** blocked
** tagged Test, Test 2013-02-21 2
* [[Wikipedia:Sockpuppet investigations/Test Account]] (full case) 13:42, 9 March 2026 (UTC)
** Archived case
* [[Wikipedia:Sockpuppet investigations/Test Account]] (section 22 January 2026) 13:47, 9 March 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 13:55, 9 March 2026 (UTC)
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:37, 12 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:32, 13 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:42, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:43, 17 March 2026 (UTC)
** tagged Test, Test 2013-02-21 2
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:54, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
** tagged Test
* [[Wikipedia:Sockpuppet investigations/undefined]] (full case) 14:29, 17 March 2026 (UTC)
** moved/merged case to Test Account Bowling
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (full case) 14:38, 17 March 2026 (UTC)
** moved/merged case to Test Account Cowboy
* [[Wikipedia:Sockpuppet investigations/Test Account Cowboy]] (full case) 14:41, 17 March 2026 (UTC)
** moved/merged case to Test Account Bowling
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 14:54, 17 March 2026 (UTC)
** changed case status from closed to clerk
** commented
** blocked Test 2013-02-21 5
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:01, 17 March 2026 (UTC)
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:13, 17 March 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:22, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 21:03, 20 March 2026 (UTC)
** commented
** blocked Test 2013-02-21 5
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (section 17 March 2026) 14:39, 23 March 2026 (UTC)
** changed case status from new to closed
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (full case) 14:39, 23 March 2026 (UTC)
** Archived case
== April 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:04, 11 April 2026 (UTC)
** changed case status from clerk to admin
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:04, 11 April 2026 (UTC)
** changed case status from closed to clerk
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 20:04, 11 April 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:08, 11 April 2026 (UTC)
** changed case status from admin to clerk
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 20:08, 11 April 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:11, 11 April 2026 (UTC)
** changed case status from admin to clerk
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 20:11, 11 April 2026 (UTC)
** Updated archivenotice
6dp5u8b6zoez8qztp3sqqnbb2os8ru6
737725
737723
2026-04-11T20:13:19Z
DatGuy
30264
Logging spihelper edits (using [[:w:en:User:DatGuy/spihelper|User:DatGuy/spihelper.js]])
737725
wikitext
text/x-wiki
== October 2022 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:25, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:37, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}, {{noping|Test4}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:40, 9 October 2022 (UTC)
** tagged {{noping|Test}}, {{noping|Test4}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:43, 9 October 2022 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:47, 9 October 2022 (UTC)
** changed case status from checked to relist
** commented
** tagged {{noping|Test}}, {{noping|ThisIsaTest}}, {{noping|Test4}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:50, 9 October 2022 (UTC)
** changed case status from checked to relist
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 19:38, 27 October 2022 (UTC)
** changed case status from checked to relist
** commented
** tagged {{noping|Test}}, {{noping|Test4}}, {{noping|ThisIsaTest}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:03, 27 October 2022 (UTC)
** changed case status from checked to relist
** commented
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21 3}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 3}}, {{noping|Test 2013-02-21 2}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:05, 27 October 2022 (UTC)
** changed case status from checked to hold
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 09:46, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21 3}}
** tagged {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 3}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 09:52, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 10:03, 30 October 2022 (UTC)
** blocked {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}, {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
== November 2022 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:04, 4 November 2022 (UTC)
** tagged {{noping|Test 2013-02-21}}, {{noping|Test 2013-02-21 2}}
== December 2025 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 05:28, 2 December 2025 (UTC)
== January 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 14:55, 9 January 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 15:05, 9 January 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:12, 9 January 2026 (UTC)
** changed case status from checked to relist
** commented
** blocked Test 2013-02-21
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:44, 9 January 2026 (UTC)
** changed case status from reopen to closed
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:46, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:58, 9 January 2026 (UTC)
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:07, 9 January 2026 (UTC)
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:08, 9 January 2026 (UTC)
** tagged Test, Test 2013-02-21
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 21:32, 9 January 2026 (UTC)
** moved section to Test2
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 08 July 2020) 22:31, 9 January 2026 (UTC)
** changed case status from relist to closed
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:43, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:47, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 22:48, 9 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:25, 12 January 2026 (UTC)
** changed case status from relist to closed
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:19, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:22, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:22, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:24, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:25, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:30, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]]: used one-click archiver 23:31, 13 January 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 08 July 2020) 00:02, 14 January 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 09 July 2020) 00:02, 14 January 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:43, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:48, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 19:50, 16 January 2026 (UTC)
** moved/merged case to Test4
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 11:31, 28 January 2026 (UTC)
** changed case status from CUrequest to cuhold
** commented
* [[Wikipedia:Sockpuppet investigations/Test3]] (full case) 17:05, 30 January 2026 (UTC)
** moved/merged case to Test4
== February 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 05:12, 15 February 2026 (UTC)
** commented
** blocked
** tagged Test 2013-02-21 4
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 07 July 2020) 13:12, 17 February 2026 (UTC)
** changed case status from CUrequest to closed
** Archived section
* [[Wikipedia:Sockpuppet investigations/Djahidou01]] (full case) 13:20, 17 February 2026 (UTC)
** Archived case
* [[Wikipedia:Sockpuppet investigations/Test2]] (section 07 July 2020) 14:37, 24 February 2026 (UTC)
** tagged Test2
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:41, 27 February 2026 (UTC)
** blocked Test 2013-02-21
** tagged
== March 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 00:50, 3 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 02:38, 3 March 2026 (UTC)
** blocked Test 2013-02-21 5, Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 01:11, 7 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 01:14, 7 March 2026 (UTC)
** blocked
** tagged Test, Test 2013-02-21 2
* [[Wikipedia:Sockpuppet investigations/Test Account]] (full case) 13:42, 9 March 2026 (UTC)
** Archived case
* [[Wikipedia:Sockpuppet investigations/Test Account]] (section 22 January 2026) 13:47, 9 March 2026 (UTC)
** Archived section
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 13:55, 9 March 2026 (UTC)
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:37, 12 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 16:32, 13 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:42, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:43, 17 March 2026 (UTC)
** tagged Test, Test 2013-02-21 2
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 12:54, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
** tagged Test
* [[Wikipedia:Sockpuppet investigations/undefined]] (full case) 14:29, 17 March 2026 (UTC)
** moved/merged case to Test Account Bowling
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (full case) 14:38, 17 March 2026 (UTC)
** moved/merged case to Test Account Cowboy
* [[Wikipedia:Sockpuppet investigations/Test Account Cowboy]] (full case) 14:41, 17 March 2026 (UTC)
** moved/merged case to Test Account Bowling
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 14:54, 17 March 2026 (UTC)
** changed case status from closed to clerk
** commented
** blocked Test 2013-02-21 5
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:01, 17 March 2026 (UTC)
** tagged
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:13, 17 March 2026 (UTC)
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 15:22, 17 March 2026 (UTC)
** blocked Test 2013-02-21, Test 2013-02-21 2, Test 2013-02-21 3
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 21:03, 20 March 2026 (UTC)
** commented
** blocked Test 2013-02-21 5
** tagged Test
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (section 17 March 2026) 14:39, 23 March 2026 (UTC)
** changed case status from new to closed
* [[Wikipedia:Sockpuppet investigations/Test Account Bowling]] (full case) 14:39, 23 March 2026 (UTC)
** Archived case
== April 2026 ==
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:04, 11 April 2026 (UTC)
** changed case status from clerk to admin
** commented
* [[Wikipedia:Sockpuppet investigations/Test]] (section 08 July 2020) 20:04, 11 April 2026 (UTC)
** changed case status from closed to clerk
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 20:04, 11 April 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:08, 11 April 2026 (UTC)
** changed case status from admin to clerk
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 20:08, 11 April 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:11, 11 April 2026 (UTC)
** changed case status from admin to clerk
* [[Wikipedia:Sockpuppet investigations/Test]] (full case) 20:11, 11 April 2026 (UTC)
** Updated archivenotice
* [[Wikipedia:Sockpuppet investigations/Test]] (section 09 July 2020) 20:13, 11 April 2026 (UTC)
** changed case status from admin to clerk
367e7ufponpfz9uwvafspui39hlz76o
User:Novem Linguae/XfD log
2
147994
737682
691166
2026-04-11T19:56:17Z
Novem Linguae
49714
Logging [[Wikipedia:Articles for deletion/Mainspace (18th nomination)|AfD nomination]] of [[:Mainspace]].
737682
wikitext
text/x-wiki
This is a log of all [[WP:XFD|deletion discussion]] nominations made by this user using [[WP:TW|Twinkle]]'s XfD module.
If you no longer wish to keep this log, you can turn it off using the [[Wikipedia:Twinkle/Preferences|preferences panel]], and nominate this page for speedy deletion under [[WP:CSD#U1|CSD U1]].
This log does not track XfD-related deletions made using Twinkle.
=== December 2022 ===
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:05, 22 December 2022 (UTC)
#* '''Reason''': Test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:23, 22 December 2022 (UTC)
#* '''Reason''': test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:26, 22 December 2022 (UTC)
#* '''Reason''': Test
=== April 2023 ===
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:03, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[* [[:Category:Ursa Major Moving Group]] to [[:Category:Ursa Major moving group]] – C2D: Capitalization change [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 09:08, 11 April 2023 (UTC)|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:08, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[undefined#Category:Ursa Major Moving Group|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:10, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[Wikipedia:Categories for discussion/Speedy#Current requests|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:16, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:17, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:22, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (9th nomination)|nominated]] at [[WP:AFD|AfD]] 09:26, 11 April 2023 (UTC)
#* '''Reason''': Test
# [[:Test90237320]]: [[Wikipedia:Articles for deletion/Test90237320|nominated]] at [[WP:AFD|AfD]] 10:59, 20 April 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace28097]] 01:28, 28 April 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace097097]] 01:31, 28 April 2023 (UTC)
#* '''Reason''': test
=== May 2023 ===
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:15, 20 May 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:16, 20 May 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:17, 20 May 2023 (UTC)
#* '''Reason''': testtt
=== June 2023 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (10th nomination)|nominated]] at [[WP:AFD|AfD]] 00:26, 21 June 2023 (UTC)
#* '''Reason''': Deletion sort test
=== September 2025 ===
# [[:Wikipedia:NovemTest1]]: [[Wikipedia:Miscellany for deletion/Wikipedia:NovemTest1|nominated]] at [[WP:MFD|MfD]] 20:30, 10 September 2025 (UTC)
#* '''Reason''': Testing XFDcloser.
=== November 2025 ===
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:55, 20 November 2025 (UTC)
#* '''Reason''': Test
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:57, 20 November 2025 (UTC)
#* '''Reason''': Test 2
=== December 2025 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (17th nomination)|nominated]] at [[WP:AFD|AfD]] 06:01, 13 December 2025 (UTC)
#* '''Reason''': Test
=== April 2026 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (18th nomination)|nominated]] at [[WP:AFD|AfD]] 19:56, 11 April 2026 (UTC)
#* '''Reason''': Test
mxsvg0xlfs1hpknm1xghy9hebfaid3i
737686
737682
2026-04-11T19:56:43Z
Novem Linguae
49714
Logging [[Wikipedia:Articles for deletion/Mainspace (19th nomination)|AfD nomination]] of [[:Mainspace]].
737686
wikitext
text/x-wiki
This is a log of all [[WP:XFD|deletion discussion]] nominations made by this user using [[WP:TW|Twinkle]]'s XfD module.
If you no longer wish to keep this log, you can turn it off using the [[Wikipedia:Twinkle/Preferences|preferences panel]], and nominate this page for speedy deletion under [[WP:CSD#U1|CSD U1]].
This log does not track XfD-related deletions made using Twinkle.
=== December 2022 ===
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:05, 22 December 2022 (UTC)
#* '''Reason''': Test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:23, 22 December 2022 (UTC)
#* '''Reason''': test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:26, 22 December 2022 (UTC)
#* '''Reason''': Test
=== April 2023 ===
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:03, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[* [[:Category:Ursa Major Moving Group]] to [[:Category:Ursa Major moving group]] – C2D: Capitalization change [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 09:08, 11 April 2023 (UTC)|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:08, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[undefined#Category:Ursa Major Moving Group|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:10, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[Wikipedia:Categories for discussion/Speedy#Current requests|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:16, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:17, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:22, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (9th nomination)|nominated]] at [[WP:AFD|AfD]] 09:26, 11 April 2023 (UTC)
#* '''Reason''': Test
# [[:Test90237320]]: [[Wikipedia:Articles for deletion/Test90237320|nominated]] at [[WP:AFD|AfD]] 10:59, 20 April 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace28097]] 01:28, 28 April 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace097097]] 01:31, 28 April 2023 (UTC)
#* '''Reason''': test
=== May 2023 ===
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:15, 20 May 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:16, 20 May 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:17, 20 May 2023 (UTC)
#* '''Reason''': testtt
=== June 2023 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (10th nomination)|nominated]] at [[WP:AFD|AfD]] 00:26, 21 June 2023 (UTC)
#* '''Reason''': Deletion sort test
=== September 2025 ===
# [[:Wikipedia:NovemTest1]]: [[Wikipedia:Miscellany for deletion/Wikipedia:NovemTest1|nominated]] at [[WP:MFD|MfD]] 20:30, 10 September 2025 (UTC)
#* '''Reason''': Testing XFDcloser.
=== November 2025 ===
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:55, 20 November 2025 (UTC)
#* '''Reason''': Test
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:57, 20 November 2025 (UTC)
#* '''Reason''': Test 2
=== December 2025 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (17th nomination)|nominated]] at [[WP:AFD|AfD]] 06:01, 13 December 2025 (UTC)
#* '''Reason''': Test
=== April 2026 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (18th nomination)|nominated]] at [[WP:AFD|AfD]] 19:56, 11 April 2026 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (19th nomination)|nominated]] at [[WP:AFD|AfD]] 19:56, 11 April 2026 (UTC)
#* '''Reason''': Test 2
97m9d0k3mqtolw1m491ykx2m40fqnc7
737690
737686
2026-04-11T19:57:42Z
Novem Linguae
49714
Logging [[Wikipedia:Articles for deletion/NovemTest100|AfD nomination]] of [[:NovemTest100]].
737690
wikitext
text/x-wiki
This is a log of all [[WP:XFD|deletion discussion]] nominations made by this user using [[WP:TW|Twinkle]]'s XfD module.
If you no longer wish to keep this log, you can turn it off using the [[Wikipedia:Twinkle/Preferences|preferences panel]], and nominate this page for speedy deletion under [[WP:CSD#U1|CSD U1]].
This log does not track XfD-related deletions made using Twinkle.
=== December 2022 ===
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:05, 22 December 2022 (UTC)
#* '''Reason''': Test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:23, 22 December 2022 (UTC)
#* '''Reason''': test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:26, 22 December 2022 (UTC)
#* '''Reason''': Test
=== April 2023 ===
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:03, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[* [[:Category:Ursa Major Moving Group]] to [[:Category:Ursa Major moving group]] – C2D: Capitalization change [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 09:08, 11 April 2023 (UTC)|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:08, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[undefined#Category:Ursa Major Moving Group|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:10, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[Wikipedia:Categories for discussion/Speedy#Current requests|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:16, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:17, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:22, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (9th nomination)|nominated]] at [[WP:AFD|AfD]] 09:26, 11 April 2023 (UTC)
#* '''Reason''': Test
# [[:Test90237320]]: [[Wikipedia:Articles for deletion/Test90237320|nominated]] at [[WP:AFD|AfD]] 10:59, 20 April 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace28097]] 01:28, 28 April 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace097097]] 01:31, 28 April 2023 (UTC)
#* '''Reason''': test
=== May 2023 ===
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:15, 20 May 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:16, 20 May 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:17, 20 May 2023 (UTC)
#* '''Reason''': testtt
=== June 2023 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (10th nomination)|nominated]] at [[WP:AFD|AfD]] 00:26, 21 June 2023 (UTC)
#* '''Reason''': Deletion sort test
=== September 2025 ===
# [[:Wikipedia:NovemTest1]]: [[Wikipedia:Miscellany for deletion/Wikipedia:NovemTest1|nominated]] at [[WP:MFD|MfD]] 20:30, 10 September 2025 (UTC)
#* '''Reason''': Testing XFDcloser.
=== November 2025 ===
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:55, 20 November 2025 (UTC)
#* '''Reason''': Test
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:57, 20 November 2025 (UTC)
#* '''Reason''': Test 2
=== December 2025 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (17th nomination)|nominated]] at [[WP:AFD|AfD]] 06:01, 13 December 2025 (UTC)
#* '''Reason''': Test
=== April 2026 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (18th nomination)|nominated]] at [[WP:AFD|AfD]] 19:56, 11 April 2026 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (19th nomination)|nominated]] at [[WP:AFD|AfD]] 19:56, 11 April 2026 (UTC)
#* '''Reason''': Test 2
# [[:NovemTest100]]: [[Wikipedia:Articles for deletion/NovemTest100|nominated]] at [[WP:AFD|AfD]] 19:57, 11 April 2026 (UTC)
#* '''Reason''': Test
e68yg5bxsoj116weqvl2gre1bb0an7w
737696
737690
2026-04-11T19:58:29Z
Novem Linguae
49714
Logging [[Wikipedia:Articles for deletion/NovemTest101|AfD nomination]] of [[:NovemTest101]].
737696
wikitext
text/x-wiki
This is a log of all [[WP:XFD|deletion discussion]] nominations made by this user using [[WP:TW|Twinkle]]'s XfD module.
If you no longer wish to keep this log, you can turn it off using the [[Wikipedia:Twinkle/Preferences|preferences panel]], and nominate this page for speedy deletion under [[WP:CSD#U1|CSD U1]].
This log does not track XfD-related deletions made using Twinkle.
=== December 2022 ===
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:05, 22 December 2022 (UTC)
#* '''Reason''': Test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:23, 22 December 2022 (UTC)
#* '''Reason''': test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:26, 22 December 2022 (UTC)
#* '''Reason''': Test
=== April 2023 ===
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:03, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[* [[:Category:Ursa Major Moving Group]] to [[:Category:Ursa Major moving group]] – C2D: Capitalization change [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 09:08, 11 April 2023 (UTC)|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:08, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[undefined#Category:Ursa Major Moving Group|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:10, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[Wikipedia:Categories for discussion/Speedy#Current requests|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:16, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:17, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:22, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (9th nomination)|nominated]] at [[WP:AFD|AfD]] 09:26, 11 April 2023 (UTC)
#* '''Reason''': Test
# [[:Test90237320]]: [[Wikipedia:Articles for deletion/Test90237320|nominated]] at [[WP:AFD|AfD]] 10:59, 20 April 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace28097]] 01:28, 28 April 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace097097]] 01:31, 28 April 2023 (UTC)
#* '''Reason''': test
=== May 2023 ===
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:15, 20 May 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:16, 20 May 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:17, 20 May 2023 (UTC)
#* '''Reason''': testtt
=== June 2023 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (10th nomination)|nominated]] at [[WP:AFD|AfD]] 00:26, 21 June 2023 (UTC)
#* '''Reason''': Deletion sort test
=== September 2025 ===
# [[:Wikipedia:NovemTest1]]: [[Wikipedia:Miscellany for deletion/Wikipedia:NovemTest1|nominated]] at [[WP:MFD|MfD]] 20:30, 10 September 2025 (UTC)
#* '''Reason''': Testing XFDcloser.
=== November 2025 ===
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:55, 20 November 2025 (UTC)
#* '''Reason''': Test
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:57, 20 November 2025 (UTC)
#* '''Reason''': Test 2
=== December 2025 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (17th nomination)|nominated]] at [[WP:AFD|AfD]] 06:01, 13 December 2025 (UTC)
#* '''Reason''': Test
=== April 2026 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (18th nomination)|nominated]] at [[WP:AFD|AfD]] 19:56, 11 April 2026 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (19th nomination)|nominated]] at [[WP:AFD|AfD]] 19:56, 11 April 2026 (UTC)
#* '''Reason''': Test 2
# [[:NovemTest100]]: [[Wikipedia:Articles for deletion/NovemTest100|nominated]] at [[WP:AFD|AfD]] 19:57, 11 April 2026 (UTC)
#* '''Reason''': Test
# [[:NovemTest101]]: [[Wikipedia:Articles for deletion/NovemTest101|nominated]] at [[WP:AFD|AfD]] 19:58, 11 April 2026 (UTC)
#* '''Reason''': Test 2
0055pc259nldqg59q95zvb03mr07mkp
737701
737696
2026-04-11T19:59:03Z
Novem Linguae
49714
Logging [[Wikipedia:Articles for deletion/NovemTest102|AfD nomination]] of [[:NovemTest102]].
737701
wikitext
text/x-wiki
This is a log of all [[WP:XFD|deletion discussion]] nominations made by this user using [[WP:TW|Twinkle]]'s XfD module.
If you no longer wish to keep this log, you can turn it off using the [[Wikipedia:Twinkle/Preferences|preferences panel]], and nominate this page for speedy deletion under [[WP:CSD#U1|CSD U1]].
This log does not track XfD-related deletions made using Twinkle.
=== December 2022 ===
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:05, 22 December 2022 (UTC)
#* '''Reason''': Test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:23, 22 December 2022 (UTC)
#* '''Reason''': test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:26, 22 December 2022 (UTC)
#* '''Reason''': Test
=== April 2023 ===
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:03, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[* [[:Category:Ursa Major Moving Group]] to [[:Category:Ursa Major moving group]] – C2D: Capitalization change [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 09:08, 11 April 2023 (UTC)|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:08, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[undefined#Category:Ursa Major Moving Group|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:10, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[Wikipedia:Categories for discussion/Speedy#Current requests|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:16, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:17, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:22, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (9th nomination)|nominated]] at [[WP:AFD|AfD]] 09:26, 11 April 2023 (UTC)
#* '''Reason''': Test
# [[:Test90237320]]: [[Wikipedia:Articles for deletion/Test90237320|nominated]] at [[WP:AFD|AfD]] 10:59, 20 April 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace28097]] 01:28, 28 April 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace097097]] 01:31, 28 April 2023 (UTC)
#* '''Reason''': test
=== May 2023 ===
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:15, 20 May 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:16, 20 May 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:17, 20 May 2023 (UTC)
#* '''Reason''': testtt
=== June 2023 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (10th nomination)|nominated]] at [[WP:AFD|AfD]] 00:26, 21 June 2023 (UTC)
#* '''Reason''': Deletion sort test
=== September 2025 ===
# [[:Wikipedia:NovemTest1]]: [[Wikipedia:Miscellany for deletion/Wikipedia:NovemTest1|nominated]] at [[WP:MFD|MfD]] 20:30, 10 September 2025 (UTC)
#* '''Reason''': Testing XFDcloser.
=== November 2025 ===
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:55, 20 November 2025 (UTC)
#* '''Reason''': Test
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:57, 20 November 2025 (UTC)
#* '''Reason''': Test 2
=== December 2025 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (17th nomination)|nominated]] at [[WP:AFD|AfD]] 06:01, 13 December 2025 (UTC)
#* '''Reason''': Test
=== April 2026 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (18th nomination)|nominated]] at [[WP:AFD|AfD]] 19:56, 11 April 2026 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (19th nomination)|nominated]] at [[WP:AFD|AfD]] 19:56, 11 April 2026 (UTC)
#* '''Reason''': Test 2
# [[:NovemTest100]]: [[Wikipedia:Articles for deletion/NovemTest100|nominated]] at [[WP:AFD|AfD]] 19:57, 11 April 2026 (UTC)
#* '''Reason''': Test
# [[:NovemTest101]]: [[Wikipedia:Articles for deletion/NovemTest101|nominated]] at [[WP:AFD|AfD]] 19:58, 11 April 2026 (UTC)
#* '''Reason''': Test 2
# [[:NovemTest102]]: [[Wikipedia:Articles for deletion/NovemTest102|nominated]] at [[WP:AFD|AfD]] 19:59, 11 April 2026 (UTC)
#* '''Reason''': redirect
k59pqs2ij6lrcbxdailgd1lytqlefzy
737705
737701
2026-04-11T19:59:55Z
Novem Linguae
49714
Logging [[Wikipedia:Articles for deletion/NovemTest103|AfD nomination]] of [[:NovemTest103]].
737705
wikitext
text/x-wiki
This is a log of all [[WP:XFD|deletion discussion]] nominations made by this user using [[WP:TW|Twinkle]]'s XfD module.
If you no longer wish to keep this log, you can turn it off using the [[Wikipedia:Twinkle/Preferences|preferences panel]], and nominate this page for speedy deletion under [[WP:CSD#U1|CSD U1]].
This log does not track XfD-related deletions made using Twinkle.
=== December 2022 ===
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:05, 22 December 2022 (UTC)
#* '''Reason''': Test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:23, 22 December 2022 (UTC)
#* '''Reason''': test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:26, 22 December 2022 (UTC)
#* '''Reason''': Test
=== April 2023 ===
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:03, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[* [[:Category:Ursa Major Moving Group]] to [[:Category:Ursa Major moving group]] – C2D: Capitalization change [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 09:08, 11 April 2023 (UTC)|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:08, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[undefined#Category:Ursa Major Moving Group|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:10, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[Wikipedia:Categories for discussion/Speedy#Current requests|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:16, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:17, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:22, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (9th nomination)|nominated]] at [[WP:AFD|AfD]] 09:26, 11 April 2023 (UTC)
#* '''Reason''': Test
# [[:Test90237320]]: [[Wikipedia:Articles for deletion/Test90237320|nominated]] at [[WP:AFD|AfD]] 10:59, 20 April 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace28097]] 01:28, 28 April 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace097097]] 01:31, 28 April 2023 (UTC)
#* '''Reason''': test
=== May 2023 ===
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:15, 20 May 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:16, 20 May 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:17, 20 May 2023 (UTC)
#* '''Reason''': testtt
=== June 2023 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (10th nomination)|nominated]] at [[WP:AFD|AfD]] 00:26, 21 June 2023 (UTC)
#* '''Reason''': Deletion sort test
=== September 2025 ===
# [[:Wikipedia:NovemTest1]]: [[Wikipedia:Miscellany for deletion/Wikipedia:NovemTest1|nominated]] at [[WP:MFD|MfD]] 20:30, 10 September 2025 (UTC)
#* '''Reason''': Testing XFDcloser.
=== November 2025 ===
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:55, 20 November 2025 (UTC)
#* '''Reason''': Test
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:57, 20 November 2025 (UTC)
#* '''Reason''': Test 2
=== December 2025 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (17th nomination)|nominated]] at [[WP:AFD|AfD]] 06:01, 13 December 2025 (UTC)
#* '''Reason''': Test
=== April 2026 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (18th nomination)|nominated]] at [[WP:AFD|AfD]] 19:56, 11 April 2026 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (19th nomination)|nominated]] at [[WP:AFD|AfD]] 19:56, 11 April 2026 (UTC)
#* '''Reason''': Test 2
# [[:NovemTest100]]: [[Wikipedia:Articles for deletion/NovemTest100|nominated]] at [[WP:AFD|AfD]] 19:57, 11 April 2026 (UTC)
#* '''Reason''': Test
# [[:NovemTest101]]: [[Wikipedia:Articles for deletion/NovemTest101|nominated]] at [[WP:AFD|AfD]] 19:58, 11 April 2026 (UTC)
#* '''Reason''': Test 2
# [[:NovemTest102]]: [[Wikipedia:Articles for deletion/NovemTest102|nominated]] at [[WP:AFD|AfD]] 19:59, 11 April 2026 (UTC)
#* '''Reason''': redirect
# [[:NovemTest103]]: [[Wikipedia:Articles for deletion/NovemTest103|nominated]] at [[WP:AFD|AfD]] 19:59, 11 April 2026 (UTC)
#* '''Reason''': draftify
50ghr064v22i9iy6lcvzuhwvbfju89j
737735
737705
2026-04-12T09:15:39Z
Novem Linguae
49714
Logging [[Wikipedia:Articles for deletion/Mainspace (20th nomination)|AfD nomination]] of [[:Mainspace]].
737735
wikitext
text/x-wiki
This is a log of all [[WP:XFD|deletion discussion]] nominations made by this user using [[WP:TW|Twinkle]]'s XfD module.
If you no longer wish to keep this log, you can turn it off using the [[Wikipedia:Twinkle/Preferences|preferences panel]], and nominate this page for speedy deletion under [[WP:CSD#U1|CSD U1]].
This log does not track XfD-related deletions made using Twinkle.
=== December 2022 ===
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:05, 22 December 2022 (UTC)
#* '''Reason''': Test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:23, 22 December 2022 (UTC)
#* '''Reason''': test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:26, 22 December 2022 (UTC)
#* '''Reason''': Test
=== April 2023 ===
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:03, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[* [[:Category:Ursa Major Moving Group]] to [[:Category:Ursa Major moving group]] – C2D: Capitalization change [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 09:08, 11 April 2023 (UTC)|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:08, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[undefined#Category:Ursa Major Moving Group|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:10, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[Wikipedia:Categories for discussion/Speedy#Current requests|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:16, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:17, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:22, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (9th nomination)|nominated]] at [[WP:AFD|AfD]] 09:26, 11 April 2023 (UTC)
#* '''Reason''': Test
# [[:Test90237320]]: [[Wikipedia:Articles for deletion/Test90237320|nominated]] at [[WP:AFD|AfD]] 10:59, 20 April 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace28097]] 01:28, 28 April 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace097097]] 01:31, 28 April 2023 (UTC)
#* '''Reason''': test
=== May 2023 ===
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:15, 20 May 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:16, 20 May 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:17, 20 May 2023 (UTC)
#* '''Reason''': testtt
=== June 2023 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (10th nomination)|nominated]] at [[WP:AFD|AfD]] 00:26, 21 June 2023 (UTC)
#* '''Reason''': Deletion sort test
=== September 2025 ===
# [[:Wikipedia:NovemTest1]]: [[Wikipedia:Miscellany for deletion/Wikipedia:NovemTest1|nominated]] at [[WP:MFD|MfD]] 20:30, 10 September 2025 (UTC)
#* '''Reason''': Testing XFDcloser.
=== November 2025 ===
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:55, 20 November 2025 (UTC)
#* '''Reason''': Test
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:57, 20 November 2025 (UTC)
#* '''Reason''': Test 2
=== December 2025 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (17th nomination)|nominated]] at [[WP:AFD|AfD]] 06:01, 13 December 2025 (UTC)
#* '''Reason''': Test
=== April 2026 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (18th nomination)|nominated]] at [[WP:AFD|AfD]] 19:56, 11 April 2026 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (19th nomination)|nominated]] at [[WP:AFD|AfD]] 19:56, 11 April 2026 (UTC)
#* '''Reason''': Test 2
# [[:NovemTest100]]: [[Wikipedia:Articles for deletion/NovemTest100|nominated]] at [[WP:AFD|AfD]] 19:57, 11 April 2026 (UTC)
#* '''Reason''': Test
# [[:NovemTest101]]: [[Wikipedia:Articles for deletion/NovemTest101|nominated]] at [[WP:AFD|AfD]] 19:58, 11 April 2026 (UTC)
#* '''Reason''': Test 2
# [[:NovemTest102]]: [[Wikipedia:Articles for deletion/NovemTest102|nominated]] at [[WP:AFD|AfD]] 19:59, 11 April 2026 (UTC)
#* '''Reason''': redirect
# [[:NovemTest103]]: [[Wikipedia:Articles for deletion/NovemTest103|nominated]] at [[WP:AFD|AfD]] 19:59, 11 April 2026 (UTC)
#* '''Reason''': draftify
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (20th nomination)|nominated]] at [[WP:AFD|AfD]] 09:15, 12 April 2026 (UTC)
o2lvlkiaa6h7sb4s0hs4knj92mxnic4
737740
737735
2026-04-12T09:17:08Z
Novem Linguae
49714
Logging [[Wikipedia:Articles for deletion/Mainspace (21th nomination)|AfD nomination]] of [[:Mainspace]].
737740
wikitext
text/x-wiki
This is a log of all [[WP:XFD|deletion discussion]] nominations made by this user using [[WP:TW|Twinkle]]'s XfD module.
If you no longer wish to keep this log, you can turn it off using the [[Wikipedia:Twinkle/Preferences|preferences panel]], and nominate this page for speedy deletion under [[WP:CSD#U1|CSD U1]].
This log does not track XfD-related deletions made using Twinkle.
=== December 2022 ===
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:05, 22 December 2022 (UTC)
#* '''Reason''': Test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:23, 22 December 2022 (UTC)
#* '''Reason''': test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:26, 22 December 2022 (UTC)
#* '''Reason''': Test
=== April 2023 ===
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:03, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[* [[:Category:Ursa Major Moving Group]] to [[:Category:Ursa Major moving group]] – C2D: Capitalization change [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 09:08, 11 April 2023 (UTC)|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:08, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[undefined#Category:Ursa Major Moving Group|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:10, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[Wikipedia:Categories for discussion/Speedy#Current requests|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:16, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:17, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:22, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (9th nomination)|nominated]] at [[WP:AFD|AfD]] 09:26, 11 April 2023 (UTC)
#* '''Reason''': Test
# [[:Test90237320]]: [[Wikipedia:Articles for deletion/Test90237320|nominated]] at [[WP:AFD|AfD]] 10:59, 20 April 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace28097]] 01:28, 28 April 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace097097]] 01:31, 28 April 2023 (UTC)
#* '''Reason''': test
=== May 2023 ===
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:15, 20 May 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:16, 20 May 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:17, 20 May 2023 (UTC)
#* '''Reason''': testtt
=== June 2023 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (10th nomination)|nominated]] at [[WP:AFD|AfD]] 00:26, 21 June 2023 (UTC)
#* '''Reason''': Deletion sort test
=== September 2025 ===
# [[:Wikipedia:NovemTest1]]: [[Wikipedia:Miscellany for deletion/Wikipedia:NovemTest1|nominated]] at [[WP:MFD|MfD]] 20:30, 10 September 2025 (UTC)
#* '''Reason''': Testing XFDcloser.
=== November 2025 ===
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:55, 20 November 2025 (UTC)
#* '''Reason''': Test
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:57, 20 November 2025 (UTC)
#* '''Reason''': Test 2
=== December 2025 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (17th nomination)|nominated]] at [[WP:AFD|AfD]] 06:01, 13 December 2025 (UTC)
#* '''Reason''': Test
=== April 2026 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (18th nomination)|nominated]] at [[WP:AFD|AfD]] 19:56, 11 April 2026 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (19th nomination)|nominated]] at [[WP:AFD|AfD]] 19:56, 11 April 2026 (UTC)
#* '''Reason''': Test 2
# [[:NovemTest100]]: [[Wikipedia:Articles for deletion/NovemTest100|nominated]] at [[WP:AFD|AfD]] 19:57, 11 April 2026 (UTC)
#* '''Reason''': Test
# [[:NovemTest101]]: [[Wikipedia:Articles for deletion/NovemTest101|nominated]] at [[WP:AFD|AfD]] 19:58, 11 April 2026 (UTC)
#* '''Reason''': Test 2
# [[:NovemTest102]]: [[Wikipedia:Articles for deletion/NovemTest102|nominated]] at [[WP:AFD|AfD]] 19:59, 11 April 2026 (UTC)
#* '''Reason''': redirect
# [[:NovemTest103]]: [[Wikipedia:Articles for deletion/NovemTest103|nominated]] at [[WP:AFD|AfD]] 19:59, 11 April 2026 (UTC)
#* '''Reason''': draftify
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (20th nomination)|nominated]] at [[WP:AFD|AfD]] 09:15, 12 April 2026 (UTC)
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (21th nomination)|nominated]] at [[WP:AFD|AfD]] 09:17, 12 April 2026 (UTC)
sl05xcxvk04kt7a86fm0ij4yz8ew3z3
737743
737740
2026-04-12T10:05:37Z
Novem Linguae
49714
Logging [[Wikipedia:Articles for deletion/Mainspace (22th nomination)|AfD nomination]] of [[:Mainspace]].
737743
wikitext
text/x-wiki
This is a log of all [[WP:XFD|deletion discussion]] nominations made by this user using [[WP:TW|Twinkle]]'s XfD module.
If you no longer wish to keep this log, you can turn it off using the [[Wikipedia:Twinkle/Preferences|preferences panel]], and nominate this page for speedy deletion under [[WP:CSD#U1|CSD U1]].
This log does not track XfD-related deletions made using Twinkle.
=== December 2022 ===
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:05, 22 December 2022 (UTC)
#* '''Reason''': Test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:23, 22 December 2022 (UTC)
#* '''Reason''': test
# [[:Template:Test]]: [[Wikipedia:Templates for discussion/Log/2022 December 22#Template:Test|nominated]] at [[WP:TFD|TfD]] 20:26, 22 December 2022 (UTC)
#* '''Reason''': Test
=== April 2023 ===
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:03, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[* [[:Category:Ursa Major Moving Group]] to [[:Category:Ursa Major moving group]] – C2D: Capitalization change [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 09:08, 11 April 2023 (UTC)|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:08, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[undefined#Category:Ursa Major Moving Group|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:10, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: [[Wikipedia:Categories for discussion/Speedy#Current requests|nominated]] at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:16, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:17, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Category:Ursa Major Moving Group]]: nominated at [[WP:CFDS|CfDS]] (C2D); New name: [[:Category:Ursa Major moving group]] 09:22, 11 April 2023 (UTC)
#* '''Reason''': Capitalization change
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (9th nomination)|nominated]] at [[WP:AFD|AfD]] 09:26, 11 April 2023 (UTC)
#* '''Reason''': Test
# [[:Test90237320]]: [[Wikipedia:Articles for deletion/Test90237320|nominated]] at [[WP:AFD|AfD]] 10:59, 20 April 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace28097]] 01:28, 28 April 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]]; New name: [[:Mainspace097097]] 01:31, 28 April 2023 (UTC)
#* '''Reason''': test
=== May 2023 ===
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:15, 20 May 2023 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:16, 20 May 2023 (UTC)
#* '''Reason''': test
# [[:Mainspace]]: nominated at [[WP:RM|RM]] (technical); New name: [[:Mainspace2]] 09:17, 20 May 2023 (UTC)
#* '''Reason''': testtt
=== June 2023 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (10th nomination)|nominated]] at [[WP:AFD|AfD]] 00:26, 21 June 2023 (UTC)
#* '''Reason''': Deletion sort test
=== September 2025 ===
# [[:Wikipedia:NovemTest1]]: [[Wikipedia:Miscellany for deletion/Wikipedia:NovemTest1|nominated]] at [[WP:MFD|MfD]] 20:30, 10 September 2025 (UTC)
#* '''Reason''': Testing XFDcloser.
=== November 2025 ===
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:55, 20 November 2025 (UTC)
#* '''Reason''': Test
# [[:File:Test file.png]]: ([{{fullurl:Special:Log|page=File:Test_file.png}} log]) [[Wikipedia:Files for discussion/2025 November 20#File:Test file.png|nominated]] at [[WP:FFD|FfD]] 19:57, 20 November 2025 (UTC)
#* '''Reason''': Test 2
=== December 2025 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (17th nomination)|nominated]] at [[WP:AFD|AfD]] 06:01, 13 December 2025 (UTC)
#* '''Reason''': Test
=== April 2026 ===
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (18th nomination)|nominated]] at [[WP:AFD|AfD]] 19:56, 11 April 2026 (UTC)
#* '''Reason''': Test
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (19th nomination)|nominated]] at [[WP:AFD|AfD]] 19:56, 11 April 2026 (UTC)
#* '''Reason''': Test 2
# [[:NovemTest100]]: [[Wikipedia:Articles for deletion/NovemTest100|nominated]] at [[WP:AFD|AfD]] 19:57, 11 April 2026 (UTC)
#* '''Reason''': Test
# [[:NovemTest101]]: [[Wikipedia:Articles for deletion/NovemTest101|nominated]] at [[WP:AFD|AfD]] 19:58, 11 April 2026 (UTC)
#* '''Reason''': Test 2
# [[:NovemTest102]]: [[Wikipedia:Articles for deletion/NovemTest102|nominated]] at [[WP:AFD|AfD]] 19:59, 11 April 2026 (UTC)
#* '''Reason''': redirect
# [[:NovemTest103]]: [[Wikipedia:Articles for deletion/NovemTest103|nominated]] at [[WP:AFD|AfD]] 19:59, 11 April 2026 (UTC)
#* '''Reason''': draftify
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (20th nomination)|nominated]] at [[WP:AFD|AfD]] 09:15, 12 April 2026 (UTC)
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (21th nomination)|nominated]] at [[WP:AFD|AfD]] 09:17, 12 April 2026 (UTC)
# [[:Mainspace]]: [[Wikipedia:Articles for deletion/Mainspace (22th nomination)|nominated]] at [[WP:AFD|AfD]] 10:05, 12 April 2026 (UTC)
my1f7sl0htnldj5cfwf4bdc5xjl2qma
Template:R protected
10
148819
737632
558116
2026-04-10T21:42:21Z
en>Toadspike
0
Adding {{pp-template}}
737632
wikitext
text/x-wiki
<noinclude>{{pp-template|small=yes}}</noinclude><includeonly>{{#switch:{{{protlevel|{{#invoke:effective protection level|edit|1={{{title|{{FULLPAGENAME}}}}}}}}}}
|sysop={{R protected/full|nocat={{{nocat|}}}}}{{pp-protected|small=yes|category={{#ifeq:{{{nocat|}}}|true|no|yes}}}}
|templateeditor={{R protected/template|nocat={{{nocat|}}}}}{{pp-template|small=yes|category={{#ifeq:{{{nocat|}}}|true|no|yes}}}}
|extendedconfirmed={{R protected/excon|nocat={{{nocat|}}}}}{{pp-extended|small=yes|category={{#ifeq:{{{nocat|}}}|true|no|yes}}}}
|autoconfirmed={{R protected/semi|nocat={{{nocat|}}}}}{{pp-semi|small=yes|category={{#ifeq:{{{nocat|}}}|true|no|yes}}}}
|#default=<!-- Show nothing -->{{#ifeq:{{{nocat|}}}|true||[[Category:Wikipedia pages with incorrect protection templates]]}}
}}</includeonly><noinclude>
{{documentation}}
</noinclude>
e03wg7rf043et6g51gjxh8u9x8ia1li
737633
737632
2026-04-11T19:54:08Z
Novem Linguae
49714
1 revision imported from [[:en:Template:R_protected]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737632
wikitext
text/x-wiki
<noinclude>{{pp-template|small=yes}}</noinclude><includeonly>{{#switch:{{{protlevel|{{#invoke:effective protection level|edit|1={{{title|{{FULLPAGENAME}}}}}}}}}}
|sysop={{R protected/full|nocat={{{nocat|}}}}}{{pp-protected|small=yes|category={{#ifeq:{{{nocat|}}}|true|no|yes}}}}
|templateeditor={{R protected/template|nocat={{{nocat|}}}}}{{pp-template|small=yes|category={{#ifeq:{{{nocat|}}}|true|no|yes}}}}
|extendedconfirmed={{R protected/excon|nocat={{{nocat|}}}}}{{pp-extended|small=yes|category={{#ifeq:{{{nocat|}}}|true|no|yes}}}}
|autoconfirmed={{R protected/semi|nocat={{{nocat|}}}}}{{pp-semi|small=yes|category={{#ifeq:{{{nocat|}}}|true|no|yes}}}}
|#default=<!-- Show nothing -->{{#ifeq:{{{nocat|}}}|true||[[Category:Wikipedia pages with incorrect protection templates]]}}
}}</includeonly><noinclude>
{{documentation}}
</noinclude>
e03wg7rf043et6g51gjxh8u9x8ia1li
Translate test/ja
0
150494
737604
721846
2026-04-11T16:15:33Z
FuzzyBot
18251
Updating to match new version of source page
737604
wikitext
text/x-wiki
<languages/>
{{formatnum|10}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|メディアウィキドキュメント]]
これは'''MediaWikiに関する技術マニュアルです'''.
開発者とシステム管理者のためのインストール、管理、開発に関する情報を掲載しています。
このマニュアルはエンドユーザー向けのものではありません。
ソフトウェアの使い方については[[Special:MyLanguage/Help:Contents|MediaWiki Handbook]]をご覧ください。
<span id="Main_sections"></span>
==主要なセクション==
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<span id="For_system_administrators"></span>
=== システム管理者へ ===
; [[Special:MyLanguage/Manual:Installation guide|インストール]]
: 新しいMediaWikiインストールのガイド
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|インストール]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|初期設定]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|設定のアルファベット順リスト]] | [[Special:MyLanguage/Manual:Configuration settings|機能によってリストされた設定]]
; {{ll|Manual:System administration|nsp=0}}
: ウィキの管理作業のガイド
: [[Special:MyLanguage/Manual:Backing up a wiki|バックアップ]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: MediaWikiをアップグレードするガイド
''詳細は{{ll|Sysadmin hub}}''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<span id="For_developers"></span>
=== 開発者へ ===
; アーキテクチャ
: MediaWikiのソースコードの重要な部分の概要。
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ Doxygenで生成された文書]
; {{ll|Manual:Database layout|nsp=0}}
: MediaWikiが使用するデータベースアーキテクチャについての詳細
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} エンジン
; {{ll|Manual:Developing extensions|nsp=0}}
: 新しいMediaWiki拡張機能を作成する方法の概要
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|タグ]] | [[Special:MyLanguage/Manual:Special pages|特別ページ]] | {{ll|Manual:Skins|nsp=0}}
; ウェブアクセス
: 使用可能な[[w:Query string|クエリ文字列]]の詳細
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''詳細は{{ll|Developer hub}}''
|}
<span id="Others"></span>
=== その他 ===
; [[Special:MyLanguage/Manual:FAQ|MediaWiki FAQ]]
: メディアウィキに関するよくある質問
<span id="Browsing_the_manual"></span>
== マニュアルを検索する ==
文書を閲覧する方法は複数あります
上記の節である特定の話題を見つけて困惑する読者たちは、以下のブラウジング方法を参考 に する こと が できます。
* [[Special:Allpages/Manual:]] - 自動生成されたマニュアルのすべてのページのリスト:名前空間
* [[:Category:Manual]] - 最上級のマニュアルカテゴリー
<span id="Improving_the_manual"></span>
== マニュアルを改善する ==
* このマニュアルにはまだ穴がたくさんあります! 詳細は[[Special:MyLanguage/Manual:Contents/To do|'to do' page]]を参照。
*http://meta.wikimedia.orgにはまだ移行する必要があるコンテンツがあります。 このドキュメントでは特定の問題に関する情報が見つからない場合は [[meta:MediaWiki_FAQ]]と [[meta:Help:Contents]] をご覧ください。
* '''[[Project:Manual]]'''はマニュアルの発展について議論する場所です。
* 以下も参照 [[Project:Current issues]].
<span id="MediaWiki_Virtual_Library"></span>
== MediaWiki仮想図書館 ==
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)'''にMediaWikiについてのガイドがあります。
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
j587c0dtx9a2wg969tw4layya7gkjjj
737610
737604
2026-04-11T16:20:05Z
FuzzyBot
18251
Updating to match new version of source page
737610
wikitext
text/x-wiki
<languages/>
{{formatnum|10|{{SUBPAGENAME}}}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|メディアウィキドキュメント]]
これは'''MediaWikiに関する技術マニュアルです'''.
開発者とシステム管理者のためのインストール、管理、開発に関する情報を掲載しています。
このマニュアルはエンドユーザー向けのものではありません。
ソフトウェアの使い方については[[Special:MyLanguage/Help:Contents|MediaWiki Handbook]]をご覧ください。
<span id="Main_sections"></span>
==主要なセクション==
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<span id="For_system_administrators"></span>
=== システム管理者へ ===
; [[Special:MyLanguage/Manual:Installation guide|インストール]]
: 新しいMediaWikiインストールのガイド
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|インストール]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|初期設定]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|設定のアルファベット順リスト]] | [[Special:MyLanguage/Manual:Configuration settings|機能によってリストされた設定]]
; {{ll|Manual:System administration|nsp=0}}
: ウィキの管理作業のガイド
: [[Special:MyLanguage/Manual:Backing up a wiki|バックアップ]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: MediaWikiをアップグレードするガイド
''詳細は{{ll|Sysadmin hub}}''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<span id="For_developers"></span>
=== 開発者へ ===
; アーキテクチャ
: MediaWikiのソースコードの重要な部分の概要。
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ Doxygenで生成された文書]
; {{ll|Manual:Database layout|nsp=0}}
: MediaWikiが使用するデータベースアーキテクチャについての詳細
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} エンジン
; {{ll|Manual:Developing extensions|nsp=0}}
: 新しいMediaWiki拡張機能を作成する方法の概要
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|タグ]] | [[Special:MyLanguage/Manual:Special pages|特別ページ]] | {{ll|Manual:Skins|nsp=0}}
; ウェブアクセス
: 使用可能な[[w:Query string|クエリ文字列]]の詳細
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''詳細は{{ll|Developer hub}}''
|}
<span id="Others"></span>
=== その他 ===
; [[Special:MyLanguage/Manual:FAQ|MediaWiki FAQ]]
: メディアウィキに関するよくある質問
<span id="Browsing_the_manual"></span>
== マニュアルを検索する ==
文書を閲覧する方法は複数あります
上記の節である特定の話題を見つけて困惑する読者たちは、以下のブラウジング方法を参考 に する こと が できます。
* [[Special:Allpages/Manual:]] - 自動生成されたマニュアルのすべてのページのリスト:名前空間
* [[:Category:Manual]] - 最上級のマニュアルカテゴリー
<span id="Improving_the_manual"></span>
== マニュアルを改善する ==
* このマニュアルにはまだ穴がたくさんあります! 詳細は[[Special:MyLanguage/Manual:Contents/To do|'to do' page]]を参照。
*http://meta.wikimedia.orgにはまだ移行する必要があるコンテンツがあります。 このドキュメントでは特定の問題に関する情報が見つからない場合は [[meta:MediaWiki_FAQ]]と [[meta:Help:Contents]] をご覧ください。
* '''[[Project:Manual]]'''はマニュアルの発展について議論する場所です。
* 以下も参照 [[Project:Current issues]].
<span id="MediaWiki_Virtual_Library"></span>
== MediaWiki仮想図書館 ==
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)'''にMediaWikiについてのガイドがあります。
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
sbgxrm7qnds7qb8yx2yapm5jttaf0hi
737618
737610
2026-04-11T16:25:30Z
FuzzyBot
18251
Updating to match new version of source page
737618
wikitext
text/x-wiki
<languages/>
{{formatnum|10|{{PAGELANGUAGE}}}}
{{TNT|Hubs|banner|dev=y|admin=y}}
[[File:MediaWiki-Manual bookstyle-transparent.png|{{dir|{{pagelang}}|left|right}}|175px|メディアウィキドキュメント]]
これは'''MediaWikiに関する技術マニュアルです'''.
開発者とシステム管理者のためのインストール、管理、開発に関する情報を掲載しています。
このマニュアルはエンドユーザー向けのものではありません。
ソフトウェアの使い方については[[Special:MyLanguage/Help:Contents|MediaWiki Handbook]]をご覧ください。
<span id="Main_sections"></span>
==主要なセクション==
{{TNT|merge|Sysadmin hub|Developer hub}}
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<span id="For_system_administrators"></span>
=== システム管理者へ ===
; [[Special:MyLanguage/Manual:Installation guide|インストール]]
: 新しいMediaWikiインストールのガイド
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|インストール]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|初期設定]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|設定のアルファベット順リスト]] | [[Special:MyLanguage/Manual:Configuration settings|機能によってリストされた設定]]
; {{ll|Manual:System administration|nsp=0}}
: ウィキの管理作業のガイド
: [[Special:MyLanguage/Manual:Backing up a wiki|バックアップ]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
: MediaWikiをアップグレードするガイド
''詳細は{{ll|Sysadmin hub}}''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
<span id="For_developers"></span>
=== 開発者へ ===
; アーキテクチャ
: MediaWikiのソースコードの重要な部分の概要。
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/ Doxygenで生成された文書]
; {{ll|Manual:Database layout|nsp=0}}
: MediaWikiが使用するデータベースアーキテクチャについての詳細
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} エンジン
; {{ll|Manual:Developing extensions|nsp=0}}
: 新しいMediaWiki拡張機能を作成する方法の概要
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|タグ]] | [[Special:MyLanguage/Manual:Special pages|特別ページ]] | {{ll|Manual:Skins|nsp=0}}
; ウェブアクセス
: 使用可能な[[w:Query string|クエリ文字列]]の詳細
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''詳細は{{ll|Developer hub}}''
|}
<span id="Others"></span>
=== その他 ===
; [[Special:MyLanguage/Manual:FAQ|MediaWiki FAQ]]
: メディアウィキに関するよくある質問
<span id="Browsing_the_manual"></span>
== マニュアルを検索する ==
文書を閲覧する方法は複数あります
上記の節である特定の話題を見つけて困惑する読者たちは、以下のブラウジング方法を参考 に する こと が できます。
* [[Special:Allpages/Manual:]] - 自動生成されたマニュアルのすべてのページのリスト:名前空間
* [[:Category:Manual]] - 最上級のマニュアルカテゴリー
<span id="Improving_the_manual"></span>
== マニュアルを改善する ==
* このマニュアルにはまだ穴がたくさんあります! 詳細は[[Special:MyLanguage/Manual:Contents/To do|'to do' page]]を参照。
*http://meta.wikimedia.orgにはまだ移行する必要があるコンテンツがあります。 このドキュメントでは特定の問題に関する情報が見つからない場合は [[meta:MediaWiki_FAQ]]と [[meta:Help:Contents]] をご覧ください。
* '''[[Project:Manual]]'''はマニュアルの発展について議論する場所です。
* 以下も参照 [[Project:Current issues]].
<span id="MediaWiki_Virtual_Library"></span>
== MediaWiki仮想図書館 ==
* '''[[:Category:MediaWiki Virtual Library (MVL)|MediaWiki Virtual Library]] (MVL)'''にMediaWikiについてのガイドがあります。
[[File:Incubator-notext.png|alt=foobaz|thumb|foobar]]
{| style="background:transparent;"
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For system administrators ===
; [[Special:MyLanguage/Manual:Installation guide|Installation]]
: Guide to setting up a new MediaWiki installation.
: {{ll|Download}} | [[Special:MyLanguage/Manual:Installing MediaWiki|
Installing]] | [[Special:MyLanguage/Manual:Configuring MediaWiki|
Initial configuration]]
: [[Special:MyLanguage/Manual:Configuration settings (alphabetical)|
Alphabetical list of settings]] | [[Special:MyLanguage/Manual:Configuration settings|
Settings listed by function]]
; {{ll|Manual:System administration|nsp=0}}
: Guide to do administrative tasks on your wiki.
: [[Special:MyLanguage/Manual:Backing up a wiki|Backing up]] | {{ll|Manual:Maintenance scripts|nsp=0}}
; {{ll|Manual:Upgrading|nsp=0}}
:
Guide to upgrade your MediaWiki installation.
''More on {{ll|Sysadmin hub}}.''
| style="width:50%; vertical-align:top; border:1px solid #aaa; padding: .5em 1.5em;" |
=== For developers ===
; Architecture
: An overview of the key parts of MediaWiki's source code.
: {{ll|Manual:Code|nsp=0}} | {{ll|Manual:Global object variables|nsp=0}} | [https://doc.wikimedia.org/
Doxygen-generated documentation]
; {{ll|Manual:Database layout|nsp=0}}
: Details about the database architecture used by MediaWiki.
: {{ll|Manual:MySQL|nsp=0}} | {{ll|Manual:PostgreSQL|nsp=0}} | {{ll|Manual:SQLite|nsp=0}} | {{ll|Manual:IBM DB2|nsp=0}} engines
; {{ll|Manual:Developing extensions|nsp=0}}
: An overview of the ways to create a new MediaWiki extension.
: {{ll|Manual:Hooks|nsp=0}} | {{ll|Manual:Parser functions|nsp=0}} | [[Special:MyLanguage/Manual:Tag extensions|Tag]] | [[Special:MyLanguage/Manual:Special pages|Special page]] | {{ll|Manual:Skins|nsp=0}}
; Web access
: Details about [[w:Query string|query string]] parameters that can be passed to MediaWiki access scripts.
: {{ll|Manual:Parameters to index.php|index.php}} | {{ll|API:Main page|api.php}}
''More on {{ll|Developer hub}}.''
|}
[[File:Soldering a 0805.jpg|alt=foobaz|thumb|foobar]]
[[Category:MediaWiki technical documentation{{translation}}| ]]
[[Category:Manual{{translation}}| ]]
soizk8mxpe9u8994nu1an2qyswajs82
Template:XFDcloser standard installation
10
153848
737672
673778
2025-11-28T23:59:58Z
en>Lemondoge
0
Accessibility: Remove "aria-hidden" from the icon, because focusable elements should not be hidden from the accessibility tree
737672
wikitext
text/x-wiki
{{Mbox
| image= [[File:Logo wikibot.svg|50px|alt=icon]]<!-- THIS FILE can't be used with an empty `|link=` -->
| text = This template is '''used in the standard installation of [[Wikipedia:XFDcloser|XFDcloser]]'''. If you plan to make [[Template:XFDcloser standard installation#"breaking changes"|breaking changes]] to it, move it, or nominate it for deletion, please [[Wikipedia talk:XFDcloser|notify XFDcloser's users and maintainers]] as a courtesy. Thank you! {{#if:{{{1|}}}|<br>
{{{1}}}}}}}<includeonly>{{#if:{{{nocat|}}}||{{#ifeq:{{PAGENAME}}|{{BASEPAGENAME}}|[[Category:Templates used by XFDcloser|{{PAGENAME}}]]}}}}</includeonly><noinclude>
{{Documentation}}<!-- Add categories and interwikis to the /doc subpage, not here! --></noinclude>
jrmljx8xzbi9gx84w2wpu3idsu6mu59
737673
737672
2026-04-11T19:54:44Z
Novem Linguae
49714
1 revision imported from [[:en:Template:XFDcloser_standard_installation]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737672
wikitext
text/x-wiki
{{Mbox
| image= [[File:Logo wikibot.svg|50px|alt=icon]]<!-- THIS FILE can't be used with an empty `|link=` -->
| text = This template is '''used in the standard installation of [[Wikipedia:XFDcloser|XFDcloser]]'''. If you plan to make [[Template:XFDcloser standard installation#"breaking changes"|breaking changes]] to it, move it, or nominate it for deletion, please [[Wikipedia talk:XFDcloser|notify XFDcloser's users and maintainers]] as a courtesy. Thank you! {{#if:{{{1|}}}|<br>
{{{1}}}}}}}<includeonly>{{#if:{{{nocat|}}}||{{#ifeq:{{PAGENAME}}|{{BASEPAGENAME}}|[[Category:Templates used by XFDcloser|{{PAGENAME}}]]}}}}</includeonly><noinclude>
{{Documentation}}<!-- Add categories and interwikis to the /doc subpage, not here! --></noinclude>
jrmljx8xzbi9gx84w2wpu3idsu6mu59
User talk:JWBTH/CD test page
3
154341
737732
737518
2026-04-12T06:04:30Z
JWBTH
52211
/* Last subsection */
737732
wikitext
text/x-wiki
== Section 1 ==
first section comment [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:37, 20 November 2024 (UTC)
unsigned comment
end {{unsigned|user}}
: comment to be edited [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 02:38, 20 November 2024 (UTC)
:: comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 02:41, 20 November 2024 (UTC)
::: child comment of comment to test buttons [[User:Jack who built the house|Jack who built the house]] ([[User talk:Jack who built the house|talk]]) 06:09, 27 August 2025 (UTC)
::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC)
:::: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 19:32, 16 March 2026 (UTC)
: [[#c-Test_account_8-20241120023700-Section_1|Test account 8 @ 02:37, 20 November 2024 (UTC)]] [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 06:43, 28 March 2026 (UTC)
=== test2 ===
test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:55, 14 September 2025 (UTC)
: [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 20:13, 26 March 2026 (UTC)
:: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 11:17, 8 April 2026 (UTC)
=== Comment with complex markup ===
* ̴͍͖̪̭̂ฑεᚹẻ̴̦̜̜͙̰̉̒͠͠иℳἒԊ৩βà̸̩̳̗m̶̧̲̲̬̌̀̈́̀ь β ì̵̛̹̌͛͝«Зᾷу៚ἐฑἒдì̵̛̹̌͛͝ю»ì̵̛̹̌͛͝ ! Ᾰ D̴̞̓̊̀ля чẻ̴̦̜̜͙̰̉̒͠͠рẻ̴̦̜̜͙̰̉̒͠͠счуr̵̢͈͕̺͎̀̅ s̸̢̈́ерьӚz̵͓̫̻͔͠Ԋыᚸ βыΔε௭иm̶̧̲̲̬̌̀̈́̀ь <s>ฑр৩c̴̨͍͇̪̏̿́̽̕m̶̧̲̲̬̌̀̈́̀раԊc̴̨͍͇̪̏̿́̽̕m̶̧̲̲̬̌̀̈́̀β৩</s> ३ᾷβ৩Δь «D̴̞̓̊̀β৩йԊая z̵͓̫̻͔͠à̸̩̳̗௶พь». Ἇ m̶̧̲̲̬̌̀̈́̀৩ иz̵͓̫̻͔͠ Ԋẻ̴̦̜̜͙̰̉̒͠͠k̸̟͔̯̯̖̍̂͐̎͘৩m̶̧̲̲̬̌̀̈́̀৩ᚹыᚸ c̴̨͍͇̪̏̿́̽̕m̶̧̲̲̬̌̀̈́̀ᾷ z̵͓̫̻͔͠а௶พь m̶̧̲̲̬̌̀̈́̀ᾷк ì̵̛̹̌͛͝и ௭ε३εm̶̧̲̲̬̌̀̈́̀ чεᚹعz̵͓̫̻͔͠ k̸̟͔̯̯̖̍̂͐̎͘ᚹᾷй !!! ̴͍͖̪̭̂ <span style="font-family:Calibri; font-size:175%; display: inline-block; letter-spacing: 5px; transform: rotate(10deg); padding: 20px 0px;>[[User:Example|'''<span style="color: Magenta; position: relative; top: -4px;">ঞ</span><span style="color: SpringGreen; position: relative; top: -3px;">ʆ</span><span style="color: red; position: relative; top: -2px;">ἕ</span><span style="color: LimeGreen; position: relative; top: -1px;">ฃ</span><span style="color: DeepPink; position: relative; top: 2px;">r̵̢͈͕̺͎̀̅</span><span style="color: Aqua; position: relative; top: 4px;"> ̴͍͖̪̭̂</span><span style="color: DarkOrange; position: relative; top: 4px;">D̴̞̓̊̀</span><span style="color: DarkOrchid; position: relative; top: 3px;">ἒ</span><span style="color: Chartreuse; position: relative; top: 4px;"> ̴͍͖̪̭̂</span><span style="color: Fuchsia; position: relative; top: 1px;">ໃ</span><span style="color: DarkTurquoise; position: relative; top: 0px;">à̸̩̳̗</span><span style="color: Forestgreen; position: relative; top: -2px;">ʁ</span><span style="color: deeppink; position: relative; top: 2px;">i̵͖̒͆̕͝ͅ</span><span style="color: Turquoise; position: relative; top: -1px;">ń̸̳͑̑͌</span><span style="color: LimeGreen; position: relative; top: -4px;">៩</span><span style="color: Magenta; position: relative; top: 1px;">♥</font>''']]</span> 14:08, 1 April 2026 (UTC)
*:test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:53, 7 April 2026 (UTC)
*:iaos dhioas dhoia sdhiosa d [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 07:38, 8 April 2026 (UTC)
*:reply [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 11:15, 8 April 2026 (UTC)
*:reply [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 11:15, 8 April 2026 (UTC)
*:tests [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 11:57, 8 April 2026 (UTC)
*: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 14:07, 8 April 2026 (UTC)
*:s [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 14:39, 8 April 2026 (UTC)
*:ss [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:23, 8 April 2026 (UTC)
=== Transcluded comments ===
{{User talk:JWBTH/CD test page/comment}}
=== Vote ===
Comment.
# Vote 1. [[User:Example|Example]] ([[User talk:Example|talk]]) 06:46, 9 April 2026 (UTC)
# Vote 2. [[User:Example|Example]] ([[User talk:Example|talk]]) 06:46, 9 April 2026 (UTC)
=== Comment split by replies ===
Somebody describes something, and here goes a list:
* List item 1
** Here a user breaks the list with their reply. [[User:Example2|Example2]] ([[User talk:Example2|talk]]) 06:46, 9 April 2026 (UTC)
* List item 2
** Here a user breaks the list with their reply. [[User:Example2|Example2]] ([[User talk:Example2|talk]]) 06:47, 9 April 2026 (UTC)
* List item 3
** Here a user breaks the list with their reply. [[User:Example2|Example2]] ([[User talk:Example2|talk]]) 06:48, 9 April 2026 (UTC)
Here continues the original post. [[User:Example|Example]] ([[User talk:Example|talk]]) 05:48, 9 April 2026 (UTC)
=== Last subsection ===
test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 14:56, 14 September 2025 (UTC)
: Comment [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 09:24, 31 March 2026 (UTC)
:: Comment [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 09:25, 31 March 2026 (UTC)
::: Comment beginning
Comment ending [[User:Example|Example]] ([[User talk:Example|talk]]) 09:34, 31 March 2026 (UTC)
== Section to add test comments ==
section [[User:Example|Example]] ([[User talk:Example|talk]]) 02:37, 1 March 2026 (UTC)
: Test comment with random number 0.08406505844874512 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:32, 16 March 2026 (UTC)
: Test. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:16, 16 March 2026 (UTC)
: Test. test3 [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 18:17, 16 March 2026 (UTC)
: Test comment with random number 0.8357927622675184 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC)
: Test comment with random number 0.47460188540542925 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 18:53, 16 March 2026 (UTC)
: Test comment with random number 0.687062002939545 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:03, 23 March 2026 (UTC)
: Test comment with random number 0.21500952410025898 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 12:22, 23 March 2026 (UTC)
: Test comment with random number 0.6571328205265842 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:21, 23 March 2026 (UTC)
: Test comment with random number 0.8725721668943434 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:21, 24 March 2026 (UTC)
: Test comment with random number 0.9535110784110594 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 11:22, 24 March 2026 (UTC)
: Test comment with random number 0.4330065153484025 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 03:55, 27 March 2026 (UTC)
: Test comment with random number 0.7353033907097808 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC)
: Test comment with random number 0.44304195516553146 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:23, 27 March 2026 (UTC)
: Test comment with random number 0.02243804450899023 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC)
: Test comment with random number 0.520846091950367 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:24, 27 March 2026 (UTC)
: Test comment with random number 0.9946058761624214 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:25, 27 March 2026 (UTC)
: Test comment with random number 0.1691580237328757 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:28, 27 March 2026 (UTC)
: Test comment with random number 0.06490355868980668 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:30, 27 March 2026 (UTC)
: Test comment with random number 0.9392023221346153 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 10:32, 27 March 2026 (UTC)
: Test comment with random number 0.5537697536904882 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 16:38, 1 April 2026 (UTC)
: Test comment with random number 0.470848341599752 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:14, 1 April 2026 (UTC)
: Test comment with random number 0.41673313374066356 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:15, 1 April 2026 (UTC)
: Test comment with random number 0.671732439038764 [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 17:35, 1 April 2026 (UTC)
:testtt [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 07:10, 7 April 2026 (UTC)
: test [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 17:59, 7 April 2026 (UTC)
== Section with equals sign (=) for moving ==
<div class="cd-moveMark">''Moved to [[User talk:JWBTH/CD test page 2#Section with equals sign ({{=}}) for moving]]. [[User:JWBTH|JWBTH]] ([[User talk:JWBTH|talk]]) 13:40, 1 April 2026 (UTC)''</div>
== Section for moving ==
test [[User:Test account 8|Test account 8]] ([[User talk:Test account 8|talk]]) 19:52, 15 March 2026 (UTC)
ohhlwhuciu3wdqnfzcwawcu2019d1y4
Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Protección de artículos/Actual
4
169152
737593
728714
2026-04-11T14:14:04Z
Nacaru
54746
/* Wikipédia:Escolha do artigo em destaque/e */ Solicitando protección de [[Wikipédia:Escolha do artigo em destaque/e]] mediante [[WP:Twinkle Lite|Twinkle Lite]]
737593
wikitext
text/x-wiki
<noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}}
{{Archivado automático
|Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Protección de artículos/AAAA/MM
|Días a mantener=3
}}
</noinclude>
== [[Línea A del Metro de Santiago]] ==
;Artículo(s)
* {{a|Línea A del Metro de Santiago}}
;Causa
Vandalismo reiterado por parte de anónimos.
; Usuario que lo solicita
* [[Usuario:Aroblesm|Aroblesm]] ([[Usuario Discusión:Aroblesm|discusión]]) 13:28 18 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}, ¿dónde está el vandalismo, {{u|Aroblesm}}?|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:26 19 nov 2025 (UTC)}}
== Vive Claro ==
;Artículo(s)
* {{a|Vive Claro}}
;Causa
Constantes ediciones vandálicas del artículo, mostrando posturas políticas y quitándole la neutralidad al mismo.
;Usuario que lo solicita
* [[Usuario:Futbolero44|Futbolero44]] ([[Usuario Discusión:Futbolero44|discusión]]) 19:12 18 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}, única cuenta anónima vandálica ya bloqueada|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:29 19 nov 2025 (UTC)}}
== Michael Kast ==
;Artículo(s)
* {{a|Michael Kast}}
;Causa
Vandalismo reiterado.
;Usuario que lo solicita
* [[Usuario:Sfs90|Sfs90]] ([[Usuario Discusión:Sfs90|discusión]]) 20:55 18 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 semanas''' por '''Edslov'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 01:31 19 nov 2025 (UTC)
== Ildefonso Cerdá ==
;Artículo(s)
* {{a|Ildefonso Cerdá}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 08:42 19 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''3 días''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 21:41 19 nov 2025 (UTC)
== Ricardo Arroyo ==
;Artículo(s)
* {{a|Ricardo Arroyo}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 10:24 19 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 21:41 19 nov 2025 (UTC)
== [[Miguel Herrera]] ==
;Artículo(s)
* {{a|Miguel Herrera}}
;Causa
Costa Rica, selección que dirige Miguel Herrera, no calificó al próximo Mundial de Fútbol. El artículo continuará sufriendo vandalismo por lo que solicito semiprotección corta. Gracias.
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 15:21 19 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 meses''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 19:51 19 nov 2025 (UTC)
== [[Felipe Gamer]] ==
;Artículo(s)
* {{a|Felipe Gamer}}
;Causa
Página creada para vandalizar.
; Usuario que lo solicita
* [[Usuario:Goolwiki|Gool]] ([[Usuario Discusión:Goolwiki|discusión]]) 18:28 19 nov 2025 (UTC)
;Respuesta
{{admintab|{{no}}. No existe tal cosa. Si algo, reiteradas creaciones de página borrada, pero este no es el caso. Saludos.
|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 19:46 19 nov 2025 (UTC)}}
== Blessd ==
;Artículo(s)
* {{a|Blessd}}
;Causa
Vandalismo de cuentas temporales.
;Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 18:43 19 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 meses''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 19:51 19 nov 2025 (UTC)
== «Rodrigo Narváez» y «Bobicraft» ==
;Artículo
* {{a|Bobicraft}}
;Causa
Esta página fue protegida en 2023 debido a las recreaciones sin relevancia reiteradas. Para evadir dicha protección, un usuario ya bloqueado creó hace unos meses de manera irregular el artículo [[Rodrigo Narváez]], usando el nombre real del sujeto sin haber consultado aquí. A pesar de eso, considero que la versión actual de este último artículo es más apropiada para Wikipedia y solicito la desprotección del primero para realizar un traslado o redirección conforme a [[WP:UNC]].
;Usuario que lo solicita
* [[Usuario:ManuelJünior7000|ManuelJünior7000]] ([[Usuario Discusión:ManuelJünior7000|discusión]]) 20:57 19 nov 2025 (UTC)
;Respuesta
{{admintab|Hola. Se abrirá una consulta de borrado al respecto (lo puedes hacer tú, o lo hago yo hoy o mañana). Saludos.
|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 21:17 20 nov 2025 (UTC)}}
== [[Andrés Gariano]] ==
;Artículo(s)
* {{a|Andrés Gariano}}
;Causa
Ediciones vandálicas, por parte de unas IPs como se muestra: [https://es.wikipedia.org/w/index.php?title=Andr%C3%A9s_Gariano&diff=prev&oldid=170566760 Aquí], [https://es.wikipedia.org/w/index.php?title=Andr%C3%A9s_Gariano&diff=prev&oldid=170567166 aquí], y [https://es.wikipedia.org/w/index.php?title=Andr%C3%A9s_Gariano&diff=prev&oldid=170568449 aquí], han frenado, pero si no hay una intervención pronto, es muy posible que continue el vandalismo.
; Usuario que lo solicita
* [[User:Eddy Wardian|<b style="color:#D4D4D4;" >Eddy Wardian</b>]] [[File:Media-skip-forward.svg|16px]] [[File:Mail-closed.svg|12px|link=User talk:Eddy Wardian]] [[File:Media-skip-backward.svg|16px]] 06:38 20 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 semanas''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 21:16 20 nov 2025 (UTC)
== Dolph Ziggler ==
;Artículo(s)
* {{a|Dolph Ziggler}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 15:23 20 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 21:16 20 nov 2025 (UTC)
== [[Usuario discusión:SuperPianoMan9167]] ==
;Artículo(s)
* {{a|Usuario discusión:SuperPianoMan9167}}
;Causa
Acoso al usuario
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 21:56 20 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 semanas''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 22:16 20 nov 2025 (UTC)
== Juan Manuel del Mar Estremadoyro ==
;Artículo(s)
* {{a|Juan Manuel del Mar Estremadoyro}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 22:24 20 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 22:36 20 nov 2025 (UTC)
== Big Brother Brasil ==
;Artículo(s)
* {{a|Big Brother Brasil}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 23:51 20 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 semanas''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 00:01 21 nov 2025 (UTC)
== [[Big Brother Brasil]] ==
;Artículo(s)
* {{a|Big Brother Brasil}}
;Causa
Guerra de ediciones.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 23:56 20 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 semanas''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 00:01 21 nov 2025 (UTC)
== [[Patxi Aldabaldetrecu]] ==
;Artículo(s)
* {{a|Patxi Aldabaldetrecu}}
;Causa
Proteger contra recreación por recreaciones sin relevancia enciclopédica.
; Usuario que lo solicita
* [[Usuario:Leonpolanco|<span style="color:Chocolate">Леон Поланко</span>]] <u>[[Usuario discusión:Leonpolanco|<span style="color:Maroon">говорит вам и слушает вас</span>]]</u> 03:44 21 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida '''indefinidamente''' por '''Edslov'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 03:56 21 nov 2025 (UTC)
== Semiprotección de [[Guerra de Gaza]] ==
;Artículo(s)
* {{a|Guerra de Gaza}}
;Causa
Dirección temporal insiste en cambiar el contenido, incluyendo texto referenciado. Es un tema controvertido.
;Usuario que lo solicita
* [[Usuario:Sahaquiel9102|Sahaquiel]] - <sup>[[Usuario Discusión:Sahaquiel9102|Glaubst du auch, dass wir uns wiedersehen?]]</sup>[[Archivo:Hattrick Farallones Blazono.png|45px]] 05:12 21 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}, cuenta temporal bloqueada. Para casos así, {{u|Sahaquiel9102}}, puedes denunciar la cuenta en [[WP:VEC]].|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 05:14 21 nov 2025 (UTC)}}
== Álvaro García Ortiz ==
;Artículo(s)
* {{a|Álvaro García Ortiz}}
;Causa
Ayer se anunció que sería condenado e inhabilitado y hay continuas ediciones arbitrarias. La sentencia no está redactada, ni publicada, ni comunicada a las partes y, mucho menos, ejecutada, lo que llevará su tiempo. Mientras tanto, sigue en su cargo. ¿Podemos proteger la página un par de semanas? Gracias.
;Usuario que lo solicita
* [[Usuario:TheRichic|TheRichic]] [[Imagen:Escudo de España (mazonado).svg|12px]] ''<small>([[Usuario Discusión:TheRichic|Mensajes aquí]])</small> 08:46 21 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 mes''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 12:26 21 nov 2025 (UTC)
== [[Álvaro García Ortiz]] ==
;Artículo(s)
* {{a|Álvaro García Ortiz}}
;Causa
Adición frecuente de información apresurada y sin referenciar, propiciado por encontrarse el biografiado en el centro del foco mediático. Véase historial.
; Usuario que lo solicita
* [[Usuario:Nacaru|Nacaru]] [[Archivo:Noto Emoji KitKat 2601.svg|19px]] ([[Usuario_discusión:Nacaru|discusión]]) 12:12 21 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 mes''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 12:26 21 nov 2025 (UTC)
== Habilitación de artículo y traslado ==
;Artículo(s)
* {{a|Deportivo LSM}}
;Causa
* Hola! Quiero que desprotejan ese artículo, les explico el porqué:
Anteriormente existía el artículo "[[Deportivo Lsm]]", pero que [[Usuaria:Baji|Baji]] se encargó de trasladarlo a otro [[Usuario:Manchuco/Deportivo_Lsm|espacio]] luego de una petición de traslado a "[[Deportivo LSM]]" (razón: error en el título), además, el usuario quien creó el artículo, [[Usuario:Manchuco|Manchuco]], creó un ítem de wikidata sobre este ([[wikidata:Q136333060|ítem duplicado]]), pero ya existía como "[[wikidata:Q134589368|Deportivo LSM]]".
Pido que puedan habilitar "[[Deportivo LSM]]" para poder trasladar el artículo con el título corregido con el identificador correspondiente.
Gracias!
;Usuario que lo solicita
* [[Usuario:Leoconbass|Leo]] ([[Usuario Discusión:Leoconbass|discusión]]) 16:30 21 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}, se puede solicitar la desprotección cuando el artículo esté en condiciones. Actualmente necesita trabajo para mejorar la redacción tan promocional que tiene.|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:29 26 nov 2025 (UTC)}}
== Copa Davis ==
;Artículo(s)
* {{a|Copa Davis}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 19:13 21 nov 2025 (UTC)
;Respuesta
{{No}}. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 20:09 23 nov 2025 (UTC)
== Juan Carlos Martín Ramos ==
;Artículo(s)
* {{a|Juan Carlos Martín Ramos}}
;Causa
Adición masiva de material auto-promocional en las últimas 48 horas (véase [https://es.wikipedia.org/w/index.php?title=Juan_Carlos_Mart%C3%ADn_Ramos&action=history historial]).
;Usuario que lo solicita
* [[Usuario:CFA1877|CFA1877]] ([[Usuario Discusión:CFA1877|discusión]]) 21:05 21 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Edslov'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 01:01 22 nov 2025 (UTC)
== Canal (á) ==
;Artículo(s)
* {{a|Canal (á)}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 22:33 21 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:01 26 nov 2025 (UTC)}}
== Estadio Gran Parque Central ==
;Artículo(s)
* {{a|Estadio Gran Parque Central}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 17:11 22 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''6 meses''' por '''Montgomery'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 17:36 22 nov 2025 (UTC)
== [[Buses Vule]] ==
;Artículo(s)
* {{a|Buses Vule}}
;Causa
Insistencia de anónimos en cambiar la información no respetando las referencias.
; Usuario que lo solicita
* [[Usuario:Aroblesm|Aroblesm]] ([[Usuario Discusión:Aroblesm|discusión]]) 19:50 22 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 meses''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 21:01 22 nov 2025 (UTC)
== [[Anexo:Unidad de negocio 3 de Red]] ==
;Artículo(s)
* {{a|Anexo:Unidad de negocio 3 de Red}}
;Causa
Insistencia de anónimos en cambiar la información no respetando las referencias.
; Usuario que lo solicita
* [[Usuario:Aroblesm|Aroblesm]] ([[Usuario Discusión:Aroblesm|discusión]]) 19:51 22 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 mes''' por '''Eduardosalg'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 20:01 22 nov 2025 (UTC)
== Copa Sudamericana ==
;Artículo(s)
* {{a|Copa Sudamericana}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 23:02 22 nov 2025 (UTC)
;Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:03 26 nov 2025 (UTC)}}
== Club Nacional de Football ==
;Artículo(s)
* {{a|Club Nacional de Football}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 00:44 23 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''6 meses''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 01:31 23 nov 2025 (UTC)
== Miss Universo ==
;Artículo(s)
* {{a|Miss Universo}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 05:19 23 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Rafstr'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 05:36 23 nov 2025 (UTC)
== IndyCar Series ==
;Artículo(s)
* {{a|IndyCar Series}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 07:54 23 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:06 26 nov 2025 (UTC)}}
== Club Atlético Barracas Central ==
;Artículo(s)
* {{a|Club Atlético Barracas Central}}
;Causa
Artículo siendo vandalizado.
; Usuario que lo solicita
* [[User:Eddy Wardian|<b style="color:#D4D4D4;">Eddy Wardian</b>]] [[File:Media-skip-forward.svg|16px]] [[File:Mail-closed.svg|12px|link=User talk:Eddy Wardian]] [[File:Media-skip-backward.svg|16px]] 09:39 23 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 mes''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 12:06 23 nov 2025 (UTC)
== Nuevas Ideas con Libertad ==
;Artículo(s)
* [[Nuevas Ideas con Libertad]]
;Causa
Vandalismo, insistencia de anónimos en cambiar la información no respetando las referencias.
; Usuario que lo solicita
* [[Usuario:Damon899|Damon899]] ([[Usuario Discusión:Damon899|discusión]]) 22:33 21 nov 2025 (UTC)
;Respuesta
{{admintab|1={{Hecho|1=Protegido}} por 1 semana. Sin embargo, {{u|Damon899}}, el artículo necesita muchas mejoras y la urgente adición de referencias.|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:15 26 nov 2025 (UTC)}}
== [[Anexo:Torneo clasificatorio para la Copa Mundial de Fútbol de 2026]] ==
;Artículo(s)
* {{a|Anexo:Torneo clasificatorio para la Copa Mundial de Fútbol de 2026}}
;Causa
Hay usuarios ip qué ponen en la categoría o sección de Clasificados añaden una fecha especulativa cuando ni siquiera empezó el torneo.
; Usuario que lo solicita
* '''[[Usuario:User34790|<span style="font-size:blue 3px 1px 3px; font-variant:Corbel; color:blue; text-shadow:white 2px 1px 2px">User34790</span>]]''' [[Usuario discusión:User34790|<span style="font-size:100%;color: pink;">'''(discusión)'''</span>]] 15:50 23 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 semanas''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 20:26 23 nov 2025 (UTC)
== Carretera Central de Cuba ==
;Artículo(s)
* {{a|Carretera Central de Cuba}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 19:05 23 nov 2025 (UTC)
;Respuesta
{{admintab|{{no}} por ahora. |--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 20:19 23 nov 2025 (UTC)}}
== Noemí Sabugal ==
;Artículo(s)
* {{a|Noemí Sabugal}}
;Causa
Adición masiva de contenido promocional. Nótese que [https://es.wikipedia.org/wiki/Especial:Contribuciones/LITERESP la cuenta] que está detrás de los cambios únicamente ha editado este artículo desde que creó la cuenta en 2020, y que insiste en reintroducir el contenido promocional a pesar de que son ya varios los usuarios que le han revertido ([https://es.wikipedia.org/w/index.php?title=Noem%C3%AD_Sabugal&diff=prev&oldid=170622412 1], [https://es.wikipedia.org/w/index.php?title=Noem%C3%AD_Sabugal&diff=prev&oldid=170622412 2]), sin que atienda a razones.
;Usuario que lo solicita
* [[Usuario:CFA1877|CFA1877]] ([[Usuario Discusión:CFA1877|discusión]]) 19:29 23 nov 2025 (UTC)
;Respuesta
{{admintab|{{no}} vamos a proteger por una disputa editorial cuando ya intervino dos veces un bibliotecario. |--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 20:14 23 nov 2025 (UTC)}}
== [[Fátima Bosch]] ==
;Artículo(s)
* {{a|Fátima Bosch}}
;Causa
Vandalismo
; Usuario que lo solicita
* —<span style="font-family:Trebuchet MS;font-size:95%">[[Usuario:Mαrti|<span style="color:#636;">Mαrti</span>]] <span style="color;background:#CBE2F7;border-radius:9px;"> [[Usuario discusión:Mαrti|'''ϟ''']] </span></span> 20:33 23 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 semanas''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 20:46 23 nov 2025 (UTC)
== [[La Maroma]] ==
;Artículo(s)
* {{a|La Maroma}}
;Causa
Eliminación de información referenciada por parte de varios usuarios
; Usuario que lo solicita
* [[Usuario:Casisgaal|<span style="font-size:black 3px 1px 3px; font-variant:Corbel; color:blue; text-shadow:cyan 2px 1px 2px">Casisgaal</span>]] [[Usuario discusión:Casisgaal|(Discusión)]] 21:51 23 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 días''' por '''Rafstr'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 05:01 24 nov 2025 (UTC)
== [[Pene]] ==
;Artículo(s)
* {{a|Pene}}
;Causa
Vandalismo
; Usuario que lo solicita
* [[Usuario:Jh38|Jh38]] ([[Usuario Discusión:Jh38|discusión]]) 01:21 24 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Rafstr'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 01:26 24 nov 2025 (UTC)
== Título de la solicitud ==
;Artículo(s)
* {{a|BTS}}
;Causa
Ediciones vandálicas con mofa en el artículo [[BTS]] por parte de IPs.
;Usuario que lo solicita
* [[Usuario:Pichu VI|Pichu VI]] ([[Usuario Discusión:Pichu VI|discusión]]) 13:09 24 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''3 meses''' por '''Rafstr'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 15:26 24 nov 2025 (UTC)
== [[BTS]] ==
;Artículo(s)
* {{a|BTS}}
;Causa
Un usuario ip empezó a hacer guerras de ediciónes con los usuarios User34790 y Pichu VI
; Usuario que lo solicita
* '''[[Usuario:User34790|<span style="font-size:black 3px 1px 3px; font-variant:Corbel; color:black; text-shadow:white 2px 1px 2px">User34790</span>]]''' [[Usuario discusión:User34790|(página de discusión)]] [[File:User hello.png|30px]] 13:46 24 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''3 meses''' por '''Rafstr'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 15:26 24 nov 2025 (UTC)
== Adolfo Cambiaso ==
;Artículo(s)
* {{a|Adolfo Cambiaso}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 15:27 24 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}, vándalos bloqueados.|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:18 26 nov 2025 (UTC)}}
== [[Enfermería]] ==
;Artículo(s)
* {{a|Enfermería}}
;Causa
Reiteradas creaciones de posibles LTA.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 20:50 24 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Edslov'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 03:21 26 nov 2025 (UTC)
== María Escribano ==
;Artículo(s)
* {{a|María Escribano}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 21:22 24 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:24 26 nov 2025 (UTC)}}
== [[Copa Davis]] ==
;Artículo(s)
* {{a|Copa Davis}}
;Causa
Vandalismo reiterado.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 22:03 24 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Rafstr'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 23:36 24 nov 2025 (UTC)
== [[Miguel Hidalgo y Costilla]] ==
;Artículo(s)
* {{a|Miguel Hidalgo y Costilla}}
;Causa
Reaparecen los vandalismos de las cuentas temporales.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 22:06 24 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 año''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 22:21 24 nov 2025 (UTC)
== Vive Claro ==
;Artículo(s)
* {{a|Vive Claro}}
;Causa
Continúa las ediciones vandálicas del mismo usuario en el artículo, solicito por favor protección del mismo o un bloqueo más extensivo del usuario.
;Usuario que lo solicita
* [[Usuario:Futbolero44|Futbolero44]] ([[Usuario Discusión:Futbolero44|discusión]]) 14:48 25 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 15:26 25 nov 2025 (UTC)
== Israel en el Festival de la Canción de Eurovisión ==
;Artículo(s)
* {{a|Israel en el Festival de la Canción de Eurovisión}}
;Causa
Desde un entorno móvil se está realizando vandalismo al artículo
;Usuario que lo solicita
* [[Usuario:Elultimolicantropo|Elultimolicantropo]] ([[Usuario discusión:Elultimolicantropo|discusión]]) [[Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Protección de artículos/Actual#c-Elultimolicantropo-20251125161100-Israel en el Festival de la Canción de Eurovisión|16:11 25 nov 2025 (UTC)]]
;Respuesta
{{admintab|1={{No}}, una sola edición en todo el mes no justifica una semiprotección. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:22 26 nov 2025 (UTC)|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:22 26 nov 2025 (UTC)}}
== [[Wikipedia:Mes de Asia/2025]] ==
;Artículo(s)
* {{a|Wikipedia:Mes de Asia/2025}}
;Causa
La página sufre vandalismos días si, día también y teniendo en cuenta que solo pueden participar usuarios con cuenta. Rogaría su protección durante lo que queda de mes. Gracias
; Usuario que lo solicita
* [[Usuario:Términus|Términus]] ([[Usuario Discusión:Términus|discusión]]) 16:25 25 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Marcelo'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 16:31 25 nov 2025 (UTC)
== [[Shayna Baszler]] ==
;Artículo(s)
* {{a|Shayna Baszler}}
;Causa
Cambios de plantillas y enlaces a fechas, ediciones arbitrarias reiteradas
; Usuario que lo solicita
* [[Usuario:Casisgaal|<span style="font-size:black 3px 1px 3px; font-variant:Corbel; color:blue; text-shadow:cyan 2px 1px 2px">Casisgaal</span>]] [[Usuario discusión:Casisgaal|(Discusión)]] 19:05 25 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''3 días''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 20:11 25 nov 2025 (UTC)
== [[Hasbulla]] ==
;Artículo(s)
* {{a|Hasbulla}}
;Causa
Vandalismo reiterado.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 21:23 25 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 mes''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 21:36 25 nov 2025 (UTC)
== Cartujo (gato) ==
;Artículo(s)
* {{a|Cartujo (gato)}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 21:35 25 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 22:06 25 nov 2025 (UTC)
== [[Retos Virales de Tiktok]] ==
;Artículo(s)
* {{a|Retos Virales de Tiktok}}
;Causa
Es muy posible que otra persona intente crear la página aunque no tenga relevancia enciclopédica
; Usuario que lo solicita
* [[Usuario:Goolwiki|Gool]] ([[Usuario Discusión:Goolwiki|discusión]]) 22:50 25 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}} por ahora. El hecho de que el artículo haya sido borrado una vez no implica necesariamente que creaciones futuras vayan a carecer también de relevancia. Un saludo.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:46 26 nov 2025 (UTC)}}
== TyC Sports ==
;Artículo(s)
* {{a|TyC Sports}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 00:13 26 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''3 días''' por '''Rafstr'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 00:51 26 nov 2025 (UTC)
== [[Línea 7 del Metro de Santiago]] ==
;Artículo(s)
* {{a|Línea 7 del Metro de Santiago}}
;Causa
Vandalismo de anónimos. Insistencia en insertar contenido irrelevante.
; Usuario que lo solicita
* [[Usuario:Aroblesm|Aroblesm]] ([[Usuario Discusión:Aroblesm|discusión]]) 00:26 26 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}. {{u|Aroblesm}}, no me queda claro porqué sería irrelevante y mucho menos «vandalismo» —quizá redactándolo de otra forma—, información basada en tres fuentes y confirmada por el Metro, sobre una máquina previamente mencionada en el artículo.|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:28 26 nov 2025 (UTC)}}
== RyuJin ==
;Artículo(s)
* {{a|RyuJin}}
;Causa
Vandalismo persistente
;Usuario que lo solicita
* [[Usuario:Niccolasa|Niccolasa]] ([[Usuario Discusión:Niccolasa|discusión]]) 17:30 26 nov 2025 (UTC)
;Respuesta
{{admintab|{{No}} es necesario. |[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 17:43 26 nov 2025 (UTC)}}
== David Luiz ==
;Artículo(s)
* {{a|David Luiz}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 18:53 26 nov 2025 (UTC)
;Respuesta
{{admintab|1=Prueba|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 22:37, 26 November 2025 (UTC)|3=}}
== Club Atlético Belgrano ==
;Artículo(s)
* {{a|Club Atlético Belgrano}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:TheProxy18|TheProxy18]] ([[Usuario Discusión:TheProxy18|discusión]]) 18:35 26 nov 2025 (UTC)
;Respuesta
{{admintab|1=Otra prueba más|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 22:40, 26 November 2025 (UTC)|3=}}
== [[Tabellone]] ==
;Artículo(s)
* {{a|Tabellone}}
;Causa
Prueba de nueva solicitud de protección.
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:14, 26 February 2026 (UTC)
;Respuesta
(a rellenar por un bibliotecario)
== [[U-3]] ==
;Artículo(s)
* {{a|U-3}}
;Causa
Prueba
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:16, 26 February 2026 (UTC)
;Respuesta
(a rellenar por un bibliotecario)
== [[Wikipédia:Escolha do artigo em destaque/e]] ==
;Artículo(s)
* {{a|Wikipédia:Escolha do artigo em destaque/e}}
;Causa
Esta es la razón
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 14:14, 11 April 2026 (UTC)
;Respuesta
(a rellenar por un bibliotecario)
fwfuct2zf1fe0omnbtcudaisp06x2s3
737594
737593
2026-04-11T14:14:31Z
Nacaru
54746
Resolviendo solicitud «[[Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Protección_de_artículos/Actual#Wikipédia:Escolha_do_artigo_em_destaque/e|Wikipédia:Escolha do artigo em destaque/e]]» mediante [[WP:TL|Twinkle Lite]]
737594
wikitext
text/x-wiki
<noinclude>{{Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Plantillas/Cabecera}}
{{Archivado automático
|Destino=Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Protección de artículos/AAAA/MM
|Días a mantener=3
}}
</noinclude>
== [[Línea A del Metro de Santiago]] ==
;Artículo(s)
* {{a|Línea A del Metro de Santiago}}
;Causa
Vandalismo reiterado por parte de anónimos.
; Usuario que lo solicita
* [[Usuario:Aroblesm|Aroblesm]] ([[Usuario Discusión:Aroblesm|discusión]]) 13:28 18 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}, ¿dónde está el vandalismo, {{u|Aroblesm}}?|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:26 19 nov 2025 (UTC)}}
== Vive Claro ==
;Artículo(s)
* {{a|Vive Claro}}
;Causa
Constantes ediciones vandálicas del artículo, mostrando posturas políticas y quitándole la neutralidad al mismo.
;Usuario que lo solicita
* [[Usuario:Futbolero44|Futbolero44]] ([[Usuario Discusión:Futbolero44|discusión]]) 19:12 18 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}, única cuenta anónima vandálica ya bloqueada|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 01:29 19 nov 2025 (UTC)}}
== Michael Kast ==
;Artículo(s)
* {{a|Michael Kast}}
;Causa
Vandalismo reiterado.
;Usuario que lo solicita
* [[Usuario:Sfs90|Sfs90]] ([[Usuario Discusión:Sfs90|discusión]]) 20:55 18 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 semanas''' por '''Edslov'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 01:31 19 nov 2025 (UTC)
== Ildefonso Cerdá ==
;Artículo(s)
* {{a|Ildefonso Cerdá}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 08:42 19 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''3 días''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 21:41 19 nov 2025 (UTC)
== Ricardo Arroyo ==
;Artículo(s)
* {{a|Ricardo Arroyo}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 10:24 19 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 21:41 19 nov 2025 (UTC)
== [[Miguel Herrera]] ==
;Artículo(s)
* {{a|Miguel Herrera}}
;Causa
Costa Rica, selección que dirige Miguel Herrera, no calificó al próximo Mundial de Fútbol. El artículo continuará sufriendo vandalismo por lo que solicito semiprotección corta. Gracias.
; Usuario que lo solicita
* [[Usuario:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">'''Mauricio C.'''</span>]] [[Usuario discusión:Mauricio C.|<span style="font-family:Helvetica; color:#3d9c06">(discusión)</span>]] 15:21 19 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 meses''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 19:51 19 nov 2025 (UTC)
== [[Felipe Gamer]] ==
;Artículo(s)
* {{a|Felipe Gamer}}
;Causa
Página creada para vandalizar.
; Usuario que lo solicita
* [[Usuario:Goolwiki|Gool]] ([[Usuario Discusión:Goolwiki|discusión]]) 18:28 19 nov 2025 (UTC)
;Respuesta
{{admintab|{{no}}. No existe tal cosa. Si algo, reiteradas creaciones de página borrada, pero este no es el caso. Saludos.
|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 19:46 19 nov 2025 (UTC)}}
== Blessd ==
;Artículo(s)
* {{a|Blessd}}
;Causa
Vandalismo de cuentas temporales.
;Usuario que lo solicita
* '''[[Usuario:Taichi|Taichi]] [[Usuario Discusión:Taichi|〒]]''' 18:43 19 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 meses''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 19:51 19 nov 2025 (UTC)
== «Rodrigo Narváez» y «Bobicraft» ==
;Artículo
* {{a|Bobicraft}}
;Causa
Esta página fue protegida en 2023 debido a las recreaciones sin relevancia reiteradas. Para evadir dicha protección, un usuario ya bloqueado creó hace unos meses de manera irregular el artículo [[Rodrigo Narváez]], usando el nombre real del sujeto sin haber consultado aquí. A pesar de eso, considero que la versión actual de este último artículo es más apropiada para Wikipedia y solicito la desprotección del primero para realizar un traslado o redirección conforme a [[WP:UNC]].
;Usuario que lo solicita
* [[Usuario:ManuelJünior7000|ManuelJünior7000]] ([[Usuario Discusión:ManuelJünior7000|discusión]]) 20:57 19 nov 2025 (UTC)
;Respuesta
{{admintab|Hola. Se abrirá una consulta de borrado al respecto (lo puedes hacer tú, o lo hago yo hoy o mañana). Saludos.
|2= <span style="font: bold 13px Verdana;">[[Usuario:Virum Mundi|νιяυм]] ‹[[Usuario_discusión:Virum_Mundi|мυη∂ι]]›</span> 21:17 20 nov 2025 (UTC)}}
== [[Andrés Gariano]] ==
;Artículo(s)
* {{a|Andrés Gariano}}
;Causa
Ediciones vandálicas, por parte de unas IPs como se muestra: [https://es.wikipedia.org/w/index.php?title=Andr%C3%A9s_Gariano&diff=prev&oldid=170566760 Aquí], [https://es.wikipedia.org/w/index.php?title=Andr%C3%A9s_Gariano&diff=prev&oldid=170567166 aquí], y [https://es.wikipedia.org/w/index.php?title=Andr%C3%A9s_Gariano&diff=prev&oldid=170568449 aquí], han frenado, pero si no hay una intervención pronto, es muy posible que continue el vandalismo.
; Usuario que lo solicita
* [[User:Eddy Wardian|<b style="color:#D4D4D4;" >Eddy Wardian</b>]] [[File:Media-skip-forward.svg|16px]] [[File:Mail-closed.svg|12px|link=User talk:Eddy Wardian]] [[File:Media-skip-backward.svg|16px]] 06:38 20 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 semanas''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 21:16 20 nov 2025 (UTC)
== Dolph Ziggler ==
;Artículo(s)
* {{a|Dolph Ziggler}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 15:23 20 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 21:16 20 nov 2025 (UTC)
== [[Usuario discusión:SuperPianoMan9167]] ==
;Artículo(s)
* {{a|Usuario discusión:SuperPianoMan9167}}
;Causa
Acoso al usuario
; Usuario que lo solicita
* [[Usuario:Ontzak|'''Ontzak''']] [[Imagen:Flags of Bilbao and the Basque Country.png|15px]] (''[[User talk:Ontzak|'''Jo ta ke irabazi arte''']]'') 21:56 20 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 semanas''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 22:16 20 nov 2025 (UTC)
== Juan Manuel del Mar Estremadoyro ==
;Artículo(s)
* {{a|Juan Manuel del Mar Estremadoyro}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 22:24 20 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 22:36 20 nov 2025 (UTC)
== Big Brother Brasil ==
;Artículo(s)
* {{a|Big Brother Brasil}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 23:51 20 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 semanas''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 00:01 21 nov 2025 (UTC)
== [[Big Brother Brasil]] ==
;Artículo(s)
* {{a|Big Brother Brasil}}
;Causa
Guerra de ediciones.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 23:56 20 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 semanas''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 00:01 21 nov 2025 (UTC)
== [[Patxi Aldabaldetrecu]] ==
;Artículo(s)
* {{a|Patxi Aldabaldetrecu}}
;Causa
Proteger contra recreación por recreaciones sin relevancia enciclopédica.
; Usuario que lo solicita
* [[Usuario:Leonpolanco|<span style="color:Chocolate">Леон Поланко</span>]] <u>[[Usuario discusión:Leonpolanco|<span style="color:Maroon">говорит вам и слушает вас</span>]]</u> 03:44 21 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida '''indefinidamente''' por '''Edslov'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 03:56 21 nov 2025 (UTC)
== Semiprotección de [[Guerra de Gaza]] ==
;Artículo(s)
* {{a|Guerra de Gaza}}
;Causa
Dirección temporal insiste en cambiar el contenido, incluyendo texto referenciado. Es un tema controvertido.
;Usuario que lo solicita
* [[Usuario:Sahaquiel9102|Sahaquiel]] - <sup>[[Usuario Discusión:Sahaquiel9102|Glaubst du auch, dass wir uns wiedersehen?]]</sup>[[Archivo:Hattrick Farallones Blazono.png|45px]] 05:12 21 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}, cuenta temporal bloqueada. Para casos así, {{u|Sahaquiel9102}}, puedes denunciar la cuenta en [[WP:VEC]].|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 05:14 21 nov 2025 (UTC)}}
== Álvaro García Ortiz ==
;Artículo(s)
* {{a|Álvaro García Ortiz}}
;Causa
Ayer se anunció que sería condenado e inhabilitado y hay continuas ediciones arbitrarias. La sentencia no está redactada, ni publicada, ni comunicada a las partes y, mucho menos, ejecutada, lo que llevará su tiempo. Mientras tanto, sigue en su cargo. ¿Podemos proteger la página un par de semanas? Gracias.
;Usuario que lo solicita
* [[Usuario:TheRichic|TheRichic]] [[Imagen:Escudo de España (mazonado).svg|12px]] ''<small>([[Usuario Discusión:TheRichic|Mensajes aquí]])</small> 08:46 21 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 mes''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 12:26 21 nov 2025 (UTC)
== [[Álvaro García Ortiz]] ==
;Artículo(s)
* {{a|Álvaro García Ortiz}}
;Causa
Adición frecuente de información apresurada y sin referenciar, propiciado por encontrarse el biografiado en el centro del foco mediático. Véase historial.
; Usuario que lo solicita
* [[Usuario:Nacaru|Nacaru]] [[Archivo:Noto Emoji KitKat 2601.svg|19px]] ([[Usuario_discusión:Nacaru|discusión]]) 12:12 21 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 mes''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 12:26 21 nov 2025 (UTC)
== Habilitación de artículo y traslado ==
;Artículo(s)
* {{a|Deportivo LSM}}
;Causa
* Hola! Quiero que desprotejan ese artículo, les explico el porqué:
Anteriormente existía el artículo "[[Deportivo Lsm]]", pero que [[Usuaria:Baji|Baji]] se encargó de trasladarlo a otro [[Usuario:Manchuco/Deportivo_Lsm|espacio]] luego de una petición de traslado a "[[Deportivo LSM]]" (razón: error en el título), además, el usuario quien creó el artículo, [[Usuario:Manchuco|Manchuco]], creó un ítem de wikidata sobre este ([[wikidata:Q136333060|ítem duplicado]]), pero ya existía como "[[wikidata:Q134589368|Deportivo LSM]]".
Pido que puedan habilitar "[[Deportivo LSM]]" para poder trasladar el artículo con el título corregido con el identificador correspondiente.
Gracias!
;Usuario que lo solicita
* [[Usuario:Leoconbass|Leo]] ([[Usuario Discusión:Leoconbass|discusión]]) 16:30 21 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}, se puede solicitar la desprotección cuando el artículo esté en condiciones. Actualmente necesita trabajo para mejorar la redacción tan promocional que tiene.|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:29 26 nov 2025 (UTC)}}
== Copa Davis ==
;Artículo(s)
* {{a|Copa Davis}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 19:13 21 nov 2025 (UTC)
;Respuesta
{{No}}. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 20:09 23 nov 2025 (UTC)
== Juan Carlos Martín Ramos ==
;Artículo(s)
* {{a|Juan Carlos Martín Ramos}}
;Causa
Adición masiva de material auto-promocional en las últimas 48 horas (véase [https://es.wikipedia.org/w/index.php?title=Juan_Carlos_Mart%C3%ADn_Ramos&action=history historial]).
;Usuario que lo solicita
* [[Usuario:CFA1877|CFA1877]] ([[Usuario Discusión:CFA1877|discusión]]) 21:05 21 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Edslov'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 01:01 22 nov 2025 (UTC)
== Canal (á) ==
;Artículo(s)
* {{a|Canal (á)}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 22:33 21 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:01 26 nov 2025 (UTC)}}
== Estadio Gran Parque Central ==
;Artículo(s)
* {{a|Estadio Gran Parque Central}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 17:11 22 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''6 meses''' por '''Montgomery'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 17:36 22 nov 2025 (UTC)
== [[Buses Vule]] ==
;Artículo(s)
* {{a|Buses Vule}}
;Causa
Insistencia de anónimos en cambiar la información no respetando las referencias.
; Usuario que lo solicita
* [[Usuario:Aroblesm|Aroblesm]] ([[Usuario Discusión:Aroblesm|discusión]]) 19:50 22 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 meses''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 21:01 22 nov 2025 (UTC)
== [[Anexo:Unidad de negocio 3 de Red]] ==
;Artículo(s)
* {{a|Anexo:Unidad de negocio 3 de Red}}
;Causa
Insistencia de anónimos en cambiar la información no respetando las referencias.
; Usuario que lo solicita
* [[Usuario:Aroblesm|Aroblesm]] ([[Usuario Discusión:Aroblesm|discusión]]) 19:51 22 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 mes''' por '''Eduardosalg'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 20:01 22 nov 2025 (UTC)
== Copa Sudamericana ==
;Artículo(s)
* {{a|Copa Sudamericana}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 23:02 22 nov 2025 (UTC)
;Respuesta
{{admintab|1={{Hecho}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:03 26 nov 2025 (UTC)}}
== Club Nacional de Football ==
;Artículo(s)
* {{a|Club Nacional de Football}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 00:44 23 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''6 meses''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 01:31 23 nov 2025 (UTC)
== Miss Universo ==
;Artículo(s)
* {{a|Miss Universo}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 05:19 23 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Rafstr'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 05:36 23 nov 2025 (UTC)
== IndyCar Series ==
;Artículo(s)
* {{a|IndyCar Series}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 07:54 23 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:06 26 nov 2025 (UTC)}}
== Club Atlético Barracas Central ==
;Artículo(s)
* {{a|Club Atlético Barracas Central}}
;Causa
Artículo siendo vandalizado.
; Usuario que lo solicita
* [[User:Eddy Wardian|<b style="color:#D4D4D4;">Eddy Wardian</b>]] [[File:Media-skip-forward.svg|16px]] [[File:Mail-closed.svg|12px|link=User talk:Eddy Wardian]] [[File:Media-skip-backward.svg|16px]] 09:39 23 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 mes''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 12:06 23 nov 2025 (UTC)
== Nuevas Ideas con Libertad ==
;Artículo(s)
* [[Nuevas Ideas con Libertad]]
;Causa
Vandalismo, insistencia de anónimos en cambiar la información no respetando las referencias.
; Usuario que lo solicita
* [[Usuario:Damon899|Damon899]] ([[Usuario Discusión:Damon899|discusión]]) 22:33 21 nov 2025 (UTC)
;Respuesta
{{admintab|1={{Hecho|1=Protegido}} por 1 semana. Sin embargo, {{u|Damon899}}, el artículo necesita muchas mejoras y la urgente adición de referencias.|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:15 26 nov 2025 (UTC)}}
== [[Anexo:Torneo clasificatorio para la Copa Mundial de Fútbol de 2026]] ==
;Artículo(s)
* {{a|Anexo:Torneo clasificatorio para la Copa Mundial de Fútbol de 2026}}
;Causa
Hay usuarios ip qué ponen en la categoría o sección de Clasificados añaden una fecha especulativa cuando ni siquiera empezó el torneo.
; Usuario que lo solicita
* '''[[Usuario:User34790|<span style="font-size:blue 3px 1px 3px; font-variant:Corbel; color:blue; text-shadow:white 2px 1px 2px">User34790</span>]]''' [[Usuario discusión:User34790|<span style="font-size:100%;color: pink;">'''(discusión)'''</span>]] 15:50 23 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 semanas''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 20:26 23 nov 2025 (UTC)
== Carretera Central de Cuba ==
;Artículo(s)
* {{a|Carretera Central de Cuba}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 19:05 23 nov 2025 (UTC)
;Respuesta
{{admintab|{{no}} por ahora. |--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 20:19 23 nov 2025 (UTC)}}
== Noemí Sabugal ==
;Artículo(s)
* {{a|Noemí Sabugal}}
;Causa
Adición masiva de contenido promocional. Nótese que [https://es.wikipedia.org/wiki/Especial:Contribuciones/LITERESP la cuenta] que está detrás de los cambios únicamente ha editado este artículo desde que creó la cuenta en 2020, y que insiste en reintroducir el contenido promocional a pesar de que son ya varios los usuarios que le han revertido ([https://es.wikipedia.org/w/index.php?title=Noem%C3%AD_Sabugal&diff=prev&oldid=170622412 1], [https://es.wikipedia.org/w/index.php?title=Noem%C3%AD_Sabugal&diff=prev&oldid=170622412 2]), sin que atienda a razones.
;Usuario que lo solicita
* [[Usuario:CFA1877|CFA1877]] ([[Usuario Discusión:CFA1877|discusión]]) 19:29 23 nov 2025 (UTC)
;Respuesta
{{admintab|{{no}} vamos a proteger por una disputa editorial cuando ya intervino dos veces un bibliotecario. |--'''[[Usuario:Geom|<b style="padding: 3px 8px; background: linear-gradient(135deg, red, yellow); color: white; border-radius: 0px 7px 0px 7px">Geom</b>]]''' [[Usuario discusión:Geom|<span style="font-size:100%;color: brown;">'''(discusión)'''</span>]] 20:14 23 nov 2025 (UTC)}}
== [[Fátima Bosch]] ==
;Artículo(s)
* {{a|Fátima Bosch}}
;Causa
Vandalismo
; Usuario que lo solicita
* —<span style="font-family:Trebuchet MS;font-size:95%">[[Usuario:Mαrti|<span style="color:#636;">Mαrti</span>]] <span style="color;background:#CBE2F7;border-radius:9px;"> [[Usuario discusión:Mαrti|'''ϟ''']] </span></span> 20:33 23 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 semanas''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 20:46 23 nov 2025 (UTC)
== [[La Maroma]] ==
;Artículo(s)
* {{a|La Maroma}}
;Causa
Eliminación de información referenciada por parte de varios usuarios
; Usuario que lo solicita
* [[Usuario:Casisgaal|<span style="font-size:black 3px 1px 3px; font-variant:Corbel; color:blue; text-shadow:cyan 2px 1px 2px">Casisgaal</span>]] [[Usuario discusión:Casisgaal|(Discusión)]] 21:51 23 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''2 días''' por '''Rafstr'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 05:01 24 nov 2025 (UTC)
== [[Pene]] ==
;Artículo(s)
* {{a|Pene}}
;Causa
Vandalismo
; Usuario que lo solicita
* [[Usuario:Jh38|Jh38]] ([[Usuario Discusión:Jh38|discusión]]) 01:21 24 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Rafstr'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 01:26 24 nov 2025 (UTC)
== Título de la solicitud ==
;Artículo(s)
* {{a|BTS}}
;Causa
Ediciones vandálicas con mofa en el artículo [[BTS]] por parte de IPs.
;Usuario que lo solicita
* [[Usuario:Pichu VI|Pichu VI]] ([[Usuario Discusión:Pichu VI|discusión]]) 13:09 24 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''3 meses''' por '''Rafstr'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 15:26 24 nov 2025 (UTC)
== [[BTS]] ==
;Artículo(s)
* {{a|BTS}}
;Causa
Un usuario ip empezó a hacer guerras de ediciónes con los usuarios User34790 y Pichu VI
; Usuario que lo solicita
* '''[[Usuario:User34790|<span style="font-size:black 3px 1px 3px; font-variant:Corbel; color:black; text-shadow:white 2px 1px 2px">User34790</span>]]''' [[Usuario discusión:User34790|(página de discusión)]] [[File:User hello.png|30px]] 13:46 24 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''3 meses''' por '''Rafstr'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 15:26 24 nov 2025 (UTC)
== Adolfo Cambiaso ==
;Artículo(s)
* {{a|Adolfo Cambiaso}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 15:27 24 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}, vándalos bloqueados.|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:18 26 nov 2025 (UTC)}}
== [[Enfermería]] ==
;Artículo(s)
* {{a|Enfermería}}
;Causa
Reiteradas creaciones de posibles LTA.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 20:50 24 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Edslov'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 03:21 26 nov 2025 (UTC)
== María Escribano ==
;Artículo(s)
* {{a|María Escribano}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 21:22 24 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:24 26 nov 2025 (UTC)}}
== [[Copa Davis]] ==
;Artículo(s)
* {{a|Copa Davis}}
;Causa
Vandalismo reiterado.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 22:03 24 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Rafstr'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 23:36 24 nov 2025 (UTC)
== [[Miguel Hidalgo y Costilla]] ==
;Artículo(s)
* {{a|Miguel Hidalgo y Costilla}}
;Causa
Reaparecen los vandalismos de las cuentas temporales.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 22:06 24 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 año''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 22:21 24 nov 2025 (UTC)
== Vive Claro ==
;Artículo(s)
* {{a|Vive Claro}}
;Causa
Continúa las ediciones vandálicas del mismo usuario en el artículo, solicito por favor protección del mismo o un bloqueo más extensivo del usuario.
;Usuario que lo solicita
* [[Usuario:Futbolero44|Futbolero44]] ([[Usuario Discusión:Futbolero44|discusión]]) 14:48 25 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Geom'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 15:26 25 nov 2025 (UTC)
== Israel en el Festival de la Canción de Eurovisión ==
;Artículo(s)
* {{a|Israel en el Festival de la Canción de Eurovisión}}
;Causa
Desde un entorno móvil se está realizando vandalismo al artículo
;Usuario que lo solicita
* [[Usuario:Elultimolicantropo|Elultimolicantropo]] ([[Usuario discusión:Elultimolicantropo|discusión]]) [[Wikipedia:Tablón de anuncios de los bibliotecarios/Portal/Archivo/Protección de artículos/Actual#c-Elultimolicantropo-20251125161100-Israel en el Festival de la Canción de Eurovisión|16:11 25 nov 2025 (UTC)]]
;Respuesta
{{admintab|1={{No}}, una sola edición en todo el mes no justifica una semiprotección. [[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:22 26 nov 2025 (UTC)|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:22 26 nov 2025 (UTC)}}
== [[Wikipedia:Mes de Asia/2025]] ==
;Artículo(s)
* {{a|Wikipedia:Mes de Asia/2025}}
;Causa
La página sufre vandalismos días si, día también y teniendo en cuenta que solo pueden participar usuarios con cuenta. Rogaría su protección durante lo que queda de mes. Gracias
; Usuario que lo solicita
* [[Usuario:Términus|Términus]] ([[Usuario Discusión:Términus|discusión]]) 16:25 25 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Marcelo'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 16:31 25 nov 2025 (UTC)
== [[Shayna Baszler]] ==
;Artículo(s)
* {{a|Shayna Baszler}}
;Causa
Cambios de plantillas y enlaces a fechas, ediciones arbitrarias reiteradas
; Usuario que lo solicita
* [[Usuario:Casisgaal|<span style="font-size:black 3px 1px 3px; font-variant:Corbel; color:blue; text-shadow:cyan 2px 1px 2px">Casisgaal</span>]] [[Usuario discusión:Casisgaal|(Discusión)]] 19:05 25 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''3 días''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 20:11 25 nov 2025 (UTC)
== [[Hasbulla]] ==
;Artículo(s)
* {{a|Hasbulla}}
;Causa
Vandalismo reiterado.
; Usuario que lo solicita
* [[Usuario:Dinamino|Dinamino]] ([[Usuario Discusión:Dinamino|discusión]]) 21:23 25 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 mes''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 21:36 25 nov 2025 (UTC)
== Cartujo (gato) ==
;Artículo(s)
* {{a|Cartujo (gato)}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 21:35 25 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''1 semana''' por '''Virum Mundi'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 22:06 25 nov 2025 (UTC)
== [[Retos Virales de Tiktok]] ==
;Artículo(s)
* {{a|Retos Virales de Tiktok}}
;Causa
Es muy posible que otra persona intente crear la página aunque no tenga relevancia enciclopédica
; Usuario que lo solicita
* [[Usuario:Goolwiki|Gool]] ([[Usuario Discusión:Goolwiki|discusión]]) 22:50 25 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}} por ahora. El hecho de que el artículo haya sido borrado una vez no implica necesariamente que creaciones futuras vayan a carecer también de relevancia. Un saludo.|2=[[Usuario:Rafstr|<b style="background:black;color:#fff;font-size:90%;border-radius:5px 0 0 5px;padding:2px 5px;">Rafstr</b>]] [[Usuario discusión:Rafstr|<span style="font-size:80%;color: blue;">'''(discusión)'''</span>]] 00:46 26 nov 2025 (UTC)}}
== TyC Sports ==
;Artículo(s)
* {{a|TyC Sports}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 00:13 26 nov 2025 (UTC)
;Respuesta
[[Archivo:Locked.svg|20px|Página protegida|enlace=]] Página semiprotegida durante '''3 días''' por '''Rafstr'''. [[Usuario:Jembot|Jembot]] ([[Usuario Discusión:Jembot|discusión]]) 00:51 26 nov 2025 (UTC)
== [[Línea 7 del Metro de Santiago]] ==
;Artículo(s)
* {{a|Línea 7 del Metro de Santiago}}
;Causa
Vandalismo de anónimos. Insistencia en insertar contenido irrelevante.
; Usuario que lo solicita
* [[Usuario:Aroblesm|Aroblesm]] ([[Usuario Discusión:Aroblesm|discusión]]) 00:26 26 nov 2025 (UTC)
;Respuesta
{{admintab|1={{No}}. {{u|Aroblesm}}, no me queda claro porqué sería irrelevante y mucho menos «vandalismo» —quizá redactándolo de otra forma—, información basada en tres fuentes y confirmada por el Metro, sobre una máquina previamente mencionada en el artículo.|2=[[Usuario:Edslov|Edslov]] ([[Usuario Discusión:Edslov|discusión]]) 03:28 26 nov 2025 (UTC)}}
== RyuJin ==
;Artículo(s)
* {{a|RyuJin}}
;Causa
Vandalismo persistente
;Usuario que lo solicita
* [[Usuario:Niccolasa|Niccolasa]] ([[Usuario Discusión:Niccolasa|discusión]]) 17:30 26 nov 2025 (UTC)
;Respuesta
{{admintab|{{No}} es necesario. |[[Usuario:Saloca|Saloca]] ([[Usuario_Discusión:Saloca|<big>ངའི་གླེང་མོལ།</big>]]) 17:43 26 nov 2025 (UTC)}}
== David Luiz ==
;Artículo(s)
* {{a|David Luiz}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:SeroBOT|SeroBOT]] ([[Usuario Discusión:SeroBOT|discusión]]) 18:53 26 nov 2025 (UTC)
;Respuesta
{{admintab|1=Prueba|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 22:37, 26 November 2025 (UTC)|3=}}
== Club Atlético Belgrano ==
;Artículo(s)
* {{a|Club Atlético Belgrano}}
;Causa
Reversiones múltiples por posibles vandalismos.
; Usuario que lo solicita
* [[Usuario:TheProxy18|TheProxy18]] ([[Usuario Discusión:TheProxy18|discusión]]) 18:35 26 nov 2025 (UTC)
;Respuesta
{{admintab|1=Otra prueba más|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 22:40, 26 November 2025 (UTC)|3=}}
== [[Tabellone]] ==
;Artículo(s)
* {{a|Tabellone}}
;Causa
Prueba de nueva solicitud de protección.
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:14, 26 February 2026 (UTC)
;Respuesta
(a rellenar por un bibliotecario)
== [[U-3]] ==
;Artículo(s)
* {{a|U-3}}
;Causa
Prueba
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:16, 26 February 2026 (UTC)
;Respuesta
(a rellenar por un bibliotecario)
== [[Wikipédia:Escolha do artigo em destaque/e]] ==
;Artículo(s)
* {{a|Wikipédia:Escolha do artigo em destaque/e}}
;Causa
Esta es la razón
; Usuario que lo solicita
* [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 14:14, 11 April 2026 (UTC)
;Respuesta
{{admintab|1=Resuelvo esta protección|2=[[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 14:14, 11 April 2026 (UTC)|3=}}
imbgjqxhgpnjewzbzcyf2oys2dsgwry
Mainspace
0
171251
737680
737507
2026-04-11T19:55:59Z
Novem Linguae
49714
Replaced content with "Test"
737680
wikitext
text/x-wiki
Test
bop1vj5i98maix36pjrpgep1w6hnxfe
737681
737680
2026-04-11T19:56:16Z
Novem Linguae
49714
Nominated for deletion; see [[:Wikipedia:Articles for deletion/Mainspace (18th nomination)]].
737681
wikitext
text/x-wiki
<!-- Please do not remove or change this AfD message until the discussion has been closed. -->
{{AfDM|page=Mainspace (18th nomination)|year=2026|month=April|day=11|substed=yes|origtag=afdx|help=off}}
<!-- End of AfD message, feel free to edit beyond this point -->
Test
hb4j3mcj8012d7hii14c7xcbzbbv6kr
737685
737681
2026-04-11T19:56:43Z
Novem Linguae
49714
Nominated for deletion; see [[:Wikipedia:Articles for deletion/Mainspace (19th nomination)]].
737685
wikitext
text/x-wiki
<!-- Please do not remove or change this AfD message until the discussion has been closed. -->
{{AfDM|page=Mainspace (19th nomination)|year=2026|month=April|day=11|substed=yes|origtag=afdx|help=off|outcome=merging}}
<!-- End of AfD message, feel free to edit beyond this point -->
Test
a2f2cl2cpip1rc3n32a0tdkkto3qhvc
737734
737685
2026-04-12T09:15:38Z
Novem Linguae
49714
Nominated for deletion; see [[:Wikipedia:Articles for deletion/Mainspace (20th nomination)]].
737734
wikitext
text/x-wiki
<!-- Please do not remove or change this AfD message until the discussion has been closed. -->
{{AfDM|page=Mainspace (20th nomination)|year=2026|month=April|day=12|substed=yes|origtag=afdx|help=off|outcome=redirecting}}
<!-- End of AfD message, feel free to edit beyond this point -->
Test
bugr9esnvvqu30gflal0rjq4z6sdmay
737738
737734
2026-04-12T09:17:07Z
Novem Linguae
49714
Nominated for deletion; see [[:Wikipedia:Articles for deletion/Mainspace (21th nomination)]].
737738
wikitext
text/x-wiki
<!-- Please do not remove or change this AfD message until the discussion has been closed. -->
{{AfDM|page=Mainspace (21th nomination)|year=2026|month=April|day=12|substed=yes|origtag=afdx|help=off}}
<!-- End of AfD message, feel free to edit beyond this point -->
Test
n87nd2itj3u1yojftuppnvsjqfmzxl6
737742
737738
2026-04-12T10:05:36Z
Novem Linguae
49714
Nominated for deletion; see [[:Wikipedia:Articles for deletion/Mainspace (22th nomination)]].
737742
wikitext
text/x-wiki
<!-- Please do not remove or change this AfD message until the discussion has been closed. -->
{{AfDM|page=Mainspace (22th nomination)|year=2026|month=April|day=12|substed=yes|origtag=afdx|help=off|outcome=draftification}}
<!-- End of AfD message, feel free to edit beyond this point -->
Test
03l5trj2bqaml9i8o6jnwubsotec9s2
User:MrJaroslavik/GlobalCheckUserStats.js
2
174673
737580
737578
2026-04-11T12:37:17Z
MrJaroslavik
44012
e
737580
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit (essential for enwiki).
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800;
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php', { anonymous: true });
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const res = await api.get({
action: 'query', meta: 'siteinfo', siprop: 'statistics', formatversion: 2
});
return { active: res.query.statistics.activeusers || 0 };
} catch (e) { return { active: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await metaApi.get({
action: 'query', list: 'logevents', letype: 'gblrights', letitle: 'User:' + user, lelimit: 'max', formatversion: 2
});
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
logs.filter(l => { const ts = new Date(l.timestamp); return ts > auditStart && ts < auditEnd; }).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) { return { wasSteward: false, wasStaff: false, wasOmbuds: false }; }
}
async function fetchUserData(user, db, start, end) {
const auditStart = new Date(start), auditEnd = new Date(end);
if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward'), isGloballyStaff = gGroups.includes('staff'), isGloballyOmbuds = gGroups.includes('ombuds');
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) {}
const target = 'User:' + user + '@' + db;
let logText = '', addTime = null, removeTime = null, isSelfAssign = false, maxDurationMins = -1, longestTimeStr = "", assignCount = 0;
try {
const res = await metaApi.get({ action: 'query', list: 'logevents', letype: 'rights', letitle: target, ledir: 'newer', lelimit: 'max', formatversion: 2 });
const events = res.query.logevents || [];
let logEntries = [];
let pendingAdded = null;
const LIMIT_COMBINE_MINS = 43200;
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
const cuAdded = (p.add || []).includes('checkuser') || (p.newgroups || []).includes('checkuser');
const cuRemoved = (p.remove || []).includes('checkuser') || ((p.oldgroups || []).includes('checkuser') && !(p.newgroups || []).includes('checkuser'));
let expiryDate = null;
if (p.newmetadata && p.newmetadata[0] && p.newmetadata[0].expiry) {
expiryDate = new Date(p.newmetadata[0].expiry);
}
const eventDate = new Date(e.timestamp), exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
if (cuAdded || cuRemoved) {
if (cuAdded) addTime = eventDate;
if (cuRemoved) removeTime = eventDate;
const isSelf = (e.user === user || !e.user) ? " (Self-assign)" : "";
if (e.user === user || !e.user) isSelfAssign = true;
if (eventDate >= auditStart && eventDate <= auditEnd) {
if (cuAdded && expiryDate) {
const diffMins = Math.round(Math.abs(expiryDate - eventDate) / 60000);
if (!isNaN(diffMins)) {
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
logEntries.push(`* ${exactTime}: ADDED/EXPIRED by ${e.user}${isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
}
pendingAdded = null;
}
else if (cuAdded) {
if (pendingAdded) logEntries.push(`* ${pendingAdded.time}: ADDED by ${pendingAdded.user}${pendingAdded.isSelf} (Duration: Active/Not removed)`);
pendingAdded = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
}
else if (cuRemoved) {
if (pendingAdded) {
const diffMins = Math.round(Math.abs(eventDate - pendingAdded.date) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
if (diffMins <= LIMIT_COMBINE_MINS) {
logEntries.push(`* ${pendingAdded.time}: ADDED/REMOVED by ${pendingAdded.user}${pendingAdded.isSelf} (Duration: ${durStr})`);
} else {
logEntries.push(`* ${pendingAdded.time}: ADDED by ${pendingAdded.user}${pendingAdded.isSelf}`);
logEntries.push(`* ${exactTime}: REMOVED by ${e.user}${isSelf} (Duration: ${durStr})`);
}
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
pendingAdded = null;
} else {
logEntries.push(`* ${exactTime}: REMOVED by ${e.user}${isSelf}`);
}
}
}
}
}
if (pendingAdded) {
logEntries.push(`* ${pendingAdded.time}: ADDED by ${pendingAdded.user}${pendingAdded.isSelf} (Duration: Active/Not removed)`);
}
if (logEntries.length) logText = '\n' + logEntries.join('\n');
} catch (err) {}
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
let wasLocalInPeriod = (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart));
let gStat = isGloballyStaff ? "Staff" : isGloballySteward ? "Steward" : isGloballyOmbuds ? "Ombudsman" : "";
let roleLabel = "";
if (isCurrentLocal) roleLabel = "Current Local CheckUser" + (gStat ? ` (${gStat})` : "");
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
roleLabel = `Steward action (Self-assign: ${assignCount > 1 ? assignCount + 'x, longest ' : ''}${longestTimeStr})`;
}
else if (wasLocalInPeriod) {
let suffix = gStat ? ` (${gStat})` : (historyRes.wasSteward ? " (Former Steward)" : "");
roleLabel = "Former Local CheckUser (in period)" + suffix;
}
else if (longestTimeStr) roleLabel = `Temporary CU action (${longestTimeStr})`;
else if (gStat) roleLabel = `Current ${gStat}`;
else if (historyRes.wasSteward) roleLabel = "Former Steward (in period)";
else roleLabel = "Unknown role";
return { role: roleLabel, log: logText };
}
async function runAudit(yf, mf, yt, mt) {
isRunning = true; userCache = {}; historyCache = {}; results = {}; emptyWikis = []; failedWikis = []; scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
if (wikisToScan.length === 0) { alert("No wikis selected!"); return; }
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf), endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false, continueToken = null;
while (!successLocal && isRunning) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
let res = await api.get(params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) continueToken = res.continue;
else { if (!results[db]) emptyWikis.push(db); successLocal = true; }
} catch (err) { if (err?.status === 429) await sleep(30000); else { failedWikis.push(db); successLocal = true; } }
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const today = new Date().toISOString().split('T')[0];
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k active users ${monthCols.map(m => `!! ${m.label}`).join(' ')}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
const metrics = await fetchWikiMetrics(db);
const fmtActive = metrics.active.toLocaleString('en-US');
wt += `|-\n! colspan="${4 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${db} <small style="font-weight:normal; color:#54595d;">(Active Users as of ${today}: ${fmtActive})</small>\n`;
let wikiRows = [], wT = 0, wMS = {}; monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
const m = await fetchUserData(user, db, START, END);
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total; monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.active > 0 ? ((uD.total / metrics.active) * 1000).toFixed(1) : "0.0";
let row = `|-\n| style="text-align:left;" | ${user} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.active > 0 ? ((wT / metrics.active) * 1000).toFixed(1) : "0.0";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
drovqosl1kia6xqwuvwdz6ykh0t82u9
737581
737580
2026-04-11T12:54:36Z
MrJaroslavik
44012
e
737581
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit (essential for enwiki).
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800;
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php', { anonymous: true });
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const res = await api.get({
action: 'query', meta: 'siteinfo', siprop: 'statistics', formatversion: 2
});
return { active: res.query.statistics.activeusers || 0 };
} catch (e) { return { active: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await metaApi.get({
action: 'query', list: 'logevents', letype: 'gblrights', letitle: 'User:' + user, lelimit: 'max', formatversion: 2
});
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
logs.filter(l => { const ts = new Date(l.timestamp); return ts > auditStart && ts < auditEnd; }).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) { return { wasSteward: false, wasStaff: false, wasOmbuds: false }; }
}
async function fetchUserData(user, db, start, end) {
const auditStart = new Date(start), auditEnd = new Date(end);
if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward'), isGloballyStaff = gGroups.includes('staff'), isGloballyOmbuds = gGroups.includes('ombuds');
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) {}
const target = 'User:' + user + '@' + db;
let logText = '', addTime = null, removeTime = null, isSelfAssign = false, maxDurationMins = -1, longestTimeStr = "", assignCount = 0;
try {
const res = await metaApi.get({ action: 'query', list: 'logevents', letype: 'rights', letitle: target, ledir: 'newer', lelimit: 'max', formatversion: 2 });
const events = res.query.logevents || [];
let logEntries = [];
let pendingAdded = null;
const LIMIT_COMBINE_MINS = 43200;
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
const cuAdded = (p.add || []).includes('checkuser') || (p.newgroups || []).includes('checkuser');
const cuRemoved = (p.remove || []).includes('checkuser') || ((p.oldgroups || []).includes('checkuser') && !(p.newgroups || []).includes('checkuser'));
// Detekce expirace (pro automatické odebrání) - ignorujeme "infinity"
let expiryDate = null;
if (p.newmetadata && p.newmetadata[0] && p.newmetadata[0].expiry && p.newmetadata[0].expiry !== 'infinity') {
expiryDate = new Date(p.newmetadata[0].expiry);
}
const eventDate = new Date(e.timestamp), exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
if (cuAdded || cuRemoved) {
if (cuAdded) addTime = eventDate;
if (cuRemoved) removeTime = eventDate;
const isSelf = (e.user === user || !e.user) ? " (Self-assign)" : "";
if (e.user === user || !e.user) isSelfAssign = true;
if (eventDate >= auditStart && eventDate <= auditEnd) {
if (cuAdded && expiryDate) {
const diffMins = Math.round(Math.abs(expiryDate - eventDate) / 60000);
if (!isNaN(diffMins)) {
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
logEntries.push(`* ${exactTime}: ADDED/EXPIRED by ${e.user}${isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
}
pendingAdded = null;
}
else if (cuAdded) {
if (pendingAdded) logEntries.push(`* ${pendingAdded.time}: ADDED by ${pendingAdded.user}${pendingAdded.isSelf} (Duration: Active/Not removed)`);
pendingAdded = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
}
else if (cuRemoved) {
if (pendingAdded) {
const diffMins = Math.round(Math.abs(eventDate - pendingAdded.date) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
if (diffMins <= LIMIT_COMBINE_MINS) {
logEntries.push(`* ${pendingAdded.time}: ADDED/REMOVED by ${pendingAdded.user}${pendingAdded.isSelf} (Duration: ${durStr})`);
} else {
logEntries.push(`* ${pendingAdded.time}: ADDED by ${pendingAdded.user}${pendingAdded.isSelf}`);
logEntries.push(`* ${exactTime}: REMOVED by ${e.user}${isSelf} (Duration: ${durStr})`);
}
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
pendingAdded = null;
} else {
logEntries.push(`* ${exactTime}: REMOVED by ${e.user}${isSelf}`);
}
}
}
}
}
if (pendingAdded) {
logEntries.push(`* ${pendingAdded.time}: ADDED by ${pendingAdded.user}${pendingAdded.isSelf} (Duration: Active/Not removed)`);
}
if (logEntries.length) logText = '\n' + logEntries.join('\n');
} catch (err) {}
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
let wasLocalInPeriod = (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart));
let gStat = isGloballyStaff ? "Staff" : isGloballySteward ? "Steward" : isGloballyOmbuds ? "Ombudsman" : "";
let roleLabel = "";
if (isCurrentLocal) roleLabel = "Current Local CheckUser" + (gStat ? ` (${gStat})` : "");
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
roleLabel = `Steward action (Self-assign: ${assignCount > 1 ? assignCount + 'x, longest ' : ''}${longestTimeStr})`;
}
else if (wasLocalInPeriod) {
let suffix = gStat ? ` (${gStat})` : (historyRes.wasSteward ? " (Former Steward)" : "");
roleLabel = "Former Local CheckUser (in period)" + suffix;
}
else if (longestTimeStr) roleLabel = `Temporary CU action (${longestTimeStr})`;
else if (gStat) roleLabel = `Current ${gStat}`;
else if (historyRes.wasSteward) roleLabel = "Former Steward (in period)";
else roleLabel = "Unknown role";
return { role: roleLabel, log: logText };
}
async function runAudit(yf, mf, yt, mt) {
isRunning = true; userCache = {}; historyCache = {}; results = {}; emptyWikis = []; failedWikis = []; scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
if (wikisToScan.length === 0) { alert("No wikis selected!"); return; }
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf), endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false, continueToken = null;
while (!successLocal && isRunning) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
let res = await api.get(params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) continueToken = res.continue;
else { if (!results[db]) emptyWikis.push(db); successLocal = true; }
} catch (err) { if (err?.status === 429) await sleep(30000); else { failedWikis.push(db); successLocal = true; } }
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const today = new Date().toISOString().split('T')[0];
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k active users ${monthCols.map(m => `!! ${m.label}`).join(' ')}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
const metrics = await fetchWikiMetrics(db);
const fmtActive = metrics.active.toLocaleString('en-US');
wt += `|-\n! colspan="${4 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${db} <small style="font-weight:normal; color:#54595d;">(Active Users as of ${today}: ${fmtActive})</small>\n`;
let wikiRows = [], wT = 0, wMS = {}; monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
const m = await fetchUserData(user, db, START, END);
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total; monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.active > 0 ? ((uD.total / metrics.active) * 1000).toFixed(1) : "0.0";
let row = `|-\n| style="text-align:left;" | ${user} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.active > 0 ? ((wT / metrics.active) * 1000).toFixed(1) : "0.0";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
evrohxewqc4415lstergfbt3w3s31cx
737582
737581
2026-04-11T12:58:16Z
MrJaroslavik
44012
e
737582
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit (essential for enwiki).
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800;
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php', { anonymous: true });
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const res = await api.get({
action: 'query', meta: 'siteinfo', siprop: 'statistics', formatversion: 2
});
return { active: res.query.statistics.activeusers || 0 };
} catch (e) { return { active: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await metaApi.get({
action: 'query', list: 'logevents', letype: 'gblrights', letitle: 'User:' + user, lelimit: 'max', formatversion: 2
});
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
logs.filter(l => { const ts = new Date(l.timestamp); return ts > auditStart && ts < auditEnd; }).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) { return { wasSteward: false, wasStaff: false, wasOmbuds: false }; }
}
async function fetchUserData(user, db, start, end) {
const auditStart = new Date(start), auditEnd = new Date(end);
if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward'), isGloballyStaff = gGroups.includes('staff'), isGloballyOmbuds = gGroups.includes('ombuds');
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) {}
const target = 'User:' + user + '@' + db;
let logText = '', addTime = null, removeTime = null, isSelfAssign = false, maxDurationMins = -1, longestTimeStr = "", assignCount = 0;
try {
const res = await metaApi.get({ action: 'query', list: 'logevents', letype: 'rights', letitle: target, ledir: 'older', lelimit: 'max', formatversion: 2 });
const events = res.query.logevents || [];
let logEntries = [];
let pendingRemoved = null;
const LIMIT_COMBINE_MINS = 43200; // 30 dní
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
const cuAdded = (p.add || []).includes('checkuser') || ((p.newgroups || []).includes('checkuser') && !(p.oldgroups || []).includes('checkuser'));
const cuRemoved = (p.remove || []).includes('checkuser') || (!(p.newgroups || []).includes('checkuser') && (p.oldgroups || []).includes('checkuser'));
let expiryDate = null;
if (p.newmetadata) {
const cuMeta = p.newmetadata.find(m => m.group === 'checkuser');
if (cuMeta && cuMeta.expiry && cuMeta.expiry !== 'infinity') {
expiryDate = new Date(cuMeta.expiry);
}
}
const eventDate = new Date(e.timestamp), exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
if (cuAdded || cuRemoved) {
if (cuAdded) addTime = eventDate;
if (cuRemoved) { removeTime = eventDate; if (e.user === user || !e.user) isSelfAssign = true; }
if (eventDate >= auditStart && eventDate <= auditEnd) {
const isSelf = (e.user === user || !e.user) ? " (Self-assign)" : "";
if (e.user === user || !e.user) isSelfAssign = true;
if (cuAdded) {
// SCÉNÁŘ A: Manuální odebrání
if (pendingRemoved) {
const diffMins = Math.round(Math.abs(pendingRemoved.date - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
if (diffMins <= LIMIT_COMBINE_MINS) {
// Spojený záznam s jasnými časy
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf} (Duration: ${durStr})`);
} else {
// Rozdělený záznam (nad 30 dnů)
logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
logEntries.unshift(`* ADDED: ${exactTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
}
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
pendingRemoved = null;
}
// SCÉNÁŘ B: Automatická expirace
else if (expiryDate) {
const diffMins = Math.round(Math.abs(expiryDate - eventDate) / 60000);
if (!isNaN(diffMins)) {
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
const exactExpiryTime = expiryDate.toISOString().replace('T', ' ').substring(0, 19);
logEntries.unshift(`* ADDED: ${exactTime} | EXPIRED: ${exactExpiryTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
}
}
// SCÉNÁŘ C: Aktivní práva
else {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: (Active/Not removed) by ${e.user}${isSelf}`);
}
}
else if (cuRemoved) {
if (pendingRemoved) {
logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
}
pendingRemoved = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
}
}
}
}
if (pendingRemoved) {
logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
}
if (logEntries.length) logText = '\n' + logEntries.join('\n');
} catch (err) {}
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
let wasLocalInPeriod = (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart));
let gStat = isGloballyStaff ? "Staff" : isGloballySteward ? "Steward" : isGloballyOmbuds ? "Ombudsman" : "";
let roleLabel = "";
if (isCurrentLocal) roleLabel = "Current Local CheckUser" + (gStat ? ` (${gStat})` : "");
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
roleLabel = `Steward action (Self-assign: ${assignCount > 1 ? assignCount + 'x, longest ' : ''}${longestTimeStr})`;
}
else if (wasLocalInPeriod) {
let suffix = gStat ? ` (${gStat})` : (historyRes.wasSteward ? " (Former Steward)" : "");
roleLabel = "Former Local CheckUser (in period)" + suffix;
}
else if (longestTimeStr) roleLabel = `Temporary CU action (${longestTimeStr})`;
else if (gStat) roleLabel = `Current ${gStat}`;
else if (historyRes.wasSteward) roleLabel = "Former Steward (in period)";
else roleLabel = "Unknown role";
return { role: roleLabel, log: logText };
}
async function runAudit(yf, mf, yt, mt) {
isRunning = true; userCache = {}; historyCache = {}; results = {}; emptyWikis = []; failedWikis = []; scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
if (wikisToScan.length === 0) { alert("No wikis selected!"); return; }
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf), endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false, continueToken = null;
while (!successLocal && isRunning) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
let res = await api.get(params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) continueToken = res.continue;
else { if (!results[db]) emptyWikis.push(db); successLocal = true; }
} catch (err) { if (err?.status === 429) await sleep(30000); else { failedWikis.push(db); successLocal = true; } }
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const today = new Date().toISOString().split('T')[0];
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k active users ${monthCols.map(m => `!! ${m.label}`).join(' ')}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
const metrics = await fetchWikiMetrics(db);
const fmtActive = metrics.active.toLocaleString('en-US');
wt += `|-\n! colspan="${4 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${db} <small style="font-weight:normal; color:#54595d;">(Active Users as of ${today}: ${fmtActive})</small>\n`;
let wikiRows = [], wT = 0, wMS = {}; monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
const m = await fetchUserData(user, db, START, END);
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total; monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.active > 0 ? ((uD.total / metrics.active) * 1000).toFixed(1) : "0.0";
let row = `|-\n| style="text-align:left;" | ${user} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.active > 0 ? ((wT / metrics.active) * 1000).toFixed(1) : "0.0";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
tgen0yuxzgfvxbahzodrxydtl2354lb
737583
737582
2026-04-11T13:21:02Z
MrJaroslavik
44012
E
737583
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit.
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800;
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php', { anonymous: true });
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const res = await api.get({
action: 'query', meta: 'siteinfo', siprop: 'statistics', formatversion: 2
});
return { active: res.query.statistics.activeusers || 0 };
} catch (e) { return { active: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await metaApi.get({
action: 'query', list: 'logevents', letype: 'gblrights', letitle: 'User:' + user, lelimit: 'max', formatversion: 2
});
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
logs.filter(l => { const ts = new Date(l.timestamp); return ts > auditStart && ts < auditEnd; }).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) { return { wasSteward: false, wasStaff: false, wasOmbuds: false }; }
}
async function fetchUserData(user, db, start, end) {
const auditStart = new Date(start), auditEnd = new Date(end);
if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward'), isGloballyStaff = gGroups.includes('staff'), isGloballyOmbuds = gGroups.includes('ombuds');
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) {}
const target = 'User:' + user + '@' + db;
let logText = '', addTime = null, removeTime = null, isSelfAssign = false, maxDurationMins = -1, longestTimeStr = "", assignCount = 0;
// API request: 'letitle' limits logs to the target user, 'ledir: older' reads from newest to oldest
try {
const res = await metaApi.get({ action: 'query', list: 'logevents', letype: 'rights', letitle: target, ledir: 'older', lelimit: 'max', formatversion: 2 });
const events = res.query.logevents || []; // Array of log events returned by the API
let logEntries = []; // Storage for the final formatted log lines
let pendingRemoved = null; // Memory to store a "removal" event while searching for its matching "addition"
const LIMIT_COMBINE_MINS = 43200; // 30-day threshold for merging two events into a single line
for (let i = 0; i < events.length; i++) { // Loop through events one by one
const e = events[i], p = e.params || {}; // 'e' is the event object, 'p' holds parameters (added/removed groups)
// cuAdded: Check if 'checkuser' group was added in this log entry
const cuAdded = (p.add || []).includes('checkuser') || ((p.newgroups || []).includes('checkuser') && !(p.oldgroups || []).includes('checkuser'));
// cuRemoved: Check if 'checkuser' group was removed in this log entry
const cuRemoved = (p.remove || []).includes('checkuser') || (!(p.newgroups || []).includes('checkuser') && (p.oldgroups || []).includes('checkuser'));
// Expiry Check: If metadata exists for checkuser, extract the expiry time (skip if set to 'infinity')
let expiryDate = null;
if (p.newmetadata) {
const cuMeta = p.newmetadata.find(m => m.group === 'checkuser');
if (cuMeta && cuMeta.expiry && cuMeta.expiry !== 'infinity') {
expiryDate = new Date(cuMeta.expiry);
}
}
const eventDate = new Date(e.timestamp), exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
if (cuAdded || cuRemoved) {
if (cuAdded) addTime = eventDate;
if (cuRemoved) { removeTime = eventDate; if (e.user === user || !e.user) isSelfAssign = true; }
if (eventDate >= auditStart && eventDate <= auditEnd) {
const isSelf = (e.user === user || !e.user) ? " (Self-assign)" : "";
if (e.user === user || !e.user) isSelfAssign = true;
if (cuAdded) {
// SCENARIO A: We have a removal in memory (pendingRemoved), pair it with this addition (cuAdded)
if (pendingRemoved) {
const diffMins = Math.round(Math.abs(pendingRemoved.date - eventDate) / 60000); // Calculate difference in minutes
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60; // Convert minutes to human-readable string (d h m)
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
if (diffMins <= LIMIT_COMBINE_MINS) {
// Short-term: Combine into a single line showing both timestamps
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf} (Duration: ${durStr})`);
} else {
// Long-term: List as two separate events for historical clarity
logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
logEntries.unshift(`* ADDED: ${exactTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
}
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
pendingRemoved = null; // Clear memory as the pair is now complete
}
// SCENARIO B: No manual removal found, but the record has an expiry date (Steward/Bot action)
else if (expiryDate) {
const diffMins = Math.round(Math.abs(expiryDate - eventDate) / 60000); // Calculate duration until expiry
if (!isNaN(diffMins)) {
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
// Format exact expiration time
const exactExpiryTime = expiryDate.toISOString().replace('T', ' ').substring(0, 19); // Format expiry timestamp
// Output a single line tagged as EXPIRED
logEntries.unshift(`* ADDED: ${exactTime} | EXPIRED: ${exactExpiryTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
}
}
// SCENARIO C: Added with no end found (User currently holds the rights)
else {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: (Active/Not removed) by ${e.user}${isSelf}`);
}
}
else if (cuRemoved) {
if (pendingRemoved) {
logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
}
pendingRemoved = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
}
}
}
}
if (pendingRemoved) {
logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
}
if (logEntries.length) logText = '\n' + logEntries.join('\n');
} catch (err) {}
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
let wasLocalInPeriod = (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart));
let gStat = isGloballyStaff ? "Staff" : isGloballySteward ? "Steward" : isGloballyOmbuds ? "Ombudsman" : "";
let roleLabel = "";
if (isCurrentLocal)
// User currently holds CheckUser rights (Local CheckUser)
roleLabel = "Current Local CheckUser" + (gStat ? ` (${gStat})` : "");
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
// A steward (current or former) granted themselves rights (Steward Action)
roleLabel = `Steward action (Self-assign: ${assignCount > 1 ? assignCount + 'x, longest ' : ''}${longestTimeStr})`;
}
else if (wasLocalInPeriod) {
// User held rights during the period, but it wasn't a steward self-assign
let suffix = gStat ? ` (${gStat})` : (historyRes.wasSteward ? " (Former Steward)" : "");
roleLabel = "Former Local CheckUser (in period)" + suffix;
}
else if (longestTimeStr) roleLabel = `Temporary CU action (${longestTimeStr})`;
else if (gStat) roleLabel = `Current ${gStat}`;
else if (historyRes.wasSteward) roleLabel = "Former Steward (in period)";
else roleLabel = "Unknown role";
return { role: roleLabel, log: logText };
}
async function runAudit(yf, mf, yt, mt) {
isRunning = true; userCache = {}; historyCache = {}; results = {}; emptyWikis = []; failedWikis = []; scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
if (wikisToScan.length === 0) { alert("No wikis selected!"); return; }
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf), endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false, continueToken = null;
while (!successLocal && isRunning) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
let res = await api.get(params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) continueToken = res.continue;
else { if (!results[db]) emptyWikis.push(db); successLocal = true; }
} catch (err) { if (err?.status === 429) await sleep(30000); else { failedWikis.push(db); successLocal = true; } }
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const today = new Date().toISOString().split('T')[0];
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k active users ${monthCols.map(m => `!! ${m.label}`).join(' ')}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
const metrics = await fetchWikiMetrics(db);
const fmtActive = metrics.active.toLocaleString('en-US');
wt += `|-\n! colspan="${4 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${db} <small style="font-weight:normal; color:#54595d;">(Active Users as of ${today}: ${fmtActive})</small>\n`;
let wikiRows = [], wT = 0, wMS = {}; monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
const m = await fetchUserData(user, db, START, END);
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total; monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.active > 0 ? ((uD.total / metrics.active) * 1000).toFixed(1) : "0.0";
let row = `|-\n| style="text-align:left;" | ${user} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.active > 0 ? ((wT / metrics.active) * 1000).toFixed(1) : "0.0";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
bcu8rjl87f22l87e0g9qz1fnw62ezyg
737595
737583
2026-04-11T15:15:17Z
MrJaroslavik
44012
e
737595
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit.
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800;
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php', { anonymous: true });
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const res = await api.get({
action: 'query', meta: 'siteinfo', siprop: 'statistics', formatversion: 2
});
return { active: res.query.statistics.activeusers || 0 };
} catch (e) { return { active: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await metaApi.get({
action: 'query', list: 'logevents', letype: 'gblrights', letitle: 'User:' + user, lelimit: 'max', formatversion: 2
});
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
logs.filter(l => { const ts = new Date(l.timestamp); return ts > auditStart && ts < auditEnd; }).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) { return { wasSteward: false, wasStaff: false, wasOmbuds: false }; }
}
async function fetchUserData(user, db, start, end) {
const auditStart = new Date(start), auditEnd = new Date(end);
// 1. FETCH CURRENT GLOBAL GROUPS (Using cache to minimize Meta-Wiki API requests)
if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward');
const isGloballyStaff = gGroups.includes('staff');
const isGloballyOmbuds = gGroups.includes('ombuds') || gGroups.includes('ombudsman');
// 2. FETCH GLOBAL HISTORY (To identify roles held during the audit period but lost since)
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
// Determine if the user held global Staff or Ombudsman roles at any point in the period
const wasStaffInPeriod = isGloballyStaff || historyRes.wasStaff;
const wasOmbudsInPeriod = isGloballyOmbuds || historyRes.wasOmbuds;
// 3. CHECK CURRENT LOCAL CHECKUSER STATUS
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) {}
const target = 'User:' + user + '@' + db;
let logText = '', addTime = null, removeTime = null, isSelfAssign = false, maxDurationMins = -1, longestTimeStr = "", assignCount = 0;
try {
// 4. ANALYZE LOCAL RIGHTS LOG (Reading 'older' to ensure latest data is captured first)
const res = await metaApi.get({ action: 'query', list: 'logevents', letype: 'rights', letitle: target, ledir: 'older', lelimit: 'max', formatversion: 2 });
const events = res.query.logevents || [];
let logEntries = [];
let pendingRemoved = null; // Temporary storage for removal events awaiting a matching addition
const LIMIT_COMBINE_MINS = 43200; // 30-day threshold for combining ADDED/REMOVED into one line
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
// Logic to detect group changes across different API formats
const cuAdded = (p.add || []).includes('checkuser') || ((p.newgroups || []).includes('checkuser') && !(p.oldgroups || []).includes('checkuser'));
const cuRemoved = (p.remove || []).includes('checkuser') || (!(p.newgroups || []).includes('checkuser') && (p.oldgroups || []).includes('checkuser'));
// Check for rights additions that include an automatic expiration date (Steward/Bot actions)
let expiryDate = null;
if (p.newmetadata) {
const cuMeta = p.newmetadata.find(m => m.group === 'checkuser');
if (cuMeta && cuMeta.expiry && cuMeta.expiry !== 'infinity') {
expiryDate = new Date(cuMeta.expiry);
}
}
const eventDate = new Date(e.timestamp), exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
if (cuAdded || cuRemoved) {
if (cuAdded) addTime = eventDate;
if (cuRemoved) removeTime = eventDate;
// Flag if the right was assigned/removed by the user themselves (Typical for Stewards)
const isSelf = (e.user === user || !e.user) ? " (Self-assign)" : "";
if (e.user === user || !e.user) isSelfAssign = true;
if (eventDate >= auditStart && eventDate <= auditEnd) {
if (cuAdded) {
// SCENARIO A: Right was manually removed later (pendingRemoved exists)
if (pendingRemoved) {
const diffMins = Math.round(Math.abs(pendingRemoved.date - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
if (diffMins <= LIMIT_COMBINE_MINS) {
// Pair addition and removal into a single chronological line
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf} (Duration: ${durStr})`);
} else {
// If duration > 30 days, list as two separate events for readability
logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
logEntries.unshift(`* ADDED: ${exactTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
}
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
pendingRemoved = null;
}
// SCENARIO B: No manual removal found, but an expiration date was set
else if (expiryDate) {
const diffMins = Math.round(Math.abs(expiryDate - eventDate) / 60000);
if (!isNaN(diffMins)) {
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
const exactExpiryTime = expiryDate.toISOString().replace('T', ' ').substring(0, 19);
// Log as an automatic expiration
logEntries.unshift(`* ADDED: ${exactTime} | EXPIRED: ${exactExpiryTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
}
}
// SCENARIO C: Added but removal/expiration event was not found in the scanned period
else {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: (Active/Not removed) by ${e.user}${isSelf}`);
}
}
// Capture removal event and wait for the corresponding addition further back in history
else if (cuRemoved) {
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
pendingRemoved = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
}
}
}
}
// Flush any remaining unpaired removal events
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
if (logEntries.length) logText = '\n' + logEntries.join('\n');
} catch (err) {}
// 5. ROLE CLASSIFICATION (Determines the label in the "Category" column)
// Checks if user has actions in checkuserlog but NO rights log entries (means they held rights throughout)
const hasActionsButNoLogs = (results[db] && results[db][user] && results[db][user].total > 0 && !addTime && !removeTime);
let wasLocalInPeriod = (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart)) || hasActionsButNoLogs;
// Build dynamic global role suffix (Current vs Former)
let gRoleName = wasStaffInPeriod ? "Staff" : wasOmbudsInPeriod ? "Ombudsman" : "";
let isGCurrent = (isGloballyStaff || isGloballyOmbuds);
let gSuffix = gRoleName ? ` (${isGCurrent ? 'Current' : 'Former'} ${gRoleName})` : "";
let roleLabel = "";
if (isCurrentLocal) {
roleLabel = "Current Local CheckUser" + gSuffix;
}
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
// Classify short-term actions performed by Stewards
roleLabel = `Steward action (Self-assign: ${assignCount > 1 ? assignCount + 'x, longest ' : ''}${longestTimeStr})`;
}
else if (wasLocalInPeriod) {
// Classify users who held the local group but are no longer active
let suffix = gSuffix || ((isGloballySteward || historyRes.wasSteward) ? " (Former Steward)" : "");
roleLabel = "Former Local CheckUser (in period)" + suffix;
}
else if (longestTimeStr) {
roleLabel = `Temporary CU action (${longestTimeStr})`;
}
else if (gRoleName) {
// Classify global roles even if they never held local CU rights
roleLabel = `${isGCurrent ? 'Current' : 'Former'} ${gRoleName}`;
}
else {
roleLabel = "Unknown role";
}
return { role: roleLabel, log: logText };
}
async function runAudit(yf, mf, yt, mt) {
isRunning = true; userCache = {}; historyCache = {}; results = {}; emptyWikis = []; failedWikis = []; scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
if (wikisToScan.length === 0) { alert("No wikis selected!"); return; }
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf), endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false, continueToken = null;
while (!successLocal && isRunning) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
let res = await api.get(params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) continueToken = res.continue;
else { if (!results[db]) emptyWikis.push(db); successLocal = true; }
} catch (err) { if (err?.status === 429) await sleep(30000); else { failedWikis.push(db); successLocal = true; } }
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const today = new Date().toISOString().split('T')[0];
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k active users ${monthCols.map(m => `!! ${m.label}`).join(' ')}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
const metrics = await fetchWikiMetrics(db);
const fmtActive = metrics.active.toLocaleString('en-US');
wt += `|-\n! colspan="${4 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${db} <small style="font-weight:normal; color:#54595d;">(Active Users as of ${today}: ${fmtActive})</small>\n`;
let wikiRows = [], wT = 0, wMS = {}; monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
const m = await fetchUserData(user, db, START, END);
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total; monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.active > 0 ? ((uD.total / metrics.active) * 1000).toFixed(1) : "0.0";
let row = `|-\n| style="text-align:left;" | ${user} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.active > 0 ? ((wT / metrics.active) * 1000).toFixed(1) : "0.0";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
qi28x8ooe98z9sybd9e2p3skw6fbey5
737596
737595
2026-04-11T15:21:12Z
MrJaroslavik
44012
e
737596
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit.
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800;
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php', { anonymous: true });
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const res = await api.get({
action: 'query', meta: 'siteinfo', siprop: 'statistics', formatversion: 2
});
return { active: res.query.statistics.activeusers || 0 };
} catch (e) { return { active: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await metaApi.get({
action: 'query', list: 'logevents', letype: 'gblrights', letitle: 'User:' + user, lelimit: 'max', formatversion: 2
});
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
logs.filter(l => { const ts = new Date(l.timestamp); return ts > auditStart && ts < auditEnd; }).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) { return { wasSteward: false, wasStaff: false, wasOmbuds: false }; }
}
async function fetchUserData(user, db, start, end) {
const auditStart = new Date(start), auditEnd = new Date(end);
// 1. FETCH CURRENT GLOBAL GROUPS (Using cache to minimize Meta-Wiki API requests)
if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward');
const isGloballyStaff = gGroups.includes('staff');
const isGloballyOmbuds = gGroups.includes('ombuds') || gGroups.includes('ombudsman');
// 2. FETCH GLOBAL HISTORY (To identify roles held during the audit period but lost since)
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
// Determine if the user held global Staff or Ombudsman roles at any point in the period
const wasStaffInPeriod = isGloballyStaff || historyRes.wasStaff;
const wasOmbudsInPeriod = isGloballyOmbuds || historyRes.wasOmbuds;
// 3. CHECK CURRENT LOCAL CHECKUSER STATUS
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) {}
const target = 'User:' + user + '@' + db;
let logText = '', addTime = null, removeTime = null, isSelfAssign = false, maxDurationMins = -1, longestTimeStr = "", assignCount = 0;
try {
// 4. ANALYZE LOCAL RIGHTS LOG (Reading 'older' to ensure latest data is captured first)
const res = await metaApi.get({ action: 'query', list: 'logevents', letype: 'rights', letitle: target, ledir: 'older', lelimit: 'max', formatversion: 2 });
const events = res.query.logevents || [];
let logEntries = [];
let pendingRemoved = null; // Temporary storage for removal events awaiting a matching addition
const LIMIT_COMBINE_MINS = 43200; // 30-day threshold for combining ADDED/REMOVED into one line
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
// Logic to detect group changes across different API formats
const cuAdded = (p.add || []).includes('checkuser') || ((p.newgroups || []).includes('checkuser') && !(p.oldgroups || []).includes('checkuser'));
const cuRemoved = (p.remove || []).includes('checkuser') || (!(p.newgroups || []).includes('checkuser') && (p.oldgroups || []).includes('checkuser'));
// Check for rights additions that include an automatic expiration date (Steward/Bot actions)
let expiryDate = null;
if (p.newmetadata) {
const cuMeta = p.newmetadata.find(m => m.group === 'checkuser');
if (cuMeta && cuMeta.expiry && cuMeta.expiry !== 'infinity') {
expiryDate = new Date(cuMeta.expiry);
}
}
const eventDate = new Date(e.timestamp), exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
if (cuAdded || cuRemoved) {
if (cuAdded) addTime = eventDate;
if (cuRemoved) removeTime = eventDate;
// Flag if the right was assigned/removed by the user themselves (Typical for Stewards)
const isSelf = (e.user === user || !e.user) ? " (Self-assign)" : "";
if (e.user === user || !e.user) isSelfAssign = true;
if (eventDate >= auditStart && eventDate <= auditEnd) {
if (cuAdded) {
// SCENARIO A: Right was manually removed later (pendingRemoved exists)
if (pendingRemoved) {
const diffMins = Math.round(Math.abs(pendingRemoved.date - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
if (diffMins <= LIMIT_COMBINE_MINS) {
// Pair addition and removal into a single chronological line
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf} (Duration: ${durStr})`);
} else {
// If duration > 30 days, list as two separate events for readability
logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
logEntries.unshift(`* ADDED: ${exactTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
}
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
pendingRemoved = null;
}
// SCENARIO B: No manual removal found, but an expiration date was set
else if (expiryDate) {
const diffMins = Math.round(Math.abs(expiryDate - eventDate) / 60000);
if (!isNaN(diffMins)) {
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
const exactExpiryTime = expiryDate.toISOString().replace('T', ' ').substring(0, 19);
// Log as an automatic expiration
logEntries.unshift(`* ADDED: ${exactTime} | EXPIRED: ${exactExpiryTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
}
}
// SCENARIO C: Added but removal/expiration event was not found in the scanned period
else {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: (Active/Not removed) by ${e.user}${isSelf}`);
}
}
// Capture removal event and wait for the corresponding addition further back in history
else if (cuRemoved) {
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
pendingRemoved = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
}
}
}
}
// Flush any remaining unpaired removal events
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
if (logEntries.length) logText = '\n' + logEntries.join('\n');
} catch (err) {}
// 5. ROLE CLASSIFICATION (Determines the label in the "Category" column)
// Checks if user has actions in checkuserlog but NO rights log entries (means they held rights throughout)
const hasActionsButNoLogs = (results[db] && results[db][user] && results[db][user].total > 0 && !addTime && !removeTime);
let wasLocalInPeriod = (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart)) || hasActionsButNoLogs;
// Build dynamic global role suffix (Current vs Former)
let gRoleName = wasStaffInPeriod ? "Staff" : wasOmbudsInPeriod ? "Ombudsman" : "";
let isGCurrent = (isGloballyStaff || isGloballyOmbuds);
let gSuffix = gRoleName ? ` (${isGCurrent ? 'Current' : 'Former'} ${gRoleName})` : "";
let roleLabel = "";
// Build the final label
if (isCurrentLocal) {
roleLabel = "Current Local CheckUser" + gSuffix;
}
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
roleLabel = `Steward action (Self-assign: ${assignCount > 1 ? assignCount + 'x, longest ' : ''}${longestTimeStr})`;
}
else if (gRoleName && (wasStaffInPeriod || wasOmbudsInPeriod)) {
roleLabel = `${isGCurrent ? 'Current' : 'Former'} ${gRoleName}${hasActionsButNoLogs ? ' (actions in period)' : ''}`;
}
else if (wasLocalInPeriod) {
let suffix = gSuffix || ((isGloballySteward || historyRes.wasSteward) ? " (Former Steward)" : "");
roleLabel = "Former Local CheckUser (in period)" + suffix;
}
else if (longestTimeStr) {
roleLabel = `Temporary CU action (${longestTimeStr})`;
}
else if (gRoleName) {
// Classify global roles even if they never held local CU rights
roleLabel = `${isGCurrent ? 'Current' : 'Former'} ${gRoleName}`;
}
else {
roleLabel = "Unknown role";
}
return { role: roleLabel, log: logText };
}
async function runAudit(yf, mf, yt, mt) {
isRunning = true; userCache = {}; historyCache = {}; results = {}; emptyWikis = []; failedWikis = []; scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
if (wikisToScan.length === 0) { alert("No wikis selected!"); return; }
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf), endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false, continueToken = null;
while (!successLocal && isRunning) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
let res = await api.get(params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) continueToken = res.continue;
else { if (!results[db]) emptyWikis.push(db); successLocal = true; }
} catch (err) { if (err?.status === 429) await sleep(30000); else { failedWikis.push(db); successLocal = true; } }
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const today = new Date().toISOString().split('T')[0];
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k active users ${monthCols.map(m => `!! ${m.label}`).join(' ')}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
const metrics = await fetchWikiMetrics(db);
const fmtActive = metrics.active.toLocaleString('en-US');
wt += `|-\n! colspan="${4 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${db} <small style="font-weight:normal; color:#54595d;">(Active Users as of ${today}: ${fmtActive})</small>\n`;
let wikiRows = [], wT = 0, wMS = {}; monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
const m = await fetchUserData(user, db, START, END);
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total; monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.active > 0 ? ((uD.total / metrics.active) * 1000).toFixed(1) : "0.0";
let row = `|-\n| style="text-align:left;" | ${user} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.active > 0 ? ((wT / metrics.active) * 1000).toFixed(1) : "0.0";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
kr7nkcd5t05o6z73dm3uqb9cxwrd4nt
737597
737596
2026-04-11T15:37:58Z
MrJaroslavik
44012
e
737597
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit.
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800;
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php', { anonymous: true });
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const res = await api.get({
action: 'query', meta: 'siteinfo', siprop: 'statistics', formatversion: 2
});
return { active: res.query.statistics.activeusers || 0 };
} catch (e) { return { active: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await metaApi.get({
action: 'query', list: 'logevents', letype: 'gblrights', letitle: 'User:' + user, lelimit: 'max', formatversion: 2
});
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
logs.filter(l => { const ts = new Date(l.timestamp); return ts > auditStart && ts < auditEnd; }).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) { return { wasSteward: false, wasStaff: false, wasOmbuds: false }; }
}
async function fetchUserData(user, db, start, end) {
const auditStart = new Date(start), auditEnd = new Date(end);
// 1. FETCH CURRENT GLOBAL GROUPS (Cached)
if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward');
const isGloballyStaff = gGroups.includes('staff');
const isGloballyOmbuds = gGroups.includes('ombuds') || gGroups.includes('ombudsman');
// 2. FETCH GLOBAL HISTORY (To identify roles held during the period but lost since)
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
// 3. CHECK CURRENT LOCAL CHECKUSER STATUS
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) {}
const target = 'User:' + user + '@' + db;
let logText = '', addTime = null, removeTime = null, isSelfAssign = false, maxDurationMins = -1, longestTimeStr = "", assignCount = 0;
// --- 4. DEEP RIGHTS LOG SCAN (Pagination to bypass 500-limit) ---
let events = [];
let continueToken = null;
let finished = false;
try {
while (!finished) {
let params = {
action: 'query', list: 'logevents', letype: 'rights',
letitle: target, ledir: 'older', lelimit: 'max', formatversion: 2
};
if (continueToken) Object.assign(params, continueToken);
const res = await metaApi.get(params);
const batch = res.query.logevents || [];
events = events.concat(batch);
if (res.continue) continueToken = res.continue;
else finished = true;
}
let logEntries = [];
let pendingRemoved = null;
let hasLocalRightsInPeriod = false;
const LIMIT_COMBINE_MINS = 43200; // 30 days
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
const cuAdded = (p.add || []).includes('checkuser') || ((p.newgroups || []).includes('checkuser') && !(p.oldgroups || []).includes('checkuser'));
const cuRemoved = (p.remove || []).includes('checkuser') || (!(p.newgroups || []).includes('checkuser') && (p.oldgroups || []).includes('checkuser'));
const eventDate = new Date(e.timestamp);
const exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
// Track adding/revoking dates across entire history to determine status in audit period
if (cuAdded) addTime = eventDate;
if (cuRemoved) removeTime = eventDate;
// Verification logic: Held rights in period if added before end AND (still active OR removed after start)
if (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart)) {
hasLocalRightsInPeriod = true;
}
// Rights Log Formatting (Only for events within the audit window)
if (eventDate >= auditStart && eventDate <= auditEnd && (cuAdded || cuRemoved)) {
let expiryDate = null;
if (p.newmetadata) {
const cuMeta = p.newmetadata.find(m => m.group === 'checkuser');
if (cuMeta && cuMeta.expiry && cuMeta.expiry !== 'infinity') expiryDate = new Date(cuMeta.expiry);
}
const isSelf = (e.user === user || !e.user) ? " (Self-assign)" : "";
if (e.user === user || !e.user) isSelfAssign = true;
if (cuAdded) {
if (pendingRemoved) {
const diffMins = Math.round(Math.abs(pendingRemoved.date - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
if (diffMins <= LIMIT_COMBINE_MINS) {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf} (Duration: ${durStr})`);
} else {
logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
logEntries.unshift(`* ADDED: ${exactTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
}
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++; pendingRemoved = null;
} else if (expiryDate) {
const diffMins = Math.round(Math.abs(expiryDate - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
const exactExpiryTime = expiryDate.toISOString().replace('T', ' ').substring(0, 19);
logEntries.unshift(`* ADDED: ${exactTime} | EXPIRED: ${exactExpiryTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
} else {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: (Active/Not removed) by ${e.user}${isSelf}`);
}
} else if (cuRemoved) {
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
pendingRemoved = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
}
}
}
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
if (logEntries.length) logText = '\n' + logEntries.join('\n');
// --- 5. ROLE CLASSIFICATION ---
let roleLabel = "";
const hasActions = (results[db] && results[db][user] && results[db][user].total > 0);
let wasCU = hasLocalRightsInPeriod || hasActions;
if (isGloballyStaff || historyRes.wasStaff) {
roleLabel = isGloballyStaff ? "Current Staff" : "Former Staff (in period)";
}
else if (isCurrentLocal) {
roleLabel = "Current Local CheckUser";
}
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
roleLabel = `Steward action (Self-assign: ${assignCount > 1 ? assignCount + 'x, longest ' : ''}${longestTimeStr})`;
}
else if (isGloballySteward || historyRes.wasSteward) {
roleLabel = isGloballySteward ? "Current Steward" : "Former Steward (in period)";
}
else if (isGloballyOmbuds || historyRes.wasOmbuds) {
roleLabel = isGloballyOmbuds ? "Current Ombudsman" : "Former Ombudsman (in period)";
}
else if (wasCU) {
roleLabel = "Former Local CheckUser (in period)";
}
else {
roleLabel = "Unknown role";
}
return { role: roleLabel, log: logText };
} catch (err) {
return { role: "Error fetching data", log: "" };
}
}
async function runAudit(yf, mf, yt, mt) {
isRunning = true; userCache = {}; historyCache = {}; results = {}; emptyWikis = []; failedWikis = []; scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
if (wikisToScan.length === 0) { alert("No wikis selected!"); return; }
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf), endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false, continueToken = null;
while (!successLocal && isRunning) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
let res = await api.get(params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) continueToken = res.continue;
else { if (!results[db]) emptyWikis.push(db); successLocal = true; }
} catch (err) { if (err?.status === 429) await sleep(30000); else { failedWikis.push(db); successLocal = true; } }
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const today = new Date().toISOString().split('T')[0];
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k active users ${monthCols.map(m => `!! ${m.label}`).join(' ')}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
const metrics = await fetchWikiMetrics(db);
const fmtActive = metrics.active.toLocaleString('en-US');
wt += `|-\n! colspan="${4 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${db} <small style="font-weight:normal; color:#54595d;">(Active Users as of ${today}: ${fmtActive})</small>\n`;
let wikiRows = [], wT = 0, wMS = {}; monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
const m = await fetchUserData(user, db, START, END);
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total; monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.active > 0 ? ((uD.total / metrics.active) * 1000).toFixed(1) : "0.0";
let row = `|-\n| style="text-align:left;" | ${user} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.active > 0 ? ((wT / metrics.active) * 1000).toFixed(1) : "0.0";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
3fg8xn7pheqc4i7ctl90xrqwg2o46dz
737598
737597
2026-04-11T15:51:46Z
MrJaroslavik
44012
e
737598
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit.
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800;
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php', { anonymous: true });
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const res = await api.get({
action: 'query', meta: 'siteinfo', siprop: 'statistics', formatversion: 2
});
return { active: res.query.statistics.activeusers || 0 };
} catch (e) { return { active: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await metaApi.get({
action: 'query', list: 'logevents', letype: 'gblrights', letitle: 'User:' + user, lelimit: 'max', formatversion: 2
});
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
logs.filter(l => { const ts = new Date(l.timestamp); return ts > auditStart && ts < auditEnd; }).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) { return { wasSteward: false, wasStaff: false, wasOmbuds: false }; }
}
async function fetchUserData(user, db, start, end) {
const auditStart = new Date(start), auditEnd = new Date(end);
// 1. FETCH CURRENT GLOBAL GROUPS (Cached)
if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward');
const isGloballyStaff = gGroups.includes('staff');
const isGloballyOmbuds = gGroups.includes('ombuds') || gGroups.includes('ombudsman');
// 2. FETCH GLOBAL HISTORY (To identify roles held during the period but lost since)
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
// 3. CHECK CURRENT LOCAL CHECKUSER STATUS
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) {}
const target = 'User:' + user + '@' + db;
let logText = '', addTime = null, removeTime = null, isSelfAssign = false, maxDurationMins = -1, longestTimeStr = "", assignCount = 0;
// --- 4. DEEP RIGHTS LOG SCAN (Pagination to bypass 500-limit) ---
let events = [];
let continueToken = null;
let finished = false;
try {
while (!finished) {
let params = {
action: 'query', list: 'logevents', letype: 'rights',
letitle: target, ledir: 'older', lelimit: 'max', formatversion: 2
};
if (continueToken) Object.assign(params, continueToken);
const res = await metaApi.get(params);
const batch = res.query.logevents || [];
events = events.concat(batch);
if (res.continue) continueToken = res.continue;
else finished = true;
}
let logEntries = [];
let pendingRemoved = null;
let hasLocalRightsInPeriod = false;
const LIMIT_COMBINE_MINS = 43200; // 30 days
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
const cuAdded = (p.add || []).includes('checkuser') || ((p.newgroups || []).includes('checkuser') && !(p.oldgroups || []).includes('checkuser'));
const cuRemoved = (p.remove || []).includes('checkuser') || (!(p.newgroups || []).includes('checkuser') && (p.oldgroups || []).includes('checkuser'));
const eventDate = new Date(e.timestamp);
const exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
// Track adding/revoking dates across entire history to determine status in audit period
if (cuAdded) addTime = eventDate;
if (cuRemoved) removeTime = eventDate;
// Verification logic: Held rights in period if added before end AND (still active OR removed after start)
if (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart)) {
hasLocalRightsInPeriod = true;
}
// Rights Log Formatting (Only for events within the audit window)
if (eventDate >= auditStart && eventDate <= auditEnd && (cuAdded || cuRemoved)) {
let expiryDate = null;
if (p.newmetadata) {
const cuMeta = p.newmetadata.find(m => m.group === 'checkuser');
if (cuMeta && cuMeta.expiry && cuMeta.expiry !== 'infinity') expiryDate = new Date(cuMeta.expiry);
}
const isSelf = (e.user === user || !e.user) ? " (Self-assign)" : "";
if (e.user === user || !e.user) isSelfAssign = true;
if (cuAdded) {
if (pendingRemoved) {
const diffMins = Math.round(Math.abs(pendingRemoved.date - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
if (diffMins <= LIMIT_COMBINE_MINS) {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf} (Duration: ${durStr})`);
} else {
logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
logEntries.unshift(`* ADDED: ${exactTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
}
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++; pendingRemoved = null;
} else if (expiryDate) {
const diffMins = Math.round(Math.abs(expiryDate - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
const exactExpiryTime = expiryDate.toISOString().replace('T', ' ').substring(0, 19);
logEntries.unshift(`* ADDED: ${exactTime} | EXPIRED: ${exactExpiryTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
} else {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: (Active/Not removed) by ${e.user}${isSelf}`);
}
} else if (cuRemoved) {
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
pendingRemoved = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
}
}
}
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
if (logEntries.length) logText = '\n' + logEntries.join('\n');
// --- 5. ROLE CLASSIFICATION ---
let roleLabel = "";
const hasActions = (results[db] && results[db][user] && results[db][user].total > 0);
let wasCU = hasLocalRightsInPeriod || hasActions;
if (isGloballyStaff || historyRes.wasStaff) {
roleLabel = isGloballyStaff ? "Current Staff" : "Former Staff (in period)";
}
else if (isCurrentLocal) {
roleLabel = "Current Local CheckUser";
}
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
roleLabel = `Steward action (Self-assign: ${assignCount > 1 ? assignCount + 'x, longest ' : ''}${longestTimeStr})`;
}
else if (isGloballySteward || historyRes.wasSteward) {
roleLabel = isGloballySteward ? "Current Steward" : "Former Steward (in period)";
}
else if (isGloballyOmbuds || historyRes.wasOmbuds) {
roleLabel = isGloballyOmbuds ? "Current Ombudsman" : "Former Ombudsman (in period)";
}
else if (wasCU) {
roleLabel = "Former Local CheckUser (in period)";
}
else {
roleLabel = "Unknown role";
}
return { role: roleLabel, log: logText };
} catch (err) {
return { role: "Error fetching data", log: "" };
}
}
async function runAudit(yf, mf, yt, mt) {
isRunning = true; userCache = {}; historyCache = {}; results = {}; emptyWikis = []; failedWikis = []; scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
if (wikisToScan.length === 0) { alert("No wikis selected!"); return; }
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf), endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false, continueToken = null;
while (!successLocal && isRunning) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
let res = await api.get(params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) continueToken = res.continue;
else { if (!results[db]) emptyWikis.push(db); successLocal = true; }
} catch (err) { if (err?.status === 429) await sleep(30000); else { failedWikis.push(db); successLocal = true; } }
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const today = new Date().toISOString().split('T')[0];
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k active users ${monthCols.map(m => `!! ${m.label}`).join(' ')}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
const metrics = await fetchWikiMetrics(db);
const fmtActive = metrics.active.toLocaleString('en-US');
wt += `|-\n! colspan="${4 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${db} <small style="font-weight:normal; color:#54595d;">(Active Users as of ${today}: ${fmtActive})</small>\n`;
let wikiRows = [], wT = 0, wMS = {}; monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
const m = await fetchUserData(user, db, START, END);
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total; monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.active > 0 ? ((uD.total / metrics.active) * 1000).toFixed(1) : "0.0";
let row = `|-\n| style="text-align:left;" | ${user}@${db} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.active > 0 ? ((wT / metrics.active) * 1000).toFixed(1) : "0.0";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
t9n4s57i4q4cvzjmxjety21hhldu0ac
737620
737598
2026-04-11T17:10:08Z
MrJaroslavik
44012
e
737620
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit.
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800;
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
function getInterwikiPrefix(db) {
const specials = {
'commonswiki': 'commons', 'metawiki': 'm', 'wikidatawiki': 'd',
'mediawikiwiki': 'mw', 'specieswiki': 'wikispecies',
'foundationwiki': 'wikimedia', 'sourceswiki': 'wikisource'
};
if (specials[db]) return specials[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return 's:' + name.slice(0, -10);
if (name.endsWith('wikiversity')) return 'v:' + name.slice(0, -11);
if (name.endsWith('wiktionary')) return 'wikt:' + name.slice(0, -10);
if (name.endsWith('wikivoyage')) return 'voy:' + name.slice(0, -10);
if (name.endsWith('wikibooks')) return 'b:' + name.slice(0, -9);
if (name.endsWith('wikiquote')) return 'q:' + name.slice(0, -9);
if (name.endsWith('wikinews')) return 'n:' + name.slice(0, -8);
if (name.endsWith('wikimedia')) return 'wikimedia:' + name.slice(0, -9);
if (name.endsWith('wiki')) return 'w:' + name.slice(0, -4);
return 'w:' + name;
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php', { anonymous: true });
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const res = await api.get({
action: 'query', meta: 'siteinfo', siprop: 'statistics', formatversion: 2
});
return { active: res.query.statistics.activeusers || 0 };
} catch (e) { return { active: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await metaApi.get({
action: 'query', list: 'logevents', letype: 'gblrights', letitle: 'User:' + user, lelimit: 'max', formatversion: 2
});
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
logs.filter(l => { const ts = new Date(l.timestamp); return ts > auditStart && ts < auditEnd; }).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) { return { wasSteward: false, wasStaff: false, wasOmbuds: false }; }
}
async function fetchUserData(user, db, start, end) {
const auditStart = new Date(start), auditEnd = new Date(end);
// 1. FETCH CURRENT GLOBAL GROUPS (Cached)
if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward');
const isGloballyStaff = gGroups.includes('staff');
const isGloballyOmbuds = gGroups.includes('ombuds') || gGroups.includes('ombudsman');
// 2. FETCH GLOBAL HISTORY (To identify roles held during the period but lost since)
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
// 3. CHECK CURRENT LOCAL CHECKUSER STATUS
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) {}
const target = 'User:' + user + '@' + db;
let logText = '', addTime = null, removeTime = null, isSelfAssign = false, maxDurationMins = -1, longestTimeStr = "", assignCount = 0;
// --- 4. DEEP RIGHTS LOG SCAN (Pagination to bypass 500-limit) ---
let events = [];
let continueToken = null;
let finished = false;
try {
while (!finished) {
let params = {
action: 'query', list: 'logevents', letype: 'rights',
letitle: target, ledir: 'older', lelimit: 'max', formatversion: 2
};
if (continueToken) Object.assign(params, continueToken);
const res = await metaApi.get(params);
const batch = res.query.logevents || [];
events = events.concat(batch);
if (res.continue) continueToken = res.continue;
else finished = true;
}
let logEntries = [];
let pendingRemoved = null;
let hasLocalRightsInPeriod = false;
const LIMIT_COMBINE_MINS = 43200; // 30 days
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
const cuAdded = (p.add || []).includes('checkuser') || ((p.newgroups || []).includes('checkuser') && !(p.oldgroups || []).includes('checkuser'));
const cuRemoved = (p.remove || []).includes('checkuser') || (!(p.newgroups || []).includes('checkuser') && (p.oldgroups || []).includes('checkuser'));
const eventDate = new Date(e.timestamp);
const exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
// Track adding/revoking dates across entire history to determine status in audit period
if (cuAdded) addTime = eventDate;
if (cuRemoved) removeTime = eventDate;
// Verification logic: Held rights in period if added before end AND (still active OR removed after start)
if (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart)) {
hasLocalRightsInPeriod = true;
}
// Rights Log Formatting (Only for events within the audit window)
if (eventDate >= auditStart && eventDate <= auditEnd && (cuAdded || cuRemoved)) {
let expiryDate = null;
if (p.newmetadata) {
const cuMeta = p.newmetadata.find(m => m.group === 'checkuser');
if (cuMeta && cuMeta.expiry && cuMeta.expiry !== 'infinity') expiryDate = new Date(cuMeta.expiry);
}
const isSelf = (e.user === user || !e.user) ? " (Self-assign)" : "";
if (e.user === user || !e.user) isSelfAssign = true;
if (cuAdded) {
if (pendingRemoved) {
const diffMins = Math.round(Math.abs(pendingRemoved.date - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
if (diffMins <= LIMIT_COMBINE_MINS) {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf} (Duration: ${durStr})`);
} else {
logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
logEntries.unshift(`* ADDED: ${exactTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
}
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++; pendingRemoved = null;
} else if (expiryDate) {
const diffMins = Math.round(Math.abs(expiryDate - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
const exactExpiryTime = expiryDate.toISOString().replace('T', ' ').substring(0, 19);
logEntries.unshift(`* ADDED: ${exactTime} | EXPIRED: ${exactExpiryTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
} else {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: (Active/Not removed) by ${e.user}${isSelf}`);
}
} else if (cuRemoved) {
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
pendingRemoved = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
}
}
}
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
if (logEntries.length) logText = '\n' + logEntries.join('\n');
// --- 5. ROLE CLASSIFICATION ---
let roleLabel = "";
const hasActions = (results[db] && results[db][user] && results[db][user].total > 0);
let wasCU = hasLocalRightsInPeriod || hasActions;
if (isGloballyStaff || historyRes.wasStaff) {
roleLabel = isGloballyStaff ? "Current Staff" : "Former Staff (in period)";
}
else if (isCurrentLocal) {
roleLabel = "Current Local CheckUser";
}
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
roleLabel = `Steward action (Self-assign: ${assignCount > 1 ? assignCount + 'x, longest ' : ''}${longestTimeStr})`;
}
else if (isGloballySteward || historyRes.wasSteward) {
roleLabel = isGloballySteward ? "Current Steward" : "Former Steward (in period)";
}
else if (isGloballyOmbuds || historyRes.wasOmbuds) {
roleLabel = isGloballyOmbuds ? "Current Ombudsman" : "Former Ombudsman (in period)";
}
else if (wasCU) {
roleLabel = "Former Local CheckUser (in period)";
}
else {
roleLabel = "Unknown role";
}
return { role: roleLabel, log: logText };
} catch (err) {
return { role: "Error fetching data", log: "" };
}
}
async function runAudit(yf, mf, yt, mt) {
isRunning = true; userCache = {}; historyCache = {}; results = {}; emptyWikis = []; failedWikis = []; scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
if (wikisToScan.length === 0) { alert("No wikis selected!"); return; }
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf), endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false, continueToken = null;
while (!successLocal && isRunning) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
let res = await api.get(params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) continueToken = res.continue;
else { if (!results[db]) emptyWikis.push(db); successLocal = true; }
} catch (err) { if (err?.status === 429) await sleep(30000); else { failedWikis.push(db); successLocal = true; } }
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const today = new Date().toISOString().split('T')[0];
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k active users ${monthCols.map(m => `!! ${m.label}`).join(' ')}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
const metrics = await fetchWikiMetrics(db);
const fmtActive = metrics.active.toLocaleString('en-US');
const iwPrefix = getInterwikiPrefix(db);
const projectLink = `[[${iwPrefix}:|${db}]]`;
const logLink = `[[${iwPrefix}:Special:CheckUserLog|(log)]]`;
wt += `|-\n! colspan="${4 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${projectLink} <small style="font-weight:normal; color:#54595d;">(Active Users as of ${today}: ${fmtActive})</small> — ${logLink}\n`;
// ----------------------------
let wikiRows = [], wT = 0, wMS = {}; monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
const m = await fetchUserData(user, db, START, END);
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total; monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.active > 0 ? ((uD.total / metrics.active) * 1000).toFixed(1) : "0.0";
let row = `|-\n| style="text-align:left;" | ${user}@${db} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.active > 0 ? ((wT / metrics.active) * 1000).toFixed(1) : "0.0";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
6d9erxknt4g9ffp4015nb2pnrduhd0q
737625
737620
2026-04-11T19:09:29Z
MrJaroslavik
44012
test
737625
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit.
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800;
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
function getInterwikiPrefix(db) {
const specials = {
'commonswiki': 'commons', 'metawiki': 'm', 'wikidatawiki': 'd',
'mediawikiwiki': 'mw', 'specieswiki': 'wikispecies',
'foundationwiki': 'wikimedia', 'sourceswiki': 'wikisource'
};
if (specials[db]) return specials[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return 's:' + name.slice(0, -10);
if (name.endsWith('wikiversity')) return 'v:' + name.slice(0, -11);
if (name.endsWith('wiktionary')) return 'wikt:' + name.slice(0, -10);
if (name.endsWith('wikivoyage')) return 'voy:' + name.slice(0, -10);
if (name.endsWith('wikibooks')) return 'b:' + name.slice(0, -9);
if (name.endsWith('wikiquote')) return 'q:' + name.slice(0, -9);
if (name.endsWith('wikinews')) return 'n:' + name.slice(0, -8);
if (name.endsWith('wikimedia')) return 'wikimedia:' + name.slice(0, -9);
if (name.endsWith('wiki')) return 'w:' + name.slice(0, -4);
return 'w:' + name;
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php');
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const res = await api.get({
action: 'query', meta: 'siteinfo', siprop: 'statistics', formatversion: 2
});
return { active: res.query.statistics.activeusers || 0 };
} catch (e) { return { active: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await metaApi.get({
action: 'query', list: 'logevents', letype: 'gblrights', letitle: 'User:' + user, lelimit: 'max', formatversion: 2
});
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
logs.filter(l => { const ts = new Date(l.timestamp); return ts > auditStart && ts < auditEnd; }).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) { return { wasSteward: false, wasStaff: false, wasOmbuds: false }; }
}
async function fetchUserData(user, db, start, end) {
const auditStart = new Date(start), auditEnd = new Date(end);
// 1. FETCH CURRENT GLOBAL GROUPS (Cached)
if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward');
const isGloballyStaff = gGroups.includes('staff');
const isGloballyOmbuds = gGroups.includes('ombuds') || gGroups.includes('ombudsman');
// 2. FETCH GLOBAL HISTORY (To identify roles held during the period but lost since)
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
// 3. CHECK CURRENT LOCAL CHECKUSER STATUS
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) {}
const target = 'User:' + user + '@' + db;
let logText = '', addTime = null, removeTime = null, isSelfAssign = false, maxDurationMins = -1, longestTimeStr = "", assignCount = 0;
// --- 4. DEEP RIGHTS LOG SCAN (Pagination to bypass 500-limit) ---
let events = [];
let continueToken = null;
let finished = false;
try {
while (!finished) {
let params = {
action: 'query', list: 'logevents', letype: 'rights',
letitle: target, ledir: 'older', lelimit: 'max', formatversion: 2
};
if (continueToken) Object.assign(params, continueToken);
const res = await metaApi.get(params);
const batch = res.query.logevents || [];
events = events.concat(batch);
if (res.continue) continueToken = res.continue;
else finished = true;
}
let logEntries = [];
let pendingRemoved = null;
let hasLocalRightsInPeriod = false;
const LIMIT_COMBINE_MINS = 43200; // 30 days
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
const cuAdded = (p.add || []).includes('checkuser') || ((p.newgroups || []).includes('checkuser') && !(p.oldgroups || []).includes('checkuser'));
const cuRemoved = (p.remove || []).includes('checkuser') || (!(p.newgroups || []).includes('checkuser') && (p.oldgroups || []).includes('checkuser'));
const eventDate = new Date(e.timestamp);
const exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
// Track adding/revoking dates across entire history to determine status in audit period
if (cuAdded) addTime = eventDate;
if (cuRemoved) removeTime = eventDate;
// Verification logic: Held rights in period if added before end AND (still active OR removed after start)
if (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart)) {
hasLocalRightsInPeriod = true;
}
// Rights Log Formatting (Only for events within the audit window)
if (eventDate >= auditStart && eventDate <= auditEnd && (cuAdded || cuRemoved)) {
let expiryDate = null;
if (p.newmetadata) {
const cuMeta = p.newmetadata.find(m => m.group === 'checkuser');
if (cuMeta && cuMeta.expiry && cuMeta.expiry !== 'infinity') expiryDate = new Date(cuMeta.expiry);
}
const isSelf = (e.user === user || !e.user) ? " (Self-assign)" : "";
if (e.user === user || !e.user) isSelfAssign = true;
if (cuAdded) {
if (pendingRemoved) {
const diffMins = Math.round(Math.abs(pendingRemoved.date - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
if (diffMins <= LIMIT_COMBINE_MINS) {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf} (Duration: ${durStr})`);
} else {
logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
logEntries.unshift(`* ADDED: ${exactTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
}
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++; pendingRemoved = null;
} else if (expiryDate) {
const diffMins = Math.round(Math.abs(expiryDate - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
const exactExpiryTime = expiryDate.toISOString().replace('T', ' ').substring(0, 19);
logEntries.unshift(`* ADDED: ${exactTime} | EXPIRED: ${exactExpiryTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
} else {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: (Active/Not removed) by ${e.user}${isSelf}`);
}
} else if (cuRemoved) {
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
pendingRemoved = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
}
}
}
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
if (logEntries.length) logText = '\n' + logEntries.join('\n');
// --- 5. ROLE CLASSIFICATION ---
let roleLabel = "";
const hasActions = (results[db] && results[db][user] && results[db][user].total > 0);
let wasCU = hasLocalRightsInPeriod || hasActions;
if (isGloballyStaff || historyRes.wasStaff) {
roleLabel = isGloballyStaff ? "Current Staff" : "Former Staff (in period)";
}
else if (isCurrentLocal) {
roleLabel = "Current Local CheckUser";
}
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
roleLabel = `Steward action (Self-assign: ${assignCount > 1 ? assignCount + 'x, longest ' : ''}${longestTimeStr})`;
}
else if (isGloballySteward || historyRes.wasSteward) {
roleLabel = isGloballySteward ? "Current Steward" : "Former Steward (in period)";
}
else if (isGloballyOmbuds || historyRes.wasOmbuds) {
roleLabel = isGloballyOmbuds ? "Current Ombudsman" : "Former Ombudsman (in period)";
}
else if (wasCU) {
roleLabel = "Former Local CheckUser (in period)";
}
else {
roleLabel = "Unknown role";
}
return { role: roleLabel, log: logText };
} catch (err) {
return { role: "Error fetching data", log: "" };
}
}
async function runAudit(yf, mf, yt, mt) {
isRunning = true; userCache = {}; historyCache = {}; results = {}; emptyWikis = []; failedWikis = []; scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
if (wikisToScan.length === 0) { alert("No wikis selected!"); return; }
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf), endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false, continueToken = null;
while (!successLocal && isRunning) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
let res = await api.get(params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) continueToken = res.continue;
else { if (!results[db]) emptyWikis.push(db); successLocal = true; }
} catch (err) {
if (err?.status === 429) {
const retryAfter = parseInt(err.xhr?.getResponseHeader('Retry-After')) || 60;
$('#status-msg').html(`<span style="color:red; font-weight:bold;">Rate limit! Waiting ${retryAfter}s...</span>`);
await sleep(retryAfter * 1000);
continue;
} else {
failedWikis.push(db);
successLocal = true;
}
}
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const today = new Date().toISOString().split('T')[0];
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k active users ${monthCols.map(m => `!! ${m.label}`).join(' ')}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
const metrics = await fetchWikiMetrics(db);
const fmtActive = metrics.active.toLocaleString('en-US');
const iwPrefix = getInterwikiPrefix(db);
const projectLink = `[[${iwPrefix}:|${db}]]`;
const logLink = `[[${iwPrefix}:Special:CheckUserLog|(log)]]`;
wt += `|-\n! colspan="${4 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${projectLink} <small style="font-weight:normal; color:#54595d;">(Active Users as of ${today}: ${fmtActive})</small> — ${logLink}\n`;
// ----------------------------
let wikiRows = [], wT = 0, wMS = {}; monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
const m = await fetchUserData(user, db, START, END);
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total; monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.active > 0 ? ((uD.total / metrics.active) * 1000).toFixed(1) : "0.0";
let row = `|-\n| style="text-align:left;" | ${user}@${db} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.active > 0 ? ((wT / metrics.active) * 1000).toFixed(1) : "0.0";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
515en0qcr8c1m88bgob8ipvxls8bzvu
737747
737625
2026-04-12T11:02:07Z
MrJaroslavik
44012
e
737747
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit.
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800;
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
function getInterwikiPrefix(db) {
const specials = {
'commonswiki': 'commons', 'metawiki': 'm', 'wikidatawiki': 'd',
'mediawikiwiki': 'mw', 'specieswiki': 'wikispecies',
'foundationwiki': 'wikimedia', 'sourceswiki': 'wikisource'
};
if (specials[db]) return specials[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return 's:' + name.slice(0, -10);
if (name.endsWith('wikiversity')) return 'v:' + name.slice(0, -11);
if (name.endsWith('wiktionary')) return 'wikt:' + name.slice(0, -10);
if (name.endsWith('wikivoyage')) return 'voy:' + name.slice(0, -10);
if (name.endsWith('wikibooks')) return 'b:' + name.slice(0, -9);
if (name.endsWith('wikiquote')) return 'q:' + name.slice(0, -9);
if (name.endsWith('wikinews')) return 'n:' + name.slice(0, -8);
if (name.endsWith('wikimedia')) return 'wikimedia:' + name.slice(0, -9);
if (name.endsWith('wiki')) return 'w:' + name.slice(0, -4);
return 'w:' + name;
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php');
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const res = await api.get({
action: 'query', meta: 'siteinfo', siprop: 'statistics', formatversion: 2
});
return { active: res.query.statistics.activeusers || 0 };
} catch (e) { return { active: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await metaApi.get({
action: 'query', list: 'logevents', letype: 'gblrights', letitle: 'User:' + user, lelimit: 'max', formatversion: 2
});
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
logs.filter(l => { const ts = new Date(l.timestamp); return ts > auditStart && ts < auditEnd; }).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) { return { wasSteward: false, wasStaff: false, wasOmbuds: false }; }
}
async function fetchUserData(user, db, start, end) {
const auditStart = new Date(start), auditEnd = new Date(end);
// 1. FETCH CURRENT GLOBAL GROUPS (Cached)
if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward');
const isGloballyStaff = gGroups.includes('staff');
const isGloballyOmbuds = gGroups.includes('ombuds') || gGroups.includes('ombudsman');
// 2. FETCH GLOBAL HISTORY (To identify roles held during the period but lost since)
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
// 3. CHECK CURRENT LOCAL CHECKUSER STATUS
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) {}
const target = 'User:' + user + '@' + db;
let logText = '', addTime = null, removeTime = null, isSelfAssign = false, maxDurationMins = -1, longestTimeStr = "", assignCount = 0;
// --- 4. DEEP RIGHTS LOG SCAN (Pagination to bypass 500-limit) ---
let events = [];
let continueToken = null;
let finished = false;
let hasLocalRightsInPeriod = false;
try {
while (!finished) {
let params = { action: 'query', list: 'logevents', letype: 'rights', letitle: target, ledir: 'older', lelimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
const res = await metaApi.get(params);
events = events.concat(res.query.logevents || []);
if (res.continue) continueToken = res.continue;
else finished = true;
}
let logEntries = [];
let pendingRemoved = null;
const LIMIT_COMBINE_MINS = 43200; // 30 days
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
const cuAdded = (p.add || []).includes('checkuser') || ((p.newgroups || []).includes('checkuser') && !(p.oldgroups || []).includes('checkuser'));
const cuRemoved = (p.remove || []).includes('checkuser') || (!(p.newgroups || []).includes('checkuser') && (p.oldgroups || []).includes('checkuser'));
const eventDate = new Date(e.timestamp);
const exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
if (cuAdded) addTime = eventDate;
if (cuRemoved) removeTime = eventDate;
if (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart)) hasLocalRightsInPeriod = true;
if (eventDate >= auditStart && eventDate <= auditEnd && (cuAdded || cuRemoved)) {
let expiryDate = null;
if (p.newmetadata) {
const cuMeta = p.newmetadata.find(m => m.group === 'checkuser');
if (cuMeta && cuMeta.expiry && cuMeta.expiry !== 'infinity') expiryDate = new Date(cuMeta.expiry);
}
const isSelf = (e.user === user || !e.user) ? " (Self-assign)" : "";
if (e.user === user || !e.user) isSelfAssign = true;
if (cuAdded) {
if (pendingRemoved) {
const diffMins = Math.round(Math.abs(pendingRemoved.date - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
if (diffMins <= LIMIT_COMBINE_MINS) {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
pendingRemoved = null;
} else {
logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
pendingRemoved = null;
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: (Active/Not removed) by ${e.user}${isSelf}`);
}
} else if (expiryDate) {
const diffMins = Math.round(Math.abs(expiryDate - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
const exactExpiryTime = expiryDate.toISOString().replace('T', ' ').substring(0, 19);
logEntries.unshift(`* ADDED: ${exactTime} | EXPIRED: ${exactExpiryTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
} else {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: (Active/Not removed) by ${e.user}${isSelf}`);
}
} else if (cuRemoved) {
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
pendingRemoved = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
}
}
}
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
if (logEntries.length) logText = '\n' + logEntries.join('\n');
// --- ROLE CLASSIFICATION (Opravená priorita) ---
let roleLabel = "";
const hasActions = (results[db] && results[db][user] && results[db][user].total > 0);
let wasCU = hasLocalRightsInPeriod || hasActions;
// 1. Nejdřív Staff/Ombuds
if (isGloballyStaff || historyRes.wasStaff) {
roleLabel = isGloballyStaff ? "Current Staff" : "Former Staff (in period)";
}
else if (isGloballyOmbuds || historyRes.wasOmbuds) {
roleLabel = isGloballyOmbuds ? "Current Ombudsman" : "Former Ombudsman (in period)";
}
// 2. Potom CheckUser (Current vs Former)
else if (isCurrentLocal) {
roleLabel = "Current Local CheckUser";
}
else if (wasCU) {
roleLabel = "Former Local CheckUser (in period)";
}
// 3. A až nakonec Steward (pokud dělal akce bez CU práv)
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
roleLabel = `Steward action (Self-assign: ${assignCount > 1 ? assignCount + 'x, longest ' : ''}${longestTimeStr})`;
}
else if (isGloballySteward || historyRes.wasSteward) {
roleLabel = isGloballySteward ? "Current Steward" : "Former Steward (in period)";
}
else {
roleLabel = "Unknown role";
}
return { role: roleLabel, log: logText };
} catch (err) {
return { role: "Error fetching data", log: "" };
}
}
async function runAudit(yf, mf, yt, mt) {
isRunning = true; userCache = {}; historyCache = {}; results = {}; emptyWikis = []; failedWikis = []; scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
if (wikisToScan.length === 0) { alert("No wikis selected!"); return; }
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf), endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false, continueToken = null;
while (!successLocal && isRunning) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
let res = await api.get(params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) continueToken = res.continue;
else { if (!results[db]) emptyWikis.push(db); successLocal = true; }
} catch (err) {
if (err?.status === 429) {
const retryAfter = parseInt(err.xhr?.getResponseHeader('Retry-After')) || 60;
$('#status-msg').html(`<span style="color:red; font-weight:bold;">Rate limit! Waiting ${retryAfter}s...</span>`);
await sleep(retryAfter * 1000);
continue;
} else {
failedWikis.push(db);
successLocal = true;
}
}
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const today = new Date().toISOString().split('T')[0];
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k active users ${monthCols.map(m => `!! ${m.label}`).join(' ')}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
const metrics = await fetchWikiMetrics(db);
const fmtActive = metrics.active.toLocaleString('en-US');
const iwPrefix = getInterwikiPrefix(db);
const projectLink = `[[${iwPrefix}:|${db}]]`;
const logLink = `[[${iwPrefix}:Special:CheckUserLog|(log)]]`;
wt += `|-\n! colspan="${4 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${projectLink} <small style="font-weight:normal; color:#54595d;">(Active Users as of ${today}: ${fmtActive})</small> — ${logLink}\n`;
// ----------------------------
let wikiRows = [], wT = 0, wMS = {}; monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
const m = await fetchUserData(user, db, START, END);
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total; monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.active > 0 ? ((uD.total / metrics.active) * 1000).toFixed(1) : "0.0";
let row = `|-\n| style="text-align:left;" | ${user}@${db} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.active > 0 ? ((wT / metrics.active) * 1000).toFixed(1) : "0.0";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
ik51v8t9wrcttpccq6d5fdx3v2rz990
737749
737747
2026-04-12T11:28:33Z
MrJaroslavik
44012
e
737749
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit.
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800;
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
// Helper function to handle API calls with automatic retry on 429 errors
async function robustCall(api, params) {
let retries = 0;
const maxRetries = 5;
while (retries < maxRetries) {
try {
return await api.get(params);
} catch (err) {
if (err?.status === 429) {
retries++;
const retryAfter = parseInt(err.xhr?.getResponseHeader('Retry-After')) || (30 * retries);
$('#status-msg').html(`<span style="color:orange; font-weight:bold;">Rate limit hit! Resting ${retryAfter}s... (Attempt ${retries}/${maxRetries})</span>`);
await sleep(retryAfter * 1000);
} else {
throw err; // Re-throw other errors
}
}
}
throw new Error("Max retries reached");
}
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
function getInterwikiPrefix(db) {
const specials = {
'commonswiki': 'commons', 'metawiki': 'm', 'wikidatawiki': 'd',
'mediawikiwiki': 'mw', 'specieswiki': 'wikispecies',
'foundationwiki': 'wikimedia', 'sourceswiki': 'wikisource'
};
if (specials[db]) return specials[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return 's:' + name.slice(0, -10);
if (name.endsWith('wikiversity')) return 'v:' + name.slice(0, -11);
if (name.endsWith('wiktionary')) return 'wikt:' + name.slice(0, -10);
if (name.endsWith('wikivoyage')) return 'voy:' + name.slice(0, -10);
if (name.endsWith('wikibooks')) return 'b:' + name.slice(0, -9);
if (name.endsWith('wikiquote')) return 'q:' + name.slice(0, -9);
if (name.endsWith('wikinews')) return 'n:' + name.slice(0, -8);
if (name.endsWith('wikimedia')) return 'wikimedia:' + name.slice(0, -9);
if (name.endsWith('wiki')) return 'w:' + name.slice(0, -4);
return 'w:' + name;
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php');
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const res = await robustCall(api, { action: 'query', meta: 'siteinfo', siprop: 'statistics', formatversion: 2 });
return { active: res.query.statistics.activeusers || 0 };
} catch (e) { return { active: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await robustCall(metaApi, { action: 'query', list: 'logevents', letype: 'gblrights', letitle: 'User:' + user, lelimit: 'max', formatversion: 2 });
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
logs.filter(l => { const ts = new Date(l.timestamp); return ts > auditStart && ts < auditEnd; }).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) { return { wasSteward: false, wasStaff: false, wasOmbuds: false }; }
}
async function fetchUserData(user, db, start, end) {
const auditStart = new Date(start), auditEnd = new Date(end);
// 1. FETCH CURRENT GLOBAL GROUPS (Cached)
if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward');
const isGloballyStaff = gGroups.includes('staff');
const isGloballyOmbuds = gGroups.includes('ombuds') || gGroups.includes('ombudsman');
// 2. FETCH GLOBAL HISTORY (To identify roles held during the period but lost since)
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
// 3. CHECK CURRENT LOCAL CHECKUSER STATUS
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) {}
const target = 'User:' + user + '@' + db;
let logText = '', addTime = null, removeTime = null, isSelfAssign = false, maxDurationMins = -1, longestTimeStr = "", assignCount = 0;
// --- 4. DEEP RIGHTS LOG SCAN (Pagination to bypass 500-limit) ---
let events = [];
let continueToken = null;
let finished = false;
let hasLocalRightsInPeriod = false;
try {
while (!finished) {
let params = { action: 'query', list: 'logevents', letype: 'rights', letitle: target, ledir: 'older', lelimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
// Use robustCall to prevent 429 failures during history scan
const res = await robustCall(metaApi, params);
events = events.concat(res.query.logevents || []);
if (res.continue) continueToken = res.continue;
else finished = true;
}
let logEntries = [];
let pendingRemoved = null;
let lastAddedTime = null; // Track last processed ADD to avoid duplicates like Xaosflux
const LIMIT_COMBINE_MINS = 43200;
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
const cuAdded = (p.add || []).includes('checkuser') || ((p.newgroups || []).includes('checkuser') && !(p.oldgroups || []).includes('checkuser'));
const cuRemoved = (p.remove || []).includes('checkuser') || (!(p.newgroups || []).includes('checkuser') && (p.oldgroups || []).includes('checkuser'));
const eventDate = new Date(e.timestamp);
const exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
if (cuAdded) addTime = eventDate;
if (cuRemoved) removeTime = eventDate;
if (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart)) hasLocalRightsInPeriod = true;
if (eventDate >= auditStart && eventDate <= auditEnd && (cuAdded || cuRemoved)) {
let expiryDate = null;
if (p.newmetadata) {
const cuMeta = p.newmetadata.find(m => m.group === 'checkuser');
if (cuMeta && cuMeta.expiry && cuMeta.expiry !== 'infinity') expiryDate = new Date(cuMeta.expiry);
}
const isSelf = (e.user === user || !e.user) ? " (Self-assign)" : "";
if (e.user === user || !e.user) isSelfAssign = true;
if (cuAdded) {
// If we find an ADD and have a REMOVE waiting, pair them
if (pendingRemoved) {
const diffMins = Math.round(Math.abs(pendingRemoved.date - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
pendingRemoved = null;
lastAddedTime = exactTime;
} else if (expiryDate) {
// Expiry pairing
const diffMins = Math.round(Math.abs(expiryDate - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
const exactExpiryTime = expiryDate.toISOString().replace('T', ' ').substring(0, 19);
logEntries.unshift(`* ADDED: ${exactTime} | EXPIRED: ${exactExpiryTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
lastAddedTime = exactTime;
} else if (lastAddedTime !== exactTime) {
// Only add as "Active" if it's not a duplicate record of the one we just paired
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: (Active/Not removed) by ${e.user}${isSelf}`);
lastAddedTime = exactTime;
}
} else if (cuRemoved) {
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
pendingRemoved = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
}
}
}
if (res.continue) continueToken = res.continue;
else finished = true;
}
let logEntries = [];
let pendingRemoved = null;
const LIMIT_COMBINE_MINS = 43200; // 30 days
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
const cuAdded = (p.add || []).includes('checkuser') || ((p.newgroups || []).includes('checkuser') && !(p.oldgroups || []).includes('checkuser'));
const cuRemoved = (p.remove || []).includes('checkuser') || (!(p.newgroups || []).includes('checkuser') && (p.oldgroups || []).includes('checkuser'));
const eventDate = new Date(e.timestamp);
const exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
if (cuAdded) addTime = eventDate;
if (cuRemoved) removeTime = eventDate;
if (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart)) hasLocalRightsInPeriod = true;
if (eventDate >= auditStart && eventDate <= auditEnd && (cuAdded || cuRemoved)) {
let expiryDate = null;
if (p.newmetadata) {
const cuMeta = p.newmetadata.find(m => m.group === 'checkuser');
if (cuMeta && cuMeta.expiry && cuMeta.expiry !== 'infinity') expiryDate = new Date(cuMeta.expiry);
}
const isSelf = (e.user === user || !e.user) ? " (Self-assign)" : "";
if (e.user === user || !e.user) isSelfAssign = true;
if (cuAdded) {
if (pendingRemoved) {
const diffMins = Math.round(Math.abs(pendingRemoved.date - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
if (diffMins <= LIMIT_COMBINE_MINS) {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
pendingRemoved = null;
} else {
logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
pendingRemoved = null;
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: (Active/Not removed) by ${e.user}${isSelf}`);
}
} else if (expiryDate) {
const diffMins = Math.round(Math.abs(expiryDate - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
const exactExpiryTime = expiryDate.toISOString().replace('T', ' ').substring(0, 19);
logEntries.unshift(`* ADDED: ${exactTime} | EXPIRED: ${exactExpiryTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
} else {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: (Active/Not removed) by ${e.user}${isSelf}`);
}
} else if (cuRemoved) {
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
pendingRemoved = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
}
}
}
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
if (logEntries.length) logText = '\n' + logEntries.join('\n');
// --- ROLE CLASSIFICATION (Opravená priorita) ---
let roleLabel = "";
const hasActions = (results[db] && results[db][user] && results[db][user].total > 0);
let wasCU = hasLocalRightsInPeriod || hasActions;
// 1. Nejdřív Staff/Ombuds
if (isGloballyStaff || historyRes.wasStaff) {
roleLabel = isGloballyStaff ? "Current Staff" : "Former Staff (in period)";
}
else if (isGloballyOmbuds || historyRes.wasOmbuds) {
roleLabel = isGloballyOmbuds ? "Current Ombudsman" : "Former Ombudsman (in period)";
}
// 2. Potom CheckUser (Current vs Former)
else if (isCurrentLocal) {
roleLabel = "Current Local CheckUser";
}
else if (wasCU) {
roleLabel = "Former Local CheckUser (in period)";
}
// 3. A až nakonec Steward (pokud dělal akce bez CU práv)
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
roleLabel = `Steward action (Self-assign: ${assignCount > 1 ? assignCount + 'x, longest ' : ''}${longestTimeStr})`;
}
else if (isGloballySteward || historyRes.wasSteward) {
roleLabel = isGloballySteward ? "Current Steward" : "Former Steward (in period)";
}
else {
roleLabel = "Unknown role";
}
return { role: roleLabel, log: logText };
} catch (err) {
return { role: "Error fetching data", log: "" };
}
}
async function runAudit(yf, mf, yt, mt) {
isRunning = true; userCache = {}; historyCache = {}; results = {}; emptyWikis = []; failedWikis = []; scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
if (wikisToScan.length === 0) { alert("No wikis selected!"); return; }
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf), endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false;
let continueToken = null;
let api;
try {
api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
} catch (e) {
failedWikis.push(db);
continue; // Skip invalid domains immediately
}
while (!successLocal && isRunning) {
try {
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
// robustCall automatically retries 429s. If it fails completely, it throws.
let res = await robustCall(api, params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) {
continueToken = res.continue;
} else {
if (!results[db]) emptyWikis.push(db);
successLocal = true;
}
} catch (err) {
// Only reached if robustCall exhausted all retries or hit a non-429 error
console.warn(`Audit failed for ${db}`, err);
failedWikis.push(db);
successLocal = true;
}
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const today = new Date().toISOString().split('T')[0];
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k active users ${monthCols.map(m => `!! ${m.label}`).join(' ')}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
// Safely fetch metrics so 429 doesn't skip the whole wiki row
let metrics;
try {
metrics = await fetchWikiMetrics(db);
} catch (e) {
metrics = { active: 0 };
}
const fmtActive = metrics.active.toLocaleString('en-US');
const iwPrefix = getInterwikiPrefix(db);
const projectLink = `[[${iwPrefix}:|${db}]]`;
const logLink = `[[${iwPrefix}:Special:CheckUserLog|(log)]]`;
wt += `|-\n! colspan="${4 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${projectLink} <small style="font-weight:normal; color:#54595d;">(Active Users: ${fmtActive})</small> — ${logLink}\n`;
let wikiRows = [], wT = 0, wMS = {};
monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
// Safely fetch user data so 429 doesn't skip the whole wiki row
let m;
try {
m = await fetchUserData(user, db, START, END);
} catch (e) {
m = { role: "Data Error (429)", log: "" };
}
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total;
monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.active > 0 ? ((uD.total / metrics.active) * 1000).toFixed(1) : "0.0";
let row = `|-\n| style="text-align:left;" | ${user}@${db} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.active > 0 ? ((wT / metrics.active) * 1000).toFixed(1) : "0.0";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
dy6v9g2jg9ow9k7136ynaslkhr5t0tx
737750
737749
2026-04-12T11:35:12Z
MrJaroslavik
44012
Undid revision [[Special:Diff/737749|737749]] by [[Special:Contributions/MrJaroslavik|MrJaroslavik]] ([[User talk:MrJaroslavik|talk]])
737750
javascript
text/javascript
// GlobalCheckUserStats.js
// Features:
// - Global Audit: Scans CheckUser logs across 900+ Wikimedia projects at once.
// - Smart Categorization: Identifies roles (Local CU, Steward, Staff, etc.).
// - Steward Logic: Detects temporary access, exact durations, and longest active periods.
// - Deep Scan: Automated pagination to bypass the 500-entry API limit.
// - Robust Connection: Automated retries for 429 rate-limits and custom domain mapping.
// - Full Reporting: Outputs sortable Wikitables and detailed rights change logs.
// - Custom UI: Integrated control panel on [[Special:BlankPage/GlobalCheckUserStats]].
// - With help of Gemini 3
(function () {
'use strict';
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Blankpage' || mw.config.get('wgTitle').indexOf('GlobalCheckUserStats') === -1) return;
const rawWikis = ['abstractwiki', 'abwiki', 'acewiki', 'adywiki', 'afwiki', 'afwikibooks', 'afwikiquote', 'afwiktionary', 'alswiki', 'altwiki', 'amiwiki', 'amwiki', 'amwiktionary', 'angwiki', 'angwiktionary', 'annwiki', 'anpwiki', 'anwiki', 'anwiktionary', 'arcwiki', 'arwiki', 'arwikibooks', 'arwikimedia', 'arwikinews', 'arwikiquote', 'arwikisource', 'arwikiversity', 'arwiktionary', 'arywiki', 'arzwiki', 'astwiki', 'astwiktionary', 'aswiki', 'aswikiquote', 'aswikisource', 'atjwiki', 'avkwiki', 'avwiki', 'awawiki', 'aywiki', 'aywiktionary', 'azbwiki', 'azwiki', 'azwikibooks', 'azwikiquote', 'azwikisource', 'azwiktionary', 'banwiki', 'banwikisource', 'barwiki', 'bat_smgwiki', 'bawiki', 'bawikibooks', 'bbcwiki', 'bclwiki', 'bclwikiquote', 'bclwikisource', 'bclwiktionary', 'bdrwiki', 'bdwikimedia', 'be_x_oldwiki', 'betawikiversity', 'bewiki', 'bewikibooks', 'bewikimedia', 'bewikiquote', 'bewikisource', 'bewiktionary', 'bewwiki', 'bewwiktionary', 'bgwiki', 'bgwikibooks', 'bgwikiquote', 'bgwikisource', 'bgwiktionary', 'bhwiki', 'biwiki', 'bjnwiki', 'bjnwikiquote', 'bjnwiktionary', 'blkwiki', 'blkwiktionary', 'bmwiki', 'bnwiki', 'bnwikibooks', 'bnwikiquote', 'bnwikisource', 'bnwikivoyage', 'bnwiktionary', 'bowiki', 'bpywiki', 'brwiki', 'brwikimedia', 'brwikiquote', 'brwikisource', 'brwiktionary', 'bswiki', 'bswikibooks', 'bswikinews', 'bswikiquote', 'bswikisource', 'bswiktionary', 'btmwiki', 'btmwiktionary', 'bugwiki', 'bxrwiki', 'cawiki', 'cawikibooks', 'cawikimedia', 'cawikinews', 'cawikiquote', 'cawikisource', 'cawiktionary', 'cbk_zamwiki', 'cdowiki', 'cebwiki', 'cewiki', 'chrwiki', 'chrwiktionary', 'chwiki', 'chywiki', 'ckbwiki', 'ckbwiktionary', 'commonswiki', 'cowiki', 'cowikimedia', 'cowiktionary', 'crhwiki', 'csbwiki', 'csbwiktionary', 'cswiki', 'cswikibooks', 'cswikinews', 'cswikiquote', 'cswikisource', 'cswikiversity', 'cswikivoyage', 'cswiktionary', 'cuwiki', 'cvwiki', 'cvwikibooks', 'cywiki', 'cywikibooks', 'cywikiquote', 'cywikisource', 'cywiktionary', 'dagwiki', 'dawiki', 'dawikibooks', 'dawikiquote', 'dawikisource', 'dawiktionary', 'dewiki', 'dewikibooks', 'dewikinews', 'dewikiquote', 'dewikisource', 'dewikiversity', 'dewikivoyage', 'dewiktionary', 'dgawiki', 'dinwiki', 'diqwiki', 'diqwiktionary', 'dkwikimedia', 'dsbwiki', 'dtpwiki', 'dtywiki', 'dvwiki', 'dvwiktionary', 'dzwiki', 'eewiki', 'elwiki', 'elwikibooks', 'elwikinews', 'elwikiquote', 'elwikisource', 'elwikiversity', 'elwikivoyage', 'elwiktionary', 'emlwiki', 'enwiki', 'enwikibooks', 'enwikinews', 'enwikiquote', 'enwikisource', 'enwikiversity', 'enwikivoyage', 'enwiktionary', 'eowiki', 'eowikibooks', 'eowikinews', 'eowikiquote', 'eowikisource', 'eowikivoyage', 'eowiktionary', 'eswiki', 'eswikibooks', 'eswikinews', 'eswikiquote', 'eswikisource', 'eswikiversity', 'eswikivoyage', 'eswiktionary', 'etwiki', 'etwikibooks', 'eewikimedia', 'etwikiquote', 'etwikisource', 'etwiktionary', 'euwiki', 'euwikibooks', 'euwikiquote', 'euwikisource', 'euwiktionary', 'extwiki', 'fatwiki', 'fawiki', 'fawikibooks', 'fawikinews', 'fawikiquote', 'fawikisource', 'fawikivoyage', 'fawiktionary', 'ffwiki', 'fiu_vrowiki', 'fiwiki', 'fiwikibooks', 'fiwikimedia', 'fiwikinews', 'fiwikiquote', 'fiwikisource', 'fiwikiversity', 'fiwikivoyage', 'fiwiktionary', 'fjwiki', 'fjwiktionary', 'fonwiki', 'foundationwiki', 'fowiki', 'fowikisource', 'fowiktionary', 'frpwiki', 'frrwiki', 'frwiki', 'frwikibooks', 'frwikinews', 'frwikiquote', 'frwikisource', 'frwikiversity', 'frwikivoyage', 'frwiktionary', 'furwiki', 'fywiki', 'fywikibooks', 'fywiktionary', 'gagwiki', 'ganwiki', 'gawiki', 'gawiktionary', 'gcrwiki', 'gdwiki', 'gdwiktionary', 'glkwiki', 'glwiki', 'glwikibooks', 'glwikiquote', 'glwikisource', 'glwiktionary', 'gnwiki', 'gnwiktionary', 'gomwiki', 'gomwiktionary', 'gorwiki', 'gorwikiquote', 'gorwiktionary', 'gotwiki', 'gpewiki', 'gucwiki', 'gurwiki', 'guwiki', 'guwikiquote', 'guwikisource', 'guwiktionary', 'guwwiki', 'guwwikinews', 'guwwikiquote', 'guwwiktionary', 'gvwiki', 'gvwiktionary', 'hakwiki', 'hawiki', 'hawiktionary', 'hawwiki', 'hewiki', 'hewikibooks', 'hewikinews', 'hewikiquote', 'hewikisource', 'hewikivoyage', 'hewiktionary', 'hifwiki', 'hifwiktionary', 'hiwiki', 'hiwikibooks', 'hiwikiquote', 'hiwikisource', 'hiwikiversity', 'hiwikivoyage', 'hiwiktionary', 'hrwiki', 'hrwikibooks', 'hrwikiquote', 'hrwikisource', 'hrwiktionary', 'hsbwiki', 'hsbwiktionary', 'htwiki', 'huwiki', 'huwikibooks', 'huwikisource', 'huwiktionary', 'hywiki', 'hywikibooks', 'hywikiquote', 'hywikisource', 'hywiktionary', 'hywwiki', 'iawiki', 'iawikibooks', 'iawiktionary', 'ibawiki', 'idwiki', 'idwikibooks', 'idwikiquote', 'idwikisource', 'idwikivoyage', 'idwiktionary', 'iewiki', 'iewiktionary', 'iglwiki', 'igwiki', 'igwikiquote', 'igwiktionary', 'ikwiki', 'ilowiki', 'incubatorwiki', 'inhwiki', 'iowiki', 'iowiktionary', 'iswiki', 'iswikibooks', 'iswikiquote', 'iswikisource', 'iswiktionary', 'itwiki', 'itwikibooks', 'itwikinews', 'itwikiquote', 'itwikisource', 'itwikiversity', 'itwikivoyage', 'itwiktionary', 'iuwiki', 'iuwiktionary', 'jamwiki', 'jawiki', 'jawikibooks', 'jawikinews', 'jawikisource', 'jawikiversity', 'jawikivoyage', 'jawiktionary', 'jbowiki', 'jbowiktionary', 'jvwiki', 'jvwikisource', 'jvwiktionary', 'kaawiki', 'kaawiktionary', 'kabwiki', 'kaiwiki', 'kajwiki', 'kawiki', 'kawikibooks', 'kawikiquote', 'kawikisource', 'kawiktionary', 'kbdwiki', 'kbdwiktionary', 'kbpwiki', 'kcgwiki', 'kcgwiktionary', 'kgewiki', 'kgwiki', 'kiwiki', 'kkwiki', 'kkwikibooks', 'kkwiktionary', 'klwiktionary', 'kmwiki', 'kmwikibooks', 'kmwiktionary', 'kncwiki', 'knwiki', 'knwikiquote', 'knwikisource', 'knwiktionary', 'koiwiki', 'kowiki', 'kowikibooks', 'kowikinews', 'kowikiquote', 'kowikisource', 'kowikiversity', 'kowiktionary', 'krcwiki', 'kshwiki', 'kswiki', 'kswiktionary', 'kuswiki', 'kuwiki', 'kuwikibooks', 'kuwikiquote', 'kuwiktionary', 'kvwiki', 'kwwiki', 'kwwiktionary', 'kywiki', 'kywikiquote', 'kywiktionary', 'labswiki', 'ladwiki', 'lawiki', 'lawikibooks', 'lawikiquote', 'lawikisource', 'lawiktionary', 'lbewiki', 'lbwiki', 'lbwiktionary', 'lezwiki', 'lfnwiki', 'lgwiki', 'lijwiki', 'lijwikisource', 'liwiki', 'liwikibooks', 'liwikinews', 'liwikiquote', 'liwikisource', 'liwiktionary', 'lldwiki', 'lmowiki', 'lmowiktionary', 'lnwiki', 'lnwiktionary', 'lowiki', 'lowiktionary', 'ltgwiki', 'ltwiki', 'ltwikibooks', 'ltwikiquote', 'ltwikisource', 'ltwiktionary', 'lvwiki', 'lvwiktionary', 'madwiki', 'madwikisource', 'madwiktionary', 'maiwiki', 'map_bmswiki', 'mdfwiki', 'mediawikiwiki', 'metawiki', 'mgwiki', 'mgwikibooks', 'mgwiktionary', 'mhrwiki', 'minwiki', 'minwikibooks', 'minwikisource', 'minwiktionary', 'miwiki', 'miwiktionary', 'mkwiki', 'mkwikibooks', 'mkwikimedia', 'mkwikisource', 'mkwiktionary', 'mlwiki', 'mlwikibooks', 'mlwikiquote', 'mlwikisource', 'mlwiktionary', 'mniwiki', 'mniwiktionary', 'mnwiki', 'mnwiktionary', 'mnwwiki', 'mnwwiktionary', 'moswiki', 'mrjwiki', 'mrwiki', 'mrwikibooks', 'mrwikiquote', 'mrwikisource', 'mrwiktionary', 'mswiki', 'mswikibooks', 'mswikiquote', 'mswikisource', 'mswiktionary', 'mtwiki', 'mtwiktionary', 'mwlwiki', 'mxwikimedia', 'myvwiki', 'mywiki', 'mywikisource', 'mywiktionary', 'mznwiki', 'nahwiki', 'nahwiktionary', 'napwiki', 'napwikisource', 'nawiktionary', 'nds_nlwiki', 'ndswiki', 'ndswiktionary', 'newiki', 'newikibooks', 'newiktionary', 'newwiki', 'niawiki', 'niawiktionary', 'nlwiki', 'nlwikibooks', 'nlwikimedia', 'nlwikinews', 'nlwikiquote', 'nlwikisource', 'nlwikivoyage', 'nlwiktionary', 'nnwiki', 'nnwikiquote', 'nnwiktionary', 'novwiki', 'nowiki', 'nowikibooks', 'nowikimedia', 'nowikinews', 'nowikiquote', 'nowikisource', 'nowiktionary', 'nqowiki', 'nrmwiki', 'nrwiki', 'nsowiki', 'nupwiki', 'nvwiki', 'nycwikimedia', 'nywiki', 'ocwiki', 'ocwikibooks', 'ocwiktionary', 'olowiki', 'omwiki', 'omwiktionary', 'orwiki', 'orwikisource', 'orwiktionary', 'oswiki', 'outreachwiki', 'pagwiki', 'pamwiki', 'papwiki', 'pawiki', 'pawikibooks', 'pawikisource', 'pawiktionary', 'pcdwiki', 'pcmwiki', 'pcmwikiquote', 'pdcwiki', 'pflwiki', 'piwiki', 'plwiki', 'plwikibooks', 'plwikimedia', 'plwikinews', 'plwikiquote', 'plwikisource', 'plwikivoyage', 'plwiktionary', 'pmswiki', 'pmswikisource', 'pnbwiki', 'pnbwiktionary', 'pntwiki', 'pplwiki', 'pswiki', 'pswikivoyage', 'pswiktionary', 'ptwiki', 'ptwikibooks', 'ptwikimedia', 'ptwikinews', 'ptwikiquote', 'ptwikisource', 'ptwikiversity', 'ptwikivoyage', 'ptwiktionary', 'pwnwiki', 'quwiktionary', 'rkiwiki', 'rmwiki', 'rmywiki', 'rnwiki', 'roa_rupwiki', 'roa_rupwiktionary', 'roa_tarawiki', 'rowiki', 'rowikibooks', 'rowikinews', 'rowikiquote', 'rowiktionary', 'rskwiki', 'ruewiki', 'ruwiki', 'ruwikibooks', 'ruwikinews', 'ruwikiquote', 'ruwikisource', 'ruwikiversity', 'ruwikivoyage', 'ruwiktionary', 'rwwiki', 'rwwiktionary', 'sahwiki', 'sahwikiquote', 'sahwikisource', 'satwiki', 'satwiktionary', 'sawiki', 'sawikibooks', 'sawikiquote', 'sawikisource', 'sawiktionary', 'scnwiki', 'scnwiktionary', 'scowiki', 'scwiki', 'sdwiki', 'sdwiktionary', 'sewiki', 'sewikimedia', 'sgwiki', 'sgwiktionary', 'shiwiki', 'shnwiki', 'shnwikibooks', 'shnwikinews', 'shnwikivoyage', 'shnwiktionary', 'shwiki', 'shwiktionary', 'shywiktionary', 'simplewiki', 'simplewiktionary', 'siwiki', 'siwikibooks', 'siwiktionary', 'skwiki', 'skrwiki', 'skrwiktionary', 'slwiki', 'slwikibooks', 'slwikiquote', 'slwikisource', 'slwikiversity', 'slwiktionary', 'smnwiki', 'smwiki', 'smwiktionary', 'snwiki', 'sourceswiki', 'sowiki', 'sowiktionary', 'specieswiki', 'sqwiki', 'sqwikibooks', 'sqwikinews', 'sqwikiquote', 'sqwiktionary', 'srnwiki', 'srwiki', 'srwikibooks', 'srwikinews', 'srwikiquote', 'srwikisource', 'srwiktionary', 'sswiki', 'sswiktionary', 'stqwiki', 'stwiki', 'stwiktionary', 'suwiki', 'suwikiquote', 'suwikisource', 'suwiktionary', 'svwiki', 'svwikibooks', 'svwikinews', 'svwikiquote', 'svwikisource', 'svwikiversity', 'svwikivoyage', 'svwiktionary', 'swwiki', 'swwiktionary', 'sylwiki', 'szlwiki', 'szywiki', 'tawiki', 'tawikibooks', 'tawikinews', 'tawikiquote', 'tawikisource', 'tawiktionary', 'taywiki', 'tcywiki', 'tcywikisource', 'tcywiktionary', 'tddwiki', 'tewiki', 'tewikibooks', 'tewikiquote', 'tewikisource', 'tewiktionary', 'tgwiki', 'tgwikibooks', 'tgwiktionary', 'thwiki', 'thwikibooks', 'thwikimedia', 'thwikiquote', 'thwikisource', 'thwiktionary', 'tigwiki', 'tiwiki', 'tiwiktionary', 'tkwiki', 'tkwiktionary', 'tlwiki', 'tlwikibooks', 'tlwikiquote', 'tlwikisource', 'tlwiktionary', 'tlywiki', 'tnwiki', 'tnwiktionary', 'tokwiki', 'towiki', 'tpiwiki', 'tpiwiktionary', 'trvwiki', 'trwiki', 'trwikibooks', 'trwikimedia', 'trwikinews', 'trwikiquote', 'trwikisource', 'trwikivoyage', 'trwiktionary', 'tswiki', 'tswiktionary', 'ttwiki', 'ttwikibooks', 'ttwikiquote', 'ttwiktionary', 'tumwiki', 'twwiki', 'twwiktionary', 'tyvwiki', 'tywiki', 'uawikimedia', 'udmwiki', 'ugwiki', 'ugwiktionary', 'ukwiki', 'ukwikibooks', 'ukwikinews', 'ukwikiquote', 'ukwikisource', 'ukwikivoyage', 'ukwiktionary', 'urwiki', 'urwikibooks', 'urwikiquote', 'urwikisource', 'urwiktionary', 'uzwiki', 'uzwikiquote', 'uzwiktionary', 'vecwiki', 'vecwikisource', 'vecwiktionary', 'vepwiki', 'vewiki', 'viwiki', 'viwikibooks', 'viwikiquote', 'viwikisource', 'viwikivoyage', 'viwiktionary', 'vlswiki', 'vowiki', 'vowiktionary', 'warwiki', 'wawiki', 'wawikisource', 'wawiktionary', 'wikidatawiki', 'wikimaniawiki', 'wowiki', 'wowiktionary', 'wuuwiki', 'xalwiki', 'xhwiki', 'xmfwiki', 'yiwiki', 'yiwikisource', 'yiwiktionary', 'yowiki', 'zawiki', 'zeawiki', 'zghwiki', 'zghwiktionary', 'zh_classicalwiki', 'zh_min_nanwiki', 'zh_min_nanwikisource', 'zh_min_nanwiktionary', 'zh_yuewiki', 'zhwiki', 'zhwikibooks', 'zhwikinews', 'zhwikiquote', 'zhwikisource', 'zhwikiversity', 'zhwikivoyage', 'zhwiktionary', 'zuwiki', 'zuwiktionary', 'test2wiki', 'testwiki'];
const DELAY_MS = 800;
const sleep = ms => new Promise(r => setTimeout(r, ms));
let userCache = {};
let historyCache = {};
function getDomain(db) {
const mapping = {
'commonswiki': 'commons.wikimedia.org', 'metawiki': 'meta.wikimedia.org', 'wikidatawiki': 'www.wikidata.org',
'mediawikiwiki': 'www.mediawiki.org', 'sourceswiki': 'wikisource.org', 'foundationwiki': 'foundation.wikimedia.org',
'incubatorwiki': 'incubator.wikimedia.org', 'outreachwiki': 'outreach.wikimedia.org',
'be_x_oldwiki': 'be-tarask.wikipedia.org', 'labswiki': 'wikitech.wikimedia.org',
'wikimaniawiki': 'wikimania.wikimedia.org', 'specieswiki': 'species.wikimedia.org',
'abstractwiki': 'abstract.wikipedia.org', 'betawikiversity': 'beta.wikiversity.org',
'mo_wiki': 'ro.wikipedia.org',
'testwiki': 'test.wikipedia.org', 'test2wiki': 'test2.wikipedia.org',
'wikifunctionswiki': 'www.wikifunctions.org',
'testcommonswiki': 'test-commons.wikimedia.org',
'testwikidatawiki': 'test.wikidata.org',
};
if (mapping[db]) return mapping[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return name.slice(0, -10) + '.wikisource.org';
if (name.endsWith('wikiversity')) return name.slice(0, -11) + '.wikiversity.org';
if (name.endsWith('wiktionary')) return name.slice(0, -10) + '.wiktionary.org';
if (name.endsWith('wikivoyage')) return name.slice(0, -10) + '.wikivoyage.org';
if (name.endsWith('wikibooks')) return name.slice(0, -9) + '.wikibooks.org';
if (name.endsWith('wikiquote')) return name.slice(0, -9) + '.wikiquote.org';
if (name.endsWith('wikinews')) return name.slice(0, -8) + '.wikinews.org';
if (name.endsWith('wikimedia')) return name.slice(0, -9) + '.wikimedia.org';
if (name.endsWith('wiki')) return name.slice(0, -4) + '.wikipedia.org';
return name + '.wikipedia.org';
}
function getInterwikiPrefix(db) {
const specials = {
'commonswiki': 'commons', 'metawiki': 'm', 'wikidatawiki': 'd',
'mediawikiwiki': 'mw', 'specieswiki': 'wikispecies',
'foundationwiki': 'wikimedia', 'sourceswiki': 'wikisource'
};
if (specials[db]) return specials[db];
const name = db.replace(/_/g, '-');
if (name.endsWith('wikisource')) return 's:' + name.slice(0, -10);
if (name.endsWith('wikiversity')) return 'v:' + name.slice(0, -11);
if (name.endsWith('wiktionary')) return 'wikt:' + name.slice(0, -10);
if (name.endsWith('wikivoyage')) return 'voy:' + name.slice(0, -10);
if (name.endsWith('wikibooks')) return 'b:' + name.slice(0, -9);
if (name.endsWith('wikiquote')) return 'q:' + name.slice(0, -9);
if (name.endsWith('wikinews')) return 'n:' + name.slice(0, -8);
if (name.endsWith('wikimedia')) return 'wikimedia:' + name.slice(0, -9);
if (name.endsWith('wiki')) return 'w:' + name.slice(0, -4);
return 'w:' + name;
}
mw.loader.using(['mediawiki.api', 'mediawiki.ForeignApi']).then(function () {
const metaApi = new mw.ForeignApi('https://meta.wikimedia.org/w/api.php');
const now = new Date();
let results = {}, emptyWikis = [], failedWikis = [], scannedWikis = [], isRunning = false;
let currentFilterMode = 'all';
let currentUserFilter = 'all';
function setupUI() {
const currentYear = now.getFullYear();
let yearOpts = '';
for (let y = currentYear; y >= 2005; y--) yearOpts += `<option value="${y}">${y}</option>`;
let monthOptsFrom = '';
let monthOptsTo = '';
for (let m = 1; m <= 12; m++) {
monthOptsFrom += `<option value="${m}" ${m === 1 ? 'selected' : ''}>${m}</option>`;
monthOptsTo += `<option value="${m}" ${m === 12 ? 'selected' : ''}>${m}</option>`;
}
$('#firstHeading').text('GlobalCheckUserStats.js');
$('#mw-content-text').empty().append(`
<div style="border:1px solid #a2a9b1; padding:15px; background:#f8f9fa;">
<h3>Stats Range</h3>
From: <select id="y-f" style="width:70px;">${yearOpts}</select> <select id="m-f" style="width:50px;">${monthOptsFrom}</select>
To: <select id="y-t" style="width:70px;">${yearOpts}</select> <select id="m-t" style="width:50px;">${monthOptsTo}</select>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>Wiki Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-all" checked> All wikis</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-except"> All wikis except</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="wiki-mode" id="btn-only"> Only these wikis</label>
<span id="wiki-help-trigger" style="cursor:help; background:#36c; color:#fff; border-radius:50%; width:18px; height:18px; display:inline-block; text-align:center; font-weight:bold; font-size:12px; line-height:18px;" title="Show all wiki DB names">?</span>
</div>
<div id="filter-input-container" style="display:none; margin-top:10px;">
<input id="wiki-filter" type="text" style="width:100%; max-width:600px;" placeholder="">
</div>
<div style="margin-top:15px; display:flex; align-items:center; gap:20px; font-size:13px;">
<strong>User Filter:</strong>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-all" checked> All users</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-local"> Only Local CUs</label>
<label style="cursor:pointer; display:flex; align-items:center; gap:5px;"><input type="radio" name="user-mode" id="u-steward"> Only Stewards</label>
</div>
<div id="wiki-list-help" style="display:none; margin-top:10px; padding:10px; background:#fff; border:1px solid #a2a9b1; font-size:11px; max-height:120px; overflow-y:auto; font-family:monospace; color:#202122;">
<strong>Available Wikis (alphabetical):</strong><br>${[...rawWikis].sort().join(', ')}
</div>
<div style="margin-top:20px;">
<button id="start" class="mw-ui-button mw-ui-progressive">Run GlobalCheckUserStats.js</button>
<button id="stop" class="mw-ui-button mw-ui-destructive" disabled>Stop</button>
</div>
<div id="status-msg" style="margin-top:10px; font-weight:bold; color:#0056b3;">Ready.</div>
<div style="margin-top:5px;"><progress id="bar" value="0" max="${rawWikis.length}" style="width:100%"></progress></div>
<textarea id="out" style="width:100%; height:450px; margin-top:10px; display:none; font-family:monospace; font-size:12px;"></textarea>
</div>
`);
$('#btn-all').click(() => { currentFilterMode = 'all'; $('#filter-input-container').hide(); });
$('#btn-except').click(() => { currentFilterMode = 'exclude'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Exclude (dbname1, dbname2)...').focus(); });
$('#btn-only').click(() => { currentFilterMode = 'include'; $('#filter-input-container').show(); $('#wiki-filter').attr('placeholder', 'Only (dbname1, dbname2)...').focus(); });
$('#u-all').click(() => { currentUserFilter = 'all'; });
$('#u-local').click(() => { currentUserFilter = 'local'; });
$('#u-steward').click(() => { currentUserFilter = 'steward'; });
$('#wiki-help-trigger').click(() => $('#wiki-list-help').toggle());
$('#start').click(() => runAudit($('#y-f').val(), $('#m-f').val(), $('#y-t').val(), $('#m-t').val()));
$('#stop').click(() => isRunning = false);
}
async function fetchWikiMetrics(db) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const res = await api.get({
action: 'query', meta: 'siteinfo', siprop: 'statistics', formatversion: 2
});
return { active: res.query.statistics.activeusers || 0 };
} catch (e) { return { active: 0 }; }
}
async function checkGlobalHistory(user, start, end) {
try {
const res = await metaApi.get({
action: 'query', list: 'logevents', letype: 'gblrights', letitle: 'User:' + user, lelimit: 'max', formatversion: 2
});
const logs = res.query.logevents || [];
const auditStart = new Date(start), auditEnd = new Date(end);
let state = { steward: false, staff: false, ombuds: false };
const priorLogs = logs.filter(l => new Date(l.timestamp) <= auditStart).sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
if (priorLogs.length > 0) {
const p = priorLogs[0].params || {};
const groupsInLog = p.newGroups || p[1] || [];
state.steward = groupsInLog.includes('steward');
state.staff = groupsInLog.includes('staff');
state.ombuds = groupsInLog.includes('ombuds');
}
let held = { wasSteward: state.steward, wasStaff: state.staff, wasOmbuds: state.ombuds };
logs.filter(l => { const ts = new Date(l.timestamp); return ts > auditStart && ts < auditEnd; }).forEach(e => {
const p = e.params || {};
const added = p.newGroups || p[1] || [];
if (added.includes('steward')) held.wasSteward = true;
if (added.includes('staff')) held.wasStaff = true;
if (added.includes('ombuds')) held.wasOmbuds = true;
});
return held;
} catch (e) { return { wasSteward: false, wasStaff: false, wasOmbuds: false }; }
}
async function fetchUserData(user, db, start, end) {
const auditStart = new Date(start), auditEnd = new Date(end);
// 1. FETCH CURRENT GLOBAL GROUPS (Cached)
if (!userCache[user]) {
try {
const gres = await metaApi.get({ action: 'query', meta: 'globaluserinfo', guiprop: 'groups', guiuser: user, formatversion: 2 });
userCache[user] = gres.query.globaluserinfo.groups || [];
} catch (e) { userCache[user] = []; }
}
const gGroups = userCache[user];
const isGloballySteward = gGroups.includes('steward');
const isGloballyStaff = gGroups.includes('staff');
const isGloballyOmbuds = gGroups.includes('ombuds') || gGroups.includes('ombudsman');
// 2. FETCH GLOBAL HISTORY (To identify roles held during the period but lost since)
if (!historyCache[user]) historyCache[user] = await checkGlobalHistory(user, start, end);
const historyRes = historyCache[user];
// 3. CHECK CURRENT LOCAL CHECKUSER STATUS
let isCurrentLocal = false;
try {
const localApi = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
const ures = await localApi.get({ action: 'query', list: 'users', ususers: user, usprop: 'groups', formatversion: 2 });
const lGroups = (ures.query.users[0] && ures.query.users[0].groups) || [];
isCurrentLocal = lGroups.includes('checkuser');
} catch (e) {}
const target = 'User:' + user + '@' + db;
let logText = '', addTime = null, removeTime = null, isSelfAssign = false, maxDurationMins = -1, longestTimeStr = "", assignCount = 0;
// --- 4. DEEP RIGHTS LOG SCAN (Pagination to bypass 500-limit) ---
let events = [];
let continueToken = null;
let finished = false;
let hasLocalRightsInPeriod = false;
try {
while (!finished) {
let params = { action: 'query', list: 'logevents', letype: 'rights', letitle: target, ledir: 'older', lelimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
const res = await metaApi.get(params);
events = events.concat(res.query.logevents || []);
if (res.continue) continueToken = res.continue;
else finished = true;
}
let logEntries = [];
let pendingRemoved = null;
const LIMIT_COMBINE_MINS = 43200; // 30 days
for (let i = 0; i < events.length; i++) {
const e = events[i], p = e.params || {};
const cuAdded = (p.add || []).includes('checkuser') || ((p.newgroups || []).includes('checkuser') && !(p.oldgroups || []).includes('checkuser'));
const cuRemoved = (p.remove || []).includes('checkuser') || (!(p.newgroups || []).includes('checkuser') && (p.oldgroups || []).includes('checkuser'));
const eventDate = new Date(e.timestamp);
const exactTime = e.timestamp.replace('T', ' ').replace('Z', '');
if (cuAdded) addTime = eventDate;
if (cuRemoved) removeTime = eventDate;
if (addTime && addTime <= auditEnd && (!removeTime || removeTime >= auditStart)) hasLocalRightsInPeriod = true;
if (eventDate >= auditStart && eventDate <= auditEnd && (cuAdded || cuRemoved)) {
let expiryDate = null;
if (p.newmetadata) {
const cuMeta = p.newmetadata.find(m => m.group === 'checkuser');
if (cuMeta && cuMeta.expiry && cuMeta.expiry !== 'infinity') expiryDate = new Date(cuMeta.expiry);
}
const isSelf = (e.user === user || !e.user) ? " (Self-assign)" : "";
if (e.user === user || !e.user) isSelfAssign = true;
if (cuAdded) {
if (pendingRemoved) {
const diffMins = Math.round(Math.abs(pendingRemoved.date - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
if (diffMins <= LIMIT_COMBINE_MINS) {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
pendingRemoved = null;
} else {
logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
pendingRemoved = null;
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: (Active/Not removed) by ${e.user}${isSelf}`);
}
} else if (expiryDate) {
const diffMins = Math.round(Math.abs(expiryDate - eventDate) / 60000);
const d = Math.floor(diffMins / 1440), h = Math.floor((diffMins % 1440) / 60), m = diffMins % 60;
const durStr = `${d > 0 ? d+'d ' : ''}${h > 0 ? h+'h ' : ''}${m}m`;
const exactExpiryTime = expiryDate.toISOString().replace('T', ' ').substring(0, 19);
logEntries.unshift(`* ADDED: ${exactTime} | EXPIRED: ${exactExpiryTime} by ${e.user}${isSelf} (Duration: ${durStr})`);
if (diffMins > maxDurationMins) { maxDurationMins = diffMins; longestTimeStr = durStr; }
assignCount++;
} else {
logEntries.unshift(`* ADDED: ${exactTime} | REMOVED: (Active/Not removed) by ${e.user}${isSelf}`);
}
} else if (cuRemoved) {
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
pendingRemoved = { time: exactTime, date: eventDate, user: e.user, isSelf: isSelf };
}
}
}
if (pendingRemoved) logEntries.unshift(`* REMOVED: ${pendingRemoved.time} by ${pendingRemoved.user}${pendingRemoved.isSelf}`);
if (logEntries.length) logText = '\n' + logEntries.join('\n');
// --- ROLE CLASSIFICATION (Opravená priorita) ---
let roleLabel = "";
const hasActions = (results[db] && results[db][user] && results[db][user].total > 0);
let wasCU = hasLocalRightsInPeriod || hasActions;
// 1. Nejdřív Staff/Ombuds
if (isGloballyStaff || historyRes.wasStaff) {
roleLabel = isGloballyStaff ? "Current Staff" : "Former Staff (in period)";
}
else if (isGloballyOmbuds || historyRes.wasOmbuds) {
roleLabel = isGloballyOmbuds ? "Current Ombudsman" : "Former Ombudsman (in period)";
}
// 2. Potom CheckUser (Current vs Former)
else if (isCurrentLocal) {
roleLabel = "Current Local CheckUser";
}
else if (wasCU) {
roleLabel = "Former Local CheckUser (in period)";
}
// 3. A až nakonec Steward (pokud dělal akce bez CU práv)
else if (longestTimeStr && isSelfAssign && (isGloballySteward || historyRes.wasSteward)) {
roleLabel = `Steward action (Self-assign: ${assignCount > 1 ? assignCount + 'x, longest ' : ''}${longestTimeStr})`;
}
else if (isGloballySteward || historyRes.wasSteward) {
roleLabel = isGloballySteward ? "Current Steward" : "Former Steward (in period)";
}
else {
roleLabel = "Unknown role";
}
return { role: roleLabel, log: logText };
} catch (err) {
return { role: "Error fetching data", log: "" };
}
}
async function runAudit(yf, mf, yt, mt) {
isRunning = true; userCache = {}; historyCache = {}; results = {}; emptyWikis = []; failedWikis = []; scannedWikis = [];
const filterText = $('#wiki-filter').val().trim().toLowerCase();
const filterList = filterText ? filterText.split(',').map(s => s.trim()).filter(s => s !== "") : [];
let wikisToScan = rawWikis;
if (currentFilterMode === 'include') wikisToScan = rawWikis.filter(w => filterList.includes(w));
else if (currentFilterMode === 'exclude') wikisToScan = rawWikis.filter(w => !filterList.includes(w));
if (wikisToScan.length === 0) { alert("No wikis selected!"); return; }
$('#start').prop('disabled', true); $('#stop').prop('disabled', false); $('#out').hide();
$('#bar').attr('max', wikisToScan.length).val(0);
const START = `${yf}-${String(mf).padStart(2, '0')}-01T00:00:00Z`;
const END = `${yt}-${String(mt).padStart(2, '0')}-${new Date(Date.UTC(yt, mt, 0)).getUTCDate().toString().padStart(2, '0')}T23:59:59Z`;
const monthCols = [];
let currY = parseInt(yf), currM = parseInt(mf), endY = parseInt(yt), endM = parseInt(mt);
while (currY < endY || (currY === endY && currM <= endM)) {
monthCols.push({ key: `${currY}-${String(currM).padStart(2, '0')}`, label: `${["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][currM - 1]} ${currY}` });
currM++; if (currM > 12) { currM = 1; currY++; }
}
for (let i = 0; i < wikisToScan.length; i++) {
if (!isRunning) break;
const db = wikisToScan[i]; scannedWikis.push(db);
$('#status-msg').text(`Scanning ${db} (${i + 1}/${wikisToScan.length})...`);
let successLocal = false, continueToken = null;
while (!successLocal && isRunning) {
try {
const api = new mw.ForeignApi(`https://${getDomain(db)}/w/api.php`);
let params = { action: 'query', list: 'checkuserlog', culfrom: START, culto: END, culdir: 'newer', cullimit: 'max', formatversion: 2 };
if (continueToken) Object.assign(params, continueToken);
let res = await api.get(params);
const ent = res.query?.checkuserlog?.entries || [];
if (ent.length) {
if (!results[db]) results[db] = {};
ent.forEach(e => {
const u = e.checkuser;
if (!results[db][u]) results[db][u] = { total: 0, months: {} };
const mKey = e.timestamp.slice(0, 7);
results[db][u].total++; results[db][u].months[mKey] = (results[db][u].months[mKey] || 0) + 1;
});
}
if (res.continue && isRunning) continueToken = res.continue;
else { if (!results[db]) emptyWikis.push(db); successLocal = true; }
} catch (err) {
if (err?.status === 429) {
const retryAfter = parseInt(err.xhr?.getResponseHeader('Retry-After')) || 60;
$('#status-msg').html(`<span style="color:red; font-weight:bold;">Rate limit! Waiting ${retryAfter}s...</span>`);
await sleep(retryAfter * 1000);
continue;
} else {
failedWikis.push(db);
successLocal = true;
}
}
}
$('#bar').val(i + 1); await sleep(DELAY_MS);
}
$('#status-msg').text(`Generating report...`);
const today = new Date().toISOString().split('T')[0];
const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' (UTC)';
let wt = `== Global CheckUser Stats (${mf}/${yf} - ${mt}/${yt}) ==\n''Report generated on: ${timestamp}''\n\n`;
let rightsLog = `\n== Rights Log (In Period) ==\n`;
wt += `{| class="wikitable sortable" style="font-size:90%; text-align:right;"\n! Wiki / User !! Category !! '''Total''' !! per 1k active users ${monthCols.map(m => `!! ${m.label}`).join(' ')}\n`;
const sortedDBs = Object.keys(results).sort();
for (const db of sortedDBs) {
const metrics = await fetchWikiMetrics(db);
const fmtActive = metrics.active.toLocaleString('en-US');
const iwPrefix = getInterwikiPrefix(db);
const projectLink = `[[${iwPrefix}:|${db}]]`;
const logLink = `[[${iwPrefix}:Special:CheckUserLog|(log)]]`;
wt += `|-\n! colspan="${4 + monthCols.length}" style="background:#eaecf0; text-align:center;" | ${projectLink} <small style="font-weight:normal; color:#54595d;">(Active Users as of ${today}: ${fmtActive})</small> — ${logLink}\n`;
// ----------------------------
let wikiRows = [], wT = 0, wMS = {}; monthCols.forEach(col => wMS[col.key] = 0);
const projectUsers = Object.keys(results[db]).sort();
for (const user of projectUsers) {
const m = await fetchUserData(user, db, START, END);
const isSteward = m.role.includes("Steward") || m.role.includes("Staff") || m.role.includes("Ombudsman");
const isLocalCU = m.role.includes("Local CheckUser");
if (currentUserFilter === 'local' && !isLocalCU) continue;
if (currentUserFilter === 'steward' && !isSteward) continue;
const uD = results[db][user];
wT += uD.total; monthCols.forEach(col => wMS[col.key] += (uD.months[col.key] || 0));
let uP1kU = metrics.active > 0 ? ((uD.total / metrics.active) * 1000).toFixed(1) : "0.0";
let row = `|-\n| style="text-align:left;" | ${user}@${db} || <small>${m.role}</small> || '''${uD.total}''' || ${uP1kU}`;
monthCols.forEach(col => row += ` || ${uD.months[col.key] || 0}`);
wikiRows.push({ html: row + "\n", log: m.log ? `'''${user}@${db}''':${m.log}\n\n` : "" });
}
let wP1kU = metrics.active > 0 ? ((wT / metrics.active) * 1000).toFixed(1) : "0.0";
let totalRow = `|- style="background:#f8f9fa; font-weight:bold;"\n| style="text-align:left;" | TOTAL ${db} || — || ${wT} || ${wP1kU}`;
monthCols.forEach(col => totalRow += ` || ${wMS[col.key]}`);
wt += totalRow + "\n";
wikiRows.forEach(r => { wt += r.html; if (r.log) rightsLog += r.log; });
}
wt += `|}\n\n== Projects with 0 actions ==\n<div style="font-size:85%; color:#54595d;">${emptyWikis.sort().join(', ')}</div>\n`;
wt += rightsLog + `\n\n<references />\n`;
$('#out').val(wt).show();
$('#status-msg').text(`Done.`); $('#start').prop('disabled', false); $('#stop').prop('disabled', true);
}
setupUI();
});
})();
ik51v8t9wrcttpccq6d5fdx3v2rz990
Usuario discusión:Taichi
0
174801
737585
737572
2026-04-11T13:53:22Z
Nacaru
54746
Aviso de resolución de solicitud mediante [[WP:TL|Twinkle Lite]]
737585
wikitext
text/x-wiki
== Resolución de tu solicitud en el tablón de Miscelánea ==
''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])''
Tu solicitud en el tablón de Miscelánea ha sido resuelta. Puedes acceder a la misma a través del siguiente enlace:
* [[Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscelánea/Actual#Retomo_reporte_de_CPP_política|Enlace a la resolución]].
Ten en cuenta que el enlace caducará una vez se haya archivado el hilo. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:12, 11 April 2026 (UTC)
== Resolución de tu solicitud en el tablón de Miscelánea ==
''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])''
Tu solicitud en el tablón de Miscelánea ha sido resuelta. Puedes acceder a la misma a través del siguiente enlace:
* [[Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscelánea/Actual#Situación_extraña_con_tinte_político|Enlace a la resolución]].
Ten en cuenta que el enlace caducará una vez se haya archivado el hilo. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 13:53, 11 April 2026 (UTC)
4bne5bcoqvrm3u9r6uxsk1p3c6fi0us
737587
737585
2026-04-11T13:53:35Z
Nacaru
54746
Aviso de resolución de solicitud mediante [[WP:TL|Twinkle Lite]]
737587
wikitext
text/x-wiki
== Resolución de tu solicitud en el tablón de Miscelánea ==
''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])''
Tu solicitud en el tablón de Miscelánea ha sido resuelta. Puedes acceder a la misma a través del siguiente enlace:
* [[Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscelánea/Actual#Retomo_reporte_de_CPP_política|Enlace a la resolución]].
Ten en cuenta que el enlace caducará una vez se haya archivado el hilo. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 00:12, 11 April 2026 (UTC)
== Resolución de tu solicitud en el tablón de Miscelánea ==
''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])''
Tu solicitud en el tablón de Miscelánea ha sido resuelta. Puedes acceder a la misma a través del siguiente enlace:
* [[Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscelánea/Actual#Situación_extraña_con_tinte_político|Enlace a la resolución]].
Ten en cuenta que el enlace caducará una vez se haya archivado el hilo. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 13:53, 11 April 2026 (UTC)
== Resolución de tu solicitud en el tablón de Miscelánea ==
''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])''
Tu solicitud en el tablón de Miscelánea ha sido resuelta. Puedes acceder a la misma a través del siguiente enlace:
* [[Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscelánea/Actual#Santos500p|Enlace a la resolución]].
Ten en cuenta que el enlace caducará una vez se haya archivado el hilo. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 13:53, 11 April 2026 (UTC)
dl023i8p8jckbr94ppp1oj97mnonr5e
NovemTest100
0
174802
737689
737579
2026-04-11T19:57:42Z
Novem Linguae
49714
Nominated for deletion; see [[:Wikipedia:Articles for deletion/NovemTest100]].
737689
wikitext
text/x-wiki
<!-- Please do not remove or change this AfD message until the discussion has been closed. -->
{{Article for deletion/dated|page=NovemTest100|timestamp=20260411195742|year=2026|month=April|day=11|substed=yes|help=off}}
<!-- Once discussion is closed, please place on talk page: {{Old AfD multi|page=NovemTest100|date=11 April 2026|result='''keep'''}} -->
<!-- End of AfD message, feel free to edit beyond this point -->
Testr
n6ka29og0gv4iwzzxrh2zfdsjxbjzmi
Usuario discusión:Jake Park
0
174803
737589
2026-04-11T13:53:48Z
Nacaru
54746
Aviso de resolución de solicitud mediante [[WP:TL|Twinkle Lite]]
737589
wikitext
text/x-wiki
== Resolución de tu solicitud en el tablón de Miscelánea ==
''(Este es un aviso generado automáticamente a través de [[WP:TL|Twinkle Lite]])''
Tu solicitud en el tablón de Miscelánea ha sido resuelta. Puedes acceder a la misma a través del siguiente enlace:
* [[Wikipedia:Tablón_de_anuncios_de_los_bibliotecarios/Portal/Archivo/Miscelánea/Actual#Propuesta_de_desbloqueo_para_Lenis_Felipe|Enlace a la resolución]].
Ten en cuenta que el enlace caducará una vez se haya archivado el hilo. Saludos. [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 13:53, 11 April 2026 (UTC)
24drtlnjxo8si7nkel319s9g6tth2xi
Usuario discusión:MZMcBride
0
174804
737592
2026-04-11T14:13:34Z
Nacaru
54746
Aviso al usuario del posible borrado de [[Switch]] mediante [[WP:Twinkle Lite|Twinkle Lite]]
737592
wikitext
text/x-wiki
{{subst:Aviso destruir|Switch|g6|g7}} [[User:Nacaru|Nacaru]] ([[User talk:Nacaru|talk]]) 14:13, 11 April 2026 (UTC)
chgcs1jr4f5ijvdkeqvotb6py6b6caj
Module:Sandbox/KockaAdmiralac
828
174805
737621
2026-04-11T17:42:38Z
KockaAdmiralac
73426
Test
737621
Scribunto
text/plain
-- <nowiki>
local p = {}
function mw.addCategory(cat)
mw.getCurrentFrame():preprocess('[[Category:' .. cat .. ']]')
end
function p.tmpl()
mw.addCategory('Cats')
return 'Oh no'
end
function p.decat(frame)
return frame:preprocess('{{#invoke:Sandbox/KockaAdmiralac|tmpl}}')
end
return p
-- </nowiki>
5vkuiyosfrlfl04yhj4mw60y1kr07bm
737624
737621
2026-04-11T17:48:00Z
KockaAdmiralac
73426
Hmm
737624
Scribunto
text/plain
-- <nowiki>
local p = {}
local function addCategory(cat)
mw.getCurrentFrame():preprocess('[[Category:' .. cat .. ']]')
end
function p.tmpl()
addCategory('Cats')
return 'Oh no'
end
function p.decat(frame)
return frame:preprocess('{{#invoke:Sandbox/KockaAdmiralac|tmpl}}')
end
return p
-- </nowiki>
cmhu4jt13lzbyonbhl0hrjvtb8aghjj
User:KockaAdmiralac/Sandbox
2
174806
737622
2026-04-11T17:44:36Z
KockaAdmiralac
73426
Hmm
737622
wikitext
text/x-wiki
{{#invoke:Sandbox/KockaAdmiralac|decat}}
85e7r61mh0h1qmt8vezvz992b84yxmj
737623
737622
2026-04-11T17:44:50Z
KockaAdmiralac
73426
Hmm
737623
wikitext
text/x-wiki
{{#invoke:Sandbox/KockaAdmiralac|decat}}
{{#invoke:Sandbox/KockaAdmiralac|tmpl}}
2u5mlwazqu7cpvcsojx6mw4qkyopypd
Template:R protected/template
10
174807
737634
2026-01-10T23:38:19Z
en>Andrybak
0
wrap categorization in <includeonly></includeonly> to remove this page from [[:Category:Wikipedia pages with incorrect protection templates]]
737634
wikitext
text/x-wiki
{{Redirect template
|id=R template-protected
|name=[[:Category:Wikipedia template-protected redirects|Template-protected]]
|from=a page that is template-protected from editing for any of several possible reasons. Only administrators and template editors may edit this page
|info=** '''Please do not replace these redirected links''' with links directly to the target page unless expressly advised to do so below or elsewhere on this page, or if the change is supported by a policy or guideline.
|template category=<!--for automatic namespace detection-->
}}<includeonly>{{#ifeq:{{{nocat|}}}|true||{{#ifeq:{{FULLPAGENAME}}|Template:R template-protected||{{#ifeq: {{SUBPAGENAME}}|sandbox||{{#switch: {{PROTECTIONLEVEL:move}}
|templateeditor=[[Category:Wikipedia template-protected redirects]]
|sysop=[[Category:Wikipedia move-protected pages]]
}}{{#switch: {{PROTECTIONLEVEL:edit}}
|templateeditor=[[Category:Wikipedia template-protected redirects]]
|sysop|autoconfirmed|extendedconfirmed|#default=[[Category:Wikipedia pages with incorrect protection templates]]
}}}}}}}}</includeonly><noinclude>
<!-- Place categories on /doc subpage; interwikis go to Wikidata. -->
{{documentation}}
</noinclude>
jn1kvzk5qpnk0dh8vbq74u19oomhxvv
737635
737634
2026-04-11T19:54:08Z
Novem Linguae
49714
1 revision imported from [[:en:Template:R_protected/template]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737634
wikitext
text/x-wiki
{{Redirect template
|id=R template-protected
|name=[[:Category:Wikipedia template-protected redirects|Template-protected]]
|from=a page that is template-protected from editing for any of several possible reasons. Only administrators and template editors may edit this page
|info=** '''Please do not replace these redirected links''' with links directly to the target page unless expressly advised to do so below or elsewhere on this page, or if the change is supported by a policy or guideline.
|template category=<!--for automatic namespace detection-->
}}<includeonly>{{#ifeq:{{{nocat|}}}|true||{{#ifeq:{{FULLPAGENAME}}|Template:R template-protected||{{#ifeq: {{SUBPAGENAME}}|sandbox||{{#switch: {{PROTECTIONLEVEL:move}}
|templateeditor=[[Category:Wikipedia template-protected redirects]]
|sysop=[[Category:Wikipedia move-protected pages]]
}}{{#switch: {{PROTECTIONLEVEL:edit}}
|templateeditor=[[Category:Wikipedia template-protected redirects]]
|sysop|autoconfirmed|extendedconfirmed|#default=[[Category:Wikipedia pages with incorrect protection templates]]
}}}}}}}}</includeonly><noinclude>
<!-- Place categories on /doc subpage; interwikis go to Wikidata. -->
{{documentation}}
</noinclude>
jn1kvzk5qpnk0dh8vbq74u19oomhxvv
Template:AfD templates
10
174808
737658
2025-11-04T12:36:11Z
en>Redrose64
0
fix v-t-e links
737658
wikitext
text/x-wiki
{{navbox
| name = AfD templates
| title = [[WP:Articles for deletion|Articles for deletion]] templates
| bodyclass = hlist
| state = {{{state<includeonly>|expanded</includeonly>}}}
| group1 = Article page<br />AfD notice
| list1 =
* {{tla|Article for deletion|Afd}} (1st time nomination)
* {{tl|Afd-merge to}} (merge contents from AfD'ed article)
* {{tl|AfD-userfied}} (drafted pursuant to AfD)
* {{tla|Article for deletion/dated|AfDM}} (1st time nomination)
* {{tl|Afdx}} (2nd etc. nomination)
* {{tl|Cleanup AfD}} (Cleanup req'd after AfD)
* {{tl|Db-g4}} (Post AfD CSD G4 deletion needed)
* {{tl|Db-xfd}} (Post AfD CSD G6 deletion needed)
| group2 = User talk page<br />AfD discussion notifications
| list2 =
*{{tl|Afd notice}}
| group3 = Discussion page<br />AfD templates
| list3 =
* {{tl|Priorxfd}} (previous deletion discussions)
* {{tl|Closing}} (closing in process)
* {{tl|Duplicate vote}} (participation clarification)
* {{tl|Not a ballot}} (discussion clarification)
* {{tl|Old AfD list}} (previous discussions)
* {{tl|Page creator}} (participant clarification)
* {{tl|Single-purpose account}} (participant clarification)
* {{tl|Confirmed sockmaster}} (participant is confirmed to have used sockpuppets)
* {{tl|Confirmed sockpuppet}} (participant is a confirmed sockpuppet)
* {{tl|Canvassed}} (participant clarification)
* {{tl|COI editor}} (participant clarification)
* {{tl|Xfd-privacy}} (sensitive discussion close)
* {{tl|Deletion sorting}} (debate added to deletion sorting list)
* {{tl|Notified}} (debate mentioned on talk page)
| group4 = User talk page<br />AfD process notifications
| list4 =
* {{tl|Afd-top-notice}} (for nominator mistake)
* {{tl|Afd-welcome}} (for new participant)
* {{tl|Uw-notvote}} (warning)
| group5 = Article talk page<br />AfD notice
| list5 =
* {{tl|Old XfD multi}} (1st and subsequent nominations, preferred template)
* {{tl|Afd-merge from}} (merge contents in AfD'ed article)
* {{tl|Afd-merged-from}} (contents merged into AfD'ed article)
* {{tl|Blank and redirect notice}} (destination for redirected articles)
* {{tl|Article history}} (AfD, Good/Featured, and many other article "events")
|below = {{see also|Template:Proposed deletion templates{{!}}Proposed deletion templates|Template:Speedy deletion templates{{!}}Speedy deletion templates}}
| group6 = See also
| list6 =
{{tl|Mfd notice}}
}}<noinclude>
{{Documentation}}
</noinclude>
fdfchaf6drosh7bmx8bt35e72ag5pl8
737659
737658
2026-04-11T19:54:21Z
Novem Linguae
49714
1 revision imported from [[:en:Template:AfD_templates]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737658
wikitext
text/x-wiki
{{navbox
| name = AfD templates
| title = [[WP:Articles for deletion|Articles for deletion]] templates
| bodyclass = hlist
| state = {{{state<includeonly>|expanded</includeonly>}}}
| group1 = Article page<br />AfD notice
| list1 =
* {{tla|Article for deletion|Afd}} (1st time nomination)
* {{tl|Afd-merge to}} (merge contents from AfD'ed article)
* {{tl|AfD-userfied}} (drafted pursuant to AfD)
* {{tla|Article for deletion/dated|AfDM}} (1st time nomination)
* {{tl|Afdx}} (2nd etc. nomination)
* {{tl|Cleanup AfD}} (Cleanup req'd after AfD)
* {{tl|Db-g4}} (Post AfD CSD G4 deletion needed)
* {{tl|Db-xfd}} (Post AfD CSD G6 deletion needed)
| group2 = User talk page<br />AfD discussion notifications
| list2 =
*{{tl|Afd notice}}
| group3 = Discussion page<br />AfD templates
| list3 =
* {{tl|Priorxfd}} (previous deletion discussions)
* {{tl|Closing}} (closing in process)
* {{tl|Duplicate vote}} (participation clarification)
* {{tl|Not a ballot}} (discussion clarification)
* {{tl|Old AfD list}} (previous discussions)
* {{tl|Page creator}} (participant clarification)
* {{tl|Single-purpose account}} (participant clarification)
* {{tl|Confirmed sockmaster}} (participant is confirmed to have used sockpuppets)
* {{tl|Confirmed sockpuppet}} (participant is a confirmed sockpuppet)
* {{tl|Canvassed}} (participant clarification)
* {{tl|COI editor}} (participant clarification)
* {{tl|Xfd-privacy}} (sensitive discussion close)
* {{tl|Deletion sorting}} (debate added to deletion sorting list)
* {{tl|Notified}} (debate mentioned on talk page)
| group4 = User talk page<br />AfD process notifications
| list4 =
* {{tl|Afd-top-notice}} (for nominator mistake)
* {{tl|Afd-welcome}} (for new participant)
* {{tl|Uw-notvote}} (warning)
| group5 = Article talk page<br />AfD notice
| list5 =
* {{tl|Old XfD multi}} (1st and subsequent nominations, preferred template)
* {{tl|Afd-merge from}} (merge contents in AfD'ed article)
* {{tl|Afd-merged-from}} (contents merged into AfD'ed article)
* {{tl|Blank and redirect notice}} (destination for redirected articles)
* {{tl|Article history}} (AfD, Good/Featured, and many other article "events")
|below = {{see also|Template:Proposed deletion templates{{!}}Proposed deletion templates|Template:Speedy deletion templates{{!}}Speedy deletion templates}}
| group6 = See also
| list6 =
{{tl|Mfd notice}}
}}<noinclude>
{{Documentation}}
</noinclude>
fdfchaf6drosh7bmx8bt35e72ag5pl8
Template:Article for deletion/switch
10
174809
737660
2026-04-04T18:00:24Z
en>MusikBot II
0
Protected "[[Template:Article for deletion/switch]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 637 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require autoconfirmed or confirmed access] (indefinite))
737660
wikitext
text/x-wiki
{{#switch:{{{1|}}}|merge|merging={{{2|}}}|redirect|redirecting={{{3|}}}|draft|draftify|draftifying|draftification={{{4|}}}|#default={{{5|}}}}}
kt00ajso6gh46pgewygd3osen9twtjc
737661
737660
2026-04-11T19:54:21Z
Novem Linguae
49714
1 revision imported from [[:en:Template:Article_for_deletion/switch]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737660
wikitext
text/x-wiki
{{#switch:{{{1|}}}|merge|merging={{{2|}}}|redirect|redirecting={{{3|}}}|draft|draftify|draftifying|draftification={{{4|}}}|#default={{{5|}}}}}
kt00ajso6gh46pgewygd3osen9twtjc
Module:Old XfD multi
828
174810
737668
2025-11-27T04:47:08Z
en>Sohom Datta
0
per talk page
737668
Scribunto
text/plain
local yesno = require('Module:Yesno')
local mMessageBox = require('Module:Message box')
local TEMPLATE_PAGE = 'Template:Old XfD multi'
-------------------------------------------------------------------------------
-- Helper functions
-------------------------------------------------------------------------------
local function exists(page)
local success, exists = pcall(function ()
local title = mw.title.new(page)
return title.exists
end)
return success and exists
end
local function getAfdPage(page)
if page and mw.title.new(page) then
if mw.title.new(page).namespace ~= 0 then
return page
else
return 'Wikipedia:Articles for deletion/' .. page
end
else return nil
end
end
local function getVfdPage(page)
if page and mw.title.new(page) then
if mw.title.new(page).rootPageTitle.fullText == 'Wikipedia:Votes for deletion' then
return page
else
return 'Wikipedia:Votes for deletion/' .. page
end
else return nil
end
end
local function makeWikilink(page, display)
display = display or 'discussion'
if page then
return string.format('[[%s|%s]]', page, display)
else
return display --probably a bad title
end
end
local function makeUrlLink(page, display)
display = display or 'discussion'
return string.format('[%s %s]', page, display)
end
local function pageTypeName(title)
local display = mw.ustring.lower(title.subjectNsText)
local pageTypes = {
[''] = 'article',
['user'] = 'user page',
['wikipedia'] = 'project page',
['mediawiki'] = 'interface page',
['help'] = 'help page'
}
if pageTypes[display] then display = pageTypes[display] end
return display
end
local function cleanupTitle(title)
if not title then return title end
title = mw.uri.decode(title, 'PATH')
title = string.gsub(title, '|.*', '')
title = string.gsub(title, '[%[%]{}]', '')
return title
end
-------------------------------------------------------------------------------
-- OldAfdMulti class
-------------------------------------------------------------------------------
local OldAfdMulti = {}
OldAfdMulti.__index = OldAfdMulti
function OldAfdMulti.new(args)
local self = setmetatable({}, OldAfdMulti)
self.currentTitle = mw.title.getCurrentTitle()
-- Preprocess the row args for easier looping.
self.rowData = {}
for k, v in pairs(args) do
if type(k) == 'string' then
local prefix, num = k:match('^(.-)([1-9][0-9]*)$')
if prefix and num then
num = tonumber(num)
if prefix == 'result' or
prefix == 'date' or
prefix == 'page' or
prefix == 'link' or
prefix == 'caption' or
prefix == 'votepage' or
prefix == 'merge'
then
self.rowData[num] = self.rowData[num] or {}
self.rowData[num][prefix] = v
if v and v ~= '' and prefix=='merge' then
self.isMerge = true
end
end
end
end
end
-- Set aliases for parameters ending in "1".
if self.rowData[1] then
self.rowData[1].result = self.rowData[1].result or args.result
self.rowData[1].date = self.rowData[1].date or args.date
self.rowData[1].page = self.rowData[1].page or args.page
self.rowData[1].votepage = self.rowData[1].votepage or args.votepage
self.rowData[1].link = self.rowData[1].link or args.link
self.rowData[1].caption = self.rowData[1].caption or args.caption
self.rowData[1].merge = self.rowData[1].merge or args.merge
elseif args.result or
args.date or
args.page or
args.votepage or
args.link or
args.caption or
args.merge
then
self.rowData[1] = {
result = args.result,
date = args.date,
page = args.page,
votepage = args.votepage,
link = args.link,
caption = args.caption,
merge = args.merge
}
end
-- Remove any gaps in the array we made.
local function compressSparseArray(t)
local ret, nums = {}, {}
for num, data in pairs(t) do
nums[#nums + 1] = num
end
table.sort(nums)
for i, num in ipairs(nums) do
ret[i] = t[num]
end
return ret
end
self.rowData = compressSparseArray(self.rowData)
-- Set aliases that apply to all of the data tables.
for i, data in ipairs(self.rowData) do
data.page = data.page or data.votepage
data.page = cleanupTitle(data.page)
data.votepage = nil
end
-- Set collapsedness
self.collapse = tonumber(args.collapse)
if not self.collapse then
self.collapse = yesno(args.collapse)
end
-- Set other properties
self.isNumbered = yesno(args.numbered)
self.isSmall = yesno(args.small)
self.pageType = args.type or pageTypeName(self.currentTitle)
if args.merge and args.merge ~= '' then
self.isMerge = true
end
self.deletion = args.deletion
return self
end
function OldAfdMulti:renderResult(result)
return result or "'''Keep'''"
end
function OldAfdMulti:renderDate(date)
if date then
return date
else
self.hasMissingDate = true
return string.format(
'<sup>%s[[%s|date missing]]%s</sup>',
mw.text.nowiki('['),
TEMPLATE_PAGE,
mw.text.nowiki(']')
)
end
end
function OldAfdMulti:renderPageText(linkFunc, page, caption)
return string.format(', see %s.', linkFunc(page, caption))
end
function OldAfdMulti:renderRow(result, date, link, merge)
local result = self:renderResult(result)
local date = self:renderDate(date)
local mergeText = ''
if merge and merge ~= '' then
mergeText = string.format('Merge with [[:%s]]: ', merge)
end
if link then
return string.format('%s%s, %s, see %s.', mergeText, result, date, link)
else
return string.format('%s%s, %s', mergeText, result, date)
end
end
function OldAfdMulti:renderFirstRow(data)
local link
if data.link then
link = makeUrlLink(data.link, data.caption)
else
local page = data.page or self.currentTitle.text
link = makeWikilink(getAfdPage(page), data.caption)
end
return self:renderRow(data.result, data.date, link, data.merge)
end
function OldAfdMulti:renderSubsequentRow(data)
local link
if data.page then
link = makeWikilink(getAfdPage(data.page), data.caption)
elseif data.link then
link = makeUrlLink(data.link, data.caption)
end
return self:renderRow(data.result, data.date, link, data.merge)
end
function OldAfdMulti:renderRows()
local root = mw.html.create()
local nRows = #self.rowData
local i = nRows
local nCollapsedRows
if type(self.collapse) == 'number' then
nCollapsedRows = self.collapse
elseif self.collapse then
nCollapsedRows = nRows
else
nCollapsedRows = 0
end
local hasNormalRows = nRows - nCollapsedRows > 0
local function makeList(isCollapsed, header)
local tableRoot = root:tag('table')
tableRoot
:addClass(isCollapsed and 'mw-collapsible mw-collapsed' or nil)
:css('width', '100%')
if header then
tableRoot
:tag('tr')
:tag('th')
:wikitext(header)
end
return tableRoot
:tag('tr')
:tag('td')
:tag(self.isNumbered and 'ol' or 'ul')
end
local function renderRow(html, method, data)
html
:tag('li')
:attr('value', self.isNumbered and i or nil)
:wikitext(self[method](self, data))
end
-- Render normal rows
if hasNormalRows then
local normalList = makeList(false)
while i > 1 and i > nCollapsedRows do
renderRow(normalList, 'renderSubsequentRow', self.rowData[i])
i = i - 1
end
if i == 1 and i > nCollapsedRows then
renderRow(normalList, 'renderFirstRow', self.rowData[i])
i = i - 1
end
end
-- Render collapsed rows
if nCollapsedRows > 0 then
local header
if hasNormalRows then
header = 'Older deletion discussions:'
elseif nRows > 1 then
header = 'Deletion discussions:'
else
header = 'Deletion discussion:'
end
local collapsedList = makeList(true, header)
while i > 1 do
renderRow(collapsedList, 'renderSubsequentRow', self.rowData[i])
i = i - 1
end
renderRow(collapsedList, 'renderFirstRow', self.rowData[i])
end
return tostring(root)
end
function OldAfdMulti:renderFirstRowOnly()
local data = self.rowData[1] or {}
local caption = data.caption or "the discussion"
local bold = "'''"
local link
if data.link then
link = makeUrlLink(data.link, caption)
else
local page = data.page or self.currentTitle.text
if exists(getAfdPage(page)) then
link = bold .. makeWikilink(getAfdPage(page), caption) .. bold
elseif exists(getVfdPage(page)) then
link = bold .. makeWikilink(getVfdPage(page), caption) .. bold
else
link = caption -- Make this an error?
end
end
local result = self:renderResult(data.result or "'''keep'''")
return string.format(
'The result of %s was %s.',
link, result
)
end
function OldAfdMulti:renderBannerText()
local nRows = #self.rowData
local ret = {}
if self.deletion then
if nRows < 1 or not self.rowData[1].date then
ret[#ret + 1] = string.format(
'This %s was previously nominated for %s.',
self.pageType,
self.deletion
)
elseif nRows == 1 and self.rowData[1].date then
ret[#ret + 1] = string.format(
'This %s was nominated for %s on %s.',
self.pageType,
self.deletion,
self.rowData[1].date
)
else
ret[#ret + 1] = string.format(
'This %s was nominated for %s.',
self.pageType,
self.deletion
)
end
elseif self.isMerge then
if nRows < 1 or not self.rowData[1].date then
ret[#ret + 1] = string.format(
'This %s was considered for [[Wikipedia:Deletion policy#Merging|merging]] with %s.',
self.pageType,
self.rowData[1].merge
)
elseif nRows == 1 and self.rowData[1].date then
ret[#ret + 1] = string.format(
'This %s was considered for [[Wikipedia:Deletion policy#Merging|merging]] with [[:%s]] on %s.',
self.pageType,
self.rowData[1].merge,
self.rowData[1].date
)
else
ret[#ret + 1] = string.format(
'This %s was nominated for [[Wikipedia:Deletion policy|deletion]] or considered for [[Wikipedia:Deletion policy#Merging|merging]].',
self.pageType
)
end
else
if nRows < 1 or not self.rowData[1].date then
ret[#ret + 1] = string.format(
'This %s was previously nominated for [[Wikipedia:Deletion policy|deletion]].',
self.pageType
)
elseif nRows == 1 and self.rowData[1].date then
ret[#ret + 1] = string.format(
'This %s was nominated for [[Wikipedia:Deletion policy|deletion]] on %s.',
self.pageType,
self.rowData[1].date
)
else
ret[#ret + 1] = string.format(
'This %s was nominated for [[Wikipedia:Deletion policy|deletion]].',
self.pageType
)
end
end
if nRows > 1 then
ret[#ret + 1] = ' '
if self.isSmall then
ret[#ret + 1] = 'Review prior discussions if considering re-nomination:'
else
ret[#ret + 1] = 'Please review the prior discussions if you are considering re-nomination:'
end
ret[#ret + 1] = '\n'
ret[#ret + 1] = self:renderRows()
else
ret[#ret + 1] = ' '
ret[#ret + 1] = self:renderFirstRowOnly()
end
return table.concat(ret)
end
function OldAfdMulti:renderBanner()
return mMessageBox.main('tmbox', {
small = self.isSmall,
type = 'notice',
image = '[[File:Clipboard.svg|35px|Articles for deletion]]',
smallimage = 'none',
text = self:renderBannerText()
})
end
function OldAfdMulti:renderTrackingCategories()
local ret = {}
if self.hasMissingDate and self.currentTitle.isTalkPage then
ret[#ret + 1] = '[[Category:Old XfD multi templates with errors]]'
end
return table.concat(ret)
end
function OldAfdMulti:__tostring()
return self:renderBanner() .. self:renderTrackingCategories()
end
-------------------------------------------------------------------------------
-- Exports
-------------------------------------------------------------------------------
local p = {}
function p._main(args)
local afd = OldAfdMulti.new(args)
return tostring(afd)
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = TEMPLATE_PAGE
})
return p._main(args)
end
return p
996swiiuuk93gphjhg4d3xqyo1vemuz
737669
737668
2026-04-11T19:54:43Z
Novem Linguae
49714
1 revision imported from [[:en:Module:Old_XfD_multi]]: Copied content from another wiki; see the linked page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]])
737668
Scribunto
text/plain
local yesno = require('Module:Yesno')
local mMessageBox = require('Module:Message box')
local TEMPLATE_PAGE = 'Template:Old XfD multi'
-------------------------------------------------------------------------------
-- Helper functions
-------------------------------------------------------------------------------
local function exists(page)
local success, exists = pcall(function ()
local title = mw.title.new(page)
return title.exists
end)
return success and exists
end
local function getAfdPage(page)
if page and mw.title.new(page) then
if mw.title.new(page).namespace ~= 0 then
return page
else
return 'Wikipedia:Articles for deletion/' .. page
end
else return nil
end
end
local function getVfdPage(page)
if page and mw.title.new(page) then
if mw.title.new(page).rootPageTitle.fullText == 'Wikipedia:Votes for deletion' then
return page
else
return 'Wikipedia:Votes for deletion/' .. page
end
else return nil
end
end
local function makeWikilink(page, display)
display = display or 'discussion'
if page then
return string.format('[[%s|%s]]', page, display)
else
return display --probably a bad title
end
end
local function makeUrlLink(page, display)
display = display or 'discussion'
return string.format('[%s %s]', page, display)
end
local function pageTypeName(title)
local display = mw.ustring.lower(title.subjectNsText)
local pageTypes = {
[''] = 'article',
['user'] = 'user page',
['wikipedia'] = 'project page',
['mediawiki'] = 'interface page',
['help'] = 'help page'
}
if pageTypes[display] then display = pageTypes[display] end
return display
end
local function cleanupTitle(title)
if not title then return title end
title = mw.uri.decode(title, 'PATH')
title = string.gsub(title, '|.*', '')
title = string.gsub(title, '[%[%]{}]', '')
return title
end
-------------------------------------------------------------------------------
-- OldAfdMulti class
-------------------------------------------------------------------------------
local OldAfdMulti = {}
OldAfdMulti.__index = OldAfdMulti
function OldAfdMulti.new(args)
local self = setmetatable({}, OldAfdMulti)
self.currentTitle = mw.title.getCurrentTitle()
-- Preprocess the row args for easier looping.
self.rowData = {}
for k, v in pairs(args) do
if type(k) == 'string' then
local prefix, num = k:match('^(.-)([1-9][0-9]*)$')
if prefix and num then
num = tonumber(num)
if prefix == 'result' or
prefix == 'date' or
prefix == 'page' or
prefix == 'link' or
prefix == 'caption' or
prefix == 'votepage' or
prefix == 'merge'
then
self.rowData[num] = self.rowData[num] or {}
self.rowData[num][prefix] = v
if v and v ~= '' and prefix=='merge' then
self.isMerge = true
end
end
end
end
end
-- Set aliases for parameters ending in "1".
if self.rowData[1] then
self.rowData[1].result = self.rowData[1].result or args.result
self.rowData[1].date = self.rowData[1].date or args.date
self.rowData[1].page = self.rowData[1].page or args.page
self.rowData[1].votepage = self.rowData[1].votepage or args.votepage
self.rowData[1].link = self.rowData[1].link or args.link
self.rowData[1].caption = self.rowData[1].caption or args.caption
self.rowData[1].merge = self.rowData[1].merge or args.merge
elseif args.result or
args.date or
args.page or
args.votepage or
args.link or
args.caption or
args.merge
then
self.rowData[1] = {
result = args.result,
date = args.date,
page = args.page,
votepage = args.votepage,
link = args.link,
caption = args.caption,
merge = args.merge
}
end
-- Remove any gaps in the array we made.
local function compressSparseArray(t)
local ret, nums = {}, {}
for num, data in pairs(t) do
nums[#nums + 1] = num
end
table.sort(nums)
for i, num in ipairs(nums) do
ret[i] = t[num]
end
return ret
end
self.rowData = compressSparseArray(self.rowData)
-- Set aliases that apply to all of the data tables.
for i, data in ipairs(self.rowData) do
data.page = data.page or data.votepage
data.page = cleanupTitle(data.page)
data.votepage = nil
end
-- Set collapsedness
self.collapse = tonumber(args.collapse)
if not self.collapse then
self.collapse = yesno(args.collapse)
end
-- Set other properties
self.isNumbered = yesno(args.numbered)
self.isSmall = yesno(args.small)
self.pageType = args.type or pageTypeName(self.currentTitle)
if args.merge and args.merge ~= '' then
self.isMerge = true
end
self.deletion = args.deletion
return self
end
function OldAfdMulti:renderResult(result)
return result or "'''Keep'''"
end
function OldAfdMulti:renderDate(date)
if date then
return date
else
self.hasMissingDate = true
return string.format(
'<sup>%s[[%s|date missing]]%s</sup>',
mw.text.nowiki('['),
TEMPLATE_PAGE,
mw.text.nowiki(']')
)
end
end
function OldAfdMulti:renderPageText(linkFunc, page, caption)
return string.format(', see %s.', linkFunc(page, caption))
end
function OldAfdMulti:renderRow(result, date, link, merge)
local result = self:renderResult(result)
local date = self:renderDate(date)
local mergeText = ''
if merge and merge ~= '' then
mergeText = string.format('Merge with [[:%s]]: ', merge)
end
if link then
return string.format('%s%s, %s, see %s.', mergeText, result, date, link)
else
return string.format('%s%s, %s', mergeText, result, date)
end
end
function OldAfdMulti:renderFirstRow(data)
local link
if data.link then
link = makeUrlLink(data.link, data.caption)
else
local page = data.page or self.currentTitle.text
link = makeWikilink(getAfdPage(page), data.caption)
end
return self:renderRow(data.result, data.date, link, data.merge)
end
function OldAfdMulti:renderSubsequentRow(data)
local link
if data.page then
link = makeWikilink(getAfdPage(data.page), data.caption)
elseif data.link then
link = makeUrlLink(data.link, data.caption)
end
return self:renderRow(data.result, data.date, link, data.merge)
end
function OldAfdMulti:renderRows()
local root = mw.html.create()
local nRows = #self.rowData
local i = nRows
local nCollapsedRows
if type(self.collapse) == 'number' then
nCollapsedRows = self.collapse
elseif self.collapse then
nCollapsedRows = nRows
else
nCollapsedRows = 0
end
local hasNormalRows = nRows - nCollapsedRows > 0
local function makeList(isCollapsed, header)
local tableRoot = root:tag('table')
tableRoot
:addClass(isCollapsed and 'mw-collapsible mw-collapsed' or nil)
:css('width', '100%')
if header then
tableRoot
:tag('tr')
:tag('th')
:wikitext(header)
end
return tableRoot
:tag('tr')
:tag('td')
:tag(self.isNumbered and 'ol' or 'ul')
end
local function renderRow(html, method, data)
html
:tag('li')
:attr('value', self.isNumbered and i or nil)
:wikitext(self[method](self, data))
end
-- Render normal rows
if hasNormalRows then
local normalList = makeList(false)
while i > 1 and i > nCollapsedRows do
renderRow(normalList, 'renderSubsequentRow', self.rowData[i])
i = i - 1
end
if i == 1 and i > nCollapsedRows then
renderRow(normalList, 'renderFirstRow', self.rowData[i])
i = i - 1
end
end
-- Render collapsed rows
if nCollapsedRows > 0 then
local header
if hasNormalRows then
header = 'Older deletion discussions:'
elseif nRows > 1 then
header = 'Deletion discussions:'
else
header = 'Deletion discussion:'
end
local collapsedList = makeList(true, header)
while i > 1 do
renderRow(collapsedList, 'renderSubsequentRow', self.rowData[i])
i = i - 1
end
renderRow(collapsedList, 'renderFirstRow', self.rowData[i])
end
return tostring(root)
end
function OldAfdMulti:renderFirstRowOnly()
local data = self.rowData[1] or {}
local caption = data.caption or "the discussion"
local bold = "'''"
local link
if data.link then
link = makeUrlLink(data.link, caption)
else
local page = data.page or self.currentTitle.text
if exists(getAfdPage(page)) then
link = bold .. makeWikilink(getAfdPage(page), caption) .. bold
elseif exists(getVfdPage(page)) then
link = bold .. makeWikilink(getVfdPage(page), caption) .. bold
else
link = caption -- Make this an error?
end
end
local result = self:renderResult(data.result or "'''keep'''")
return string.format(
'The result of %s was %s.',
link, result
)
end
function OldAfdMulti:renderBannerText()
local nRows = #self.rowData
local ret = {}
if self.deletion then
if nRows < 1 or not self.rowData[1].date then
ret[#ret + 1] = string.format(
'This %s was previously nominated for %s.',
self.pageType,
self.deletion
)
elseif nRows == 1 and self.rowData[1].date then
ret[#ret + 1] = string.format(
'This %s was nominated for %s on %s.',
self.pageType,
self.deletion,
self.rowData[1].date
)
else
ret[#ret + 1] = string.format(
'This %s was nominated for %s.',
self.pageType,
self.deletion
)
end
elseif self.isMerge then
if nRows < 1 or not self.rowData[1].date then
ret[#ret + 1] = string.format(
'This %s was considered for [[Wikipedia:Deletion policy#Merging|merging]] with %s.',
self.pageType,
self.rowData[1].merge
)
elseif nRows == 1 and self.rowData[1].date then
ret[#ret + 1] = string.format(
'This %s was considered for [[Wikipedia:Deletion policy#Merging|merging]] with [[:%s]] on %s.',
self.pageType,
self.rowData[1].merge,
self.rowData[1].date
)
else
ret[#ret + 1] = string.format(
'This %s was nominated for [[Wikipedia:Deletion policy|deletion]] or considered for [[Wikipedia:Deletion policy#Merging|merging]].',
self.pageType
)
end
else
if nRows < 1 or not self.rowData[1].date then
ret[#ret + 1] = string.format(
'This %s was previously nominated for [[Wikipedia:Deletion policy|deletion]].',
self.pageType
)
elseif nRows == 1 and self.rowData[1].date then
ret[#ret + 1] = string.format(
'This %s was nominated for [[Wikipedia:Deletion policy|deletion]] on %s.',
self.pageType,
self.rowData[1].date
)
else
ret[#ret + 1] = string.format(
'This %s was nominated for [[Wikipedia:Deletion policy|deletion]].',
self.pageType
)
end
end
if nRows > 1 then
ret[#ret + 1] = ' '
if self.isSmall then
ret[#ret + 1] = 'Review prior discussions if considering re-nomination:'
else
ret[#ret + 1] = 'Please review the prior discussions if you are considering re-nomination:'
end
ret[#ret + 1] = '\n'
ret[#ret + 1] = self:renderRows()
else
ret[#ret + 1] = ' '
ret[#ret + 1] = self:renderFirstRowOnly()
end
return table.concat(ret)
end
function OldAfdMulti:renderBanner()
return mMessageBox.main('tmbox', {
small = self.isSmall,
type = 'notice',
image = '[[File:Clipboard.svg|35px|Articles for deletion]]',
smallimage = 'none',
text = self:renderBannerText()
})
end
function OldAfdMulti:renderTrackingCategories()
local ret = {}
if self.hasMissingDate and self.currentTitle.isTalkPage then
ret[#ret + 1] = '[[Category:Old XfD multi templates with errors]]'
end
return table.concat(ret)
end
function OldAfdMulti:__tostring()
return self:renderBanner() .. self:renderTrackingCategories()
end
-------------------------------------------------------------------------------
-- Exports
-------------------------------------------------------------------------------
local p = {}
function p._main(args)
local afd = OldAfdMulti.new(args)
return tostring(afd)
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = TEMPLATE_PAGE
})
return p._main(args)
end
return p
996swiiuuk93gphjhg4d3xqyo1vemuz
Wikipedia:Articles for deletion/Mainspace (18th nomination)
4
174811
737683
2026-04-11T19:56:17Z
Novem Linguae
49714
Creating deletion discussion page for [[:Mainspace]].
737683
wikitext
text/x-wiki
===[[:Mainspace]]===
{{REMOVE THIS TEMPLATE WHEN CLOSING THIS AfD|?}}
<div class="infobox" style="width:33%">AfDs for this article:<ul class="listify">{{Special:Prefixindex/Wikipedia:Articles for deletion/Mainspace}}</ul></div>
<noinclude>{{AFD help}}</noinclude>
:{{la|Mainspace}} – (<includeonly>[[Wikipedia:Articles for deletion/Mainspace (18th nomination)|View AfD]]</includeonly><noinclude>[[Wikipedia:Articles for deletion/Log/2026 April 11#{{anchorencode:Mainspace}}|View log]]</noinclude>{{int:dot-separator}} <span class="plainlinks">[https://tools.wmflabs.org/jackbot/snottywong/cgi-bin/votecounter.cgi?page=Wikipedia:Articles_for_deletion/Mainspace_(18th_nomination) Stats]</span>)
:({{Find sources AFD|Mainspace}})
Test –[[User:Novem Linguae|<span style="color:blue">'''Novem Linguae'''</span>]] <small>([[User talk:Novem Linguae|talk]])</small> 19:56, 11 April 2026 (UTC)
6ynq2pvm0vwmpslhy8w5cb3b32v5py9
Wikipedia:Articles for deletion/Log/2026 April 11
4
174812
737684
2026-04-11T19:56:17Z
Novem Linguae
49714
Adding [[:Wikipedia:Articles for deletion/Mainspace (18th nomination)]].
737684
wikitext
text/x-wiki
{{Recent AfDs}}
<div class="boilerplate metadata vfd" style="background-color: #F3F9FF; margin: 0 auto; padding: 0 1px 0 0; border: 1px solid #AAAAAA; font-size:10px">
{| width = "100%"
|-
! width="50%" align="left" | <span style="color:gray"><</span> [[Wikipedia:Articles for deletion/Log/2026 April 10|April 10]]
! width="50%" align="right" | [[Wikipedia:Articles for deletion/Log/2026 April 12|April 12]] <span style="color:gray">></span>
|}
</div>
<div align = "center">'''[[Wikipedia:Guide to deletion|Guide to deletion]]'''</div>
{{Cent}}
<small>{{purge|Purge server cache}}</small>
__TOC__
<!-- Add new entries to the TOP of the following list -->
{{Wikipedia:Articles for deletion/Mainspace (18th nomination)}}
knndkvyrj7dazw0c529r967zdkl46kv
737688
737684
2026-04-11T19:56:43Z
Novem Linguae
49714
Adding [[:Wikipedia:Articles for deletion/Mainspace (19th nomination)]].
737688
wikitext
text/x-wiki
{{Recent AfDs}}
<div class="boilerplate metadata vfd" style="background-color: #F3F9FF; margin: 0 auto; padding: 0 1px 0 0; border: 1px solid #AAAAAA; font-size:10px">
{| width = "100%"
|-
! width="50%" align="left" | <span style="color:gray"><</span> [[Wikipedia:Articles for deletion/Log/2026 April 10|April 10]]
! width="50%" align="right" | [[Wikipedia:Articles for deletion/Log/2026 April 12|April 12]] <span style="color:gray">></span>
|}
</div>
<div align = "center">'''[[Wikipedia:Guide to deletion|Guide to deletion]]'''</div>
{{Cent}}
<small>{{purge|Purge server cache}}</small>
__TOC__
<!-- Add new entries to the TOP of the following list -->
{{Wikipedia:Articles for deletion/Mainspace (19th nomination)}}
{{Wikipedia:Articles for deletion/Mainspace (18th nomination)}}
omhhy2voqwffgqgn1m8hlakf7be1hlu
737692
737688
2026-04-11T19:57:42Z
Novem Linguae
49714
Adding [[:Wikipedia:Articles for deletion/NovemTest100]].
737692
wikitext
text/x-wiki
{{Recent AfDs}}
<div class="boilerplate metadata vfd" style="background-color: #F3F9FF; margin: 0 auto; padding: 0 1px 0 0; border: 1px solid #AAAAAA; font-size:10px">
{| width = "100%"
|-
! width="50%" align="left" | <span style="color:gray"><</span> [[Wikipedia:Articles for deletion/Log/2026 April 10|April 10]]
! width="50%" align="right" | [[Wikipedia:Articles for deletion/Log/2026 April 12|April 12]] <span style="color:gray">></span>
|}
</div>
<div align = "center">'''[[Wikipedia:Guide to deletion|Guide to deletion]]'''</div>
{{Cent}}
<small>{{purge|Purge server cache}}</small>
__TOC__
<!-- Add new entries to the TOP of the following list -->
{{Wikipedia:Articles for deletion/NovemTest100}}
{{Wikipedia:Articles for deletion/Mainspace (19th nomination)}}
{{Wikipedia:Articles for deletion/Mainspace (18th nomination)}}
ds7c95b6e3ufzguw6csgmvog3pdksjq
737697
737692
2026-04-11T19:58:29Z
Novem Linguae
49714
Adding [[:Wikipedia:Articles for deletion/NovemTest101]].
737697
wikitext
text/x-wiki
{{Recent AfDs}}
<div class="boilerplate metadata vfd" style="background-color: #F3F9FF; margin: 0 auto; padding: 0 1px 0 0; border: 1px solid #AAAAAA; font-size:10px">
{| width = "100%"
|-
! width="50%" align="left" | <span style="color:gray"><</span> [[Wikipedia:Articles for deletion/Log/2026 April 10|April 10]]
! width="50%" align="right" | [[Wikipedia:Articles for deletion/Log/2026 April 12|April 12]] <span style="color:gray">></span>
|}
</div>
<div align = "center">'''[[Wikipedia:Guide to deletion|Guide to deletion]]'''</div>
{{Cent}}
<small>{{purge|Purge server cache}}</small>
__TOC__
<!-- Add new entries to the TOP of the following list -->
{{Wikipedia:Articles for deletion/NovemTest101}}
{{Wikipedia:Articles for deletion/NovemTest100}}
{{Wikipedia:Articles for deletion/Mainspace (19th nomination)}}
{{Wikipedia:Articles for deletion/Mainspace (18th nomination)}}
2qyfr0qlh6asfn4676zfuhccmrnxxsv
737702
737697
2026-04-11T19:59:03Z
Novem Linguae
49714
Adding [[:Wikipedia:Articles for deletion/NovemTest102]].
737702
wikitext
text/x-wiki
{{Recent AfDs}}
<div class="boilerplate metadata vfd" style="background-color: #F3F9FF; margin: 0 auto; padding: 0 1px 0 0; border: 1px solid #AAAAAA; font-size:10px">
{| width = "100%"
|-
! width="50%" align="left" | <span style="color:gray"><</span> [[Wikipedia:Articles for deletion/Log/2026 April 10|April 10]]
! width="50%" align="right" | [[Wikipedia:Articles for deletion/Log/2026 April 12|April 12]] <span style="color:gray">></span>
|}
</div>
<div align = "center">'''[[Wikipedia:Guide to deletion|Guide to deletion]]'''</div>
{{Cent}}
<small>{{purge|Purge server cache}}</small>
__TOC__
<!-- Add new entries to the TOP of the following list -->
{{Wikipedia:Articles for deletion/NovemTest102}}
{{Wikipedia:Articles for deletion/NovemTest101}}
{{Wikipedia:Articles for deletion/NovemTest100}}
{{Wikipedia:Articles for deletion/Mainspace (19th nomination)}}
{{Wikipedia:Articles for deletion/Mainspace (18th nomination)}}
qpnriufy2ypd78h2hxphh9uklovonpb
737707
737702
2026-04-11T19:59:55Z
Novem Linguae
49714
Adding [[:Wikipedia:Articles for deletion/NovemTest103]].
737707
wikitext
text/x-wiki
{{Recent AfDs}}
<div class="boilerplate metadata vfd" style="background-color: #F3F9FF; margin: 0 auto; padding: 0 1px 0 0; border: 1px solid #AAAAAA; font-size:10px">
{| width = "100%"
|-
! width="50%" align="left" | <span style="color:gray"><</span> [[Wikipedia:Articles for deletion/Log/2026 April 10|April 10]]
! width="50%" align="right" | [[Wikipedia:Articles for deletion/Log/2026 April 12|April 12]] <span style="color:gray">></span>
|}
</div>
<div align = "center">'''[[Wikipedia:Guide to deletion|Guide to deletion]]'''</div>
{{Cent}}
<small>{{purge|Purge server cache}}</small>
__TOC__
<!-- Add new entries to the TOP of the following list -->
{{Wikipedia:Articles for deletion/NovemTest103}}
{{Wikipedia:Articles for deletion/NovemTest102}}
{{Wikipedia:Articles for deletion/NovemTest101}}
{{Wikipedia:Articles for deletion/NovemTest100}}
{{Wikipedia:Articles for deletion/Mainspace (19th nomination)}}
{{Wikipedia:Articles for deletion/Mainspace (18th nomination)}}
5sfyjy8sv3h7poc1c5mhy9bnpmmbo2r
Wikipedia:Articles for deletion/Mainspace (19th nomination)
4
174813
737687
2026-04-11T19:56:43Z
Novem Linguae
49714
Creating deletion discussion page for [[:Mainspace]].
737687
wikitext
text/x-wiki
===[[:Mainspace]]===
{{REMOVE THIS TEMPLATE WHEN CLOSING THIS AfD|?}}
<div class="infobox" style="width:33%">AfDs for this article:<ul class="listify">{{Special:Prefixindex/Wikipedia:Articles for deletion/Mainspace}}</ul></div>
<noinclude>{{AFD help}}</noinclude>
:{{la|Mainspace}} – (<includeonly>[[Wikipedia:Articles for deletion/Mainspace (19th nomination)|View AfD]]</includeonly><noinclude>[[Wikipedia:Articles for deletion/Log/2026 April 11#{{anchorencode:Mainspace}}|View log]]</noinclude>{{int:dot-separator}} <span class="plainlinks">[https://tools.wmflabs.org/jackbot/snottywong/cgi-bin/votecounter.cgi?page=Wikipedia:Articles_for_deletion/Mainspace_(19th_nomination) Stats]</span>)
:({{Find sources AFD|Mainspace}})
Test 2 –[[User:Novem Linguae|<span style="color:blue">'''Novem Linguae'''</span>]] <small>([[User talk:Novem Linguae|talk]])</small> 19:56, 11 April 2026 (UTC)
enl42lo7wtknfv56zkgpnphjlnwgl3h
Wikipedia:Articles for deletion/NovemTest100
4
174814
737691
2026-04-11T19:57:42Z
Novem Linguae
49714
Creating deletion discussion page for [[:NovemTest100]].
737691
wikitext
text/x-wiki
===[[:NovemTest100]]===
{{REMOVE THIS TEMPLATE WHEN CLOSING THIS AfD|?}}
<noinclude>{{AFD help}}</noinclude>
:{{la|NovemTest100}} – (<includeonly>[[Wikipedia:Articles for deletion/NovemTest100|View AfD]]</includeonly><noinclude>[[Wikipedia:Articles for deletion/Log/2026 April 11#{{anchorencode:NovemTest100}}|View log]]</noinclude>{{int:dot-separator}} <span class="plainlinks">[https://tools.wmflabs.org/jackbot/snottywong/cgi-bin/votecounter.cgi?page=Wikipedia:Articles_for_deletion/NovemTest100 Stats]</span>)
:({{Find sources AFD|NovemTest100}})
Test –[[User:Novem Linguae|<span style="color:blue">'''Novem Linguae'''</span>]] <small>([[User talk:Novem Linguae|talk]])</small> 19:57, 11 April 2026 (UTC)
878h8xojdv7snhm6yh6u3opvkfr7lvo
NovemTest101
0
174815
737693
2026-04-11T19:58:14Z
Novem Linguae
49714
Created page with "test"
737693
wikitext
text/x-wiki
test
jrwjerxiekdtj9k82lg930wpkr6tq6r
737694
737693
2026-04-11T19:58:29Z
Novem Linguae
49714
Nominated for deletion; see [[:Wikipedia:Articles for deletion/NovemTest101]].
737694
wikitext
text/x-wiki
<!-- Please do not remove or change this AfD message until the discussion has been closed. -->
{{Article for deletion/dated|page=NovemTest101|timestamp=20260411195829|year=2026|month=April|day=11|substed=yes|help=off|outcome=merging}}
<!-- Once discussion is closed, please place on talk page: {{Old AfD multi|page=NovemTest101|date=11 April 2026|result='''keep'''}} -->
<!-- End of AfD message, feel free to edit beyond this point -->
test
ek7g49cas5ipznu46ivubyh2uum6635
Wikipedia:Articles for deletion/NovemTest101
4
174816
737695
2026-04-11T19:58:29Z
Novem Linguae
49714
Creating deletion discussion page for [[:NovemTest101]].
737695
wikitext
text/x-wiki
===[[:NovemTest101]]===
{{REMOVE THIS TEMPLATE WHEN CLOSING THIS AfD|?}}
<noinclude>{{AFD help}}</noinclude>
:{{la|NovemTest101}} – (<includeonly>[[Wikipedia:Articles for deletion/NovemTest101|View AfD]]</includeonly><noinclude>[[Wikipedia:Articles for deletion/Log/2026 April 11#{{anchorencode:NovemTest101}}|View log]]</noinclude>{{int:dot-separator}} <span class="plainlinks">[https://tools.wmflabs.org/jackbot/snottywong/cgi-bin/votecounter.cgi?page=Wikipedia:Articles_for_deletion/NovemTest101 Stats]</span>)
:({{Find sources AFD|NovemTest101}})
Test 2 –[[User:Novem Linguae|<span style="color:blue">'''Novem Linguae'''</span>]] <small>([[User talk:Novem Linguae|talk]])</small> 19:58, 11 April 2026 (UTC)
fw884xt3cfwoxjtu0jcvgnno92g3zlg
NovemTest102
0
174817
737698
2026-04-11T19:58:50Z
Novem Linguae
49714
Created page with "test"
737698
wikitext
text/x-wiki
test
jrwjerxiekdtj9k82lg930wpkr6tq6r
737699
737698
2026-04-11T19:59:03Z
Novem Linguae
49714
Nominated for deletion; see [[:Wikipedia:Articles for deletion/NovemTest102]].
737699
wikitext
text/x-wiki
<!-- Please do not remove or change this AfD message until the discussion has been closed. -->
{{Article for deletion/dated|page=NovemTest102|timestamp=20260411195903|year=2026|month=April|day=11|substed=yes|help=off|outcome=redirecting}}
<!-- Once discussion is closed, please place on talk page: {{Old AfD multi|page=NovemTest102|date=11 April 2026|result='''keep'''}} -->
<!-- End of AfD message, feel free to edit beyond this point -->
test
cf8zdz76gzi6cwho570bk6hcdtkkufc
Wikipedia:Articles for deletion/NovemTest102
4
174818
737700
2026-04-11T19:59:03Z
Novem Linguae
49714
Creating deletion discussion page for [[:NovemTest102]].
737700
wikitext
text/x-wiki
===[[:NovemTest102]]===
{{REMOVE THIS TEMPLATE WHEN CLOSING THIS AfD|?}}
<noinclude>{{AFD help}}</noinclude>
:{{la|NovemTest102}} – (<includeonly>[[Wikipedia:Articles for deletion/NovemTest102|View AfD]]</includeonly><noinclude>[[Wikipedia:Articles for deletion/Log/2026 April 11#{{anchorencode:NovemTest102}}|View log]]</noinclude>{{int:dot-separator}} <span class="plainlinks">[https://tools.wmflabs.org/jackbot/snottywong/cgi-bin/votecounter.cgi?page=Wikipedia:Articles_for_deletion/NovemTest102 Stats]</span>)
:({{Find sources AFD|NovemTest102}})
redirect –[[User:Novem Linguae|<span style="color:blue">'''Novem Linguae'''</span>]] <small>([[User talk:Novem Linguae|talk]])</small> 19:59, 11 April 2026 (UTC)
coos4mi65rve35owjhna6i9z3vck7dp
NovemTest103
0
174819
737703
2026-04-11T19:59:43Z
Novem Linguae
49714
Created page with "test"
737703
wikitext
text/x-wiki
test
jrwjerxiekdtj9k82lg930wpkr6tq6r
737704
737703
2026-04-11T19:59:54Z
Novem Linguae
49714
Nominated for deletion; see [[:Wikipedia:Articles for deletion/NovemTest103]].
737704
wikitext
text/x-wiki
<!-- Please do not remove or change this AfD message until the discussion has been closed. -->
{{Article for deletion/dated|page=NovemTest103|timestamp=20260411195954|year=2026|month=April|day=11|substed=yes|help=off|outcome=draftification}}
<!-- Once discussion is closed, please place on talk page: {{Old AfD multi|page=NovemTest103|date=11 April 2026|result='''keep'''}} -->
<!-- End of AfD message, feel free to edit beyond this point -->
test
rutih93oa17fgn3o3r85oorditld6th
737708
737704
2026-04-11T20:00:09Z
Novem Linguae
49714
737708
wikitext
text/x-wiki
<!-- Please do not remove or change this AfD message until the discussion has been closed. -->
{{Article for deletion/dated|page=NovemTest103|timestamp=20260411195954|year=2026|month=April|day=11|substed=yes|help=off|outcome=draftification2}}
<!-- Once discussion is closed, please place on talk page: {{Old AfD multi|page=NovemTest103|date=11 April 2026|result='''keep'''}} -->
<!-- End of AfD message, feel free to edit beyond this point -->
test
orfwtcd1ztnxm76w8hjcyq4awkpkil4
737709
737708
2026-04-11T20:00:25Z
Novem Linguae
49714
Revert to revision 737704 dated 2026-04-11 19:59:54 by Novem Linguae using [[:en:Wikipedia:Tools/Navigation_popups|popups]]
737709
wikitext
text/x-wiki
<!-- Please do not remove or change this AfD message until the discussion has been closed. -->
{{Article for deletion/dated|page=NovemTest103|timestamp=20260411195954|year=2026|month=April|day=11|substed=yes|help=off|outcome=draftification}}
<!-- Once discussion is closed, please place on talk page: {{Old AfD multi|page=NovemTest103|date=11 April 2026|result='''keep'''}} -->
<!-- End of AfD message, feel free to edit beyond this point -->
test
rutih93oa17fgn3o3r85oorditld6th
Wikipedia:Articles for deletion/NovemTest103
4
174820
737706
2026-04-11T19:59:55Z
Novem Linguae
49714
Creating deletion discussion page for [[:NovemTest103]].
737706
wikitext
text/x-wiki
===[[:NovemTest103]]===
{{REMOVE THIS TEMPLATE WHEN CLOSING THIS AfD|?}}
<noinclude>{{AFD help}}</noinclude>
:{{la|NovemTest103}} – (<includeonly>[[Wikipedia:Articles for deletion/NovemTest103|View AfD]]</includeonly><noinclude>[[Wikipedia:Articles for deletion/Log/2026 April 11#{{anchorencode:NovemTest103}}|View log]]</noinclude>{{int:dot-separator}} <span class="plainlinks">[https://tools.wmflabs.org/jackbot/snottywong/cgi-bin/votecounter.cgi?page=Wikipedia:Articles_for_deletion/NovemTest103 Stats]</span>)
:({{Find sources AFD|NovemTest103}})
draftify –[[User:Novem Linguae|<span style="color:blue">'''Novem Linguae'''</span>]] <small>([[User talk:Novem Linguae|talk]])</small> 19:59, 11 April 2026 (UTC)
4pb5m3veuoi761hgu6bl4avgsk8m386
Wikipedia:Articles for deletion/Mainspace (20th nomination)
4
174821
737736
2026-04-12T09:15:39Z
Novem Linguae
49714
Creating deletion discussion page for [[:Mainspace]].
737736
wikitext
text/x-wiki
===[[:Mainspace]]===
{{REMOVE THIS TEMPLATE WHEN CLOSING THIS AfD|?}}
<div class="infobox" style="width:33%">AfDs for this article:<ul class="listify">{{Special:Prefixindex/Wikipedia:Articles for deletion/Mainspace}}</ul></div>
<noinclude>{{AFD help}}</noinclude>
:{{la|Mainspace}} – (<includeonly>[[Wikipedia:Articles for deletion/Mainspace (20th nomination)|View AfD]]</includeonly><noinclude>[[Wikipedia:Articles for deletion/Log/2026 April 12#{{anchorencode:Mainspace}}|View log]]</noinclude>{{int:dot-separator}} <span class="plainlinks">[https://tools.wmflabs.org/jackbot/snottywong/cgi-bin/votecounter.cgi?page=Wikipedia:Articles_for_deletion/Mainspace_(20th_nomination) Stats]</span>)
:({{Find sources AFD|Mainspace}})
–[[User:Novem Linguae|<span style="color:blue">'''Novem Linguae'''</span>]] <small>([[User talk:Novem Linguae|talk]])</small> 09:15, 12 April 2026 (UTC)
r7qgmdf9rrh4domv7owhg5aexjpp4um
Wikipedia:Articles for deletion/Log/2026 April 12
4
174822
737737
2026-04-12T09:15:39Z
Novem Linguae
49714
Adding [[:Wikipedia:Articles for deletion/Mainspace (20th nomination)]].
737737
wikitext
text/x-wiki
{{Recent AfDs}}
<div class="boilerplate metadata vfd" style="background-color: #F3F9FF; margin: 0 auto; padding: 0 1px 0 0; border: 1px solid #AAAAAA; font-size:10px">
{| width = "100%"
|-
! width="50%" align="left" | <span style="color:gray"><</span> [[Wikipedia:Articles for deletion/Log/2026 April 11|April 11]]
! width="50%" align="right" | [[Wikipedia:Articles for deletion/Log/2026 April 13|April 13]] <span style="color:gray">></span>
|}
</div>
<div align = "center">'''[[Wikipedia:Guide to deletion|Guide to deletion]]'''</div>
{{Cent}}
<small>{{purge|Purge server cache}}</small>
__TOC__
<!-- Add new entries to the TOP of the following list -->
{{Wikipedia:Articles for deletion/Mainspace (20th nomination)}}
3wwimbivz3j3rj9bf48gt67vbvacy0b
737741
737737
2026-04-12T09:17:07Z
Novem Linguae
49714
Adding [[:Wikipedia:Articles for deletion/Mainspace (21th nomination)]].
737741
wikitext
text/x-wiki
{{Recent AfDs}}
<div class="boilerplate metadata vfd" style="background-color: #F3F9FF; margin: 0 auto; padding: 0 1px 0 0; border: 1px solid #AAAAAA; font-size:10px">
{| width = "100%"
|-
! width="50%" align="left" | <span style="color:gray"><</span> [[Wikipedia:Articles for deletion/Log/2026 April 11|April 11]]
! width="50%" align="right" | [[Wikipedia:Articles for deletion/Log/2026 April 13|April 13]] <span style="color:gray">></span>
|}
</div>
<div align = "center">'''[[Wikipedia:Guide to deletion|Guide to deletion]]'''</div>
{{Cent}}
<small>{{purge|Purge server cache}}</small>
__TOC__
<!-- Add new entries to the TOP of the following list -->
{{Wikipedia:Articles for deletion/Mainspace (21th nomination)}}
{{Wikipedia:Articles for deletion/Mainspace (20th nomination)}}
5gk5udff9812m38klqwo7y4gqc1jy38
737745
737741
2026-04-12T10:05:37Z
Novem Linguae
49714
Adding [[:Wikipedia:Articles for deletion/Mainspace (22th nomination)]].
737745
wikitext
text/x-wiki
{{Recent AfDs}}
<div class="boilerplate metadata vfd" style="background-color: #F3F9FF; margin: 0 auto; padding: 0 1px 0 0; border: 1px solid #AAAAAA; font-size:10px">
{| width = "100%"
|-
! width="50%" align="left" | <span style="color:gray"><</span> [[Wikipedia:Articles for deletion/Log/2026 April 11|April 11]]
! width="50%" align="right" | [[Wikipedia:Articles for deletion/Log/2026 April 13|April 13]] <span style="color:gray">></span>
|}
</div>
<div align = "center">'''[[Wikipedia:Guide to deletion|Guide to deletion]]'''</div>
{{Cent}}
<small>{{purge|Purge server cache}}</small>
__TOC__
<!-- Add new entries to the TOP of the following list -->
{{Wikipedia:Articles for deletion/Mainspace (22th nomination)}}
{{Wikipedia:Articles for deletion/Mainspace (21th nomination)}}
{{Wikipedia:Articles for deletion/Mainspace (20th nomination)}}
r0pjdvee0v68plg9ytdp05jxd4r5w7r
Wikipedia:Articles for deletion/Mainspace (21th nomination)
4
174823
737739
2026-04-12T09:17:07Z
Novem Linguae
49714
Creating deletion discussion page for [[:Mainspace]].
737739
wikitext
text/x-wiki
===[[:Mainspace]]===
{{REMOVE THIS TEMPLATE WHEN CLOSING THIS AfD|?}}
<div class="infobox" style="width:33%">AfDs for this article:<ul class="listify">{{Special:Prefixindex/Wikipedia:Articles for deletion/Mainspace}}</ul></div>
<noinclude>{{AFD help}}</noinclude>
:{{la|Mainspace}} – (<includeonly>[[Wikipedia:Articles for deletion/Mainspace (21th nomination)|View AfD]]</includeonly><noinclude>[[Wikipedia:Articles for deletion/Log/2026 April 12#{{anchorencode:Mainspace}}|View log]]</noinclude>{{int:dot-separator}} <span class="plainlinks">[https://tools.wmflabs.org/jackbot/snottywong/cgi-bin/votecounter.cgi?page=Wikipedia:Articles_for_deletion/Mainspace_(21th_nomination) Stats]</span>)
:({{Find sources AFD|Mainspace}})
–[[User:Novem Linguae|<span style="color:blue">'''Novem Linguae'''</span>]] <small>([[User talk:Novem Linguae|talk]])</small> 09:17, 12 April 2026 (UTC)
lnlskidh4xyugygrx5gfxt9y98pebva
Wikipedia:Articles for deletion/Mainspace (22th nomination)
4
174824
737744
2026-04-12T10:05:37Z
Novem Linguae
49714
Creating deletion discussion page for [[:Mainspace]].
737744
wikitext
text/x-wiki
===[[:Mainspace]]===
{{REMOVE THIS TEMPLATE WHEN CLOSING THIS AfD|?}}
<div class="infobox" style="width:33%">AfDs for this article:<ul class="listify">{{Special:Prefixindex/Wikipedia:Articles for deletion/Mainspace}}</ul></div>
<noinclude>{{AFD help}}</noinclude>
:{{la|Mainspace}} – (<includeonly>[[Wikipedia:Articles for deletion/Mainspace (22th nomination)|View AfD]]</includeonly><noinclude>[[Wikipedia:Articles for deletion/Log/2026 April 12#{{anchorencode:Mainspace}}|View log]]</noinclude>{{int:dot-separator}} <span class="plainlinks">[https://tools.wmflabs.org/jackbot/snottywong/cgi-bin/votecounter.cgi?page=Wikipedia:Articles_for_deletion/Mainspace_(22th_nomination) Stats]</span>)
:({{Find sources AFD|Mainspace}})
–[[User:Novem Linguae|<span style="color:blue">'''Novem Linguae'''</span>]] <small>([[User talk:Novem Linguae|talk]])</small> 10:05, 12 April 2026 (UTC)
jscwbi88860a9q48zjbuukc9le9q8qn
Talk:Nada
1
174825
737746
2026-04-12T10:28:09Z
~2026-22430-49
73523
/* Test */ new section
737746
wikitext
text/x-wiki
== Test ==
I think there is something missing. [[Special:Contributions/~2026-22430-49|~2026-22430-49]] ([[User talk:~2026-22430-49|talk]]) 10:28, 12 April 2026 (UTC)
cb2rb4ka28360u4zy80pkl1462icgc0
User talk:Ерідан
3
174826
737748
2026-04-12T11:07:25Z
Ерідан
39642
Bot: Adding Hello. ~~~~
737748
wikitext
text/x-wiki
Hello. [[User:Ерідан|Ерідан]] ([[User talk:Ерідан|talk]]) 11:07, 12 April 2026 (UTC)
asgp5jo700iuki86i37nn7slieansxq