Add appeals@ Google Group for Code of Conduct ban appeals#123
Draft
tadasant wants to merge 1 commit into
Draft
Conversation
Adds appeals@modelcontextprotocol.io as an email Google Group so banned or external users have an out-of-band channel to appeal Code of Conduct actions even after an org-level GitHub block. Mirrors the existing antitrust@/catch-all@ email-group setup (isEmailGroup, no new GoogleConfig fields). Membership is curated explicitly (like the antitrust@ members) to the current moderators and active lead maintainers, rather than derived from the MODERATORS/LEAD_MAINTAINERS roles, since those roles include emeritus and former members who should not receive appeals. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
43d2f38 to
810462c
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
Adds
appeals@modelcontextprotocol.ioas an email Google Group so that banned or external users have an out-of-band channel to appeal Code of Conduct actions. When someone is blocked at the GitHub org level they lose access to all repos/issues/PRs, so the appeals channel must be email — it cannot live in GitHub.This mirrors the existing
antitrust@/catch-all@email-group setup: anisEmailGroup: truegroup with no newGoogleConfigfields, and an explicitly curated member list (exactly like the hand-listedantitrust@members at the bottom ofusers.ts).Behavior this unblocks
isEmailGroupbranch ingoogle.tsalready setswhoCanPostMessage: ANYONE_CAN_POST, so nogoogle.tschange is needed.ROLE_IDS.APPEALSis added to a curated set of 8 member entries (see below). Membership is not derived from theMODERATORS/LEAD_MAINTAINERSroles, because those roles currently include emeritus / former members who should not receive appeals (e.g. an emeritus lead maintainer).isEmailGroupgroups,google.tssetswhoCanViewGroup: 'ALL_MEMBERS_CAN_VIEW'(badly named in the Google API; it controls who can read group messages). Only the group's members can read the appeal threads.whoCanViewMembership: 'ALL_IN_DOMAIN_CAN_VIEW'(unconditional ingoogle.ts) lets anyone with an@modelcontextprotocol.ioaddress see who is in the group. This governs the membership list only, not the archive.Curated membership
ROLE_IDS.APPEALSis added to these 8users.tsentries:dsp-antdavid@localdenden@tadasanttadas@olaservoola@evalstateshaun.smith@cliffhallcliff@jonathanhefnerpederhpThe change — three files
src/config/roleIds.ts— addAPPEALS: 'appeals'toROLE_IDS(theRoleIdunion derives from this, so no other type edits needed).src/config/roles.ts— add anisEmailGrouprole{ id: ROLE_IDS.APPEALS, description: 'Code of Conduct ban appeals inbox', google: { group: 'appeals', isEmailGroup: true } }, alongsideANTITRUST/CATCH_ALL.src/config/users.ts— appendROLE_IDS.APPEALSto the 8 curated entries above.Scope kept intentionally minimal
google.ts— the existingisEmailGroupbranch and membership loop already produce everything needed.GoogleConfigfields.MODERATORS/LEAD_MAINTAINERS/CORE_MAINTAINERSroles — appeals membership is curated independently, so this PR does not touch unrelated group/GitHub-team memberships.Fast follows (deliberately deferred)
jonathanhefnerandpederhpso they actually receive appeals. Out of scope here because it requires their input / a GWS account decision.MODERATORS/LEAD_MAINTAINERSroles include people who are no longer active in those capacities (an emeritus lead maintainer still carriesLEAD_MAINTAINERS+CORE_MAINTAINERS; someMODERATORSholders are maintainers, not community moderators). Cleaning this up affects GitHub teams and other group memberships, so it's a separate change. Note: this is also why appeals membership is curated rather than role-derived — a naive auto-sync would re-add the very people this PR excludes.inheritMembersFrom?: readonly RoleId[]field toGoogleConfigsoappealsmembership tracks the roles automatically instead of by hand.whoCanViewGrouptoALL_IN_DOMAIN_CAN_VIEW(todayisEmailGrouphard-codesALL_MEMBERS_CAN_VIEW) so any maintainer can browse the appeals archive for transparency. No precedent in the repo, deferred.From: appeals@reply address via Collaborative Inbox or per-user send-as aliases; needs a one-time Workspace admin step.Verification
npm run check(format:check+validate+test) passes: Prettier clean, config validation green (role references + member ordering), 23/23 config tests pass.google.tsis unchanged —git diff main --name-onlyshows onlysrc/config/roleIds.ts,src/config/roles.ts,src/config/users.ts.users.tsentries gainedROLE_IDS.APPEALS:dsp-ant,localden,tadasant,olaservo,evalstate,cliffhall,jonathanhefner,pederhp. Justin (jspahrsummers, emeritus), Paul (pcarleton), andbhosmer-antare intentionally not members.google.tsemail resolution): 6 —cliff@,david@,den@,ola@,shaun.smith@,tadas@.jonathanhefner/pederhpresolve to none (flagged above).npx tscon the config files is clean. The fullnpm run buildreports one pre-existing, unrelated error —Cannot find module '@pulumi/googleworkspace'ingoogle.ts— because the generated Pulumi SDK undersdks/googleworkspaceisn't built in a non-deploy checkout; it reproduces on a cleanmain.