mastodon.social is one of the many independent Mastodon servers you can use to participate in the fediverse.
The original server operated by the Mastodon gGmbH non-profit

Administered by:

Server stats:

354K
active users

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.

@reiver ⊼ (Charles) :batman:

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).

4/

Note that even in this example, that there are different types of labels!

I have some examples of text labels.

But I also have some examples of Icon labels.

(Other types of labels could exist, too.)

@reiver you would probably want to always have a textual representation of a Label, however, perhaps a flag to say “use the image attachment associated with this label instead of the textual version" — it's important that we can correctly do alt text on image-based labels, if that's something that's desired.

I think we'd most likely be allowing a small svg/png icon for the label, not an image in its entirety.

@thisismissem

I think having the option of adding alt-text is a good idea.

But I don't think it will always be useful. It depends what the UI does with the label.

For example, a type:"Icon" label might be used as an alternative profile-image in the UI.

@reiver @thisismissem I think you should always have a text name for a label, even if it's an emoji.

@risottobias @thisismissem

What if the user doesn't fill in a required text name?

It would just be an empty string.

(I can imagine many many people not bothering to fill in a text label for image-labels.)

@reiver @thisismissem you can't label something if it's blank,

So if someone makes an image label, the software should refuse to make it if it's blank

This is the same as a poll, the software refuses to let you have an empty zero length option

@reiver Hey, I loved this discussion when it landed, and I've stumbled back onto it now.

Did you make any more progress using as a ?

I think I'm starting down this road soon (as a way to implement endorsements) so I'd love to build on existing work that's out there.

@benpate

I have done some of the implementation work.

Still have more to do.

...

How were you thinking of using a Labeler?

@reiver I’d use a labeler an a Fediverse version of Community Notes, or a federated version of universalnotes.org

In my primary project - emissary.dev - I want to mark/comment on a misinformational post without helping to spread the misinformation.

UniversalNotesUniversalNotes - Community Notes for every websiteUniversalNotes is an open source non-profit browser extension that brings Community Notes from Twitter / X to the rest of the internet.

@benpate

I will write a thread about how to look-up a URL, to get its labels.

I.e., if you have the URL:

http;//example·com/~joeblow

How you get the labeler server URL that will give the labels (for the original URL).

(But, after I sleep.)

@reiver @benpate why not just use the Web Annotations Protocol? Why several new constructs at the AP/AS2 level?

If you're interested in working on this, the ActivityPub Trust & Safety Taskforce also is: github.com/swicg/activitypub-t

The way I solved the discovery problem in an experimental Web Annotations service was to use the SHA256 of the object ID as the key for looking up collections of data from the annotations server (i.e., some known URL construction where you avoid URLs in URLs

self-labeling of content moderator-labeling of content annotations vs hashtag-style labels having followable actors that apply labels to content (this is very likely annotations, not labels) standa...
GitHubIdea: Annotations / Labeling of content · Issue #4 · swicg/activitypub-trust-and-safetyBy ThisIsMissEm

Just found Web Annotation protocol from your links, thank you!

w3.org/TR/annotation-protocol/

After a quick read, it seems like a good starting point (though in need of clarification, like most of ActivityPub)

Charles, if IFTAS is working on something, it’s definitely worth joining that effort. The key to success is in getting apps to implement the labeler, and IFTAS has the best chance to make that happen.

@thisismissem @reiver

www.w3.orgWeb Annotation Protocol

@benpate @reiver not IFTAS, but the ActivityPub Trust & Safety Taskforce — part of the Social Web CG / SWICG

@benpate @reiver I have an experimental web annotations server I've been working on

@thisismissem @reiver

Thanks for the clarification. Sorry I conflated the two.

And this just strengthens the case for doing this alongside the SWICG.

We’re all going in the same direction: use ActivityPub collections, inboxes, and outboxes to distribute notes about content without “boosting” it.

@thisismissem - do you know of any other implementations in the wild? My search only returned one app from 5 years ago.

@reiver - how much change would it take for your app to support this? Would you just need to switch “Profile” for “Annotation”? Or is it more complicated than that?

@benpate @reiver all you'd really need is some way to "follow" something producing Web Annotations, which should be possible as it's all just JSON-LD, web annotations context can just be added to @/context along side AS2

@thisismissem @benpate @reiver
I would also want a way to query annotation services for historical objects, and for things to be able to carry verifiable annotations for themselves (so that queries are not always necessary).

@thisismissem @benpate @reiver
And I hate to get all linked data-y, but in this case it would also be nice if it was easy to determine equivalence between annotations from different sources.

For example, it's fine for anyone to self-assert their own pronouns, but it would be so much less helpful if that's just done in free text. And at the same time, it's conceivable that organizations like the SPLC and lambda legal might each run a labeler for hate speech. Knowing which is which, is important. And so is distinguishing between those and say, an annotation server run by the KKK.

@jenniferplusplus @benpate @reiver these are all things we'd love to discuss and work on in the ActivityPub Trust & Safety Taskforce!

@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..

@thisismissem

From this:
w3.org/TR/activitystreams-voca

"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.

@thisismissem

I was expecting it to be an Object (rather than an Activity).

...

How I (currently) imagine it (and have it coded) is —

...

@thisismissem

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.

...

@thisismissem

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.

@thisismissem

It would be sort of similar to, for example, going to:

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

@thisismissem

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