Index: test/activitypub-as2.test.js
===================================================================
--- test/activitypub-as2.test.js	(revision 4c70ecbe5990b354c76af6b01ef4b3d7e937a63a)
+++ test/activitypub-as2.test.js	(revision dc4aa08b9b004c449dc53ab40d77b4576e9360f4)
@@ -30,4 +30,6 @@
   'totalItems', 'orderedItems', 'items', 'first', 'last', 'partOf', 'next', 'prev',
   'preferredUsername', 'inbox', 'outbox', 'followers', 'following', 'endpoints', 'sharedInbox',
+  // ActivityPub §5.6: the private blocked collection (owner-only GET).
+  'blocked',
   // ActivityPub §4.1 `endpoints` vocabulary (same category as sharedInbox), used for C2S.
   'oauthAuthorizationEndpoint', 'oauthTokenEndpoint', 'uploadMedia',
Index: test/c2s-block.test.js
===================================================================
--- test/c2s-block.test.js	(revision 4c70ecbe5990b354c76af6b01ef4b3d7e937a63a)
+++ test/c2s-block.test.js	(revision dc4aa08b9b004c449dc53ab40d77b4576e9360f4)
@@ -43,2 +43,15 @@
   assert.equal(out.status, 400);
 });
+
+test('the actor advertises the blocked collection (AP 5.6)', () => {
+  site.primary_slug = 'me';
+  const actor = AP.buildActor('https://test.example', site);
+  assert.equal(actor.blocked, 'https://test.example/ap/users/me/blocked');
+});
+
+test('actor-kind blocks form the collection items; domain blocks stay out', async () => {
+  await AP.ingestOutboxActivity(site, user, { type: 'Block', object: BULLY });
+  await AP.blockTarget(site, 'nare-server.example');   // domain block
+  const items = AP.listBlocks('me').filter((b) => b.kind === 'actor').map((b) => b.target);
+  assert.deepEqual(items, [BULLY]);
+});
