Skip to content

Alice blocking Bob removes Bob from her followers collection

given: "Alice" created an actor on "banach" called "Alice" with username "Alice"

send.Alice.request.create_actor
{
  "base_url": "http://banach",
  "preferred_username": "Alice",
  "profile": {},
  "automatically_accept_followers": null,
  "name": null
}
receive.Alice.response.create_actor
{
  "attachment": null,
  "published": "2026-03-20T15:23:51.165436",
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1",
    {
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
    }
  ],
  "publicKey": {
    "id": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ#legacy-key-1",
    "owner": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlizM0fQtxWjbypvhLiiq\nvPKkojtA1wTwofz4YFNk5jaXkzb/wWmxdPJc/f71hil4Dbv+iFFYr1HLvxjUhvqb\nBrJkfLtenwU0xi7+p152ototA5/vtNdC+ZNIwLAEcpTHoVKyk+L3dEPM/Z7W+zmq\n8AR9r5dW2o0TKJctTohtOgZF7ysY2tA6+fIpiYuJ70H7pD1DBTQb1RF64FtgqwUZ\n2wu3c0hlxKd8BR2BdMn5tcJ2N80Xl9qL3/qKp5AdmZ/6DnriwL59JdVzOC9XRmez\nKowxTmKj8SdlOZYH/tsp2XptDoUcBm3zfLN5MyTjXqeDs8u2/g6GTB1SZY2RqTKA\n7wIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  "id": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ",
  "type": "Person",
  "inbox": "http://banach/inbox/7eamAQ81QVE0eVBF-QBS9Q",
  "outbox": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ/outbox",
  "followers": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ/followers",
  "following": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ/following",
  "preferredUsername": "Alice",
  "name": "Alice",
  "identifiers": [
    "acct:Alice@banach",
    "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ"
  ],
  "endpoints": {
    "sharedInbox": "http://banach/shared_inbox"
  },
  "manuallyApprovesFollowers": true
}

given: "Bob" created an actor on "banach" called "Bob" with username "Bob"

send.Bob.request.create_actor
{
  "base_url": "http://banach",
  "preferred_username": "Bob",
  "profile": {},
  "automatically_accept_followers": null,
  "name": null
}
receive.Bob.response.create_actor
{
  "attachment": null,
  "published": "2026-03-20T15:23:51.806335",
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1",
    {
      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers"
    }
  ],
  "publicKey": {
    "id": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg#legacy-key-1",
    "owner": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtEhjEPUo3Pkt/qAVirwT\ne5zCin7RXw6AcDfnb+wCVtRagVnK4JdB1v9kmvv9dx9VDLAtJkMTkWVNEAAYFabv\nWaQUTBNI3T7ZGb2jO8RW2rA5jHP6LLCL/SE4goHGjTmVqsBgU/bZhG9tDD6/WUIS\natmlW4jyD7yS30/3vAj0KQaPfv1abz5hzhWPwtyaU8mi13Qat7bzdj4kcPSoe/pf\nU9giKtTlLtz2ezvukPbLH7N8qC6ixj6uGw2RUqArCBs4Jra1UMRxQrCGWyb4d4//\nDPsZBI39QTQ17F1nO1akkGwsKjUklBq0nGR62cypIShrZH/oPRmWjd8KdNKw2oej\ndwIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  "id": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg",
  "type": "Person",
  "inbox": "http://banach/inbox/FGgmEhgqngysAzPhfqKJjw",
  "outbox": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg/outbox",
  "followers": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg/followers",
  "following": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg/following",
  "preferredUsername": "Bob",
  "name": "Bob",
  "identifiers": [
    "acct:Bob@banach",
    "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg"
  ],
  "endpoints": {
    "sharedInbox": "http://banach/shared_inbox"
  },
  "manuallyApprovesFollowers": true
}

when: "Bob" sends "Alice" a Follow Activity

