Article vs. Note vs. Page

There have been some scattered discussions I've seen over the past year that mention that @pfefferle@mastodon.social's WordPress ActivityPub plugin federates their blog posts out as an as:Note, and that the only reason this is done is because Mastodon only treats as:Note (and as:Question) as a first-class object and relegates anything else to a fallback handler that takes a short snippet of the content, and shows a link back to the original source, thus losing any in-app benefits (boosts, replies, etc.)

Whether this is actually true or not, I do not know. So that's why I'd like to ask Mattias — or anybody else with some context — here.


For reference:

  • as:Article: Represents any kind of multi-paragraph written work.
  • as:Note: Represents a short written work typically less than a single paragraph in length.
  • as:Page: Represents a Web Page.

I have also noticed that Lemmy, perhaps out of principle, sends out an as:Page for new generated content, and only the replies federate out as as:Note. It has unfortunately led to some assertions that Lemmy's federation is "broken", even though it is arguably not the case.

@nutomic@socialhub.activitypub.rocks, care to weigh in?


I don't even blame Mattias for opting to send everything out as as:Note.

End of the day right now it doesn't matter how Mattias or Nutomic represent their higher-level collection of data, because Mastodon is the largest implementor and neither they — nor anyone else I know of, for that matter — treat anything that's not as:Note or as:Question specially.

But that ought to change. The question is how, but this WG is not at the point where we start throwing around decrees and making up standards.

What's important to me right now is what the landscape looks like right now, and why that is the case.

N.B. The discussion here will eventually make its way to online real-time discussion at one of the future WG meetings.

1 Like

@julian @nodebb Note is the default in the WP plugin but the user gets some options…

@julian [quote]Whether this is actually true or not, I do not know.[quote]
It’s true. Mastodon reduces Article-type objects to the title, if there is any, the summary, if there is any, and a link to the original page. It’s intentional and by design.

@simonwood @julian @nodebb as Simon said, this is a user choice! You can choose “Note” if you want to have the best compatibility or you can let the plugin choose what the best format is. And then we try to map the WordPress internal post formats to the ActivitySteams Object-Types. Standard Post == Article, Status & Aside == Note, Image == Note with priority on image attachments, Video == Note with priority on video attachments, …

@julian

Whether this is actually true or not, I do not know.

It’s true. Mastodon reduces Article-type objects to the title, if there is any, the summary, if there is any, and a link to the original page. It’s intentional and by design.

Hubzilla managed to prove it with the 9.0 release several weeks ago. Up until then, Hubzilla posts went out as Note-type objects. The 9.0 release introduced a switch for the entire channel that defaulted to sending Article-type objects and could be switched back to Note-type objects. And all of a sudden, anything that came from Hubzilla was rendered as described above. The Hubzilla community had largely all but forgotten about it. A hotfix disabled the switch and hotwired Hubzilla to Note-type objects until 9.0.1 removed it again.

The actual reason of this behaviour is because Article-type objects tend to be blog posts with all bells and whistles. Text formatting, headlines, horizontal rules and, most importantly, an arbitrary number of images embedded anywhere within the post.

Mastodon, however, is so “original gangsta purist microblogging” that it refused to support any of this up until version 4.0. And even since version 4.0, it can only render the former two.

In other words, if Mastodon tried to render a blog post as-is, it’d fail miserably and botch it big time. Like, rip four of the embedded images out of their embedding, leave them dangling below the post, and throw all images that go beyond these four away altogether because Mastodon can’t handle more than four images.

And this mangled rendering of the blog post would literally be the only way that most Mastodon users would experience the post. There wouldn’t be a big button that’d take them to the source. There’s a button, but stashed away in a pop-up menu that isn’t labelled as containing such a button.

The next-best alternative would have been for Mastodon to include full support for everything that can be done with Markdown or HTML or Friendica/Hubzilla’s expanded BBcode. But, again, that wouldn’t be purist microblogging. That’d be un-Mastodon-like.

So the only alternative left was to not render the post at all and link to the original instead.

The Hubzilla community is fully convinced that Mastodon took this step to flip the bird at Hubzilla.

