If you Announce(Object) are you not following FEP 1b12?

This is a spin-off discussion from today's ForumWG meeting

At today's ForumWG meeting, @trwnh@mastodon.social mentioned that Announce(Object) is something that Hubzilla and Friendica do, but the proper FEP 1b12 behaviour is to send out Announce(Activity).

I noted that NodeBB actually announces the Note object itself, instead of the activity, and provided some context that Discourse (via @angusmcleod@mastodon.social) originally expected Activities, but now also accepts objects (implicit create) for compatibility with NodeBB. Likewise, NodeBB also added some logic to handle Announce(Create(Note)) for compatibility.

Would Announce(Object) be considered a "variant" of 1b12, implemented within the spirit of the FEP, but not a technically compliant implementation?

@julian @trwnh @angusmcleod Announce(Object) is a boost/share/repost in Mastodon and other micro-blogging apps. I think it can't be considered a variant of FEP-1b12. And the FEP only talks about announcing activities:

>In case the incoming activity is deemed valid, the group MUST wrap it in an Announce activity, with the original activity as object

@silverpill@mitra.social in my experience many talk about FEP 1b12 implementations as "boosting" to the group, hence the confusion.

@julian It might be because of what FEP-1b12 says in "Implementations" section:

>This document is written based on existing group implementations in Lemmy, Friendica, Hubzilla, Lotide and Peertube. These already federate successfully in production.

Some of these implementations may support Announce(Activity) today, but as far as I know they didn't support it when FEP-1b12 was written

Thank you @silverpill@mitra.social for providing some helpful context.

In that sense, then, it seems as though @nutomic@lemmy.ml expected going in that existing implementations would not be strictly compatible with his vision, but one would assume some form of compatibility was reached in spite of this?

That is, Lemmy may expect Announce(Activity), but I bet it also accepts Announce(Object) if one of their users were to follow a Hubzilla/Friendica group actor...

Would it help to add a “Legacy Compatibility”/Postel’s Law section explaining this to the FEP itself? As in,

“An implementation MUST produce Announce(Activity) messages to conform to this FEP, but it MAY also accept [edit: and/or emit] Announce(Object) as well for wider compatibility, and if you do, the recommended behavior is… { Normalize | Drop | Translate | etc }”

This is helpful to people writing test suites/test-cases because it can give warnings for what an implementation will receive that still help compatibility without giving anyone “Fails” for the core feature :smiley:

1 Like

@julian @nutomic When Lemmy creates a post it sends both Announce(Object) and Announce(Create(Object)). I don't know about accepting Announce(Object), but likely it does that too

Information about Legacy Compatibility was not included on purpose: #20 - Add FEP-1b12: Group federation - fediverse/fep - Codeberg.org
But I still think it would be helpful to include. Perhaps in a different FEP, because FEP-1b12 was finalized.


@silverpill@socialhub.activitypub.rocks I'm not certain whether the variance rises to the level of requiring a separate FEP, since it is essentially just supporting the lack of an activity wrapped around the object in question.

It's unfortunate that finalized FEPs cannot change, since it's essentially just a non-normative description of backward/alternative behaviour.

Minor changes are allowed:

A proposal with status FINAL can not be changed or updated in a way that would lead to adjustments to implementations.

The paragraph proposed by @bumblefudge sounds like a normative change, but not a backward incompatible one, so I wouldn’t object against including it.


Lemmy only supports Announce/Activity, with the exception of sending Announce/Page for Mastodon compatibility. When I wrote the FEP I wasn’t aware that Hubzilla and Friendica send Announce/Object, otherwise I might have included that.


Thanks for supplying some additional context @nutomic@socialhub.activitypub.rocks

Understanding that, then, would you be open to amending the FEP to include observed behaviour from other implementors who send Announce(Object) instead?

A second optional pattern would be sending an Announce(Object) for increased compatibility with other implementers, though it may be harder to justify amending the FEP for that.

1 Like

Yes it would make sense to include Announce/Object as a shorthand for Announce/Create/Object.

1 Like

As per the discussion generated by this topic, I have updated the NodeBB implementation so that its group actors (NodeBB categories) send out Announce(Create(Note)) in addition to Announce(Note), the latter being sent out for compatibility with services that do not handle activity announcement.

1 Like

I've also added FEP 1b12 announces for additional activities:

  • Create
  • Update
  • Like
  • Undo(Like)
  • Delete

Confirming that at least Discourse accepted the Announce(Like(Note)) and parsed it correctly.