send.Bob.trigger.send_message
{
  "actor": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Follow",
    "actor": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg",
    "to": [
      "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ"
    ],
    "id": "follow:967364f3-3712-4513-ae71-2b03e3af6ab1",
    "published": "2026-03-20T15:23:51Z",
    "object": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ"
  }
}
receive.Bob.outgoing.Follow
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Follow",
      "actor": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg",
      "to": [
        "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ"
      ],
      "id": "follow:967364f3-3712-4513-ae71-2b03e3af6ab1",
      "published": "2026-03-20T15:23:51Z",
      "object": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ"
    }
  },
  "actor": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg",
  "event_type": "outgoing",
  "history_id": null
}
receive.Alice.incoming.Follow
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Follow",
      "actor": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg",
      "to": [
        "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ"
      ],
      "id": "follow:967364f3-3712-4513-ae71-2b03e3af6ab1",
      "published": "2026-03-20T15:23:51Z",
      "object": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ"
    }
  },
  "actor": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ",
  "event_type": "incoming",
  "history_id": null
}

when: "Alice" sends an Accept to this Follow Activity

send.Alice.trigger.send_message
{
  "actor": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Accept",
    "actor": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ",
    "to": [
      "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg"
    ],
    "published": "2026-03-20T15:23:52Z",
    "object": "follow:967364f3-3712-4513-ae71-2b03e3af6ab1",
    "id": "accept:0d822848-b82b-4e52-948c-011d827c49ac"
  }
}
receive.Alice.outgoing.Accept
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Accept",
      "actor": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ",
      "to": [
        "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg"
      ],
      "published": "2026-03-20T15:23:52Z",
      "object": "follow:967364f3-3712-4513-ae71-2b03e3af6ab1",
      "id": "accept:0d822848-b82b-4e52-948c-011d827c49ac"
    }
  },
  "actor": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ",
  "event_type": "outgoing",
  "history_id": null
}

when: "Alice" blocks "Bob"

receive.Bob.incoming.Accept
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Accept",
      "actor": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ",
      "to": [
        "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg"
      ],
      "published": "2026-03-20T15:23:52Z",
      "object": "follow:967364f3-3712-4513-ae71-2b03e3af6ab1",
      "id": "accept:0d822848-b82b-4e52-948c-011d827c49ac"
    }
  },
  "actor": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg",
  "event_type": "incoming",
  "history_id": null
}
send.Alice.trigger.send_message
{
  "actor": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "Block",
    "actor": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ",
    "to": [
      "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg"
    ],
    "id": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ/15dbc9fe31f00cb3",
    "published": "2026-03-20T15:23:52Z",
    "object": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg"
  }
}
receive.Alice.outgoing.Block
{
  "data": {
    "raw": {
      "@context": "https://www.w3.org/ns/activitystreams",
      "type": "Block",
      "actor": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ",
      "to": [
        "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg"
      ],
      "id": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ/15dbc9fe31f00cb3",
      "published": "2026-03-20T15:23:52Z",
      "object": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg"
    }
  },
  "actor": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ",
  "event_type": "outgoing",
  "history_id": null
}

then: The "followers" collection of "Alice" does not include "Bob"

send.Alice.request.fetch
{
  "actor": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ",
  "uri": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ/followers"
}
receive.Alice.response.fetch
{
  "actor": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ",
  "uri": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ/followers",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "OrderedCollection",
    "id": "http://banach/actor/QpL7Z9_MM30_2HdcNQ3dfQ/followers",
    "orderedItems": [],
    "totalItems": 0
  }
}

then: The "following" collection of "Bob" does not include "Alice"

send.Bob.request.fetch
{
  "actor": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg",
  "uri": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg/following"
}
receive.Bob.response.fetch
{
  "actor": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg",
  "uri": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg/following",
  "data": {
    "@context": "https://www.w3.org/ns/activitystreams",
    "type": "OrderedCollection",
    "id": "http://banach/actor/6AlsYuK0KzmWivov7R8Ywg/following",
    "orderedItems": [],
    "totalItems": 0
  }
}