In order to understand this idea, there are a few things to understand. First: When Mastodon was launched, it immediately federated with Hubzilla which had already been there. Both communicated via OpenMicroBlog, the predecessor of OStatus.

Next: Hubzilla was the first Fediverse project to implement ActivityPub in July, 2017, when it wasn’t even a W3C standard yet. Mastodon was the second, some two months later. For quite a while, it was just these two.

Finally: We all know how limited Mastodon is. Hubzilla, on the other hand, had inherited its text formatting capabilities from Friendica, and they’re immense. If you can do it in a blog post, you can do it in a Hubzilla post.

Only that Mastodon couldn’t render any of it.

AFAIK, Hubzilla kept asking Mastodon to implement full HTML rendering for posts so it’d stop mangling posts from Hubzilla and Friendica. Mastodon staunchly refused because that’d go too far beyond purist microblogging and Twitter-mimicking. Same reasoning as for hard-coding the 500-character limit.

Eventually, Mastodon introduced this switch plus the specific handling for Article-type objects. But instead of being a special mode that does have full HTML rendering capabilities as demanded by Hubzilla, it just creates a link to the original.

For Mastodon, it’s keepin’ it real and sticking to purist microblogging. For Hubzilla, it’s a way to spite them and their silly text formatting and image embedding antics. Hubzilla still holds a grudge against Mastodon for this.

But that ought to change. The question is how, but this WG is not at the point where we start throwing around decrees and making up standards.

The only way for this to change is if you went to Mastodon’s GitHub repository and filed an issue which labels this behaviour as a bug. And if as many other Fediverse projects as possible joined in on the same issue. And if the pressure on Mastodon became so big that they cave in and introduce all rendering capabilities necessary to show a long-form blog post the way it’s supposed to look.

Again, Hubzilla has tried it which led to the creation of this phenomenon. Others have tried it, too. And I’m not even sure if a vast alliance of Fediverse devs could change it.

After all, Mastodon is in such a position that it doesn’t even have to act. It presents itself to the majority of Fediverse users as the one and only fully-featured Fediverse standard and implies that everything that deviates from it is broken.

#Long #LongPost #CWLong #CWLongPost #FediMeta #FediverseMeta #CWFediMeta #CWFediverseMeta #Mastodon #ActivityPub

@julian @pfefferle I was wondering what those formats were all about, as I was trying to translate last 12 lines of #activitypub into italian. Thanks for explanation. But, btw, this matter of compatibility between formats is what creates confusion in #fediverse - it should be standardized like, let's say, e-mail? Rss? But in the end, every platform thinks its own business killing every intention.

@pfefferle @julian @nutomic After the last conversation I saw, I was movitated enough to write a whole philosophical treatise on the subject: fedi.exon.name/2024/04/21/conv…

The conclusion I came to: Mastodon is probably more-or-less doing the right thing by refusing to render articles, but perhaps it would be nice to have a pop-out view for reading them. Friendica and Wordpress, however, would do better to give authors explicit control over the post type of each individual object.

I don’t think that’s the case, but maybe you meant something more specific than what you wrote? Several implementations support content-related AS2 content types (both base types and extensions) that do not fallback to as:Note or as:Question. For example, Funkwhale has “Libraries”, “Tracks”, “Audio” (etc.), PeerTube has “PlayLists” and “Video”, PixelFed has “Story”, Mobilizon has “Event”, and so on.

Unfortunately (in my opinion), that’s only hard-coded in the UIs. I often see “Note” content, from non-Mastodon servers or patched Mastodon instances, that are 1000s of characters long in my feed and the viewing UX is not very good.

@mat @julian @nutomic I also understand why Mastodon uses "Note" and why they use the summary for Article, it's about Microblogging. The part that I do not understand (and that makes it inconsistent) is, that they kind of treat a "Note" as an "Article" by showing a preview (when text is above x chars) with a "show" more link. This tempts others (like me) to better use "Note".

This is UI-specific, right? I use the Mastodon “advanced UI” on the desktop and there’s no “show more” expander control. It only has a scroll bar for the long text. However, the Ice Cubes iOS app has a “Show full post” expander for the same post (for example).

