From 2d248059e00dcd9e930b14d637f78d3b293f85a7 Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Fri, 24 Oct 2025 23:32:35 -0400 Subject: [PATCH] Document moderator-sourced trust seeding --- config/instance-config.js | 15 +++++++++------ docs/moderation/README.md | 4 ++-- docs/moderation/web-of-trust.md | 5 +++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/config/instance-config.js b/config/instance-config.js index 993bd3d9..fd1dbbdd 100644 --- a/config/instance-config.js +++ b/config/instance-config.js @@ -192,13 +192,16 @@ export const DEFAULT_WHITELIST_MODE_ENABLED = true; export const ALLOW_NSFW_CONTENT = false; /** - * Baseline trusted accounts used to seed the moderation graph. + * Emergency fallback accounts for seeding the moderation graph. * - * Provide Nostr npubs for the operators and moderators you trust by default. - * Downstream modules treat these accounts as the starting point for the F1 - * network that powers trusted reports and mutes. Operators should feel free to - * edit the list to match their deployment; bitvid will freeze and sanitize the - * values at runtime when reading from `js/config.js`. + * Runtime moderation now derives its trust seeds from the Super Admin and the + * active moderator roster, ensuring their reports shape anonymous/default + * visitor filters automatically. The array below is kept only as a last-resort + * fallback when the live moderator lists cannot be loaded (for example, + * bootstrapping a brand-new deployment or recovering from relay outages). + * Populate it with the operator keys you want to lean on during that rare + * failure mode; under normal conditions these values are ignored. bitvid will + * freeze and sanitize the npubs at runtime when reading from `js/config.js`. */ export const DEFAULT_TRUST_SEED_NPUBS = [ "npub1424242424242424242424242424242424242424242424242424qamrcaj", diff --git a/docs/moderation/README.md b/docs/moderation/README.md index 17262cbc..90c3f760 100644 --- a/docs/moderation/README.md +++ b/docs/moderation/README.md @@ -36,8 +36,8 @@ Thread new moderation behaviors through the same service → stage → app → U - Hide videos when `DEFAULT_TRUSTED_MUTE_HIDE_THRESHOLD` trusted contacts mute the author. Cards render with `data-moderation-hidden="true"`, the badge reads `Hidden · {count} trusted mute(s)`, and a "Show anyway" button becomes available. - Hide videos when `DEFAULT_TRUSTED_SPAM_HIDE_THRESHOLD` trusted contacts file spam reports. The badge copy escalates to `Hidden · {count} trusted spam report(s)` and the card stays hidden until the viewer overrides it. - Downrank author when any F1 has them in mute list (10000). -- Opt-in admin lists (30000 with `d=bitvid:admin:*`) can hard-hide content. -- Trust seeds from `DEFAULT_TRUST_SEED_NPUBS` count as baseline F1 contacts (toggle via `FEATURE_TRUST_SEEDS`). +- Opt-in admin lists (30000 with `d=bitvid:admin:*`) can hard-hide content, but whitelist entries no longer bypass moderation gates—they only influence Discovery rankings when a viewer opts into that list. +- Trust seeds now come from the Super Admin plus every active moderator, so their reports shape anonymous/default visitor filters automatically. The `DEFAULT_TRUST_SEED_NPUBS` export only activates as an emergency fallback when those live lists cannot be loaded (toggle via `FEATURE_TRUST_SEEDS`). > Default thresholds now come directly from [`config/instance-config.js`](../../config/instance-config.js). Look for the exports `DEFAULT_BLUR_THRESHOLD`, `DEFAULT_AUTOPLAY_BLOCK_THRESHOLD`, `DEFAULT_TRUSTED_MUTE_HIDE_THRESHOLD`, and `DEFAULT_TRUSTED_SPAM_HIDE_THRESHOLD` to adjust the instance-wide behavior before deploying. The upstream repo currently publishes example values of 3 trusted reports for blur, 2 for autoplay blocking, 1 trusted mute to hide authors, and 3 trusted spam reports to hide videos. diff --git a/docs/moderation/web-of-trust.md b/docs/moderation/web-of-trust.md index 9484b3c0..9472ebaa 100644 --- a/docs/moderation/web-of-trust.md +++ b/docs/moderation/web-of-trust.md @@ -11,6 +11,7 @@ - 10000 mute list → downrank/hide author content. - 30000 categorized people → optional admin lists (see below). - (Optional) reputation score from a reputation source (e.g., PageRank/DVM) for **Discovery** only. +- Super Admin + active moderators are always treated as trust seeds for anonymous/default visitors. `DEFAULT_TRUST_SEED_NPUBS` in [`config/instance-config.js`](../../config/instance-config.js) only activates when those live moderator lists cannot be fetched. ## Default thresholds (can be tuned) - `blurThumbnail = trustedReportCount(event,'nudity') >= DEFAULT_BLUR_THRESHOLD` @@ -28,7 +29,7 @@ Threshold constants are exported from [`config/instance-config.js`](../../config ## Admin lists (opt-in) - We recognize curated lists using `30000` events: - `['d','bitvid:admin:blacklist']` → hard-hide when subscribed. - - `['d','bitvid:admin:whitelist']` → always show in Discovery. +- `['d','bitvid:admin:whitelist']` → improves Discovery ranking when subscribed but no longer bypasses moderation gates. - `['d','bitvid:admin:editors']` → trusted channel editors. - Users can subscribe/unsubscribe any time. @@ -36,7 +37,7 @@ Threshold constants are exported from [`config/instance-config.js`](../../config 1. **Personal blocks win first.** If a viewer blocks an author or reporter, we ignore their content and reports regardless of admin lists. 2. **Admin blacklist applies next.** Entries on `bitvid:admin:blacklist` are hard-hidden and their reports suppressed before looking at thresholds. -3. **F1 thresholds run last.** Blur/autoplay gating only evaluates trusted-report counts after personal blocks and admin blacklists. Admin whitelists may bypass Discovery gating, but never override a viewer block. +3. **F1 thresholds run last.** Blur/autoplay gating only evaluates trusted-report counts after personal blocks and admin blacklists. Admin whitelists contribute to Discovery ranking when a viewer subscribes, but they never override moderation gates or a viewer block. ## Pseudocode