fix(legal): declare report, block and hide in the app's data safety
Some checks failed
PR checks / checks (pull_request) Failing after 3m21s

The app now sends reports, blocks and hides (USER_SAFETY.md step 4,
Android-app#64). A new app row, app-safety, declares them: App activity ->
Other user-generated content (the report's note) and Other actions (the
report, block and hide themselves), collected, not shared, required. Other
actions moves from "not collected" to collected in PLAY_DATA_SAFETY.md.

The deployment row for posted content now says a report keeps a copy of
what it reported, and that blocks and hides are kept on the account and
deleted with it (user_blocks and user_hidden_items cascade).

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 11:02:56 -05:00
parent caab3476eb
commit dff4232491
2 changed files with 68 additions and 4 deletions

View File

@@ -499,6 +499,51 @@ export const collected = [
'We have no copy, no access and no way to obtain one.',
},
},
/*
* Report, block and hide (USER_SAFETY.md §4.3), on Android-app#64 rather than the edge
* commit the section header names. Read out of `data/api/SafetyApi.kt` and
* `data/api/dto/SafetyDto.kt`: a report sends the item's type and id, a reason and an
* optional note; a block and a hide send the item's type and id; unblocking sends the
* block's id. No request names the person being blocked — the deployment works out who
* wrote the line — so none of it is a User ID.
*/
{
id: 'app-safety',
scope: 'app',
title: 'What you report, block or hide',
body:
'Long-pressing a chat line offers Report, Hide for me and Block player. A report ' +
'sends which line it is, the reason you picked and, if you wrote one, a note of up to ' +
'500 characters, so the deployment’s staff can review it. Hide for me and Block ' +
'player send which line it is; the deployment works out who wrote it and keeps the ' +
'hide or the block on your account, so it applies on the website and on every device. ' +
'Your list of blocks, and unblocking someone, come from and go to the same place. For ' +
'staff, Hide for everyone and Show to everyone again send the line too. Nothing is ' +
'sent until you choose one.',
retention: {
summary: 'Held by the deployment, under its operator’s policy',
detail:
'A block or a hide lasts until you remove it or delete the account, which deletes ' +
'them. A report stays as a moderation record, with a copy of what the line said, ' +
'until the operator removes it.',
},
source: 'data/api/SafetyApi.kt, data/api/dto/SafetyDto.kt, data/api/RustApi.kt',
play: {
types: [
{ category: 'App activity', type: 'Other user-generated content' },
{ category: 'App activity', type: 'Other actions' },
],
collected: true,
shared: false,
required: true,
purposes: ['App functionality', 'Fraud prevention, security, and compliance', 'Personalization'],
answer: 'Collected, not shared, required.',
because:
'The report’s note is text the user writes, and reporting, blocking and hiding are ' +
'actions the app sends to the deployment, which keeps them. Reports exist so staff ' +
'can act on abuse; blocks and hides change what this one reader is shown.',
},
},
{
id: 'app-interactions',
scope: 'app',
@@ -746,7 +791,10 @@ export const collected = [
title: 'Everything posted on the site',
body:
'Forum threads and replies, uploads, wiki revisions, moderation actions, warnings, ' +
'reports and appeals — with the account that made each one. Where the operator has ' +
'reports and appeals — with the account that made each one. A report keeps a copy ' +
'of what the reported post or chat line said, so staff read what was reported even ' +
'after it is edited or pruned. Each member’s blocks and the items they hid for ' +
'themselves are kept against their account, and deleted with it. Where the operator has ' +
'connected Discord, some of that crosses into Discord and is then also subject to ' +
'Discord’s own terms.',
retention: {
@@ -755,7 +803,9 @@ export const collected = [
'Soft-deleted forum uploads and Team activity have retention windows an admin ' +
'sets; most other content is kept until somebody removes it.',
},
source: 'website server/db/schema.sql — team_forum_*, mod_actions, content_reports',
source:
'website server/db/schema.sql — team_forum_*, mod_actions, content_reports, ' +
'user_blocks, user_hidden_items',
},
{
id: 'deploy-engagement',