├── README.md ├── boarding.md ├── matrix ├── adding-rooms.md └── moderation.md ├── moderation-log.md └── team-rotation.md /README.md: -------------------------------------------------------------------------------- 1 | # Moderation home 2 | 3 | The moderation team uses this repository as our central hub for tracking work items and documenting the best practices we have discovered. 4 | 5 | We recognize that an open-source project is not just about the technology but also the people behind it. As such, our primary responsibility is to minimize drama, resolve interpersonal conflicts, and strongly discourage any form of abuse that could undermine our project goals. 6 | 7 | To achieve our objectives, we are committed to maintaining transparency in our actions *while respecting the privacy of those involved*. 8 | 9 | ## Team 10 | 11 | The moderation team is not anonymous, you can always look up its current members [on the home page](https://nixos.org/community/teams/moderation). 12 | 13 | ## Reporting issues 14 | 15 | - E-mail: [moderation@nixos.org](mailto:moderation@nixos.org). 16 | - Matrix room: [#moderation:nixos.org](https://matrix.to/#/#moderation:nixos.org) 17 | - On Discourse: [moderators group](https://discourse.nixos.org/g/moderators) 18 | - On GitHub, ping [`@NixOS/moderation`](https://nixos.org/community/teams/moderation) 19 | 20 | Or contact any of the current team members directly, e.g. via Matrix. 21 | 22 | The project team is obligated to maintain confidentiality with regard to the reporter of an incident. 23 | 24 | ## Practices 25 | 26 | ### Moderation decisions 27 | 28 | The moderation team always involves multiple members in significant decisions like the suspension of a long-time contributor. We also review all decisions together. So in most cases, the entire team always stands behind and is accountable for each moderation decision. 29 | 30 | ### Moderation log 31 | 32 | We record suspension events into the moderation log: [moderation-log.md](moderation-log.md). 33 | 34 | In order to protect the privacy of the individuals involved, justification behind moderation decisions is not published. We always tell the person in question in private why they got suspended. Other trusted community members may privately ask the moderators about a specific suspension. 35 | 36 | ## Code of conduct 37 | 38 | Our [Code of Conduct](https://github.com/NixOS/.github/blob/master/CODE_OF_CONDUCT.md) outlines the standards we use to guide our decisions. 39 | -------------------------------------------------------------------------------- /boarding.md: -------------------------------------------------------------------------------- 1 | ## Onboarding 2 | 3 | - Matrix 4 | - [ ] Add to private discussion room 5 | - [ ] Add to mjolnir admin room 6 | - Discourse 7 | - [ ] Set a password in Discourse (if you have been using OIDC federation until now), and enable 2FA 8 | - [ ] Set to Moderator 9 | - [ ] Add to Moderation Team 10 | - [ ] Announce team membership update 11 | - GitHub 12 | - [ ] Add to [Moderation team](https://github.com/orgs/NixOS/teams/moderation) 13 | - [ ] Add to [Moderators](https://github.com/organizations/NixOS/settings/moderators) on the organization (via GitHub owners) 14 | - [ ] Update [team page on homepage](https://github.com/NixOS/nixos-homepage/blob/main/core/src/content/teams/08_moderation.mdx) 15 | - [ ] Join the [nixos-moderation](https://github.com/nixos-moderation) organization 16 | - Bitwarden 17 | - [ ] Invite into the Moderation Team organization (via Infrastructure team) 18 | - Email 19 | - [ ] Receive email for the moderation@ alias (via Infrastructure team) 20 | - Wiki 21 | - [ ] Request access to the [`moderator` user group](https://wiki.nixos.org/wiki/NixOS_Wiki:Moderator) 22 | 23 | ## Offboarding 24 | 25 | - Matrix 26 | - [ ] Leave private discussion room and set powerlevel to 0 27 | - [ ] Leave mjolnir admin room and set powerlevel to 0 28 | - Discourse 29 | - [ ] Remove Moderator 30 | - [ ] Remove from Moderation Team 31 | - GitHub 32 | - [ ] Remove from [Moderation team](https://github.com/orgs/NixOS/teams/moderation) 33 | - [ ] Remove from [Moderators](https://github.com/organizations/NixOS/settings/moderators) on the organization (via GitHub owners) 34 | - [ ] Update [team page on homepage](https://github.com/NixOS/nixos-homepage/blob/main/core/src/content/teams/08_moderation.mdx) 35 | - [ ] Leave the [nixos-moderation](https://github.com/nixos-moderation) organization 36 | - Bitwarden 37 | - [ ] Remove from Moderation Team organization (via Infrastructure team) 38 | - [ ] Rotate secrets 39 | - Email 40 | - [ ] Remove from moderation@ alias (via Infrastructure team) 41 | - Wiki 42 | - [ ] Remove from the [`moderator` user group](https://wiki.nixos.org/wiki/NixOS_Wiki:Moderator) 43 | -------------------------------------------------------------------------------- /matrix/adding-rooms.md: -------------------------------------------------------------------------------- 1 | # Matrix Room Onboarding 2 | 3 | The `@admin:nixos.org` user is capable of adding an alias that is rooted on its own homeserver, which is what we want for branding reasons. 4 | 5 | It is however not a server admin, so we cannot rely on https://github.com/grahamc/matrix-management-tools/blob/main/process-all-rooms.sh, which requires access to the `/_synapse/` Admin API. 6 | 7 | We can deal with both new and pre-existing rooms. For pre-existing rooms the existing admins need to hand over that permissions, and demote to moderator, so the room will fall exclusively under community administration. 8 | 9 | ## Preconditions 10 | 11 | - Be joined to `#moderators:nixos.org` with your own account 12 | - so you can control Mjölnir 13 | - Active session on the `@admin:nixos.org` account 14 | - The secret recovery key for the encryption things is on bitwarden 15 | - Get moderator permissions on the space (or subspace) you want to add the room to 16 | - `!mjolnir powerlevel @admin:nixos.org 50 ` 17 | 18 | ## Spaces 19 | 20 | Making a decision in which space or subspace a room belongs 21 | 22 | - Main space 23 | - Community 24 | - Community projects 25 | - International 26 | - Regional channels 27 | - Teams 28 | - Official Teams 29 | - Unclear what they map to 30 | - https://nixos.org/community/#governance-teams 31 | - https://github.com/NixOS/nixpkgs/blob/master/maintainers/team-list.nix 32 | - https://github.com/orgs/NixOS/teams 33 | - Topics 34 | - Things that are not official teams yet? Best guess. 35 | 36 | ## Tasks 37 | 38 | From the `@admin:nixos.org` user, execute the following steps: 39 | 40 | - Create new room 41 | - or join it, if it already exists 42 | - If you don't have "Admin" permissions, request them from existing admins 43 | - Ask existing admins to step down to moderator role 44 | - Rooms should be owned by the community, represented by the moderation team, so we can guarantee the room will be maintained going forward 45 | - We can probably be more lenient for community project rooms 46 | - Existing "Admin" permissions can only be removed by a user for themselves 47 | - Make sure the room is publicly accessible 48 | - Add `:nixos.org` room alias 49 | - Promote it to the room default 50 | - Publish it in the nixos.org room directory 51 | - Invite mjolnir 52 | - and set its power level to "Admin" 53 | - Tell mjolnir to protect the room 54 | - `!mjolnir rooms add ` 55 | - Upload room avatar 56 | - Hash the room id with md5 (like done in the script) 57 | - Then `wget https://www.gravatar.com/avatar/${HASH}?d=identicon&f=y&s=2048` 58 | - Add the room to the relevant space 59 | - Verify permissions on Mjölnir are all good 60 | - `!mjolnir verify` 61 | - Demote `@admin:nixos.org` to default level 62 | - Permissions can be restored via Mjolnir, when required 63 | 64 | - Leave the room 65 | -------------------------------------------------------------------------------- /matrix/moderation.md: -------------------------------------------------------------------------------- 1 | # Matrix moderation 2 | 3 | Live chats sometimes require quick intervention. 4 | 5 | We have a private channel that we can use to interact with the mjolnir bot. 6 | 7 | Docs: 8 | 9 | ## Banning a user 10 | 11 | ``` 12 | !mjolnir ban user <@user-id> 13 | ``` 14 | 15 | If the account is a troll, use `!mjolnir redact <@user-id> [#room-id]` to 16 | remove the offending messages. 17 | 18 | ## Unbanning a user 19 | 20 | ``` 21 | !mjolnir unban user <@user-id> true 22 | ``` 23 | 24 | The `true` at the end is important and makes sure the change is applied to all rooms. 25 | 26 | ## Muting a user 27 | 28 | ``` 29 | !mjolnir powerlevel <@user-id> -1 [room] 30 | ``` 31 | 32 | If no room is given, the mute is propagated across all rooms protected by 33 | Mjolnir. Unmuting happens by resetting the powerlevel to `0`. 34 | -------------------------------------------------------------------------------- /moderation-log.md: -------------------------------------------------------------------------------- 1 | linuxisbest has been suspended on Discourse for two weeks for combatitive conduct and rude language towards those providing support answers 2 | 3 | mightyiam has been suspended for 2 weeks for persistent time-wasting. 4 | 5 | ehmry has been warned then suspended on GitHub and Discourse for blatant disrespect and timewasting of reviewers. 6 | 7 | cafkafk has been suspended on all platforms for 24h after performing personal attaks and escalating the debate in the moderation matrix room. 8 | 9 | elikoga has been suspended on Discourse for the remainder of the week for vindictive flagging of posts 10 | 11 | rjc has been suspended on Discourse for two days for heating debates on Discourse. 12 | 13 | admercs has been suspended on Discourse for two weeks for harassing a sensitive discussion thread. 14 | 15 | tgunnoe has been suspended on all platforms for regularly heating debates on Discourse. 16 | 17 | apcodes has been suspended on all platforms for regularly heating debates on GitHub and Discourse. 18 | 19 | nrdxp has been suspended on all platforms for regularly heating debates on GitHub and Discourse. 20 | 21 | @nixosmodspuppet:matrix.org was banned on Matrix for making the impression they would represent the nixos moderation team. 22 | 23 | hacscred was banned on GitHub for repeatedly showing hostile interactions with our contributor base. 24 | 25 | nrdxp was removed from the NixOS org to due interfering with election Q&A 26 | 27 | Kreyren has been suspended on all platforms for repeated displays of inappropriate behavior. 28 | 29 | g.p and g.p.2 have been permanently banned from Discourse 30 | 31 | BryanLunduke has been suspended on all platforms 32 | 33 | nixos.asia, zephyrs were suspended on Discourse for being sockpuppet accounts 34 | 35 | RGBCube hab been permanently banned from official spaces for harassment 36 | 37 | Butttars has been suspended for 1 week on Discourse for a display of inappropriate behavior 38 | 39 | @foo:tchncs.de was banned from Matrix. 40 | 41 | jonringer has been permanently banned from official community spaces. 42 | 43 | @echobc:matrix.org was suspended on Matrix 44 | 45 | NixTonic and Blaire-Cones have been suspended on Github for sockpuppeting sensitive discussions 46 | 47 | kreyren has been suspended on Matrix for 1 week after repeated warnings about behavior that violates multiple sections of the Code of Conduct. 48 | 49 | wombat has been suspended on Discourse for repeated deliberate attemps to cause drama, while lacking any constructive purpose in the community. 50 | 51 | nixnewb has been suspended on Discourse for 14 days for persistent combative behavior 52 | 53 | wombat has been suspended on Discourse for 14 days for engaging in discussions in a unproductive manner and not following mod instructions 54 | 55 | g.p was suspended on Discourse for 14 days for persistent combative behavior and lack of any constructive approach 56 | 57 | wombat has been suspended on Discourse for 1 day for blatantly disregarding mod instructions 58 | 59 | tarrens has been suspended on Discourse for 14 days for trolling sensitive topics and abusing the flagging feature 60 | 61 | @sarosa:infosec.exchange was banned on Matrix as an alt of falaichte for ban evasion 62 | 63 | nxdxp and apcodes were suspended for 14 days (from 2024-04-26) for the contents of the Appendix of RFC0175, which we consider inflammatory, because of personal attacks and defamation against individual community members. 64 | 65 | terracia was suspended on Discourse for wasting inconsiderate amounts of community energy through a sockpuppet account 66 | 67 | jonringer was suspended for 6 weeks (until 2024-06-10) for repeatedly derailing sensitive discussions and willfully furthering the division in the community. For more information, see 68 | 69 | @ailunarenth:tchncs.de was banned on Matrix as an alt of falaichte for ban evasion. 70 | 71 | falaichte was suspended for harassment and being disruptive on Matrix on multiple occasions. 72 | 73 | achooie was suspended on Discourse for 14 days for abusing the flagging feature and causing disproportionate moderation team time consumption. 74 | 75 | tgunnoe was muted on Discourse and Matrix for 7 days from 2024-03-14 for disregarding multiple warnings about engaging in the discussions in an unproductive manner and being disruptive 76 | 77 | piggypiggy:matrix.org was suspended on Matrix 78 | 79 | larryflynnov:matrix.org was suspended on Matrix 80 | 81 | thedragon6:matrix.org was suspended on Matrix 82 | 83 | revell.:matrix.org was suspended on Matrix 84 | 85 | bzm3r was suspended on Matrix, GitHub and Discourse 86 | 87 | lebrancess:matrix.org was suspended on Matrix from 2024-01-10 88 | 89 | mountaind:matrix.org was suspended on Matrix from 2024-01-01 for 10 days 90 | 91 | lebrancess:matrix.org was suspended on Matrix from 2023-12-30 for 7 days 92 | 93 | blaggacao was suspended on GitHub, Discourse, and Matrix 94 | 95 | ._.:tchncs.de (Maholmire) was suspended on Matrix from 2023-12-12 for 10 days 96 | 97 | rick.actual:matrix.org was suspended on Matrix. 98 | 99 | srid was suspended on GitHub, Matrix and Discourse 100 | 101 | igothackedontor:matrix.org was suspended on Matrix 102 | 103 | girlies:matrix.org was suspended on Matrix 104 | 105 | tray:tuningsocial.com was suspended on Matrix 106 | 107 | skybirrd was suspended on GitHub, Discourse and Matrix from 2023-06-17 for 10 days 108 | 109 | prorounak2005:matrix.org was suspended on Matrix 110 | 111 | chud:nitro.chat was suspended on Matrix 112 | 113 | yswtrue:matrix.org was suspended on Matrix 114 | 115 | hashmap2:matrix.im was suspended on Matrix 116 | 117 | ack:matrix.horse was suspended on Matrix 118 | 119 | ciansa:matrix.org was suspended on Matrix 120 | 121 | milahu was suspended on GitHub, Discourse and Matrix 122 | 123 | alpha-bit was suspended on GitHub 124 | 125 | is_this_os_a_joke was suspended on Matrix 126 | 127 | maxnatt was suspended on GitHub from 2022-04-27 for 30 days 128 | 129 | MagicRB was suspended on GitHub from 2022-04-26 to 2022-04-29 130 | 131 | blaggacao was suspended on GitHub, Discourse, and Matrix from 2021-10-28 to 2022-01-13 132 | 133 | Matthew Croughan was suspended on GitHub, Discourse, and Matrix from 2021-08-27 to 2021-11-11 134 | -------------------------------------------------------------------------------- /team-rotation.md: -------------------------------------------------------------------------------- 1 | # Team rotation 2 | 3 | The initial moderation team membership was defined through [RFC 102](https://github.com/NixOS/rfcs/blob/master/rfcs/0102-moderation-team.md#examples-and-interactions) and changes to the team are decided through a consensus among current moderation team members. 4 | 5 | ## Joining the moderation team 6 | 7 | We are regularly on the lookout for new members, who we think display good social skills, while interacting on the community platforms. 8 | 9 | The decision whether someone will be invited is then formed through a consensus among all moderation team members. 10 | 11 | ## Membership transitions 12 | 13 | Being part of the moderation team requires active participation in the day-to-day interactions of the community. 14 | 15 | When a member becomes inactive they will be asked to consider leaving the moderation team. 16 | 17 | Leaving the team is not considered a permanent decision, unless the member was forced out. Previous members can more easily transition back into an active membership. 18 | --------------------------------------------------------------------------------