Improve moderation controls and term management

This commit is contained in:
JB
2026-07-27 16:44:53 -04:00
parent 27cbeca0ed
commit fe4acec191
8 changed files with 1065 additions and 362 deletions
+13
View File
@@ -55,6 +55,19 @@ ISAC Site Controls stores the site-wide policy:
- category review and priority thresholds;
- allowed and banned local terms.
The term registry accepts single rules and batch imports. Batch imports use one
term or phrase per line, accept commas and semicolons as separators, infer word
or phrase matching, and add no more than 250 unique rules. Word rules match
exact forms: `kill` does not match `kills`, `killed`, or `killing`. The import
skips duplicates, records each created rule in the ISAC audit log, and leaves
the batch editor open for the next list. The registry provides server-side
search and displays 25 rules per page by default.
Each Site Controls category has its own save action. A save validates and
updates only that category, increments the moderation policy version when
applicable, and records a specific ISAC audit event with before and after
evidence. Unsaved changes in other categories remain local drafts.
Site Controls requires `site.settings.manage`. Community Oversight handles text
decisions through the existing comment and profile permissions. Avatar
Oversight handles custom images through `avatars.review`.
+30 -9
View File
@@ -362,15 +362,23 @@ targets and keep status text within the viewport. Reduce the radar sweep and
other ambient motion under `prefers-reduced-motion`; retain the static rings,
nodes, and labels.
ISAC Site Controls use three connected command panels: Launch Gate, Account
Creation, and Public Sections. Use `SegmentedChoice` for each finite state.
Display the pending-change count outside the panels and require a confirmation
modal that lists every changed setting as previous state, arrow, and proposed
state. A successful save closes the modal and refreshes the network-state
summary. Keep a `PREVIEW PAGE` link in the command toolbar so authenticated
operators can inspect the promotional page without ending their session.
Operators need text for enabled, disabled, coming-soon, and public states; color
supports those labels.
ISAC Site Controls use collapsible command panels for Launch Gate, Account
Creation, Public Sections, moderation policy groups, thresholds, and the term
registry. Build these panels with `CollapsibleSection`. The disclosure button
must expose `aria-expanded` and `aria-controls`, retain its title and textual
status while closed, show a focus-visible outline, and provide at least a
44-pixel touch target. Keep panel content in the document and hide it while
closed so draft form state survives expansion changes. Disable motion under
`prefers-reduced-motion`.
Each command panel owns its save action, validation feedback, pending state,
and success notice. Do not place a page-wide review or save banner between
panels. Disable a panel's save button until that panel differs from saved
state. Saving one panel must update only its fields, retain the panel's open
state, and leave unsaved drafts in other panels unchanged. Keep `PREVIEW PAGE`
inside the Launch Gate save row so authenticated operators can inspect the
promotional page without ending their session. Operators need text for enabled,
disabled, coming-soon, and public states; color supports those labels.
The Launch Gate controls signed-out entry to the application. Public Section
controls apply to everyone. When an operator disables News, Database, Builds,
@@ -489,6 +497,19 @@ public. Flagged custom avatars use the default avatar publicly until approval.
Community Oversight shows automated evidence and Agent reports in one pending
queue, but labels their sources separately. Human approval, rejection, removal,
and report dismissal require a reason and confirmation.
The Site Controls term registry supports single-rule editing and an inline bulk
editor. The bulk editor accepts pasted lists, applies one effect and scope set
to the batch, previews the unique-entry count, and states the 250-rule limit.
Keep it inline because operators need the registry for context. Show exact-word
behavior beside the textarea, preserve pasted values after validation errors,
and clear the textarea while keeping the editor open after a successful import.
Search the registry on the server across term text, normalized text, rule type,
match mode, and operational note. Use the shared pagination rail with
namespaced URL parameters and 25 rows by default. Search applies before
pagination. Distinguish an empty registry from a search with no matches. The
registry toolbar, editors, search, and pagination stay inside the term
disclosure.
Only HTTP and HTTPS links are active; rendered links open separately with UGC,
nofollow, and opener-isolation attributes. `MarkdownContent` must receive HTML
from the server renderer, never raw user input or client-rendered Markdown.