All checks were successful
PR checks / checks (pull_request) Successful in 9m25s
Twenty documentation pages: Getting started (7) and Administration (13), the journey no existing document owns end to end because the repositories are organised by component and an operator is not. Four decisions of record, taken before anything was written (D34–D37, PLAN.md §10 "How phase 7 built the documentation journey"): - D34 one PR for all twenty pages. - D35 the install page is SELF-CONTAINED: it prints a complete Compose file and a complete .env that an operator copies without visiting another repository. That is a copy of somebody else's file, so it is checked rather than trusted — scripts/checkQuickstart.mjs re-reads website main:docker-compose.yml and main:.env.example over the Gitea API and fails on any disagreement, in both directions: a value that drifts fails, and a service or variable that appears upstream fails until it is either included or recorded as deliberately omitted with a reason. Its first run found two stale entries. - D36 every Administration screen was walked on a real deployment before it was described — the rig being the quickstart itself, against the published image, so one run proved the install page and produced the detail the admin pages needed. - D37 a thirteenth Administration page, Content, so that every admin nav row has a home without organising the docs by the app's menu. What the live deployment disproved, all three now documented: - The documented Compose deploy does not boot. SECRET_ENC_KEY is required in production (utils/secretBox.js throws at require time) and is missing from website's ROOT .env.example — the file Compose reads. It is present in server/.env.example, which is why dev never hits it. The quickstart carries it, declared as an upstream omission so the check fails the day it is fixed. - The installer points operators at a screen that no longer exists: it prints <site>/admin/shard, and INSTALL.md §5 repeats it, but since the module cutover the screen is /admin/uo/link. Both the binary and the guide are stale. - The admin Restart button opens a window.confirm whose text is the honest warning that a deployment with no supervisor does not come back — which is why `restart: unless-stopped` is called out as load-bearing rather than left as boilerplate. And the defect only a look found, three phases running: the .env block's prose promised that every highlighted line must be changed, while `mark` given the variable names highlighted the names alone and left the values unmarked. Every check passed on a page that was wrong about its own highlighting. verify green: 890 internal links, 52 branch links, 19 facts, 59 quickstart checks, 0 astro-check errors. Co-Authored-By: Claude <noreply@anthropic.com>
69 lines
3.0 KiB
Plaintext
69 lines
3.0 KiB
Plaintext
---
|
|
title: Moderation
|
|
description: Three screens that do three different jobs — Discord moderation, content reports, and appeals against a sanction.
|
|
---
|
|
|
|
import { Aside } from '@astrojs/starlight/components';
|
|
|
|
The **Moderation** group in the sidebar holds three screens that are easy to confuse and do
|
|
not overlap.
|
|
|
|
| Screen | Is about | Comes from |
|
|
|---|---|---|
|
|
| **Moderation** | Your **Discord** guild — bans, kicks, mutes, warnings, joins, leaves, filter and spam hits | the bot, captured live |
|
|
| **Reports** | **Team forum content** members have reported | the site |
|
|
| **Appeals** | Sanctions people are asking you to reverse | the site |
|
|
|
|
## Moderation (Discord)
|
|
|
|
Counts across a window you choose — 24 hours, 7 days, 30 days — for bans, kicks, mutes,
|
|
warnings, joins, leaves, filter hits and spam hits, with a filterable list of recent
|
|
actions and a tabbed event log (members, filter hits, spam hits).
|
|
|
|
Everything here arrives from the Discord bot, so a site with no bot configured shows zeros
|
|
and empty lists rather than an error. Setting the bot up is
|
|
[Notifications and email](/docs/administration/notifications-and-email/).
|
|
|
|
**Look up** takes you to a per-user view when you are investigating one account rather than
|
|
browsing the window.
|
|
|
|
## Reports
|
|
|
|
Reports raised by members about Team forum content. Two design decisions show through in
|
|
how this screen behaves:
|
|
|
|
- **They come to site staff, and a Team's own leaders never see them.** A leader moderates
|
|
their own forum, so a report *about a leader* has to reach someone above them.
|
|
- **Handling a report records a decision about the report.** It does not touch the content:
|
|
hiding or removing a post is done in the forum, or as a sanction against the account.
|
|
|
|
The filters are *Open*, *Reviewing*, *Actioned*, *Dismissed* and *All*, and the count of
|
|
open reports sits at the top so the screen is glanceable.
|
|
|
|
<Aside type="note" title="Dismissing is a real outcome, not a failure to act">
|
|
A report that was not a problem should be dismissed rather than left open — an open queue
|
|
that never empties stops being read, and the reporter's next report is the one that
|
|
matters.
|
|
</Aside>
|
|
|
|
## Appeals
|
|
|
|
An appeal is a request to reverse a sanction, filtered by *Open*, *Pending*, *Under
|
|
review*, *Approved*, *Denied*, *Withdrawn* or *All*. Each row carries the target, the
|
|
action being appealed, the appeal itself, who submitted it, its age and whether a reversal
|
|
happened.
|
|
|
|
Two things worth building a habit around:
|
|
|
|
- **Age is the column that matters.** An appeal that nobody has looked at for three weeks
|
|
is a worse outcome than a denial.
|
|
- **The decision is recorded either way.** Approving an appeal records the reversal, so the
|
|
history explains itself later without anyone having to remember.
|
|
|
|
## What is recorded, and where
|
|
|
|
Every staff action lands in **Admin → Activity** — who did what, from which address, when.
|
|
That log is the thing to read when reconstructing a disputed decision, and it is a record
|
|
rather than a workflow: nothing is actioned from it. See
|
|
[Content](/docs/administration/content/).
|