What's actually in the special collections, causal activity or target object?

IMO putting Like activities in that collection is useless because what you actually want in both your database and your UI is the list of actors that liked an object. If these are to be activities, you’d have to resolve every one of these to get the actors — which is a huge overhead.

To prove my point further, I’d like to point out that most implementations, including mine, store both likes and followings as relations, not activities. Here’s the schema for my likes table. And here’s the Like activity Mastodon sends, notice the “ephemeral” ID with fragment:

{
"@context":"https://www.w3.org/ns/activitystreams",
"id":"https://mastodon.social/users/grishka#likes/28393208",
"type":"Like",
"actor":"https://mastodon.social/users/grishka",
"object":"https://friends.grishka.me/posts/12082"
}