Moderation appeals (Phase 6c) + Discord auto-reversal (Phase 6d) #74
Reference in New Issue
Block a user
No description provided.
Delete Branch "feature/moderation-appeals"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Unblocks the shelved Phase 6c/6d work now that the moderation dashboard (#42) and player accounts (#43) are merged.
6c — Appeals
Players whose linked Discord identity was banned or muted can submit an appeal from the player portal and track it; staff (admin/moderator) get a queue to claim and resolve (approve/deny) with a written response.
appealstable (mirrorsmod_notesownership;mod_action_idis a plain column — no cross-owner FK to the bot-ownedmod_actions, validated in app code).model/appeals/*, player appeals controller (mine / eligible / submit / withdraw), and admin queue handlers (list / claim / resolve / per-user) mounted in the existing/moderationadmin+moderator block. One active appeal per action (app-level); only ban/mute are appealable; eligibility keyed on the caller's linked Discord identity.Appeals.jsxqueue + resolve modal,PlayerAppeals.jsx, an Appeals tab on the per-user moderation history, nav + routes + API methods.6d — Bot reversal
Approving a ban/mute appeal best-effort calls the bot's new
POST /internal/mod-reverse(shared-secret, like/internal/announce) to lift the ban / clear the timeout and post a mod-log embed. A down bot never fails the resolution —reversal_statusis recorded asfailedand staff reverse manually. The resolve response carries areversalobject.Docs / API
swagger-output.jsonregenerated.website/MODERATION_APPEALS.md).Tests
server npm test: 224 pass (newappeals.test.js+appeals.pure.test.js).client npm run build: green.Not yet verified (needs a live environment)
mod-reverseis only covered indirectly via the mocked server resolve tests.🤖 Generated with Claude Code