mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-10-28 16:32:28 +00:00
4.5 KiB
4.5 KiB
Web-of-Trust: Detailed Flow + Examples
This document expands on docs/moderation/web-of-trust.md with a concrete view of
how trust seeds, admin lists, and F1 thresholds interact during moderation
scoring. It is intended for operators and developers who need to reason about
why a piece of content was blurred, autoplay-blocked, or hidden.
Key concepts (quick recap)
- Trusted seeds: A baseline set of pubkeys used to bootstrap trust for anonymous/default visitors. Seeds come from the Super Admin and active editor lists; fallback seeds are used only if those lists cannot be hydrated.
- Trusted contacts (F1): The viewer's follow list (plus seeds for anonymous/default visitors). Only F1 accounts count as trusted reporters.
- Admin lists: NIP-51
30000lists, specifically:bitvid:admin:blacklist→ hard-hide when subscribed.bitvid:admin:whitelist→ boosts Discovery ranking but never overrides moderation gates.
- Thresholds:
- Blur thumbnail:
DEFAULT_BLUR_THRESHOLDtrustednudityreports. - Block autoplay:
DEFAULT_AUTOPLAY_BLOCK_THRESHOLDtrustednudityreports. - Hide author:
DEFAULT_TRUSTED_MUTE_HIDE_THRESHOLDtrusted mutes. - Hide video:
DEFAULT_TRUSTED_SPAM_HIDE_THRESHOLDtrusted spam reports.
- Blur thumbnail:
Precedence (what wins)
- Personal blocks first: If a viewer blocks an author or reporter, the author is hidden and that reporter's reports are ignored.
- Admin blacklist second: If the viewer is subscribed to
bitvid:admin:blacklist, entries there are hard-hidden and their reports are suppressed before thresholds are evaluated. - F1 thresholds last: Only after the first two checks do we apply trusted report/mute thresholds for blur, autoplay block, and hide decisions.
How trust seeds are selected (bootstrap)
For anonymous/default visitors (or when no follow graph is available), the trusted seed set is built as follows:
- Start with the Super Admin pubkey.
- Add active editors from the access control list (if available).
- If (1) and (2) produce no seeds, fall back to
DEFAULT_TRUST_SEED_NPUBS.
This means Super Admins and editors are not automatically blocked; they are used as trusted anchors when computing F1-based counts for viewers without a follow list. Blocking still follows the precedence rules above.
Example flows
Example 1: Anonymous visitor, no live admin lists available
- Access control list fails to hydrate in time.
DEFAULT_TRUST_SEED_NPUBSis used as the seed set.- A video has 3
nudityreports from those seed accounts.
Result:
- Thumbnail is blurred because the 3 trusted reports meet
DEFAULT_BLUR_THRESHOLD. - Autoplay is blocked because the 3 trusted reports meet
DEFAULT_AUTOPLAY_BLOCK_THRESHOLD. - No hard hide unless trusted mute/spam thresholds are met.
Example 2: Logged-in viewer with personal blocks
- Viewer follows 200 accounts (F1).
- Viewer has blocked
npub_author_x. npub_author_xappears in a video card.
Result:
- The author is hidden immediately (personal block precedence).
- Reports from
npub_author_xare ignored in trusted counts.
Example 3: Admin blacklist + trusted reports
- Viewer is subscribed to
bitvid:admin:blacklist. npub_spammeris listed there.- A video from
npub_spammerhas 1 trusted spam report.
Result:
- The video is hard-hidden due to the admin blacklist.
- The spam report count does not matter because blacklist suppression runs before thresholds.
Example 4: Trusted mute hide
- Viewer follows 25 accounts.
- 20 of them have muted
npub_author_y. DEFAULT_TRUSTED_MUTE_HIDE_THRESHOLDis 20.
Result:
- The author is hidden (trusted mute count ≥ 20).
- The badge reads:
Hidden · 20 trusted mutesand a “Show anyway” override is available.
Example 5: Mixed nudity + spam reports
- Viewer follows 50 accounts.
- A video has:
- 2 trusted
nudityreports - 3 trusted
spamreports
- 2 trusted
- Thresholds are: blur=3, autoplay=2, spam hide=3.
Result:
- Autoplay is blocked (nudity reports meet autoplay threshold).
- Thumbnail is not blurred (nudity reports below blur threshold).
- Video is hidden (spam reports meet the spam hide threshold).
Troubleshooting checklist
- Confirm the viewer’s follow list (F1) is populated and hydrated.
- Verify admin list subscriptions are active for the viewer.
- Check whether any personal blocks exist for the author or reporters.
- Compare trusted counts to the configured defaults in
config/instance-config.js.
See also
docs/moderation/web-of-trust.mddocs/moderation/README.mddocs/instance-config.md