1/
This is how a Fediverse Labeler could work.
In particular, This is how a Fediverse Labeler could be represented as ActivityPub / ActivityStreams / JSON-LD data.
2/
A Fediverse Labeler would output a separate ActivityStreams "Profile" Object for each thing it wants to label.
Each of these should be at a separate URL.
3/
The "describes" field would point to the thing being labelled.
The "attributedTo" field would point to the person or machine that create these label.
And the "attachment" field would be a list of labels.
The (top level) "icon" field would be an icon that would be shown next to the label in the user-interface (UI).
@reiver I probably wouldn't use the Profile activity type, unless you're intending that to be wrapped in an Create/Update activity?
@reiver well "profile" isn't a verb, it's a noun..
From this:
https://www.w3.org/TR/activitystreams-vocabulary/#dfn-profile
"A Profile is a content object that describes another Object, typically used to describe Actor Type objects. The describes property is used to reference the object being described by the profile."
The use-case I outlined is one Object "describing another Object".
To me it seems like it fits the Labelling use-case.
@reiver right, but it's an Object, not an Activity.
I was expecting it to be an Object (rather than an Activity).
...
How I (currently) imagine it (and have it coded) is —
...
You run a Fediverse Labeler on a server with a Internet domain. (Ex: example.com)
There can be many many of these. And a user could decide which Fediverse Labeler they want to get information from.
A particular Fediverse Labeler may or may not have labels for another Object (including Actors) anywhere on the Fediverse.
...
If it does, there would be a URL for the labels for that Object.
http;//example·com/hapi/v1/profiles/acct:joeblow@host·dom
Or:
http;//example·com/hapi/v1/profiles/?url=http;//host·dom/users/joeblow
And then those would return something similar to the JSON-LD I originally posted.
It would be sort of similar to, for example, going to:
https://mastodon.social/users/reiver
(With "Accept: application/activity+json")
And getting an ActivityPub / ActivityStreams Object.
@reiver ah, okay, so I imagine labellers to be Actors which you choose to follow, and then based on that relationship receive the labels they associate with things (same with Annotation providers)
Though the Label object type can also be used to represent things like labels for content moderation.
For now I think Label object type would just extend the base Object class, without further specialisation.
In my experiments with web annotations for community notes, I use the sha256 hash of the target object ID as the collection ID for all annotations related to that object
I did consider an new Actor type for a Labeler.
And I am not against it (if there was a simple API, too).
But I thought the developer-experience would be too difficult for many without a simple request-response API that could get called.
(That is why I mocked it up as I described.)
Maybe an "ideal" scenario is to have both.
A new Actor type, and a simple API.
@reiver it doesn't necessarily need a new actor type, as it'd just be a specialisation of Service, but I think you would need to distribute data through Activities, not just GET requests
@thisismissem @reiver
I would also prefer that labels (and annotations, they're the same thing) be an Activity and not connected to a particular kind of actor.
One of the scenarios I would want labels to support is for a known instance to label other arbitrary objects. Like, for example, to support fact checking/community notes-like features. These things work better if they carry some established trust. It helps avoid the things happening with bsky labellers right now, where botnet operators are setting up decoy bot labellers, to flag real disinfo researchers as bots.
@jenniferplusplus @thisismissem @reiver it's kinda odd that we expect labels to be an activity you have to be subscribed to,
And not a collection you look up?
Like if you weren't originally following a remote server you wouldn't know about the event when someone labeled something
And you probably don't want to hear every miscellaneous label event from a remote server
You probably just want to ask a server "hi do you have labels for this profile?", or ask a profile "hi, who's labeled you?" - chronological order of the activities of the labeler are not the primary focus, but rather the set of names and who's attached them to what profiles
@jenniferplusplus @thisismissem @reiver like the true request would be (whether implemented this way under the hood or not)
"Get Set" or
"Enumerate linked labels"
Not:
"Subscribe" (and then wait for new toots on remote servers to appear, or e.g. how mastodon doesn't pull the remote followers collection) or
"Get latest label"
"Process ordered label" (a user views a label at a point in time, when they're looking at a profile)
@risottobias @thisismissem @reiver Setting aside for a minute that there's no query mechanism in AS/AP, you still want all of the above. I don't want to check with a third party about every post I ever receive. I particularly don't want to do that repeatedly, in order to have any confidence that you actually got the labels. And I doubt labellers want that either. They'll want to label the objects they choose to label, and then notify their subscribers about it. And you can't (only) ask the object (or its server) what has labelled it, because you can expect it to lie about labellers it doesn't like.
@jenniferplusplus @thisismissem @reiver right, but I can also expect it to tell me about interesting labelers I don't know about
Similar to following global topics or seeing replies from other servers
The lack of a query mechanism makes this kinda annoying