@julian @pfefferle @pfefferle @nutomic Mastodon already can display long Note content (it adds "Read more" at the end), I think it is reasonable to do the same for Article and other types of objects.

>The question is how, but this WG is not at the point where we start throwing around decrees and making up standards

Just talk to developers. There's an open issue (and an open pull request): https://github.com/mastodon/mastodon/pull/24081. This proposal has not been formally rejected, perhaps @renchap could provide some feedback?

1 Like

@silverpill @julian @pfefferle@mastodon.social @pfefferle@community.nodebb.org @nutomic I am not very knowledgable about ActivityPub so I cant discuss the specifics, but we would like to improve how non-Note objects are processed/displayed in Mastodon.
If there are discussions about this, or a WG working on the topic, please send me the links so I can reference them for us to read when we start working on this :)

One of the ideas would be to support an embedded "view more" modal, that somehow displays the remote content.

1 Like

@renchap @pfefferle @julian @pfefferle @nutomic

I know that @dev attempted to start a group for working on this issue: https://mediaformat.org/wordress-activitypub/article-working-group/

cc @liaizon

@pfefferle @simonwood @julian @nodebb Curious how you set the “priority on image/video” in ActivityPub? I didn’t know that was possible!

these are the formal definitions, yes, but implementation practice has diverged somewhat. i think “paragraph length” is a bit of a red herring, as there are Notes with multiple <p> tags in the activitystreams/pub examples. there are also Notes with names (titles). i go into this more here: Federating the content of posts (Note, Articles and character limits) - #7 by trwnh

to be honest i’m not sure why they do this. it’s not particularly “wrong”, it’s just a little weird. the thing that’s a bigger issue for federation is using Announce to wrap activities that ought to be forwarded. most other fediverse implementations operate at an object level, so Announce means sharing the object. Announcing activities as a substitute for proper inbox forwarding means that some implementations may interpret all of these Announces as separate “posts”. This is also more of an issue when you deal with the “activity stream” directly, i.e. if you were Facebook – there, an Announce Create Page" would be equivalent to saying in english “John reshared Sally’s Create” rather than “Sally created a web page” or “John reshared Sally’s web page”. bringing it back to object types though, the expectation of Page is not “a submission to a link aggregating service”. i would expect it to be reserved for actual web pages, like how Tumblr lets you create custom web pages in your blog theme editor.

so i’d say that it breaks down more like this:

  • Article = formally published text, like Wordpress, typically has a title and permalink (which may be used for “conversion” logic as mastodon does currently), may be read in a feed reader or syndicated to other publishers
  • Note = informal text, like a status update or chat message or forum post or a comment in a comments section, etc. Typically viewed in context of something else (e.g. some collection of Notes, like a profile page, replies collection, context collection, or so on)
  • Page = structured content meant to be displayed in a web browser, e.g. Neocities, or Tumblr’s “custom pages”.

i don’t think it’s “making up standards”. i think it’s just standards. you’re not decreeing anything, you’re just describing how things ought to be done. and on an ecosystem level, you get buy-in from implementers of those standards – of which there should at least be NodeBB, Discourse, and Flarum, right? the process of standards alignment can be slow and painful, but it should be done nonetheless. the landscape right now looks like what it looks like because there hasn’t been any real protocol stewardship, and Mastodon emerged as a de facto steward of its own protocol. how we change that is by developing actual standards via FEP, WG, etc. – and then advocating other implementers use those standards for better interoperability. put another way, it’s a question of trust and authority. in the absence of a trusted authority, implementers will do whatever they want. part of the argument for activitypub as a standard is that it received w3c approval as an official Technical Recommendation. at worst, it’s a rubber stamp by one of the highest authorities of web standards. at best, it’s a foundation for sharing activity streams on the linked data web. but it takes a lot of work from implementers and alignment initiatives to make it reach that point. “if no one implements it, all you have is a spec”.

strategically, another part of “how we change that” is by making it easier for implementers doing the "wrong* thing to transition to doing the “right” thing. providing migration paths. maybe even sending them PRs, instead of waiting for them to do it. it’s outreach.

3 Likes

