Personas have walls their followers write on
Owner decision of 2026-10-06 (G-0009, FEP-400e). A persona's actor names its wall (…/graffiti, sm:wall) and, in
Smithereen's privacySettings, that its followers may write on it. A public post that is not a reply, sent with the wall
as its target by an account following the persona, is hosted: the persona is notified, it reaches the persona's and its
followers' homes, and the followers' servers and the author's are told with Add{Note}. The persona deletes it with
DELETE /api/v1/statuses/:id, which sends Remove{Note}; Smithereen deletes the post then. The wall lists the persona's
public posts that start a thread and what was written on it.
Elsewhere: an account's Add{Note} on its own wall shows the post to its followers here as on that wall (privapub.wall on
the status), and its Remove takes it away. An Add or Remove naming a collection of the account's own server PrivaPub
does not know has its document read again first, at most hourly: accounts kept before walls were read had none.
Checked live: Smithereen 40 checks (G-0009 closed); GoToSocial and Mastodon unchanged (121).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
This commit is contained in:
1 parent
e0682fa868
commit
c47b6e5533
26 files changed
+582
-36
No files matched your search
@@ -14,14 +14,17 @@ namespace PrivaPub.Tests.Support
|
||||
{
|
||||
readonly RSA _key = RSA.Create(2048);
|
||||
readonly bool _namesSharedInbox;
|
||||
readonly bool _hasWall;
|
||||
|
||||
// sharedInbox: whether its document names its server's shared inbox (endpoints.sharedInbox), as Mastodon's do
|
||||
public RemoteActor(Peer peer, string name, string origin = default, string type = "Person", bool sharedInbox = false)
|
||||
// sharedInbox: whether its document names its server's shared inbox (endpoints.sharedInbox), as Mastodon's do; wall:
|
||||
// whether it has a wall (sm:wall, Smithereen's)
|
||||
public RemoteActor(Peer peer, string name, string origin = default, string type = "Person", bool sharedInbox = false, bool wall = false)
|
||||
{
|
||||
Name = $"{name}{Guid.NewGuid():N}"[..20];
|
||||
Id = $"{origin ?? peer.A}/users/{Name}";
|
||||
Type = type;
|
||||
_namesSharedInbox = sharedInbox;
|
||||
_hasWall = wall;
|
||||
peer.Serve($"/users/{Name}", Document().ToJsonString());
|
||||
}
|
||||
|
||||
@@ -31,6 +34,7 @@ namespace PrivaPub.Tests.Support
|
||||
public string Id { get; }
|
||||
public string KeyId => Id + "#main-key";
|
||||
public string SharedInbox => Id.Split("/users/")[0] + "/inbox";
|
||||
public string Wall => Id + "/wall";
|
||||
|
||||
public JsonObject Document()
|
||||
{
|
||||
@@ -52,6 +56,8 @@ namespace PrivaPub.Tests.Support
|
||||
};
|
||||
if (_namesSharedInbox)
|
||||
document["endpoints"] = new JsonObject { ["sharedInbox"] = SharedInbox };
|
||||
if (_hasWall)
|
||||
document["wall"] = Wall;
|
||||
return document;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user