So there's that nasty bug on Sharkey that mangles hashtags in messages from Hubzilla and probably also Friendica, (streams) and Forte. They always look like this:
#[Hashtag](
https://hub.hubzilla.de/search?tag=Hashtag)
Basically, Sharkey receives fully standard Rich Text from Hubzilla. It manages to convert this Rich Text into its own Misskey-Flavored Markdown. But then its Markdown parser does not parse it and leaves the Markdown code visible to everyone. It simply doesn't expect there to be a hashtag character in front of an embedded link because, seriously, who'd ever do that and why?!
Friendica would. In fact, Friendica
does. It puts the hashtag character
in front of the tag, as in
outside the tag, as opposed to
at the beginning of the tag. It has been doing that since its beginnings in 2010 because it was designed from the get-go to also federate with StatusNet from 2008. And StatusNet does hashtags the same way on its few remaining servers. In fact, so did Identi.ca from 2008, from which StatusNet emerged.
Hubzilla, (streams) and Forte do it, too, because they have inherited it from Friendica.
On StatusNet, Friendica, Hubzilla, (streams) and Forte, a hashtag in a message looks like this:
#
HashtagNotice how the hashtag character has the same colour as the rest of the post text. And not the same colour as the rest of the hashtag. This means that the hashtag character is not part of the link. (To Mastodon users who don't know this: If something in a "toot" has a different colour from the rest of the "toot", it's a link. Even if it doesn't show a URL in plain sight.)
On 𝕏, Mastodon, Pleroma, Akkoma, Misskey, the various Forkeys and a whole lot of other Fediverse software, a hashtag in a message looks like this:
#HashtagNotice how now the hashtag character has the same colour as the rest of the hashtag. This means that the hashtag character is part of the link.
But why did Identi.ca do hashtags differently from Twitter? Because Identi.ca did hashtags
before Twitter. AFAIK, when Identi.ca was launched, it had support for hashtags right away. About one year before Twitter.
The hashtag itself had already been invented by the Twitter community. Chris Messina had already codified it in 2007. But it wasn't until 2009 that Twitter actually introduced a technological implementation to support it.
Again, Identi.ca must have had hashtags as early as 2008, and there was no way that Identi.ca creator Evan Prodromou could possibly predict what Twitter would do the following year. So he did what he thought was right and what actually made sense to him.
But nowadays, everybody "knows" that Twitter had the world's very first hashtag implementation ever because nobody, even in the Fediverse, has ever heard of Identi.ca. I mean, the majority of Fediverse users "know" that the Fediverse started with Mastodon.
You know, just like Officer James Barrett "knew" that there is no intelligent life outside Earth only a few minutes before he became Agent J of the Men In Black.
This is also why just about all Fediverse software that does hashtags the Twitter way expects
everything to do hashtags the Twitter way. It does not expect hashtags to be done differently. And when a message comes in from Friendica, Hubzilla, (streams) or Forte with hashtags in it, it fails at varying degrees of ungracefully.
Hashtags with the hashtag character outside the link are older than hashtags with the hashtag character inside that they're not only completely unexpected, that they cause software to malfunction, but the same software often can't even handle that malfunction. It's a miracle that the Friendica/Hubzilla family doesn't cause Fediverse servers to crash or even server databases to go corrupt by simply sending hashtags.
Mastodon used to be an exception of sorts, but only because, before version 4.0 from October, 2022, its HTML "sanitiser" actually ripped out any and all rich text code from incoming messages and left nothing but plain text behind. And then it didn't recognise hashtags in messages from outside Mastodon as hashtags at all.
When Mastodon 4.0 came and supported
some rich text, including embedded links, it went haywire, of course. But then someone from Friendica and Hubzilla went in and complained about this malfunction
and explained what happened, why it happened and why it was not Friendica and Hubzilla that did things wrong. Besides, if something utterly defaces "toots", then Mastodon developers
do step in to stop it. After all, Mastodon has a few more of them at hand, paid, full-time professionals even. You have to give it that.
Which takes us back to Sharkey. Sharkey is developed by a small handful of individuals in their spare time. Granted, it's a soft fork of Misskey, so a lot of development work is done by the Misskey devs and taken over by the Sharkey devs, but they still have to weave the code changes coming from Misskey in and make them work with what's different on Sharkey.
So it turned out that
(Link content warning: eye contact) this bug has already been filed to the Sharkey devs in October, 2024. All that has happened since then until today was that Hazelnoot added two labels. But the bug report came with no explanations. In fact, it misattributed one of my Hubzilla posts as a Friendica post.
And in fact, it turned out that this is actually
(Link content warning: Microsoft GitHub link, eye contact) a Misskey bug which has been filed in January, 2024, two years ago. The bug report is a bit more elaborate, but the reporter still knew precious little about what's going on. So I wrote a comment in which I explained the bug from a Friendica/Hubzilla POV as well as what's going on on the technical side, and why the error has to be on Misskey's side.
I hope this will finally help get the bug fixed. Unfortunately, this fix would come too late for Iceshrimp. Iceshrimp-JS is a true Forkey, but in maintenance mode, so I guess only security patches and critical bugfixes will be merged from Misskey, if anything. And Iceshrimp.NET is a complete rewrite of a pre-this-fix Misskey fork, so the Iceshrimp devs probably don't know about this issue either. If it fails ungracefully upon receiving hashtags with the hashtag character outside, it will require its own bug report.
#
Long #
LongPost #
CWLong #
CWLongPost #
FediMeta #
FediverseMeta #
CWFediMeta #
CWFediverseMeta #
Hashtag #
Hashtags #
HashtagMeta #
CWHashtagMeta #
Twitter #
𝕏 #
Fediverse #
Mastodon #
Pleroma #
Akkoma #
Misskey #
Forkey #
Forkeys #
Sharkey #
Iceshrimp #
Iceshrimp-JS #
Iceshrimp.NET #
Identi.ca #
Laconi.ca #
StatusNet #
Friendica #
Hubzilla #
Streams #
(streams) #
Forte