From 4c94254502e0245fc2474ebad7f7a6797f9854e3 Mon Sep 17 00:00:00 2001 From: thepra Date: Thu, 1 Oct 2026 17:32:59 +0200 Subject: [PATCH] The owner's six decisions on what PrivaPub reveals: previews, blocks, authorship, views, bridging, reactions Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB --- CLAUDE.md | 6 +++++- docs/INTEROP.md | 11 ++++++++++- docs/ROADMAP.md | 11 +++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 14b9802..c2eb02a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -218,7 +218,11 @@ cd /var/www/privapub.thepra.dev && sudo -u www-data ASPNETCORE_ENVIRONMENT=Produ - **One username space:** personas, groups and the instance reserve their name in `ReservedName` (unique index) before they are saved; `LocalActorService.TryReserveUserName` is the only way to claim one. - **Per-avatar state stays per avatar:** blocks, mutes, notifications, follows. Nothing may relate sibling avatars. -- **Blocks never federate,** and reports leave as `Flag` from the instance actor. +- **Blocks federate** (owner decision, 2026-10-01): a block is sent as `Block` from the blocking avatar, an unblock as + `Undo{Block}`. Reports still leave as `Flag` from the instance actor, never from the reporting avatar. +- **What PrivaPub reveals is the owner's call.** Previews, blocks, website authorship, views, bridging and reactions were + decided in `docs/ROADMAP.md` ("Owner decisions on what PrivaPub reveals"). Anything new that tells another server + something about an avatar gets the same treatment: ask, then record it there. - **Location-ranged posts never federate.** ## Data diff --git a/docs/INTEROP.md b/docs/INTEROP.md index 0a69393..36a18f1 100644 --- a/docs/INTEROP.md +++ b/docs/INTEROP.md @@ -723,7 +723,16 @@ circuit breaker sees, and which signature scheme worked. ## 6. Choices the privacy design has to make -These change what PrivaPub reveals, so they are the owner's calls, not implementation details: +These change what PrivaPub reveals, so they are the owner's calls, not implementation details. **All six were decided on +2026-10-01; the decisions are in `docs/ROADMAP.md`, "Owner decisions on what PrivaPub reveals".** In short: +1. pages are fetched by the server for public posts; +2. blocks federate; +3. website authorship stays off; +4. PeerTube views are never sent; +5. Bluesky bridging is per persona, with persona dates randomised; +6. a one-time notice before the first reaction or vote. + +The options as they were laid out: 1. **Link previews.** - Building a card from the object, or from FEP-8967 `preview` data, fetches nothing; we do that. diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 22bc529..97655c4 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -118,6 +118,17 @@ and circles (see Owner decisions). | Location-ranged posts | **Local only, never federated.** Shown to local users within the radius, with coordinates rounded on storage. | | Groups | **Per group, two kinds.** A *community* federates per FEP-1b12, Lemmy-compatible: it Announces the activity, uses `audience`, and accepts posts from non-followers. A *circle* is invitation-only: posts are addressed to the members collection, and objects are served only to signed requests from members. | +### Owner decisions on what PrivaPub reveals (2026-10-01, from `docs/INTEROP.md` ยง6) + +| Question | Decision | +|---|---| +| Link previews | **The server fetches the linked page itself.** It does this only for public posts, after a short random delay, once per link for the whole server (a shared cache, so a fetch never points at one persona), and when the post arrives, never when someone reads it. Cards built from the post's own data are used first. The client never contacts the site. | +| Blocks | **Federated.** A persona's block is sent to the blocked account's server as `Block`, and an unblock as `Undo{Block}`. Their server enforces it too, and they can learn they were blocked. This replaces the earlier "blocks never federate" rule. | +| Website authorship (`attributionDomains`, `fediverse:creator`) | **Off.** It is never emitted, not even as a per-persona option, because it would publicly tie a persona to a website. | +| PeerTube views | **Never sent.** The remote video file is still downloaded through our proxy when it is played; that cannot be avoided without pre-downloading video. | +| Bluesky bridging (Bridgy Fed) | **Allowed per persona**, with a clear warning that the posts become far more widely copied. Leaving the bridge must work, through a federated `Block` sent to the bridge. Persona creation dates are moved back by a random number of days, so personas created the same day no longer share a date. | +| Reactions and votes | **Public, with a one-time notice.** The client tells each persona once, before its first reaction or vote, that these are public and visible as that persona. | + ## Libraries (researched; no maintained .NET ActivityPub library exists, so Letterbook and Iceshrimp.NET both wrote their own) | Area | Choice |