Not-so-random thought:
The introduction and first chapters of the ActivityPub spec look like the intention is to create a "simple" protocol.
As in "go ahead, create your own implementation".
The resources linked on activitypub.rocks look like they have the same thing in mind.
Which makes me wonder why the result has become so complicated. Maybe because some decisions were deliberately left open?
A lot of the semantic stuff looks/feels/seems to me (who has little practical experience with the standard) as if decisions have been "moved up the ladder" to another layer, so it would be handled by the application implementer.