I think of it differently. In my mind, every object could be an actor syndicated using ActivityPub: projects, tickets, dvcs, etc.
For example I find interesting to make a gitlab issue appear as a toot in mastodon and when users reply to it, the comments are added to the issue in gitlab.
Or to have a project replicated from github in our heptapod, and when we add an issue to it, its get added to github on the other side.
Now that I think of it, I am not so sure FEDE.has_text_diff is such a good idea, because the underlying DVCS already has a synchronisation mechanism, why redoing it ?
Maybe what is needed is just to exchange with ActivityPub the metadata describing the different events/activities of the actors (project, issue, repository, pipelines, merge requests, etc), but not the code itself ?
As I said, I know little about ActivityPub and one thing I have not understood is why sending the content when doing outbox.addActivity() instead of just stating “the object at this url changed” and let the client GET the new version at this url in case it wants the new version.
We are dealing with data that is exposed on the web and identified by a URL, why should we encapsulate that data into a new protocol instead of letting the client GET the data using HTTP ?