docs(safety): record S11-S14 and the user-safety core, MODULE_API 1.21.0

USER_SAFETY.md: S11-S14 (asked while building the core), §3 corrected
(the chat feed is already read per viewer), §4 rewritten to match what
was built, §7 step 2 recorded as built and walked.

MODULE_API.md: 1.21.0 (registerReportTargets, registerGameIdentities,
ctx.safety). BACKEND_DESIGN.md: user_blocks / user_hidden_items, the
content_reports snapshot and actioned_with, the new routes, the folder
map. TEAMS.md §5.6 amended. README row updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY
This commit is contained in:
2026-10-30 05:41:14 -05:00
parent ae730b0dcb
commit b962355810
5 changed files with 252 additions and 42 deletions

View File

@@ -1467,6 +1467,24 @@ as `null` and the report still lists: "somebody reported this and by the time we
is a fact a moderator needs, and dropping the row would hide the pattern of a member deleting their
own content the moment it is reported.
> **Amended 2026-10-30 (`USER_SAFETY.md`, MODULE_API 1.21.0).** Four changes, none to the rules above:
>
> - **A game module's content is reportable too.** The first is a Rust chat line, `rust.chat`, which
> the module registers with `api.registerReportTargets`. A second filing route,
> `POST /api/v1/player/reports { targetType, targetId, reason, detail? }`, takes any type; the forum
> route above keeps working and calls the same model. Who may see the target is asked of one resolver
> (`model/safety/targets.js`) for every type, so the new route needs no Team and still answers 404
> for an item the reporter cannot see.
> - **`content_reports.snapshot JSON`** keeps what the item said when it was reported, so a pruned
> chat line or an edited post still shows staff what was reported. Reports filed before it have none.
> - **The queue gains *Hide for everyone*** (`POST /api/v1/admin/moderation/reports/:id/hide`). It is
> staff's, not the reporter's, so "reporting is not a moderation action" still holds: it hides the
> item through the forum's own moderation (a `staff` row in §5.3's ledger) or the module's `hide`,
> and actions the report with `actioned_with = 'hide'`.
> - **Members can hide an item for themself and block an author**, which are not reports and file
> none. Signed-in forum reads leave those out on the server, and each thread and post carries
> `canBlock`.
Mounted under the **existing** admin moderation section rather than under Teams: a staffer working a
queue should have one place to work, and a report about a forum post is the same job as a report about
anything else.