"Neofeud is packed with passion, personality, and powerful political commentary. When you play, you're stepping into someone's bold and deeply personal vision of the future." --Steam reviewer store.steampowered.com/app/673850/N... #indiedev #indiegame #retrogames #dystopian
ActivityPub Server’s Custom Reply‑Control Extensions Undermine Federation
It seems like Activitbypub developers are extending ActivityPub with optional metadata to fix a lot of its issues, but that is still problematic. Trying to add moderation tools and user control to threads seems to be the ongoing battle. I am fascinated by dumpster fires, so I’ve started looking at the ActivityPub protocol in detail. I tend to become fascinated with things that are going down in flames.
As a brief recap of the problem:
So, one of the very popular features on Bluesky—also popular on Twitter—is the ability to select who can reply to a post. A major issue in the Fediverse is the inability to decide who can reply, and once you block someone, their harassing reply is still there. I honestly thought it was simply a case of them choosing not to add or address it for cultural reasons. What is clear from that thread is that they were always aware that the ActivityPub protocol and most Fediverse implementations don’t provide a universal way to control reply visibility or enforce blocks across instances.
An ActivityPub server that has reply control is GoToSocial. ActivityPub, as defined by the W3C specification, standardizes how servers federate activities. It defines actors, inboxes, outboxes, and activity types (Create, Follow, Like, Announce, etc.) expressed using ActivityStreams 2.0. It also specifies delivery mechanics (including how a Create activity reaches another server’s inbox) and how collections behave.
The specification does not include interaction policy semantics such as “only followers may reply” or “replies require manual approval.” There is no field in the normative vocabulary requiring conforming servers to enforce reply permissions. That category of rule is outside the protocol’s defined contract.
GoToSocial implements reply controls through what it calls interaction policies. These appear as additional properties on ActivityStreams objects using a custom JSON-LD namespace controlled by the GoToSocial project.
JSON-LD permits additional namespaced terms. This means the document remains structurally valid ActivityStreams and federates normally. The meaning of those custom fields, however, comes from GoToSocial’s own documentation and implementation. Other servers can ignore them without violating ActivityPub because they are not part of the interoperable core vocabulary.
Enforcement occurs locally. When a remote server sends a reply—a Create activity whose object references another via inReplyTo—ActivityPub governs delivery, not acceptance criteria. Whether the receiving server checks a reply policy, rejects the activity, queues it, or displays it is determined in the server’s inbox-processing code. The decision to accept, display, or require approval happens after successful protocol-level delivery. This behavior belongs to the application layer.
These are server-side features layered on top of ActivityPub’s transport and data model that are not actually part of ActivityPub. The protocol ensures standardized delivery of activities; however, the server implementation defines additional constraints and user-facing behavior. Two GoToSocial instances may both recognize and act on the same extension fields. However, a different implementation, such as Mastodon, has no obligation under the specification to interpret or enforce GoToSocial’s interactionPolicy properties. These fields function as extension metadata rather than protocol requirements.
The semantics of GoToSocial are not part of the specification’s defined vocabulary and processing rules for ActivityPub. They no longer operate purely at the protocol layer; it has become an application-layer contract implemented by specific servers.
Let’s use the AT Protocol as an example. Bluesky’s direct messages (DMs) are not currently part of the AT Protocol (ATProto). The AT Protocol has nothing that specifies anything for DMs, so DMs are not part of the AT Protocol. The AT Protocol was designed to handle public social interactions, but it does not define private or encrypted messaging. Bluesky implemented DMs at the application level, outside of the core protocol. DMs are centralized and stored on Bluesky’s servers. What is happening with servers like GoToSocial is sort of like that. The difference is that the AT Protocol was designed for different app views; ActivityPub was not.
The issue is the divergence in semantic interpretation that emerges at the interpretation layer. ActivityPub standardizes message delivery and defines common activity types. However, it leaves extension semantics and application-layer policy decisions to individual implementations. Servers may introduce custom JSON-LD namespaces and enforce local behaviors, such as reply restrictions, while remaining protocol-compliant. But, the noise created by divergences are problematic, because it creates unexpected, unintended, and unpredictable behavior.
Divergence appears when implementations rely on non-normative metadata and assume reciprocal handling to preserve a consistent user experience. Behavioral alignment then varies. Syntactic exchange succeeds, but behavioral consistency is not guaranteed. Though instances continue to federate at the transport level, policy semantics and processing logic differ across deployments. Those differences produce inconsistent experiences and results between implementations.
That leads to fragmentation, specifically semantic or behavioral fragmentation and an inconsistent user experiences. ActivityPub ensures syntactic interoperability, but semantic interoperability (everyone interprets and enforces rules the same way) varies. This creates a system that is federated at the transport level yet fragmented in behavior and expectations across implementations. It is funny how the thing that the fediverse touted has made the entire thing very brittle. ActivityPub technically federates correctly, but semantically falls apart once servers start adding their own behavioral rules.
Borked AI, constant brownouts, & painted-plastic produce... Big Box Biz is goin' bust! Time for a system change. (Screenshot from Neofeud 2, my 90's-style #adventuregame!) Neofeud 1: https://store.steampowered.com/app/673850/Neofeud/
https://silverspook.itch.io/neofeud
#indiedev #cyberpunk #indiegame #SteamDeck #noai #artist #art #retrogames
"Neofeud is packed with passion, personality, and powerful political commentary. When you play, you're stepping into someone's bold and deeply personal vision of the future." --Steam reviewer store.steampowered.com/app/673850/N... #indiedev #indiegame #retrogames #dystopian
ActivityPub Server’s Custom Reply‑Control Extensions Undermine Federation
It seems like Activitbypub developers are extending ActivityPub with optional metadata to fix a lot of its issues, but that is still problematic. Trying to add moderation tools and user control to threads seems to be the ongoing battle. I am fascinated by dumpster fires, so I’ve started looking at the ActivityPub protocol in detail. I tend to become fascinated with things that are going down in flames.
As a brief recap of the problem:
So, one of the very popular features on Bluesky—also popular on Twitter—is the ability to select who can reply to a post. A major issue in the Fediverse is the inability to decide who can reply, and once you block someone, their harassing reply is still there. I honestly thought it was simply a case of them choosing not to add or address it for cultural reasons. What is clear from that thread is that they were always aware that the ActivityPub protocol and most Fediverse implementations don’t provide a universal way to control reply visibility or enforce blocks across instances.
An ActivityPub server that has reply control is GoToSocial. ActivityPub, as defined by the W3C specification, standardizes how servers federate activities. It defines actors, inboxes, outboxes, and activity types (Create, Follow, Like, Announce, etc.) expressed using ActivityStreams 2.0. It also specifies delivery mechanics (including how a Create activity reaches another server’s inbox) and how collections behave.
The specification does not include interaction policy semantics such as “only followers may reply” or “replies require manual approval.” There is no field in the normative vocabulary requiring conforming servers to enforce reply permissions. That category of rule is outside the protocol’s defined contract.
GoToSocial implements reply controls through what it calls interaction policies. These appear as additional properties on ActivityStreams objects using a custom JSON-LD namespace controlled by the GoToSocial project.
JSON-LD permits additional namespaced terms. This means the document remains structurally valid ActivityStreams and federates normally. The meaning of those custom fields, however, comes from GoToSocial’s own documentation and implementation. Other servers can ignore them without violating ActivityPub because they are not part of the interoperable core vocabulary.
Enforcement occurs locally. When a remote server sends a reply—a Create activity whose object references another via inReplyTo—ActivityPub governs delivery, not acceptance criteria. Whether the receiving server checks a reply policy, rejects the activity, queues it, or displays it is determined in the server’s inbox-processing code. The decision to accept, display, or require approval happens after successful protocol-level delivery. This behavior belongs to the application layer.
These are server-side features layered on top of ActivityPub’s transport and data model that are not actually part of ActivityPub. The protocol ensures standardized delivery of activities; however, the server implementation defines additional constraints and user-facing behavior. Two GoToSocial instances may both recognize and act on the same extension fields. However, a different implementation, such as Mastodon, has no obligation under the specification to interpret or enforce GoToSocial’s interactionPolicy properties. These fields function as extension metadata rather than protocol requirements.
The semantics of GoToSocial are not part of the specification’s defined vocabulary and processing rules for ActivityPub. They no longer operate purely at the protocol layer; it has become an application-layer contract implemented by specific servers.
Let’s use the AT Protocol as an example. Bluesky’s direct messages (DMs) are not currently part of the AT Protocol (ATProto). The AT Protocol has nothing that specifies anything for DMs, so DMs are not part of the AT Protocol. The AT Protocol was designed to handle public social interactions, but it does not define private or encrypted messaging. Bluesky implemented DMs at the application level, outside of the core protocol. DMs are centralized and stored on Bluesky’s servers. What is happening with servers like GoToSocial is sort of like that. The difference is that the AT Protocol was designed for different app views; ActivityPub was not.
The issue is the divergence in semantic interpretation that emerges at the interpretation layer. ActivityPub standardizes message delivery and defines common activity types. However, it leaves extension semantics and application-layer policy decisions to individual implementations. Servers may introduce custom JSON-LD namespaces and enforce local behaviors, such as reply restrictions, while remaining protocol-compliant. But, the noise created by divergences are problematic, because it creates unexpected, unintended, and unpredictable behavior.
Divergence appears when implementations rely on non-normative metadata and assume reciprocal handling to preserve a consistent user experience. Behavioral alignment then varies. Syntactic exchange succeeds, but behavioral consistency is not guaranteed. Though instances continue to federate at the transport level, policy semantics and processing logic differ across deployments. Those differences produce inconsistent experiences and results between implementations.
That leads to fragmentation, specifically semantic or behavioral fragmentation and an inconsistent user experiences. ActivityPub ensures syntactic interoperability, but semantic interoperability (everyone interprets and enforces rules the same way) varies. This creates a system that is federated at the transport level yet fragmented in behavior and expectations across implementations. It is funny how the thing that the fediverse touted has made the entire thing very brittle. ActivityPub technically federates correctly, but semantically falls apart once servers start adding their own behavioral rules.
Completly misunderstanding how society works is what tech bros do best! 😂
@bookstodon @books @joinin
@worldbuilding @humor@fedigroups.social @humor@fedigroups.social @humor@lemmy.world @aiop
#Tech #Bro #Dystopian
#SpeculativeFiction #FantasyBooks
#FantasyMemes #SciFiMemes #Fantasy #SciFi #Meme #Memes #Humor #Humour #Funny
#Low #High #Epic #Science #Opera #Hard #CottageCore #SolarPunk #Comedic #Whatever #GiveMeAllYouveGot
#Book #Books #Novel #Novels #Bookstodon #Bookworm #Bookwyrm #BookLove
Completly misunderstanding how society works is what tech bros do best! 😂
@bookstodon @books @joinin
@worldbuilding @humor@fedigroups.social @humor@fedigroups.social @humor@lemmy.world @aiop
#Tech #Bro #Dystopian
#SpeculativeFiction #FantasyBooks
#FantasyMemes #SciFiMemes #Fantasy #SciFi #Meme #Memes #Humor #Humour #Funny
#Low #High #Epic #Science #Opera #Hard #CottageCore #SolarPunk #Comedic #Whatever #GiveMeAllYouveGot
#Book #Books #Novel #Novels #Bookstodon #Bookworm #Bookwyrm #BookLove
I have released the latest volume in the Broke and Dirt sample, loop, sound asset series!
https://music.control.org/brokeanddirt004/
This is less "hit factory" and more abandoned factory. Slap on your steel toes and mask and come on in. Over 100 one-shots and loops from found sound, field recordings, bad mics on the drum kit with lots of drag, some synths, and much more of dirty, nasty building blocks run thru the broken VHS deck. Ready to use or to further chop, glitch and mangle. Bound to be something you can layer in to joyfully #endirtify your proceedings.
My favourite in terms of what the sound was built from is AmbientWarning01. Definitely can hear that in a game or horror/dystopia soundtrack. To that end, if you want more of something, less of something, alterations, or custom sound assets for your game, video, project, please reach out. I'd love to collab and I am available for donate what you can #commissions.
Usually new releases go out via code for supporters first but let's have a go with donate what you can if you can straight away for this one. Just tick paid and have at it if you have no coin.
All CC-BY. Get to glitching team. Stomp in solidarity!
#soundtrack #gameDesign #soundDesign #industrial #horror #dystopian #music #fediMusic #samples #loops #commissionsopen #cc-by #boostsWelcome #noise #drums #synth #faircamp
I have released the latest volume in the Broke and Dirt sample, loop, sound asset series!
https://music.control.org/brokeanddirt004/
This is less "hit factory" and more abandoned factory. Slap on your steel toes and mask and come on in. Over 100 one-shots and loops from found sound, field recordings, bad mics on the drum kit with lots of drag, some synths, and much more of dirty, nasty building blocks run thru the broken VHS deck. Ready to use or to further chop, glitch and mangle. Bound to be something you can layer in to joyfully #endirtify your proceedings.
My favourite in terms of what the sound was built from is AmbientWarning01. Definitely can hear that in a game or horror/dystopia soundtrack. To that end, if you want more of something, less of something, alterations, or custom sound assets for your game, video, project, please reach out. I'd love to collab and I am available for donate what you can #commissions.
Usually new releases go out via code for supporters first but let's have a go with donate what you can if you can straight away for this one. Just tick paid and have at it if you have no coin.
All CC-BY. Get to glitching team. Stomp in solidarity!
#soundtrack #gameDesign #soundDesign #industrial #horror #dystopian #music #fediMusic #samples #loops #commissionsopen #cc-by #boostsWelcome #noise #drums #synth #faircamp
"Neofeud is packed with passion, personality, and powerful political commentary. When you play, you're stepping into someone's bold and deeply personal vision of the future." --Steam reviewer https://store.steampowered.com/app/673850/Neofeud/ #indiedev #indiegame #retrogames #dystopian
A change of pace, and greener pastures. Strange new indigenous worlds beyond poverty & endless war. In Neofeud 2, my retro-adventure game, coming soon! NF1:https://store.steampowered.com/app/673850/Neofeud/
https://silverspook.itch.io/neofeud
#gamedev #indiedev #scifi #visualnovel #SteamDeck #indiegame #noAI #art #artist #scifiart
"Neofeud is packed with passion, personality, and powerful political commentary. When you play, you're stepping into someone's bold and deeply personal vision of the future." --Steam reviewer https://store.steampowered.com/app/673850/Neofeud/ #indiedev #indiegame #retrogames #dystopian
"Neofeud is packed with passion, personality, and powerful political commentary. When you play, you're stepping into someone's bold and deeply personal vision of the future." --Steam reviewer https://store.steampowered.com/app/673850/Neofeud/ #indiedev #indiegame #retrogames #dystopian
Takes elbow grease and spitting skills to hack it as a Siliconth in Neofeud 2. Neofeud 1 is 70% off now, #2 (pictured) is coming soon! https://store.steampowered.com/app/673850/Neofeud/
https://silverspook.itch.io/neofeud
#indiedev #cyberpunk #adventuregame #indiegame #retrogames #steamdeck #noaiart #Artist #steamwintersale
"Neofeud is packed with passion, personality, and powerful political commentary. When you play, you're stepping into someone's bold and deeply personal vision of the future." --Steam reviewer https://store.steampowered.com/app/673850/Neofeud/ #indiedev #indiegame #retrogames #dystopian
"Neofeud is packed with passion, personality, and powerful political commentary. When you play, you're stepping into someone's bold and deeply personal vision of the future." --Steam reviewer https://store.steampowered.com/app/673850/Neofeud/ #indiedev #indiegame #retrogames #dystopian
"Greenscraper" - the more solarpunk side of Neofeud 2, the sequel to my cyberpunk adventure game Neofeud 1! https://store.steampowered.com/app/673850/Neofeud/
https://silverspook.itch.io/neofeud
#cyberpunk #scifi #indie #IndieGameDev #indiegame #indiedev #visualnovel #steamdeck #Noai #retrogames
"Neofeud is packed with passion, personality, and powerful political commentary. When you play, you're stepping into someone's bold and deeply personal vision of the future." --Steam reviewer https://store.steampowered.com/app/673850/Neofeud/ #indiedev #indiegame #retrogames #dystopian
Star Wars in a galaxy far, far away are brought to Admiral Olympus' front lawn! In my 90's-style #dystopian adventure game, Neofeud 2! (Currently working on a demo!) Neofeud 1: https://store.steampowered.com/app/673850/Neofeud/
https://silverspook.itch.io/neofeud
#indiegame #indiedev #gamedev #retrogame