Index: src/services/ActivityPubService.js
===================================================================
--- src/services/ActivityPubService.js	(revision 8f520e0a3f2cbb78f2fda599e80a671c5579edc9)
+++ src/services/ActivityPubService.js	(revision af5b79bce6ea434335758683cb102f0e695757ce)
@@ -278,4 +278,6 @@
       ...Guardianship.helpRequestProps(post),
       ...Guardianship.waveProps(post),
+      // FEP-633c §2.2: object hint that the author is a ward.
+      ...Guardianship.hasGuardiansProps(site.slug),
       tag: [
         ...mentionTags(post.content),
@@ -312,4 +314,5 @@
       tag: [...hashtagTags(base, post.content)],
       replies: `${id}/replies`,
+      ...Guardianship.hasGuardiansProps(site.slug),
     };
   }
@@ -488,4 +491,6 @@
     sensitive: !!post.nsfw,
   };
+  // FEP-633c §2.2: object hint that the author is a ward (safely ignorable).
+  Object.assign(note, Guardianship.hasGuardiansProps(site.slug));
   if (post.nsfw) note.summary = post.content_warning || 'Gevoelige inhoud';
   if (attachment.length) note.attachment = attachment;
@@ -1504,4 +1509,6 @@
         for (const s of subs) {
           tlStmts().ins.run(o.id, s.slug, actorUri, ai.name, ai.handle, ai.icon, ai.url, html, o.url || null, o.published || null, media, o.sensitive ? 1 : 0, o.summary || null);
+          // FEP-633c §2.2: register the ward hint on the stored object (no action yet).
+          if (Guardianship.objectHasGuardians(o)) { try { db.prepare('UPDATE ap_timeline SET has_guardians = 1 WHERE id = ? AND slug = ?').run(o.id, s.slug); } catch { /* ignore */ } }
           if (poll) { try { db.prepare('UPDATE ap_timeline SET poll_json = ? WHERE id = ? AND slug = ?').run(JSON.stringify(poll), o.id, s.slug); } catch { /* ignore */ } }
         }
@@ -1522,8 +1529,9 @@
         const help = Guardianship.isHelpRequest(o);
         const wave = Guardianship.isWave(o);
+        const hasG = Guardianship.objectHasGuardians(o);   // §2.2 hint, register-only
         for (const slug of slugs) {
           try {
-            const r = db.prepare('INSERT OR IGNORE INTO ap_mentions (slug, object_uri, note_url, actor_uri, actor_name, actor_handle, actor_icon, actor_url, content, published, help_request, wave, created_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP)')
-              .run(slug, o.id, safeUrl(o.url) || null, actorUri, ai.name, ai.handle, ai.icon, ai.url, html, o.published || null, help ? 1 : 0, wave ? 1 : 0);
+            const r = db.prepare('INSERT OR IGNORE INTO ap_mentions (slug, object_uri, note_url, actor_uri, actor_name, actor_handle, actor_icon, actor_url, content, published, help_request, wave, has_guardians, created_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP)')
+              .run(slug, o.id, safeUrl(o.url) || null, actorUri, ai.name, ai.handle, ai.icon, ai.url, html, o.published || null, help ? 1 : 0, wave ? 1 : 0, hasG ? 1 : 0);
             if (r.changes) {
               console.log('[AP] mention', actorUri, '→', slug, help ? '(help request)' : '');