@pfefferle @simonwood @julian @nodebb why "note with priority on inage/video attachments"? do wordpress post formats allow Image/Video posts with multiple attachments?

@jupiter_rowland@hub.netzgemeinde.eu said in Article vs. Note vs. Page:

For Mastodon, it's keepin' it real and sticking to purist microblogging. For Hubzilla, it's a way to spite them and their silly text formatting and image embedding antics. Hubzilla still holds a grudge against Mastodon for this.

Thanks for sharing this history. I'm certain Eugen would have a different view of how things went down, but nonetheless we have ended up at this impasse where a Note can have more than 500 characters, and some rich formatting, but not a full set (e.g. no block/inline images, horizontal rules, etc.)

@jupiter_rowland@hub.netzgemeinde.eu said in Article vs. Note vs. Page:

And I'm not even sure if a vast alliance of Fediverse devs could change it.

Certainly that is one pessimistic way of looking at it. I am new to the fediverse developer scene and perhaps am still naive enough into thinking we can make a difference 😏 (<-- Mastodon users can't see it, but I put a smirking emoji there)

@mat@friendica.exon.name said in Article vs. Note vs. Page:

The conclusion I came to: Mastodon is probably more-or-less doing the right thing by refusing to render articles, but perhaps it would be nice to have a pop-out view for reading them.

Not every software needs to handle Article/Note differently. From a forum perspective, or at least in NodeBB, Articles and Notes are both just added to topics and the posts that make up topics can be of any length.

But additional handling could be introduced, like an optional "reader mode" for longer form content. Who knows.

@stevebate@socialhub.activitypub.rocks said in Article vs. Note vs. Page:

I don't think that's the case, but maybe you meant something more specific than what you wrote? Several implementations support content-related AS2 content types (both base types and extensions) that do not fallback to as:Note or as:Question. For example, Funkwhale has "Libraries", "Tracks", "Audio" (etc.), PeerTube has "PlayLists" and "Video", PixelFed has "Story", Mobilizon has "Event", and so on.

You're right, and that's why I worded it like I did, because I personally don't know about the other softwares around and how they handle this particular use case. That's the main question I wanted answered, and you've helped me out there!

So lots of other federating software send out AS2 content types, that at least does reinforce the need for some sort of "generic" handler for unknown types.

At least from a the WG perspective we'd be concerned with Notes and higher order collections of Notes, but there's no telling where this may go!

@trwnh@socialhub.activitypub.rocks said in Article vs. Note vs. Page:

on an ecosystem level, you get buy-in from implementers of those standards – of which there should at least be NodeBB, Discourse, and Flarum, right? the process of standards alignment can be slow and painful, but it should be done nonetheless. the landscape right now looks like what it looks like because there hasn’t been any real protocol stewardship, and Mastodon emerged as a de facto steward of its own protocol. how we change that is by developing actual standards via FEP, WG, etc. – and then advocating other implementers use those standards for better interoperability.

Part of the reason I started this topic was to confirm my suspicion as to why WordPress sends out Notes. Mastodon being a micro-blogging application means they have rationale for resisting attempts to add support for rich-text Articles and such (as @jupiter_rowland@hub.netzgemeinde.eu implied), but it should never have gotten to the point where an implementor like @pfefferle@mastodon.social would choose to use as:Note over as:Article.

Alignment from other implementors would apply some additional pressure for Mastodon to re-consider its handling of as:Article.

1 Like

@trwnh @simonwood @julian @nodebb WordPress does not have the concept of attachments. So we are parsing inline-media and add them as attachments before federating them. So yes, you can add as much media to your post as you want!

1 Like

@pfefferle interesting. is there a concept of mixed-media formats, then? the reason I ask is because my first assumption would have been that Image maps to Image, in particular when it's a single Image. likewise, that Video maps to a single Video where possible. but i suppose that wouldn't completely work with multiple media files or mixed media, would it?

it may be worth thinking about alternative approaches like perhaps an "Album" extension type that is a Collection of Image/Video items?

@trwnh you can add as much media as you want with mixed media formats! So for normal notes and articles we take the media files in the order they are added to the text. For video, we search for videos first and fall back to others if there are no videos. Same for audio and image posts.